annotate dwtx/jface/dialogs/Dialog.d @ 82:0aafcf6e5217

Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
author Frank Benoit <benoit@tionex.de>
date Fri, 20 Jun 2008 12:44:40 +0200
parents 46a6e0e6ccd4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
10 * Remy Chi Jian Suen <remy.suen@gmail.com> - Bug 218553 [JFace] mis-spelling of their in applyDialogFont(...)
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Port to the D programming language:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 * Frank Benoit <benoit@tionex.de>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 *******************************************************************************/
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 module dwtx.jface.dialogs.Dialog;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.dialogs.IDialogBlockedHandler;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.dialogs.IDialogSettings;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.dialogs.IDialogConstants;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 // import tango.util.Arrays;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.DWT;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.events.SelectionAdapter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.events.SelectionEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.Font;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.graphics.FontData;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.graphics.FontMetrics;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.graphics.GC;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.graphics.Image;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.graphics.Point;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.layout.FormData;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.layout.GridData;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.layout.GridLayout;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.widgets.Button;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.widgets.Composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.widgets.Control;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwt.widgets.Display;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwt.widgets.Shell;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 import dwtx.core.runtime.IProgressMonitor;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 import dwtx.core.runtime.IStatus;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 import dwtx.core.runtime.Status;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 import dwtx.jface.resource.JFaceResources;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwtx.jface.util.Policy;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 import dwtx.jface.window.IShellProvider;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 import dwtx.jface.window.SameShellProvider;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 import dwtx.jface.window.Window;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 import dwt.dwthelper.utils;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * A dialog is a specialized window used for narrow-focused communication with
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * the user.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * Dialogs are usually modal. Consequently, it is generally bad practice to open
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * a dialog without a parent. A modal dialog without a parent is not prevented
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * from disappearing behind the application's other windows, making it very
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * confusing for the user.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * If there is more than one modal dialog is open the second one should be
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * parented off of the shell of the first one otherwise it is possible that the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * OS will give focus to the first dialog potentially blocking the UI.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 public abstract class Dialog : Window {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * Image registry key for error image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * <code>"dialog_error_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * @deprecated use
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * dwt.widgets.Display.getSystemImage(DWT.ICON_ERROR)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 public static const String DLG_IMG_ERROR = "dialog_error_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * Image registry key for info image (value <code>"dialog_info_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * @deprecated use
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * dwt.widgets.Display.getSystemImage(DWT.ICON_INFORMATION)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 public static const String DLG_IMG_INFO = "dialog_info_imageg"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * Image registry key for question image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * <code>"dialog_question_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * @deprecated dwt.widgets.Display.getSystemImage(DWT.ICON_QUESTION)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 public static const String DLG_IMG_QUESTION = "dialog_question_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * Image registry key for warning image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * <code>"dialog_warning_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * @deprecated use
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * dwt.widgets.Display.getSystemImage(DWT.ICON_WARNING)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 public static const String DLG_IMG_WARNING = "dialog_warning_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * Image registry key for info message image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 * <code>"dialog_messasge_info_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 public static const String DLG_IMG_MESSAGE_INFO = "dialog_messasge_info_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * Image registry key for info message image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * <code>"dialog_messasge_warning_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 public static const String DLG_IMG_MESSAGE_WARNING = "dialog_messasge_warning_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * Image registry key for info message image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * <code>"dialog_message_error_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 public static const String DLG_IMG_MESSAGE_ERROR = "dialog_message_error_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * Image registry key for help image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * <code>"dialog_help_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 public static const String DLG_IMG_HELP = "dialog_help_image"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * The ellipsis is the string that is used to represent shortened text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * @since 3.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 public static const String ELLIPSIS = "..."; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * The dialog settings key name for stored dialog x location.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 private static const String DIALOG_ORIGIN_X = "DIALOG_X_ORIGIN"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 * The dialog settings key name for stored dialog y location.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 private static const String DIALOG_ORIGIN_Y = "DIALOG_Y_ORIGIN"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 * The dialog settings key name for stored dialog width.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 private static const String DIALOG_WIDTH = "DIALOG_WIDTH"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 * The dialog settings key name for stored dialog height.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 private static const String DIALOG_HEIGHT = "DIALOG_HEIGHT"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * The dialog settings key name for the font used when the dialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * height and width was stored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 *@since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 private static const String DIALOG_FONT_DATA = "DIALOG_FONT_NAME"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * A value that can be used for stored dialog width or height that
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 * indicates that the default bounds should be used.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 public static const int DIALOG_DEFAULT_BOUNDS = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * Constants that can be used for specifying the strategy for persisting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * dialog bounds. These constants represent bit masks that can be used
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * together.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 *@since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 * Persist the last location of the dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 public static const int DIALOG_PERSISTLOCATION = 0x0001;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * Persist the last known size of the dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 public static const int DIALOG_PERSISTSIZE = 0x0002;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * The dialog area; <code>null</code> until dialog is layed out.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 protected Control dialogArea;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 * The button bar; <code>null</code> until dialog is layed out.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 public Control buttonBar;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * Collection of buttons created by the <code>createButton</code> method.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 private Button[int] buttons;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * Font metrics to use for determining pixel sizes.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 private FontMetrics fontMetrics;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * Number of horizontal dialog units per character, value <code>4</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 private static const int HORIZONTAL_DIALOG_UNIT_PER_CHAR = 4;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 * Number of vertical dialog units per character, value <code>8</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 private static const int VERTICAL_DIALOG_UNITS_PER_CHAR = 8;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * Returns the number of pixels corresponding to the height of the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * number of characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 * The required <code>FontMetrics</code> parameter may be created in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 * following way: <code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 * GC gc = new GC(control);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 * gc.setFont(control.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * fontMetrics = gc.getFontMetrics();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * </code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * @param fontMetrics
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * used in performing the conversion
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * @param chars
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * the number of characters
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 public static int convertHeightInCharsToPixels(FontMetrics fontMetrics,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 int chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 return fontMetrics.getHeight() * chars;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * Returns the number of pixels corresponding to the given number of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * horizontal dialog units.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * The required <code>FontMetrics</code> parameter may be created in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 * following way: <code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 * GC gc = new GC(control);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 * gc.setFont(control.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 * fontMetrics = gc.getFontMetrics();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * </code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 * @param fontMetrics
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 * used in performing the conversion
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 * @param dlus
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 * the number of horizontal dialog units
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 public static int convertHorizontalDLUsToPixels(FontMetrics fontMetrics,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 int dlus) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 // round to the nearest pixel
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 return (fontMetrics.getAverageCharWidth() * dlus + HORIZONTAL_DIALOG_UNIT_PER_CHAR / 2)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 / HORIZONTAL_DIALOG_UNIT_PER_CHAR;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * Returns the number of pixels corresponding to the given number of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * vertical dialog units.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 * The required <code>FontMetrics</code> parameter may be created in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * following way: <code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * GC gc = new GC(control);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * gc.setFont(control.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 * fontMetrics = gc.getFontMetrics();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 * </code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 * @param fontMetrics
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 * used in performing the conversion
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * @param dlus
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 * the number of vertical dialog units
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 public static int convertVerticalDLUsToPixels(FontMetrics fontMetrics,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 int dlus) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 // round to the nearest pixel
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 return (fontMetrics.getHeight() * dlus + VERTICAL_DIALOG_UNITS_PER_CHAR / 2)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 / VERTICAL_DIALOG_UNITS_PER_CHAR;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * Returns the number of pixels corresponding to the width of the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * number of characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * The required <code>FontMetrics</code> parameter may be created in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 * following way: <code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 * GC gc = new GC(control);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 * gc.setFont(control.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 * fontMetrics = gc.getFontMetrics();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * </code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * @param fontMetrics
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 * used in performing the conversion
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 * @param chars
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 * the number of characters
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 public static int convertWidthInCharsToPixels(FontMetrics fontMetrics,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 int chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 return fontMetrics.getAverageCharWidth() * chars;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 * Shortens the given text <code>textValue</code> so that its width in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * pixels does not exceed the width of the given control. Overrides
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 * characters in the center of the original string with an ellipsis ("...")
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 * if necessary. If a <code>null</code> value is given, <code>null</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 * is returned.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * @param textValue
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * the original string or <code>null</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * the control the string will be displayed on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * @return the string to display, or <code>null</code> if null was passed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 * @since 3.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 public static String shortenText(String textValue, Control control) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 if (textValue is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 GC gc = new GC(control);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 int maxWidth = control.getBounds().width - 5;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 int maxExtent = gc.textExtent(textValue).x;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 if (maxExtent < maxWidth) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 return textValue;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 int length = textValue.length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 int charsToClip = cast(int) Math.round(0.95f*length * (1 - (cast(float)maxWidth/maxExtent)));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 int pivot = length / 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 int start = pivot - (charsToClip/2);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 int end = pivot + (charsToClip/2) + 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 while (start >= 0 && end < length) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 String s1 = textValue.substring(0, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 String s2 = textValue.substring(end, length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 String s = s1 ~ ELLIPSIS ~ s2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 int l = gc.textExtent(s).x;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 if (l < maxWidth) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 return s;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 start--;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 end++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 return textValue;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 * Create a default instance of the blocked handler which does not do
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 * anything.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 */
82
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
387 private static IDialogBlockedHandler blockedHandler_;
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
388 public static IDialogBlockedHandler blockedHandler(){
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
389 static_this_blockedhandler();
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
390 return blockedHandler_;
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
391 }
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
392 public static IDialogBlockedHandler blockedHandler( IDialogBlockedHandler b ){
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
393 static_this_blockedhandler();
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
394 return ( blockedHandler_ = b );
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
395 }
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
396 private static bool static_this_blockedhandler_completed = false;
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
397 private static void static_this_blockedhandler(){
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
398 if( static_this_blockedhandler_completed ){
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
399 return;
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
400 }
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
401 synchronized{
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
402 if( static_this_blockedhandler_completed ){
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
403 return;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
82
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
405 blockedHandler_ = new class IDialogBlockedHandler {
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
406 /*
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
407 * (non-Javadoc)
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
408 *
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
409 * @see dwtx.jface.dialogs.IDialogBlockedHandler#clearBlocked()
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
410 */
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
411 public void clearBlocked() {
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
412 // No default behaviour
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
413 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414
82
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
415 /*
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
416 * (non-Javadoc)
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
417 *
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
418 * @see dwtx.jface.dialogs.IDialogBlockedHandler#showBlocked(dwtx.core.runtime.IProgressMonitor,
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
419 * dwtx.core.runtime.IStatus, java.lang.String)
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
420 */
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
421 public void showBlocked(IProgressMonitor blocking,
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
422 IStatus blockingStatus, String blockedName) {
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
423 // No default behaviour
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
424 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425
82
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
426 /*
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
427 * (non-Javadoc)
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
428 *
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
429 * @see dwtx.jface.dialogs.IDialogBlockedHandler#showBlocked(dwt.widgets.Shell,
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
430 * dwtx.core.runtime.IProgressMonitor,
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
431 * dwtx.core.runtime.IStatus, java.lang.String)
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
432 */
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
433 public void showBlocked(Shell parentShell, IProgressMonitor blocking,
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
434 IStatus blockingStatus, String blockedName) {
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
435 // No default behaviour
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
436 }
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
437 };
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
438 static_this_blockedhandler_completed = true;
0aafcf6e5217 Lazy initialization to fix cyclic dep. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
439 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * Creates a dialog instance. Note that the window will have no visual
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 * representation (no widgets) until it is told to open. By default,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 * <code>open</code> blocks for dialogs.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 * @param parentShell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 * the parent shell, or <code>null</code> to create a top-level
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 protected this(Shell parentShell) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 this(new SameShellProvider(parentShell));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 if (parentShell is null && Policy.DEBUG_DIALOG_NO_PARENT) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 Policy.getLog().log(
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 new Status(IStatus.INFO, Policy.JFACE, IStatus.INFO, this
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 .classinfo.name
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 ~ " created with no shell",//$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 new Exception( null, null )));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * Creates a dialog with the given parent.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * @param parentShell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * object that returns the current parent shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 * @since 3.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 protected this(IShellProvider parentShell) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 super(parentShell);
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
472 if (isResizable()) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
473 setShellStyle(DWT.DIALOG_TRIM | DWT.APPLICATION_MODAL | DWT.MAX | DWT.RESIZE
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
474 | getDefaultOrientation());
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
475 } else {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
476 setShellStyle(DWT.DIALOG_TRIM | DWT.APPLICATION_MODAL
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
477 | getDefaultOrientation());
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
478 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 setBlockOnOpen(true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * Notifies that this dialog's button with the given id has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 * The <code>Dialog</code> implementation of this framework method calls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * <code>okPressed</code> if the ok button is the pressed, and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 * <code>cancelPressed</code> if the cancel button is the pressed. All
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 * other button presses are ignored. Subclasses may override to handle other
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 * buttons, but should call <code>super.buttonPressed</code> if the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 * default handling of the ok and cancel buttons is desired.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 * @param buttonId
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 * the id of the button that was pressed (see
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 * <code>IDialogConstants.*_ID</code> constants)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 protected void buttonPressed(int buttonId) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 if (IDialogConstants.OK_ID is buttonId) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 okPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 } else if (IDialogConstants.CANCEL_ID is buttonId) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 cancelPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 * Notifies that the cancel button of this dialog has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * The <code>Dialog</code> implementation of this framework method sets
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * this dialog's return code to <code>Window.CANCEL</code> and closes the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 * dialog. Subclasses may override if desired.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 protected void cancelPressed() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 setReturnCode(CANCEL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 close();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 * Returns the number of pixels corresponding to the height of the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 * number of characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 * This method may only be called after <code>initializeDialogUnits</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 * has been called.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 * Clients may call this framework method, but should not override it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 * @param chars
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 * the number of characters
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 protected int convertHeightInCharsToPixels(int chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 // test for failure to initialize for backward compatibility
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 if (fontMetrics is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 return convertHeightInCharsToPixels(fontMetrics, chars);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 * Returns the number of pixels corresponding to the given number of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 * horizontal dialog units.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 * This method may only be called after <code>initializeDialogUnits</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 * has been called.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 * Clients may call this framework method, but should not override it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 * @param dlus
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 * the number of horizontal dialog units
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 protected int convertHorizontalDLUsToPixels(int dlus) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 // test for failure to initialize for backward compatibility
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 if (fontMetrics is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 return convertHorizontalDLUsToPixels(fontMetrics, dlus);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 * Returns the number of pixels corresponding to the given number of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * vertical dialog units.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 * This method may only be called after <code>initializeDialogUnits</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 * has been called.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 * Clients may call this framework method, but should not override it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 * @param dlus
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 * the number of vertical dialog units
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 protected int convertVerticalDLUsToPixels(int dlus) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 // test for failure to initialize for backward compatibility
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 if (fontMetrics is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 return convertVerticalDLUsToPixels(fontMetrics, dlus);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 * Returns the number of pixels corresponding to the width of the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 * number of characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 * This method may only be called after <code>initializeDialogUnits</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 * has been called.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 * Clients may call this framework method, but should not override it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 * @param chars
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 * the number of characters
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 * @return the number of pixels
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 protected int convertWidthInCharsToPixels(int chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 // test for failure to initialize for backward compatibility
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 if (fontMetrics is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 return convertWidthInCharsToPixels(fontMetrics, chars);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 * Creates a new button with the given id.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 * The <code>Dialog</code> implementation of this framework method creates
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 * a standard push button, registers it for selection events including
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 * button presses, and registers default buttons with its shell. The button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 * id is stored as the button's client data. If the button id is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 * <code>IDialogConstants.CANCEL_ID</code>, the new button will be
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 * accessible from <code>getCancelButton()</code>. If the button id is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 * <code>IDialogConstants.OK_ID</code>, the new button will be accesible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 * from <code>getOKButton()</code>. Note that the parent's layout is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 * assumed to be a <code>GridLayout</code> and the number of columns in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 * this layout is incremented. Subclasses may override.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 * the parent composite
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 * @param id
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 * the id of the button (see <code>IDialogConstants.*_ID</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 * constants for standard dialog button ids)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 * @param label
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 * the label from the button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 * @param defaultButton
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 * <code>true</code> if the button is to be the default button,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 * and <code>false</code> otherwise
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 * @return the new button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 * @see #getCancelButton
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 * @see #getOKButton()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 protected Button createButton(Composite parent, int id, String label,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 bool defaultButton) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 // increment the number of columns in the button bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 (cast(GridLayout) parent.getLayout()).numColumns++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 Button button = new Button(parent, DWT.PUSH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 button.setText(label);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 button.setFont(JFaceResources.getDialogFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 button.setData(new ValueWrapperInt(id));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 button.addSelectionListener(new class SelectionAdapter {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 public void widgetSelected(SelectionEvent event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 buttonPressed((cast(ValueWrapperInt) event.widget.getData()).value);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 });
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 if (defaultButton) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 Shell shell = parent.getShell();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 if (shell !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 shell.setDefaultButton(button);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 buttons[id] = button;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 setButtonLayoutData(button);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 return button;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 * Creates and returns the contents of this dialog's button bar.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 * The <code>Dialog</code> implementation of this framework method lays
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 * out a button bar and calls the <code>createButtonsForButtonBar</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 * framework method to populate it. Subclasses may override.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 * The returned control's layout data must be an instance of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 * <code>GridData</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 * the parent composite to contain the button bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 * @return the button bar control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 protected Control createButtonBar(Composite parent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 Composite composite = new Composite(parent, DWT.NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 // create a layout with spacing and margins appropriate for the font
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 // size.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 GridLayout layout = new GridLayout();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 layout.numColumns = 0; // this is incremented by createButton
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 layout.makeColumnsEqualWidth = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 composite.setLayout(layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 | GridData.VERTICAL_ALIGN_CENTER);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 composite.setLayoutData(data);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 composite.setFont(parent.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 // Add the buttons to the button bar.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 createButtonsForButtonBar(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 return composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 * Adds buttons to this dialog's button bar.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 * The <code>Dialog</code> implementation of this framework method adds
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 * standard ok and cancel buttons using the <code>createButton</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 * framework method. These standard buttons will be accessible from
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 * <code>getCancelButton</code>, and <code>getOKButton</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 * Subclasses may override.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 * the button bar composite
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 protected void createButtonsForButtonBar(Composite parent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 // create OK and Cancel buttons by default
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 createButton(parent, IDialogConstants.CANCEL_ID,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 IDialogConstants.CANCEL_LABEL, false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 * @see Window.initializeBounds()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 8
diff changeset
727 protected override void initializeBounds() {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 String platform = DWT.getPlatform();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 if ("carbon".equals(platform)) { //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 // On Mac OS X the default button must be the right-most button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 Shell shell = getShell();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 if (shell !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 Button defaultButton = shell.getDefaultButton();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 if (defaultButton !is null
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 && isContained(buttonBar, defaultButton)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 defaultButton.moveBelow(null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 super.initializeBounds();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 * Returns true if the given Control is a direct or indirect child of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 * container.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 * @param container
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 * the potential parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 * @return bool <code>true</code> if control is a child of container
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 private bool isContained(Control container, Control control) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 Composite parent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 while ((parent = control.getParent()) !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 if (parent is container) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 control = parent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 * The <code>Dialog</code> implementation of this <code>Window</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 * method creates and lays out the top level composite for the dialog, and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 * determines the appropriate horizontal and vertical dialog units based on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 * the font size. It then calls the <code>createDialogArea</code> and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 * <code>createButtonBar</code> methods to create the dialog area and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 * button bar, respectively. Overriding <code>createDialogArea</code> and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 * <code>createButtonBar</code> are recommended rather than overriding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 * this method.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 8
diff changeset
774 protected override Control createContents(Composite parent) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 // create the top level composite for the dialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 Composite composite = new Composite(parent, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 GridLayout layout = new GridLayout();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 layout.marginHeight = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 layout.marginWidth = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 layout.verticalSpacing = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 composite.setLayout(layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 applyDialogFont(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 // initialize the dialog units
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 initializeDialogUnits(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 // create the dialog area and button bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 dialogArea = createDialogArea(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 buttonBar = createButtonBar(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 return composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 * Creates and returns the contents of the upper part of this dialog (above
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * the button bar).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 * The <code>Dialog</code> implementation of this framework method creates
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 * and returns a new <code>Composite</code> with standard margins and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 * spacing.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * The returned control's layout data must be an instance of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * <code>GridData</code>. This method must not modify the parent's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 * layout.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * Subclasses must override this method but may call <code>super</code> as
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 * in the following example:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 * <pre>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 * Composite composite = (Composite) super.createDialogArea(parent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 * //add controls to composite as necessary
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 * return composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 * </pre>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 * the parent composite to contain the dialog area
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 * @return the dialog area control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 protected Control createDialogArea(Composite parent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 // create a composite with standard margins and spacing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 Composite composite = new Composite(parent, DWT.NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 GridLayout layout = new GridLayout();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 composite.setLayout(layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 applyDialogFont(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 return composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 * Returns the button created by the method <code>createButton</code> for
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 * the specified ID as defined on <code>IDialogConstants</code>. If
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 * <code>createButton</code> was never called with this ID, or if
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 * <code>createButton</code> is overridden, this method will return
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 * <code>null</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 * @param id
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 * the id of the button to look for
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 * @return the button for the ID or <code>null</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 * @see #createButton(Composite, int, String, bool)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 protected Button getButton(int id) {
60
f44bd8465f2f Fix Dialog.getButton
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
851 if( auto btn = id in buttons ){
f44bd8465f2f Fix Dialog.getButton
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
852 return *btn;
f44bd8465f2f Fix Dialog.getButton
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
853 }
f44bd8465f2f Fix Dialog.getButton
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
854 return null;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 * Returns the button bar control.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * Clients may call this framework method, but should not override it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * @return the button bar, or <code>null</code> if the button bar has not
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * been created yet
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 protected Control getButtonBar() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 return buttonBar;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 * Returns the button created when <code>createButton</code> is called
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 * with an ID of <code>IDialogConstants.CANCEL_ID</code>. If
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 * <code>createButton</code> was never called with this parameter, or if
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 * <code>createButton</code> is overridden, <code>getCancelButton</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 * will return <code>null</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 * @return the cancel button or <code>null</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 * @see #createButton(Composite, int, String, bool)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 * @deprecated Use <code>getButton(IDialogConstants.CANCEL_ID)</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 * instead. This method will be removed soon.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 protected Button getCancelButton() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 return getButton(IDialogConstants.CANCEL_ID);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 * Returns the dialog area control.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891 * Clients may call this framework method, but should not override it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 * @return the dialog area, or <code>null</code> if the dialog area has
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
895 * not been created yet
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 protected Control getDialogArea() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 return dialogArea;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 * Returns the standard dialog image with the given key. Note that these
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 * images are managed by the dialog framework, and must not be disposed by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 * another party.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 * @param key
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 * one of the <code>Dialog.DLG_IMG_* </code> constants
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 * @return the standard dialog image
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 * NOTE: Dialog does not use the following images in the registry
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 * DLG_IMG_ERROR DLG_IMG_INFO DLG_IMG_QUESTION DLG_IMG_WARNING
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913 * They are now coming directly from DWT, see ImageRegistry. For backwards
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 * compatibility they are still supported, however new code should use DWT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 * for these.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 * @see Display#getSystemImage(int)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 public static Image getImage(String key) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 return JFaceResources.getImageRegistry().get(key);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 * Returns the button created when <code>createButton</code> is called
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 * with an ID of <code>IDialogConstants.OK_ID</code>. If
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 * <code>createButton</code> was never called with this parameter, or if
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 * <code>createButton</code> is overridden, <code>getOKButton</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 * will return <code>null</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 * @return the OK button or <code>null</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 * @see #createButton(Composite, int, String, bool)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 * @deprecated Use <code>getButton(IDialogConstants.OK_ID)</code> instead.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 * This method will be removed soon.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 protected Button getOKButton() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 return getButton(IDialogConstants.OK_ID);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 * Initializes the computation of horizontal and vertical dialog units based
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 * on the size of current font.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 * This method must be called before any of the dialog unit based conversion
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 * methods are called.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 * a control from which to obtain the current font
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 protected void initializeDialogUnits(Control control) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 // Compute and store a font metric
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 GC gc = new GC(control);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 gc.setFont(JFaceResources.getDialogFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 fontMetrics = gc.getFontMetrics();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 gc.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 * Notifies that the ok button of this dialog has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 * The <code>Dialog</code> implementation of this framework method sets
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 * this dialog's return code to <code>Window.OK</code> and closes the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 * dialog. Subclasses may override.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 protected void okPressed() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 setReturnCode(OK);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 close();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 * Set the layout data of the button to a GridData with appropriate heights
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 * and widths.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 * @param button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 protected void setButtonLayoutData(Button button) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 Point minSize = button.computeSize(DWT.DEFAULT, DWT.DEFAULT, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 data.widthHint = Math.max(widthHint, minSize.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 button.setLayoutData(data);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
985 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
986
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988 * Set the layout data of the button to a FormData with appropriate heights
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989 * and widths.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
990 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
991 * @param button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 protected void setButtonLayoutFormData(Button button) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 FormData data = new FormData();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
995 int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
996 Point minSize = button.computeSize(DWT.DEFAULT, DWT.DEFAULT, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
997 data.width = Math.max(widthHint, minSize.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 button.setLayoutData(data);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 * @see dwtx.jface.window.Window#close()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 8
diff changeset
1004 public override bool close() {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 if (getShell() !is null && !getShell().isDisposed()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 saveDialogBounds(getShell());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 bool returnValue = super.close();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 if (returnValue) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 buttons = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012 buttonBar = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 dialogArea = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 return returnValue;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 * Applies the dialog font to all controls that currently have the default
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020 * font.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 * the control to apply the font to. Font will also be applied to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 * its children. If the control is <code>null</code> nothing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 * happens.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027 public static void applyDialogFont(Control control) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 if (control is null || dialogFontIsDefault()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1029 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1030 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1031 Font dialogFont = JFaceResources.getDialogFont();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 applyDialogFont(control, dialogFont);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035 /**
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1036 * Sets the dialog font on the control and any of its children if their font
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 * is not otherwise set.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 * the control to apply the font to. Font will also be applied to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 * its children.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 * @param dialogFont
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 * the dialog font to set
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1045 private static void applyDialogFont(Control control, Font dialogFont) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 if (hasDefaultFont(control)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 control.setFont(dialogFont);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 if ( auto comp = cast(Composite)control ) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1050 Control[] children = comp.getChildren();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1051 for (int i = 0; i < children.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1052 applyDialogFont(children[i], dialogFont);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1054 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058 * Return whether or not this control has the same font as it's default.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1059 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061 * Control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 * @return bool
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 private static bool hasDefaultFont(Control control) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 FontData[] controlFontData = control.getFont().getFontData();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 FontData[] defaultFontData = getDefaultFont(control).getFontData();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 if (controlFontData.length is defaultFontData.length) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 for (int i = 0; i < controlFontData.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 if (controlFontData[i].opEquals(defaultFontData[i])) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 continue;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1072 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1073 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1074 return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1075 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1079 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1080 * Get the default font for this type of control.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1082 * @param control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083 * @return the default font
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 private static Font getDefaultFont(Control control) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086 String fontName = "DEFAULT_FONT_" ~ control.classinfo.name; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 if (JFaceResources.getFontRegistry().hasValueFor(fontName)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088 return JFaceResources.getFontRegistry().get(fontName);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1089 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1090 Font cached = control.getFont();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 control.setFont(null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1092 Font defaultFont = control.getFont();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1093 control.setFont(cached);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1094 JFaceResources.getFontRegistry().put(fontName,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 defaultFont.getFontData());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096 return defaultFont;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 * Return whether or not the dialog font is currently the same as the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 * default font.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 * @return bool if the two are the same
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 protected static bool dialogFontIsDefault() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1106 FontData[] dialogFontData = JFaceResources.getFontRegistry()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 .getFontData(JFaceResources.DIALOG_FONT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 FontData[] defaultFontData = JFaceResources.getFontRegistry()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109 .getFontData(JFaceResources.DEFAULT_FONT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1110 return ArrayEquals(dialogFontData, defaultFontData);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1111 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1112
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1113 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1114 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1115 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1116 * @see dwtx.jface.window.Window#create()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1117 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 8
diff changeset
1118 public override void create() {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1119 super.create();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1120 applyDialogFont(buttonBar);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1121 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1123 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1124 * Get the IDialogBlockedHandler to be used by WizardDialogs and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1125 * ModalContexts.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1126 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1127 * @return Returns the blockedHandler.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1128 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1129 public static IDialogBlockedHandler getBlockedHandler() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 return blockedHandler;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1132
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1133 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1134 * Set the IDialogBlockedHandler to be used by WizardDialogs and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1135 * ModalContexts.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1136 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1137 * @param blockedHandler
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138 * The blockedHandler for the dialogs.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1139 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1140 public static void setBlockedHandler(IDialogBlockedHandler blockedHandler) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1141 Dialog.blockedHandler = blockedHandler;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1143
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1144 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1145 * Gets the dialog settings that should be used for remembering the bounds of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1146 * of the dialog, according to the dialog bounds strategy.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1147 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148 * @return settings the dialog settings used to store the dialog's location
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1149 * and/or size, or <code>null</code> if the dialog's bounds should
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1150 * never be stored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1151 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1152 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1153 * @see Dialog#getDialogBoundsStrategy()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1154 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1155 protected IDialogSettings getDialogBoundsSettings() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1156 return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1157 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1158
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1159 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1160 * Get the integer constant that describes the strategy for persisting the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1161 * dialog bounds. This strategy is ignored if the implementer does not also
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1162 * specify the dialog settings for storing the bounds in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1163 * Dialog.getDialogBoundsSettings().
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1164 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1165 * @return the constant describing the strategy for persisting the dialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1166 * bounds.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1167 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1168 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1169 * @see Dialog#DIALOG_PERSISTLOCATION
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 * @see Dialog#DIALOG_PERSISTSIZE
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 * @see Dialog#getDialogBoundsSettings()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1173 protected int getDialogBoundsStrategy() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1174 return DIALOG_PERSISTLOCATION | DIALOG_PERSISTSIZE;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1175 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1176
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1177 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1178 * Saves the bounds of the shell in the appropriate dialog settings. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1179 * bounds are recorded relative to the parent shell, if there is one, or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1180 * display coordinates if there is no parent shell.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1181 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1182 * @param shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1183 * The shell whose bounds are to be stored
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1184 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1185 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1186 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1187 private void saveDialogBounds(Shell shell) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1188 IDialogSettings settings = getDialogBoundsSettings();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1189 if (settings !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1190 Point shellLocation = shell.getLocation();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1191 Point shellSize = shell.getSize();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1192 Shell parent = getParentShell();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1193 if (parent !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1194 Point parentLocation = parent.getLocation();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1195 shellLocation.x -= parentLocation.x;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1196 shellLocation.y -= parentLocation.y;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1197 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1198 int strategy = getDialogBoundsStrategy();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1199 if ((strategy & DIALOG_PERSISTLOCATION) !is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1200 settings.put(DIALOG_ORIGIN_X, shellLocation.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1201 settings.put(DIALOG_ORIGIN_Y, shellLocation.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1202 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1203 if ((strategy & DIALOG_PERSISTSIZE) !is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1204 settings.put(DIALOG_WIDTH, shellSize.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1205 settings.put(DIALOG_HEIGHT, shellSize.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1206 FontData [] fontDatas = JFaceResources.getDialogFont().getFontData();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1207 if (fontDatas.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1208 settings.put(DIALOG_FONT_DATA, fontDatas[0].toString());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1209 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1210 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1211 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1212 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1213
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1214 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1215 * Returns the initial size to use for the shell. Overridden
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1216 * to check whether a size has been stored in dialog settings.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1217 * If a size has been stored, it is returned.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1218 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1219 * @return the initial size of the shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1220 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1221 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1222 * @see #getDialogBoundsSettings()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1223 * @see #getDialogBoundsStrategy()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1224 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 8
diff changeset
1225 protected override Point getInitialSize() {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1226 Point result = super.getInitialSize();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1227
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1228 // Check the dialog settings for a stored size.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1229 if ((getDialogBoundsStrategy() & DIALOG_PERSISTSIZE)!is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1230 IDialogSettings settings = getDialogBoundsSettings();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1231 if (settings !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1232 // Check that the dialog font matches the font used
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1233 // when the bounds was stored. If the font has changed,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1234 // we do not honor the stored settings.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1235 // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=132821
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1236 bool useStoredBounds = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1237 String previousDialogFontData = settings.get(DIALOG_FONT_DATA);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1238 // There is a previously stored font, so we will check it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1239 // Note that if we haven't stored the font before, then we will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1240 // use the stored bounds. This allows restoring of dialog bounds
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1241 // that were stored before we started storing the fontdata.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1242 if (previousDialogFontData !is null && previousDialogFontData.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1243 FontData [] fontDatas = JFaceResources.getDialogFont().getFontData();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1244 if (fontDatas.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1245 String currentDialogFontData = fontDatas[0].toString();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1246 useStoredBounds = currentDialogFontData.equalsIgnoreCase(previousDialogFontData);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1247 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1248 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1249 if (useStoredBounds) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1250 try {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1251 // Get the stored width and height.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1252 int width = settings.getInt(DIALOG_WIDTH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1253 if (width !is DIALOG_DEFAULT_BOUNDS) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1254 result.x = width;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1255 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1256 int height = settings.getInt(DIALOG_HEIGHT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1257 if (height !is DIALOG_DEFAULT_BOUNDS) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1258 result.y = height;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1259 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1260
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1261 } catch (NumberFormatException e) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1262 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1263 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1264 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1265 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1266 // No attempt is made to constrain the bounds. The default
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1267 // constraining behavior in Window will be used.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1268 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1269 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1270
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1271 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1272 * Returns the initial location to use for the shell. Overridden
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1273 * to check whether the bounds of the dialog have been stored in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1274 * dialog settings. If a location has been stored, it is returned.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1275 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1276 * @param initialSize
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1277 * the initial size of the shell, as returned by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1278 * <code>getInitialSize</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1279 * @return the initial location of the shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1280 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1281 * @since 3.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1282 * @see #getDialogBoundsSettings()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1283 * @see #getDialogBoundsStrategy()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1284 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 8
diff changeset
1285 protected override Point getInitialLocation(Point initialSize) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1286 Point result = super.getInitialLocation(initialSize);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1287 if ((getDialogBoundsStrategy() & DIALOG_PERSISTLOCATION)!is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1288 IDialogSettings settings = getDialogBoundsSettings();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1289 if (settings !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1290 try {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1291 int x = settings.getInt(DIALOG_ORIGIN_X);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1292 int y = settings.getInt(DIALOG_ORIGIN_Y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1293 result = new Point(x, y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1294 // The coordinates were stored relative to the parent shell.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1295 // Convert to display coordinates.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1296 Shell parent = getParentShell();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1297 if (parent !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1298 Point parentLocation = parent.getLocation();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1299 result.x += parentLocation.x;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1300 result.y += parentLocation.y;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1301 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1302 } catch (NumberFormatException e) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1303 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1304 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1305 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1306 // No attempt is made to constrain the bounds. The default
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1307 // constraining behavior in Window will be used.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1308 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1309 }
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1310
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1311 /**
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1312 * Returns a bool indicating whether the dialog should be
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1313 * considered resizable when the shell style is initially
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1314 * set.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1315 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1316 * This method is used to ensure that all style
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1317 * bits appropriate for resizable dialogs are added to the
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1318 * shell style. Individual dialogs may always set the shell
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1319 * style to ensure that a dialog is resizable, but using this
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1320 * method ensures that resizable dialogs will be created with
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1321 * the same set of style bits.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1322 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1323 * Style bits will never be removed based on the return value
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1324 * of this method. For example, if a dialog returns
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1325 * <code>false</code>, but also sets a style bit for a
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1326 * DWT.RESIZE border, the style bit will be honored.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1327 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1328 * @return a bool indicating whether the dialog is
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1329 * resizable and should have the default style bits for
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1330 * resizable dialogs
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1331 *
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1332 * @since 3.4
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1333 */
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1334 protected bool isResizable() {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1335 return false;
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1336 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1337 }