annotate dwtx/jface/window/Window.d @ 192:c3583c6ec027

Added missing default cases for switch statements
author Frank Benoit <benoit@tionex.de>
date Mon, 03 Nov 2008 22:52:26 +0100
parents 04b47443bb01
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
8a302fdb4140 Jface some window and resource classes
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: 40
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.window.Window;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.window.IShellProvider;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.window.WindowManager;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.window.SameShellProvider;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.DWT;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.events.ShellAdapter;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.events.ShellEvent;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.events.ShellListener;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.Image;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.graphics.Point;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.graphics.Rectangle;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.layout.GridLayout;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Composite;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Control;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.Display;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.widgets.Event;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.widgets.Layout;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.widgets.Listener;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.widgets.Monitor;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.widgets.Shell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwtx.core.runtime.Assert;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwtx.jface.resource.JFaceResources;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 import dwtx.jface.util.Geometry;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 import dwtx.jface.util.IPropertyChangeListener;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 import dwtx.jface.util.PropertyChangeEvent;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwt.dwthelper.utils;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
43 import dwtx.dwtxhelper.Collection;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 import tango.io.Stdout;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * A JFace window is an object that has no visual representation (no widgets)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * until it is told to open.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * Creating a window involves the following steps:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * <ul>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * <li>creating an instance of a concrete subclass of <code>Window</code>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * </li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * <li>creating the window's shell and widget tree by calling
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * <code>create</code> (optional)</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * <li>assigning the window to a window manager using
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * <code>WindowManager.add</code> (optional)</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * <li>opening the window by calling <code>open</code></li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * </ul>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * Opening the window will create its shell and widget tree if they have not
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * already been created. When the window is closed, the shell and widget tree
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * are disposed of and are no longer referenced, and the window is automatically
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * removed from its window manager. A window may be reopened.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * The JFace window framework (this package) consists of this class,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * <code>Window</code>, the abstract base of all windows, and one concrete
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * window classes (<code>ApplicationWindow</code>) which may also be
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * subclassed. Clients may define additional window subclasses as required.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * The <code>Window</code> class provides methods that subclasses may
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * override to configure the window, including:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * <ul>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * <li><code>close</code>- extend to free other DWT resources</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * <li><code>configureShell</code>- extend or reimplement to set shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * properties before window opens</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * <li><code>createContents</code>- extend or reimplement to create controls
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * before window opens</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * <li><code>getInitialSize</code>- reimplement to give the initial size for
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * the shell</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * <li><code>getInitialLocation</code>- reimplement to give the initial
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * location for the shell</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * <li><code>getShellListener</code>- extend or reimplement to receive shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 * events</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * <li><code>handleFontChange</code>- reimplement to respond to font changes
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * </li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * <li><code>handleShellCloseEvent</code>- extend or reimplement to handle
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * shell closings</li>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * </ul>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 public abstract class Window : IShellProvider {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * Standard return code constant (value 0) indicating that the window was
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * opened.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * @see #open
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 public static const int OK = 0;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * Standard return code constant (value 1) indicating that the window was
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * canceled.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * @see #open
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 public static const int CANCEL = 1;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * An array of images to be used for the window. It is expected that the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * array will contain the same icon rendered at different resolutions.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 private static Image[] defaultImages;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * This interface defines a Exception Handler which can be set as a global
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * handler and will be called if an exception happens in the event loop.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 */
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
121 public interface IExceptionHandler {
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * Handle the exception.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * @param t
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * The exception that occured.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 public void handleException(Exception t);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * Defines a default exception handler.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 private static class DefaultExceptionHandler : IExceptionHandler {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 /*
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 * (non-Javadoc)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 * @see dwtx.jface.window.Window.IExceptionHandler#handleException(java.lang.Throwable)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 public void handleException(Exception t) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 /+
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 if (t instanceof ThreadDeath) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 // Don't catch ThreadDeath as this is a normal occurrence when
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 // the thread dies
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 throw (ThreadDeath) t;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 +/
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 // Try to keep running.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 ExceptionPrintStackTrace(t);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 * The exception handler for this application.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 */
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
156 private static IExceptionHandler exceptionHandler_;
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
157 private static IExceptionHandler exceptionHandler(){
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
158 if( exceptionHandler_ is null ){
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
159 synchronized if( exceptionHandler_ is null ){
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
160 exceptionHandler_ = new DefaultExceptionHandler();
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
161 }
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
162 }
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
163 return exceptionHandler_;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * The default orientation of the window. By default
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * it is DWT#NONE but it can also be DWT#LEFT_TO_RIGHT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * or DWT#RIGHT_TO_LEFT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 private static int orientation = DWT.NONE;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * Object used to locate the default parent for modal shells
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 */
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
175 private static IShellProvider defaultModalParent_;
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
176 private static IShellProvider defaultModalParent(){
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
177 if( defaultModalParent_ is null ){
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
178 synchronized if( defaultModalParent_ is null ){
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
179 defaultModalParent_ = new class IShellProvider {
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
180 public Shell getShell() {
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
181 Display d = Display.getCurrent();
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
183 if (d is null) {
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
184 return null;
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
185 }
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
187 Shell parent = d.getActiveShell();
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
189 // Make sure we don't pick a parent that has a modal child (this can lock the app)
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
190 if (parent is null) {
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
191 // If this is a top-level window, then there must not be any open modal windows.
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
192 parent = getModalChild(Display.getCurrent().getShells());
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
193 } else {
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
194 // If we picked a parent with a modal child, use the modal child instead
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
195 Shell modalChild = getModalChild(parent.getShells());
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
196 if (modalChild !is null) {
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
197 parent = modalChild;
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
198 }
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
199 }
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
200
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
201 return parent;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
203 };
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 }
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
205 }
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
206 return defaultModalParent_;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 * Object that returns the parent shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 private IShellProvider parentShell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * Shell style bits.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * @see #setShellStyle
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 private int shellStyle = DWT.SHELL_TRIM;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * Window manager, or <code>null</code> if none.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * @see #setWindowManager
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 private WindowManager windowManager;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * Window shell, or <code>null</code> if none.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 private Shell shell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * Top level DWT control, or <code>null</code> if none
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 private Control contents;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * Window return code; initially <code>OK</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * @see #setReturnCode
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 private int returnCode = OK;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * <code>true</code> if the <code>open</code> method should not return
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * until the window closes, and <code>false</code> if the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * <code>open</code> method should return immediately; initially
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * <code>false</code> (non-blocking).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 * @see #setBlockOnOpen
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 private bool block = false;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * Internal class for informing this window when fonts change.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 private class FontChangeListener : IPropertyChangeListener {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 public void propertyChange(PropertyChangeEvent event) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 handleFontChange(event);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * Internal font change listener.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 private FontChangeListener fontChangeListener;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 * Internal fields to detect if shell size has been set
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 private bool resizeHasOccurred = false;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 private Listener resizeListener;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * Creates a window instance, whose shell will be created under the given
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * parent shell. Note that the window will have no visual representation
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * until it is told to open. By default, <code>open</code> does not block.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * @param parentShell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * the parent shell, or <code>null</code> to create a top-level
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * shell. Try passing "(Shell)null" to this method instead of "null"
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * if your compiler complains about an ambiguity error.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * @see #setBlockOnOpen
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * @see #getDefaultOrientation()
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 protected this(Shell parentShell) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 this(new SameShellProvider(parentShell));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 if(parentShell is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 setShellStyle(getShellStyle() | getDefaultOrientation());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 * Creates a new window which will create its shell as a child of whatever
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * the given shellProvider returns.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 * @param shellProvider object that will return the current parent shell. Not null.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 protected this(IShellProvider shellProvider) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 Assert.isNotNull(cast(Object)shellProvider);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 this.parentShell = shellProvider;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 * Determines if the window should handle the close event or do nothing.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * The default implementation of this framework method returns
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * <code>true</code>, which will allow the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * <code>handleShellCloseEvent</code> method to be called. Subclasses may
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 * extend or reimplement.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 * @return whether the window should handle the close event.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 protected bool canHandleShellCloseEvent() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 return true;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 * Closes this window, disposes its shell, and removes this window from its
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 * window manager (if it has one).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 * This framework method may be extended (<code>super.close</code> must
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 * be called).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 * </p>
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
331 * <p>
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
332 * Note that in order to prevent recursive calls to this method
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
333 * it does not call <code>Shell#close()</code>. As a result <code>ShellListener</code>s
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
334 * will not receive a <code>shellClosed</code> event.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
335 * </p>
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * @return <code>true</code> if the window is (or was already) closed, and
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 * <code>false</code> if it is still open
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 public bool close() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 // stop listening for font changes
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 if (fontChangeListener !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 JFaceResources.getFontRegistry().removeListener(fontChangeListener);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 fontChangeListener = null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 // remove this window from a window manager if it has one
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 if (windowManager !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 windowManager.remove(this);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 windowManager = null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 if (shell is null || shell.isDisposed()) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 return true;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 // If we "close" the shell recursion will occur.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 // Instead, we need to "dispose" the shell to remove it from the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 // display.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 shell.dispose();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 shell = null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 contents = null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 return true;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 * Configures the given shell in preparation for opening this window in it.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * The default implementation of this framework method sets the shell's
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 * image and gives it a grid layout. Subclasses may extend or reimplement.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 * @param newShell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 * the shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 protected void configureShell(Shell newShell) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 // The single image version of this code had a comment related to bug
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 // 46624,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 // and some code that did nothing if the stored image was already
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 // disposed.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 // The equivalent in the multi-image version seems to be to remove the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 // disposed images from the array passed to the shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 if (defaultImages !is null && defaultImages.length > 0) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
387 ArrayList nonDisposedImages = new ArrayList(defaultImages.length);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 for (int i = 0; i < defaultImages.length; ++i) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 if (defaultImages[i] !is null && !defaultImages[i].isDisposed()) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
390 nonDisposedImages.add(defaultImages[i]);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 if (nonDisposedImages.size() <= 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 Stderr.formatln("Window.configureShell: images disposed"); //$NON-NLS-1$
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 } else {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
397 newShell.setImages(arraycast!(Image)(nonDisposedImages.toArray()));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 Layout layout = getLayout();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 if (layout !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 newShell.setLayout(layout);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 * Creates the layout for the shell. The layout created here will be
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 * attached to the composite passed into createContents. The default
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 * implementation returns a GridLayout with no margins. Subclasses that
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 * change the layout type by overriding this method should also override
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 * createContents.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 * A return value of null indicates that no layout should be attached to the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 * composite. In this case, the layout may be attached within
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * createContents.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 * @return a newly created Layout or null if no layout should be attached.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * @since 3.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 protected Layout getLayout() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 GridLayout layout = new GridLayout();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 layout.marginHeight = 0;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 layout.marginWidth = 0;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 return layout;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * Constrain the shell size to be no larger than the display bounds.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 * @since 2.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 protected void constrainShellSize() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 // limit the shell size to the display size
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 Rectangle bounds = shell.getBounds();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 Rectangle constrained = getConstrainedShellBounds(bounds);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 if (!bounds.opEquals(constrained)) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 shell.setBounds(constrained);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 * Creates this window's widgetry in a new top-level shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 * The default implementation of this framework method creates this window's
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 * shell (by calling <code>createShell</code>), and its controls (by
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * calling <code>createContents</code>), then initializes this window's
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 * shell bounds (by calling <code>initializeBounds</code>).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 public void create() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 shell = createShell();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 contents = createContents(shell);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 //initialize the bounds of the shell to that appropriate for the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 // contents
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 initializeBounds();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * Creates and returns this window's contents. Subclasses may attach any
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * number of children to the parent. As a convenience, the return value of
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * this method will be remembered and returned by subsequent calls to
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * getContents(). Subclasses may modify the parent's layout if they overload
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 * getLayout() to return null.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * It is common practise to create and return a single composite that
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 * contains the entire window contents.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 * The default implementation of this framework method creates an instance
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 * of <code>Composite</code>. Subclasses may override.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 * @param parent
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 * the parent composite for the controls in this window. The type
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 * of layout used is determined by getLayout()
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * @return the control that will be returned by subsequent calls to
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * getContents()
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 protected Control createContents(Composite parent) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 // by default, just create a composite
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 return new Composite(parent, DWT.NONE);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 * Creates and returns this window's shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 * The default implementation of this framework method creates a new shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 * and configures it using <code/>configureShell</code>. Rather than
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 * override this method, subclasses should instead override
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 * <code/>configureShell</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 * @return the shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 protected final Shell createShell() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 Shell newParent = getParentShell();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 if(newParent !is null && newParent.isDisposed()){
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 parentShell = new SameShellProvider(null);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 newParent = getParentShell();//Find a better parent
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 //Create the shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 Shell newShell = new Shell(newParent, getShellStyle());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 resizeListener = new class Listener {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 public void handleEvent(Event e) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 resizeHasOccurred = true;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 };
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 newShell.addListener(DWT.Resize, resizeListener);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 newShell.setData(this);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 //Add a listener
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 newShell.addShellListener(getShellListener());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 //Set the layout
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 configureShell(newShell);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 //Register for font changes
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 if (fontChangeListener is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 fontChangeListener = new FontChangeListener();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 JFaceResources.getFontRegistry().addListener(fontChangeListener);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 return newShell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 * Returns the top level control for this window. The parent of this control
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 * is the shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 * @return the top level control, or <code>null</code> if this window's
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 * control has not been created yet
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 protected Control getContents() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 return contents;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 * Returns the default image. This is the image that will be used for
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 * windows that have no shell image at the time they are opened. There is no
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 * default image unless one is installed via <code>setDefaultImage</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 * @return the default image, or <code>null</code> if none
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 * @see #setDefaultImage
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 public static Image getDefaultImage() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 return (defaultImages is null || defaultImages.length < 1) ? null
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 : defaultImages[0];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 * Returns the array of default images to use for newly opened windows. It
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 * is expected that the array will contain the same icon rendered at
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 * different resolutions.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * @see dwt.widgets.Decorations#setImages(dwt.graphics.Image[])
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 * @return the array of images to be used when a new window is opened
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 * @see #setDefaultImages
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * @since 3.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 public static Image[] getDefaultImages() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 return (defaultImages is null ? new Image[0] : defaultImages);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * Returns the initial location to use for the shell. The default
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 * implementation centers the shell horizontally (1/2 of the difference to
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 * the left and 1/2 to the right) and vertically (1/3 above and 2/3 below)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 * relative to the parent shell, or display bounds if there is no parent
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 * shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 * @param initialSize
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 * the initial size of the shell, as returned by
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 * <code>getInitialSize</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 * @return the initial location of the shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 protected Point getInitialLocation(Point initialSize) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 Composite parent = shell.getParent();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 dwt.widgets.Monitor.Monitor monitor = shell.getDisplay().getPrimaryMonitor();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 if (parent !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 monitor = parent.getMonitor();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 Rectangle monitorBounds = monitor.getClientArea();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 Point centerPoint;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 if (parent !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 centerPoint = Geometry.centerPoint(parent.getBounds());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 } else {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 centerPoint = Geometry.centerPoint(monitorBounds);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 return new Point(centerPoint.x - (initialSize.x / 2), Math.max(
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 monitorBounds.y, Math.min(centerPoint.y
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 - (initialSize.y * 2 / 3), monitorBounds.y
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 + monitorBounds.height - initialSize.y)));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 * Returns the initial size to use for the shell. The default implementation
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 * returns the preferred size of the shell, using
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 * <code>Shell.computeSize(DWT.DEFAULT, DWT.DEFAULT, true)</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 * @return the initial size of the shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 protected Point getInitialSize() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 return shell.computeSize(DWT.DEFAULT, DWT.DEFAULT, true);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 * Returns the most specific modal child from the given list of Shells.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 * @param toSearch shells to search for modal children
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 * @return the most specific modal child, or null if none
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 private static Shell getModalChild(Shell[] toSearch) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 int modal = DWT.APPLICATION_MODAL | DWT.SYSTEM_MODAL | DWT.PRIMARY_MODAL;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 for (int i = toSearch.length - 1; i >= 0; i--) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 Shell shell = toSearch[i];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 // Check if this shell has a modal child
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 Shell[] children = shell.getShells();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 Shell modalChild = getModalChild(children);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 if (modalChild !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 return modalChild;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 // If not, check if this shell is modal itself
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 if (shell.isVisible() && (shell.getStyle() & modal) !is 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 return shell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 return null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 * Returns parent shell, under which this window's shell is created.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 * @return the parent shell, or <code>null</code> if there is no parent
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 * shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 protected Shell getParentShell() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 Shell parent = parentShell.getShell();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 int modal = DWT.APPLICATION_MODAL | DWT.SYSTEM_MODAL | DWT.PRIMARY_MODAL;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 if ((getShellStyle() & modal) !is 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 // If this is a modal shell with no parent, pick a shell using defaultModalParent.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 if (parent is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 parent = defaultModalParent.getShell();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 return parent;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 * Returns this window's return code. A window's return codes are
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 * window-specific, although two standard return codes are predefined:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * <code>OK</code> and <code>CANCEL</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 * @return the return code
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 public int getReturnCode() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 return returnCode;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 * Returns this window's shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 * @return this window's shell, or <code>null</code> if this window's
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 * shell has not been created yet
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 public Shell getShell() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 return shell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 * Returns a shell listener. This shell listener gets registered with this
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 * window's shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 * The default implementation of this framework method returns a new
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 * listener that makes this window the active window for its window manager
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 * (if it has one) when the shell is activated, and calls the framework
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 * method <code>handleShellCloseEvent</code> when the shell is closed.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 * Subclasses may extend or reimplement.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 * @return a shell listener
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 protected ShellListener getShellListener() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 return new class ShellAdapter {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 public void shellClosed(ShellEvent event) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 event.doit = false; // don't close now
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 if (canHandleShellCloseEvent()) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 handleShellCloseEvent();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 };
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 * Returns the shell style bits.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 * The default value is <code>DWT.CLOSE|DWT.MIN|DWT.MAX|DWT.RESIZE</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 * Subclassers should call <code>setShellStyle</code> to change this
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 * value, rather than overriding this method.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 * @return the shell style bits
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 protected int getShellStyle() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 return shellStyle;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 * Returns the window manager of this window.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 * @return the WindowManager, or <code>null</code> if none
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 public WindowManager getWindowManager() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 return windowManager;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 * Notifies of a font property change.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 * The default implementation of this framework method does nothing.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 * Subclasses may reimplement.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 * @param event
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 * the property change event detailing what changed
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 protected void handleFontChange(PropertyChangeEvent event) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 // do nothing
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 * Notifies that the window's close button was pressed, the close menu was
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 * selected, or the ESCAPE key pressed.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 * The default implementation of this framework method sets the window's
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 * return code to <code>CANCEL</code> and closes the window using
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 * <code>close</code>. Subclasses may extend or reimplement.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 protected void handleShellCloseEvent() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 setReturnCode(CANCEL);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 close();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 * Initializes the location and size of this window's DWT shell after it has
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 * been created.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 * This framework method is called by the <code>create</code> framework
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 * method. The default implementation calls <code>getInitialSize</code>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * and <code>getInitialLocation</code> and passes the results to
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 * <code>Shell.setBounds</code>. This is only done if the bounds of the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 * shell have not already been modified. Subclasses may extend or
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 * reimplement.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 protected void initializeBounds() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 if (resizeListener !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 shell.removeListener(DWT.Resize, resizeListener);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 if (resizeHasOccurred) { // Check if shell size has been set already.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 return;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 Point size = getInitialSize();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 Point location = getInitialLocation(size);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 shell.setBounds(getConstrainedShellBounds(new Rectangle(location.x,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 location.y, size.x, size.y)));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * Opens this window, creating it first if it has not yet been created.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 * If this window has been configured to block on open (
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 * <code>setBlockOnOpen</code>), this method waits until the window is
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 * closed by the end user, and then it returns the window's return code;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 * otherwise, this method returns immediately. A window's return codes are
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * window-specific, although two standard return codes are predefined:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * <code>OK</code> and <code>CANCEL</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * @return the return code
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * @see #create()
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 public int open() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 if (shell is null || shell.isDisposed()) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 shell = null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 // create the window
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 create();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 // limit the shell size to the display size
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 constrainShellSize();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 // open the window
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 shell.open();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 // run the event loop if specified
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 if (block) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 runEventLoop(shell);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 return returnCode;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 * Runs the event loop for the given shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 * @param loopShell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 * the shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 private void runEventLoop(Shell loopShell) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 //Use the display provided by the shell if possible
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 Display display;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 if (shell is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 display = Display.getCurrent();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 } else {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 display = loopShell.getDisplay();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 while (loopShell !is null && !loopShell.isDisposed()) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 try {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 if (!display.readAndDispatch()) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 display.sleep();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 } catch (Exception e) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 exceptionHandler.handleException(e);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856 display.update();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * Sets whether the <code>open</code> method should block until the window
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 * closes.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * @param shouldBlock
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * <code>true</code> if the <code>open</code> method should
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 * not return until the window closes, and <code>false</code>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 * if the <code>open</code> method should return immediately
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 public void setBlockOnOpen(bool shouldBlock) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 block = shouldBlock;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 * Sets the default image. This is the image that will be used for windows
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 * that have no shell image at the time they are opened. There is no default
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 * image unless one is installed via this method.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 * @param image
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 * the default image, or <code>null</code> if none
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 public static void setDefaultImage(Image image) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 defaultImages = image is null ? null : [ image ];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 * Sets the array of default images to use for newly opened windows. It is
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 * expected that the array will contain the same icon rendered at different
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887 * resolutions.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 * @see dwt.widgets.Decorations#setImages(dwt.graphics.Image[])
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891 * @param images
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 * the array of images to be used when this window is opened
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 * @since 3.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
895 public static void setDefaultImages(Image[] images) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 Image[] newArray = new Image[images.length];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 System.arraycopy(images, 0, newArray, 0, newArray.length);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 defaultImages = newArray;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 * Changes the parent shell. This is only safe to use when the shell is not
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 * yet realized (i.e., created). Once the shell is created, it must be
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 * disposed (i.e., closed) before this method can be called.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 * @param newParentShell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 * The new parent shell; this value may be <code>null</code> if
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 * there is to be no parent.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 protected void setParentShell(Shell newParentShell) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 Assert.isTrue((shell is null), "There must not be an existing shell."); //$NON-NLS-1$
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913 parentShell = new SameShellProvider(newParentShell);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 * Sets this window's return code. The return code is automatically returned
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 * by <code>open</code> if block on open is enabled. For non-blocking
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 * opens, the return code needs to be retrieved manually using
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 * <code>getReturnCode</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 * @param code
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 * the return code
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 protected void setReturnCode(int code) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 returnCode = code;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 * Returns the monitor whose client area contains the given point. If no
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 * monitor contains the point, returns the monitor that is closest to the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 * point. If this is ever made public, it should be moved into a separate
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 * utility class.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 * @param toSearch
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 * point to find (display coordinates)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 * @param toFind
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 * point to find (display coordinates)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 * @return the montor closest to the given point
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 private static dwt.widgets.Monitor.Monitor getClosestMonitor(Display toSearch, Point toFind) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 int closest = Integer.MAX_VALUE;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 dwt.widgets.Monitor.Monitor[] monitors = toSearch.getMonitors();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 dwt.widgets.Monitor.Monitor result = monitors[0];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 for (int idx = 0; idx < monitors.length; idx++) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 dwt.widgets.Monitor.Monitor current = monitors[idx];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 Rectangle clientArea = current.getClientArea();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 if (clientArea.contains(toFind)) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 return current;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 int distance = Geometry.distanceSquared(Geometry
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 .centerPoint(clientArea), toFind);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 if (distance < closest) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 closest = distance;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 result = current;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 return result;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 * Given the desired position of the window, this method returns an adjusted
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 * position such that the window is no larger than its monitor, and does not
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 * extend beyond the edge of the monitor. This is used for computing the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 * initial window position, and subclasses can use this as a utility method
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 * if they want to limit the region in which the window may be moved.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 * @param preferredSize
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 * the preferred position of the window
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 * @return a rectangle as close as possible to preferredSize that does not
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 * extend outside the monitor
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 * @since 3.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 protected Rectangle getConstrainedShellBounds(Rectangle preferredSize) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 Rectangle result = new Rectangle(preferredSize.x, preferredSize.y,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 preferredSize.width, preferredSize.height);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
985 dwt.widgets.Monitor.Monitor mon = getClosestMonitor(getShell().getDisplay(), Geometry
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
986 .centerPoint(result));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988 Rectangle bounds = mon.getClientArea();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
990 if (result.height > bounds.height) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
991 result.height = bounds.height;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 if (result.width > bounds.width) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
995 result.width = bounds.width;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
996 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
997
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 result.x = Math.max(bounds.x, Math.min(result.x, bounds.x
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 + bounds.width - result.width));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 result.y = Math.max(bounds.y, Math.min(result.y, bounds.y
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 + bounds.height - result.height));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 return result;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1004 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 * Sets the shell style bits. This method has no effect after the shell is
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008 * created.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 * The shell style bits are used by the framework method
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 * <code>createShell</code> when creating this window's shell.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 * @param newShellStyle
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 * the new shell style bits
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 protected void setShellStyle(int newShellStyle) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 shellStyle = newShellStyle;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022 * Sets the window manager of this window.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 * Note that this method is used by <code>WindowManager</code> to maintain
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 * a backpointer. Clients must not call the method directly.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 * @param manager
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1029 * the window manager, or <code>null</code> if none
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1030 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1031 public void setWindowManager(WindowManager manager) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 windowManager = manager;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 // Code to detect invalid usage
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1036 if (manager !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 Window[] windows = manager.getWindows();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 for (int i = 0; i < windows.length; i++) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 if (windows[i] is this) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 return;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 manager.add(this);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1045 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 * Sets the exception handler for this application.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1050 * Note that the handler may only be set once. Subsequent calls to this method will be
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1051 * ignored.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1052 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1054 * @param handler
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 * the exception handler for the application.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 public static void setExceptionHandler(IExceptionHandler handler) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058 if ( cast(DefaultExceptionHandler)exceptionHandler ) {
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
1059 exceptionHandler_ = handler;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 * Sets the default parent for modal Windows. This will be used to locate
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 * the parent for any modal Window constructed with a null parent.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 * @param provider shell provider that will be used to locate the parent shell
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 * whenever a Window is created with a null parent
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 public static void setDefaultModalParent(IShellProvider provider) {
37
e10d9c2648be fix static interface and static this
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
1072 defaultModalParent_ = provider;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1073 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1074
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1075 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 * Gets the default orientation for windows. If it is not
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 * set the default value will be unspecified (DWT#NONE).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1079 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1080 * @return DWT#NONE, DWT.RIGHT_TO_LEFT or DWT.LEFT_TO_RIGHT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 * @see DWT#RIGHT_TO_LEFT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1082 * @see DWT#LEFT_TO_RIGHT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083 * @see DWT#NONE
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086 public static int getDefaultOrientation() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 return orientation;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1089 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1090
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1092 * Sets the default orientation of windows.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1093 * @param defaultOrientation one of
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1094 * DWT#RIGHT_TO_LEFT, DWT#LEFT_TO_RIGHT ,DWT#NONE
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 * @see DWT#RIGHT_TO_LEFT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096 * @see DWT#LEFT_TO_RIGHT
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 * @see DWT#NONE
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 public static void setDefaultOrientation(int defaultOrientation) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 orientation = defaultOrientation;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 }