Mercurial > projects > dwt-addons
annotate dwtx/jface/util/Policy.d @ 70:46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 22 May 2008 01:36:46 +0200 |
parents | da5ad8eedf5d |
children | 4878bef4a38e |
rev | line source |
---|---|
4 | 1 /******************************************************************************* |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
2 * Copyright (c) 2004, 2008 IBM Corporation and others. |
4 | 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 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
7 * |
4 | 8 * Contributors: |
9 * IBM Corporation - initial API and implementation | |
10 * Chris Gross (schtoo@schtoo.com) - support for ILogger added | |
11 * (bug 49497 [RCP] JFace dependency on dwtx.core.runtime enlarges standalone JFace applications) | |
12 * Port to the D programming language: | |
13 * Frank Benoit <benoit@tionex.de> | |
14 *******************************************************************************/ | |
15 module dwtx.jface.util.Policy; | |
16 | |
17 static import dwtx.core.runtime.Assert; | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
18 import dwt.events.DisposeEvent; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
19 import dwt.events.DisposeListener; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
20 import dwt.widgets.Display; |
4 | 21 import dwtx.core.runtime.IStatus; |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
22 import dwtx.core.runtime.Status; |
4 | 23 import dwtx.jface.dialogs.AnimatorFactory; |
24 import dwtx.jface.dialogs.ErrorSupportProvider; | |
25 | |
26 import dwtx.jface.util.ILogger; | |
27 | |
28 import dwt.dwthelper.utils; | |
29 import tango.io.Stdout; | |
30 | |
31 /** | |
32 * The Policy class handles settings for behaviour, debug flags and logging | |
33 * within JFace. | |
34 * | |
35 * @since 3.0 | |
36 */ | |
37 public class Policy { | |
38 | |
39 /** | |
40 * Constant for the the default setting for debug options. | |
41 */ | |
42 public static const bool DEFAULT = false; | |
43 | |
44 /** | |
45 * The unique identifier of the JFace plug-in. | |
46 */ | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
47 public static const String JFACE = "dwtx.jface"; //$NON-NLS-1$ |
4 | 48 |
49 private static ILogger log; | |
50 | |
51 private static Comparator viewerComparator; | |
52 | |
53 private static AnimatorFactory animatorFactory; | |
54 | |
55 /** | |
56 * A flag to indicate whether unparented dialogs should be checked. | |
57 */ | |
58 public static bool DEBUG_DIALOG_NO_PARENT = DEFAULT; | |
59 | |
60 /** | |
61 * A flag to indicate whether actions are being traced. | |
62 */ | |
63 public static bool TRACE_ACTIONS = DEFAULT; | |
64 | |
65 /** | |
66 * A flag to indicate whether toolbars are being traced. | |
67 */ | |
68 | |
69 public static bool TRACE_TOOLBAR = DEFAULT; | |
70 | |
71 private static ErrorSupportProvider errorSupportProvider; | |
72 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
73 private static StatusHandler statusHandler; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
74 |
4 | 75 /** |
76 * Returns the dummy log to use if none has been set | |
77 */ | |
78 private static ILogger getDummyLog() { | |
79 return new class ILogger { | |
80 public void log(IStatus status) { | |
81 Stderr.formatln(status.getMessage()); | |
82 if (status.getException() !is null) { | |
83 auto e = status.getException(); | |
40
da5ad8eedf5d
debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents:
4
diff
changeset
|
84 Stderr.formatln( "Exception of type {} in {}({}): {}", e.classinfo.name, e.file, e.line, e.msg ); |
4 | 85 foreach( msg; e.info ){ |
40
da5ad8eedf5d
debug prints, dwt.dwthelper restructure, ...
Frank Benoit <benoit@tionex.de>
parents:
4
diff
changeset
|
86 Stderr.formatln( " trc: {}", msg ); |
4 | 87 } |
88 // status.getException().printStackTrace(); | |
89 } | |
90 } | |
91 }; | |
92 } | |
93 | |
94 /** | |
95 * Sets the logger used by JFace to log errors. | |
96 * | |
97 * @param logger | |
98 * the logger to use, or <code>null</code> to use the default | |
99 * logger | |
100 * @since 3.1 | |
101 */ | |
102 public static void setLog(ILogger logger) { | |
103 log = logger; | |
104 } | |
105 | |
106 /** | |
107 * Returns the logger used by JFace to log errors. | |
108 * <p> | |
109 * The default logger prints the status to <code>System.err</code>. | |
110 * </p> | |
111 * | |
112 * @return the logger | |
113 * @since 3.1 | |
114 */ | |
115 public static ILogger getLog() { | |
116 if (log is null) { | |
117 log = getDummyLog(); | |
118 } | |
119 return log; | |
120 } | |
121 | |
122 /** | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
123 * Sets the status handler used by JFace to handle statuses. |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
124 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
125 * @param status |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
126 * the handler to use, or <code>null</code> to use the default |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
127 * one |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
128 * @since 3.4 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
129 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
130 public static void setStatusHandler(StatusHandler status) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
131 statusHandler = status; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
132 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
133 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
134 /** |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
135 * Returns the status handler used by JFace to handle statuses. |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
136 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
137 * @return the status handler |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
138 * @since 3.4 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
139 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
140 public static StatusHandler getStatusHandler() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
141 if (statusHandler is null) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
142 statusHandler = getDummyStatusHandler(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
143 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
144 return statusHandler; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
145 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
146 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
147 private static StatusHandler getDummyStatusHandler() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
148 return new StatusHandler() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
149 private SafeRunnableDialog dialog; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
150 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
151 public void show(final IStatus status, String title) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
152 Runnable runnable = new Runnable() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
153 public void run() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
154 if (dialog is null || dialog.getShell().isDisposed()) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
155 dialog = new SafeRunnableDialog(status); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
156 dialog.create(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
157 dialog.getShell().addDisposeListener( |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
158 new DisposeListener() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
159 public void widgetDisposed( |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
160 DisposeEvent e) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
161 dialog = null; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
162 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
163 }); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
164 dialog.open(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
165 } else { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
166 dialog.addStatus(status); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
167 dialog.refresh(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
168 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
169 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
170 }; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
171 if (Display.getCurrent() !is null) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
172 runnable.run(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
173 } else { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
174 Display.getDefault().asyncExec(runnable); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
175 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
176 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
177 }; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
178 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
179 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
180 /** |
4 | 181 * Return the default comparator used by JFace to sort strings. |
182 * | |
183 * @return a default comparator used by JFace to sort strings | |
184 */ | |
185 private static Comparator getDefaultComparator() { | |
186 return new class() Comparator { | |
187 /** | |
188 * Compares string s1 to string s2. | |
189 * | |
190 * @param s1 | |
191 * string 1 | |
192 * @param s2 | |
193 * string 2 | |
194 * @return Returns an integer value. Value is less than zero if | |
195 * source is less than target, value is zero if source and | |
196 * target are equal, value is greater than zero if source is | |
197 * greater than target. | |
198 * @exception ClassCastException | |
199 * the arguments cannot be cast to Strings. | |
200 */ | |
201 public int compare(Object s1, Object s2) { | |
202 auto a = (cast(ArrayWrapperString) s1).array; | |
203 auto b = (cast(ArrayWrapperString) s2).array; | |
204 return a < b; | |
205 } | |
206 }; | |
207 } | |
208 | |
209 /** | |
210 * Return the comparator used by JFace to sort strings. | |
211 * | |
212 * @return the comparator used by JFace to sort strings | |
213 * @since 3.2 | |
214 */ | |
215 public static Comparator getComparator() { | |
216 if (viewerComparator is null) { | |
217 viewerComparator = getDefaultComparator(); | |
218 } | |
219 return viewerComparator; | |
220 } | |
221 | |
222 /** | |
223 * Sets the comparator used by JFace to sort strings. | |
224 * | |
225 * @param comparator | |
226 * comparator used by JFace to sort strings | |
227 * @since 3.2 | |
228 */ | |
229 public static void setComparator(Comparator comparator) { | |
230 dwtx.core.runtime.Assert.Assert.isTrue(viewerComparator is null); | |
231 viewerComparator = comparator; | |
232 } | |
233 | |
234 /** | |
235 * Sets the animator factory used by JFace to create control animator | |
236 * instances. | |
237 * | |
238 * @param factory | |
239 * the AnimatorFactory to use. | |
240 * @since 3.2 | |
241 * @deprecated this is no longer in use as of 3.3 | |
242 */ | |
243 public static void setAnimatorFactory(AnimatorFactory factory) { | |
244 animatorFactory = factory; | |
245 } | |
246 | |
247 /** | |
248 * Returns the animator factory used by JFace to create control animator | |
249 * instances. | |
250 * | |
251 * @return the animator factory used to create control animator instances. | |
252 * @since 3.2 | |
253 * @deprecated this is no longer in use as of 3.3 | |
254 */ | |
255 public static AnimatorFactory getAnimatorFactory() { | |
256 if (animatorFactory is null) | |
257 animatorFactory = new AnimatorFactory(); | |
258 return animatorFactory; | |
259 } | |
260 | |
261 /** | |
262 * Set the error support provider for error dialogs. | |
263 * | |
264 * @param provider | |
265 * @since 3.3 | |
266 */ | |
267 public static void setErrorSupportProvider(ErrorSupportProvider provider) { | |
268 errorSupportProvider = provider; | |
269 } | |
270 | |
271 /** | |
272 * Return the ErrorSupportProvider for the receiver. | |
273 * | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
274 * @return ErrorSupportProvider or <code>null</code> if this has not been |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
275 * set |
4 | 276 * @since 3.3 |
277 */ | |
278 public static ErrorSupportProvider getErrorSupportProvider() { | |
279 return errorSupportProvider; | |
280 } | |
281 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
282 /** |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
283 * Log the Exception to the logger. |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
284 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
285 * @param exception |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
286 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
287 public static void logException(Exception exception) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
288 getLog().log( |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
289 new Status(IStatus.ERROR, JFACE, exception |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
290 .getLocalizedMessage(), exception)); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
291 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
292 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
40
diff
changeset
|
293 |
4 | 294 } |