annotate dwtx/jface/dialogs/Dialog.d @ 60:f44bd8465f2f

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