annotate dwtx/jface/dialogs/ProgressMonitorDialog.d @ 83:028aedd523ad

Fix anon class segfault. Thanks yidabu for the report.
author Frank Benoit <benoit@tionex.de>
date Fri, 20 Jun 2008 13:00:15 +0200
parents 46a6e0e6ccd4
children 8d1a6e501ea4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
1451821c3e00 ProgressMonitorDialog
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.
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.dialogs.ProgressMonitorDialog;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.dialogs.IconAndMessageDialog;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.dialogs.IDialogConstants;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.dialogs.ProgressIndicator;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 // import java.lang.reflect.InvocationTargetException;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.DWT;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.graphics.Cursor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.graphics.Image;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.Point;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.layout.GridData;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.Button;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Composite;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Control;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Event;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.Label;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.widgets.Listener;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.widgets.Shell;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwtx.core.runtime.IProgressMonitor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwtx.core.runtime.IProgressMonitorWithBlocking;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwtx.core.runtime.IStatus;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwtx.jface.operation.IRunnableContext;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwtx.jface.operation.IRunnableWithProgress;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 import dwtx.jface.operation.ModalContext;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 import dwtx.jface.resource.JFaceResources;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 import dwt.dwthelper.utils;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwt.dwthelper.Runnable;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * A modal dialog that displays progress during a long running operation.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * <p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * This concrete dialog class can be instantiated as is, or further subclassed
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * as required.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * </p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * <p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * Typical usage is:
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * <pre>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * try {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * IRunnableWithProgress op = ...;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * new ProgressMonitorDialog(activeShell).run(true, true, op);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * } catch (InvocationTargetException e) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * // handle exception
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * } catch (InterruptedException e) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * // handle cancelation
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * </pre>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * </p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * <p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * Note that the ProgressMonitorDialog is not intended to be used with multiple
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * runnables - this dialog should be discarded after completion of one
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * IRunnableWithProgress and a new one instantiated for use by a second or
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * sebsequent IRunnableWithProgress to ensure proper initialization.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * </p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * <p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * Note that not forking the process will result in it running in the UI which
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * may starve the UI. The most obvious symptom of this problem is non
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * responsiveness of the cancel button. If you are running within the UI Thread
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * you should do the bulk of your work in another Thread to prevent starvation.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * It is recommended that fork is set to true in most cases.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * </p>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 public class ProgressMonitorDialog : IconAndMessageDialog,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 IRunnableContext {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * Name to use for task when normal task name is empty string.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 private static String DEFAULT_TASKNAME;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 static this() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 DEFAULT_TASKNAME = JFaceResources
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 .getString("ProgressMonitorDialog.message"); //$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * Constants for label and monitor size
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 private static int LABEL_DLUS = 21;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 private static int BAR_DLUS = 9;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * The progress indicator control.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 protected ProgressIndicator progressIndicator;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * The label control for the task. Kept for backwards compatibility.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 protected Label taskLabel;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * The label control for the subtask.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 protected Label subTaskLabel;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * The Cancel button control.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 protected Button cancel;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * Indicates whether the Cancel button is to be shown.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 protected bool operationCancelableState = false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * Indicates whether the Cancel button is to be enabled.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 protected bool enableCancelButton;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * The progress monitor.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 private ProgressMonitor progressMonitor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * The name of the current task (used by ProgressMonitor).
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 private String task;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 * The nesting depth of currently running runnables.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 private int nestingDepth;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 * The cursor used in the cancel button;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 protected Cursor arrowCursor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 * The cursor used in the shell;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 private Cursor waitCursor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 * Flag indicating whether to open or merely create the dialog before run.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 private bool openOnRun = true;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * Internal progress monitor implementation.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 private class ProgressMonitor : IProgressMonitorWithBlocking {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 private String fSubTask = "";//$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 private bool fIsCanceled;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * is the process forked
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 protected bool forked = false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * is locked
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 protected bool locked = false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 public void beginTask(String name, int totalWork) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 if (progressIndicator.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 return;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 if (name is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 task = "";//$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 task = name;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 String s = task;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 if (s.length <= 0) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 s = DEFAULT_TASKNAME;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 setMessage(s, false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 if (!forked) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 update();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 if (totalWork is UNKNOWN) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 progressIndicator.beginAnimatedTask();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 progressIndicator.beginTask(totalWork);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 public void done() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 if (!progressIndicator.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 progressIndicator.sendRemainingWork();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 progressIndicator.done();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 public void setTaskName(String name) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 if (name is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 task = "";//$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 task = name;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 String s = task;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 if (s.length <= 0) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 s = DEFAULT_TASKNAME;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 setMessage(s, false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 if (!forked) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 update();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 public bool isCanceled() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 return fIsCanceled;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 public void setCanceled(bool b) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 fIsCanceled = b;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 if (locked) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 clearBlocked();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 public void subTask(String name) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 if (subTaskLabel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 return;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 if (name is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 fSubTask = "";//$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 fSubTask = name;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 subTaskLabel.setText(shortenText(fSubTask, subTaskLabel));
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 if (!forked) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 subTaskLabel.update();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 public void worked(int work) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 internalWorked(work);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 public void internalWorked(double work) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 if (!progressIndicator.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 progressIndicator.worked(work);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * @see dwtx.core.runtime.IProgressMonitorWithBlocking#clearBlocked()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 public void clearBlocked() {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
268 if (getShell().isDisposed())
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
269 return;
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 locked = false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 updateForClearBlocked();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * @see dwtx.core.runtime.IProgressMonitorWithBlocking#setBlocked(dwtx.core.runtime.IStatus)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 public void setBlocked(IStatus reason) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
280 if (getShell().isDisposed())
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
281 return;
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 locked = true;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 updateForSetBlocked(reason);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * Clear blocked state from the receiver.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 protected void updateForClearBlocked() {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
291 progressIndicator.showNormal();
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 setMessage(task, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 imageLabel.setImage(getImage());
83
028aedd523ad Fix anon class segfault. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
294
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * Set blocked state from the receiver.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 * @param reason
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 * IStatus that gives the details
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 protected void updateForSetBlocked(IStatus reason) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
304 progressIndicator.showPaused();
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 setMessage(reason.getMessage(), true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 imageLabel.setImage(getImage());
83
028aedd523ad Fix anon class segfault. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
307
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * Creates a progress monitor dialog under the given shell. The dialog has a
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * standard title and no image. <code>open</code> is non-blocking.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * @param parent
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 * the parent shell, or <code>null</code> to create a top-level
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 * shell
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 public this(Shell parent) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 progressMonitor = new ProgressMonitor();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 super(parent);
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
321 // no close button on the shell style
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
322 if (isResizable()) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
323 setShellStyle(getDefaultOrientation() | DWT.BORDER | DWT.TITLE
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
324 | DWT.APPLICATION_MODAL | DWT.RESIZE | DWT.MAX);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
325 } else {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
326 setShellStyle(getDefaultOrientation() | DWT.BORDER | DWT.TITLE
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
327 | DWT.APPLICATION_MODAL);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
328 }
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 setBlockOnOpen(false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 * Enables the cancel button (asynchronously).
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 * @param b
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 * The state to set the button to.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 private void asyncSetOperationCancelButtonEnabled(bool b) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 if (getShell() !is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 getShell().getDisplay().asyncExec(new class Runnable {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 bool b_;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 this(){ b_=b; }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 public void run() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 setOperationCancelButtonEnabled(b);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 });
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 * The cancel button has been pressed.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
355 protected override void cancelPressed() {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 // NOTE: this was previously done from a listener installed on the
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 // cancel button. On GTK, the listener installed by
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 // Dialog.createButton is called first and this was throwing an
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 // exception because the cancel button was already disposed
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 cancel.setEnabled(false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 progressMonitor.setCanceled(true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 super.cancelPressed();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 * (non-Javadoc) Method declared on Window.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 * The <code>ProgressMonitorDialog</code> implementation of this method
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 * only closes the dialog if there are no currently running runnables.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
372 public override bool close() {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 if (getNestingDepth() <= 0) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 clearCursors();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 return super.close();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 return false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 * Clear the cursors in the dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 protected void clearCursors() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 if (cancel !is null && !cancel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 cancel.setCursor(null);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 Shell shell = getShell();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 if (shell !is null && !shell.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 shell.setCursor(null);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 if (arrowCursor !is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 arrowCursor.dispose();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 if (waitCursor !is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 waitCursor.dispose();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 arrowCursor = null;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 waitCursor = null;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 * (non-Javadoc) Method declared in Window.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
406 protected override void configureShell(Shell shell) {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 super.configureShell(shell);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 if (waitCursor is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 waitCursor = new Cursor(shell.getDisplay(), DWT.CURSOR_WAIT);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 shell.setCursor(waitCursor);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 // Add a listener to set the message properly when the dialog becomes
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 // visible
83
028aedd523ad Fix anon class segfault. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
415 shell.addListener(DWT.Show, new class(shell) Listener {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 Shell shell_;
83
028aedd523ad Fix anon class segfault. Thanks yidabu for the report.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
417 this(Shell a){ shell_=a; }
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 public void handleEvent(Event event) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 // We need to async the message update since the Show precedes
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 // visibility
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 shell_.getDisplay().asyncExec(new class Runnable {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 public void run() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 setMessage(message, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 });
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 });
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * (non-Javadoc) Method declared on Dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
433 protected override void createButtonsForButtonBar(Composite parent) {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 // cancel button
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 createCancelButton(parent);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * Creates the cancel button.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * @param parent
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 * the parent composite
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 protected void createCancelButton(Composite parent) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 cancel = createButton(parent, IDialogConstants.CANCEL_ID,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 IDialogConstants.CANCEL_LABEL, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 if (arrowCursor is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 arrowCursor = new Cursor(cancel.getDisplay(), DWT.CURSOR_ARROW);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 cancel.setCursor(arrowCursor);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 setOperationCancelButtonEnabled(enableCancelButton);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 * (non-Javadoc) Method declared on Dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
458 protected override Control createDialogArea(Composite parent) {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 setMessage(DEFAULT_TASKNAME, false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 createMessageArea(parent);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 // Only set for backwards compatibility
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 taskLabel = messageLabel;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 // progress indicator
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 progressIndicator = new ProgressIndicator(parent);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 GridData gd = new GridData();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 gd.heightHint = convertVerticalDLUsToPixels(BAR_DLUS);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 gd.horizontalAlignment = GridData.FILL;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 gd.grabExcessHorizontalSpace = true;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 gd.horizontalSpan = 2;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 progressIndicator.setLayoutData(gd);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 // label showing current task
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 subTaskLabel = new Label(parent, DWT.LEFT | DWT.WRAP);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 gd = new GridData(GridData.FILL_HORIZONTAL);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 gd.heightHint = convertVerticalDLUsToPixels(LABEL_DLUS);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 gd.horizontalSpan = 2;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 subTaskLabel.setLayoutData(gd);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 subTaskLabel.setFont(parent.getFont());
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 return parent;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * @see dwtx.jface.window.Window#getInitialSize()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
486 protected override Point getInitialSize() {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 Point calculatedSize = super.getInitialSize();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 if (calculatedSize.x < 450) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 calculatedSize.x = 450;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 return calculatedSize;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 * Returns the progress monitor to use for operations run in this progress
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 * dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 * @return the progress monitor
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 public IProgressMonitor getProgressMonitor() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 return progressMonitor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 * This implementation of IRunnableContext#run(bool, bool,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 * IRunnableWithProgress) runs the given <code>IRunnableWithProgress</code>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 * using the progress monitor for this progress dialog and blocks until the
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * runnable has been run, regardless of the value of <code>fork</code>.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * The dialog is opened before the runnable is run, and closed after it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 * completes. It is recommended that <code>fork</code> is set to true in
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 * most cases. If <code>fork</code> is set to <code>false</code>, the
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 * runnable will run in the UI thread and it is the runnable's
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 * responsibility to call <code>Display.readAndDispatch()</code> to ensure
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 * UI responsiveness.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 public void run(bool fork, bool cancelable,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 IRunnableWithProgress runnable) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 setCancelable(cancelable);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 try {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 aboutToRun();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 // Let the progress monitor know if they need to update in UI Thread
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 progressMonitor.forked = fork;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 ModalContext.run(runnable, fork, getProgressMonitor(), getShell()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 .getDisplay());
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 } finally {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 finishedRun();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 * Returns whether the dialog should be opened before the operation is run.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * Defaults to <code>true</code>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 * @return <code>true</code> to open the dialog before run,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 * <code>false</code> to only create the dialog, but not open it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 public bool getOpenOnRun() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 return openOnRun;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 * Sets whether the dialog should be opened before the operation is run.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 * NOTE: Setting this to false and not forking a process may starve any
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 * asyncExec that tries to open the dialog later.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 * @param openOnRun
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 * <code>true</code> to open the dialog before run,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 * <code>false</code> to only create the dialog, but not open
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 * it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 public void setOpenOnRun(bool openOnRun) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 this.openOnRun = openOnRun;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 * Returns the nesting depth of running operations.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 * @return the nesting depth of running operations
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 protected int getNestingDepth() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 return nestingDepth;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 * Increments the nesting depth of running operations.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 protected void incrementNestingDepth() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 nestingDepth++;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * Decrements the nesting depth of running operations.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 protected void decrementNestingDepth() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 nestingDepth--;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 * Called just before the operation is run. Default behaviour is to open or
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 * create the dialog, based on the setting of <code>getOpenOnRun</code>,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 * and increment the nesting depth.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 protected void aboutToRun() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 if (getOpenOnRun()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 open();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 create();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 incrementNestingDepth();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 * Called just after the operation is run. Default behaviour is to decrement
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 * the nesting depth, and close the dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 protected void finishedRun() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 decrementNestingDepth();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 close();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 * Sets whether the progress dialog is cancelable or not.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 * @param cancelable
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 * <code>true</code> if the end user can cancel this progress
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 * dialog, and <code>false</code> if it cannot be canceled
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 public void setCancelable(bool cancelable) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 if (cancel is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 enableCancelButton = cancelable;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 asyncSetOperationCancelButtonEnabled(cancelable);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 * Helper to enable/disable Cancel button for this dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 * @param b
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 * <code>true</code> to enable the cancel button, and
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 * <code>false</code> to disable it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 protected void setOperationCancelButtonEnabled(bool b) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 operationCancelableState = b;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 cancel.setEnabled(b);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 * @see dwtx.jface.dialogs.IconAndMessageDialog#getImage()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
646 protected override Image getImage() {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 return getInfoImage();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 * Set the message in the message label.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 * @param messageString
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 * The string for the new message.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 * @param force
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 * If force is true then always set the message text.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 private void setMessage(String messageString, bool force) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 // must not set null text in a label
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 message = messageString is null ? "" : messageString; //$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 if (messageLabel is null || messageLabel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 return;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 if (force || messageLabel.isVisible()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 messageLabel.setToolTipText(message);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 messageLabel.setText(shortenText(message, messageLabel));
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 * Update the message label. Required if the monitor is forked.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 private void update() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 if (messageLabel is null || messageLabel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 return;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 messageLabel.update();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 * @see dwtx.jface.window.Window#open()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
685 public override int open() {
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 // Check to be sure it is not already done. If it is just return OK.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 if (!getOpenOnRun()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 if (getNestingDepth() is 0) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 return OK;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 int result = super.open();
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
693 // update message label just in case beginTask() has been invoked
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
694 // already
23
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 if (task is null || task.length is 0)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 setMessage(DEFAULT_TASKNAME, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 else
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 setMessage(task, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 return result;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 }