Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 193849 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivateTaskDialogAction.java (-11 / +1 lines)
Lines 9-16 Link Here
9
package org.eclipse.mylyn.internal.tasks.ui.actions;
9
package org.eclipse.mylyn.internal.tasks.ui.actions;
10
10
11
import org.eclipse.jface.action.IAction;
11
import org.eclipse.jface.action.IAction;
12
import org.eclipse.jface.dialogs.Dialog;
13
import org.eclipse.jface.dialogs.IDialogSettings;
14
import org.eclipse.jface.window.Window;
12
import org.eclipse.jface.window.Window;
15
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
13
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
16
import org.eclipse.mylyn.tasks.core.AbstractTask;
14
import org.eclipse.mylyn.tasks.core.AbstractTask;
Lines 32-50 Link Here
32
		this.window = window;
30
		this.window = window;
33
	}
31
	}
34
32
35
	private static final String ACTIVATE_TASK_ACTION_DIALOG_SETTINGS = "activate.task.action.dialog.settings";
36
37
	@Override
33
	@Override
38
	public void run(IAction action) {
34
	public void run(IAction action) {
39
		TaskSelectionDialog dlg = new TaskSelectionDialog(window.getShell());
35
		TaskSelectionDialog dlg = new TaskSelectionDialog(window.getShell());
40
		dlg.setTitle("Activate Task");
36
		dlg.setTitle("Activate Task");
41
37
		dlg.setMessage("&Select a task to activate (? = any character, * = any String):");
42
		IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings();
43
		IDialogSettings dlgSettings = settings.getSection(ACTIVATE_TASK_ACTION_DIALOG_SETTINGS);
44
		if (dlgSettings == null) {
45
			dlgSettings = settings.addNewSection(ACTIVATE_TASK_ACTION_DIALOG_SETTINGS);
46
		}
47
		dlg.setDialogBoundsSettings(dlgSettings, Dialog.DIALOG_PERSISTLOCATION | Dialog.DIALOG_PERSISTSIZE);
48
38
49
		if (dlg.open() != Window.OK) {
39
		if (dlg.open() != Window.OK) {
50
			return;
40
			return;
(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskAction.java (-20 / +2 lines)
Lines 9-19 Link Here
9
package org.eclipse.mylyn.internal.tasks.ui.actions;
9
package org.eclipse.mylyn.internal.tasks.ui.actions;
10
10
11
import org.eclipse.jface.action.IAction;
11
import org.eclipse.jface.action.IAction;
12
import org.eclipse.jface.dialogs.Dialog;
13
import org.eclipse.jface.dialogs.IDialogSettings;
14
import org.eclipse.jface.window.Window;
12
import org.eclipse.jface.window.Window;
15
import org.eclipse.mylyn.tasks.core.AbstractTask;
13
import org.eclipse.mylyn.tasks.core.AbstractTask;
16
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
17
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
14
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
18
import org.eclipse.ui.IWorkbenchWindow;
15
import org.eclipse.ui.IWorkbenchWindow;
19
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
16
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
Lines 30-56 Link Here
30
		this.window = window;
27
		this.window = window;
31
	}
28
	}
32
29
33
	private static final String OPEN_TASK_ACTION_DIALOG_SETTINGS = "open.task.action.dialog.settings";
34
35
	private static final String SHOW_IN_BROWSER_SETTING = "show.in.browser.setting";
36
37
	@Override
30
	@Override
38
	public void run(IAction action) {
31
	public void run(IAction action) {
39
		TaskSelectionDialog dlg = new TaskSelectionDialog(window.getShell());
32
		TaskSelectionDialog dlg = new TaskSelectionDialog(window.getShell());
40
		dlg.setTitle("Open Task");
33
		dlg.setTitle("Open Task");
34
		dlg.setMessage("&Select a task to open (? = any character, * = any String):");
41
		dlg.setShowOpenInBrowserOption(true);
35
		dlg.setShowOpenInBrowserOption(true);
42
36
43
		IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings();
37
		if (dlg.open() != Window.OK) {
44
		IDialogSettings dlgSettings = settings.getSection(OPEN_TASK_ACTION_DIALOG_SETTINGS);
45
		if (dlgSettings == null) {
46
			dlgSettings = settings.addNewSection(OPEN_TASK_ACTION_DIALOG_SETTINGS);
47
		}
48
		dlg.setDialogBoundsSettings(dlgSettings, Dialog.DIALOG_PERSISTLOCATION | Dialog.DIALOG_PERSISTSIZE);
49
		dlg.setOpenInBrowser(dlgSettings.getBoolean(SHOW_IN_BROWSER_SETTING));
50
51
		int ret = dlg.open();
52
		dlgSettings.put(SHOW_IN_BROWSER_SETTING, dlg.getOpenInBrowser());
53
		if (ret != Window.OK) {
54
			return;
38
			return;
55
		}
39
		}
56
40
Lines 60-70 Link Here
60
			if (dlg.getOpenInBrowser()) {
44
			if (dlg.getOpenInBrowser()) {
61
				if (task.hasValidUrl()) {
45
				if (task.hasValidUrl()) {
62
					TasksUiUtil.openUrl(task.getUrl(), false);
46
					TasksUiUtil.openUrl(task.getUrl(), false);
63
					TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task);
64
				}
47
				}
65
			} else {
48
			} else {
66
				TasksUiUtil.refreshAndOpenTaskListElement(task);
49
				TasksUiUtil.refreshAndOpenTaskListElement(task);
67
				TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task);
68
			}
50
			}
69
		}
51
		}
70
	}
52
	}
(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskSelectionDialog.java (-184 / +266 lines)
Lines 8-115 Link Here
8
8
9
package org.eclipse.mylyn.internal.tasks.ui.actions;
9
package org.eclipse.mylyn.internal.tasks.ui.actions;
10
10
11
import java.util.ArrayList;
11
import java.util.Comparator;
12
import java.util.Collections;
13
import java.util.HashSet;
12
import java.util.HashSet;
14
import java.util.LinkedHashSet;
15
import java.util.List;
16
import java.util.Set;
13
import java.util.Set;
17
import java.util.regex.Pattern;
18
14
15
import org.eclipse.core.runtime.CoreException;
16
import org.eclipse.core.runtime.IProgressMonitor;
17
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.core.runtime.Status;
19
import org.eclipse.core.runtime.SubProgressMonitor;
20
import org.eclipse.jface.action.Action;
21
import org.eclipse.jface.action.IAction;
22
import org.eclipse.jface.action.IMenuManager;
23
import org.eclipse.jface.dialogs.IDialogSettings;
24
import org.eclipse.jface.layout.GridDataFactory;
25
import org.eclipse.jface.layout.GridLayoutFactory;
19
import org.eclipse.jface.text.ITextSelection;
26
import org.eclipse.jface.text.ITextSelection;
20
import org.eclipse.jface.viewers.ArrayContentProvider;
27
import org.eclipse.jface.viewers.DecoratingLabelProvider;
21
import org.eclipse.jface.viewers.IOpenListener;
22
import org.eclipse.jface.viewers.ISelection;
28
import org.eclipse.jface.viewers.ISelection;
23
import org.eclipse.jface.viewers.IStructuredSelection;
29
import org.eclipse.mylyn.internal.tasks.ui.views.TaskActivationHistory;
24
import org.eclipse.jface.viewers.OpenEvent;
30
import org.eclipse.mylyn.internal.tasks.ui.views.TaskDetailLabelProvider;
25
import org.eclipse.jface.viewers.StructuredSelection;
26
import org.eclipse.jface.viewers.TableViewer;
27
import org.eclipse.jface.viewers.Viewer;
28
import org.eclipse.jface.viewers.ViewerComparator;
29
import org.eclipse.jface.viewers.ViewerFilter;
30
import org.eclipse.mylyn.internal.tasks.ui.views.TaskElementLabelProvider;
31
import org.eclipse.mylyn.internal.tasks.ui.views.TaskElementLabelProvider;
31
import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery;
32
import org.eclipse.mylyn.tasks.core.AbstractTask;
32
import org.eclipse.mylyn.tasks.core.AbstractTask;
33
import org.eclipse.mylyn.tasks.core.AbstractTaskContainer;
34
import org.eclipse.mylyn.tasks.core.TaskList;
33
import org.eclipse.mylyn.tasks.core.TaskList;
35
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
34
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
36
import org.eclipse.swt.SWT;
35
import org.eclipse.swt.SWT;
37
import org.eclipse.swt.events.KeyAdapter;
38
import org.eclipse.swt.events.KeyEvent;
39
import org.eclipse.swt.events.ModifyEvent;
40
import org.eclipse.swt.events.ModifyListener;
41
import org.eclipse.swt.layout.GridData;
42
import org.eclipse.swt.widgets.Button;
36
import org.eclipse.swt.widgets.Button;
43
import org.eclipse.swt.widgets.Composite;
37
import org.eclipse.swt.widgets.Composite;
44
import org.eclipse.swt.widgets.Control;
38
import org.eclipse.swt.widgets.Control;
45
import org.eclipse.swt.widgets.Label;
46
import org.eclipse.swt.widgets.Shell;
39
import org.eclipse.swt.widgets.Shell;
47
import org.eclipse.swt.widgets.Text;
40
import org.eclipse.ui.IMemento;
48
import org.eclipse.ui.IWorkbenchWindow;
41
import org.eclipse.ui.IWorkbenchWindow;
49
import org.eclipse.ui.PlatformUI;
42
import org.eclipse.ui.PlatformUI;
50
import org.eclipse.ui.dialogs.SelectionStatusDialog;
43
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
44
import org.eclipse.ui.dialogs.SearchPattern;
51
45
52
/**
46
/**
53
 * @author Willian Mitsuda
47
 * @author Willian Mitsuda
54
 * @author Mik Kersten
48
 * @author Mik Kersten
55
 * @author Eugene Kuleshov
49
 * @author Eugene Kuleshov
56
 */
50
 */
57
public class TaskSelectionDialog extends SelectionStatusDialog {
51
public class TaskSelectionDialog extends FilteredItemsSelectionDialog {
52
53
	private Button openInBrowserCheck;
54
55
	private static final String TASK_SELECTION_DIALOG_SECTION = "TaskSelectionDialogSection";
56
57
	private static final String OPEN_IN_BROWSER_SETTING = "OpenInBrowser";
58
59
	private static final String SHOW_COMPLETED_TASKS_SETTING = "ShowCompletedTasks";
60
61
	private boolean openInBrowser;
62
63
	public boolean getOpenInBrowser() {
64
		return openInBrowser;
65
	}
66
67
	public void setOpenInBrowser(boolean openInBrowser) {
68
		this.openInBrowser = openInBrowser;
69
	}
58
70
59
	/**
71
	/**
60
	 * Implements a {@link ViewFilter} based on content typed in the filter field
72
	 * Integrates {@link FilteredItemsSelectionDialog} history management with Mylyn's task list activation history
73
	 * <p>
74
	 * Due to {@link SelectionHistory} use of memento-based history storage, many methods are overridden
61
	 */
75
	 */
62
	private static class TaskFilter extends ViewerFilter {
76
	private class TaskSelectionHistory extends SelectionHistory {
63
77
64
		private Pattern pattern;
78
		/**
79
		 * Mylyn's task activation history
80
		 */
81
		private TaskActivationHistory history = TasksUiPlugin.getTaskListManager().getTaskActivationHistory();
65
82
66
		public void setFilterText(String filterText) {
83
		@Override
67
			if (filterText.trim().equals("")) {
84
		public synchronized void accessed(Object object) {
68
				pattern = null;
85
			history.addTask((AbstractTask) object);
69
			} else {
70
				filterText = filterText.replace("\\", "\\\\");
71
				filterText = filterText.replace(".", "\\.");
72
				filterText = filterText.replace("*", ".*");
73
				filterText = filterText.replace("?", ".?");
74
				pattern = Pattern.compile(filterText, Pattern.CASE_INSENSITIVE);
75
			}
76
		}
86
		}
77
87
78
		@Override
88
		@Override
79
		public boolean select(Viewer viewer, Object parentElement, Object element) {
89
		public synchronized boolean contains(Object object) {
80
			if (pattern == null) {
90
			return history.containsTask((AbstractTask) object);
81
				return TasksUiPlugin.getTaskListManager().getTaskActivationHistory().getPreviousTasks().contains(
82
						element);
83
			}
84
			if (element instanceof AbstractTask) {
85
				AbstractTask repositoryTask = (AbstractTask) element;
86
				String taskString = repositoryTask.getTaskKey() + ": " + repositoryTask.getSummary();
87
				return pattern.matcher(taskString).find();
88
			} else if (element instanceof AbstractTask) {
89
				String taskString = ((AbstractTask) element).getSummary();
90
				return pattern.matcher(taskString).find();
91
			}
92
			return false;
93
		}
91
		}
94
	}
95
92
96
	private TableViewer viewer;
93
		@Override
94
		public synchronized boolean remove(Object object) {
95
			return history.removeTask((AbstractTask) object);
96
		}
97
		
98
		@Override
99
		public synchronized boolean isEmpty() {
100
			return !history.hasPrevious();
101
		}
97
102
98
	private Button openInBrowserCheck;
103
		@Override
104
		public void load(IMemento memento) {
105
			// do nothing because tasklist history handles this
106
		}
99
107
100
	private boolean openInBrowser;
108
		@Override
109
		public void save(IMemento memento) {
110
			// do nothing because tasklist history handles this
111
		}
101
112
102
	public boolean getOpenInBrowser() {
113
		@Override
103
		return openInBrowser;
114
		protected Object restoreItemFromMemento(IMemento memento) {
104
	}
115
			// do nothing because tasklist history handles this
116
			return null;
117
		}
105
118
106
	public void setOpenInBrowser(boolean openInBrowser) {
119
		@Override
107
		this.openInBrowser = openInBrowser;
120
		protected void storeItemToMemento(Object item, IMemento memento) {
121
			// do nothing because tasklist history handles this
122
		}
123
124
		@Override
125
		public synchronized Object[] getHistoryItems() {
126
			return history.getPreviousTasks().toArray();
127
		}
108
	}
128
	}
109
129
130
	private TaskElementLabelProvider labelProvider;
131
110
	public TaskSelectionDialog(Shell parent) {
132
	public TaskSelectionDialog(Shell parent) {
111
		super(parent);
133
		super(parent);
112
		setShellStyle(getShellStyle() | SWT.RESIZE);
134
		setSelectionHistory(new TaskSelectionHistory());
135
136
		labelProvider = new TaskElementLabelProvider(true);
137
		setListLabelProvider(new DecoratingLabelProvider(labelProvider, PlatformUI.getWorkbench()
138
				.getDecoratorManager()
139
				.getLabelDecorator()));
140
		setDetailsLabelProvider(new TaskDetailLabelProvider());
141
		setSeparatorLabel("Task list matches");
142
143
		// If there is a text selection, use it as the initial filter
144
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
145
		ISelection selection = window.getSelectionService().getSelection();
146
		if (selection instanceof ITextSelection) {
147
			// Get only get first line
148
			String text = ((ITextSelection) selection).getText();
149
			int n = text.indexOf('\n');
150
			if (n > -1) {
151
				text.substring(0, n);
152
			}
153
			setInitialPattern(text);
154
		}
113
	}
155
	}
114
156
115
	private boolean showOpenInBrowserOption;
157
	private boolean showOpenInBrowserOption;
Lines 122-272 Link Here
122
		return showOpenInBrowserOption;
164
		return showOpenInBrowserOption;
123
	}
165
	}
124
166
167
	private ShowCompletedTasksAction showCompletedTasksAction = new ShowCompletedTasksAction();
168
125
	@Override
169
	@Override
126
	protected Control createDialogArea(Composite parent) {
170
	protected void fillViewMenu(IMenuManager menuManager) {
127
		Composite area = (Composite) super.createDialogArea(parent);
171
		super.fillViewMenu(menuManager);
172
		menuManager.add(showCompletedTasksAction);
173
	}
128
174
129
		Label message = new Label(area, SWT.NONE);
175
	private boolean showCompletedTasks;
130
		message.setText("&Select a task to open (? = any character, * = any String):");
131
		final Text filterText = new Text(area, SWT.SINGLE | SWT.BORDER);
132
		filterText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
133
134
		Label matches = new Label(area, SWT.NONE);
135
		matches.setText("&Matching tasks:");
136
		viewer = new TableViewer(area, SWT.SINGLE | SWT.BORDER);
137
		Control control = viewer.getControl();
138
		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
139
		control.setLayoutData(gd);
140
		gd.widthHint = 400;
141
		gd.heightHint = 200;
142
143
		if (showOpenInBrowserOption) {
144
			openInBrowserCheck = new Button(area, SWT.CHECK);
145
			openInBrowserCheck.setText("Open with &Browser");
146
			openInBrowserCheck.setSelection(openInBrowser);
147
		}
148
149
		final TaskElementLabelProvider labelProvider = new TaskElementLabelProvider(true);
150
		viewer.setLabelProvider(labelProvider);
151
		viewer.setContentProvider(new ArrayContentProvider());
152
153
		// Compute all existing tasks or query hits (if corresponding task does
154
		// not exist yet...)
155
		Set<AbstractTaskContainer> allTasks = new HashSet<AbstractTaskContainer>();
156
		TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList();
157
		allTasks.addAll(taskList.getAllTasks());
158
		for (AbstractRepositoryQuery query : taskList.getQueries()) {
159
			allTasks.addAll(query.getChildren());
160
		}
161
162
		// Compute the task navigation history (in recent-to-older order)
163
		final List<AbstractTask> taskHistory = new ArrayList<AbstractTask>(TasksUiPlugin.getTaskListManager()
164
				.getTaskActivationHistory()
165
				.getPreviousTasks());
166
		Collections.reverse(taskHistory);
167
168
		// Compute the task set who will be presented on dialog; the trick to
169
		// make the task history appear first on the list is to add them before
170
		// all other tasks; being a LinkedHashSet, it will not be duplicated
171
		// (this is VERY IMPORTANT)
172
		Set<AbstractTaskContainer> taskSet = new LinkedHashSet<AbstractTaskContainer>(taskHistory);
173
		taskSet.addAll(allTasks);
174
		viewer.setInput(taskSet);
175
176
		final TaskSelectionDialog.TaskFilter filter = new TaskSelectionDialog.TaskFilter();
177
		viewer.addFilter(filter);
178
		viewer.setComparator(new ViewerComparator() {
179
180
			private AbstractTask getCorrespondingTask(Object o) {
181
				if (o instanceof AbstractTask) {
182
					return (AbstractTask) o;
183
				}
184
				return null;
185
			}
186
176
187
			@Override
177
	private class ShowCompletedTasksAction extends Action {
188
			public int compare(Viewer viewer, Object e1, Object e2) {
189
				AbstractTask t1 = getCorrespondingTask(e1);
190
				AbstractTask t2 = getCorrespondingTask(e2);
191
				boolean isInHistory1 = taskHistory.contains(t1);
192
				boolean isInHistory2 = taskHistory.contains(t2);
193
194
				// Being on task history takes precedence...
195
				if (isInHistory1 && !isInHistory2) {
196
					return -1;
197
				}
198
				if (!isInHistory1 && isInHistory2) {
199
					return 1;
200
				}
201
202
				// Both are in task history; who is more recent?
203
				if (isInHistory1 && isInHistory2) {
204
					return taskHistory.indexOf(t1) - taskHistory.indexOf(t2);
205
				}
206
178
207
				// Both are not in task history; sort by summary...
179
		public ShowCompletedTasksAction() {
208
				return labelProvider.getText(e1).compareTo(labelProvider.getText(e2));
180
			super("Show &Completed Tasks", IAction.AS_CHECK_BOX);
209
			}
181
		}
210
182
211
		});
183
		@Override
212
		viewer.addOpenListener(new IOpenListener() {
184
		public void run() {
185
			showCompletedTasks = isChecked();
186
			applyFilter();
187
		}
213
188
214
			public void open(OpenEvent event) {
189
	}
215
				if (getOkButton().getEnabled()) {
216
					okPressed();
217
				}
218
			}
219
190
220
		});
191
	@Override
192
	protected Control createExtendedContentArea(Composite parent) {
193
		if (!showOpenInBrowserOption) {
194
			return null;
195
		}
221
196
222
		filterText.addKeyListener(new KeyAdapter() {
197
		Composite composite = new Composite(parent, SWT.NONE);
198
		composite.setLayout(GridLayoutFactory.swtDefaults().margins(0, 5).create());
199
		composite.setLayoutData(GridDataFactory.fillDefaults().create());
200
201
		openInBrowserCheck = new Button(composite, SWT.CHECK);
202
		openInBrowserCheck.setText("Open with &Browser");
203
		openInBrowserCheck.setSelection(openInBrowser);
223
204
224
			@Override
205
		return composite;
225
			public void keyPressed(KeyEvent e) {
206
	}
226
				if (e.keyCode == SWT.ARROW_DOWN) {
207
227
					viewer.getControl().setFocus();
208
	@Override
228
				}
209
	public boolean close() {
229
			}
210
		if (openInBrowserCheck != null) {
211
			openInBrowser = openInBrowserCheck.getSelection();
212
		}
213
		return super.close();
214
	}
230
215
231
		});
216
	private class TasksFilter extends ItemsFilter {
232
		filterText.addModifyListener(new ModifyListener() {
233
217
234
			public void modifyText(ModifyEvent e) {
218
		private boolean showCompletedTasks;
235
				filter.setFilterText(filterText.getText());
219
236
				viewer.refresh(false);
220
		public TasksFilter(boolean showCompletedTasks) {
237
				Object first = viewer.getElementAt(0);
221
			super(new SearchPattern());
238
				if (first != null) {
222
			// Little hack to force always a match inside any part of task text
239
					viewer.setSelection(new StructuredSelection(first));
223
			patternMatcher.setPattern("*" + patternMatcher.getPattern());
240
				}
224
			this.showCompletedTasks = showCompletedTasks;
225
		}
226
227
		@Override
228
		public boolean isSubFilter(ItemsFilter filter) {
229
			if (!super.isSubFilter(filter)) {
230
				return false;
241
			}
231
			}
232
			if (filter instanceof TasksFilter) {
233
				return showCompletedTasks == ((TasksFilter) filter).showCompletedTasks;
234
			}
235
			return true;
236
		}
242
237
243
		});
238
		@Override
244
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
239
		public boolean equalsFilter(ItemsFilter filter) {
245
		ISelection selection = window.getSelectionService().getSelection();
240
			if (!super.equalsFilter(filter)) {
246
		if (selection instanceof ITextSelection) {
241
				return false;
247
			String text = ((ITextSelection) selection).getText();
242
			}
248
			int n = text.indexOf('\n');
243
			if (filter instanceof TasksFilter) {
249
			if (n > -1) {
244
				return showCompletedTasks == ((TasksFilter) filter).showCompletedTasks;
250
				text.substring(0, n);
245
			}
246
			return true;
247
		}
248
249
		@Override
250
		public boolean isConsistentItem(Object item) {
251
			return item instanceof AbstractTask;
252
		}
253
254
		@Override
255
		public boolean matchItem(Object item) {
256
			if (!(item instanceof AbstractTask)) {
257
				return false;
251
			}
258
			}
252
			filterText.setText(text);
259
			if (!showCompletedTasks && ((AbstractTask) item).isCompleted()) {
253
			filterText.setSelection(0, text.length());
260
				return false;
261
			}
262
			return matches(labelProvider.getText(item));
263
		}
264
	}
265
266
	@Override
267
	protected ItemsFilter createFilter() {
268
		return new TasksFilter(showCompletedTasks);
269
	}
270
271
	/**
272
	 * Caches all tasks; populated at first access
273
	 */
274
	private Set<AbstractTask> allTasks;
275
276
	@Override
277
	protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter,
278
			IProgressMonitor progressMonitor) throws CoreException {
279
		progressMonitor.beginTask("Search for tasks", 100);
280
281
		if (allTasks == null) {
282
			allTasks = new HashSet<AbstractTask>();
283
			TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList();
284
			allTasks.addAll(taskList.getAllTasks());
254
		}
285
		}
286
		progressMonitor.worked(10);
255
287
256
		return area;
288
		SubProgressMonitor subMonitor = new SubProgressMonitor(progressMonitor, 90);
289
		subMonitor.beginTask("Scanning tasks", allTasks.size());
290
		for (AbstractTask task : allTasks) {
291
			contentProvider.add(task, itemsFilter);
292
			subMonitor.worked(1);
293
		}
294
		subMonitor.done();
295
296
		progressMonitor.done();
257
	}
297
	}
258
298
259
	@Override
299
	@Override
260
	protected void computeResult() {
300
	protected IDialogSettings getDialogSettings() {
261
		setResult(((IStructuredSelection) viewer.getSelection()).toList());
301
		IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings();
302
		IDialogSettings section = settings.getSection(TASK_SELECTION_DIALOG_SECTION);
303
		if (section == null) {
304
			section = settings.addNewSection(TASK_SELECTION_DIALOG_SECTION);
305
			section.put(OPEN_IN_BROWSER_SETTING, false);
306
			section.put(SHOW_COMPLETED_TASKS_SETTING, true);
307
		}
308
		return section;
262
	}
309
	}
263
310
264
	@Override
311
	@Override
265
	public boolean close() {
312
	protected void restoreDialog(IDialogSettings settings) {
266
		if (openInBrowserCheck != null) {
313
		openInBrowser = settings.getBoolean(OPEN_IN_BROWSER_SETTING);
267
			openInBrowser = openInBrowserCheck.getSelection();
314
		showCompletedTasks = settings.getBoolean(SHOW_COMPLETED_TASKS_SETTING);
315
		showCompletedTasksAction.setChecked(showCompletedTasks);
316
		super.restoreDialog(settings);
317
	}
318
319
	@Override
320
	protected void storeDialog(IDialogSettings settings) {
321
		settings.put(OPEN_IN_BROWSER_SETTING, openInBrowser);
322
		settings.put(SHOW_COMPLETED_TASKS_SETTING, showCompletedTasks);
323
		super.storeDialog(settings);
324
	}
325
326
	@Override
327
	public String getElementName(Object item) {
328
		return labelProvider.getText(item);
329
	}
330
331
	/**
332
	 * Sort tasks by summary
333
	 */
334
	@SuppressWarnings("unchecked")
335
	@Override
336
	protected Comparator getItemsComparator() {
337
		return new Comparator() {
338
339
			public int compare(Object o1, Object o2) {
340
				return labelProvider.getText(o1).compareTo(labelProvider.getText(o2));
341
			}
342
343
		};
344
	}
345
346
	@Override
347
	protected IStatus validateItem(Object item) {
348
		if (item instanceof AbstractTask) {
349
			return Status.OK_STATUS;
268
		}
350
		}
269
		return super.close();
351
		return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Selected item is not a task");
270
	}
352
	}
271
353
272
}
354
}
(-)src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivationHistory.java (-1 / +10 lines)
Lines 8-13 Link Here
8
package org.eclipse.mylyn.internal.tasks.ui.views;
8
package org.eclipse.mylyn.internal.tasks.ui.views;
9
9
10
import java.util.ArrayList;
10
import java.util.ArrayList;
11
import java.util.Collections;
11
import java.util.List;
12
import java.util.List;
12
13
13
import org.eclipse.mylyn.context.core.ContextCorePlugin;
14
import org.eclipse.mylyn.context.core.ContextCorePlugin;
Lines 87-92 Link Here
87
		}
88
		}
88
	}
89
	}
89
90
91
	public boolean containsTask(AbstractTask task) {
92
		return history.contains(task);
93
	}
94
95
	public boolean removeTask(AbstractTask task) {
96
		return history.remove(task);
97
	}
98
	
90
	public AbstractTask getPreviousTask() {
99
	public AbstractTask getPreviousTask() {
91
		try {
100
		try {
92
			boolean active = false;
101
			boolean active = false;
Lines 113-119 Link Here
113
	}
122
	}
114
123
115
	public List<AbstractTask> getPreviousTasks() {
124
	public List<AbstractTask> getPreviousTasks() {
116
		return history;
125
		return Collections.unmodifiableList(history);
117
	}
126
	}
118
127
119
	public boolean hasPrevious() {
128
	public boolean hasPrevious() {
(-)src/org/eclipse/mylyn/internal/tasks/ui/views/TaskDetailLabelProvider.java (+55 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004, 2007 Mylyn project committers and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *******************************************************************************/
8
9
package org.eclipse.mylyn.internal.tasks.ui.views;
10
11
import org.eclipse.jface.resource.ImageDescriptor;
12
import org.eclipse.jface.viewers.ILabelProvider;
13
import org.eclipse.jface.viewers.LabelProvider;
14
import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages;
15
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
16
import org.eclipse.mylyn.tasks.core.AbstractTask;
17
import org.eclipse.mylyn.tasks.core.TaskRepository;
18
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
19
import org.eclipse.swt.graphics.Image;
20
21
/**
22
 * Displays task repository info from a {@link AbstractTask}
23
 * 
24
 * @author Willian Mitsuda
25
 */
26
public class TaskDetailLabelProvider extends LabelProvider implements ILabelProvider {
27
28
	@Override
29
	public Image getImage(Object element) {
30
		if (!(element instanceof AbstractTask)) {
31
			return super.getImage(element);
32
		}
33
34
		AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(
35
				(AbstractTask) element);
36
		ImageDescriptor overlay = TasksUiPlugin.getDefault().getOverlayIcon(connector.getConnectorKind());
37
		if (overlay != null) {
38
			return TasksUiImages.getImageWithOverlay(TasksUiImages.REPOSITORY, overlay, false, false);
39
		} else {
40
			return TasksUiImages.getImage(TasksUiImages.REPOSITORY);
41
		}
42
	}
43
44
	@Override
45
	public String getText(Object element) {
46
		if (!(element instanceof AbstractTask)) {
47
			return super.getText(element);
48
		}
49
50
		TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(
51
				((AbstractTask) element).getRepositoryUrl());
52
		return repository.getRepositoryLabel();
53
	}
54
55
}
(-)src/org/eclipse/mylyn/internal/context/ui/actions/ContextCopyAction.java (-13 / +2 lines)
Lines 11-18 Link Here
11
import java.io.File;
11
import java.io.File;
12
12
13
import org.eclipse.jface.action.IAction;
13
import org.eclipse.jface.action.IAction;
14
import org.eclipse.jface.dialogs.Dialog;
15
import org.eclipse.jface.dialogs.IDialogSettings;
16
import org.eclipse.jface.dialogs.MessageDialog;
14
import org.eclipse.jface.dialogs.MessageDialog;
17
import org.eclipse.jface.window.Window;
15
import org.eclipse.jface.window.Window;
18
import org.eclipse.mylyn.context.core.ContextCorePlugin;
16
import org.eclipse.mylyn.context.core.ContextCorePlugin;
Lines 30-37 Link Here
30
 */
28
 */
31
public class ContextCopyAction extends TaskContextAction {
29
public class ContextCopyAction extends TaskContextAction {
32
30
33
	private static final String OPEN_TASK_ACTION_DIALOG_SETTINGS = "open.task.action.dialog.settings";
34
35
	private static final String ID_ACTION = "org.eclipse.mylyn.context.ui.task.copy.context.to";
31
	private static final String ID_ACTION = "org.eclipse.mylyn.context.ui.task.copy.context.to";
36
32
37
	public ContextCopyAction() {
33
	public ContextCopyAction() {
Lines 65-80 Link Here
65
				.getActiveWorkbenchWindow()
61
				.getActiveWorkbenchWindow()
66
				.getShell());
62
				.getShell());
67
		dialog.setTitle("Select Target Task");
63
		dialog.setTitle("Select Target Task");
64
		dialog.setMessage("&Select the target task (? = any character, * = any String):");
68
65
69
		IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings();
66
		if (dialog.open() != Window.OK) {
70
		IDialogSettings dlgSettings = settings.getSection(OPEN_TASK_ACTION_DIALOG_SETTINGS);
71
		if (dlgSettings == null) {
72
			dlgSettings = settings.addNewSection(OPEN_TASK_ACTION_DIALOG_SETTINGS);
73
		}
74
		dialog.setDialogBoundsSettings(dlgSettings, Dialog.DIALOG_PERSISTLOCATION | Dialog.DIALOG_PERSISTSIZE);
75
76
		int ret = dialog.open();
77
		if (ret != Window.OK) {
78
			return;
67
			return;
79
		}
68
		}

Return to bug 193849