Mercurial > projects > dwt-addons
comparison dwtx/jface/text/source/SourceViewerConfiguration.d @ 129:eb30df5ca28b
Added JFace Text sources
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 23 Aug 2008 19:10:48 +0200 |
parents | |
children | c4fb132a086c |
comparison
equal
deleted
inserted
replaced
128:8df1d4193877 | 129:eb30df5ca28b |
---|---|
1 /******************************************************************************* | |
2 * Copyright (c) 2000, 2007 IBM Corporation 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 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * Port to the D programming language: | |
11 * Frank Benoit <benoit@tionex.de> | |
12 *******************************************************************************/ | |
13 module dwtx.jface.text.source.SourceViewerConfiguration; | |
14 | |
15 import dwt.dwthelper.utils; | |
16 | |
17 | |
18 import java.util.Arrays; | |
19 | |
20 import dwt.DWT; | |
21 import dwt.graphics.RGB; | |
22 import dwt.widgets.Shell; | |
23 import dwtx.jface.text.DefaultAutoIndentStrategy; | |
24 import dwtx.jface.text.DefaultInformationControl; | |
25 import dwtx.jface.text.DefaultTextDoubleClickStrategy; | |
26 import dwtx.jface.text.IAutoEditStrategy; | |
27 import dwtx.jface.text.IAutoIndentStrategy; | |
28 import dwtx.jface.text.IDocument; | |
29 import dwtx.jface.text.IDocumentExtension3; | |
30 import dwtx.jface.text.IInformationControl; | |
31 import dwtx.jface.text.IInformationControlCreator; | |
32 import dwtx.jface.text.ITextDoubleClickStrategy; | |
33 import dwtx.jface.text.ITextHover; | |
34 import dwtx.jface.text.ITextViewerExtension2; | |
35 import dwtx.jface.text.IUndoManager; | |
36 import dwtx.jface.text.TextViewerUndoManager; | |
37 import dwtx.jface.text.contentassist.IContentAssistant; | |
38 import dwtx.jface.text.formatter.IContentFormatter; | |
39 import dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter; | |
40 import dwtx.jface.text.hyperlink.IHyperlinkDetector; | |
41 import dwtx.jface.text.hyperlink.IHyperlinkPresenter; | |
42 import dwtx.jface.text.hyperlink.URLHyperlinkDetector; | |
43 import dwtx.jface.text.information.IInformationPresenter; | |
44 import dwtx.jface.text.presentation.IPresentationReconciler; | |
45 import dwtx.jface.text.presentation.PresentationReconciler; | |
46 import dwtx.jface.text.quickassist.IQuickAssistAssistant; | |
47 import dwtx.jface.text.reconciler.IReconciler; | |
48 | |
49 | |
50 /** | |
51 * This class bundles the configuration space of a source viewer. Instances of | |
52 * this class are passed to the <code>configure</code> method of | |
53 * <code>ISourceViewer</code>. | |
54 * <p> | |
55 * Each method in this class get as argument the source viewer for which it | |
56 * should provide a particular configuration setting such as a presentation | |
57 * reconciler. Based on its specific knowledge about the returned object, the | |
58 * configuration might share such objects or compute them according to some | |
59 * rules.</p> | |
60 * <p> | |
61 * Clients should subclass and override just those methods which must be | |
62 * specific to their needs.</p> | |
63 * | |
64 * @see dwtx.jface.text.source.ISourceViewer | |
65 */ | |
66 public class SourceViewerConfiguration { | |
67 | |
68 | |
69 /** | |
70 * Creates a new source viewer configuration that behaves according to | |
71 * specification of this class' methods. | |
72 */ | |
73 public SourceViewerConfiguration() { | |
74 super(); | |
75 } | |
76 | |
77 /** | |
78 * Returns the visual width of the tab character. This implementation always | |
79 * returns 4. | |
80 * | |
81 * @param sourceViewer the source viewer to be configured by this configuration | |
82 * @return the tab width | |
83 */ | |
84 public int getTabWidth(ISourceViewer sourceViewer) { | |
85 return 4; | |
86 } | |
87 | |
88 /** | |
89 * Returns the undo manager for the given source viewer. This implementation | |
90 * always returns a new instance of <code>DefaultUndoManager</code> whose | |
91 * history length is set to 25. | |
92 * | |
93 * @param sourceViewer the source viewer to be configured by this configuration | |
94 * @return an undo manager or <code>null</code> if no undo/redo should not be supported | |
95 */ | |
96 public IUndoManager getUndoManager(ISourceViewer sourceViewer) { | |
97 return new TextViewerUndoManager(25); | |
98 } | |
99 | |
100 /** | |
101 * Returns the reconciler ready to be used with the given source viewer. | |
102 * This implementation always returns <code>null</code>. | |
103 * | |
104 * @param sourceViewer the source viewer to be configured by this configuration | |
105 * @return a reconciler or <code>null</code> if reconciling should not be supported | |
106 */ | |
107 public IReconciler getReconciler(ISourceViewer sourceViewer) { | |
108 return null; | |
109 } | |
110 | |
111 /** | |
112 * Returns the presentation reconciler ready to be used with the given source viewer. | |
113 * | |
114 * @param sourceViewer the source viewer | |
115 * @return the presentation reconciler or <code>null</code> if presentation reconciling should not be supported | |
116 */ | |
117 public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { | |
118 PresentationReconciler reconciler= new PresentationReconciler(); | |
119 reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); | |
120 return reconciler; | |
121 } | |
122 | |
123 /** | |
124 * Returns the content formatter ready to be used with the given source viewer. | |
125 * This implementation always returns <code>null</code>. | |
126 * | |
127 * @param sourceViewer the source viewer to be configured by this configuration | |
128 * @return a content formatter or <code>null</code> if formatting should not be supported | |
129 */ | |
130 public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) { | |
131 return null; | |
132 } | |
133 | |
134 /** | |
135 * Returns the content assistant ready to be used with the given source viewer. | |
136 * This implementation always returns <code>null</code>. | |
137 * | |
138 * @param sourceViewer the source viewer to be configured by this configuration | |
139 * @return a content assistant or <code>null</code> if content assist should not be supported | |
140 */ | |
141 public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { | |
142 return null; | |
143 } | |
144 | |
145 /** | |
146 * Returns the quick assist assistant ready to be used with the given | |
147 * source viewer. | |
148 * This implementation always returns <code>null</code>. | |
149 * | |
150 * @param sourceViewer the source viewer to be configured by this configuration | |
151 * @return a quick assist assistant or <code>null</code> if quick assist should not be supported | |
152 * @since 3.2 | |
153 */ | |
154 public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) { | |
155 return null; | |
156 } | |
157 | |
158 /** | |
159 * Returns the auto indentation strategy ready to be used with the given source viewer | |
160 * when manipulating text of the given content type. This implementation always | |
161 * returns an new instance of <code>DefaultAutoIndentStrategy</code>. | |
162 * | |
163 * @param sourceViewer the source viewer to be configured by this configuration | |
164 * @param contentType the content type for which the strategy is applicable | |
165 * @return the auto indent strategy or <code>null</code> if automatic indentation is not to be enabled | |
166 * @deprecated since 3.1 use {@link #getAutoEditStrategies(ISourceViewer, String)} instead | |
167 */ | |
168 public IAutoIndentStrategy getAutoIndentStrategy(ISourceViewer sourceViewer, String contentType) { | |
169 return new DefaultAutoIndentStrategy(); | |
170 } | |
171 | |
172 /** | |
173 * Returns the auto edit strategies ready to be used with the given source viewer | |
174 * when manipulating text of the given content type. For backward compatibility, this implementation always | |
175 * returns an array containing the result of {@link #getAutoIndentStrategy(ISourceViewer, String)}. | |
176 * | |
177 * @param sourceViewer the source viewer to be configured by this configuration | |
178 * @param contentType the content type for which the strategies are applicable | |
179 * @return the auto edit strategies or <code>null</code> if automatic editing is not to be enabled | |
180 * @since 3.1 | |
181 */ | |
182 public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) { | |
183 return new IAutoEditStrategy[] { getAutoIndentStrategy(sourceViewer, contentType) }; | |
184 } | |
185 | |
186 /** | |
187 * Returns the default prefixes to be used by the line-prefix operation | |
188 * in the given source viewer for text of the given content type. This implementation always | |
189 * returns <code>null</code>. | |
190 * | |
191 * @param sourceViewer the source viewer to be configured by this configuration | |
192 * @param contentType the content type for which the prefix is applicable | |
193 * @return the default prefixes or <code>null</code> if the prefix operation should not be supported | |
194 * @since 2.0 | |
195 */ | |
196 public String[] getDefaultPrefixes(ISourceViewer sourceViewer, String contentType) { | |
197 return null; | |
198 } | |
199 | |
200 /** | |
201 * Returns the double-click strategy ready to be used in this viewer when double clicking | |
202 * onto text of the given content type. This implementation always returns a new instance of | |
203 * <code>DefaultTextDoubleClickStrategy</code>. | |
204 * | |
205 * @param sourceViewer the source viewer to be configured by this configuration | |
206 * @param contentType the content type for which the strategy is applicable | |
207 * @return a double-click strategy or <code>null</code> if double clicking should not be supported | |
208 */ | |
209 public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType) { | |
210 return new DefaultTextDoubleClickStrategy(); | |
211 } | |
212 | |
213 /** | |
214 * Returns the prefixes to be used by the line-shift operation. This implementation | |
215 * always returns <code>new String[] { "\t", " ", "" }</code>. | |
216 * <p> | |
217 * <strong>Note:</strong> <em>This default is incorrect but cannot be changed in order not | |
218 * to break any existing clients. Subclasses should overwrite this method and | |
219 * use {@link #getIndentPrefixesForTab(int)} if applicable.</em> | |
220 * | |
221 * @param sourceViewer the source viewer to be configured by this configuration | |
222 * @param contentType the content type for which the prefix is applicable | |
223 * @return the prefixes or <code>null</code> if the prefix operation should not be supported | |
224 */ | |
225 public String[] getIndentPrefixes(ISourceViewer sourceViewer, String contentType) { | |
226 return new String[] { "\t", " ", "" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ | |
227 } | |
228 | |
229 /** | |
230 * Computes and returns the indent prefixes for tab indentation | |
231 * which is represented as <code>tabSizeInSpaces</code>. | |
232 * | |
233 * @param tabWidth the display tab width | |
234 * @return the indent prefixes | |
235 * @see #getIndentPrefixes(ISourceViewer, String) | |
236 * @since 3.3 | |
237 */ | |
238 protected String[] getIndentPrefixesForTab(int tabWidth) { | |
239 String[] indentPrefixes= new String[tabWidth + 2]; | |
240 for (int i= 0; i <= tabWidth; i++) { | |
241 char[] spaceChars= new char[i]; | |
242 Arrays.fill(spaceChars, ' '); | |
243 String spaces= new String(spaceChars); | |
244 if (i < tabWidth) | |
245 indentPrefixes[i]= spaces + '\t'; | |
246 else | |
247 indentPrefixes[i]= new String(spaces); | |
248 } | |
249 indentPrefixes[tabWidth + 1]= ""; //$NON-NLS-1$ | |
250 return indentPrefixes; | |
251 } | |
252 | |
253 /** | |
254 * Returns the annotation hover which will provide the information to be | |
255 * shown in a hover popup window when requested for the given | |
256 * source viewer. This implementation always returns <code>null</code>. | |
257 * | |
258 * @param sourceViewer the source viewer to be configured by this configuration | |
259 * @return an annotation hover or <code>null</code> if no hover support should be installed | |
260 */ | |
261 public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { | |
262 return null; | |
263 } | |
264 | |
265 /** | |
266 * Returns the annotation hover which will provide the information to be | |
267 * shown in a hover popup window when requested for the overview ruler | |
268 * of the given source viewer.This implementation always returns the general | |
269 * annotation hover returned by <code>getAnnotationHover</code>. | |
270 * | |
271 * @param sourceViewer the source viewer to be configured by this configuration | |
272 * @return an annotation hover or <code>null</code> if no hover support should be installed | |
273 * @since 3.0 | |
274 */ | |
275 public IAnnotationHover getOverviewRulerAnnotationHover(ISourceViewer sourceViewer) { | |
276 return getAnnotationHover(sourceViewer); | |
277 } | |
278 | |
279 /** | |
280 * Returns the DWT event state masks for which text hover are configured for | |
281 * the given content type. | |
282 * | |
283 * @param sourceViewer the source viewer to be configured by this configuration | |
284 * @param contentType the content type | |
285 * @return an <code>int</code> array with the configured DWT event state masks | |
286 * or <code>null</code> if text hovers are not supported for the given content type | |
287 * @since 2.1 | |
288 */ | |
289 public int[] getConfiguredTextHoverStateMasks(ISourceViewer sourceViewer, String contentType) { | |
290 return null; | |
291 } | |
292 | |
293 /** | |
294 * Returns the text hover which will provide the information to be shown | |
295 * in a text hover popup window when requested for the given source viewer and | |
296 * the given content type. This implementation always returns <code> | |
297 * null</code>. | |
298 * | |
299 * @param sourceViewer the source viewer to be configured by this configuration | |
300 * @param contentType the content type | |
301 * @param stateMask the DWT event state mask | |
302 * @return a text hover or <code>null</code> if no hover support should be installed | |
303 * @since 2.1 | |
304 */ | |
305 public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) { | |
306 if (stateMask is ITextViewerExtension2.DEFAULT_HOVER_STATE_MASK) | |
307 return getTextHover(sourceViewer, contentType); | |
308 return null; | |
309 } | |
310 | |
311 /** | |
312 * Returns the text hover which will provide the information to be shown | |
313 * in a text hover popup window when requested for the given source viewer and | |
314 * the given content type. This implementation always returns <code> | |
315 * null</code>. | |
316 * | |
317 * @param sourceViewer the source viewer to be configured by this configuration | |
318 * @param contentType the content type | |
319 * @return a text hover or <code>null</code> if no hover support should be installed | |
320 */ | |
321 public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { | |
322 return null; | |
323 } | |
324 | |
325 /** | |
326 * Returns the information control creator. The creator is a factory creating information | |
327 * controls for the given source viewer. This implementation always returns a creator for | |
328 * <code>DefaultInformationControl</code> instances. | |
329 * | |
330 * @param sourceViewer the source viewer to be configured by this configuration | |
331 * @return the information control creator or <code>null</code> if no information support should be installed | |
332 * @since 2.0 | |
333 */ | |
334 public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) { | |
335 return new IInformationControlCreator() { | |
336 public IInformationControl createInformationControl(Shell parent) { | |
337 return new DefaultInformationControl(parent); | |
338 } | |
339 }; | |
340 } | |
341 | |
342 /** | |
343 * Returns the information presenter which will determine and shown | |
344 * information requested for the current cursor position. This implementation | |
345 * always returns <code>null</code>. | |
346 * | |
347 * @param sourceViewer the source viewer to be configured by this configuration | |
348 * @return an information presenter <code>null</code> if no information presenter should be installed | |
349 * @since 2.0 | |
350 */ | |
351 public IInformationPresenter getInformationPresenter(ISourceViewer sourceViewer) { | |
352 return null; | |
353 } | |
354 | |
355 /** | |
356 * Returns all configured content types for the given source viewer. This list | |
357 * tells the caller which content types must be configured for the given source | |
358 * viewer, i.e. for which content types the given source viewer's functionalities | |
359 * must be specified. This implementation always returns <code> | |
360 * new String[] { IDocument.DEFAULT_CONTENT_TYPE }</code>. | |
361 * | |
362 * @param sourceViewer the source viewer to be configured by this configuration | |
363 * @return the configured content types for the given viewer | |
364 */ | |
365 public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { | |
366 return new String[] { IDocument.DEFAULT_CONTENT_TYPE }; | |
367 } | |
368 | |
369 /** | |
370 * Returns the configured partitioning for the given source viewer. The partitioning is | |
371 * used when the querying content types from the source viewer's input document. This | |
372 * implementation always returns <code>IDocumentExtension3.DEFAULT_PARTITIONING</code>. | |
373 * | |
374 * @param sourceViewer the source viewer to be configured by this configuration | |
375 * @return the configured partitioning | |
376 * @see #getConfiguredContentTypes(ISourceViewer) | |
377 * @since 3.0 | |
378 */ | |
379 public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) { | |
380 return IDocumentExtension3.DEFAULT_PARTITIONING; | |
381 } | |
382 | |
383 /** | |
384 * Returns the hyperlink detectors which be used to detect hyperlinks | |
385 * in the given source viewer. This | |
386 * implementation always returns an array with an URL hyperlink detector. | |
387 * | |
388 * @param sourceViewer the source viewer to be configured by this configuration | |
389 * @return an array with hyperlink detectors or <code>null</code> if no hyperlink support should be installed | |
390 * @since 3.1 | |
391 */ | |
392 public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) { | |
393 if (sourceViewer is null) | |
394 return null; | |
395 | |
396 return new IHyperlinkDetector[] { new URLHyperlinkDetector() }; | |
397 } | |
398 | |
399 /** | |
400 * Returns the hyperlink presenter for the given source viewer. | |
401 * This implementation always returns the {@link DefaultHyperlinkPresenter}. | |
402 * | |
403 * @param sourceViewer the source viewer to be configured by this configuration | |
404 * @return the hyperlink presenter or <code>null</code> if no hyperlink support should be installed | |
405 * @since 3.1 | |
406 */ | |
407 public IHyperlinkPresenter getHyperlinkPresenter(ISourceViewer sourceViewer) { | |
408 return new DefaultHyperlinkPresenter(new RGB(0, 0, 255)); | |
409 } | |
410 | |
411 /** | |
412 * Returns the DWT event state mask which in combination | |
413 * with the left mouse button activates hyperlinking. | |
414 * This implementation always returns the {@link DWT#MOD1}. | |
415 * | |
416 * @param sourceViewer the source viewer to be configured by this configuration | |
417 * @return the DWT event state mask to activate hyperlink mode | |
418 * @since 3.1 | |
419 */ | |
420 public int getHyperlinkStateMask(ISourceViewer sourceViewer) { | |
421 return DWT.MOD1; | |
422 } | |
423 } |