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 (-185 / +220 lines)
Lines 8-101 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.TaskDetailLabelProvider;
24
import org.eclipse.jface.viewers.OpenEvent;
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;
30
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;
31
import org.eclipse.mylyn.tasks.core.AbstractTask;
33
import org.eclipse.mylyn.tasks.core.AbstractTaskContainer;
34
import org.eclipse.mylyn.tasks.core.TaskList;
32
import org.eclipse.mylyn.tasks.core.TaskList;
35
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
33
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
36
import org.eclipse.swt.SWT;
34
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;
35
import org.eclipse.swt.widgets.Button;
43
import org.eclipse.swt.widgets.Composite;
36
import org.eclipse.swt.widgets.Composite;
44
import org.eclipse.swt.widgets.Control;
37
import org.eclipse.swt.widgets.Control;
45
import org.eclipse.swt.widgets.Label;
46
import org.eclipse.swt.widgets.Shell;
38
import org.eclipse.swt.widgets.Shell;
47
import org.eclipse.swt.widgets.Text;
39
import org.eclipse.ui.IMemento;
48
import org.eclipse.ui.IWorkbenchWindow;
40
import org.eclipse.ui.IWorkbenchWindow;
49
import org.eclipse.ui.PlatformUI;
41
import org.eclipse.ui.PlatformUI;
50
import org.eclipse.ui.dialogs.SelectionStatusDialog;
42
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
51
43
52
/**
44
/**
53
 * @author Willian Mitsuda
45
 * @author Willian Mitsuda
54
 * @author Mik Kersten
46
 * @author Mik Kersten
55
 * @author Eugene Kuleshov
47
 * @author Eugene Kuleshov
56
 */
48
 */
57
public class TaskSelectionDialog extends SelectionStatusDialog {
49
public class TaskSelectionDialog extends FilteredItemsSelectionDialog {
58
50
59
	/**
51
	private Button openInBrowserCheck;
60
	 * Implements a {@link ViewFilter} based on content typed in the filter field
61
	 */
62
	private static class TaskFilter extends ViewerFilter {
63
52
64
		private Pattern pattern;
53
	private static final String TASK_SELECTION_DIALOG_SECTION = "TaskSelectionDialogSection";
65
54
66
		public void setFilterText(String filterText) {
55
	private static final String OPEN_IN_BROWSER_SETTING = "OpenInBrowser";
67
			if (filterText.trim().equals("")) {
68
				pattern = null;
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
		}
77
56
78
		@Override
57
	private static final String SHOW_COMPLETED_TASKS_SETTING = "ShowCompletedTasks";
79
		public boolean select(Viewer viewer, Object parentElement, Object element) {
80
			if (pattern == null) {
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
		}
94
	}
95
96
	private TableViewer viewer;
97
98
	private Button openInBrowserCheck;
99
58
100
	private boolean openInBrowser;
59
	private boolean openInBrowser;
101
60
Lines 107-115 Link Here
107
		this.openInBrowser = openInBrowser;
66
		this.openInBrowser = openInBrowser;
108
	}
67
	}
109
68
69
	/**
70
	 * Handle persistence/restore of tasks into the history memento
71
	 */
72
	private class TaskSelectionHistory extends SelectionHistory {
73
74
		@Override
75
		protected Object restoreItemFromMemento(IMemento memento) {
76
			return TasksUiPlugin.getTaskListManager().getTaskList().getTask(memento.getTextData());
77
		}
78
79
		@Override
80
		protected void storeItemToMemento(Object item, IMemento memento) {
81
			memento.putTextData(((AbstractTask) item).getHandleIdentifier());
82
		}
83
84
	}
85
86
	private TaskElementLabelProvider labelProvider;
87
110
	public TaskSelectionDialog(Shell parent) {
88
	public TaskSelectionDialog(Shell parent) {
111
		super(parent);
89
		super(parent);
112
		setShellStyle(getShellStyle() | SWT.RESIZE);
90
		setSelectionHistory(new TaskSelectionHistory());
91
92
		labelProvider = new TaskElementLabelProvider(true);
93
		setListLabelProvider(new DecoratingLabelProvider(labelProvider, PlatformUI.getWorkbench()
94
				.getDecoratorManager()
95
				.getLabelDecorator()));
96
		setDetailsLabelProvider(new TaskDetailLabelProvider());
97
		setSeparatorLabel("Task list matches");
98
99
		// If there is a text selection, use it as the initial filter
100
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
101
		ISelection selection = window.getSelectionService().getSelection();
102
		if (selection instanceof ITextSelection) {
103
			// Get only get first line
104
			String text = ((ITextSelection) selection).getText();
105
			int n = text.indexOf('\n');
106
			if (n > -1) {
107
				text.substring(0, n);
108
			}
109
			setInitialPattern(text);
110
		}
113
	}
111
	}
114
112
115
	private boolean showOpenInBrowserOption;
113
	private boolean showOpenInBrowserOption;
Lines 122-272 Link Here
122
		return showOpenInBrowserOption;
120
		return showOpenInBrowserOption;
123
	}
121
	}
124
122
123
	private ShowCompletedTasksAction showCompletedTasksAction = new ShowCompletedTasksAction();
124
125
	@Override
125
	@Override
126
	protected Control createDialogArea(Composite parent) {
126
	protected void fillViewMenu(IMenuManager menuManager) {
127
		Composite area = (Composite) super.createDialogArea(parent);
127
		super.fillViewMenu(menuManager);
128
		menuManager.add(showCompletedTasksAction);
129
	}
128
130
129
		Label message = new Label(area, SWT.NONE);
131
	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
132
187
			@Override
133
	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
134
207
				// Both are not in task history; sort by summary...
135
		public ShowCompletedTasksAction() {
208
				return labelProvider.getText(e1).compareTo(labelProvider.getText(e2));
136
			super("Show &Completed Tasks", IAction.AS_CHECK_BOX);
209
			}
137
		}
138
139
		@Override
140
		public void run() {
141
			showCompletedTasks = isChecked();
142
			applyFilter();
143
		}
210
144
211
		});
145
	}
212
		viewer.addOpenListener(new IOpenListener() {
213
146
214
			public void open(OpenEvent event) {
147
	@Override
215
				if (getOkButton().getEnabled()) {
148
	protected Control createExtendedContentArea(Composite parent) {
216
					okPressed();
149
		if (!showOpenInBrowserOption) {
217
				}
150
			return null;
218
			}
151
		}
219
152
220
		});
153
		Composite composite = new Composite(parent, SWT.NONE);
154
		composite.setLayout(GridLayoutFactory.swtDefaults().margins(0, 5).create());
155
		composite.setLayoutData(GridDataFactory.fillDefaults().create());
156
157
		openInBrowserCheck = new Button(composite, SWT.CHECK);
158
		openInBrowserCheck.setText("Open with &Browser");
159
		openInBrowserCheck.setSelection(openInBrowser);
221
160
222
		filterText.addKeyListener(new KeyAdapter() {
161
		return composite;
162
	}
223
163
224
			@Override
164
	@Override
225
			public void keyPressed(KeyEvent e) {
165
	public boolean close() {
226
				if (e.keyCode == SWT.ARROW_DOWN) {
166
		if (openInBrowserCheck != null) {
227
					viewer.getControl().setFocus();
167
			openInBrowser = openInBrowserCheck.getSelection();
228
				}
168
		}
229
			}
169
		return super.close();
170
	}
230
171
231
		});
172
	private class TasksFilter extends ItemsFilter {
232
		filterText.addModifyListener(new ModifyListener() {
233
173
234
			public void modifyText(ModifyEvent e) {
174
		private boolean showCompletedTasks;
235
				filter.setFilterText(filterText.getText());
175
236
				viewer.refresh(false);
176
		public TasksFilter(boolean showCompletedTasks) {
237
				Object first = viewer.getElementAt(0);
177
			this.showCompletedTasks = showCompletedTasks;
238
				if (first != null) {
178
		}
239
					viewer.setSelection(new StructuredSelection(first));
179
240
				}
180
		@Override
181
		public boolean isSubFilter(ItemsFilter filter) {
182
			if (!super.isSubFilter(filter)) {
183
				return false;
241
			}
184
			}
185
			if (filter instanceof TasksFilter) {
186
				return showCompletedTasks == ((TasksFilter) filter).showCompletedTasks;
187
			}
188
			return true;
189
		}
242
190
243
		});
191
		@Override
244
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
192
		public boolean equalsFilter(ItemsFilter filter) {
245
		ISelection selection = window.getSelectionService().getSelection();
193
			if (!super.equalsFilter(filter)) {
246
		if (selection instanceof ITextSelection) {
194
				return false;
247
			String text = ((ITextSelection) selection).getText();
195
			}
248
			int n = text.indexOf('\n');
196
			if (filter instanceof TasksFilter) {
249
			if (n > -1) {
197
				return showCompletedTasks == ((TasksFilter) filter).showCompletedTasks;
250
				text.substring(0, n);
251
			}
198
			}
252
			filterText.setText(text);
199
			return true;
253
			filterText.setSelection(0, text.length());
254
		}
200
		}
255
201
256
		return area;
202
		@Override
203
		public boolean isConsistentItem(Object item) {
204
			return item instanceof AbstractTask;
205
		}
206
207
		@Override
208
		public boolean matchItem(Object item) {
209
			if (!(item instanceof AbstractTask)) {
210
				return false;
211
			}
212
			if (!showCompletedTasks && ((AbstractTask) item).isCompleted()) {
213
				return false;
214
			}
215
			return matches(labelProvider.getText(item));
216
		}
257
	}
217
	}
258
218
259
	@Override
219
	@Override
260
	protected void computeResult() {
220
	protected ItemsFilter createFilter() {
261
		setResult(((IStructuredSelection) viewer.getSelection()).toList());
221
		return new TasksFilter(showCompletedTasks);
262
	}
222
	}
263
223
224
	/**
225
	 * Caches all tasks; populated at first access
226
	 */
227
	private Set<AbstractTask> allTasks;
228
264
	@Override
229
	@Override
265
	public boolean close() {
230
	protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter,
266
		if (openInBrowserCheck != null) {
231
			IProgressMonitor progressMonitor) throws CoreException {
267
			openInBrowser = openInBrowserCheck.getSelection();
232
		progressMonitor.beginTask("Search for tasks", 100);
233
234
		if (allTasks == null) {
235
			allTasks = new HashSet<AbstractTask>();
236
			TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList();
237
			allTasks.addAll(taskList.getAllTasks());
268
		}
238
		}
269
		return super.close();
239
		progressMonitor.worked(10);
240
241
		SubProgressMonitor subMonitor = new SubProgressMonitor(progressMonitor, 90);
242
		subMonitor.beginTask("Scanning tasks", allTasks.size());
243
		for (AbstractTask task : allTasks) {
244
			contentProvider.add(task, itemsFilter);
245
			subMonitor.worked(1);
246
		}
247
		subMonitor.done();
248
249
		progressMonitor.done();
250
	}
251
252
	@Override
253
	protected IDialogSettings getDialogSettings() {
254
		IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings();
255
		IDialogSettings section = settings.getSection(TASK_SELECTION_DIALOG_SECTION);
256
		if (section == null) {
257
			section = settings.addNewSection(TASK_SELECTION_DIALOG_SECTION);
258
			section.put(OPEN_IN_BROWSER_SETTING, false);
259
			section.put(SHOW_COMPLETED_TASKS_SETTING, true);
260
		}
261
		return section;
262
	}
263
264
	@Override
265
	protected void restoreDialog(IDialogSettings settings) {
266
		openInBrowser = settings.getBoolean(OPEN_IN_BROWSER_SETTING);
267
		showCompletedTasks = settings.getBoolean(SHOW_COMPLETED_TASKS_SETTING);
268
		showCompletedTasksAction.setChecked(showCompletedTasks);
269
		super.restoreDialog(settings);
270
	}
271
272
	@Override
273
	protected void storeDialog(IDialogSettings settings) {
274
		settings.put(OPEN_IN_BROWSER_SETTING, openInBrowser);
275
		settings.put(SHOW_COMPLETED_TASKS_SETTING, showCompletedTasks);
276
		super.storeDialog(settings);
277
	}
278
279
	@Override
280
	public String getElementName(Object item) {
281
		return labelProvider.getText(item);
282
	}
283
284
	/**
285
	 * Sort tasks by summary
286
	 */
287
	@SuppressWarnings("unchecked")
288
	@Override
289
	protected Comparator getItemsComparator() {
290
		return new Comparator() {
291
292
			public int compare(Object o1, Object o2) {
293
				return labelProvider.getText(o1).compareTo(labelProvider.getText(o2));
294
			}
295
296
		};
297
	}
298
299
	@Override
300
	protected IStatus validateItem(Object item) {
301
		if (item instanceof AbstractTask) {
302
			return Status.OK_STATUS;
303
		}
304
		return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Selected item is not a task");
270
	}
305
	}
271
306
272
}
307
}
(-)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