diff options
Diffstat (limited to 'org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/composite/views/CompositeCheatSheetPage.java')
-rw-r--r-- | org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/composite/views/CompositeCheatSheetPage.java | 229 |
1 files changed, 147 insertions, 82 deletions
diff --git a/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/composite/views/CompositeCheatSheetPage.java b/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/composite/views/CompositeCheatSheetPage.java index 526cfb43e..3fdf4a30f 100644 --- a/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/composite/views/CompositeCheatSheetPage.java +++ b/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/composite/views/CompositeCheatSheetPage.java @@ -38,8 +38,9 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.cheatsheets.ICompositeCheatSheetTask; -import org.eclipse.ui.cheatsheets.ITaskEditor; -import org.eclipse.ui.cheatsheets.ITaskExplorer; +import org.eclipse.ui.cheatsheets.IEditableTask; +import org.eclipse.ui.cheatsheets.TaskEditor; +import org.eclipse.ui.cheatsheets.TaskExplorer; import org.eclipse.ui.forms.FormColors; import org.eclipse.ui.forms.ManagedForm; import org.eclipse.ui.forms.events.HyperlinkAdapter; @@ -50,9 +51,10 @@ import org.eclipse.ui.internal.cheatsheets.CheatSheetPlugin; import org.eclipse.ui.internal.cheatsheets.ICheatSheetResource; import org.eclipse.ui.internal.cheatsheets.Messages; import org.eclipse.ui.internal.cheatsheets.actions.IMenuContributor; -import org.eclipse.ui.internal.cheatsheets.composite.model.CheatSheetTask; +import org.eclipse.ui.internal.cheatsheets.composite.model.AbstractTask; import org.eclipse.ui.internal.cheatsheets.composite.model.CompositeCheatSheetModel; import org.eclipse.ui.internal.cheatsheets.composite.model.CompositeCheatSheetSaveHelper; +import org.eclipse.ui.internal.cheatsheets.composite.model.EditableTask; import org.eclipse.ui.internal.cheatsheets.composite.model.SuccesorTaskFinder; import org.eclipse.ui.internal.cheatsheets.composite.parser.ICompositeCheatsheetTags; import org.eclipse.ui.internal.cheatsheets.registry.CheatSheetRegistryReader; @@ -72,13 +74,14 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi private PageBook explorerContainer; private PageBook taskEditorContainer; private CompositeCheatSheetModel model; - private ITaskExplorer currentExplorer; + private TaskExplorer currentExplorer; private ScrolledFormText descriptionPanel; private ScrolledFormText completePanel; private CompositeCheatSheetSaveHelper saveHelper; private static final String START_HREF = "__start__"; //$NON-NLS-1$ + private static final String SKIP_HREF = "__skip__"; //$NON-NLS-1$ private ICompositeCheatSheetTask selectedTask; public CompositeCheatSheetPage(CompositeCheatSheetModel model) { @@ -186,7 +189,7 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi } private void setCurrentExplorerFromId(String explorerId) { - ITaskExplorer explorer = getTaskExplorer(explorerId); + TaskExplorer explorer = getTaskExplorer(explorerId); if (explorer!=null) { explorer.setCompositeCheatSheet(this.model); explorer.setFocus(); @@ -196,10 +199,10 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi private void setExplorerVisible(String id) { Control [] excontrols = explorerContainer.getChildren(); - ITaskExplorer explorer=null; + TaskExplorer explorer=null; for (int i=0; i<excontrols.length; i++) { Control excontrol = excontrols[i]; - explorer = (ITaskExplorer)excontrol.getData(ICompositeCheatsheetTags.EXPLORER); + explorer = (TaskExplorer)excontrol.getData(ICompositeCheatsheetTags.EXPLORER); if (explorer.getId().equals(id)) { explorerContainer.showPage(excontrol); setCurrentExplorer(explorer); @@ -208,7 +211,7 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi } } - private void setCurrentExplorer(ITaskExplorer explorer) { + private void setCurrentExplorer(TaskExplorer explorer) { if (currentExplorer!=null) { currentExplorer.getSelectionProvider().removeSelectionChangedListener(this); } @@ -217,14 +220,14 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi updateForSelection(currentExplorer.getSelectionProvider().getSelection()); } - private ITaskExplorer getTaskExplorer(String id) { + private TaskExplorer getTaskExplorer(String id) { Control [] excontrols = explorerContainer.getChildren(); - ITaskExplorer explorer=null; + TaskExplorer explorer=null; for (int i=0; i<excontrols.length; i++) { Control excontrol = excontrols[i]; Object data = excontrol.getData(ICompositeCheatsheetTags.EXPLORER); - if (data instanceof ITaskExplorer) { - explorer = (ITaskExplorer)data; + if (data instanceof TaskExplorer) { + explorer = (TaskExplorer)data; if (explorer.getId().equals(id)) { return explorer; } @@ -261,19 +264,26 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi break; case ICompositeCheatSheetTask.IN_PROGRESS: // In progress, show the task editor - showTaskEditor(task); + if (task instanceof IEditableTask) { + showTaskEditor((EditableTask) task); + } else { + showDescription(task); + } break; case ICompositeCheatSheetTask.COMPLETED: + case ICompositeCheatSheetTask.SKIPPED: // complete task - show the completion panel showComplete(task); break; } } - private void showTaskEditor(ICompositeCheatSheetTask task) { + private void showTaskEditor(EditableTask task) { startIfSelected(task); - ITaskEditor editor = getTaskEditor(task); - setCurrentEditor(editor.getControl().getParent()); + TaskEditor editor = getTaskEditor(task); + if (editor != null) { + setCurrentEditor(editor.getControl().getParent()); + } } public void saveState() { @@ -291,16 +301,9 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi text.setFont("header", JFaceResources.getHeaderFont()); //$NON-NLS-1$ text.setColor("title", mform.getToolkit().getColors().getColor(FormColors.TITLE)); //$NON-NLS-1$ text.setImage("start", CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_START)); //$NON-NLS-1$ + text.setImage("skip", CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_SKIP)); //$NON-NLS-1$ descriptionPanel.setFormText(text); - text.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - if (e.getHref().equals(START_HREF)) { - ICompositeCheatSheetTask task = (ICompositeCheatSheetTask)descriptionPanel.getData(ICompositeCheatsheetTags.TASK); - task.advanceState(); - startIfSelected(task); - } - } - }); + text.addHyperlinkListener(new DescriptionLinkListener()); } else { text = descriptionPanel.getFormText(); } @@ -314,34 +317,24 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi buf.append("<p>"); //$NON-NLS-1$ buf.append(desc); buf.append("</p>"); //$NON-NLS-1$ - } - else + } else { buf.append(desc); - if (task.getKind()!=null) { - if (task.isStartable()) { - buf.append("<p/>"); //$NON-NLS-1$ - buf.append("<p><a href=\""); //$NON-NLS-1$ - buf.append(START_HREF); - buf.append("\">"); //$NON-NLS-1$ - buf.append("<img href=\"start\"/> "); //$NON-NLS-1$ - buf.append(Messages.COMPOSITE_PAGE_START_TASK); - buf.append("</a></p>"); //$NON-NLS-1$ + } + + if (!task.requiredTasksCompleted()) { + showBlockedTasks(task, buf); + } else { + if (task instanceof IEditableTask) { + addStartHyperlink(buf); } else { - buf.append("<p/>"); //$NON-NLS-1$ - buf.append("<p>"); //$NON-NLS-1$ - buf.append("<b>"); //$NON-NLS-1$ - buf.append(Messages.COMPOSITE_PAGE_BLOCKED); - buf.append("</b>"); //$NON-NLS-1$ - buf.append("</p>"); //$NON-NLS-1$// Add the list of blocking tasks - - ICompositeCheatSheetTask[] requiredTasks = task.getRequiredTasks(); - for (int i = 0; i < requiredTasks.length; i++) { - addIfIncomplete(buf, requiredTasks[i]); - } - buf.append("<p>"); //$NON-NLS-1$ - buf.append("</p>"); //$NON-NLS-1$ + showSuccesorTaskLinks(task, buf); + } + AbstractTask abstractTask = (AbstractTask)task; + if (abstractTask.isSkippable()) { + addSkipHyperlink(buf); } } + buf.append("</form>"); //$NON-NLS-1$ text.setText(buf.toString(), true, false); @@ -349,6 +342,42 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi descriptionPanel.reflow(true); setCurrentEditor(descriptionPanel); } + + private void showBlockedTasks(final ICompositeCheatSheetTask task, StringBuffer buf) { + buf.append("<p/>"); //$NON-NLS-1$ + buf.append("<p>"); //$NON-NLS-1$ + buf.append("<b>"); //$NON-NLS-1$ + buf.append(Messages.COMPOSITE_PAGE_BLOCKED); + buf.append("</b>"); //$NON-NLS-1$ + buf.append("</p>"); //$NON-NLS-1$// Add the list of blocking tasks + + ICompositeCheatSheetTask[] requiredTasks = task.getRequiredTasks(); + for (int i = 0; i < requiredTasks.length; i++) { + addIfIncomplete(buf, requiredTasks[i]); + } + buf.append("<p>"); //$NON-NLS-1$ + buf.append("</p>"); //$NON-NLS-1$ + } + + private void addSkipHyperlink(StringBuffer buf) { + buf.append("<p/>"); //$NON-NLS-1$ + buf.append("<p><a href=\""); //$NON-NLS-1$ + buf.append(SKIP_HREF); + buf.append("\">"); //$NON-NLS-1$ + buf.append("<img href=\"skip\"/> "); //$NON-NLS-1$ + buf.append(Messages.COMPOSITE_PAGE_SKIP_TASK); + buf.append("</a></p>"); //$NON-NLS-1$ + } + + private void addStartHyperlink(StringBuffer buf) { + buf.append("<p/>"); //$NON-NLS-1$ + buf.append("<p><a href=\""); //$NON-NLS-1$ + buf.append(START_HREF); + buf.append("\">"); //$NON-NLS-1$ + buf.append("<img href=\"start\"/> "); //$NON-NLS-1$ + buf.append(Messages.COMPOSITE_PAGE_START_TASK); + buf.append("</a></p>"); //$NON-NLS-1$ + } private void addIfIncomplete(StringBuffer buf, ICompositeCheatSheetTask task) { if (task.getState() != ICompositeCheatSheetTask.COMPLETED) { @@ -364,7 +393,7 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi */ private void startIfSelected(ICompositeCheatSheetTask task) { if (task == selectedTask) { - ITaskEditor editor = getTaskEditor(task); + TaskEditor editor = getTaskEditor(task); if (editor!=null) { setCurrentEditor(editor.getControl()); } @@ -375,26 +404,55 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi taskEditorContainer.showPage(c); } + private final class DescriptionLinkListener extends HyperlinkAdapter { + public void linkActivated(HyperlinkEvent e) { + String ref = (String)e.getHref(); + if (ref.equals(START_HREF)) { + Object data = descriptionPanel.getData(ICompositeCheatsheetTags.TASK); + if (data instanceof EditableTask) { + EditableTask task = (EditableTask)data; + task.setStarted(); + startIfSelected(task); + } + } + if (ref.equals(SKIP_HREF)) { + Object data = descriptionPanel.getData(ICompositeCheatsheetTags.TASK); + if (data instanceof AbstractTask) { + AbstractTask task = (AbstractTask)data; + task.setState(ICompositeCheatSheetTask.SKIPPED); + } + } + checkForTaskLink(ref); + } + } + private final class CompletionHyperlinkAdapter extends HyperlinkAdapter { public void linkActivated(HyperlinkEvent e) { String ref = (String)e.getHref(); if (ref.startsWith(REVIEW_TAG)) { String review = ref.substring(REVIEW_TAG.length()); - CheatSheetTask reviewTask = + AbstractTask reviewTask = model.getDependencies().getTask(review); - showTaskEditor(reviewTask); - } - if (ref.startsWith(NEXT_TASK_TAG)) { - String next = ref.substring(NEXT_TASK_TAG.length()); - CheatSheetTask nextTask = - model.getDependencies().getTask(next); - currentExplorer.setSelection - (new StructuredSelection(nextTask), true); + if (reviewTask instanceof EditableTask) { + showTaskEditor((EditableTask) reviewTask); + } } + checkForTaskLink(ref); + } + } + + private void checkForTaskLink(String ref) { + if (ref.startsWith(NEXT_TASK_TAG)) { + String next = ref.substring(NEXT_TASK_TAG.length()); + AbstractTask nextTask = + model.getDependencies().getTask(next); + currentExplorer.setSelection + (new StructuredSelection(nextTask), true); } } + private void showComplete(ICompositeCheatSheetTask task) { if (completePanel==null) { completePanel = new ScrolledFormText(taskEditorContainer, false); @@ -421,27 +479,32 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi buf.append(desc); } - // Add the links to the next tasks - ICompositeCheatSheetTask[] successorTasks = new SuccesorTaskFinder(task).getRecommendedSuccessors(); - for (int i = 0; i < successorTasks.length; i++) { - addSuccessorTask(buf, successorTasks[i]); - } + showSuccesorTaskLinks(task, buf); - // Add a link to redisplay the editor - buf.append("<p/>"); //$NON-NLS-1$ - buf.append("<p><a href=\""); //$NON-NLS-1$ - buf.append(REVIEW_TAG); - buf.append(task.getId()); - buf.append("\">"); //$NON-NLS-1$ - buf.append(Messages.COMPOSITE_PAGE_REVIEW_TASK); - String string = "</a></p>"; //$NON-NLS-1$ - buf.append(string); + if (task instanceof IEditableTask) { + // Add a link to redisplay the editor + buf.append("<p/>"); //$NON-NLS-1$ + buf.append("<p><a href=\""); //$NON-NLS-1$ + buf.append(REVIEW_TAG); + buf.append(task.getId()); + buf.append("\">"); //$NON-NLS-1$ + buf.append(Messages.COMPOSITE_PAGE_REVIEW_TASK); + buf.append("</a></p>"); //$NON-NLS-1$ + } buf.append("</form>"); //$NON-NLS-1$ completePanel.setText(buf.toString()); completePanel.reflow(true); setCurrentEditor(completePanel); } + + private void showSuccesorTaskLinks(ICompositeCheatSheetTask task, StringBuffer buf) { + // Add the links to the next tasks + ICompositeCheatSheetTask[] successorTasks = new SuccesorTaskFinder(task).getRecommendedSuccessors(); + for (int i = 0; i < successorTasks.length; i++) { + addSuccessorTask(buf, successorTasks[i]); + } + } private void addSuccessorTask(StringBuffer buf, ICompositeCheatSheetTask task) { buf.append("<p/>"); //$NON-NLS-1$ @@ -456,19 +519,19 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi /* * Get the task editor for this task. If no editor exists create one */ - private ITaskEditor getTaskEditor(ICompositeCheatSheetTask task) { - if (task instanceof CheatSheetTask) { - CheatSheetTask csTask = (CheatSheetTask)task; - if (csTask.getEditor() == null) { + private TaskEditor getTaskEditor(ICompositeCheatSheetTask task) { + if (task instanceof EditableTask) { + EditableTask editable = (EditableTask)task; + if (editable.getEditor() == null) { // Create a new editor using the extension point data - ITaskEditor editor = TaskEditorManager.getInstance().getEditor(task.getKind()); + TaskEditor editor = TaskEditorManager.getInstance().getEditor(task.getKind()); if (editor != null) { editor.createControl(taskEditorContainer, mform.getToolkit()); - editor.setInput(task, model.getTaskMemento(task.getId())); - csTask.setEditor(editor); + editor.setInput(editable, model.getTaskMemento(task.getId())); + editable.setEditor(editor); } } - return csTask.getEditor(); + return editable.getEditor(); } return null; @@ -497,7 +560,7 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi private int contributeRestartItem(Menu menu, int index) { MenuItem item = new MenuItem(menu, SWT.PUSH, index++); item.setText(Messages.RESTART_ALL_MENU); - // TODO set the image + item.setImage(CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_RESTART)); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (model != null) { @@ -506,6 +569,8 @@ public class CompositeCheatSheetPage extends Page implements ISelectionChangedLi Messages.COMPOSITE_RESTART_DIALOG_TITLE, Messages.COMPOSITE_RESTART_CONFIRM_MESSAGE)) { model.resetAllTasks(); + currentExplorer.setSelection + (new StructuredSelection(model.getRootTask()), true); } } } |