diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java | 1432 |
1 files changed, 0 insertions, 1432 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java deleted file mode 100644 index 9cf1a37d6..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java +++ /dev/null @@ -1,1432 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2005 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.ui.views; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.ActionContributionItem; -import org.eclipse.jface.action.IMenuCreator; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.CheckboxCellEditor; -import org.eclipse.jface.viewers.ComboBoxCellEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.ICellModifier; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TextCellEditor; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerDropAdapter; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.bugzilla.core.BugReport; -import org.eclipse.mylar.bugzilla.core.BugzillaRepository; -import org.eclipse.mylar.core.ITaskscapeListener; -import org.eclipse.mylar.core.MylarPlugin; -import org.eclipse.mylar.dt.MylarWebRef; -import org.eclipse.mylar.tasks.BugzillaTask; -import org.eclipse.mylar.tasks.Category; -import org.eclipse.mylar.tasks.ITask; -import org.eclipse.mylar.tasks.MylarTasksPlugin; -import org.eclipse.mylar.tasks.Task; -import org.eclipse.mylar.tasks.bugzilla.BugzillaStructureBridge; -import org.eclipse.mylar.tasks.ui.BugzillaTaskEditorInput; -import org.eclipse.mylar.tasks.ui.TaskEditorInput; -import org.eclipse.mylar.ui.MylarImages; -import org.eclipse.mylar.ui.MylarUiPlugin; -import org.eclipse.mylar.ui.actions.ToggleGlobalInterestFilteringAction; -import org.eclipse.mylar.ui.internal.views.Highlighter; -import org.eclipse.mylar.ui.internal.views.HighlighterImageDescriptor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.DragSourceEvent; -import org.eclipse.swt.dnd.DragSourceListener; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.dnd.TransferData; -import org.eclipse.swt.events.ControlEvent; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.TreeColumn; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IMemento; -import org.eclipse.ui.IViewSite; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.internal.Workbench; -import org.eclipse.ui.part.DrillDownAdapter; -import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.progress.IProgressService; - -/** - * @author Mik Kersten - */ -public class TaskListView extends ViewPart { - - private static TaskListView INSTANCE; - - //private CheckboxTreeViewer viewer; - private TreeViewer viewer; - private DrillDownAdapter drillDownAdapter; - - private Action refresh; - private Action createTask; - private Action createCategory; - private Action addBugzillaReport; - private Action rename; - private Action delete; - private Action doubleClickAction; - private Action clearSelectedTaskscapeAction; - - //private Action toggleIntersectionModeAction = new ToggleIntersectionModeAction(); - private Action toggleFilteringAction = new ToggleGlobalInterestFilteringAction(); - - private Action completeTask; - private Action incompleteTask; - private Action filterCompleteTask; - private Action filterInCompleteTask; - private PriorityDropDownAction filterOnPriority; - private PriorityFilter priorityFilter = new PriorityFilter(); - - protected String[] columnNames = new String[] { "", ".", "!", "Description", "handle" }; - protected int[] columnWidths = new int[] { 70, 20, 20, 120, 70 }; - private TreeColumn[] columns; - private IMemento taskListMemento; - public static final String columnWidthIdentifier = "org.eclipse.mylar.tasks.ui.views.tasklist.columnwidth"; - public static final String tableSortIdentifier = "org.eclipse.mylar.tasks.ui.views.tasklist.sortIndex"; - private int sortIndex = 2; - - private String[] PRIORITY_LEVELS = { "P1", "P2", "P3", "P4", "P5" }; - - private final class CreateTaskAction extends Action { - private boolean isCategory = false; - - public CreateTaskAction(boolean isCategory) { - this.isCategory = isCategory; - } - - @Override - public void run() { - String label = getLabelNameFromUser("task"); - if(label == null) return; - Task newTask = new Task(MylarTasksPlugin.getTaskListManager().genUniqueTaskId(), label); - - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task && !isCategory){ - ((Task)selectedObject).addSubtask(newTask); - } else { - if (isCategory) { - newTask.setIsCategory(true); - } - MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask); - } - MylarUiPlugin.getDefault().setHighlighterMapping( - newTask.getHandle(), - MylarUiPlugin.getDefault().getDefaultHighlighter().getName()); - viewer.refresh(); - } - } - - private final class PriorityDropDownAction extends Action implements IMenuCreator { - private Menu dropDownMenu = null; - - public PriorityDropDownAction() { - setText("Display Priorities"); - setToolTipText("Show Tasks with Priority Levels"); - setImageDescriptor(MylarImages.FILTER_DECLARATIONS); - setMenuCreator(this); - } - - public void dispose() { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - dropDownMenu = null; - } - } - - public Menu getMenu(Control parent) { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - } - dropDownMenu = new Menu(parent); - addActionsToMenu(); - return dropDownMenu; - } - - public Menu getMenu(Menu parent) { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - } - dropDownMenu = new Menu(parent); - addActionsToMenu(); - return dropDownMenu; - } - - public void addActionsToMenu() { - Action P1 = new Action(PRIORITY_LEVELS[0], AS_CHECK_BOX) { - @Override - public void run() { - MylarUiPlugin.getDefault().setP1FilterMode(!isChecked()); - if (isChecked()) { - priorityFilter.displayPriority(PRIORITY_LEVELS[0]); - } else { - priorityFilter.hidePriority(PRIORITY_LEVELS[0]); - } - viewer.refresh(); - } - }; - P1.setEnabled(true); - P1.setChecked(!MylarUiPlugin.getDefault().isP1FilterMode()); - P1.setToolTipText(PRIORITY_LEVELS[0]); - ActionContributionItem item= new ActionContributionItem(P1); - item.fill(dropDownMenu, -1); - - Action P2 = new Action(PRIORITY_LEVELS[1], AS_CHECK_BOX) { - @Override - public void run() { - MylarUiPlugin.getDefault().setP2FilterMode(!isChecked()); - if (isChecked()) { - priorityFilter.displayPriority(PRIORITY_LEVELS[1]); - } else { - priorityFilter.hidePriority(PRIORITY_LEVELS[1]); - } - viewer.refresh(); - } - }; - P2.setEnabled(true); - P2.setChecked(!MylarUiPlugin.getDefault().isP2FilterMode()); - P2.setToolTipText(PRIORITY_LEVELS[1]); - item= new ActionContributionItem(P2); - item.fill(dropDownMenu, -1); - - Action P3 = new Action(PRIORITY_LEVELS[2], AS_CHECK_BOX) { - @Override - public void run() { - MylarUiPlugin.getDefault().setP3FilterMode(!isChecked()); - if (isChecked()) { - priorityFilter.displayPriority(PRIORITY_LEVELS[2]); - } else { - priorityFilter.hidePriority(PRIORITY_LEVELS[2]); - } - viewer.refresh(); - } - }; - P3.setEnabled(true); - P3.setChecked(!MylarUiPlugin.getDefault().isP3FilterMode()); - P3.setToolTipText(PRIORITY_LEVELS[2]); - item= new ActionContributionItem(P3); - item.fill(dropDownMenu, -1); - - Action P4 = new Action(PRIORITY_LEVELS[3], AS_CHECK_BOX) { - @Override - public void run() { - MylarUiPlugin.getDefault().setP4FilterMode(!isChecked()); - if (isChecked()) { - priorityFilter.displayPriority(PRIORITY_LEVELS[3]); - } else { - priorityFilter.hidePriority(PRIORITY_LEVELS[3]); - } - viewer.refresh(); - } - }; - P4.setEnabled(true); - P4.setChecked(!MylarUiPlugin.getDefault().isP4FilterMode()); - P4.setToolTipText(PRIORITY_LEVELS[3]); - item= new ActionContributionItem(P4); - item.fill(dropDownMenu, -1); - - Action P5 = new Action(PRIORITY_LEVELS[4], AS_CHECK_BOX) { - @Override - public void run() { - MylarUiPlugin.getDefault().setP5FilterMode(!isChecked()); - if (isChecked()) { - priorityFilter.displayPriority(PRIORITY_LEVELS[4]); - } else { - priorityFilter.hidePriority(PRIORITY_LEVELS[4]); - } - viewer.refresh(); - } - }; - P5.setEnabled(true); - P5.setChecked(!MylarUiPlugin.getDefault().isP5FilterMode()); - P5.setToolTipText(PRIORITY_LEVELS[4]); - item= new ActionContributionItem(P5); - item.fill(dropDownMenu, -1); - } - public void run() { - } - } - - private ViewerFilter completeFilter = new ViewerFilter(){ - @Override - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (element instanceof ITask) { - if (((ITask)element).hasCompletedSubTasks(false)) { - return true; - } else { - return !((ITask)element).isCompleted(); - } - } else { - return false; - } - } - }; - - private ViewerFilter inCompleteFilter = new ViewerFilter(){ - @Override - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (element instanceof ITask) { - if (((ITask)element).hasCompletedSubTasks(true)) { - return true; - } else { - return ((ITask)element).isCompleted(); - } - } else { - return false; - } - } - }; - - public class PriorityFilter extends ViewerFilter { - // list of priorities that will be shown in the tasklistview - private List<String> priorities = new ArrayList<String>(); - - public PriorityFilter() { - // if filter is off, then add to list - if (!MylarUiPlugin.getDefault().isP1FilterMode()) { - displayPriority("P1"); - } - if (!MylarUiPlugin.getDefault().isP2FilterMode()) { - displayPriority("P2"); - } - if (!MylarUiPlugin.getDefault().isP3FilterMode()) { - displayPriority("P3"); - } - if (!MylarUiPlugin.getDefault().isP4FilterMode()) { - displayPriority("P4"); - } - if (!MylarUiPlugin.getDefault().isP5FilterMode()) { - displayPriority("P5"); - } - } - - public void displayPriority(String p) { - if (!priorities.contains(p)) { - priorities.add(p); - } - } - - public void hidePriority(String p) { - priorities.remove(p); - } - @Override - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (element instanceof ITask) { - ITask task = (ITask) element; - if (priorities.size() == PRIORITY_LEVELS.length) { - return true; - } else if (task.isCategory()) { - return true; - } else { - for (String filter : priorities) { - if (task.getPriority().equals(filter) || - task.hasSubTaskWithPriority(filter)) { - return true; - } - } - return false; - } - } - return false; - } - - }; - - class TaskListContentProvider implements IStructuredContentProvider, ITreeContentProvider { - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - // don't care if the input changes - } - public void dispose() { - // don't care if we are disposed - } - public Object[] getElements(Object parent) { - if (parent.equals(getViewSite())) { - return MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks().toArray(); - } - return getChildren(parent); - } - public Object getParent(Object child) { - if (child instanceof Task) { - return ((Task)child).getParent(); - } - return null; - } - public Object [] getChildren(Object parent) { - if (parent instanceof ITask) { - return ((ITask)parent).getChildren().toArray(); - } - return new Object[0]; - } - public boolean hasChildren(Object parent) { - if (parent instanceof ITask) { - ITask task = (ITask)parent; - return task.getChildren() != null && task.getChildren().size() > 0; - } - return false; - } - } - - public TaskListView() { - INSTANCE = this; - } - - class TaskListCellModifier implements ICellModifier { - - public boolean canModify(Object element, String property) { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - ITask task = (ITask) element; - switch (columnIndex) { - case 0: - return true; - case 1: - return false; - case 2: - return !(task instanceof BugzillaTask); - case 3: - return !(task instanceof BugzillaTask); - case 4: - return false; - } - return false; - } - - public Object getValue(Object element, String property) { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - ITask task = (ITask) element; - switch (columnIndex) { - case 0: - return new Boolean(task.isCompleted()); - case 1: - return ""; - case 2: - String priorityString = task.getPriority().substring(1); - return new Integer(priorityString); - case 3: - return task.getLabel(); - case 4: - return task.getHandle(); - } - return ""; - } - - public void modify(Object element, String property, Object value) { - int columnIndex = -1; - try { - columnIndex = Arrays.asList(columnNames).indexOf(property); - ITask task = (ITask) ((TreeItem) element).getData(); - switch (columnIndex) { - case 0: - if (!task.isCategory()) { - if (task.isActive()) { - MylarTasksPlugin.getTaskListManager().deactivateTask( - task); - } else { - MylarTasksPlugin.getTaskListManager().activateTask( - task); - } - } - viewer.setSelection(null); - break; - case 1: - break; - case 2: - Integer intVal = (Integer) value; - task.setPriority("P" + (intVal + 1)); - viewer.setSelection(null); - break; - case 3: - task.setLabel(((String) value).trim()); - MylarTasksPlugin.getTaskListManager().taskPropertyChanged(task, columnNames[3]); - viewer.setSelection(null); - break; - case 4: - break; - } - viewer.refresh(task); - } catch (Exception e) { - MylarPlugin.log(e, e.getMessage()); - } - } - } - - private class TaskListTableSorter extends ViewerSorter { - - private String column; - - public TaskListTableSorter(String column) { - super(); - this.column = column; - } - - /** - * compare - invoked when column is selected calls the actual comparison - * method for particular criteria - */ - @Override - public int compare(Viewer compareViewer, Object o1, Object o2) { - ITask task1 = (ITask) o1; - ITask task2 = (ITask) o2; - - if (task1.isCompleted()) return 1; - if (task2.isCompleted()) return -1; - if (column == columnNames[1]) { - if (task1 instanceof BugzillaTask && !(task2 instanceof BugzillaTask)) { - return 1; - } else { - return -1; - } - } else if (column == columnNames[2]) { - return task1.getPriority().compareTo(task2.getPriority()); - } else if (column == columnNames[3]) { - return task1.getLabel().compareTo(task2.getLabel()); - } else if (column == columnNames[4]){ - return task1.getPath().compareTo(task2.getPath()); - } else { - return 0; - } - } - } - - @Override - public void init(IViewSite site,IMemento memento) throws PartInitException { - init(site); - this.taskListMemento = memento; - } - - @Override - public void saveState(IMemento memento) { - IMemento colMemento = memento.createChild(columnWidthIdentifier); - - for (int i = 0; i < columnWidths.length; i++) { - IMemento m = colMemento.createChild("col"+i); - m.putInteger("width", columnWidths[i]); - } - - IMemento sorter = memento.createChild(tableSortIdentifier); - IMemento m = sorter.createChild("sorter"); - m.putInteger("sortIndex", sortIndex); - } - - private void restoreState() { - if (taskListMemento == null) - return; - IMemento taskListWidth = taskListMemento.getChild(columnWidthIdentifier); - if (taskListWidth != null) { - for (int i = 0; i < columnWidths.length; i++) { - IMemento m = taskListWidth.getChild("col"+i); - if (m != null) { - int width = m.getInteger("width"); - columnWidths[i] = width; - columns[i].setWidth(width); - } - } - } - IMemento sorterMemento = taskListMemento.getChild(tableSortIdentifier); - if (sorterMemento != null) { - IMemento m = sorterMemento.getChild("sorter"); - if (m != null) { - sortIndex = m.getInteger("sortIndex"); - } else { - sortIndex = 2; - } - } else { - sortIndex = 2; // default priority - } - viewer.setSorter(new TaskListTableSorter(columnNames[sortIndex])); - viewer.addFilter(priorityFilter); - viewer.refresh(); - } - - /** - * This is a callback that will allow us - * to create the viewer and initialize it. - */ - @Override - public void createPartControl(Composite parent) { - viewer = new TreeViewer(parent, SWT.VERTICAL | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION); - viewer.getTree().setHeaderVisible(true); - viewer.getTree().setLinesVisible(true); - viewer.setColumnProperties(columnNames); - viewer.setUseHashlookup(true); - - columns = new TreeColumn[columnNames.length]; - for (int i = 0; i < columnNames.length; i++) { - columns[i] = new TreeColumn(viewer.getTree(), 0); // SWT.LEFT - columns[i].setText(columnNames[i]); - columns[i].setWidth(columnWidths[i]); - final int index = i; - columns[i].addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - sortIndex = index; - viewer.setSorter(new TaskListTableSorter(columnNames[sortIndex])); - } - }); - columns[i].addControlListener(new ControlListener () { - public void controlResized(ControlEvent e) { - for (int j = 0; j < columnWidths.length; j++) { - if (columns[j].equals(e.getSource())) { - columnWidths[j] = columns[j].getWidth(); - } - } - } - public void controlMoved(ControlEvent e) { - // don't care if the control is moved - } - }); - - } - - CellEditor[] editors = new CellEditor[columnNames.length]; - TextCellEditor textEditor = new TextCellEditor(viewer.getTree()); - ((Text) textEditor.getControl()).setOrientation(SWT.LEFT_TO_RIGHT); - editors[0] = new CheckboxCellEditor(); - editors[1] = textEditor; - editors[2] = new ComboBoxCellEditor(viewer.getTree(), PRIORITY_LEVELS, SWT.READ_ONLY); - editors[3] = textEditor; - viewer.setCellEditors(editors); - viewer.setCellModifier(new TaskListCellModifier()); - viewer.setSorter(new TaskListTableSorter(columnNames[sortIndex])); - - drillDownAdapter = new DrillDownAdapter(viewer); - viewer.setContentProvider(new TaskListContentProvider()); - TaskListLabelProvider lp = new TaskListLabelProvider(); - lp.setBackgroundColor(parent.getBackground()); - viewer.setLabelProvider(lp); - viewer.setInput(getViewSite()); - - makeActions(); - hookContextMenu(); - hookDoubleClickAction(); - contributeToActionBars(); - ToolTipHandler toolTipHandler = new ToolTipHandler(viewer.getControl().getShell()); - toolTipHandler.activateHoverHelp(viewer.getControl()); - - initDragAndDrop(parent); - expandToActiveTasks(); - restoreState(); - } - - @MylarWebRef(name="Drag and drop article", url="http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html") - private void initDragAndDrop(Composite parent) { - Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; - - viewer.addDragSupport(DND.DROP_MOVE, types, new DragSourceListener() { - - public void dragStart(DragSourceEvent event) { - if (((StructuredSelection) viewer.getSelection()).isEmpty()) { - event.doit = false; - } - } - - public void dragSetData(DragSourceEvent event) { - StructuredSelection selection = (StructuredSelection) viewer.getSelection(); - if (!selection.isEmpty()) { - event.data = "" + ((ITask) selection.getFirstElement()).getHandle(); - } else { - event.data = "null"; - } - } - - public void dragFinished(DragSourceEvent event) { - // don't care if the drag is done - } - }); - - viewer.addDropSupport(DND.DROP_MOVE, types, new ViewerDropAdapter(viewer) { - { - setFeedbackEnabled(false); - } - - @Override - public boolean performDrop(Object data) { - Object selectedObject = ((IStructuredSelection) ((TreeViewer) getViewer()) - .getSelection()).getFirstElement(); - if (selectedObject instanceof ITask) { - ITask source = (ITask) selectedObject; - ITask target = (ITask) getCurrentTarget(); - source.getParent().removeSubtask(source); - target.addSubtask(source); - viewer.refresh(); - return true; - } - return false; - } - - @Override - public boolean validateDrop(Object targetObject, int operation, - TransferData transferType) { - Object selectedObject = ((IStructuredSelection) ((TreeViewer) getViewer()) - .getSelection()).getFirstElement(); - if (selectedObject instanceof ITask) { - ITask source = (ITask) selectedObject; - ITask target = (ITask) getCurrentTarget(); - if (target != null && !target.isCategory()) - return false; - if (source.isCategory()) - return false; - } - return TextTransfer.getInstance().isSupportedType(transferType); - } - - }); - } - - private void expandToActiveTasks() { - List<ITask> activeTasks = MylarTasksPlugin.getTaskListManager().getTaskList().getActiveTasks(); - for (ITask t : activeTasks) { - viewer.expandToLevel(t, 0); - } - } - - private void hookContextMenu() { - MenuManager menuMgr = new MenuManager("#PopupMenu"); - menuMgr.setRemoveAllWhenShown(true); - menuMgr.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - TaskListView.this.fillContextMenu(manager); - } - }); - Menu menu = menuMgr.createContextMenu(viewer.getControl()); - viewer.getControl().setMenu(menu); - getSite().registerContextMenu(menuMgr, viewer); - } - - private void contributeToActionBars() { - IActionBars bars = getViewSite().getActionBars(); - fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - } - - private void fillLocalPullDown(IMenuManager manager) { -// manager.add(createCategory); -// manager.add(new Separator()); -// manager.add(createTask); - } - - void fillContextMenu(IMenuManager manager) { - manager.add(completeTask); - manager.add(incompleteTask); -// manager.add(new Separator()); - manager.add(createTask); - manager.add(addBugzillaReport); - manager.add(rename); - manager.add(delete); - manager.add(clearSelectedTaskscapeAction); - manager.add(new Separator()); - MenuManager subMenuManager = new MenuManager("choose highlighter"); - for (Iterator<Highlighter> it = MylarUiPlugin.getDefault().getHighlighters().iterator(); it.hasNext();) { - final Highlighter highlighter = it.next(); - final Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task){ - Action action = new Action() { - - @Override - public void run() { - Task task = (Task)selectedObject; - MylarUiPlugin.getDefault().setHighlighterMapping(task.getHandle(), highlighter.getName()); - TaskListView.this.viewer.refresh(); - MylarPlugin.getTaskscapeManager().notifyPostPresentationSettingsChange(ITaskscapeListener.UpdateKind.HIGHLIGHTER); -// taskscapeComponent.getTableViewer().refresh(); - } - }; - if (highlighter.isGradient()) { - action.setImageDescriptor(new HighlighterImageDescriptor(highlighter.getBase(), highlighter.getLandmarkColor())); - } else { - action.setImageDescriptor(new HighlighterImageDescriptor(highlighter.getLandmarkColor(), highlighter.getLandmarkColor())); - } - action.setText(highlighter.toString()); - subMenuManager.add(action); - } else { -// showMessage("Select task before choosing highlighter"); - } - } - manager.add(subMenuManager); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.add(createCategory); - manager.add(createTask); -// manager.add(new Separator()); - manager.add(addBugzillaReport); - manager.add(refresh); - manager.add(new Separator()); - manager.add(toggleFilteringAction); - //manager.add(toggleIntersectionModeAction); - manager.add(new Separator()); - manager.add(filterCompleteTask); - manager.add(filterInCompleteTask); - manager.add(filterOnPriority); - drillDownAdapter.addNavigationActions(manager); - } - - /** - * @see org.eclipse.pde.internal.ui.view.HistoryDropDownAction - * - */ - private void makeActions() { - refresh = new Action() { - - @Override - public void run() { - // TODO background? - // perform the update in an operation so that we get a progress monitor - // update the structure bridge cache with the reference provider cached bugs - WorkspaceModifyOperation op = new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws CoreException { - - List<ITask> tasks = MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks(); - - for (ITask task : tasks) { - if (task instanceof BugzillaTask) { - ((BugzillaTask)task).refresh(); - } - refreshChildren(task.getChildren()); - } - - // clear the caches - Set<String> cachedHandles = new HashSet<String>(); - cachedHandles.addAll(MylarTasksPlugin.getDefault().getStructureBridge().getCachedHandles()); - cachedHandles.addAll(MylarTasksPlugin.getReferenceProvider().getCachedHandles()); - MylarTasksPlugin.getDefault().getStructureBridge().clearCache(); - MylarTasksPlugin.getReferenceProvider().clearCachedReports(); - - BugzillaStructureBridge bridge = MylarTasksPlugin.getDefault().getStructureBridge(); - monitor.beginTask("Downloading Bugs" , cachedHandles.size()); - for(String key: cachedHandles){ - try { - String [] parts = key.split(";"); - final int id = Integer.parseInt(parts[1]); - BugReport bug = BugzillaRepository.getInstance().getCurrentBug(id); - if(bug != null) - bridge.cache(key, bug); - }catch(Exception e){} - - monitor.worked(1); - } - monitor.done(); - viewer.refresh(); - } - }; - - // Use the progess service to execute the runnable - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - try { - service.run(true, false, op); - } catch (InvocationTargetException e) { - // Operation was canceled - } catch (InterruptedException e) { - // Handle the wrapped exception - } - } - }; - refresh.setText("Refresh all Bugzilla reports"); - refresh.setToolTipText("Refresh all Bugzilla reports"); - refresh.setImageDescriptor(MylarImages.REFRESH); - -// createCategory = new Action() { -// public void run() { -// try { -// String label = getLabelNameFromUser("category"); -// MylarTasksPlugin.getTaskListManager().getTaskList().createCategory(label); -// viewer.refresh(); -// } catch (Exception e) { -// MylarPlugin.fail(e, "Couldn't create category", true); -// } -// } -// }; -// createCategory.setText("Create category"); -// createCategory.setToolTipText("Create category"); -// createCategory.setImageDescriptor(MylarImages.TASK_CATEGORY_NEW); - - createTask = new CreateTaskAction(false); - createTask.setText("Create task"); - createTask.setToolTipText("Create task"); - createTask.setImageDescriptor(MylarImages.TASK_NEW); - - createCategory = new CreateTaskAction(true); - createCategory.setText("Create category"); - createCategory.setToolTipText("Create category"); - createCategory.setImageDescriptor(MylarImages.CATEGORY_NEW); - - addBugzillaReport = new Action() { - - @Override - public void run() { - String bugIdString = getBugIdFromUser(); - int bugId = -1; - try { - if (bugIdString != null) { - bugId = Integer.parseInt(bugIdString); - } else { - return; - } - } catch (NumberFormatException nfe) { - showMessage("Please enter a valid report number"); - return; - } - - // Check the existing tasks to see if the id is used already. - // This is to prevent the creation of mutliple Bugzilla tasks - // for the same Bugzilla report. - boolean doesIdExistAlready = false; - List<ITask> tasks = MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks(); - for (Iterator<ITask> iter = tasks.iterator(); iter.hasNext() && !doesIdExistAlready;) { - ITask task = iter.next(); - doesIdExistAlready = lookForId(task, "Bugzilla-" + bugId); - } - if (doesIdExistAlready) { - showMessage("A Bugzilla task with ID Bugzilla-" + bugId + " already exists."); - return; - } - - - //HACK need the server name and handle properly - ITask newTask = new BugzillaTask("Bugzilla-"+bugId, "<bugzilla info>"); - - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task){ - ((Task)selectedObject).addSubtask(newTask); - } else { - MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask); - } - viewer.refresh(); - } - }; - addBugzillaReport.setText("Add bugzilla report"); - addBugzillaReport.setToolTipText("Add bugzilla report"); - addBugzillaReport.setImageDescriptor(MylarImages.TASK_BUGZILLA_NEW); - - delete = new Action() { - - @Override - public void run() { - boolean deleteConfirmed = MessageDialog.openQuestion( - Workbench.getInstance().getActiveWorkbenchWindow().getShell(), - "Confirm delete", - "Delete selected task and all subtasks?"); - if (!deleteConfirmed) { - return; - } else { - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task) { - MylarTasksPlugin.getTaskListManager().deleteTask((Task)selectedObject); - MylarPlugin.getTaskscapeManager().taskDeleted(((Task)selectedObject).getHandle(), ((Task)selectedObject).getPath()); - IWorkbenchPage page = MylarTasksPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); - - // if we couldn't get the page, get out of here - if (page == null) - return; - try{ - closeTaskEditors((ITask)selectedObject, page); - }catch(Exception e){ - MylarPlugin.log(e, " deletion failed"); - } - } - } - viewer.refresh(); - } - }; - delete.setText("Delete"); - delete.setToolTipText("Delete"); - delete.setImageDescriptor(MylarImages.REMOVE); - - completeTask = new Action() { - - @Override - public void run() { - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task){ - ((Task)selectedObject).setCompleted(true); - viewer.refresh(selectedObject); - } - } - }; - completeTask.setText("Mark Complete"); - completeTask.setToolTipText("Mark Complete"); -// activateTask.setImageDescriptor(MylarImages.REMOVE); - - incompleteTask = new Action() { - - @Override - public void run() { - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task){ - ((Task)selectedObject).setCompleted(false); - viewer.refresh(selectedObject); - } - } - }; - incompleteTask.setText("Mark Incomplete"); - incompleteTask.setToolTipText("Mark Incomplete"); -// deactivateTask.setImageDescriptor(MylarImages.REMOVE); - - rename = new Action() { - - @Override - public void run() { - String label = "category"; - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task) label = "task"; - - String newName = getLabelNameFromUser(label); - if (selectedObject instanceof Task) { - ((Task)selectedObject).setLabel(newName); - } else if (selectedObject instanceof Category) { - ((Category)selectedObject).setName(newName); - } - viewer.refresh(selectedObject); - } - }; - rename.setText("Rename"); - rename.setToolTipText("Rename"); - - clearSelectedTaskscapeAction = new Action() { - - @Override - public void run() { - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject != null) { - MylarPlugin.getTaskscapeManager().taskDeleted(((Task)selectedObject).getHandle(), ((Task)selectedObject).getPath()); - viewer.refresh(); - } - } - }; - clearSelectedTaskscapeAction.setText("Erase Taskscape"); - clearSelectedTaskscapeAction.setToolTipText("Erase Taskscape"); - clearSelectedTaskscapeAction.setImageDescriptor(MylarImages.ERASE_TASKSCAPE); - - doubleClickAction = new Action() { - @Override - public void run() { - ISelection selection = viewer.getSelection(); - Object obj = ((IStructuredSelection)selection).getFirstElement(); - if (obj instanceof ITask) { - ((ITask)obj).openTaskInEditor(); - } - viewer.refresh(obj); - } - }; - - filterCompleteTask = new Action() { - @Override - public void run() { - MylarUiPlugin.getDefault().setFilterCompleteMode(isChecked()); - if (isChecked()) { - viewer.addFilter(completeFilter); - filterInCompleteTask.setChecked(false); - viewer.removeFilter(inCompleteFilter); - } else { - viewer.removeFilter(completeFilter); - } - viewer.refresh(); - } - }; - filterCompleteTask.setText("Filter Complete tasks"); - filterCompleteTask.setToolTipText("Filter Completed tasks"); - filterCompleteTask.setImageDescriptor(MylarImages.TASK_ACTIVE); - filterCompleteTask.setChecked(MylarUiPlugin.getDefault().isFilterCompleteMode()); - - filterInCompleteTask = new Action() { - @Override - public void run() { - MylarUiPlugin.getDefault().setFilterInCompleteMode(isChecked()); - if (isChecked()) { - viewer.addFilter(inCompleteFilter); - filterCompleteTask.setChecked(false); - viewer.removeFilter(completeFilter); - } else { - viewer.removeFilter(inCompleteFilter); - } - viewer.refresh(); - } - }; - filterInCompleteTask.setText("Filter Incomplete tasks"); - filterInCompleteTask.setToolTipText("Filter Incomplete tasks"); - filterInCompleteTask.setImageDescriptor(MylarImages.TASK_INACTIVE); - filterInCompleteTask.setChecked(MylarUiPlugin.getDefault().isFilterInCompleteMode()); - - - filterOnPriority = new PriorityDropDownAction(); - } - - /** - * Recursive function that checks for the occurrence of a certain task id. - * All children of the supplied node will be checked. - * - * @param task - * The <code>ITask</code> object that is to be searched. - * @param taskId - * The id that is being searched for. - * @return <code>true</code> if the id was found in the node or any of its - * children - */ - protected boolean lookForId(ITask task, String taskId) { - if (task.getHandle().equals(taskId)) { - return true; - } - - List<ITask> children = task.getChildren(); - if (children == null) { - return false; - } - - for (ITask childTask : children) { - if (lookForId(childTask, taskId)) { - return true; - } - } - - return false; - } - - protected void closeTaskEditors(ITask task, IWorkbenchPage page) throws LoginException, IOException{ - IEditorInput input = null; - if (task instanceof BugzillaTask) { - input = new BugzillaTaskEditorInput((BugzillaTask)task); - } else if (task instanceof Task) { - input = new TaskEditorInput((Task) task); - } - IEditorPart editor = page.findEditor(input); - - if (editor != null) { - page.closeEditor(editor, false); - } - - - List<ITask> children = task.getChildren(); - if (children == null) - return; - for (ITask child : children) - closeTaskEditors(child, page); - } - - protected void refreshChildren(List<ITask> children) { - if (children != null) { - for (ITask child : children) { - if (child instanceof BugzillaTask) { - ((BugzillaTask)child).refresh(); - } - refreshChildren(child.getChildren()); - } - } - } - - private void hookDoubleClickAction() { - viewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - doubleClickAction.run(); - } - }); - } - private void showMessage(String message) { - MessageDialog.openInformation( - viewer.getControl().getShell(), - "Tasklist Message", - message); - } - - /** - * Passing the focus request to the viewer's control. - */ - @Override - public void setFocus() { - viewer.getControl().setFocus(); - //TODO: foo - } - - private String getBugIdFromUser() { - InputDialog dialog = new InputDialog( - Workbench.getInstance().getActiveWorkbenchWindow().getShell(), - "Enter Bugzilla ID", - "Enter the Bugzilla ID: ", - "", - null); - int dialogResult = dialog.open(); - if (dialogResult == Window.OK) { - return dialog.getValue(); - } else { - return null; - } - } - - private String getLabelNameFromUser(String kind) { - - InputDialog dialog = new InputDialog( - Workbench.getInstance().getActiveWorkbenchWindow().getShell(), - "Enter name", - "Enter a name for the " + kind + ": ", - "", - null); - int dialogResult = dialog.open(); - if (dialogResult == Window.OK) { - return dialog.getValue(); - } else { - return null; - } - } - - public void notifyTaskDataChanged(ITask task) { - if (viewer.getTree() != null && !viewer.getTree().isDisposed()) { - viewer.refresh(task); - } - } - - public static TaskListView getDefault() { - return INSTANCE; - } - - public TreeViewer getViewer() { - return viewer; - } - - public ViewerFilter getCompleteFilter() { - return completeFilter; - } - - public ViewerFilter getInCompleteFilter() { - return inCompleteFilter; - } - - public PriorityFilter getPriorityFilter() { - return priorityFilter; - } -} - -//TextTransfer textTransfer = TextTransfer.getInstance(); -//DropTarget target = new DropTarget(viewer.getTree(), DND.DROP_MOVE); -//target.setTransfer(new Transfer[] { textTransfer }); -//target.addDropListener(new TaskListDropTargetListener(parent, null, textTransfer, true)); -// -//DragSource source = new DragSource(viewer.getTree(), DND.DROP_MOVE); -//source.setTransfer(types); - -//source.addDragListener(new DragSourceListener() { -//public void dragStart(DragSourceEvent event) { -// if (((StructuredSelection)viewer.getSelection()).isEmpty()) { -// event.doit = false; -// } -//} -//public void dragSetData(DragSourceEvent event) { -// StructuredSelection selection = (StructuredSelection) viewer.getSelection(); -// if (!selection.isEmpty()) { -// event.data = "" + ((ITask)selection.getFirstElement()).getId(); -// } else { -// event.data = "null"; -// } -//} -// -//public void dragFinished(DragSourceEvent event) { } -//}); - - -// public boolean getServerStatus() { -// return serverStatus; -// } -// -// /** -// * Sets whether or not we could connect to the Bugzilla server. If -// * necessary, the corresponding label in the view is updated. -// * -// * @param canRead -// * <code>true</code> if the Bugzilla server could be connected -// * to -// */ -// public void setServerStatus(boolean canRead) { -// if (serverStatus != canRead) { -// serverStatus = canRead; -// updateServerStatusLabel(); -// } -// } -// -// private void updateServerStatusLabel() { -// if (serverStatusLabel.isDisposed()) { -// return; -// } -// if (serverStatus) { -// serverStatusLabel.setText(CAN_READ_LABEL); -// } -// else { -// serverStatusLabel.setText(CANNOT_READ_LABEL); -// } -// } -// -// private class ServerPingJob extends Job { -// private boolean shouldCheckAgain = true; -// private int counter = 0; -// -// public ServerPingJob(String name) { -// super(name); -// } -// -// public void stopPinging() { -// shouldCheckAgain = false; -// } -// -// protected IStatus run(IProgressMonitor monitor) { -// while (shouldCheckAgain) { -// try { -// final boolean canReadFromServer = TaskListView.checkServer(); -// Workbench.getInstance().getDisplay().asyncExec(new Runnable() { -// public void run() { -// setServerStatus(canReadFromServer); -// } -// }); -// Thread.sleep(10000/*MylarPreferencePage.getServerPing()*5000*/); -// } catch (InterruptedException e) { -// break; -// } -// } -// return new Status(IStatus.OK, MylarPlugin.IDENTIFIER, IStatus.OK, "", null); -// } -// } -// -// /** -// * @return <code>true</code> if we could connect to the Bugzilla server -// */ -// public static boolean checkServer() { -// boolean canRead = true; -// BufferedReader in = null; -// -// // Call this function to intialize the Bugzilla url that the repository -// // is using. -// BugzillaRepository.getInstance(); -// -// try { -// // connect to the bugzilla server -// SSLContext ctx = SSLContext.getInstance("TLS"); -// javax.net.ssl.TrustManager[] tm = new javax.net.ssl.TrustManager[]{new TrustAll()}; -// ctx.init(null, tm, null); -// HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); -// String urlText = ""; -// -// // use the usename and password to get into bugzilla if we have it -// if(BugzillaPreferences.getUserName() != null && !BugzillaPreferences.getUserName().equals("") && BugzillaPreferences.getPassword() != null && !BugzillaPreferences.getPassword().equals("")) -// { -// /* -// * The UnsupportedEncodingException exception for -// * URLEncoder.encode() should not be thrown, since every -// * implementation of the Java platform is required to support -// * the standard charset "UTF-8" -// */ -// try { -// urlText += "?GoAheadAndLogIn=1&Bugzilla_login=" + URLEncoder.encode(BugzillaPreferences.getUserName(), "UTF-8") + "&Bugzilla_password=" + URLEncoder.encode(BugzillaPreferences.getPassword(), "UTF-8"); -// } catch (UnsupportedEncodingException e) { } -// } -// -// URL url = new URL(BugzillaRepository.getURL() + "/enter_bug.cgi" + urlText); -// -// // create a new input stream for getting the bug -// in = new BufferedReader(new InputStreamReader(url.openStream())); -// } -// catch (Exception e) { -// // If there was an IOException, then there was a problem connecting. -// // If there was some other exception, then it was a problem not -// // related to the server. -// if (e instanceof IOException) { -// canRead = false; -// } -// } -// -// // Close the BufferedReader if we opened one. -// try { -// if (in != null) -// in.close(); -// } catch(IOException e) {} -// -// return canRead; -// } -// -// public void dispose() { -// if (serverPingJob != null) { -// serverPingJob.stopPinging(); -// } -// super.dispose(); -// } - -// source.addDragListener(new DragSourceListener() { -// -// public void dragStart(DragSourceEvent event) { -// if (((StructuredSelection) viewer.getSelection()).getFirstElement() == null) { -// event.doit = false; -// } -// } -// -// public void dragSetData(DragSourceEvent event) { -// StructuredSelection selection = (StructuredSelection)viewer.getSelection(); -// ITask task = (ITask) selection.getFirstElement(); -// if (task != null) { -// event.data = "" + task.getId(); -// } else { -// event.data = " "; -// } -// } -// -// public void dragFinished(DragSourceEvent event) { -// StructuredSelection selection = (StructuredSelection)viewer.getSelection(); -// if (selection.isEmpty()) { -// return; -// } else { -// ITask task = (ITask) selection.getFirstElement(); -// -// System.err.println(">>> got task: " + task + ">> " + ); -// -// } -// } -// -// }); |