/******************************************************************************* * Copyright (c) 2000, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.widgets; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.eclipse.swt.events.ShellListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Region; /** * Instances of this class represent the "windows" which the desktop or * "window manager" is managing. Instances that do not have a parent (that is, * they are built using the constructor, which takes a <code>Display</code> as * the argument) are described as <em>top level</em> shells. Instances that do * have a parent are described as <em>secondary</em> or <em>dialog</em> shells. * <p> * Instances are always displayed in one of the maximized, minimized or normal * states: * <ul> * <li> * When an instance is marked as <em>maximized</em>, the window manager will * typically resize it to fill the entire visible area of the display, and the * instance is usually put in a state where it can not be resized (even if it * has style <code>RESIZE</code>) until it is no longer maximized.</li> * <li> * When an instance is in the <em>normal</em> state (neither maximized or * minimized), its appearance is controlled by the style constants which were * specified when it was created and the restrictions of the window manager (see * below).</li> * <li> * When an instance has been marked as <em>minimized</em>, its contents (client * area) will usually not be visible, and depending on the window manager, it * may be "iconified" (that is, replaced on the desktop by a small simplified * representation of itself), relocated to a distinguished area of the screen, * or hidden. Combinations of these changes are also possible.</li> * </ul> * </p> * <p> * The <em>modality</em> of an instance may be specified using style bits. The * modality style bits are used to determine whether input is blocked for other * shells on the display. The <code>PRIMARY_MODAL</code> style allows an * instance to block input to its parent. The <code>APPLICATION_MODAL</code> * style allows an instance to block input to every other shell in the display. * The <code>SYSTEM_MODAL</code> style allows an instance to block input to all * shells, including shells belonging to different applications. * </p> * <p> * Note: The styles supported by this class are treated as <em>HINT</em>s, since * the window manager for the desktop on which the instance is visible has * ultimate control over the appearance and behavior of decorations and * modality. For example, some window managers only support resizable windows * and will always assume the RESIZE style, even if it is not set. In addition, * if a modality style is not supported, it is "upgraded" to a more restrictive * modality style that is supported. For example, if <code>PRIMARY_MODAL</code> * is not supported, it would be upgraded to <code>APPLICATION_MODAL</code>. A * modality style may also be "downgraded" to a less restrictive style. For * example, most operating systems no longer support <code>SYSTEM_MODAL</code> * because it can freeze up the desktop, so this is typically downgraded to * <code>APPLICATION_MODAL</code>. * <dl> * <dt><b>Styles:</b></dt> * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL, SHEET</dd> * <dd>APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL</dd> * <dt><b>Events:</b></dt> * <dd>Activate, Close, Deactivate, Deiconify, Iconify</dd> * </dl> * Class <code>SWT</code> provides two "convenience constants" for the most * commonly required style combinations: * <dl> * <dt><code>SHELL_TRIM</code></dt> * <dd> * the result of combining the constants which are required to produce a typical * application top level shell: (that is, * <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)</dd> * <dt><code>DIALOG_TRIM</code></dt> * <dd> * the result of combining the constants which are required to produce a typical * application dialog shell: (that is, <code>TITLE | CLOSE | BORDER</code>)</dd> * </dl> * </p> * <p> * Note: Only one of the styles APPLICATION_MODAL, MODELESS, PRIMARY_MODAL and * SYSTEM_MODAL may be specified. * </p> * <p> * IMPORTANT: This class is <em>not</em> intended to be subclassed. * </p> * * @see Decorations * @see SWT * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a> * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: * ControlExample</a> * @see <a href="http://www.eclipse.org/swt/">Sample code and further * information</a> * @noextend This class is not intended to be subclassed by clients. */ public class Shell extends Decorations { Stage stage; /** * Constructs a new instance of this class. This is equivalent to calling * <code>Shell((Display) null)</code>. * * @exception SWTException * <ul> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the parent</li> * <li>ERROR_INVALID_SUBCLASS - if this class is not an * allowed subclass</li> * </ul> */ public Shell() { this((Display) null); } /** * Constructs a new instance of this class given only the style value * describing its behavior and appearance. This is equivalent to calling * <code>Shell((Display) null, style)</code>. * <p> * The style value is either one of the style constants defined in class * <code>SWT</code> which is applicable to instances of this class, or must * be built by <em>bitwise OR</em>'ing together (that is, using the * <code>int</code> "|" operator) two or more of those <code>SWT</code> * style constants. The class description lists the style constants that are * applicable to the class. Style bits are also inherited from superclasses. * </p> * * @param style * the style of control to construct * * @exception SWTException * <ul> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the parent</li> * <li>ERROR_INVALID_SUBCLASS - if this class is not an * allowed subclass</li> * </ul> * * @see SWT#BORDER * @see SWT#CLOSE * @see SWT#MIN * @see SWT#MAX * @see SWT#RESIZE * @see SWT#TITLE * @see SWT#TOOL * @see SWT#NO_TRIM * @see SWT#SHELL_TRIM * @see SWT#DIALOG_TRIM * @see SWT#ON_TOP * @see SWT#MODELESS * @see SWT#PRIMARY_MODAL * @see SWT#APPLICATION_MODAL * @see SWT#SYSTEM_MODAL * @see SWT#SHEET */ public Shell(int style) { this((Display) null, style); } /** * Constructs a new instance of this class given only the display to create * it on. It is created with style <code>SWT.SHELL_TRIM</code>. * <p> * Note: Currently, null can be passed in for the display argument. This has * the effect of creating the shell on the currently active display if there * is one. If there is no current display, the shell is created on a * "default" display. <b>Passing in null as the display argument is not * considered to be good coding style, and may not be supported in a future * release of SWT.</b> * </p> * * @param display * the display to create the shell on * * @exception SWTException * <ul> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the parent</li> * <li>ERROR_INVALID_SUBCLASS - if this class is not an * allowed subclass</li> * </ul> */ public Shell(Display display) { this(display, SWT.SHELL_TRIM); } /** * Constructs a new instance of this class given the display to create it on * and a style value describing its behavior and appearance. * <p> * The style value is either one of the style constants defined in class * <code>SWT</code> which is applicable to instances of this class, or must * be built by <em>bitwise OR</em>'ing together (that is, using the * <code>int</code> "|" operator) two or more of those <code>SWT</code> * style constants. The class description lists the style constants that are * applicable to the class. Style bits are also inherited from superclasses. * </p> * <p> * Note: Currently, null can be passed in for the display argument. This has * the effect of creating the shell on the currently active display if there * is one. If there is no current display, the shell is created on a * "default" display. <b>Passing in null as the display argument is not * considered to be good coding style, and may not be supported in a future * release of SWT.</b> * </p> * * @param display * the display to create the shell on * @param style * the style of control to construct * * @exception SWTException * <ul> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the parent</li> * <li>ERROR_INVALID_SUBCLASS - if this class is not an * allowed subclass</li> * </ul> * * @see SWT#BORDER * @see SWT#CLOSE * @see SWT#MIN * @see SWT#MAX * @see SWT#RESIZE * @see SWT#TITLE * @see SWT#TOOL * @see SWT#NO_TRIM * @see SWT#SHELL_TRIM * @see SWT#DIALOG_TRIM * @see SWT#ON_TOP * @see SWT#MODELESS * @see SWT#PRIMARY_MODAL * @see SWT#APPLICATION_MODAL * @see SWT#SYSTEM_MODAL * @see SWT#SHEET */ public Shell(Display display, int style) { super(null, style); if (display.getShells().length == 0) { stage = Display.primaryStage; Display.shells = new Shell[] { this }; } else { // TODO StageStyle // TODO add to display list stage = new Stage(); } } @Override void setNode(final Node node) { super.setNode(node); stage.setScene(new Scene((Parent)node, 640, 480)); } /** * Constructs a new instance of this class given only its parent. It is * created with style <code>SWT.DIALOG_TRIM</code>. * <p> * Note: Currently, null can be passed in for the parent. This has the * effect of creating the shell on the currently active display if there is * one. If there is no current display, the shell is created on a "default" * display. <b>Passing in null as the parent is not considered to be good * coding style, and may not be supported in a future release of SWT.</b> * </p> * * @param parent * a shell which will be the parent of the new instance * * @exception IllegalArgumentException * <ul> * <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li> * </ul> * @exception SWTException * <ul> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the parent</li> * <li>ERROR_INVALID_SUBCLASS - if this class is not an * allowed subclass</li> * </ul> */ public Shell(Shell parent) { super(null, SWT.DIALOG_TRIM); } /** * Constructs a new instance of this class given its parent and a style * value describing its behavior and appearance. * <p> * The style value is either one of the style constants defined in class * <code>SWT</code> which is applicable to instances of this class, or must * be built by <em>bitwise OR</em>'ing together (that is, using the * <code>int</code> "|" operator) two or more of those <code>SWT</code> * style constants. The class description lists the style constants that are * applicable to the class. Style bits are also inherited from superclasses. * </p> * <p> * Note: Currently, null can be passed in for the parent. This has the * effect of creating the shell on the currently active display if there is * one. If there is no current display, the shell is created on a "default" * display. <b>Passing in null as the parent is not considered to be good * coding style, and may not be supported in a future release of SWT.</b> * </p> * * @param parent * a shell which will be the parent of the new instance * @param style * the style of control to construct * * @exception IllegalArgumentException * <ul> * <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li> * </ul> * @exception SWTException * <ul> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the parent</li> * <li>ERROR_INVALID_SUBCLASS - if this class is not an * allowed subclass</li> * </ul> * * @see SWT#BORDER * @see SWT#CLOSE * @see SWT#MIN * @see SWT#MAX * @see SWT#RESIZE * @see SWT#TITLE * @see SWT#NO_TRIM * @see SWT#SHELL_TRIM * @see SWT#DIALOG_TRIM * @see SWT#ON_TOP * @see SWT#TOOL * @see SWT#MODELESS * @see SWT#PRIMARY_MODAL * @see SWT#APPLICATION_MODAL * @see SWT#SYSTEM_MODAL * @see SWT#SHEET */ public Shell(Shell parent, int style) { super(null, style); } /** * Adds the listener to the collection of listeners who will be notified * when operations are performed on the receiver, by sending the listener * one of the messages defined in the <code>ShellListener</code> interface. * * @param listener * the listener which should be notified * * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @see ShellListener * @see #removeShellListener */ public void addShellListener(ShellListener listener) { // TODO } /** * Requests that the window manager close the receiver in the same way it * would be closed when the user clicks on the "close box" or performs some * other platform specific key or mouse combination that indicates the * window should be removed. * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @see SWT#Close * @see #dispose */ public void close() { // TODO } @Override public void dispose() { stage = null; } /** * Returns a ToolBar object representing the tool bar that can be shown in * the receiver's trim. This will return <code>null</code> if the platform * does not support tool bars that are not part of the content area of the * shell, or if the Shell's style does not support having a tool bar. * <p> * * @return a ToolBar object representing the Shell's tool bar, or * <ocde>null</code>. * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not * called from the thread that created the receiver</li> * </ul> * * @since 3.7 */ public ToolBar getToolBar() { // TODO return null; } /** * Returns the receiver's alpha value. The alpha value is between 0 * (transparent) and 255 (opaque). * * @return the alpha value * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.4 */ public int getAlpha() { // TODO return 0; } /** * Returns <code>true</code> if the receiver is currently in fullscreen * state, and false otherwise. * <p> * * @return the fullscreen state * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not * called from the thread that created the receiver</li> * </ul> * * @since 3.4 */ public boolean getFullScreen() { // TODO return false; } /** * Returns a point describing the minimum receiver's size. The x coordinate * of the result is the minimum width of the receiver. The y coordinate of * the result is the minimum height of the receiver. * * @return the receiver's size * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.1 */ public Point getMinimumSize() { // TODO return null; } /** * Gets the receiver's modified state. * * @return <code>true</code> if the receiver is marked as modified, or * <code>false</code> otherwise * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.5 */ public boolean getModified() { // TODO return false; } /** * Returns the receiver's input method editor mode. This will be the result * of bitwise OR'ing together one or more of the following constants defined * in class <code>SWT</code>: <code>NONE</code>, <code>ROMAN</code>, * <code>DBCS</code>, <code>PHONETIC</code>, <code>NATIVE</code>, * <code>ALPHA</code>. * * @return the IME mode * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @see SWT */ public int getImeInputMode() { // TODO return 0; } /** * Returns an array containing all shells which are descendants of the * receiver. * <p> * * @return the dialog shells * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not * called from the thread that created the receiver</li> * </ul> */ public Shell[] getShells() { // TODO return null; } @Override public boolean isDisposed() { return stage == null; } /** * Moves the receiver to the top of the drawing order for the display on * which it was created (so that all other shells on that display, which are * not the receiver's children will be drawn behind it), marks it visible, * sets the focus and asks the window manager to make the shell active. * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @see Control#moveAbove * @see Control#setFocus * @see Control#setVisible * @see Display#getActiveShell * @see Decorations#setDefaultButton(Button) * @see Shell#setActive * @see Shell#forceActive */ public void open() { stage.show(); } /** * Removes the listener from the collection of listeners who will be * notified when operations are performed on the receiver. * * @param listener * the listener which should no longer be notified * * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @see ShellListener * @see #addShellListener */ public void removeShellListener(ShellListener listener) { // TODO } /** * If the receiver is visible, moves it to the top of the drawing order for * the display on which it was created (so that all other shells on that * display, which are not the receiver's children will be drawn behind it) * and asks the window manager to make the shell active * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 2.0 * @see Control#moveAbove * @see Control#setFocus * @see Control#setVisible * @see Display#getActiveShell * @see Decorations#setDefaultButton(Button) * @see Shell#open * @see Shell#setActive */ public void setActive() { // TODO } /** * Sets the receiver's alpha value which must be between 0 (transparent) and * 255 (opaque). * <p> * This operation requires the operating system's advanced widgets subsystem * which may not be available on some platforms. * </p> * * @param alpha * the alpha value * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.4 */ public void setAlpha(int alpha) { // TODO } /** * Sets the full screen state of the receiver. If the argument is * <code>true</code> causes the receiver to switch to the full screen state, * and if the argument is <code>false</code> and the receiver was previously * switched into full screen state, causes the receiver to switch back to * either the maximized or normal states. * <p> * Note: The result of intermixing calls to <code>setFullScreen(true)</code>, <code>setMaximized(true)</code> and <code>setMinimized(true)</code> * will vary by platform. Typically, the behavior will match the platform * user's expectations, but not always. This should be avoided if possible. * </p> * * @param fullScreen * the new fullscreen state * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.4 */ public void setFullScreen(boolean fullScreen) { // TODO } /** * Sets the input method editor mode to the argument which should be the * result of bitwise OR'ing together one or more of the following constants * defined in class <code>SWT</code>: <code>NONE</code>, <code>ROMAN</code>, * <code>DBCS</code>, <code>PHONETIC</code>, <code>NATIVE</code>, * <code>ALPHA</code>. * * @param mode * the new IME mode * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @see SWT */ public void setImeInputMode(int mode) { // TODO } /** * Sets the receiver's minimum size to the size specified by the arguments. * If the new minimum size is larger than the current size of the receiver, * the receiver is resized to the new minimum size. * * @param width * the new minimum width for the receiver * @param height * the new minimum height for the receiver * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.1 */ public void setMinimumSize(int width, int height) { // TODO } /** * Sets the receiver's minimum size to the size specified by the argument. * If the new minimum size is larger than the current size of the receiver, * the receiver is resized to the new minimum size. * * @param size * the new minimum size for the receiver * * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT - if the point is null</li> * </ul> * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.1 */ public void setMinimumSize(Point size) { // TODO } /** * Sets the receiver's modified state as specified by the argument. * * @param modified * the new modified state for the receiver * * </ul> * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.5 */ public void setModified(boolean modified) { // TODO } /** * Sets the shape of the shell to the region specified by the argument. When * the argument is null, the default shape of the shell is restored. The * shell must be created with the style SWT.NO_TRIM in order to specify a * region. * * @param region * the region that defines the shape of the shell (or null) * * @exception IllegalArgumentException * <ul> * <li>ERROR_INVALID_ARGUMENT - if the region has been * disposed</li> * </ul> * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 3.0 * */ @Override public void setRegion(Region region) { // TODO } /** * If the receiver is visible, moves it to the top of the drawing order for * the display on which it was created (so that all other shells on that * display, which are not the receiver's children will be drawn behind it) * and forces the window manager to make the shell active. * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been * disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the * thread that created the receiver</li> * </ul> * * @since 2.0 * @see Control#moveAbove * @see Control#setFocus * @see Control#setVisible * @see Display#getActiveShell * @see Decorations#setDefaultButton(Button) * @see Shell#open * @see Shell#setActive */ public void forceActive() { // TODO } }