annotate dwtx/jface/wizard/WizardDialog.d @ 192:c3583c6ec027

Added missing default cases for switch statements
author Frank Benoit <benoit@tionex.de>
date Mon, 03 Nov 2008 22:52:26 +0100
parents c36336245fb1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Chris Gross (schtoo@schtoo.com) - patch for bug 16179
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Port to the D programming language:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 * Frank Benoit <benoit@tionex.de>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 *******************************************************************************/
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 module dwtx.jface.wizard.WizardDialog;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
16 import dwtx.jface.wizard.IWizardContainer2;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
17 import dwtx.jface.wizard.IWizard;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
18 import dwtx.jface.wizard.IWizardPage;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
19 import dwtx.jface.wizard.ProgressMonitorPart;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
21 // import java.lang.reflect.InvocationTargetException;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
22 // import java.util.HashMap;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
23 // import java.util.Map;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.DWT;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.custom.BusyIndicator;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.events.HelpEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.events.HelpListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.events.SelectionAdapter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.events.SelectionEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.graphics.Cursor;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.graphics.Point;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.graphics.Rectangle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.layout.GridData;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.layout.GridLayout;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwt.widgets.Button;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwt.widgets.Composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 import dwt.widgets.Control;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 import dwt.widgets.Display;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 import dwt.widgets.Label;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 import dwt.widgets.Layout;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwt.widgets.Shell;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 import dwtx.core.runtime.Assert;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 import dwtx.core.runtime.IProgressMonitor;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 import dwtx.core.runtime.IStatus;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 import dwtx.core.runtime.ListenerList;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 import dwtx.jface.dialogs.ControlEnableState;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 import dwtx.jface.dialogs.IDialogConstants;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 import dwtx.jface.dialogs.IMessageProvider;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 import dwtx.jface.dialogs.IPageChangeProvider;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 import dwtx.jface.dialogs.IPageChangedListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 import dwtx.jface.dialogs.IPageChangingListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 import dwtx.jface.dialogs.MessageDialog;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 import dwtx.jface.dialogs.PageChangedEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 import dwtx.jface.dialogs.PageChangingEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 import dwtx.jface.dialogs.TitleAreaDialog;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 import dwtx.jface.operation.IRunnableWithProgress;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 import dwtx.jface.operation.ModalContext;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 import dwtx.jface.resource.JFaceResources;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 import dwtx.jface.util.SafeRunnable;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
62 import dwt.dwthelper.utils;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
63 import dwtx.dwtxhelper.Collection;
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
64 import dwt.dwthelper.Runnable;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
65
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * A dialog to show a wizard to the end user.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * In typical usage, the client instantiates this class with a particular
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * wizard. The dialog serves as the wizard container and orchestrates the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * presentation of its pages.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * The standard layout is roughly as follows: it has an area at the top
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * containing both the wizard's title, description, and image; the actual wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * page appears in the middle; below that is a progress indicator (which is made
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * visible if needed); and at the bottom of the page is message line and a
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * button bar containing Help, Next, Back, Finish, and Cancel buttons (or some
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * subset).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * Clients may subclass <code>WizardDialog</code>, although this is rarely
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * required.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
85 public class WizardDialog : TitleAreaDialog, IWizardContainer2,
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 IPageChangeProvider {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * Image registry key for error message image (value
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * <code>"dialog_title_error_image"</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
91 public static const String WIZ_IMG_ERROR = "dialog_title_error_image"; //$NON-NLS-1$
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 // The wizard the dialog is currently showing.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 private IWizard wizard;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 // Wizards to dispose
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
97 private ArrayList createdWizards;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 // Current nested wizards
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
100 private ArrayList nestedWizards;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 // The currently displayed page.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 private IWizardPage currentPage = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 // The number of long running operation executed from the dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 private long activeRunningOperations = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 // The current page message and description
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 private String pageMessage;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 private int pageMessageType = IMessageProvider.NONE;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 private String pageDescription;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 // The progress monitor
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 private ProgressMonitorPart progressMonitorPart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 private Cursor waitCursor;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 private Cursor arrowCursor;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 private MessageDialog windowClosingDialog;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 // Navigation buttons
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 private Button backButton;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 private Button nextButton;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 private Button finishButton;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 private Button cancelButton;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 private Button helpButton;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 private SelectionAdapter cancelListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 private bool isMovingToPreviousPage = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 private Composite pageContainer;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
141 private PageContainerFillLayout pageContainerLayout;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 private int pageWidth = DWT.DEFAULT;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 private int pageHeight = DWT.DEFAULT;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
147 private static const String FOCUS_CONTROL = "focusControl"; //$NON-NLS-1$
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 private bool lockedUI = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
151 private ListenerList pageChangedListeners;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
153 private ListenerList pageChangingListeners;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 * A layout for a container which includes several pages, like a notebook,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 * wizard, or preference dialog. The size computed by this layout is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 * maximum width and height of all pages currently inserted into the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 * container.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
161 protected class PageContainerFillLayout : Layout {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 * The margin width; <code>5</code> pixels by default.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 public int marginWidth = 5;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * The margin height; <code>5</code> pixels by default.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 public int marginHeight = 5;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * The minimum width; <code>0</code> pixels by default.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 public int minimumWidth = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 * The minimum height; <code>0</code> pixels by default.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 public int minimumHeight = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * Creates new layout object.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * @param mw
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 * the margin width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * @param mh
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * the margin height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 * @param minW
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 * the minimum width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 * @param minH
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * the minimum height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
194 public this(int mw, int mh, int minW, int minH) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 marginWidth = mw;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 marginHeight = mh;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 minimumWidth = minW;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 minimumHeight = minH;
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 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * (non-Javadoc) Method declared on Layout.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
204 public override Point computeSize(Composite composite, int wHint, int hHint,
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 bool force) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 if (wHint !is DWT.DEFAULT && hHint !is DWT.DEFAULT) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 return new Point(wHint, hHint);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 Point result = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 Control[] children = composite.getChildren();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 if (children.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 result = new Point(0, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 for (int i = 0; i < children.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 Point cp = children[i].computeSize(wHint, hHint, force);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 result.x = Math.max(result.x, cp.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 result.y = Math.max(result.y, cp.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 result.x = result.x + 2 * marginWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 result.y = result.y + 2 * marginHeight;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 Rectangle rect = composite.getClientArea();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 result = new Point(rect.width, rect.height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 result.x = Math.max(result.x, minimumWidth);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 result.y = Math.max(result.y, minimumHeight);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 if (wHint !is DWT.DEFAULT) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 result.x = wHint;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 if (hHint !is DWT.DEFAULT) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 result.y = hHint;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 * Returns the client area for the given composite according to this
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 * layout.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * @param c
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * the composite
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * @return the client area rectangle
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 public Rectangle getClientArea(Composite c) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 Rectangle rect = c.getClientArea();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 rect.x = rect.x + marginWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 rect.y = rect.y + marginHeight;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 rect.width = rect.width - 2 * marginWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 rect.height = rect.height - 2 * marginHeight;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 return rect;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * (non-Javadoc) Method declared on Layout.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
255 public override void layout(Composite composite, bool force) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 Rectangle rect = getClientArea(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 Control[] children = composite.getChildren();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 for (int i = 0; i < children.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 children[i].setBounds(rect);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 * Lays outs the page according to this layout.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * @param w
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * the control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 public void layoutPage(Control w) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 w.setBounds(getClientArea(w.getParent()));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * Sets the location of the page so that its origin is in the upper left
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * corner.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * @param w
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * the control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 public void setPageLocation(Control w) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 w.setLocation(marginWidth, marginHeight);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * Creates a new wizard dialog for the given wizard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * @param parentShell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * the parent shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * @param newWizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 * the wizard this dialog is working on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
293 public this(Shell parentShell, IWizard newWizard) {
118
a521c486e142 Fix: member variable initialized in wrong place
Frank Benoit <benoit@tionex.de>
parents: 104
diff changeset
294 pageContainerLayout = new PageContainerFillLayout( 5, 5, 300, 225);
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
295 createdWizards = new ArrayList();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
296 nestedWizards = new ArrayList();
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
297 pageChangedListeners = new ListenerList();
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
298 pageChangingListeners = new ListenerList();
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
299
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 super(parentShell);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 setShellStyle(DWT.CLOSE | DWT.MAX | DWT.TITLE | DWT.BORDER
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 | DWT.APPLICATION_MODAL | DWT.RESIZE | getDefaultOrientation());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 setWizard(newWizard);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 // since VAJava can't initialize an instance var with an anonymous
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 // class outside a constructor we do it here:
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
306 cancelListener = new class SelectionAdapter {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 public void widgetSelected(SelectionEvent e) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 cancelPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 };
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * About to start a long running operation triggered through the wizard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 * Shows the progress monitor and disables the wizard's buttons and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 * controls.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 * @param enableCancelButton
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * <code>true</code> if the Cancel button should be enabled,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * and <code>false</code> if it should be disabled
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * @return the saved UI state
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 private Object aboutToStart(bool enableCancelButton) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
324 Map savedState = null;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 if (getShell() !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 // Save focus control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 Control focusControl = getShell().getDisplay().getFocusControl();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 if (focusControl !is null && focusControl.getShell() !is getShell()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 focusControl = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 bool needsProgressMonitor = wizard.needsProgressMonitor();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 cancelButton.removeSelectionListener(cancelListener);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 // Set the busy cursor to all shells.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 Display d = getShell().getDisplay();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 waitCursor = new Cursor(d, DWT.CURSOR_WAIT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 setDisplayCursor(waitCursor);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 // Set the arrow cursor to the cancel component.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 arrowCursor = new Cursor(d, DWT.CURSOR_ARROW);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 cancelButton.setCursor(arrowCursor);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 // Deactivate shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 savedState = saveUIState(needsProgressMonitor && enableCancelButton);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 if (focusControl !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
343 savedState.put(stringcast(FOCUS_CONTROL), focusControl);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 // Attach the progress monitor part to the cancel button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 if (needsProgressMonitor) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 progressMonitorPart.attachToCancelComponent(cancelButton);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 progressMonitorPart.setVisible(true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 }
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
351 return cast(Object) savedState;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 * The Back button has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 protected void backPressed() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 IWizardPage page = currentPage.getPreviousPage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 if (page is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 // should never happen since we have already visited the page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 // set flag to indicate that we are moving back
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 isMovingToPreviousPage = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 // show the page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 showPage(page);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * (non-Javadoc) Method declared on Dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
373 protected override void buttonPressed(int buttonId) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 switch (buttonId) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 case IDialogConstants.HELP_ID: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 helpPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 case IDialogConstants.BACK_ID: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 backPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 case IDialogConstants.NEXT_ID: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 nextPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 case IDialogConstants.FINISH_ID: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 finishPressed();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 // The Cancel button has a listener which calls cancelPressed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 // directly
192
c3583c6ec027 Added missing default cases for switch statements
Frank Benoit <benoit@tionex.de>
parents: 183
diff changeset
393 default:
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 }
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 * Calculates the difference in size between the given page and the page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 * container. A larger page results in a positive delta.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 * @param page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 * the page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * @return the size difference encoded as a
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 * <code>new Point(deltaWidth,deltaHeight)</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 private Point calculatePageSizeDelta(IWizardPage page) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 Control pageControl = page.getControl();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 if (pageControl is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 // control not created yet
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 return new Point(0, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 Point contentSize = pageControl.computeSize(DWT.DEFAULT, DWT.DEFAULT,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 Rectangle rect = pageContainerLayout.getClientArea(pageContainer);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 Point containerSize = new Point(rect.width, rect.height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 return new Point(Math.max(0, contentSize.x - containerSize.x), Math
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 .max(0, contentSize.y - containerSize.y));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 }
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 * (non-Javadoc) Method declared on Dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
423 protected override void cancelPressed() {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 if (activeRunningOperations <= 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 // Close the dialog. The check whether the dialog can be
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 // closed or not is done in <code>okToClose</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 // This ensures that the check is also evaluated when the user
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 // presses the window's close button.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 setReturnCode(CANCEL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 close();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 cancelButton.setEnabled(false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * @see dwtx.jface.window.Window#close()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
441 public override bool close() {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 if (okToClose()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 return hardClose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * (non-Javadoc) Method declared on Window.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
451 protected override void configureShell(Shell newShell) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 super.configureShell(newShell);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 // Register help listener on the shell
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
454 newShell.addHelpListener(new class HelpListener {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 public void helpRequested(HelpEvent event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 // call perform help on the current page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 if (currentPage !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 currentPage.performHelp();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 });
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * Creates the buttons for this dialog's button bar.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 * The <code>WizardDialog</code> implementation of this framework method
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 * prevents the parent composite's columns from being made equal width in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 * order to remove the margin between the Back and Next buttons.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 * the parent composite to contain the buttons
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
475 protected override void createButtonsForButtonBar(Composite parent) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
476 (cast(GridLayout) parent.getLayout()).makeColumnsEqualWidth = false;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 if (wizard.isHelpAvailable()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 helpButton = createButton(parent, IDialogConstants.HELP_ID,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 IDialogConstants.HELP_LABEL, false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 if (wizard.needsPreviousAndNextButtons()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 createPreviousAndNextButtons(parent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 finishButton = createButton(parent, IDialogConstants.FINISH_ID,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 IDialogConstants.FINISH_LABEL, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 cancelButton = createCancelButton(parent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 * @see dwtx.jface.dialogs.Dialog#setButtonLayoutData(dwt.widgets.Button)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
494 protected override void setButtonLayoutData(Button button) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 // On large fonts this can make this dialog huge
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 widthHint = Math.min(widthHint,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 button.getDisplay().getBounds().width / 5);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 Point minSize = button.computeSize(DWT.DEFAULT, DWT.DEFAULT, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 data.widthHint = Math.max(widthHint, minSize.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 button.setLayoutData(data);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * Creates the Cancel button for this wizard dialog. Creates a standard (<code>DWT.PUSH</code>)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * button and registers for its selection events. Note that the number of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 * columns in the button bar composite is incremented. The Cancel button is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 * created specially to give it a removeable listener.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 * the parent button bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 * @return the new Cancel button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 private Button createCancelButton(Composite parent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 // increment the number of columns in the button bar
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
519 (cast(GridLayout) parent.getLayout()).numColumns++;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 Button button = new Button(parent, DWT.PUSH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 button.setText(IDialogConstants.CANCEL_LABEL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 setButtonLayoutData(button);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 button.setFont(parent.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 button.setData(new Integer(IDialogConstants.CANCEL_ID));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 button.addSelectionListener(cancelListener);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 return button;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 * Return the cancel button if the id is a the cancel id.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * @param id
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * the button id
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 * @return the button corresponding to the button id
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
536 protected override Button getButton(int id) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 if (id is IDialogConstants.CANCEL_ID) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 return cancelButton;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 return super.getButton(id);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 * The <code>WizardDialog</code> implementation of this
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 * <code>Window</code> method calls call <code>IWizard.addPages</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 * to allow the current wizard to add extra pages, then
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 * <code>super.createContents</code> to create the controls. It then calls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 * <code>IWizard.createPageControls</code> to allow the wizard to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 * pre-create their page controls prior to opening, so that the wizard opens
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 * to the correct size. And finally it shows the first page.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
552 protected override Control createContents(Composite parent) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 // Allow the wizard to add pages to itself
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 // Need to call this now so page count is correct
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 // for determining if next/previous buttons are needed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 wizard.addPages();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 Control contents = super.createContents(parent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 // Allow the wizard pages to precreate their page controls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 createPageControls();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 // Show the first page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 showStartingPage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 return contents;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * (non-Javadoc) Method declared on Dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
568 protected override Control createDialogArea(Composite parent) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
569 Composite composite = cast(Composite) super.createDialogArea(parent);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 // Build the Page container
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 pageContainer = createPageContainer(composite);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 GridData gd = new GridData(GridData.FILL_BOTH);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 gd.widthHint = pageWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 gd.heightHint = pageHeight;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 pageContainer.setLayoutData(gd);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 pageContainer.setFont(parent.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 // Insert a progress monitor
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 GridLayout pmlayout = new GridLayout();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 pmlayout.numColumns = 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 progressMonitorPart = createProgressMonitorPart(composite, pmlayout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 progressMonitorPart.setLayoutData(gridData);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 progressMonitorPart.setVisible(false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 // Build the separator line
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 Label separator = new Label(composite, DWT.HORIZONTAL | DWT.SEPARATOR);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 applyDialogFont(progressMonitorPart);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 return composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 * Create the progress monitor part in the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 * @param composite
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 * @param pmlayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 * @return ProgressMonitorPart
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 protected ProgressMonitorPart createProgressMonitorPart(
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 Composite composite, GridLayout pmlayout) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
601 return new class(composite, pmlayout, DWT.DEFAULT) ProgressMonitorPart {
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
602
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 String currentTask = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
605 this(Composite c, Layout l, int s ){
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
606 super(c,l,s);
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
607 }
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
608
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 * @see dwtx.jface.wizard.ProgressMonitorPart#setBlocked(dwtx.core.runtime.IStatus)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 public void setBlocked(IStatus reason) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 super.setBlocked(reason);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 if (!lockedUI) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 getBlockedHandler().showBlocked(getShell(), this, reason,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 currentTask);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 * @see dwtx.jface.wizard.ProgressMonitorPart#clearBlocked()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 public void clearBlocked() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 super.clearBlocked();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 if (!lockedUI) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 getBlockedHandler().clearBlocked();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 * @see dwtx.jface.wizard.ProgressMonitorPart#beginTask(java.lang.String,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 * int)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 public void beginTask(String name, int totalWork) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 super.beginTask(name, totalWork);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 currentTask = name;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 * @see dwtx.jface.wizard.ProgressMonitorPart#setTaskName(java.lang.String)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 public void setTaskName(String name) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 super.setTaskName(name);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 currentTask = name;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 * @see dwtx.jface.wizard.ProgressMonitorPart#subTask(java.lang.String)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 public void subTask(String name) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 super.subTask(name);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 // If we haven't got anything yet use this value for more
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 // context
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 if (currentTask is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 currentTask = name;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 };
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 * Creates the container that holds all pages.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * @return Composite
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 private Composite createPageContainer(Composite parent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 Composite result = new Composite(parent, DWT.NULL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 result.setLayout(pageContainerLayout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 * Allow the wizard's pages to pre-create their page controls. This allows
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 * the wizard dialog to open to the correct size.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 private void createPageControls() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 // Allow the wizard pages to precreate their page controls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 // This allows the wizard to open to the correct size
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 wizard.createPageControls(pageContainer);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 // Ensure that all of the created pages are initially not visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 IWizardPage[] pages = wizard.getPages();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 for (int i = 0; i < pages.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 IWizardPage page = pages[i];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 if (page.getControl() !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 page.getControl().setVisible(false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 }
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 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 * Creates the Previous and Next buttons for this wizard dialog. Creates
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 * standard (<code>DWT.PUSH</code>) buttons and registers for their
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 * selection events. Note that the number of columns in the button bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 * composite is incremented. These buttons are created specially to prevent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 * any space between them.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 * @param parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 * the parent button bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 * @return a composite containing the new buttons
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 private Composite createPreviousAndNextButtons(Composite parent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 // increment the number of columns in the button bar
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
714 (cast(GridLayout) parent.getLayout()).numColumns++;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 Composite composite = new Composite(parent, DWT.NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 // create a layout with spacing and margins appropriate for the font
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 // size.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 GridLayout layout = new GridLayout();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 layout.numColumns = 0; // will be incremented by createButton
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 layout.marginWidth = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 layout.marginHeight = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 layout.horizontalSpacing = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 layout.verticalSpacing = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 composite.setLayout(layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_CENTER
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 | GridData.VERTICAL_ALIGN_CENTER);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 composite.setLayoutData(data);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 composite.setFont(parent.getFont());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 backButton = createButton(composite, IDialogConstants.BACK_ID,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 IDialogConstants.BACK_LABEL, false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 nextButton = createButton(composite, IDialogConstants.NEXT_ID,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 IDialogConstants.NEXT_LABEL, false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 return composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 * Creates and return a new wizard closing dialog without openiong it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 * @return MessageDalog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 private MessageDialog createWizardClosingDialog() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 MessageDialog result = new MessageDialog(getShell(),
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 JFaceResources.getString("WizardClosingDialog.title"), //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 null,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 JFaceResources.getString("WizardClosingDialog.message"), //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 MessageDialog.QUESTION,
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
747 [ IDialogConstants.OK_LABEL ], 0);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 * The Finish button has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 protected void finishPressed() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 // Wizards are added to the nested wizards list in setWizard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 // This means that the current wizard is always the last wizard in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 // list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 // Note that we first call the current wizard directly (to give it a
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 // chance to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 // abort, do work, and save state) then call the remaining n-1 wizards
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 // in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 // list (to save state).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 if (wizard.performFinish()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 // Call perform finish on outer wizards in the nested chain
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 // (to allow them to save state for example)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 for (int i = 0; i < nestedWizards.size() - 1; i++) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
767 (cast(IWizard) nestedWizards.get(i)).performFinish();
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 // Hard close the dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 setReturnCode(OK);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 hardClose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 * (non-Javadoc) Method declared on IWizardContainer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 public IWizardPage getCurrentPage() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 return currentPage;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 * Returns the progress monitor for this wizard dialog (if it has one).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 * @return the progress monitor, or <code>null</code> if this wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 * dialog does not have one
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 protected IProgressMonitor getProgressMonitor() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 return progressMonitorPart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 * Returns the wizard this dialog is currently displaying.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * @return the current wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 protected IWizard getWizard() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 return wizard;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * Closes this window.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 * @return <code>true</code> if the window is (or was already) closed, and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * <code>false</code> if it is still open
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 private bool hardClose() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 // inform wizards
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 for (int i = 0; i < createdWizards.size(); i++) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
810 IWizard createdWizard = cast(IWizard) createdWizards.get(i);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 createdWizard.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 // Remove this dialog as a parent from the managed wizard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 // Note that we do this after calling dispose as the wizard or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 // its pages may need access to the container during
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 // dispose code
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 createdWizard.setContainer(null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 return super.close();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 * The Help button has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 protected void helpPressed() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 if (currentPage !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 currentPage.performHelp();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 * The Next button has been pressed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 protected void nextPressed() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 IWizardPage page = currentPage.getNextPage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 if (page is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 // something must have happend getting the next page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 // show the next page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 showPage(page);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 * Notifies page changing listeners and returns result of page changing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 * processing to the sender.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 * @param eventType
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 * @return <code>true</code> if page changing listener completes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 * successfully, <code>false</code> otherwise
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 private bool doPageChanging(IWizardPage targetPage) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
853 PageChangingEvent e = new PageChangingEvent(this, cast(Object)getCurrentPage(),
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
854 cast(Object)targetPage);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 firePageChanging(e);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856 // Prevent navigation if necessary
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 return e.doit;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 * Checks whether it is alright to close this wizard dialog and performed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 * standard cancel processing. If there is a long running operation in
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * progress, this method posts an alert message saying that the wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * cannot be closed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 * @return <code>true</code> if it is alright to close this dialog, and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 * <code>false</code> if it is not
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 private bool okToClose() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 if (activeRunningOperations > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 synchronized (this) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 windowClosingDialog = createWizardClosingDialog();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 windowClosingDialog.open();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 synchronized (this) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 windowClosingDialog = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 return wizard.performCancel();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 * Restores the enabled/disabled state of the given control.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 * @param w
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887 * the control
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 * @param h
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 * the map (key type: <code>String</code>, element type:
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
890 * <code>Boolean</code>)
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891 * @param key
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 * the key
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 * @see #saveEnableStateAndSet
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
895 private void restoreEnableState(Control w, Map h, String key) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 if (w !is null) {
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
897 Boolean b = cast(Boolean) h.get(stringcast(key));
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 if (b !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 w.setEnabled(b.booleanValue());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 * Restores the enabled/disabled state of the wizard dialog's buttons and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 * the tree of controls for the currently showing page.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 * @param state
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 * a map containing the saved state as returned by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 * <code>saveUIState</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 * @see #saveUIState
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
913 private void restoreUIState(Map state) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 restoreEnableState(backButton, state, "back"); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 restoreEnableState(nextButton, state, "next"); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 restoreEnableState(finishButton, state, "finish"); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 restoreEnableState(cancelButton, state, "cancel"); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 restoreEnableState(helpButton, state, "help"); //$NON-NLS-1$
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
919 Object pageValue = state.get(stringcast("page")); //$NON-NLS-1$
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 if (pageValue !is null) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
921 (cast(ControlEnableState) pageValue).restore();
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 * This implementation of IRunnableContext#run(bool, bool,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 * IRunnableWithProgress) blocks until the runnable has been run, regardless
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 * of the value of <code>fork</code>. It is recommended that
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 * <code>fork</code> is set to true in most cases. If <code>fork</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 * is set to <code>false</code>, the runnable will run in the UI thread
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 * and it is the runnable's responsibility to call
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 * <code>Display.readAndDispatch()</code> to ensure UI responsiveness.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 * UI state is saved prior to executing the long-running operation and is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 * restored after the long-running operation completes executing. Any
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 * attempt to change the UI state of the wizard in the long-running
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 * operation will be nullified when original UI state is restored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 public void run(bool fork, bool cancelable,
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
941 IRunnableWithProgress runnable) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 // The operation can only be canceled if it is executed in a separate
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 // thread.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 // Otherwise the UI is blocked anyway.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 Object state = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 if (activeRunningOperations is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 state = aboutToStart(fork && cancelable);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 activeRunningOperations++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 try {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951 if (!fork) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 lockedUI = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 ModalContext.run(runnable, fork, getProgressMonitor(), getShell()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 .getDisplay());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 lockedUI = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 } finally {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 activeRunningOperations--;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 // Stop if this is the last one
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 if (state !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 stopped(state);
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 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 * Saves the enabled/disabled state of the given control in the given map,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 * which must be modifiable.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 * @param w
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 * the control, or <code>null</code> if none
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 * @param h
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 * the map (key type: <code>String</code>, element type:
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
974 * <code>Boolean</code>)
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 * @param key
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 * the key
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 * @param enabled
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 * <code>true</code> to enable the control, and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 * <code>false</code> to disable it
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 * @see #restoreEnableState(Control, Map, String)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
982 private void saveEnableStateAndSet(Control w, Map h, String key,
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 bool enabled) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 if (w !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
985 h.put(stringcast(key), w.getEnabled() ? Boolean.TRUE : Boolean.FALSE);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
986 w.setEnabled(enabled);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
990 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
991 * Captures and returns the enabled/disabled state of the wizard dialog's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 * buttons and the tree of controls for the currently showing page. All
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 * these controls are disabled in the process, with the possible exception
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 * of the Cancel button.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
995 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
996 * @param keepCancelEnabled
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
997 * <code>true</code> if the Cancel button should remain
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 * enabled, and <code>false</code> if it should be disabled
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 * @return a map containing the saved state suitable for restoring later
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 * with <code>restoreUIState</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 * @see #restoreUIState
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1003 private Map saveUIState(bool keepCancelEnabled) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1004 Map savedState = new HashMap(10);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 saveEnableStateAndSet(backButton, savedState, "back", false); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 saveEnableStateAndSet(nextButton, savedState, "next", false); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 saveEnableStateAndSet(finishButton, savedState, "finish", false); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008 saveEnableStateAndSet(cancelButton, savedState,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 "cancel", keepCancelEnabled); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 saveEnableStateAndSet(helpButton, savedState, "help", false); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 if (currentPage !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1012 savedState.put(stringcast("page"), ControlEnableState.disable(currentPage.getControl())); //$NON-NLS-1$
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 return savedState;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 * Sets the given cursor for all shells currently active for this window's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 * display.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 * @param c
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022 * the cursor
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 private void setDisplayCursor(Cursor c) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 Shell[] shells = getShell().getDisplay().getShells();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 for (int i = 0; i < shells.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027 shells[i].setCursor(c);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 }
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 * Sets the minimum page size used for the pages.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 * @param minWidth
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035 * the minimum page width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1036 * @param minHeight
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 * the minimum page height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 * @see #setMinimumPageSize(Point)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 public void setMinimumPageSize(int minWidth, int minHeight) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 Assert.isTrue(minWidth >= 0 && minHeight >= 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 pageContainerLayout.minimumWidth = minWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 pageContainerLayout.minimumHeight = minHeight;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1045
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 * Sets the minimum page size used for the pages.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 * @param size
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1050 * the page size encoded as <code>new Point(width,height)</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1051 * @see #setMinimumPageSize(int,int)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1052 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 public void setMinimumPageSize(Point size) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1054 setMinimumPageSize(size.x, size.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058 * Sets the size of all pages. The given size takes precedence over computed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1059 * sizes.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061 * @param width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 * the page width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 * @param height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 * the page height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 * @see #setPageSize(Point)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 public void setPageSize(int width, int height) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 pageWidth = width;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 pageHeight = height;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1072 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1073 * Sets the size of all pages. The given size takes precedence over computed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1074 * sizes.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1075 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 * @param size
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 * the page size encoded as <code>new Point(width,height)</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078 * @see #setPageSize(int,int)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1079 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1080 public void setPageSize(Point size) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 setPageSize(size.x, size.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1082 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 * Sets the wizard this dialog is currently displaying.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 * @param newWizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088 * the wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1089 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1090 protected void setWizard(IWizard newWizard) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 wizard = newWizard;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1092 wizard.setContainer(this);
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1093 if (!createdWizards.contains(cast(Object)wizard)) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1094 createdWizards.add(cast(Object)wizard);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 // New wizard so just add it to the end of our nested list
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1096 nestedWizards.add(cast(Object)wizard);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 if (pageContainer !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 // Dialog is already open
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 // Allow the wizard pages to precreate their page controls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 // This allows the wizard to open to the correct size
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 createPageControls();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102 // Ensure the dialog is large enough for the wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 updateSizeForWizard(wizard);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104 pageContainer.layout(true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1106 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 // We have already seen this wizard, if it is the previous wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 // on the nested list then we assume we have gone back and remove
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109 // the last wizard from the list
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1110 int size = nestedWizards.size();
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1111 if (size >= 2 && nestedWizards.get(size - 2) is cast(Object)wizard) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1112 nestedWizards.remove(size - 1);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1113 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1114 // Assume we are going forward to revisit a wizard
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1115 nestedWizards.add(cast(Object)wizard);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1116 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1117 }
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 * (non-Javadoc) Method declared on IWizardContainer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1123 public void showPage(IWizardPage page) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1124 if (page is null || page is currentPage) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1125 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1126 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1127
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1128 if (!isMovingToPreviousPage) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1129 // remember my previous page.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 page.setPreviousPage(currentPage);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1132 isMovingToPreviousPage = false;
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 // If page changing evaluation unsuccessful, do not change the page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1136 if (!doPageChanging(page))
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1137 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1139 // Update for the new page in a busy cursor if possible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1140 if (getContents() is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1141 updateForPage(page);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 } else {
183
c36336245fb1 Fix anon class problem
Frank Benoit <benoit@tionex.de>
parents: 118
diff changeset
1143 BusyIndicator.showWhile(getContents().getDisplay(), dgRunnable( (IWizardPage finalPage) {
c36336245fb1 Fix anon class problem
Frank Benoit <benoit@tionex.de>
parents: 118
diff changeset
1144 updateForPage(finalPage);
c36336245fb1 Fix anon class problem
Frank Benoit <benoit@tionex.de>
parents: 118
diff changeset
1145 }, page ));
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1146 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1147 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1149 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1150 * Update the receiver for the new page.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1151 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1152 * @param page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1153 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1154 private void updateForPage(IWizardPage page) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1155 // ensure this page belongs to the current wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1156 if (wizard !is page.getWizard()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1157 setWizard(page.getWizard());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1158 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1159 // ensure that page control has been created
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1160 // (this allows lazy page control creation)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1161 if (page.getControl() is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1162 page.createControl(pageContainer);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1163 // the page is responsible for ensuring the created control is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1164 // accessable
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1165 // via getControl.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1166 Assert.isNotNull(page.getControl(), JFaceResources.format(
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1167 JFaceResources.getString("WizardDialog.missingSetControl"), //$NON-NLS-1$
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1168 [ page.getName() ]));
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1169 // ensure the dialog is large enough for this page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 updateSize(page);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 // make the new page visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1173 IWizardPage oldPage = currentPage;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1174 currentPage = page;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1175
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1176 currentPage.setVisible(true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1177 if (oldPage !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1178 oldPage.setVisible(false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1179 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1180 // update the dialog controls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1181 update();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1182 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1183
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1184 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1185 * Shows the starting page of the wizard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1186 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1187 private void showStartingPage() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1188 currentPage = wizard.getStartingPage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1189 if (currentPage is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1190 // something must have happend getting the page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1191 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1192 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1193 // ensure the page control has been created
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1194 if (currentPage.getControl() is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1195 currentPage.createControl(pageContainer);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1196 // the page is responsible for ensuring the created control is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1197 // accessable
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1198 // via getControl.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1199 Assert.isNotNull(currentPage.getControl());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1200 // we do not need to update the size since the call
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1201 // to initialize bounds has not been made yet.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1202 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1203 // make the new page visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1204 currentPage.setVisible(true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1205 // update the dialog controls
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1206 update();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1207 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1208
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1209 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1210 * A long running operation triggered through the wizard was stopped either
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1211 * by user input or by normal end. Hides the progress monitor and restores
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1212 * the enable state wizard's buttons and controls.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1213 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1214 * @param savedState
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1215 * the saved UI state as returned by <code>aboutToStart</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1216 * @see #aboutToStart
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1217 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1218 private void stopped(Object savedState) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
1219 if (getShell() !is null && !getShell().isDisposed()) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1220 if (wizard.needsProgressMonitor()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1221 progressMonitorPart.setVisible(false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1222 progressMonitorPart.removeFromCancelComponent(cancelButton);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1223 }
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1224 Map state = cast(Map) savedState;
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1225 restoreUIState(state);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1226 cancelButton.addSelectionListener(cancelListener);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1227 setDisplayCursor(null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1228 cancelButton.setCursor(null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1229 waitCursor.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1230 waitCursor = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1231 arrowCursor.dispose();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1232 arrowCursor = null;
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1233 Control focusControl = cast(Control) state.get(stringcast(FOCUS_CONTROL));
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
1234 if (focusControl !is null && !focusControl.isDisposed()) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1235 focusControl.setFocus();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1236 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1237 }
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 * Updates this dialog's controls to reflect the current page.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1242 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1243 protected void update() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1244 // Update the window title
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1245 updateWindowTitle();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1246 // Update the title bar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1247 updateTitleBar();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1248 // Update the buttons
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1249 updateButtons();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1250
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1251 // Fires the page change event
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1252 firePageChanged(new PageChangedEvent(this, cast(Object)getCurrentPage()));
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1253 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1254
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1255 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1256 * (non-Javadoc) Method declared on IWizardContainer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1257 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1258 public void updateButtons() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1259 bool canFlipToNextPage = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1260 bool canFinish = wizard.canFinish();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1261 if (backButton !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1262 backButton.setEnabled(currentPage.getPreviousPage() !is null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1263 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1264 if (nextButton !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1265 canFlipToNextPage = currentPage.canFlipToNextPage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1266 nextButton.setEnabled(canFlipToNextPage);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1267 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1268 finishButton.setEnabled(canFinish);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1269 // finish is default unless it is diabled and next is enabled
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1270 if (canFlipToNextPage && !canFinish) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1271 getShell().setDefaultButton(nextButton);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1272 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1273 getShell().setDefaultButton(finishButton);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1274 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1275 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1276
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1277 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1278 * Update the message line with the page's description.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1279 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1280 * A discription is shown only if there is no message or error message.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1281 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1282 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1283 private void updateDescriptionMessage() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1284 pageDescription = currentPage.getDescription();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1285 setMessage(pageDescription);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1286 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1287
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1288 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1289 * (non-Javadoc) Method declared on IWizardContainer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1290 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1291 public void updateMessage() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1292
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1293 if (currentPage is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1294 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1295 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1296
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1297 pageMessage = currentPage.getMessage();
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1298 if (pageMessage !is null && cast(IMessageProvider)currentPage ) {
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1299 pageMessageType = (cast(IMessageProvider) currentPage).getMessageType();
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1300 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1301 pageMessageType = IMessageProvider.NONE;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1302 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1303 if (pageMessage is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1304 setMessage(pageDescription);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1305 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1306 setMessage(pageMessage, pageMessageType);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1307 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1308 setErrorMessage(currentPage.getErrorMessage());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1309 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1310
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1311 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1312 * Changes the shell size to the given size, ensuring that it is no larger
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1313 * than the display bounds.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1314 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1315 * @param width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1316 * the shell width
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1317 * @param height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1318 * the shell height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1319 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1320 private void setShellSize(int width, int height) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1321 Rectangle size = getShell().getBounds();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1322 size.height = height;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1323 size.width = width;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1324 getShell().setBounds(getConstrainedShellBounds(size));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1325 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1326
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1327 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1328 * Computes the correct dialog size for the current page and resizes its
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1329 * shell if nessessary. Also causes the container to refresh its layout.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1330 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1331 * @param page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1332 * the wizard page to use to resize the dialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1333 * @since 2.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1334 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1335 protected void updateSize(IWizardPage page) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1336 if (page is null || page.getControl() is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1337 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1338 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1339 updateSizeForPage(page);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1340 pageContainerLayout.layoutPage(page.getControl());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1341 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1342
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1343 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1344 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1345 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1346 * @see dwtx.jface.wizard.IWizardContainer2#updateSize()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1347 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1348 public void updateSize() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1349 updateSize(currentPage);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1350 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1351
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1352 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1353 * Computes the correct dialog size for the given page and resizes its shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1354 * if nessessary.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1355 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1356 * @param page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1357 * the wizard page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1358 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1359 private void updateSizeForPage(IWizardPage page) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1360 // ensure the page container is large enough
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1361 Point delta = calculatePageSizeDelta(page);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1362 if (delta.x > 0 || delta.y > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1363 // increase the size of the shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1364 Shell shell = getShell();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1365 Point shellSize = shell.getSize();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1366 setShellSize(shellSize.x + delta.x, shellSize.y + delta.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1367 constrainShellSize();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1368 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1369 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1370
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1371 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1372 * Computes the correct dialog size for the given wizard and resizes its
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1373 * shell if nessessary.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1374 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1375 * @param sizingWizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1376 * the wizard
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1377 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1378 private void updateSizeForWizard(IWizard sizingWizard) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1379 Point delta = new Point(0, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1380 IWizardPage[] pages = sizingWizard.getPages();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1381 for (int i = 0; i < pages.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1382 // ensure the page container is large enough
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1383 Point pageDelta = calculatePageSizeDelta(pages[i]);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1384 delta.x = Math.max(delta.x, pageDelta.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1385 delta.y = Math.max(delta.y, pageDelta.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1386 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1387 if (delta.x > 0 || delta.y > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1388 // increase the size of the shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1389 Shell shell = getShell();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1390 Point shellSize = shell.getSize();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1391 setShellSize(shellSize.x + delta.x, shellSize.y + delta.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1392 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1393 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1394
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1395 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1396 * (non-Javadoc) Method declared on IWizardContainer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1397 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1398 public void updateTitleBar() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1399 String s = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1400 if (currentPage !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1401 s = currentPage.getTitle();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1402 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1403 if (s is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1404 s = ""; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1405 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1406 setTitle(s);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1407 if (currentPage !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1408 setTitleImage(currentPage.getImage());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1409 updateDescriptionMessage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1410 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1411 updateMessage();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1412 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1413
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1414 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1415 * (non-Javadoc) Method declared on IWizardContainer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1416 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1417 public void updateWindowTitle() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1418 if (getShell() is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1419 // Not created yet
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1420 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1421 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1422 String title = wizard.getWindowTitle();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1423 if (title is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1424 title = ""; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1425 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1426 getShell().setText(title);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1427 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1428
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1429 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1430 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1431 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1432 * @see dwtx.jface.dialogs.IPageChangeProvider#getSelectedPage()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1433 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1434 public Object getSelectedPage() {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1435 return cast(Object)getCurrentPage();
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1436 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1437
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1438 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1439 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1440 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1441 * @see dwtx.jface.dialog.IPageChangeProvider#addPageChangedListener()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1442 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1443 public void addPageChangedListener(IPageChangedListener listener) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1444 pageChangedListeners.add(cast(Object)listener);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1445 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1446
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1447 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1448 * (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1449 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1450 * @see dwtx.jface.dialog.IPageChangeProvider#removePageChangedListener()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1451 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1452 public void removePageChangedListener(IPageChangedListener listener) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1453 pageChangedListeners.remove(cast(Object)listener);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1454 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1455
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1456 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1457 * Notifies any selection changed listeners that the selected page has
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1458 * changed. Only listeners registered at the time this method is called are
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1459 * notified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1460 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1461 * @param event
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1462 * a selection changed event
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1463 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1464 * @see IPageChangedListener#pageChanged
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1465 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1466 * @since 3.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1467 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1468 protected void firePageChanged(PageChangedEvent event) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1469 Object[] listeners = pageChangedListeners.getListeners();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1470 for (int i = 0; i < listeners.length; ++i) {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1471 SafeRunnable.run(new class(cast(IPageChangedListener) listeners[i],event) SafeRunnable {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1472 PageChangedEvent event_;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1473 IPageChangedListener l;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1474 this(IPageChangedListener a, PageChangedEvent b){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1475 l = a;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1476 event_=b;
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1477 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1478 public void run() {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1479 l.pageChanged(event_);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1480 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1481 });
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1482 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1483 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1484
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1485 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1486 * Adds a listener for page changes to the list of page changing listeners
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1487 * registered for this dialog. Has no effect if an identical listener is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1488 * already registered.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1489 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1490 * @param listener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1491 * a page changing listener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1492 * @since 3.3
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1493 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1494 public void addPageChangingListener(IPageChangingListener listener) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1495 pageChangingListeners.add(cast(Object)listener);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1496 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1497
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1498 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1499 * Removes the provided page changing listener from the list of page
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1500 * changing listeners registered for the dialog.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1501 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1502 * @param listener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1503 * a page changing listener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1504 * @since 3.3
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1505 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1506 public void removePageChangingListener(IPageChangingListener listener) {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1507 pageChangingListeners.remove(cast(Object)listener);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1508 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1509
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1510 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1511 * Notifies any page changing listeners that the currently selected dialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1512 * page is changing. Only listeners registered at the time this method is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1513 * called are notified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1514 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1515 * @param event
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1516 * a selection changing event
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1517 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1518 * @see IPageChangingListener#handlePageChanging(PageChangingEvent)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1519 * @since 3.3
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1520 */
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1521 protected void firePageChanging(PageChangingEvent event) {
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1522 Object[] listeners = pageChangingListeners.getListeners();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1523 for (int i = 0; i < listeners.length; ++i) {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1524 SafeRunnable.run(new class(cast(IPageChangingListener) listeners[i],event) SafeRunnable {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1525 PageChangingEvent event_;
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1526 IPageChangingListener l;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1527 this(IPageChangingListener a, PageChangingEvent b){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1528 l = a;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 35
diff changeset
1529 event_=b;
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1530 }
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1531 public void run() {
35
ef4534de0cf9 remaining files
Frank Benoit <benoit@tionex.de>
parents: 9
diff changeset
1532 l.handlePageChanging(event_);
8
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1533 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1534 });
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1535 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1536 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1537 }