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 200117 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java (-191 lines)
Removed 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.editors;
10
11
import java.util.HashMap;
12
import java.util.Map;
13
14
import org.eclipse.core.runtime.IAdaptable;
15
import org.eclipse.jface.text.IDocument;
16
import org.eclipse.jface.text.TextAttribute;
17
import org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter;
18
import org.eclipse.jface.text.hyperlink.IHyperlink;
19
import org.eclipse.jface.text.hyperlink.IHyperlinkPresenter;
20
import org.eclipse.jface.text.presentation.IPresentationReconciler;
21
import org.eclipse.jface.text.presentation.PresentationReconciler;
22
import org.eclipse.jface.text.reconciler.IReconciler;
23
import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
24
import org.eclipse.jface.text.rules.IRule;
25
import org.eclipse.jface.text.rules.IToken;
26
import org.eclipse.jface.text.rules.MultiLineRule;
27
import org.eclipse.jface.text.rules.RuleBasedScanner;
28
import org.eclipse.jface.text.rules.SingleLineRule;
29
import org.eclipse.jface.text.rules.Token;
30
import org.eclipse.jface.text.source.ISourceViewer;
31
import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts;
32
import org.eclipse.mylyn.tasks.core.AbstractTask;
33
import org.eclipse.mylyn.tasks.core.TaskList;
34
import org.eclipse.mylyn.tasks.core.TaskRepository;
35
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
36
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
37
import org.eclipse.swt.SWT;
38
import org.eclipse.swt.graphics.RGB;
39
import org.eclipse.swt.widgets.Control;
40
import org.eclipse.ui.editors.text.EditorsUI;
41
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
42
43
/**
44
 * @author Rob Elves
45
 */
46
public class RepositoryViewerConfig extends TextSourceViewerConfiguration {
47
48
	private RepositoryTextScanner scanner = null;
49
50
	private boolean spellcheck = false;
51
52
	public RepositoryViewerConfig(boolean spellchecking) {
53
		super(EditorsUI.getPreferenceStore());
54
		this.spellcheck = spellchecking;
55
	}
56
57
	@Override
58
	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
59
		PresentationReconciler reconciler = new PresentationReconciler();
60
		reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
61
62
		DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getDefaultScanner());
63
		reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
64
		reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
65
66
		return reconciler;
67
	}
68
69
	private RepositoryTextScanner getDefaultScanner() {
70
		if (scanner == null) {
71
			scanner = new RepositoryTextScanner();
72
		}
73
		return scanner;
74
	}
75
76
//	@Override
77
//	public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) {
78
//		List<IHyperlinkDetector> detectors = new ArrayList<IHyperlinkDetector>();
79
//		detectors.addAll(Arrays.asList(TasksUiPlugin.getDefault().getTaskHyperlinkDetectors()));
80
//		return detectors.toArray(new IHyperlinkDetector[detectors.size()]);
81
//	}
82
	
83
	@Override
84
	@SuppressWarnings("unchecked")
85
	protected Map getHyperlinkDetectorTargets(final ISourceViewer sourceViewer) {
86
		IAdaptable context = new IAdaptable() {
87
			public Object getAdapter(Class adapter) {
88
				if(adapter==TaskRepository.class) {
89
					if(sourceViewer instanceof RepositoryTextViewer) {
90
						return ((RepositoryTextViewer) sourceViewer).getRepository();
91
					}
92
				}
93
				return null;
94
			}
95
		};
96
		
97
		Map targets = new HashMap();
98
		targets.put("org.eclipse.ui.DefaultTextEditor", context);
99
		targets.put("org.eclipse.mylyn.tasks.ui.TaskEditor", context);
100
		return targets;
101
	}
102
103
	@Override
104
	public IHyperlinkPresenter getHyperlinkPresenter(final ISourceViewer sourceViewer) {
105
		return new DefaultHyperlinkPresenter(new RGB(0, 0, 200)) {
106
			@Override
107
			public void showHyperlinks(IHyperlink[] hyperlinks) {
108
				super.showHyperlinks(hyperlinks);
109
110
				if (hyperlinks != null && hyperlinks.length > 0 && hyperlinks[0] instanceof TaskHyperlink) {
111
					TaskHyperlink hyperlink = (TaskHyperlink) hyperlinks[0];
112
113
					TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList();
114
					String repositoryUrl = hyperlink.getRepository().getUrl();
115
116
					AbstractTask task = taskList.getTask(repositoryUrl, hyperlink.getTaskId());
117
					if (task == null) {
118
						task = taskList.getTaskByKey(repositoryUrl, hyperlink.getTaskId());
119
					}
120
121
					if (task != null) {
122
						Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl();
123
						if (task.getTaskKey() == null) {
124
							cursorControl.setToolTipText(task.getSummary());
125
						} else {
126
							cursorControl.setToolTipText(task.getTaskKey() + ": " + task.getSummary());
127
						}
128
					}
129
				}
130
			}
131
132
			@Override
133
			public void hideHyperlinks() {
134
				Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl();
135
				if (cursorControl != null) {
136
					cursorControl.setToolTipText(null);
137
				}
138
139
				super.hideHyperlinks();
140
			}
141
142
			public void uninstall() {
143
				// ignore
144
				super.uninstall();
145
			}
146
		};
147
	}
148
149
	@Override
150
	public int getHyperlinkStateMask(ISourceViewer sourceViewer) {
151
		return SWT.NONE;
152
	}
153
154
	@Override
155
	public IReconciler getReconciler(ISourceViewer sourceViewer) {
156
		if (spellcheck) {
157
			return super.getReconciler(sourceViewer);
158
		} else {
159
			return null;
160
		}
161
	}
162
163
	static class RepositoryTextScanner extends RuleBasedScanner {
164
165
		public RepositoryTextScanner() {
166
			IToken bugToken = new Token(new TextAttribute(TaskListColorsAndFonts.COLOR_HYPERLINK_TEXT));
167
			IRule[] rules = new IRule[15];
168
			rules[0] = (new SingleLineRule("http://", " ", bugToken));
169
			rules[1] = (new SingleLineRule("https://", " ", bugToken));
170
			rules[2] = (new SingleLineRule("bug#", " ", bugToken));
171
			rules[3] = (new SingleLineRule("bug#", "", bugToken));
172
			rules[4] = (new SingleLineRule("bug #", "", bugToken));
173
//			rules[2] = (new MultiLineRule("bug#", " ", bugToken));
174
//			rules[3] = (new MultiLineRule("bug #", " ", bugToken));
175
//			rules[4] = (new SingleLineRule("bug #", "\n", bugToken));
176
			rules[5] = (new SingleLineRule("http://", "\n", bugToken));
177
			rules[6] = (new SingleLineRule("https://", "\n", bugToken));
178
			rules[7] = (new SingleLineRule("task#", " ", bugToken));
179
			rules[8] = (new MultiLineRule("task#", "\n", bugToken));
180
			rules[9] = (new MultiLineRule("task# ", " ", bugToken));
181
			rules[10] = (new SingleLineRule("task #", "\n", bugToken));
182
			rules[11] = (new SingleLineRule("*** This bug has been ", "***", bugToken));
183
			rules[12] = (new SingleLineRule("http://", "", bugToken));
184
			rules[13] = (new SingleLineRule("https://", "", bugToken));
185
			rules[14] = (new MultiLineRule("task #", " ", bugToken));
186
			setRules(rules);
187
		}
188
189
	}
190
191
}
(-)src/org/eclipse/mylyn/tasks/ui/editors/TaskFormPage.java (-3 / +2 lines)
Lines 39-45 Link Here
39
import org.eclipse.jface.text.source.SourceViewer;
39
import org.eclipse.jface.text.source.SourceViewer;
40
import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts;
40
import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts;
41
import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer;
41
import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer;
42
import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryViewerConfig;
43
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorActionContributor;
42
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorActionContributor;
44
import org.eclipse.mylyn.tasks.core.TaskRepository;
43
import org.eclipse.mylyn.tasks.core.TaskRepository;
45
import org.eclipse.swt.SWT;
44
import org.eclipse.swt.SWT;
Lines 266-272 Link Here
266
		// order for
265
		// order for
267
		// Hyperlink colouring to work. (Presenter needs document object up
266
		// Hyperlink colouring to work. (Presenter needs document object up
268
		// front)
267
		// front)
269
		RepositoryViewerConfig repositoryViewerConfig = new RepositoryViewerConfig(false);
268
		TaskTextViewerConfig repositoryViewerConfig = new TaskTextViewerConfig(false);
270
		commentViewer.configure(repositoryViewerConfig);
269
		commentViewer.configure(repositoryViewerConfig);
271
270
272
		IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
271
		IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
Lines 386-392 Link Here
386
385
387
		// NOTE: Configuration must be applied before the document is set in order for
386
		// NOTE: Configuration must be applied before the document is set in order for
388
		// Hyperlink coloring to work. (Presenter needs document object up front)
387
		// Hyperlink coloring to work. (Presenter needs document object up front)
389
		TextSourceViewerConfiguration viewerConfig = new RepositoryViewerConfig(spellCheck);
388
		TextSourceViewerConfiguration viewerConfig = new TaskTextViewerConfig(spellCheck);
390
		commentViewer.configure(viewerConfig);
389
		commentViewer.configure(viewerConfig);
391
390
392
		commentViewer.setDocument(document, annotationModel);
391
		commentViewer.setDocument(document, annotationModel);
(-)src/org/eclipse/mylyn/tasks/ui/editors/TaskTextViewerConfig.java (+193 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.util.HashMap;
12
import java.util.Map;
13
14
import org.eclipse.core.runtime.IAdaptable;
15
import org.eclipse.jface.text.IDocument;
16
import org.eclipse.jface.text.TextAttribute;
17
import org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter;
18
import org.eclipse.jface.text.hyperlink.IHyperlink;
19
import org.eclipse.jface.text.hyperlink.IHyperlinkPresenter;
20
import org.eclipse.jface.text.presentation.IPresentationReconciler;
21
import org.eclipse.jface.text.presentation.PresentationReconciler;
22
import org.eclipse.jface.text.reconciler.IReconciler;
23
import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
24
import org.eclipse.jface.text.rules.IRule;
25
import org.eclipse.jface.text.rules.IToken;
26
import org.eclipse.jface.text.rules.MultiLineRule;
27
import org.eclipse.jface.text.rules.RuleBasedScanner;
28
import org.eclipse.jface.text.rules.SingleLineRule;
29
import org.eclipse.jface.text.rules.Token;
30
import org.eclipse.jface.text.source.ISourceViewer;
31
import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts;
32
import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer;
33
import org.eclipse.mylyn.tasks.core.AbstractTask;
34
import org.eclipse.mylyn.tasks.core.TaskList;
35
import org.eclipse.mylyn.tasks.core.TaskRepository;
36
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
37
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
38
import org.eclipse.swt.SWT;
39
import org.eclipse.swt.graphics.RGB;
40
import org.eclipse.swt.widgets.Control;
41
import org.eclipse.ui.editors.text.EditorsUI;
42
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
43
44
/**
45
 * @author Rob Elves
46
 * @since 2.1
47
 */
48
public class TaskTextViewerConfig extends TextSourceViewerConfiguration {
49
50
	private RepositoryTextScanner scanner = null;
51
52
	private boolean spellcheck = false;
53
54
	public TaskTextViewerConfig(boolean spellchecking) {
55
		super(EditorsUI.getPreferenceStore());
56
		this.spellcheck = spellchecking;
57
	}
58
59
	@Override
60
	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
61
		PresentationReconciler reconciler = new PresentationReconciler();
62
		reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
63
64
		DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getDefaultScanner());
65
		reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
66
		reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
67
68
		return reconciler;
69
	}
70
71
	private RepositoryTextScanner getDefaultScanner() {
72
		if (scanner == null) {
73
			scanner = new RepositoryTextScanner();
74
		}
75
		return scanner;
76
	}
77
78
//	@Override
79
//	public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) {
80
//		List<IHyperlinkDetector> detectors = new ArrayList<IHyperlinkDetector>();
81
//		detectors.addAll(Arrays.asList(TasksUiPlugin.getDefault().getTaskHyperlinkDetectors()));
82
//		return detectors.toArray(new IHyperlinkDetector[detectors.size()]);
83
//	}
84
85
	@Override
86
	@SuppressWarnings("unchecked")
87
	protected Map getHyperlinkDetectorTargets(final ISourceViewer sourceViewer) {
88
		IAdaptable context = new IAdaptable() {
89
			public Object getAdapter(Class adapter) {
90
				if (adapter == TaskRepository.class) {
91
					if (sourceViewer instanceof RepositoryTextViewer) {
92
						return ((RepositoryTextViewer) sourceViewer).getRepository();
93
					}
94
				}
95
				return null;
96
			}
97
		};
98
99
		Map targets = new HashMap();
100
		targets.put("org.eclipse.ui.DefaultTextEditor", context);
101
		targets.put("org.eclipse.mylyn.tasks.ui.TaskEditor", context);
102
		return targets;
103
	}
104
105
	@Override
106
	public IHyperlinkPresenter getHyperlinkPresenter(final ISourceViewer sourceViewer) {
107
		return new DefaultHyperlinkPresenter(new RGB(0, 0, 200)) {
108
			@Override
109
			public void showHyperlinks(IHyperlink[] hyperlinks) {
110
				super.showHyperlinks(hyperlinks);
111
112
				if (hyperlinks != null && hyperlinks.length > 0 && hyperlinks[0] instanceof TaskHyperlink) {
113
					TaskHyperlink hyperlink = (TaskHyperlink) hyperlinks[0];
114
115
					TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList();
116
					String repositoryUrl = hyperlink.getRepository().getUrl();
117
118
					AbstractTask task = taskList.getTask(repositoryUrl, hyperlink.getTaskId());
119
					if (task == null) {
120
						task = taskList.getTaskByKey(repositoryUrl, hyperlink.getTaskId());
121
					}
122
123
					if (task != null) {
124
						Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl();
125
						if (task.getTaskKey() == null) {
126
							cursorControl.setToolTipText(task.getSummary());
127
						} else {
128
							cursorControl.setToolTipText(task.getTaskKey() + ": " + task.getSummary());
129
						}
130
					}
131
				}
132
			}
133
134
			@Override
135
			public void hideHyperlinks() {
136
				Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl();
137
				if (cursorControl != null) {
138
					cursorControl.setToolTipText(null);
139
				}
140
141
				super.hideHyperlinks();
142
			}
143
144
			public void uninstall() {
145
				// ignore
146
				super.uninstall();
147
			}
148
		};
149
	}
150
151
	@Override
152
	public int getHyperlinkStateMask(ISourceViewer sourceViewer) {
153
		return SWT.NONE;
154
	}
155
156
	@Override
157
	public IReconciler getReconciler(ISourceViewer sourceViewer) {
158
		if (spellcheck) {
159
			return super.getReconciler(sourceViewer);
160
		} else {
161
			return null;
162
		}
163
	}
164
165
	private static class RepositoryTextScanner extends RuleBasedScanner {
166
167
		public RepositoryTextScanner() {
168
			IToken bugToken = new Token(new TextAttribute(TaskListColorsAndFonts.COLOR_HYPERLINK_TEXT));
169
			IRule[] rules = new IRule[15];
170
			rules[0] = (new SingleLineRule("http://", " ", bugToken));
171
			rules[1] = (new SingleLineRule("https://", " ", bugToken));
172
			rules[2] = (new SingleLineRule("bug#", " ", bugToken));
173
			rules[3] = (new SingleLineRule("bug#", "", bugToken));
174
			rules[4] = (new SingleLineRule("bug #", "", bugToken));
175
//			rules[2] = (new MultiLineRule("bug#", " ", bugToken));
176
//			rules[3] = (new MultiLineRule("bug #", " ", bugToken));
177
//			rules[4] = (new SingleLineRule("bug #", "\n", bugToken));
178
			rules[5] = (new SingleLineRule("http://", "\n", bugToken));
179
			rules[6] = (new SingleLineRule("https://", "\n", bugToken));
180
			rules[7] = (new SingleLineRule("task#", " ", bugToken));
181
			rules[8] = (new MultiLineRule("task#", "\n", bugToken));
182
			rules[9] = (new MultiLineRule("task# ", " ", bugToken));
183
			rules[10] = (new SingleLineRule("task #", "\n", bugToken));
184
			rules[11] = (new SingleLineRule("*** This bug has been ", "***", bugToken));
185
			rules[12] = (new SingleLineRule("http://", "", bugToken));
186
			rules[13] = (new SingleLineRule("https://", "", bugToken));
187
			rules[14] = (new MultiLineRule("task #", " ", bugToken));
188
			setRules(rules);
189
		}
190
191
	}
192
193
}
(-).refactorings/2007/8/34/refactorings.index (+2 lines)
Added Link Here
1
1187734937104	Rename type 'RepositoryViewerConfig'
2
1187734975225	Move compilation unit
(-).refactorings/2007/8/34/refactorings.history (+5 lines)
Added Link Here
1
<?xml version="1.0" encoding="utf-8"?>
2
<session version="1.0">
3
<refactoring comment="Rename type 'org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryViewerConfig' to 'TaskTextViewerConfig'&#10;- Original project: 'org.eclipse.mylyn.tasks.ui'&#10;- Original element: 'org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryViewerConfig'&#10;- Renamed element: 'org.eclipse.mylyn.internal.tasks.ui.editors.TaskTextViewerConfig'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" description="Rename type 'RepositoryViewerConfig'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylyn.internal.tasks.ui.editors{RepositoryViewerConfig.java[RepositoryViewerConfig" matchStrategy="1" name="TaskTextViewerConfig" qualified="false" references="true" similarDeclarations="false" stamp="1187734937104" textual="false" version="1.0"/>
4
<refactoring comment="Move 1 elements(s) to 'org.eclipse.mylyn.tasks.ui/src/org.eclipse.mylyn.tasks.ui.editors'&#10;- Original project: 'org.eclipse.mylyn.tasks.ui'&#10;- Destination element: 'org.eclipse.mylyn.tasks.ui/src/org.eclipse.mylyn.tasks.ui.editors'&#10;- Original element: 'org.eclipse.mylyn.internal.tasks.ui.editors.TaskTextViewerConfig.java'&#10;- Update references to refactored element" description="Move compilation unit" destination="/src&lt;org.eclipse.mylyn.tasks.ui.editors" element1="/src&lt;org.eclipse.mylyn.internal.tasks.ui.editors{TaskTextViewerConfig.java" files="0" flags="589830" folders="0" id="org.eclipse.jdt.ui.move" policy="org.eclipse.jdt.ui.moveResources" qualified="false" references="true" stamp="1187734975225" units="1" version="1.0"/>
5
</session>

Return to bug 200117