From 0d11bd44261c1cc06a7a9e516b2338f2dcc82e49 Mon Sep 17 00:00:00 2001 From: mkersten Date: Wed, 26 Oct 2005 15:52:52 +0000 Subject: Fixed Bugzilla Bug 111945: Read-only activations of tasks --- org.eclipse.mylyn.bugzilla.ui/plugin.xml | 56 +-- .../mylyn/tasklist/tests/TaskHistoryTest.java | 20 +- .../mylyn/tasklist/tests/TaskListManagerTest.java | 23 +- org.eclipse.mylyn.tasks.ui/plugin.xml | 14 +- .../src/org/eclipse/mylyn/tasklist/ITask.java | 6 +- .../mylyn/tasklist/MylarTasklistPlugin.java | 8 +- .../src/org/eclipse/mylyn/tasklist/Task.java | 9 + .../eclipse/mylyn/tasklist/TaskListManager.java | 3 +- .../internal/DefaultTaskListExternalizer.java | 14 +- .../planner/internal/CompletedTaskCollector.java | 47 ++ .../tasklist/planner/internal/ITasksCollector.java | 26 ++ .../internal/ReminderRequiredCollector.java | 43 ++ .../planner/internal/TaskReportGenerator.java | 73 ++++ .../planner/ui/CompletedTasksContentProvider.java | 39 ++ .../planner/ui/CompletedTasksEditorInput.java | 86 ++++ .../planner/ui/CompletedTasksLabelProvider.java | 57 +++ .../tasklist/planner/ui/CompletedTasksSorter.java | 91 ++++ .../planner/ui/MylarTaskPlannerEditorPart.java | 473 +++++++++++++++++++++ .../planner/ui/MylarTaskPlannerWizard.java | 64 +++ .../planner/ui/MylarTaskPlannerWizardPage.java | 70 +++ .../planner/ui/PlannedTasksContentProvider.java | 49 +++ .../planner/ui/PlannedTasksLabelProvider.java | 55 +++ .../tasklist/planner/ui/PlannedTasksSorter.java | 75 ++++ .../tasklist/planner/ui/ReminderCellEditor.java | 73 ++++ .../report/internal/CompletedTaskCollector.java | 47 -- .../tasklist/report/internal/ITasksCollector.java | 26 -- .../report/internal/ReminderRequiredCollector.java | 43 -- .../report/internal/TaskReportGenerator.java | 73 ---- .../report/ui/CompletedTasksContentProvider.java | 39 -- .../report/ui/CompletedTasksEditorInput.java | 86 ---- .../report/ui/CompletedTasksLabelProvider.java | 57 --- .../tasklist/report/ui/CompletedTasksSorter.java | 91 ---- .../report/ui/PlannedTasksContentProvider.java | 49 --- .../report/ui/PlannedTasksLabelProvider.java | 55 --- .../tasklist/report/ui/PlannedTasksSorter.java | 75 ---- .../tasklist/report/ui/PlanningGameEditorPart.java | 472 -------------------- .../tasklist/report/ui/PlanningGameWizard.java | 64 --- .../tasklist/report/ui/PlanningGameWizardPage.java | 64 --- .../tasklist/report/ui/ReminderCellEditor.java | 73 ---- .../mylyn/tasklist/ui/actions/AutoCloseAction.java | 2 +- .../ui/actions/DropDownTaskNavigateAction.java | 2 +- .../ui/actions/NextTaskDropDownAction.java | 2 +- .../ui/actions/PreviousTaskDropDownAction.java | 2 +- .../tasklist/ui/actions/TaskActivateAction.java | 37 +- .../tasklist/ui/actions/TaskDeactivateAction.java | 33 +- .../mylyn/tasklist/ui/views/TaskListView.java | 386 +++-------------- 46 files changed, 1524 insertions(+), 1728 deletions(-) create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/CompletedTaskCollector.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ITasksCollector.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ReminderRequiredCollector.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/TaskReportGenerator.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksContentProvider.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksEditorInput.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksLabelProvider.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksSorter.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerEditorPart.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizard.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizardPage.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksContentProvider.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksLabelProvider.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksSorter.java create mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/ReminderCellEditor.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/CompletedTaskCollector.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ITasksCollector.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ReminderRequiredCollector.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksContentProvider.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksEditorInput.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksLabelProvider.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksSorter.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksContentProvider.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksLabelProvider.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksSorter.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizard.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizardPage.java delete mode 100644 org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/ReminderCellEditor.java diff --git a/org.eclipse.mylyn.bugzilla.ui/plugin.xml b/org.eclipse.mylyn.bugzilla.ui/plugin.xml index 09fe646c2..e4275632e 100644 --- a/org.eclipse.mylyn.bugzilla.ui/plugin.xml +++ b/org.eclipse.mylyn.bugzilla.ui/plugin.xml @@ -120,16 +120,27 @@ - + + + + + + tooltip="Add Bugzilla Query"> - - + + tooltip="Add Existing Bugzilla Report"> - - - - - +--> diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskHistoryTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskHistoryTest.java index fdc0ca874..f9d348353 100644 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskHistoryTest.java +++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskHistoryTest.java @@ -83,11 +83,11 @@ public class TaskHistoryTest extends TestCase { * Tests the next task and previous task navigation. */ public void testBasicHistoryNavigation(){ - (new TaskActivateAction(task1)).run(); + (new TaskActivateAction()).run(task1); taskView.addTaskToHistory(task1); - (new TaskActivateAction(task2)).run(); + (new TaskActivateAction()).run(task2); taskView.addTaskToHistory(task2); - (new TaskActivateAction(task3)).run(); + (new TaskActivateAction()).run(task3); taskView.addTaskToHistory(task3); assertTrue(task3.isActive()); @@ -117,7 +117,7 @@ public class TaskHistoryTest extends TestCase { taskView.getNextTaskAction().run(); assertTrue(task3.isActive()); - (new TaskActivateAction(task4)).run(); + (new TaskActivateAction()).run(task4); taskView.addTaskToHistory(task4); //Simulate clicking on it rather than navigating next or previous assertTrue(task4.isActive()); @@ -143,13 +143,13 @@ public class TaskHistoryTest extends TestCase { //Simulate activating the tasks by clicking rather than //navigating previous/next - (new TaskActivateAction(task1)).run(); + (new TaskActivateAction()).run(task1); taskView.addTaskToHistory(task1); - (new TaskActivateAction(task2)).run(); + (new TaskActivateAction()).run(task2); taskView.addTaskToHistory(task2); - (new TaskActivateAction(task3)).run(); + (new TaskActivateAction()).run(task3); taskView.addTaskToHistory(task3); - (new TaskActivateAction(task4)).run(); + (new TaskActivateAction()).run(task4); taskView.addTaskToHistory(task4); assertTrue(task4.isActive()); @@ -194,8 +194,8 @@ public class TaskHistoryTest extends TestCase { assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task1); //Check that a deactivated task appears first on the history list - (new TaskActivateAction(task5)).run(); - (new TaskDeactivateAction(task5, taskView)).run(); + (new TaskActivateAction()).run(task5); + (new TaskDeactivateAction()).run(task5); taskView.addTaskToHistory(task5); prevHistoryList = taskHistory.getPreviousTasks(); assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task5); diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskListManagerTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskListManagerTest.java index 102c965eb..76105ebd2 100644 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskListManagerTest.java +++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/TaskListManagerTest.java @@ -32,12 +32,33 @@ import org.eclipse.mylar.tasklist.internal.TaskList; */ public class TaskListManagerTest extends TestCase { + public void testPlans() { + File file = new File("foo" + MylarTasklistPlugin.FILE_EXTENSION); + file.deleteOnExit(); + TaskListManager manager = new TaskListManager(file); + + Task task1 = new Task(MylarTasklistPlugin.getTaskListManager().genUniqueTaskId(), "task 1", true); + task1.addPlan("default"); + manager.addRootTask(task1); + + manager.saveTaskList(); + assertNotNull(manager.getTaskList()); + TaskList list = new TaskList(); + manager.setTaskList(list); + manager.readTaskList(); + assertNotNull(manager.getTaskList()); + + List readList = manager.getTaskList().getRootTasks(); + ITask task = readList.get(0); + assertEquals(1, task.getPlans().size()); + assertTrue(task.getPlans().get(0).equals("default")); + } + public void testCreationAndExternalization() { File file = new File("foo" + MylarTasklistPlugin.FILE_EXTENSION); file.deleteOnExit(); TaskListManager manager = new TaskListManager(file); -// TaskList tlist = manager.getTaskList(); Task task1 = new Task(MylarTasklistPlugin.getTaskListManager().genUniqueTaskId(), "task 1", true); manager.addRootTask(task1); Task sub1 = new Task(MylarTasklistPlugin.getTaskListManager().genUniqueTaskId(), "sub 1", true); diff --git a/org.eclipse.mylyn.tasks.ui/plugin.xml b/org.eclipse.mylyn.tasks.ui/plugin.xml index 683085587..a798129e9 100644 --- a/org.eclipse.mylyn.tasks.ui/plugin.xml +++ b/org.eclipse.mylyn.tasks.ui/plugin.xml @@ -37,7 +37,7 @@ @@ -71,16 +71,16 @@ class="org.eclipse.mylar.tasklist.ui.TaskEditor" name="Task Viewer" id="org.eclipse.mylar.tasklist.ui.taskEditor"/> - + id="org.eclipse.mylar.tasklist.ui.catEditor"/> + diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java index 401daf3d9..e06ef0d89 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java @@ -22,7 +22,7 @@ import org.eclipse.mylar.tasklist.internal.TaskCategory; /** * @author Mik Kersten * - * TODO: make IDs be handles + * TODO: make IDs be handles, clean up */ public interface ITask extends Serializable, ITaskListElement { @@ -37,6 +37,10 @@ public interface ITask extends Serializable, ITaskListElement { public abstract boolean isActive(); public abstract void setActive(boolean active, boolean isStalled); + + public abstract void addPlan(String plan); + + public List getPlans(); public abstract void setCompleted(boolean completed); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/MylarTasklistPlugin.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/MylarTasklistPlugin.java index bb39071b1..6592848a3 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/MylarTasklistPlugin.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/MylarTasklistPlugin.java @@ -27,8 +27,8 @@ import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.mylar.core.MylarPlugin; import org.eclipse.mylar.tasklist.internal.TaskListExternalizer; -import org.eclipse.mylar.tasklist.report.internal.ReminderRequiredCollector; -import org.eclipse.mylar.tasklist.report.internal.TaskReportGenerator; +import org.eclipse.mylar.tasklist.planner.internal.ReminderRequiredCollector; +import org.eclipse.mylar.tasklist.planner.internal.TaskReportGenerator; import org.eclipse.mylar.tasklist.ui.TasksReminderDialog; import org.eclipse.mylar.tasklist.ui.views.TaskListView; import org.eclipse.swt.events.DisposeEvent; @@ -55,8 +55,8 @@ public class MylarTasklistPlugin extends AbstractUIPlugin implements IStartup { private List taskHandlers = new ArrayList(); // TODO: use extension points private List contextEditors = new ArrayList(); - public static final String PLANNING_GAME_WIZARD_ID = "org.eclipse.mylar.tasklist.report.ui.planningGameWizard"; - public static final String PLANNING_GAME_EDITOR_ID = "org.eclipse.mylar.tasklist.report.ui.planning"; + public static final String PLANNING_GAME_WIZARD_ID = "org.eclipse.mylar.tasklist.ui.planner.wizard"; + public static final String PLANNING_GAME_EDITOR_ID = "org.eclipse.mylar.tasklist.ui.planner.editor"; public static final String REPORT_OPEN_EDITOR = "org.eclipse.mylar.tasklist.report.open.editor"; public static final String REPORT_OPEN_INTERNAL = "org.eclipse.mylar.tasklist.report.open.internal"; public static final String REPORT_OPEN_EXTERNAL = "org.eclipse.mylar.tasklist.report.open.external"; diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java index 0884bca43..c8cb860dd 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java @@ -55,6 +55,7 @@ public class Task implements ITask { private int estimatedTime = 0; private boolean completed; private List links = new ArrayList(); + private List plans = new ArrayList(); private String issueReportURL = ""; private ITaskListCategory parentCategory = null; @@ -549,4 +550,12 @@ public class Task implements ITask { public String getEstimateTimeForDisplay() { return estimatedTime / 10 + " Hours"; } + + public void addPlan(String plan) { + if (plan != null && !plans.contains(plan)) plans.add(plan); + } + + public List getPlans() { + return plans; + } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java index b13930248..2cda5683f 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java @@ -149,8 +149,7 @@ public class TaskListManager { public void deactivateTask(ITask task) { TaskActiveTimerListener activeListener = listenerMap.remove(task); - if(activeListener != null) - activeListener.stopTimer(); + if(activeListener != null) activeListener.stopTimer(); taskList.setActive(task, false, false); for (ITaskActivityListener listener : listeners) listener.taskDeactivated(task); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java index ab2981bf0..e6a7c26d1 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java @@ -44,6 +44,7 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { public static final String TAG_TASK_CATEGORY = "Task" + TAG_CATEGORY; public static final String LINK = "Link"; + public static final String PLAN = "Plan"; public static final String ESTIMATED = "Estimated"; public static final String ELAPSED = "Elapsed"; public static final String ISSUEURL = "IssueURL"; @@ -134,6 +135,12 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { node.setAttribute(LINK+i, link); i++; } + List plans = task.getPlans(); + int currPlan = 0; + for (String plan : plans) { + node.setAttribute(PLAN+currPlan, plan); + currPlan++; + } for (ITask t : task.getChildren()) { createTaskElement(t, doc, node); @@ -211,7 +218,7 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { if (element.getAttribute(ACTIVE).compareTo(TRUE) == 0) { task.setActive(true, false); tlist.setActive(task, true, false); - new TaskActivateAction(task).run(); + new TaskActivateAction().run(task); } else { task.setActive(false, false); } @@ -272,6 +279,11 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { task.getRelatedLinks().add(element.getAttribute(LINK+i)); i++; } + int ii = 0; + while (element.hasAttribute(PLAN+ii)) { + task.getPlans().add(element.getAttribute(PLAN+i)); + ii++; + } if (category != null) { task.internalSetCategory((TaskCategory) category); } else { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/CompletedTaskCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/CompletedTaskCollector.java new file mode 100644 index 000000000..41421a970 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/CompletedTaskCollector.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * 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.tasklist.planner.internal; + +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public class CompletedTaskCollector implements ITasksCollector { + + private Map completedTasks = new HashMap(); + private Date cutOffDate = null; + private long DAY = 24*3600*1000; + + public CompletedTaskCollector(int prevDays) { + cutOffDate = new Date(new Date().getTime() - prevDays * DAY); + } + + public String getLabel() { + return "Completed Tasks"; + } + + public void consumeTask(ITask task) { + if (task.isCompleted() && task.getEndDate() != null && task.getEndDate().compareTo(cutOffDate) > 0 && !completedTasks.containsKey(task.getHandle())) { + completedTasks.put(task.getHandle(), task); + } + } + + public Collection getTasks() { + return completedTasks.values(); + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ITasksCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ITasksCollector.java new file mode 100644 index 000000000..663588735 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ITasksCollector.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * 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.tasklist.planner.internal; + +import java.util.Collection; + +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public interface ITasksCollector { + + public abstract void consumeTask(ITask task); + + public abstract Collection getTasks(); +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ReminderRequiredCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ReminderRequiredCollector.java new file mode 100644 index 000000000..ce8697522 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/ReminderRequiredCollector.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * 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.tasklist.planner.internal; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public class ReminderRequiredCollector implements ITasksCollector { + + private List tasks = new ArrayList(); + private Date curr = null; + + public ReminderRequiredCollector() { + curr = new Date(); + } + + public void consumeTask(ITask task) { + if (task.getReminderDate() != null && !task.hasBeenReminded() && task.getReminderDate().compareTo(curr) < 0) { + task.setReminded(true); + tasks.add(task); + } + } + + public List getTasks() { + return tasks; + } + +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/TaskReportGenerator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/TaskReportGenerator.java new file mode 100644 index 000000000..449f72b7d --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/internal/TaskReportGenerator.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * 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.tasklist.planner.internal; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.mylar.tasklist.ITask; +import org.eclipse.mylar.tasklist.ITaskListElement; +import org.eclipse.mylar.tasklist.internal.TaskCategory; +import org.eclipse.mylar.tasklist.internal.TaskList; + +/** + * @author Ken Sueda + */ +public class TaskReportGenerator { + // NOTE: might want a map of tasks instead of a flattened list of tasks + + private List collectors = new ArrayList(); + private List tasks = new ArrayList(); + private TaskList tasklist = null; + + public TaskReportGenerator(TaskList tlist) { + tasklist = tlist; + } + + public void addCollector(ITasksCollector collector) { + collectors.add(collector); + } + + private void getTasksForReport() { + List roots = tasklist.getRootTasks(); + for(int i = 0; i < roots.size(); i++) { + ITask t = (ITask) roots.get(i); + for (ITasksCollector collector : collectors) { + collector.consumeTask(t); + } + } + for (TaskCategory cat : tasklist.getTaskCategories()) { + List sub = cat.getChildren(); + for (int j = 0; j < sub.size(); j++) { + if (sub.get(j) instanceof ITask) { + ITask element = (ITask) sub.get(j); + for (ITasksCollector collector : collectors) { + collector.consumeTask(element); + } + } + } + } + + // TODO need to support handling things in the bugzilla registry + for (ITasksCollector collector : collectors) { + tasks.addAll(collector.getTasks()); + } + } + + public void checkTasks() { + getTasksForReport(); + } + + public List getTasks() { + return tasks; + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksContentProvider.java new file mode 100644 index 000000000..181ce70ea --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksContentProvider.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import java.util.List; + +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public class CompletedTasksContentProvider implements IStructuredContentProvider { + + private List tasks = null; + + public CompletedTasksContentProvider(List tasks) { + this.tasks = tasks; + } + public Object[] getElements(Object inputElement) { + return tasks.toArray(); + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksEditorInput.java new file mode 100644 index 000000000..201480193 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksEditorInput.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import java.util.List; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.mylar.tasklist.ITask; +import org.eclipse.mylar.tasklist.internal.TaskList; +import org.eclipse.mylar.tasklist.planner.internal.CompletedTaskCollector; +import org.eclipse.mylar.tasklist.planner.internal.TaskReportGenerator; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IPersistableElement; + +/** + * @author Ken Sueda + */ +public class CompletedTasksEditorInput implements IEditorInput { + private List completedTasks = null; + private TaskReportGenerator parser = null; + + public CompletedTasksEditorInput(int prevDays, TaskList tlist) { + parser = new TaskReportGenerator(tlist); + parser.addCollector(new CompletedTaskCollector(prevDays)); + parser.checkTasks(); + completedTasks = parser.getTasks(); + } + + /** + * IEditorInput interface methods + */ + public boolean exists() { + return true; + } + + public ImageDescriptor getImageDescriptor() { + return null; + } + + public String getName() { + return "Task Planner"; + } + + public IPersistableElement getPersistable() { + return null; + } + + public String getToolTipText() { + return "Planning Game Report"; + } + + public Object getAdapter(Class adapter) { + return null; + } + + /** + * Methods + */ + public List getTasks() { + return completedTasks; + } + + public int getListSize() { + return completedTasks.size(); + } + public long getTotalTimeSpent() { + long duration = 0; + for(ITask t : completedTasks) { + duration += t.getElapsedTimeLong(); + } + return duration; + } + + public TaskReportGenerator getReportGenerator() { + return parser; + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksLabelProvider.java new file mode 100644 index 000000000..46e0a2496 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksLabelProvider.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.mylar.tasklist.ITask; +import org.eclipse.mylar.tasklist.ITaskListElement; +import org.eclipse.swt.graphics.Image; + +/** + * @author Ken Sueda + */ +public class CompletedTasksLabelProvider extends LabelProvider implements + ITableLabelProvider { + + //private String[] columnNames = new String[] { "Description", "Priority", "Date Completed", "Duration"}; + public Image getColumnImage(Object element, int columnIndex) { + if (! (element instanceof ITaskListElement)) { + return null; + } + if (columnIndex == 0) { + return ((ITaskListElement)element).getIcon(); + } else { + return null; + } + } + + public String getColumnText(Object element, int columnIndex) { + if (element instanceof ITask) { + ITask task = (ITask) element; + switch(columnIndex) { + case 1: + return task.getDescription(true); + case 2: + return task.getPriority(); + case 3: + return task.getCreationDateString(); + case 4: + return task.getEndDateString(); + case 5: + return task.getElapsedTimeForDisplay(); + } + } + return null; + } + +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksSorter.java new file mode 100644 index 000000000..66e756fd3 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/CompletedTasksSorter.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public class CompletedTasksSorter extends ViewerSorter { + /** + * Constructor argument values that indicate to sort items by + * different columns. + */ + public final static int DESCRIPTION = 1; + public final static int PRIORITY = 2; + public final static int CREATION_DATE = 3; + public final static int COMPLETED_DATE = 4; + public final static int DURATION = 5; + + // Criteria that the instance uses + private int criteria; + + /** + * Creates a resource sorter that will use the given sort criteria. + * + * @param criteria the sort criterion to use: one of NAME or + * TYPE + */ + public CompletedTasksSorter(int criteria) { + super(); + this.criteria = criteria; + } + + @Override + public int compare(Viewer viewer, Object obj1, Object obj2) { + ITask t1 = (ITask) obj1; + ITask t2 = (ITask) obj2; + + switch (criteria) { + case DESCRIPTION: + return compareDescription(t1, t2); + case PRIORITY: + return comparePriority(t1, t2); + case CREATION_DATE: + return compareCreationDate(t1, t2); + case COMPLETED_DATE: + return compareCompletedDate(t1, t2); + case DURATION: + return compareDuration(t1, t2); + default: + return 0; + } + } + + private int compareDescription(ITask task1, ITask task2) { + return task1.getDescription(false).compareTo(task2.getDescription(false)); + } + + private int comparePriority(ITask task1, ITask task2) { + return task1.getPriority().compareTo(task2.getPriority()); + } + + private int compareCompletedDate(ITask task1, ITask task2) { + return task2.getEndDate().compareTo(task1.getEndDate()); + } + + private int compareCreationDate(ITask task1, ITask task2) { + if(task1.getCreationDate() == null) + return 1; + else if(task2.getCreationDate() == null) + return -1; + else + return task2.getCreationDate().compareTo(task1.getCreationDate()); + } + + private int compareDuration(ITask task1, ITask task2) { + return task1.getElapsedTimeLong() < task2.getElapsedTimeLong() ? 1 : -1; + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerEditorPart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerEditorPart.java new file mode 100644 index 000000000..e23d6c174 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerEditorPart.java @@ -0,0 +1,473 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import java.util.Arrays; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.CellEditor; +import org.eclipse.jface.viewers.ComboBoxCellEditor; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.ICellEditorListener; +import org.eclipse.jface.viewers.ICellModifier; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TableLayout; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.ViewerDropAdapter; +import org.eclipse.mylar.core.util.DateUtil; +import org.eclipse.mylar.dt.MylarWebRef; +import org.eclipse.mylar.tasklist.ITask; +import org.eclipse.mylar.tasklist.ITaskListElement; +import org.eclipse.mylar.tasklist.MylarTasklistPlugin; +import org.eclipse.mylar.tasklist.Task; +import org.eclipse.mylar.tasklist.ui.views.TaskListView; +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.dnd.TransferData; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.forms.FormColors; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.forms.widgets.Section; +import org.eclipse.ui.forms.widgets.TableWrapData; +import org.eclipse.ui.forms.widgets.TableWrapLayout; +import org.eclipse.ui.part.EditorPart; + +/** + * @author Mik Kersten + * @author Ken Sueda (original prototype) + */ +public class MylarTaskPlannerEditorPart extends EditorPart { + + private CompletedTasksEditorInput editorInput = null; + private Table completedTable; + private TableViewer completedTableViewer; + private String[] completedColumnNames = new String[] {".", "Description", "Priority", "Date Created", "Date Completed", "Duration"}; + private Table planTable; + private TableViewer planTableViewer; + private PlannedTasksContentProvider contentProvider = new PlannedTasksContentProvider(); + private ReminderCellEditor reminderEditor = null; + private String[] planColumnNames = new String[] {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; + private static final String[] ESTIMATE_TIMES = new String[] {"0 Hours", "1 Hours", "2 Hours", "3 Hours","4 Hours","5 Hours","6 Hours","7 Hours","8 Hours","9 Hours","10 Hours"}; + private OpenTaskEditorAction doubleClickAction = new OpenTaskEditorAction(); + + @Override + public void doSave(IProgressMonitor monitor) { + } + + @Override + public void doSaveAs() { + } + + @SuppressWarnings("deprecation") + @Override + public void init(IEditorSite site, IEditorInput input) + throws PartInitException { + setSite(site); + setInput(input); + editorInput = (CompletedTasksEditorInput)input; + setPartName(editorInput.getName()); + setTitleToolTip(editorInput.getToolTipText()); + } + + @Override + public boolean isDirty() { + return false; + } + + @Override + public boolean isSaveAsAllowed() { + return false; + } + + @Override + public void createPartControl(Composite parent) { + FormToolkit toolkit = new FormToolkit(parent.getDisplay()); + ScrolledForm sform = toolkit.createScrolledForm(parent); + sform.getBody().setLayout(new TableWrapLayout()); + Composite editorComposite = sform.getBody(); + + createSummarySection(editorComposite, toolkit); + createCompletedSection(editorComposite, toolkit); + createPlannedTasksSection(editorComposite, toolkit); + } + + @Override + public void setFocus() { + } + + private void createSummarySection(Composite parent, FormToolkit toolkit) { + Section summarySection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + summarySection.setText("Mylar Task Planner"); + summarySection.setLayout(new TableWrapLayout()); + summarySection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + Composite summaryContainer = toolkit.createComposite(summarySection); + summarySection.setClient(summaryContainer); + TableWrapLayout layout = new TableWrapLayout(); + layout.numColumns = 1; + summaryContainer.setLayout(layout); + + int length = editorInput.getListSize(); + String numComplete = "Number of completed tasks: " + editorInput.getListSize(); + Label label = toolkit.createLabel(summaryContainer, numComplete, SWT.NULL); + label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); + String avgTime = "Average time spent: "; + if (length > 0) { + avgTime = avgTime + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpent() / editorInput.getListSize()); + } else { + avgTime = avgTime + 0; + } + label = toolkit.createLabel(summaryContainer, avgTime, SWT.NULL); + label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); + String totalTime = "Total time spent: " + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpent()); + label = toolkit.createLabel(summaryContainer, totalTime, SWT.NULL); + label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); + } + + private void createCompletedSection(Composite parent, FormToolkit toolkit) { + Section detailSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + detailSection.setText("Completed Tasks Details"); + detailSection.setLayout(new TableWrapLayout()); + detailSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + Composite detailContainer = toolkit.createComposite(detailSection); + detailSection.setClient(detailContainer); + TableWrapLayout layout = new TableWrapLayout(); + layout.numColumns = 2; + detailContainer.setLayout(layout); + + createCompletedTable(detailContainer, toolkit); + createCompletedTableViewer(); + } + + private void createCompletedTable(Composite parent, FormToolkit toolkit) { + int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; + completedTable = toolkit.createTable(parent, style ); + TableLayout tlayout = new TableLayout(); + completedTable.setLayout(tlayout); + TableWrapData wd = new TableWrapData(TableWrapData.FILL_GRAB); + wd.heightHint = 300; + wd.grabVertical = true; + completedTable.setLayoutData(wd); + + completedTable.setLinesVisible(true); + completedTable.setHeaderVisible(true); + completedTable.setEnabled(true); + + TableColumn column = new TableColumn(completedTable, SWT.LEFT, 0); + column.setText(completedColumnNames[0]); + column.setWidth(30); + + column = new TableColumn(completedTable, SWT.LEFT, 1); + column.setText(completedColumnNames[1]); + column.setWidth(300); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.DESCRIPTION)); + + } + }); + + column = new TableColumn(completedTable, SWT.LEFT, 2); + column.setText(completedColumnNames[2]); + column.setWidth(50); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.PRIORITY)); + } + }); + + column = new TableColumn(completedTable, SWT.LEFT, 3); + column.setText(completedColumnNames[3]); + column.setWidth(170); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.CREATION_DATE)); + } + }); + + column = new TableColumn(completedTable, SWT.LEFT, 4); + column.setText(completedColumnNames[4]); + column.setWidth(170); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.COMPLETED_DATE)); + } + }); + + + column = new TableColumn(completedTable, SWT.LEFT, 5); + column.setText(completedColumnNames[5]); + column.setWidth(100); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.DURATION)); + } + }); + } + + private void createCompletedTableViewer() { + completedTableViewer = new TableViewer(completedTable); + completedTableViewer.setUseHashlookup(true); + completedTableViewer.setColumnProperties(completedColumnNames); + + completedTableViewer.setContentProvider(new CompletedTasksContentProvider(editorInput.getTasks())); + completedTableViewer.setLabelProvider(new CompletedTasksLabelProvider()); + completedTableViewer.setInput(editorInput); + } + + private void createPlannedTasksSection(Composite parent, FormToolkit toolkit) { + Section planSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + planSection.setText("Planned Tasks"); + planSection.setLayout(new TableWrapLayout()); + planSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + Composite planContainer = toolkit.createComposite(planSection); + planSection.setClient(planContainer); + TableWrapLayout layout = new TableWrapLayout(); + layout.numColumns = 1; + planContainer.setLayout(layout); + + createPlanTable(planContainer, toolkit); + createPlanTableViewer(); + createRemoveButton(planContainer, toolkit); + hookDoubleClickAction(); + } + + private void createPlanTable(Composite parent, FormToolkit toolkit) { + int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; + planTable = toolkit.createTable(parent, style ); + TableLayout tlayout = new TableLayout(); + planTable.setLayout(tlayout); + TableWrapData wd = new TableWrapData(TableWrapData.FILL_GRAB); + wd.heightHint = 300; + wd.grabVertical = true; + planTable.setLayoutData(wd); + + planTable.setLinesVisible(true); + planTable.setHeaderVisible(true); + planTable.setEnabled(true); + + TableColumn column = new TableColumn(planTable, SWT.LEFT, 0); + column.setText(planColumnNames[0]); + column.setWidth(30); + + column = new TableColumn(planTable, SWT.LEFT, 1); + column.setText(planColumnNames[1]); + column.setWidth(300); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.DESCRIPTION)); + } + }); + + column = new TableColumn(planTable, SWT.LEFT, 2); + column.setText(planColumnNames[2]); + column.setWidth(50); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.PRIORITY)); + } + }); + + column = new TableColumn(planTable, SWT.LEFT, 3); + column.setText(planColumnNames[3]); + column.setWidth(170); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.ESTIMATE)); + } + }); + + + column = new TableColumn(planTable, SWT.LEFT, 4); + column.setText(planColumnNames[4]); + column.setWidth(170); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.REMINDER)); + } + }); + + } + + private void createRemoveButton(Composite parent, FormToolkit toolkit) { +// Composite composite = toolkit.createComposite(parent); + Button delete = toolkit.createButton(parent, "Remove Task", SWT.PUSH | SWT.CENTER); + + delete.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + ITask task = (ITask) ((IStructuredSelection) planTableViewer.getSelection()).getFirstElement(); + if (task != null) { + contentProvider.removeTask(task); + planTableViewer.refresh(); + } + } + }); + } + private void createPlanTableViewer() { + CellEditor[] editors = new CellEditor[planColumnNames.length]; + + reminderEditor = new ReminderCellEditor(planTable); + editors[0] = reminderEditor; // not used + editors[1] = reminderEditor;// not used + editors[2] = reminderEditor;// not used + editors[3] = new ComboBoxCellEditor(planTable, ESTIMATE_TIMES,SWT.READ_ONLY); + editors[4] = reminderEditor; + reminderEditor.addListener(new ICellEditorListener() { + public void applyEditorValue() { + Object selection = ((IStructuredSelection)planTableViewer.getSelection()).getFirstElement(); + if (selection instanceof ITask) { + ((ITask)selection).setReminderDate(reminderEditor.getReminderDate()); + planTableViewer.refresh(); + } + } + + public void cancelEditor() { + } + + public void editorValueChanged(boolean oldValidState, boolean newValidState) { + } + + }); + planTableViewer = new TableViewer(planTable); + planTableViewer.setCellEditors(editors); + planTableViewer.setUseHashlookup(true); + planTableViewer.setColumnProperties(planColumnNames); + + planTableViewer.setContentProvider(contentProvider); + planTableViewer.setLabelProvider(new PlannedTasksLabelProvider()); + planTableViewer.setCellModifier(new PlannedTasksCellModifier()); + planTableViewer.setInput(editorInput); + + initDrop(); + } + + @MylarWebRef(name="Drag and drop article", url="http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html") + private void initDrop() { + Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; + + planTableViewer.addDropSupport(DND.DROP_MOVE, types, new ViewerDropAdapter(planTableViewer) { + { + setFeedbackEnabled(false); + } + @Override + public boolean performDrop(Object data) { + Object selectedObject = ((IStructuredSelection)TaskListView.getDefault().getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof ITask) { + contentProvider.addTask((ITask)selectedObject); + planTableViewer.refresh(); + return true; + } else if (selectedObject instanceof ITaskListElement) { + if (MylarTasklistPlugin.getDefault().getTaskHandlerForElement((ITaskListElement)selectedObject) != null) { + ITask t = MylarTasklistPlugin.getDefault().getTaskHandlerForElement((ITaskListElement)selectedObject).dropItemToPlan((ITaskListElement)selectedObject); + contentProvider.addTask(t); + planTableViewer.refresh(); + return true; + } + return false; + } + return false; + } + + @Override + public boolean validateDrop(Object targetObject,int operation, TransferData transferType) { + Object selectedObject = ((IStructuredSelection)TaskListView.getDefault().getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof ITaskListElement && ((ITaskListElement)selectedObject).isDragAndDropEnabled()) { + return true; + } + return TextTransfer.getInstance().isSupportedType(transferType); + } + }); + } + + private class PlannedTasksCellModifier implements ICellModifier { + + public boolean canModify(Object element, String property) { + int columnIndex = Arrays.asList(planColumnNames).indexOf(property); + if (columnIndex == 4 || columnIndex == 3) { + return true; + } + return false; + } + + public Object getValue(Object element, String property) { + if (element instanceof ITask) { + int columnIndex = Arrays.asList(planColumnNames).indexOf(property); + if (element instanceof ITask) { + if (columnIndex == 4) { + return ((ITask)element).getReminderDateString(true); + } else if (columnIndex == 3) { + return new Integer(Arrays.asList(ESTIMATE_TIMES).indexOf(((ITask)element).getEstimateTimeForDisplay())); + } + + } + } + return null; + } + + public void modify(Object element, String property, Object value) { + int columnIndex = Arrays.asList(planColumnNames).indexOf(property); + if (element instanceof ITask) { + ITask task = (ITask) element; + if (columnIndex == 3) { + if (value instanceof Integer) { + task.setEstimatedTime(((Integer) value).intValue() * 10); + planTableViewer.refresh(); + } + } + } + } + } + + private void hookDoubleClickAction() { + planTableViewer.addDoubleClickListener(new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + doubleClickAction.run(); + } + }); + } + public class OpenTaskEditorAction extends Action { + @Override + public void run() { + ISelection selection = planTableViewer.getSelection(); + Object obj = ((IStructuredSelection)selection).getFirstElement(); + if (obj instanceof Task) { + ((Task)obj).openTaskInEditor(false); + } + planTableViewer.refresh(obj); + } + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizard.java new file mode 100644 index 000000000..27f16d2ec --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizard.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasklist.MylarTasklistPlugin; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; + +/** + * @author Ken Sueda + */ +public class MylarTaskPlannerWizard extends Wizard implements INewWizard { + + private MylarTaskPlannerWizardPage planningGamePage = null; + public MylarTaskPlannerWizard() { + super(); + init(); + } + + @Override + public boolean performFinish() { + try { + int numDays = planningGamePage.getNumDays(); + IWorkbenchPage page = MylarTasklistPlugin.getDefault() + .getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if (page == null) + return false; + IEditorInput input = new CompletedTasksEditorInput(numDays, + MylarTasklistPlugin.getTaskListManager().getTaskList()); + page.openEditor(input, MylarTasklistPlugin.PLANNING_GAME_EDITOR_ID); + } catch (PartInitException ex) { + MylarPlugin.log(ex, "couldn't open summary editor"); + } + return true; + } + + public void init(IWorkbench workbench, IStructuredSelection selection) { + } + + private void init() { + planningGamePage = new MylarTaskPlannerWizardPage(); + super.setForcePreviousAndNextButtons(true); + } + + @Override + public void addPages() { + addPage(planningGamePage); + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizardPage.java new file mode 100644 index 000000000..328984826 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/MylarTaskPlannerWizardPage.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +/** + * @author Mik Kersten + * @author Ken Sueda (original prototype) + */ +public class MylarTaskPlannerWizardPage extends WizardPage { + + private static final String DEFAULT_DAYS = "7"; + private static final String TITLE = "Mylar Task Planner"; + private static final String DESCRIPTION = + "Summarizes task activity and assists planning future tasks."; + + private Text numDays; + private int num = 0; + + public MylarTaskPlannerWizardPage() { + super(TITLE); + setTitle(TITLE); + setDescription(DESCRIPTION); + } + + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + GridLayout layout = new GridLayout(); + container.setLayout(layout); + layout.numColumns = 2; + + Label l = new Label(container, SWT.NULL); + l.setText("Number of past days to report on: "); + numDays = new Text(container, SWT.BORDER); + numDays.setText(DEFAULT_DAYS); + numDays.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + try{ + num = Integer.parseInt(numDays.getText()); + setErrorMessage(null); + } catch (Exception ex) { + setErrorMessage("Must be integer"); + num = 0; + } + } + }); + setControl(container); + } + + public int getNumDays() { + return num; + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksContentProvider.java new file mode 100644 index 000000000..c12dd96ff --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksContentProvider.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public class PlannedTasksContentProvider implements IStructuredContentProvider { + + private List tasks = new ArrayList(); + public PlannedTasksContentProvider() { + } + + public Object[] getElements(Object inputElement) { + return tasks.toArray(); + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + public void addTask(ITask t) { + if (!tasks.contains(t)) { + tasks.add(t); + } + } + + public void removeTask(ITask t) { + tasks.remove(t); + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksLabelProvider.java new file mode 100644 index 000000000..8008a9a7e --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksLabelProvider.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.mylar.tasklist.ITask; +import org.eclipse.mylar.tasklist.ITaskListElement; +import org.eclipse.swt.graphics.Image; + +/** + * @author Ken Sueda + */ +public class PlannedTasksLabelProvider extends LabelProvider implements + ITableLabelProvider { + + // {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; + public Image getColumnImage(Object element, int columnIndex) { + if (! (element instanceof ITaskListElement)) { + return null; + } + if (columnIndex == 0) { + return ((ITaskListElement)element).getIcon(); + } else { + return null; + } + + } + + public String getColumnText(Object element, int columnIndex) { + if (element instanceof ITask) { + ITask task = (ITask) element; + switch(columnIndex) { + case 1: + return task.getDescription(true); + case 2: + return task.getPriority(); + case 3: + return task.getEstimateTimeForDisplay(); + case 4: + return task.getReminderDateString(true); + } + } + return null; + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksSorter.java new file mode 100644 index 000000000..4d55c7eaa --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/PlannedTasksSorter.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.mylar.tasklist.ITask; + +/** + * @author Ken Sueda + */ +public class PlannedTasksSorter extends ViewerSorter { + +// {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; + public final static int DESCRIPTION = 1; + public final static int PRIORITY = 2; + public final static int ESTIMATE = 3; + public final static int REMINDER = 4; + + private int criteria; + + public PlannedTasksSorter(int criteria) { + super(); + this.criteria = criteria; + } + + @Override + public int compare(Viewer viewer, Object obj1, Object obj2) { + ITask t1 = (ITask) obj1; + ITask t2 = (ITask) obj2; + + switch (criteria) { + case DESCRIPTION: + return compareDescription(t1, t2); + case PRIORITY: + return comparePriority(t1, t2); + case ESTIMATE: + return compareEstimate(t1, t2); + case REMINDER: + return compareReminder(t1, t2); + default: + return 0; + } + } + + private int compareDescription(ITask task1, ITask task2) { + return task1.getDescription(false).compareTo(task2.getDescription(false)); + } + + private int comparePriority(ITask task1, ITask task2) { + return task1.getPriority().compareTo(task2.getPriority()); + } + + private int compareReminder(ITask task1, ITask task2) { + return task2.getReminderDate().compareTo(task1.getReminderDate()); + } + + private int compareEstimate(ITask task1, ITask task2) { + if (task1.getEstimateTime() > task2.getEstimateTime()) { + return 1; + } else { + return -1; + } + } + +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/ReminderCellEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/ReminderCellEditor.java new file mode 100644 index 000000000..1a031c73b --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/planner/ui/ReminderCellEditor.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * 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.tasklist.planner.ui; + +import java.util.Date; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.viewers.DialogCellEditor; +import org.eclipse.jface.window.IShellProvider; +import org.eclipse.mylar.tasklist.contribution.DatePicker; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +public class ReminderCellEditor extends DialogCellEditor { + + private Date reminderDate; + public ReminderCellEditor(Composite parent) { + super(parent, SWT.NONE); + } + @Override + protected Object openDialogBox(Control cellEditorWindow) { + ReminderDialog dialog = new ReminderDialog(cellEditorWindow.getShell()); + dialog.open(); + reminderDate = dialog.getDate(); + return reminderDate; + } + + public Date getReminderDate() { + return reminderDate; + } + private class ReminderDialog extends Dialog { + + private Date reminderDate = null; + protected ReminderDialog(Shell parentShell) { + super(parentShell); + } + + protected ReminderDialog(IShellProvider parentShell) { + super(parentShell); + } + + protected Control createDialogArea(Composite parent) { + Composite composite = (Composite) super.createDialogArea(parent); + final DatePicker datePicker = new DatePicker(composite, SWT.NULL); + datePicker.setDateText(""); + datePicker.addPickerSelectionListener(new SelectionListener() { + public void widgetSelected(SelectionEvent arg0) { + reminderDate = datePicker.getDate().getTime(); + } + + public void widgetDefaultSelected(SelectionEvent arg0) { + // ignore + } + }); + return composite; + } + public Date getDate() { + return reminderDate; + } + } +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/CompletedTaskCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/CompletedTaskCollector.java deleted file mode 100644 index 0a422387b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/CompletedTaskCollector.java +++ /dev/null @@ -1,47 +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.tasklist.report.internal; - -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public class CompletedTaskCollector implements ITasksCollector { - - private Map completedTasks = new HashMap(); - private Date cutOffDate = null; - private long DAY = 24*3600*1000; - - public CompletedTaskCollector(int prevDays) { - cutOffDate = new Date(new Date().getTime() - prevDays * DAY); - } - - public String getLabel() { - return "Completed Tasks"; - } - - public void consumeTask(ITask task) { - if (task.isCompleted() && task.getEndDate() != null && task.getEndDate().compareTo(cutOffDate) > 0 && !completedTasks.containsKey(task.getHandle())) { - completedTasks.put(task.getHandle(), task); - } - } - - public Collection getTasks() { - return completedTasks.values(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ITasksCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ITasksCollector.java deleted file mode 100644 index 86c0a5948..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ITasksCollector.java +++ /dev/null @@ -1,26 +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.tasklist.report.internal; - -import java.util.Collection; - -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public interface ITasksCollector { - - public abstract void consumeTask(ITask task); - - public abstract Collection getTasks(); -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ReminderRequiredCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ReminderRequiredCollector.java deleted file mode 100644 index 9898e06ff..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/ReminderRequiredCollector.java +++ /dev/null @@ -1,43 +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.tasklist.report.internal; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public class ReminderRequiredCollector implements ITasksCollector { - - private List tasks = new ArrayList(); - private Date curr = null; - - public ReminderRequiredCollector() { - curr = new Date(); - } - - public void consumeTask(ITask task) { - if (task.getReminderDate() != null && !task.hasBeenReminded() && task.getReminderDate().compareTo(curr) < 0) { - task.setReminded(true); - tasks.add(task); - } - } - - public List getTasks() { - return tasks; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java deleted file mode 100644 index 8bc16042c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java +++ /dev/null @@ -1,73 +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.tasklist.report.internal; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.mylar.tasklist.ITask; -import org.eclipse.mylar.tasklist.ITaskListElement; -import org.eclipse.mylar.tasklist.internal.TaskCategory; -import org.eclipse.mylar.tasklist.internal.TaskList; - -/** - * @author Ken Sueda - */ -public class TaskReportGenerator { - // NOTE: might want a map of tasks instead of a flattened list of tasks - - private List collectors = new ArrayList(); - private List tasks = new ArrayList(); - private TaskList tasklist = null; - - public TaskReportGenerator(TaskList tlist) { - tasklist = tlist; - } - - public void addCollector(ITasksCollector collector) { - collectors.add(collector); - } - - private void getTasksForReport() { - List roots = tasklist.getRootTasks(); - for(int i = 0; i < roots.size(); i++) { - ITask t = (ITask) roots.get(i); - for (ITasksCollector collector : collectors) { - collector.consumeTask(t); - } - } - for (TaskCategory cat : tasklist.getTaskCategories()) { - List sub = cat.getChildren(); - for (int j = 0; j < sub.size(); j++) { - if (sub.get(j) instanceof ITask) { - ITask element = (ITask) sub.get(j); - for (ITasksCollector collector : collectors) { - collector.consumeTask(element); - } - } - } - } - - // TODO need to support handling things in the bugzilla registry - for (ITasksCollector collector : collectors) { - tasks.addAll(collector.getTasks()); - } - } - - public void checkTasks() { - getTasksForReport(); - } - - public List getTasks() { - return tasks; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksContentProvider.java deleted file mode 100644 index d9aa92277..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksContentProvider.java +++ /dev/null @@ -1,39 +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.tasklist.report.ui; - -import java.util.List; - -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public class CompletedTasksContentProvider implements IStructuredContentProvider { - - private List tasks = null; - - public CompletedTasksContentProvider(List tasks) { - this.tasks = tasks; - } - public Object[] getElements(Object inputElement) { - return tasks.toArray(); - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksEditorInput.java deleted file mode 100644 index aff4bd859..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksEditorInput.java +++ /dev/null @@ -1,86 +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.tasklist.report.ui; - -import java.util.List; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.tasklist.ITask; -import org.eclipse.mylar.tasklist.internal.TaskList; -import org.eclipse.mylar.tasklist.report.internal.CompletedTaskCollector; -import org.eclipse.mylar.tasklist.report.internal.TaskReportGenerator; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; - -/** - * @author Ken Sueda - */ -public class CompletedTasksEditorInput implements IEditorInput { - private List completedTasks = null; - private TaskReportGenerator parser = null; - - public CompletedTasksEditorInput(int prevDays, TaskList tlist) { - parser = new TaskReportGenerator(tlist); - parser.addCollector(new CompletedTaskCollector(prevDays)); - parser.checkTasks(); - completedTasks = parser.getTasks(); - } - - /** - * IEditorInput interface methods - */ - public boolean exists() { - return true; - } - - public ImageDescriptor getImageDescriptor() { - return null; - } - - public String getName() { - return "Planning Game Report"; - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return "Planning Game Report"; - } - - public Object getAdapter(Class adapter) { - return null; - } - - /** - * Methods - */ - public List getTasks() { - return completedTasks; - } - - public int getListSize() { - return completedTasks.size(); - } - public long getTotalTimeSpent() { - long duration = 0; - for(ITask t : completedTasks) { - duration += t.getElapsedTimeLong(); - } - return duration; - } - - public TaskReportGenerator getReportGenerator() { - return parser; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksLabelProvider.java deleted file mode 100644 index 1e76fb164..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksLabelProvider.java +++ /dev/null @@ -1,57 +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.tasklist.report.ui; - -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.mylar.tasklist.ITask; -import org.eclipse.mylar.tasklist.ITaskListElement; -import org.eclipse.swt.graphics.Image; - -/** - * @author Ken Sueda - */ -public class CompletedTasksLabelProvider extends LabelProvider implements - ITableLabelProvider { - - //private String[] columnNames = new String[] { "Description", "Priority", "Date Completed", "Duration"}; - public Image getColumnImage(Object element, int columnIndex) { - if (! (element instanceof ITaskListElement)) { - return null; - } - if (columnIndex == 0) { - return ((ITaskListElement)element).getIcon(); - } else { - return null; - } - } - - public String getColumnText(Object element, int columnIndex) { - if (element instanceof ITask) { - ITask task = (ITask) element; - switch(columnIndex) { - case 1: - return task.getDescription(true); - case 2: - return task.getPriority(); - case 3: - return task.getCreationDateString(); - case 4: - return task.getEndDateString(); - case 5: - return task.getElapsedTimeForDisplay(); - } - } - return null; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksSorter.java deleted file mode 100644 index 357116aa5..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/CompletedTasksSorter.java +++ /dev/null @@ -1,91 +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.tasklist.report.ui; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public class CompletedTasksSorter extends ViewerSorter { - /** - * Constructor argument values that indicate to sort items by - * different columns. - */ - public final static int DESCRIPTION = 1; - public final static int PRIORITY = 2; - public final static int CREATION_DATE = 3; - public final static int COMPLETED_DATE = 4; - public final static int DURATION = 5; - - // Criteria that the instance uses - private int criteria; - - /** - * Creates a resource sorter that will use the given sort criteria. - * - * @param criteria the sort criterion to use: one of NAME or - * TYPE - */ - public CompletedTasksSorter(int criteria) { - super(); - this.criteria = criteria; - } - - @Override - public int compare(Viewer viewer, Object obj1, Object obj2) { - ITask t1 = (ITask) obj1; - ITask t2 = (ITask) obj2; - - switch (criteria) { - case DESCRIPTION: - return compareDescription(t1, t2); - case PRIORITY: - return comparePriority(t1, t2); - case CREATION_DATE: - return compareCreationDate(t1, t2); - case COMPLETED_DATE: - return compareCompletedDate(t1, t2); - case DURATION: - return compareDuration(t1, t2); - default: - return 0; - } - } - - private int compareDescription(ITask task1, ITask task2) { - return task1.getDescription(false).compareTo(task2.getDescription(false)); - } - - private int comparePriority(ITask task1, ITask task2) { - return task1.getPriority().compareTo(task2.getPriority()); - } - - private int compareCompletedDate(ITask task1, ITask task2) { - return task2.getEndDate().compareTo(task1.getEndDate()); - } - - private int compareCreationDate(ITask task1, ITask task2) { - if(task1.getCreationDate() == null) - return 1; - else if(task2.getCreationDate() == null) - return -1; - else - return task2.getCreationDate().compareTo(task1.getCreationDate()); - } - - private int compareDuration(ITask task1, ITask task2) { - return task1.getElapsedTimeLong() < task2.getElapsedTimeLong() ? 1 : -1; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksContentProvider.java deleted file mode 100644 index 235926765..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksContentProvider.java +++ /dev/null @@ -1,49 +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.tasklist.report.ui; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public class PlannedTasksContentProvider implements IStructuredContentProvider { - - private List tasks = new ArrayList(); - public PlannedTasksContentProvider() { - } - - public Object[] getElements(Object inputElement) { - return tasks.toArray(); - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - public void addTask(ITask t) { - if (!tasks.contains(t)) { - tasks.add(t); - } - } - - public void removeTask(ITask t) { - tasks.remove(t); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksLabelProvider.java deleted file mode 100644 index f91eb57de..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksLabelProvider.java +++ /dev/null @@ -1,55 +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.tasklist.report.ui; - -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.mylar.tasklist.ITask; -import org.eclipse.mylar.tasklist.ITaskListElement; -import org.eclipse.swt.graphics.Image; - -/** - * @author Ken Sueda - */ -public class PlannedTasksLabelProvider extends LabelProvider implements - ITableLabelProvider { - - // {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; - public Image getColumnImage(Object element, int columnIndex) { - if (! (element instanceof ITaskListElement)) { - return null; - } - if (columnIndex == 0) { - return ((ITaskListElement)element).getIcon(); - } else { - return null; - } - - } - - public String getColumnText(Object element, int columnIndex) { - if (element instanceof ITask) { - ITask task = (ITask) element; - switch(columnIndex) { - case 1: - return task.getDescription(true); - case 2: - return task.getPriority(); - case 3: - return task.getEstimateTimeForDisplay(); - case 4: - return task.getReminderDateString(true); - } - } - return null; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksSorter.java deleted file mode 100644 index 1fbb049b2..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlannedTasksSorter.java +++ /dev/null @@ -1,75 +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.tasklist.report.ui; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasklist.ITask; - -/** - * @author Ken Sueda - */ -public class PlannedTasksSorter extends ViewerSorter { - -// {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; - public final static int DESCRIPTION = 1; - public final static int PRIORITY = 2; - public final static int ESTIMATE = 3; - public final static int REMINDER = 4; - - private int criteria; - - public PlannedTasksSorter(int criteria) { - super(); - this.criteria = criteria; - } - - @Override - public int compare(Viewer viewer, Object obj1, Object obj2) { - ITask t1 = (ITask) obj1; - ITask t2 = (ITask) obj2; - - switch (criteria) { - case DESCRIPTION: - return compareDescription(t1, t2); - case PRIORITY: - return comparePriority(t1, t2); - case ESTIMATE: - return compareEstimate(t1, t2); - case REMINDER: - return compareReminder(t1, t2); - default: - return 0; - } - } - - private int compareDescription(ITask task1, ITask task2) { - return task1.getDescription(false).compareTo(task2.getDescription(false)); - } - - private int comparePriority(ITask task1, ITask task2) { - return task1.getPriority().compareTo(task2.getPriority()); - } - - private int compareReminder(ITask task1, ITask task2) { - return task2.getReminderDate().compareTo(task1.getReminderDate()); - } - - private int compareEstimate(ITask task1, ITask task2) { - if (task1.getEstimateTime() > task2.getEstimateTime()) { - return 1; - } else { - return -1; - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java deleted file mode 100644 index 5da135081..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java +++ /dev/null @@ -1,472 +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.tasklist.report.ui; - -import java.util.Arrays; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.ComboBoxCellEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.ICellEditorListener; -import org.eclipse.jface.viewers.ICellModifier; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.ViewerDropAdapter; -import org.eclipse.mylar.core.util.DateUtil; -import org.eclipse.mylar.dt.MylarWebRef; -import org.eclipse.mylar.tasklist.ITask; -import org.eclipse.mylar.tasklist.ITaskListElement; -import org.eclipse.mylar.tasklist.MylarTasklistPlugin; -import org.eclipse.mylar.tasklist.Task; -import org.eclipse.mylar.tasklist.ui.views.TaskListView; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.dnd.TransferData; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.FormColors; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.forms.widgets.Section; -import org.eclipse.ui.forms.widgets.TableWrapData; -import org.eclipse.ui.forms.widgets.TableWrapLayout; -import org.eclipse.ui.part.EditorPart; - -/** - * @author Ken Sueda - */ -public class PlanningGameEditorPart extends EditorPart { - - private CompletedTasksEditorInput editorInput = null; - private Table completedTable; - private TableViewer completedTableViewer; - private String[] completedColumnNames = new String[] {".", "Description", "Priority", "Date Created", "Date Completed", "Duration"}; - private Table planTable; - private TableViewer planTableViewer; - private PlannedTasksContentProvider contentProvider = new PlannedTasksContentProvider(); - private ReminderCellEditor reminderEditor = null; - private String[] planColumnNames = new String[] {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; - private static final String[] ESTIMATE_TIMES = new String[] {"0 Hours", "1 Hours", "2 Hours", "3 Hours","4 Hours","5 Hours","6 Hours","7 Hours","8 Hours","9 Hours","10 Hours"}; - private OpenTaskEditorAction doubleClickAction = new OpenTaskEditorAction(); - - @Override - public void doSave(IProgressMonitor monitor) { - } - - @Override - public void doSaveAs() { - } - - @SuppressWarnings("deprecation") - @Override - public void init(IEditorSite site, IEditorInput input) - throws PartInitException { - setSite(site); - setInput(input); - editorInput = (CompletedTasksEditorInput)input; - setPartName(editorInput.getName()); - setTitleToolTip(editorInput.getToolTipText()); - } - - @Override - public boolean isDirty() { - return false; - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - @Override - public void createPartControl(Composite parent) { - FormToolkit toolkit = new FormToolkit(parent.getDisplay()); - ScrolledForm sform = toolkit.createScrolledForm(parent); - sform.getBody().setLayout(new TableWrapLayout()); - Composite editorComposite = sform.getBody(); - - createSummarySection(editorComposite, toolkit); - createCompletedSection(editorComposite, toolkit); - createPlannedTasksSection(editorComposite, toolkit); - } - - @Override - public void setFocus() { - } - - private void createSummarySection(Composite parent, FormToolkit toolkit) { - Section summarySection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); - summarySection.setText("Mylar Task Planner"); - summarySection.setLayout(new TableWrapLayout()); - summarySection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); - Composite summaryContainer = toolkit.createComposite(summarySection); - summarySection.setClient(summaryContainer); - TableWrapLayout layout = new TableWrapLayout(); - layout.numColumns = 1; - summaryContainer.setLayout(layout); - - int length = editorInput.getListSize(); - String numComplete = "Number of completed tasks: " + editorInput.getListSize(); - Label label = toolkit.createLabel(summaryContainer, numComplete, SWT.NULL); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - String avgTime = "Average time spent: "; - if (length > 0) { - avgTime = avgTime + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpent() / editorInput.getListSize()); - } else { - avgTime = avgTime + 0; - } - label = toolkit.createLabel(summaryContainer, avgTime, SWT.NULL); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - String totalTime = "Total time spent: " + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpent()); - label = toolkit.createLabel(summaryContainer, totalTime, SWT.NULL); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - } - - private void createCompletedSection(Composite parent, FormToolkit toolkit) { - Section detailSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); - detailSection.setText("Completed Tasks Details"); - detailSection.setLayout(new TableWrapLayout()); - detailSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); - Composite detailContainer = toolkit.createComposite(detailSection); - detailSection.setClient(detailContainer); - TableWrapLayout layout = new TableWrapLayout(); - layout.numColumns = 2; - detailContainer.setLayout(layout); - - createCompletedTable(detailContainer, toolkit); - createCompletedTableViewer(); - } - - private void createCompletedTable(Composite parent, FormToolkit toolkit) { - int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; - completedTable = toolkit.createTable(parent, style ); - TableLayout tlayout = new TableLayout(); - completedTable.setLayout(tlayout); - TableWrapData wd = new TableWrapData(TableWrapData.FILL_GRAB); - wd.heightHint = 300; - wd.grabVertical = true; - completedTable.setLayoutData(wd); - - completedTable.setLinesVisible(true); - completedTable.setHeaderVisible(true); - completedTable.setEnabled(true); - - TableColumn column = new TableColumn(completedTable, SWT.LEFT, 0); - column.setText(completedColumnNames[0]); - column.setWidth(30); - - column = new TableColumn(completedTable, SWT.LEFT, 1); - column.setText(completedColumnNames[1]); - column.setWidth(300); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.DESCRIPTION)); - - } - }); - - column = new TableColumn(completedTable, SWT.LEFT, 2); - column.setText(completedColumnNames[2]); - column.setWidth(50); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.PRIORITY)); - } - }); - - column = new TableColumn(completedTable, SWT.LEFT, 3); - column.setText(completedColumnNames[3]); - column.setWidth(170); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.CREATION_DATE)); - } - }); - - column = new TableColumn(completedTable, SWT.LEFT, 4); - column.setText(completedColumnNames[4]); - column.setWidth(170); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.COMPLETED_DATE)); - } - }); - - - column = new TableColumn(completedTable, SWT.LEFT, 5); - column.setText(completedColumnNames[5]); - column.setWidth(100); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - completedTableViewer.setSorter(new CompletedTasksSorter(CompletedTasksSorter.DURATION)); - } - }); - } - - private void createCompletedTableViewer() { - completedTableViewer = new TableViewer(completedTable); - completedTableViewer.setUseHashlookup(true); - completedTableViewer.setColumnProperties(completedColumnNames); - - completedTableViewer.setContentProvider(new CompletedTasksContentProvider(editorInput.getTasks())); - completedTableViewer.setLabelProvider(new CompletedTasksLabelProvider()); - completedTableViewer.setInput(editorInput); - } - - private void createPlannedTasksSection(Composite parent, FormToolkit toolkit) { - Section planSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); - planSection.setText("Planned Tasks"); - planSection.setLayout(new TableWrapLayout()); - planSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); - Composite planContainer = toolkit.createComposite(planSection); - planSection.setClient(planContainer); - TableWrapLayout layout = new TableWrapLayout(); - layout.numColumns = 1; - planContainer.setLayout(layout); - - createPlanTable(planContainer, toolkit); - createPlanTableViewer(); - createRemoveButton(planContainer, toolkit); - hookDoubleClickAction(); - } - - private void createPlanTable(Composite parent, FormToolkit toolkit) { - int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; - planTable = toolkit.createTable(parent, style ); - TableLayout tlayout = new TableLayout(); - planTable.setLayout(tlayout); - TableWrapData wd = new TableWrapData(TableWrapData.FILL_GRAB); - wd.heightHint = 300; - wd.grabVertical = true; - planTable.setLayoutData(wd); - - planTable.setLinesVisible(true); - planTable.setHeaderVisible(true); - planTable.setEnabled(true); - - TableColumn column = new TableColumn(planTable, SWT.LEFT, 0); - column.setText(planColumnNames[0]); - column.setWidth(30); - - column = new TableColumn(planTable, SWT.LEFT, 1); - column.setText(planColumnNames[1]); - column.setWidth(300); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.DESCRIPTION)); - } - }); - - column = new TableColumn(planTable, SWT.LEFT, 2); - column.setText(planColumnNames[2]); - column.setWidth(50); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.PRIORITY)); - } - }); - - column = new TableColumn(planTable, SWT.LEFT, 3); - column.setText(planColumnNames[3]); - column.setWidth(170); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.ESTIMATE)); - } - }); - - - column = new TableColumn(planTable, SWT.LEFT, 4); - column.setText(planColumnNames[4]); - column.setWidth(170); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - planTableViewer.setSorter(new CompletedTasksSorter(PlannedTasksSorter.REMINDER)); - } - }); - - } - - private void createRemoveButton(Composite parent, FormToolkit toolkit) { -// Composite composite = toolkit.createComposite(parent); - Button delete = toolkit.createButton(parent, "Remove Task", SWT.PUSH | SWT.CENTER); - - delete.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - ITask task = (ITask) ((IStructuredSelection) planTableViewer.getSelection()).getFirstElement(); - if (task != null) { - contentProvider.removeTask(task); - planTableViewer.refresh(); - } - } - }); - } - private void createPlanTableViewer() { - CellEditor[] editors = new CellEditor[planColumnNames.length]; - - reminderEditor = new ReminderCellEditor(planTable); - editors[0] = reminderEditor; // not used - editors[1] = reminderEditor;// not used - editors[2] = reminderEditor;// not used - editors[3] = new ComboBoxCellEditor(planTable, ESTIMATE_TIMES,SWT.READ_ONLY); - editors[4] = reminderEditor; - reminderEditor.addListener(new ICellEditorListener() { - public void applyEditorValue() { - Object selection = ((IStructuredSelection)planTableViewer.getSelection()).getFirstElement(); - if (selection instanceof ITask) { - ((ITask)selection).setReminderDate(reminderEditor.getReminderDate()); - planTableViewer.refresh(); - } - } - - public void cancelEditor() { - } - - public void editorValueChanged(boolean oldValidState, boolean newValidState) { - } - - }); - planTableViewer = new TableViewer(planTable); - planTableViewer.setCellEditors(editors); - planTableViewer.setUseHashlookup(true); - planTableViewer.setColumnProperties(planColumnNames); - - planTableViewer.setContentProvider(contentProvider); - planTableViewer.setLabelProvider(new PlannedTasksLabelProvider()); - planTableViewer.setCellModifier(new PlannedTasksCellModifier()); - planTableViewer.setInput(editorInput); - - initDrop(); - } - - @MylarWebRef(name="Drag and drop article", url="http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html") - private void initDrop() { - Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; - - planTableViewer.addDropSupport(DND.DROP_MOVE, types, new ViewerDropAdapter(planTableViewer) { - { - setFeedbackEnabled(false); - } - @Override - public boolean performDrop(Object data) { - Object selectedObject = ((IStructuredSelection)TaskListView.getDefault().getViewer().getSelection()).getFirstElement(); - if (selectedObject instanceof ITask) { - contentProvider.addTask((ITask)selectedObject); - planTableViewer.refresh(); - return true; - } else if (selectedObject instanceof ITaskListElement) { - if (MylarTasklistPlugin.getDefault().getTaskHandlerForElement((ITaskListElement)selectedObject) != null) { - ITask t = MylarTasklistPlugin.getDefault().getTaskHandlerForElement((ITaskListElement)selectedObject).dropItemToPlan((ITaskListElement)selectedObject); - contentProvider.addTask(t); - planTableViewer.refresh(); - return true; - } - return false; - } - return false; - } - - @Override - public boolean validateDrop(Object targetObject,int operation, TransferData transferType) { - Object selectedObject = ((IStructuredSelection)TaskListView.getDefault().getViewer().getSelection()).getFirstElement(); - if (selectedObject instanceof ITaskListElement && ((ITaskListElement)selectedObject).isDragAndDropEnabled()) { - return true; - } - return TextTransfer.getInstance().isSupportedType(transferType); - } - }); - } - - private class PlannedTasksCellModifier implements ICellModifier { - - public boolean canModify(Object element, String property) { - int columnIndex = Arrays.asList(planColumnNames).indexOf(property); - if (columnIndex == 4 || columnIndex == 3) { - return true; - } - return false; - } - - public Object getValue(Object element, String property) { - if (element instanceof ITask) { - int columnIndex = Arrays.asList(planColumnNames).indexOf(property); - if (element instanceof ITask) { - if (columnIndex == 4) { - return ((ITask)element).getReminderDateString(true); - } else if (columnIndex == 3) { - return new Integer(Arrays.asList(ESTIMATE_TIMES).indexOf(((ITask)element).getEstimateTimeForDisplay())); - } - - } - } - return null; - } - - public void modify(Object element, String property, Object value) { - int columnIndex = Arrays.asList(planColumnNames).indexOf(property); - if (element instanceof ITask) { - ITask task = (ITask) element; - if (columnIndex == 3) { - if (value instanceof Integer) { - task.setEstimatedTime(((Integer) value).intValue() * 10); - planTableViewer.refresh(); - } - } - } - } - } - - private void hookDoubleClickAction() { - planTableViewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - doubleClickAction.run(); - } - }); - } - public class OpenTaskEditorAction extends Action { - @Override - public void run() { - ISelection selection = planTableViewer.getSelection(); - Object obj = ((IStructuredSelection)selection).getFirstElement(); - if (obj instanceof Task) { - ((Task)obj).openTaskInEditor(false); - } - planTableViewer.refresh(obj); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizard.java deleted file mode 100644 index cfc0e19c5..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizard.java +++ /dev/null @@ -1,64 +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.tasklist.report.ui; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.core.MylarPlugin; -import org.eclipse.mylar.tasklist.MylarTasklistPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; - -/** - * @author Ken Sueda - */ -public class PlanningGameWizard extends Wizard implements INewWizard { - - private PlanningGameWizardPage planningGamePage = null; - public PlanningGameWizard() { - super(); - init(); - } - - @Override - public boolean performFinish() { - try { - int numDays = planningGamePage.getNumDays(); - IWorkbenchPage page = MylarTasklistPlugin.getDefault() - .getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (page == null) - return false; - IEditorInput input = new CompletedTasksEditorInput(numDays, - MylarTasklistPlugin.getTaskListManager().getTaskList()); - page.openEditor(input, MylarTasklistPlugin.PLANNING_GAME_EDITOR_ID); - } catch (PartInitException ex) { - MylarPlugin.log(ex, "coudln't open summary editor"); - } - return true; - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } - - private void init() { - planningGamePage = new PlanningGameWizardPage(); - super.setForcePreviousAndNextButtons(true); - } - - @Override - public void addPages() { - addPage(planningGamePage); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizardPage.java deleted file mode 100644 index 810616396..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameWizardPage.java +++ /dev/null @@ -1,64 +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.tasklist.report.ui; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * @author Ken Sueda - */ -public class PlanningGameWizardPage extends WizardPage { - - private Text numDays; - private int num = 0; - - public PlanningGameWizardPage() { - super("Planning Game Wizard"); - setTitle("Planning Game Report"); - setDescription("All tasks completed with the last selected date will be summarized into a report"); - } - - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - - - Label l = new Label(container, SWT.NULL); - l.setText("Number of days to compile reports over: "); - numDays = new Text(container, SWT.BORDER); - numDays.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - try{ - num = Integer.parseInt(numDays.getText()); - setErrorMessage(null); - } catch (Exception ex) { - setErrorMessage("Must be integer"); - num = 0; - } - } - }); - setControl(container); - } - - public int getNumDays() { - return num; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/ReminderCellEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/ReminderCellEditor.java deleted file mode 100644 index 2f51614a8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/ReminderCellEditor.java +++ /dev/null @@ -1,73 +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.tasklist.report.ui; - -import java.util.Date; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.DialogCellEditor; -import org.eclipse.jface.window.IShellProvider; -import org.eclipse.mylar.tasklist.contribution.DatePicker; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -public class ReminderCellEditor extends DialogCellEditor { - - private Date reminderDate; - public ReminderCellEditor(Composite parent) { - super(parent, SWT.NONE); - } - @Override - protected Object openDialogBox(Control cellEditorWindow) { - ReminderDialog dialog = new ReminderDialog(cellEditorWindow.getShell()); - dialog.open(); - reminderDate = dialog.getDate(); - return reminderDate; - } - - public Date getReminderDate() { - return reminderDate; - } - private class ReminderDialog extends Dialog { - - private Date reminderDate = null; - protected ReminderDialog(Shell parentShell) { - super(parentShell); - } - - protected ReminderDialog(IShellProvider parentShell) { - super(parentShell); - } - - protected Control createDialogArea(Composite parent) { - Composite composite = (Composite) super.createDialogArea(parent); - final DatePicker datePicker = new DatePicker(composite, SWT.NULL); - datePicker.setDateText(""); - datePicker.addPickerSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent arg0) { - reminderDate = datePicker.getDate().getTime(); - } - - public void widgetDefaultSelected(SelectionEvent arg0) { - // ignore - } - }); - return composite; - } - public Date getDate() { - return reminderDate; - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/AutoCloseAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/AutoCloseAction.java index 0cd95401c..ed5936211 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/AutoCloseAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/AutoCloseAction.java @@ -21,7 +21,7 @@ import org.eclipse.mylar.tasklist.MylarTasklistPlugin; public class AutoCloseAction extends Action { public static final String ID = "org.eclipse.mylar.tasklist.actions.auto.close"; - private static final String LABEL = "Close Editors On Context Switch"; + private static final String LABEL = "Auto Close Editors"; public AutoCloseAction() { setText(LABEL); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/DropDownTaskNavigateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/DropDownTaskNavigateAction.java index 23d66aad7..479a7045a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/DropDownTaskNavigateAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/DropDownTaskNavigateAction.java @@ -67,7 +67,7 @@ public abstract class DropDownTaskNavigateAction extends Action implements IMenu } public void run(){ - new TaskActivateAction(targetTask).run(); + new TaskActivateAction().run(targetTask); taskHistory.navigatedToTask(targetTask); //Notify the task history of arbitrary history navigation setButtonStatus(); view.getViewer().refresh(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/NextTaskDropDownAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/NextTaskDropDownAction.java index a04bd99ee..d04ac4ccc 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/NextTaskDropDownAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/NextTaskDropDownAction.java @@ -51,7 +51,7 @@ public class NextTaskDropDownAction extends DropDownTaskNavigateAction { public void run() { if (taskHistory.hasNext()) { - new TaskActivateAction(taskHistory.getNextTask()).run(); + new TaskActivateAction().run(taskHistory.getNextTask()); setButtonStatus(); view.getViewer().refresh(); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/PreviousTaskDropDownAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/PreviousTaskDropDownAction.java index a8029ffc6..3e04120a9 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/PreviousTaskDropDownAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/PreviousTaskDropDownAction.java @@ -51,7 +51,7 @@ public class PreviousTaskDropDownAction extends DropDownTaskNavigateAction { public void run() { if (taskHistory.hasPrevious()) { - new TaskActivateAction(taskHistory.getPreviousTask()).run(); + new TaskActivateAction().run(taskHistory.getPreviousTask()); setButtonStatus(); view.getViewer().refresh(); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskActivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskActivateAction.java index 44866a6ae..d2ac31c36 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskActivateAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskActivateAction.java @@ -14,10 +14,10 @@ package org.eclipse.mylar.tasklist.ui.actions; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.mylar.core.MylarPlugin; import org.eclipse.mylar.tasklist.ITask; import org.eclipse.mylar.tasklist.MylarTasklistPlugin; +import org.eclipse.mylar.tasklist.TaskListImages; import org.eclipse.mylar.tasklist.ui.views.TaskListView; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; @@ -28,37 +28,34 @@ import org.eclipse.ui.IViewPart; public class TaskActivateAction extends Action implements IViewActionDelegate { public static final String ID = "org.eclipse.mylar.tasklist.actions.context.activate"; - - private ITask task = null; - public TaskActivateAction() { - // plugin.xml activation - } + public ITask task = null; - public TaskActivateAction(ITask task) { - this.task = task; + public TaskActivateAction() { setId(ID); + setText("Activate"); + setImageDescriptor(TaskListImages.TASK_ACTIVE); } - public void run() { - MylarPlugin.getContextManager().actionObserved(this, Boolean.TRUE.toString()); - MylarTasklistPlugin.getTaskListManager().activateTask(task); - } - public void init(IViewPart view) { // TODO Auto-generated method stub } - public void run(IAction action) { - ISelection selection = TaskListView.getDefault().getViewer().getSelection(); - if (selection instanceof IStructuredSelection) { - Object element = ((IStructuredSelection)selection).getFirstElement(); - if (element instanceof ITask) { - MylarTasklistPlugin.getTaskListManager().activateTask((ITask)element); - } + public void run() { + MylarPlugin.getContextManager().actionObserved(this, Boolean.TRUE.toString()); + run(TaskListView.getDefault().getSelectedTask()); + } + + public void run(ITask task) { + if (task != null) { + MylarTasklistPlugin.getTaskListManager().activateTask(task); } } + + public void run(IAction action) { + run(); + } public void selectionChanged(IAction action, ISelection selection) { // TODO Auto-generated method stub diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskDeactivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskDeactivateAction.java index 2595b6ed9..ea2276d29 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskDeactivateAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/TaskDeactivateAction.java @@ -15,37 +15,38 @@ import org.eclipse.jface.action.Action; import org.eclipse.mylar.core.MylarPlugin; import org.eclipse.mylar.tasklist.ITask; import org.eclipse.mylar.tasklist.MylarTasklistPlugin; +import org.eclipse.mylar.tasklist.TaskListImages; import org.eclipse.mylar.tasklist.ui.views.TaskListView; import org.eclipse.ui.IWorkbenchPage; /** - * @author Mik Kersten and Ken Sueda + * @author Mik Kersten */ public class TaskDeactivateAction extends Action { public static final String ID = "org.eclipse.mylar.tasklist.actions.context.deactivate"; - - private ITask task; - private final TaskListView view; - - public TaskDeactivateAction(ITask task, TaskListView view) { - this.task = task; - this.view = view; + + public TaskDeactivateAction() { setId(ID); + setText("Deactivate"); + setImageDescriptor(TaskListImages.TASK_INACTIVE); } - public void run() { + public void run(ITask task) { MylarPlugin.getContextManager().actionObserved(this, Boolean.FALSE.toString()); - MylarTasklistPlugin.getTaskListManager().deactivateTask(task); IWorkbenchPage page = MylarTasklistPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); - - // if we couldn't get the page, get out of here - if (page == null) - return; + if (page == null) return; try { - this.view.closeTaskEditors(task, page); + if (task != null) { + MylarTasklistPlugin.getTaskListManager().deactivateTask(task); + TaskListView.getDefault().closeTaskEditors(task, page); + } } catch (Exception e) { MylarPlugin.log(e, " Closing task editor on task deactivation failed"); - } + } + } + + public void run() { + run(TaskListView.getDefault().getSelectedTask()); } } \ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/views/TaskListView.java index 3ee326d20..3018c37f0 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/views/TaskListView.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/views/TaskListView.java @@ -31,11 +31,12 @@ 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.IOpenListener; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TextCellEditor; @@ -46,12 +47,12 @@ import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.Window; import org.eclipse.mylar.core.MylarPlugin; import org.eclipse.mylar.dt.MylarWebRef; -import org.eclipse.mylar.tasklist.ITaskListCategory; import org.eclipse.mylar.tasklist.IQuery; import org.eclipse.mylar.tasklist.IQueryHit; import org.eclipse.mylar.tasklist.ITask; import org.eclipse.mylar.tasklist.ITaskFilter; import org.eclipse.mylar.tasklist.ITaskHandler; +import org.eclipse.mylar.tasklist.ITaskListCategory; import org.eclipse.mylar.tasklist.ITaskListDynamicSubMenuContributor; import org.eclipse.mylar.tasklist.ITaskListElement; import org.eclipse.mylar.tasklist.MylarTasklistPlugin; @@ -128,7 +129,8 @@ public class TaskListView extends ViewPart { public static final String ID = "org.eclipse.mylar.tasks.ui.views.TaskListView"; private static final String SEPARATOR_ID_REPORTS = "reports"; - + private static final String PART_NAME = "Mylar Tasks"; + private static TaskListView INSTANCE; FilteredTree tree; @@ -142,8 +144,7 @@ public class TaskListView extends ViewPart { private CopyDescriptionAction copyAction; private OpenTaskEditorAction openAction; - private CreateTaskAction createTask; - private CreateTaskAction createTaskToolbar; + private CreateTaskAction createTaskAction; private CreateCategoryAction createCategory; private RenameAction rename; @@ -151,7 +152,7 @@ public class TaskListView extends ViewPart { private CollapseAllAction collapseAll; private DeleteAction delete; private AutoCloseAction autoClose; - private OpenTaskEditorAction doubleClickAction; + private OpenTaskEditorAction openTaskEditor; private RemoveFromCategoryAction removeAction; @@ -472,11 +473,11 @@ public class TaskListView extends ViewPart { } if (task != null) { if (task.isActive()) { - new TaskDeactivateAction(task, INSTANCE).run(); + new TaskDeactivateAction().run(); nextTaskAction.setEnabled(taskHistory.hasNext()); previousTaskAction.setEnabled(taskHistory.hasPrevious()); } else { - new TaskActivateAction(task).run(); + new TaskActivateAction().run(); addTaskToHistory(task); } // getViewer().setSelection(null); @@ -757,7 +758,7 @@ public class TaskListView extends ViewPart { makeActions(); hookContextMenu(); - hookDoubleClickAction(); + hookOpenAction(); contributeToActionBars(); ToolTipHandler toolTipHandler = new ToolTipHandler(getViewer().getControl().getShell()); @@ -899,16 +900,34 @@ public class TaskListView extends ViewPart { private void fillLocalPullDown(IMenuManager manager) { updateDrillDownActions(); - manager.add(collapseAll); + manager.add(new Separator("reports")); + manager.add(new Separator("local")); + manager.add(createTaskAction); + manager.add(createCategory); manager.add(goBackAction); + manager.add(collapseAll); // manager.add(new Separator()); +// autoClose.setEnabled(true); + manager.add(new Separator("context")); manager.add(autoClose); - autoClose.setEnabled(true); manager.add(workOffline); -// workOffline.setEnabled(true); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } + private void fillLocalToolBar(IToolBarManager manager) { +// manager.removeAll(); + manager.add(new Separator(SEPARATOR_ID_REPORTS)); + manager.add(createTaskAction); + manager.add(new Separator()); + manager.add(filterCompleteTask); + manager.add(filterOnPriority); + manager.add(new Separator()); + manager.add(previousTaskAction); + manager.add(nextTaskAction); + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + + } + void fillContextMenu(IMenuManager manager) { updateDrillDownActions(); @@ -918,17 +937,19 @@ public class TaskListView extends ViewPart { element = (ITaskListElement) selectedObject; } + addAction(new TaskActivateAction(), manager, element); + addAction(new TaskDeactivateAction(), manager, element); addAction(openAction, manager, element); -// addAction(goIntoAction, manager, element); +// addAction(openAction, manager, element); manager.add(new Separator("tasks")); addAction(completeTask, manager, element); addAction(incompleteTask, manager, element); - addAction(delete, manager, element); - addAction(copyAction, manager, element); + manager.add(new Separator()); addAction(rename, manager, element); addAction(removeAction, manager, element); - manager.add(new Separator()); - addAction(createTask, manager, element); + addAction(delete, manager, element); + addAction(copyAction, manager, element); +// addAction(createTask, manager, element); manager.add(new Separator("context")); for (ITaskListDynamicSubMenuContributor contributor : MylarTasklistPlugin.getDefault().getDynamicMenuContributers()) { @@ -1026,10 +1047,6 @@ public class TaskListView extends ViewPart { // } } - /** - * @see org.eclipse.pde.internal.ui.view.HistoryDropDownAction - * - */ private void makeActions() { copyAction = new CopyDescriptionAction(this); @@ -1040,8 +1057,7 @@ public class TaskListView extends ViewPart { // goIntoAction = new GoIntoAction(drillDownAdapter); goBackAction = new GoUpAction(drillDownAdapter); - createTask = new CreateTaskAction(this); - createTaskToolbar = new CreateTaskAction(this); + createTaskAction = new CreateTaskAction(this); createCategory = new CreateCategoryAction(this); removeAction = new RemoveFromCategoryAction(this); rename = new RenameAction(this); @@ -1051,13 +1067,12 @@ public class TaskListView extends ViewPart { autoClose = new AutoCloseAction(); completeTask = new MarkTaskCompleteAction(this); incompleteTask = new MarkTaskIncompleteAction(this); - doubleClickAction = new OpenTaskEditorAction(this); + openTaskEditor = new OpenTaskEditorAction(this); filterCompleteTask = new FilterCompletedTasksAction(this); filterOnPriority = new PriorityDropDownAction(); previousTaskAction = new PreviousTaskDropDownAction(this, taskHistory); nextTaskAction = new NextTaskDropDownAction(this, taskHistory); } - public void toggleNextAction(boolean enable) { nextTaskAction.setEnabled(enable); @@ -1117,11 +1132,11 @@ public class TaskListView extends ViewPart { } } - private void hookDoubleClickAction() { - getViewer().addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - doubleClickAction.run(); - } + private void hookOpenAction() { + getViewer().addOpenListener(new IOpenListener() { + public void open(OpenEvent event) { + openTaskEditor.run(); + } }); } @@ -1204,25 +1219,9 @@ public class TaskListView extends ViewPart { return COMPLETE_FILTER; } - public TaskPriorityFilter getPriorityFilter() { return PRIORITY_FILTER; } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.removeAll(); - manager.add(createTaskToolbar); - manager.add(createCategory); - manager.add(new Separator(SEPARATOR_ID_REPORTS)); - manager.add(new Separator()); - manager.add(filterCompleteTask); - manager.add(filterOnPriority); -// manager.add(new Separator()); - manager.add(previousTaskAction); - manager.add(nextTaskAction); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - - } public void addFilter(ITaskFilter filter) { if (!filters.contains(filter)) filters.add(filter); @@ -1276,279 +1275,24 @@ public class TaskListView extends ViewPart { updateDrillDownActions(); } -} - -//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 DragSouarce(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 -// * true 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 true 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(); -// -// -// } -// } -// -// }); + public ITask getSelectedTask() { + ISelection selection = getViewer().getSelection(); + if (selection.isEmpty()) return null; + if (selection instanceof StructuredSelection) { + StructuredSelection structuredSelection = (StructuredSelection)selection; + if (structuredSelection.getFirstElement() instanceof ITask) { + return (ITask)structuredSelection.getFirstElement(); + } + } + return null; + } -//private ViewerFilter completeFilter = new ViewerFilter(){ -//@Override -//public boolean select(Viewer viewer, Object parentElement, Object element) { -// if (element instanceof ITaskListElement) { -// if(element instanceof ITask && ((ITaskListElement)element).hasCorrespondingActivatableTask()){ -// ITask task = ((ITaskListElement)element).getOrCreateCorrespondingTask(); -// if (task.isActive()) { -// return true; -// } -// if(task != null){ -// return !task.isCompleted(); -// } else { -// return true; -// } -// } else { -// return true; -// } -// } -// return false; -//} -//}; -// -//private ViewerFilter inCompleteFilter = new ViewerFilter(){ -//@Override -//public boolean select(Viewer viewer, Object parentElement, Object element) { -// if (element instanceof ITask) { -// return ((ITask)element).isCompleted(); -// } else { -// return true; -// } -//} -//}; -// -//public class PriorityFilter extends ViewerFilter { -//private List priorities = new ArrayList(); -// -//public PriorityFilter() { -// displayPrioritiesAbove(MylarTasklistPlugin.getPriorityLevel()); -//} -// -//public void displayPrioritiesAbove(String p) { -// priorities.clear(); -// if (p.equals(PRIORITY_LEVELS[0])) { -// priorities.add(PRIORITY_LEVELS[0]); -// } -// if (p.equals(PRIORITY_LEVELS[1])) { -// priorities.add(PRIORITY_LEVELS[0]); -// priorities.add(PRIORITY_LEVELS[1]); -// } else if (p.equals(PRIORITY_LEVELS[2])) { -// priorities.add(PRIORITY_LEVELS[0]); -// priorities.add(PRIORITY_LEVELS[1]); -// priorities.add(PRIORITY_LEVELS[2]); -// } else if (p.equals(PRIORITY_LEVELS[3])) { -// priorities.add(PRIORITY_LEVELS[0]); -// priorities.add(PRIORITY_LEVELS[1]); -// priorities.add(PRIORITY_LEVELS[2]); -// priorities.add(PRIORITY_LEVELS[3]); -// } else if (p.equals(PRIORITY_LEVELS[4])) { -// priorities.add(PRIORITY_LEVELS[0]); -// priorities.add(PRIORITY_LEVELS[1]); -// priorities.add(PRIORITY_LEVELS[2]); -// priorities.add(PRIORITY_LEVELS[3]); -// priorities.add(PRIORITY_LEVELS[4]); -// } -//} -// -//@Override -//public boolean select(Viewer viewer, Object parentElement, Object element) { -// if (element instanceof ITaskListElement) { -// ITaskListElement task = (ITaskListElement) element; -// if (priorities.size() == PRIORITY_LEVELS.length) { -// return true; -// } else { -// return checkTask(task); -// } -// } else { -// return true; -// } -//} -//private boolean checkTask(ITaskListElement task) { -// if (task instanceof ITask && ((ITask)task).isActive()) { -// return true; -// } -// for (String filter : priorities) { -// if (task.getPriority().equals(filter)) { -// return true; -// } -// } -// return false; -//} -//}; \ No newline at end of file + public void indicatePaused(boolean paused) { + if (paused) { + setPartName("(paused) " + PART_NAME); + } else { + setPartName(PART_NAME); + } + } +} \ No newline at end of file -- cgit v1.2.3