View | Details | Raw Unified | Return to bug 210686 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java (-17 / +39 lines)
Lines 21-26 Link Here
21
import org.eclipse.jface.viewers.ISelection;
21
import org.eclipse.jface.viewers.ISelection;
22
import org.eclipse.jface.viewers.StructuredSelection;
22
import org.eclipse.jface.viewers.StructuredSelection;
23
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
23
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
24
import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer;
24
import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages;
25
import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages;
25
import org.eclipse.mylyn.internal.tasks.ui.editors.EditorBusyIndicator;
26
import org.eclipse.mylyn.internal.tasks.ui.editors.EditorBusyIndicator;
26
import org.eclipse.mylyn.internal.tasks.ui.editors.IBusyEditor;
27
import org.eclipse.mylyn.internal.tasks.ui.editors.IBusyEditor;
Lines 31-37 Link Here
31
import org.eclipse.mylyn.tasks.core.RepositoryTaskData;
32
import org.eclipse.mylyn.tasks.core.RepositoryTaskData;
32
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
33
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
33
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
34
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
34
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
35
import org.eclipse.swt.dnd.DND;
36
import org.eclipse.swt.dnd.FileTransfer;
37
import org.eclipse.swt.dnd.TextTransfer;
38
import org.eclipse.swt.dnd.Transfer;
35
import org.eclipse.swt.graphics.Image;
39
import org.eclipse.swt.graphics.Image;
36
import org.eclipse.ui.IEditorInput;
40
import org.eclipse.ui.IEditorInput;
37
import org.eclipse.ui.IEditorPart;
41
import org.eclipse.ui.IEditorPart;
Lines 65-77 Link Here
65
	private IEditorPart contentOutlineProvider = null;
69
	private IEditorPart contentOutlineProvider = null;
66
70
67
	public final Object FAMILY_SUBMIT = new Object();
71
	public final Object FAMILY_SUBMIT = new Object();
68
	
72
69
	private MenuManager menuManager = new MenuManager();
73
	private MenuManager menuManager = new MenuManager();
70
74
71
	private EditorBusyIndicator editorBusyIndicator;
75
	private EditorBusyIndicator editorBusyIndicator;
72
76
73
	private IHyperlinkListener messageHyperLinkListener;
77
	private IHyperlinkListener messageHyperLinkListener;
74
78
79
	private TitleDragSource titleDragSource;
80
75
	public TaskEditor() {
81
	public TaskEditor() {
76
		super();
82
		super();
77
		taskPlanningEditor = new TaskPlanningEditor(this);
83
		taskPlanningEditor = new TaskPlanningEditor(this);
Lines 88-96 Link Here
88
	public TaskEditorActionContributor getContributor() {
94
	public TaskEditorActionContributor getContributor() {
89
		return (TaskEditorActionContributor) getEditorSite().getActionBarContributor();
95
		return (TaskEditorActionContributor) getEditorSite().getActionBarContributor();
90
	}
96
	}
91
	
97
92
	/**
98
	/**
93
	 * @param Configurs standard task editor context menu
99
	 * @param Configurs
100
	 *            standard task editor context menu
94
	 * @Since 2.3
101
	 * @Since 2.3
95
	 */
102
	 */
96
	protected void configureContextMenuManager(MenuManager manager) {
103
	protected void configureContextMenuManager(MenuManager manager) {
Lines 227-233 Link Here
227
234
228
	@Override
235
	@Override
229
	public void dispose() {
236
	public void dispose() {
230
		
237
231
		if (editorBusyIndicator != null) {
238
		if (editorBusyIndicator != null) {
232
			editorBusyIndicator.stop();
239
			editorBusyIndicator.stop();
233
		}
240
		}
Lines 333-339 Link Here
333
				}
340
				}
334
			} else if (getEditorInput() instanceof AbstractRepositoryTaskEditorInput) {
341
			} else if (getEditorInput() instanceof AbstractRepositoryTaskEditorInput) {
335
				this.setTitleImage(TasksUiImages.getImage(TasksUiImages.TASK_REMOTE));
342
				this.setTitleImage(TasksUiImages.getImage(TasksUiImages.TASK_REMOTE));
336
			} else { 
343
			} else {
337
				setTitleImage(TasksUiImages.getImage(TasksUiImages.TASK));
344
				setTitleImage(TasksUiImages.getImage(TasksUiImages.TASK));
338
			}
345
			}
339
346
Lines 368-376 Link Here
368
		// }
375
		// }
369
376
370
		if (busy) {
377
		if (busy) {
371
			if (TasksUiUtil.isAnimationsEnabled()) {
378
			editorBusyIndicator.start();
372
				editorBusyIndicator.start();
373
			}
374
		} else {
379
		} else {
375
			editorBusyIndicator.stop();
380
			editorBusyIndicator.stop();
376
		}
381
		}
Lines 393-421 Link Here
393
398
394
	@Override
399
	@Override
395
	protected void createHeaderContents(IManagedForm headerForm) {
400
	protected void createHeaderContents(IManagedForm headerForm) {
396
		getToolkit().decorateFormHeading(headerForm.getForm().getForm());
401
		Form form = headerForm.getForm().getForm();
402
		getToolkit().decorateFormHeading(form);
397
		headerForm.getForm().setImage(TasksUiImages.getImage(TasksUiImages.TASK));
403
		headerForm.getForm().setImage(TasksUiImages.getImage(TasksUiImages.TASK));
398
		updateFormTitle();
404
		updateFormTitle();
405
406
	}
407
408
	private void installTitleDrag(Form form) {
409
		if (null == titleDragSource) {
410
			Transfer[] transferTypes;
411
			if (null == task) {
412
				transferTypes = new Transfer[] { TextTransfer.getInstance() };
413
			} else {
414
				transferTypes = new Transfer[] { TaskTransfer.getInstance(), TextTransfer.getInstance(),
415
						FileTransfer.getInstance() };
416
			}
417
			titleDragSource = new TitleDragSource(this);
418
			form.addTitleDragSupport(DND.DROP_MOVE | DND.DROP_LINK, transferTypes, titleDragSource);
419
		}
399
	}
420
	}
400
421
401
	protected void updateFormTitle() {
422
	protected void updateFormTitle() {
402
		IEditorInput input = getEditorInput();
423
		IEditorInput input = getEditorInput();
403
		if (input instanceof TaskEditorInput) {
424
		if (input instanceof TaskEditorInput) {
404
			AbstractTask task = ((TaskEditorInput) input).getTask();
425
			task = ((TaskEditorInput) input).getTask();
405
			if (task instanceof LocalTask) {
426
			if (task instanceof LocalTask) {
406
				getHeaderForm().getForm().setText("Task: " + task.getSummary());
427
				getHeaderForm().getForm().setText("Task: " + task.getSummary());
407
			} else {
428
			} else {
408
				setFormHeaderImage(task.getConnectorKind());
429
				setFormHeaderImage(task.getConnectorKind());
409
				setFormHeaderLabel(task);
430
				setFormHeaderLabel(task);
410
				return;
431
//				return;
411
			}
432
			}
412
		} else if (input instanceof RepositoryTaskEditorInput) {
433
		} else if (input instanceof RepositoryTaskEditorInput) {
413
			AbstractTask task = ((RepositoryTaskEditorInput) input).getRepositoryTask();
434
			task = ((RepositoryTaskEditorInput) input).getRepositoryTask();
414
			RepositoryTaskData data = ((RepositoryTaskEditorInput) input).getTaskData();
435
			RepositoryTaskData data = ((RepositoryTaskEditorInput) input).getTaskData();
415
			if (task != null && data != null && !data.isNew()) {
436
			if (task != null && data != null && !data.isNew()) {
416
				setFormHeaderImage(task.getConnectorKind());
437
				setFormHeaderImage(task.getConnectorKind());
417
				setFormHeaderLabel(task);
438
				setFormHeaderLabel(task);
418
				return;
439
//				return;
419
			} else {
440
			} else {
420
				if (data != null) {
441
				if (data != null) {
421
					setFormHeaderImage(data.getRepositoryKind());
442
					setFormHeaderImage(data.getRepositoryKind());
Lines 423-428 Link Here
423
				}
444
				}
424
			}
445
			}
425
		}
446
		}
447
		installTitleDrag(getHeaderForm().getForm().getForm());
426
	}
448
	}
427
449
428
	private void setFormHeaderImage(String repositoryKind) {
450
	private void setFormHeaderImage(String repositoryKind) {
Lines 438-450 Link Here
438
	}
460
	}
439
461
440
	/**
462
	/**
441
	 * @since 2.3 
463
	 * @since 2.3
442
	 */
464
	 */
443
	public void setMessage(String message, int type, IHyperlinkListener listener) {
465
	public void setMessage(String message, int type, IHyperlinkListener listener) {
444
		if (this.getHeaderForm() != null && this.getHeaderForm().getForm() != null) {
466
		if (this.getHeaderForm() != null && this.getHeaderForm().getForm() != null) {
445
			if (!this.getHeaderForm().getForm().isDisposed()) {
467
			if (!this.getHeaderForm().getForm().isDisposed()) {
446
				getTopForm().setMessage(message, type);
468
				getTopForm().setMessage(message, type);
447
				
469
448
				if (messageHyperLinkListener != null) {
470
				if (messageHyperLinkListener != null) {
449
					getTopForm().removeMessageHyperlinkListener(messageHyperLinkListener);
471
					getTopForm().removeMessageHyperlinkListener(messageHyperLinkListener);
450
				}
472
				}
Lines 459-465 Link Here
459
	public void setMessage(String message, int type) {
481
	public void setMessage(String message, int type) {
460
		setMessage(message, type, null);
482
		setMessage(message, type, null);
461
	}
483
	}
462
	
484
463
	protected IWorkbenchSiteProgressService getProgressService() {
485
	protected IWorkbenchSiteProgressService getProgressService() {
464
		Object siteService = getEditorSite().getAdapter(IWorkbenchSiteProgressService.class);
486
		Object siteService = getEditorSite().getAdapter(IWorkbenchSiteProgressService.class);
465
		if (siteService != null)
487
		if (siteService != null)
(-)src/org/eclipse/mylyn/tasks/ui/editors/TitleDragSource.java (+96 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.tasks.ui.editors;
10
11
import java.io.File;
12
import java.io.IOException;
13
import java.io.UnsupportedEncodingException;
14
import java.net.URLEncoder;
15
16
import org.eclipse.mylyn.internal.tasks.ui.ITasksUiConstants;
17
import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer;
18
import org.eclipse.mylyn.internal.tasks.ui.actions.CopyTaskDetailsAction;
19
import org.eclipse.mylyn.monitor.core.StatusHandler;
20
import org.eclipse.mylyn.tasks.core.AbstractTask;
21
import org.eclipse.mylyn.tasks.core.TaskList;
22
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
23
import org.eclipse.swt.dnd.DragSourceAdapter;
24
import org.eclipse.swt.dnd.DragSourceEvent;
25
import org.eclipse.swt.dnd.FileTransfer;
26
import org.eclipse.swt.dnd.TextTransfer;
27
import org.eclipse.ui.forms.widgets.Form;
28
29
/**
30
 * Handle the dragging of the {@link TaskList} {@link Form} Title to the {@link TaskList} and Desktop. By grabbing the
31
 * Task title, you can drag and export as Task (to TaskList), as File (to Desktop or Mail) and Text.
32
 * 
33
 * @author Maarten Meijer
34
 */
35
public final class TitleDragSource extends DragSourceAdapter {
36
	/**
37
	 * 
38
	 */
39
	private final TaskEditor taskEditor;
40
41
	/**
42
	 * @param taskEditor
43
	 *            whose title to drag from
44
	 */
45
	TitleDragSource(TaskEditor taskEditor) {
46
		this.taskEditor = taskEditor;
47
	}
48
49
	@Override
50
	public void dragSetData(DragSourceEvent event) {
51
		if (TaskTransfer.getInstance().isSupportedType(event.dataType)) {
52
			if (this.taskEditor.task != null) {
53
				event.data = new AbstractTask[] { this.taskEditor.task };
54
			}
55
		}
56
		if (FileTransfer.getInstance().isSupportedType(event.dataType)) {
57
			// similar code is in TaskListDragSourceListener, maybe move to an utility class
58
			if (this.taskEditor.task != null) {
59
				String encodedName = "task-" + this.taskEditor.task.getTaskKey();
60
				try {
61
					encodedName = URLEncoder.encode(this.taskEditor.task.getHandleIdentifier(),
62
							ITasksUiConstants.FILENAME_ENCODING);
63
				} catch (UnsupportedEncodingException e) {
64
					StatusHandler.fail(e, "Could not determine path for context", false);
65
				}
66
67
				File tempDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "temp");
68
				if (!tempDir.exists()) {
69
					tempDir.mkdir();
70
				}
71
72
				File taskTempFile;
73
				try {
74
					taskTempFile = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, tempDir);
75
					taskTempFile.deleteOnExit();
76
					TasksUiPlugin.getTaskListManager()
77
							.getTaskListWriter()
78
							.writeTask(this.taskEditor.task, taskTempFile);
79
					event.data = new String[] { taskTempFile.getAbsolutePath() };
80
				} catch (IOException e) {
81
					StatusHandler.fail(e, "Cannot create a temp query file for Drag&Drop", true);
82
				}
83
			}
84
		}
85
		if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
86
			if (this.taskEditor.task != null) {
87
				event.data = CopyTaskDetailsAction.getTextForTask(this.taskEditor.task);
88
				return;
89
			} else if (this.taskEditor.getEditorInput() instanceof RepositoryTaskEditorInput
90
					&& ((RepositoryTaskEditorInput) this.taskEditor.getEditorInput()).getUrl() != null) {
91
				event.data = ((RepositoryTaskEditorInput) this.taskEditor.getEditorInput()).getUrl();
92
				return;
93
			}
94
		}
95
	}
96
}

Return to bug 210686