annotate dwtx/jface/dialogs/ProgressMonitorDialog.d @ 23:1451821c3e00

ProgressMonitorDialog
author Frank Benoit <benoit@tionex.de>
date Thu, 03 Apr 2008 00:46:30 +0200
parents
children ea8ff534f622
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 /*******************************************************************************
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
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() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 locked = false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 updateForClearBlocked();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * @see dwtx.core.runtime.IProgressMonitorWithBlocking#setBlocked(dwtx.core.runtime.IStatus)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 public void setBlocked(IStatus reason) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 locked = true;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 updateForSetBlocked(reason);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * Clear blocked state from the receiver.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 protected void updateForClearBlocked() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 setMessage(task, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 imageLabel.setImage(getImage());
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * Set blocked state from the receiver.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 * @param reason
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 * IStatus that gives the details
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 protected void updateForSetBlocked(IStatus reason) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 setMessage(reason.getMessage(), true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 imageLabel.setImage(getImage());
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 * Creates a progress monitor dialog under the given shell. The dialog has a
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 * standard title and no image. <code>open</code> is non-blocking.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 * @param parent
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 * the parent shell, or <code>null</code> to create a top-level
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * shell
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 public this(Shell parent) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 progressMonitor = new ProgressMonitor();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 super(parent);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 setShellStyle(getDefaultOrientation() | DWT.BORDER | DWT.TITLE
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 | DWT.APPLICATION_MODAL); // no
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 // close
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 // button
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 setBlockOnOpen(false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * Enables the cancel button (asynchronously).
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * @param b
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 * The state to set the button to.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 private void asyncSetOperationCancelButtonEnabled(bool b) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 if (getShell() !is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 getShell().getDisplay().asyncExec(new class Runnable {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 bool b_;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 this(){ b_=b; }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 public void run() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 setOperationCancelButtonEnabled(b);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 });
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 * The cancel button has been pressed.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 protected void cancelPressed() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 // NOTE: this was previously done from a listener installed on the
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 // cancel button. On GTK, the listener installed by
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 // Dialog.createButton is called first and this was throwing an
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 // exception because the cancel button was already disposed
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 cancel.setEnabled(false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 progressMonitor.setCanceled(true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 super.cancelPressed();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 * (non-Javadoc) Method declared on Window.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 * The <code>ProgressMonitorDialog</code> implementation of this method
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 * only closes the dialog if there are no currently running runnables.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 public bool close() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 if (getNestingDepth() <= 0) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 clearCursors();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 return super.close();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 return false;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 }
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 * Clear the cursors in the dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 protected void clearCursors() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 if (cancel !is null && !cancel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 cancel.setCursor(null);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 Shell shell = getShell();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 if (shell !is null && !shell.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 shell.setCursor(null);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 if (arrowCursor !is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 arrowCursor.dispose();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 if (waitCursor !is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 waitCursor.dispose();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 arrowCursor = null;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 waitCursor = null;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 * (non-Javadoc) Method declared in Window.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 protected void configureShell(Shell shell) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 super.configureShell(shell);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 if (waitCursor is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 waitCursor = new Cursor(shell.getDisplay(), DWT.CURSOR_WAIT);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 shell.setCursor(waitCursor);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 // Add a listener to set the message properly when the dialog becomes
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 // visible
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 shell.addListener(DWT.Show, new class Listener {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 Shell shell_;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 this(){ shell_=shell; }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 public void handleEvent(Event event) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 // We need to async the message update since the Show precedes
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 // visibility
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 shell_.getDisplay().asyncExec(new class Runnable {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 public void run() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 setMessage(message, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 });
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 });
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * (non-Javadoc) Method declared on Dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 protected void createButtonsForButtonBar(Composite parent) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 // cancel button
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 createCancelButton(parent);
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 * Creates the cancel button.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 * @param parent
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 * the parent composite
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 protected void createCancelButton(Composite parent) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 cancel = createButton(parent, IDialogConstants.CANCEL_ID,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 IDialogConstants.CANCEL_LABEL, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 if (arrowCursor is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 arrowCursor = new Cursor(cancel.getDisplay(), DWT.CURSOR_ARROW);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 cancel.setCursor(arrowCursor);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 setOperationCancelButtonEnabled(enableCancelButton);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 * (non-Javadoc) Method declared on Dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 protected Control createDialogArea(Composite parent) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 setMessage(DEFAULT_TASKNAME, false);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 createMessageArea(parent);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 // Only set for backwards compatibility
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 taskLabel = messageLabel;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 // progress indicator
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 progressIndicator = new ProgressIndicator(parent);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 GridData gd = new GridData();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 gd.heightHint = convertVerticalDLUsToPixels(BAR_DLUS);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 gd.horizontalAlignment = GridData.FILL;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 gd.grabExcessHorizontalSpace = true;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 gd.horizontalSpan = 2;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 progressIndicator.setLayoutData(gd);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 // label showing current task
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 subTaskLabel = new Label(parent, DWT.LEFT | DWT.WRAP);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 gd = new GridData(GridData.FILL_HORIZONTAL);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 gd.heightHint = convertVerticalDLUsToPixels(LABEL_DLUS);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 gd.horizontalSpan = 2;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 subTaskLabel.setLayoutData(gd);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 subTaskLabel.setFont(parent.getFont());
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 return parent;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * @see dwtx.jface.window.Window#getInitialSize()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 protected Point getInitialSize() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 Point calculatedSize = super.getInitialSize();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 if (calculatedSize.x < 450) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 calculatedSize.x = 450;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 return calculatedSize;
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 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * Returns the progress monitor to use for operations run in this progress
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * @return the progress monitor
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 public IProgressMonitor getProgressMonitor() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 return progressMonitor;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 * This implementation of IRunnableContext#run(bool, bool,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 * IRunnableWithProgress) runs the given <code>IRunnableWithProgress</code>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 * using the progress monitor for this progress dialog and blocks until the
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 * runnable has been run, regardless of the value of <code>fork</code>.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 * The dialog is opened before the runnable is run, and closed after it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 * completes. It is recommended that <code>fork</code> is set to true in
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 * most cases. If <code>fork</code> is set to <code>false</code>, the
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 * runnable will run in the UI thread and it is the runnable's
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 * responsibility to call <code>Display.readAndDispatch()</code> to ensure
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 * UI responsiveness.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 public void run(bool fork, bool cancelable,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 IRunnableWithProgress runnable) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 setCancelable(cancelable);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 try {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 aboutToRun();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 // Let the progress monitor know if they need to update in UI Thread
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 progressMonitor.forked = fork;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 ModalContext.run(runnable, fork, getProgressMonitor(), getShell()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 .getDisplay());
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 } finally {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 finishedRun();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 * Returns whether the dialog should be opened before the operation is run.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 * Defaults to <code>true</code>
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 * @return <code>true</code> to open the dialog before run,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 * <code>false</code> to only create the dialog, but not open it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 public bool getOpenOnRun() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 return openOnRun;
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 * Sets whether the dialog should be opened before the operation is run.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * NOTE: Setting this to false and not forking a process may starve any
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * asyncExec that tries to open the dialog later.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 * @param openOnRun
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 * <code>true</code> to open the dialog before run,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 * <code>false</code> to only create the dialog, but not open
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 * it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 public void setOpenOnRun(bool openOnRun) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 this.openOnRun = openOnRun;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 * Returns the nesting depth of running operations.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 * @return the nesting depth of running operations
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 protected int getNestingDepth() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 return nestingDepth;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 * Increments the nesting depth of running operations.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 protected void incrementNestingDepth() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 nestingDepth++;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 * Decrements the nesting depth of running operations.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 protected void decrementNestingDepth() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 nestingDepth--;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 * Called just before the operation is run. Default behaviour is to open or
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 * create the dialog, based on the setting of <code>getOpenOnRun</code>,
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * and increment the nesting depth.
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 protected void aboutToRun() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 if (getOpenOnRun()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 open();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 create();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 incrementNestingDepth();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 * Called just after the operation is run. Default behaviour is to decrement
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 * the nesting depth, and close the dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 protected void finishedRun() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 decrementNestingDepth();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 close();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 }
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 * Sets whether the progress dialog is cancelable or not.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 * @param cancelable
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 * <code>true</code> if the end user can cancel this progress
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 * dialog, and <code>false</code> if it cannot be canceled
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 public void setCancelable(bool cancelable) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 if (cancel is null) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 enableCancelButton = cancelable;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 } else {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 asyncSetOperationCancelButtonEnabled(cancelable);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 * Helper to enable/disable Cancel button for this dialog.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 * @param b
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 * <code>true</code> to enable the cancel button, and
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 * <code>false</code> to disable it
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 * @since 3.0
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 protected void setOperationCancelButtonEnabled(bool b) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 operationCancelableState = b;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 cancel.setEnabled(b);
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 /*
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 * @see dwtx.jface.dialogs.IconAndMessageDialog#getImage()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 protected Image getImage() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 return getInfoImage();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 * Set the message in the message label.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 * @param messageString
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 * The string for the new message.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 * @param force
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 * If force is true then always set the message text.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 private void setMessage(String messageString, bool force) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 // must not set null text in a label
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 message = messageString is null ? "" : messageString; //$NON-NLS-1$
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 if (messageLabel is null || messageLabel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 return;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 if (force || messageLabel.isVisible()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 messageLabel.setToolTipText(message);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 messageLabel.setText(shortenText(message, messageLabel));
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 /**
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 * Update the message label. Required if the monitor is forked.
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 private void update() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 if (messageLabel is null || messageLabel.isDisposed()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 return;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 messageLabel.update();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 }
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 * (non-Javadoc)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 *
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 * @see dwtx.jface.window.Window#open()
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 */
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 public int open() {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 // 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
675 if (!getOpenOnRun()) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 if (getNestingDepth() is 0) {
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 return OK;
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 int result = super.open();
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 // update message label just in case beginTask() has been invoked already
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 if (task is null || task.length is 0)
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 setMessage(DEFAULT_TASKNAME, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 else
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 setMessage(task, true);
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 return result;
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 }
1451821c3e00 ProgressMonitorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 }