diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java | 1510 |
1 files changed, 0 insertions, 1510 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java deleted file mode 100644 index 9011fa14dd..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java +++ /dev/null @@ -1,1510 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. - * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de). - * 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 - * Compeople AG - QtJambi/Qt based implementation for Windows/Mac OS X/Linux - *******************************************************************************/ -package org.eclipse.swt.widgets; - -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.FocusPolicy; -import com.trolltech.qt.core.Qt.FocusReason; -import com.trolltech.qt.core.Qt.WindowFlags; -import com.trolltech.qt.core.Qt.WindowModality; -import com.trolltech.qt.core.Qt.WindowState; -import com.trolltech.qt.core.Qt.WindowStates; -import com.trolltech.qt.core.Qt.WindowType; -import com.trolltech.qt.gui.QDialog; -import com.trolltech.qt.gui.QMainWindow; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QScrollArea; -import com.trolltech.qt.gui.QStyle; -import com.trolltech.qt.gui.QVBoxLayout; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QWindowStateChangeEvent; -import com.trolltech.qt.gui.QFrame.Shape; -import com.trolltech.qt.gui.QSizePolicy.Policy; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ShellListener; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Region; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * 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</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 not 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> - */ -public class Shell extends Decorations { - Menu activeMenu; - boolean fullScreen, wasMaximized, modified; - Control lastActive; - private QMainWindow mainWindow; - private QDialog dialogWindow; - private QStyle oldStyle; - - /** - * 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#MODELESS - * @see SWT#PRIMARY_MODAL - * @see SWT#APPLICATION_MODAL - * @see SWT#SYSTEM_MODAL - */ - 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#MODELESS - * @see SWT#PRIMARY_MODAL - * @see SWT#APPLICATION_MODAL - * @see SWT#SYSTEM_MODAL - */ - public Shell(Display display, int style) { - this(display, null, style, false); - } - - Shell(Display display, Shell parent, int style, boolean embedded) { - super(); - checkSubclass(); - if (display == null) { - display = Display.getCurrent(); - } - if (display == null) { - display = Display.getDefault(); - } - if (!display.isValidThread()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - if (parent != null && parent.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.style = checkStyle(style); - this.parent = parent; - this.display = display; - // if (handle != 0 && !embedded) { - // state |= FOREIGN_HANDLE; - // } - createWidget(parent, style); - } - - /** - * 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) { - this(parent, 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 - */ - public Shell(Shell parent, int style) { - this(parent != null ? parent.display : null, parent, style, false); - } - - @Override - QWidget createQWidget(int style) { - QScrollArea scrollArea; - if (parent == null) { - // new window - mainWindow = new QMainWindow(null, createWindowFlags(style)); - scrollArea = new QScrollArea(mainWindow); - mainWindow.setCentralWidget(scrollArea); - } else { - // new dialog - dialogWindow = new QDialog(parent.getQWidget(), createWindowFlags(style)); - scrollArea = new QScrollArea(dialogWindow); - - QVBoxLayout layout = new QVBoxLayout(dialogWindow); - layout.addWidget(scrollArea); - layout.setContentsMargins(0, 0, 0, 0); - } - - scrollArea.setFrameShape(Shape.NoFrame); - scrollArea.setContentsMargins(0, 0, 0, 0); - scrollArea.setWidgetResizable(true); - setQMasterWidget(scrollArea); - - QWidget contentWidget = new QWidget(); - contentWidget.setProperty("widgetType", "scrollareaContent"); //$NON-NLS-1$ //$NON-NLS-2$ - contentWidget.setSizePolicy(Policy.MinimumExpanding, Policy.MinimumExpanding); - contentWidget.setContentsMargins(0, 0, 0, 0); - contentWidget.resize(0, 0); - scrollArea.setWidget(contentWidget); - - scrollArea.resize(0, 0); - - int policy = getWindowControl().focusPolicy().value() & ~FocusPolicy.ClickFocus.value(); - getWindowControl().setFocusPolicy(FocusPolicy.resolve(policy)); - - state |= CANVAS; - - return scrollArea.widget(); - } - - private WindowFlags createWindowFlags(int style) { - int flags = parent == null ? WindowType.Window.value() : WindowType.Dialog.value() - | WindowModality.WindowModal.value(); - flags |= WindowType.CustomizeWindowHint.value(); - if ((style & SWT.CLOSE) != 0) { - flags |= WindowType.WindowSystemMenuHint.value() | WindowType.WindowCloseButtonHint.value(); - } - if ((style & SWT.MIN) != 0) { - flags |= WindowType.WindowMinimizeButtonHint.value(); - } - if ((style & SWT.MAX) != 0) { - flags |= WindowType.WindowMaximizeButtonHint.value(); - } - if ((style & SWT.NO_TRIM) != 0) { - flags |= WindowType.FramelessWindowHint.value(); - } - if ((style & SWT.TITLE) != 0) { - flags |= WindowType.WindowTitleHint.value(); - } - if ((style & SWT.ON_TOP) != 0) { - flags |= WindowType.WindowStaysOnTopHint.value(); - } - return new WindowFlags(flags); - } - - @Override - protected void setupQWidget() { - getWindowControl().adjustSize(); - // no setup - } - - @Override - void registerQWidget() { - super.registerQWidget(); - display.addControl(getWindowControl(), this); - } - - @Override - void deregisterQWidget() { - display.removeControl(getWindowControl()); - super.deregisterQWidget(); - } - - @Override - protected QWidget getQMasterWidget() { - return getWindowControl(); - } - - @Override - QWidget getMenuContainer() { - return getWindowControl(); - } - - QDialog getQDialog() { - return dialogWindow; - } - - boolean isDialog() { - return dialogWindow != null; - } - - @Override - public void setStyleSheet(String style) { - if (style == null || style.trim().length() == 0) { - getWindowControl().setStyleSheet(null); - if (oldStyle != null) { - getWindowControl().setStyle(oldStyle); - oldStyle = null; - } - } else { - oldStyle = getWindowControl().style(); - getWindowControl().setStyleSheet(style); - } - updateLayout(); - } - - @Override - public void updateStyleSheet() { - if (null != getWindowControl().style()) { - getWindowControl().setStyle(getWindowControl().style()); - updateLayout(); - } - } - - @Override - protected QWidget getWindowControl() { - return mainWindow != null ? mainWindow : dialogWindow; - } - - /** - * Invokes platform specific functionality to allocate a new shell that is - * embedded. - * <p> - * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for - * <code>Shell</code>. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - * </p> - * - * @param display - * the display for the shell - * @param qMetrics - * the handle for the shell - * @return a new shell object containing the specified display and handle - */ - public static Shell qt_new(Display display) { - return new Shell(display, null, SWT.NO_TRIM, true); - } - - static int checkStyle(int style) { - style = Decorations.checkStyle(style); - style &= ~SWT.TRANSPARENT; - int mask = SWT.SYSTEM_MODAL | SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL; - int bits = style & ~mask; - if ((style & SWT.SYSTEM_MODAL) != 0) { - return bits | SWT.SYSTEM_MODAL; - } - if ((style & SWT.APPLICATION_MODAL) != 0) { - return bits | SWT.APPLICATION_MODAL; - } - if ((style & SWT.PRIMARY_MODAL) != 0) { - return bits | SWT.PRIMARY_MODAL; - } - return bits; - } - - /** - * 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) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Close, typedListener); - addListener(SWT.Iconify, typedListener); - addListener(SWT.Deiconify, typedListener); - addListener(SWT.Activate, typedListener); - addListener(SWT.Deactivate, typedListener); - } - - /** - * 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() { - checkWidget(); - closeWidget(); - } - - @Override - void enableWidget(boolean enabled) { - Control oldFocus = display.getFocusControl(); - super.enableWidget(enabled); - if (enabled) { - _update(); - } else { - - // All children were looped through and disabled by QWidget unless - // they - // were explicitly disabled. SWT behavior is not to disable the - // dialog - // Shells so we have to restore their states. - Shell shells[] = getShells(); - for (int i = 0; i < shells.length; ++i) { - if (shells[i].parent == this) { - if (shells[i].getEnabled()) { - shells[i].getQWidget().setEnabled(true); - } - } - } - // Because dialog Shell might have been temporarily disabled the - // focus might - // have been lost and must be restored. - if (oldFocus != null) { - oldFocus.menuShell().restoreFocus(); - } - } - } - - @Override - Control findBackgroundControl() { - return background != null || backgroundImage != null ? this : null; - } - - @Override - Cursor findCursor() { - return cursor; - } - - @Override - Control findThemeControl() { - return null; - } - - void fixShell(Shell newShell, Control control) { - if (this == newShell) { - return; - } - if (control == lastActive) { - setActiveControl(null); - } - } - - /** - * 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() { - checkWidget(); - if (!isVisible()) { - return; - } - bringToTop(); - } - - void forceResize() { - /* Do nothing */ - } - - /** - * 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() { - checkWidget(); - double opacity = getQWidget().windowOpacity(); - return (int) (255 * opacity); - } - - @Override - public Rectangle getBounds() { - checkWidget(); - QPoint pos = getWindowControl().pos(); - QSize size = getWindowControl().size(); - return new Rectangle(pos.x(), pos.y(), size.width(), size.height()); - } - - @Override - public Rectangle getClientArea() { - checkWidget(); - if (!isVisible()) { - updateQLayouts(); - } - - Rectangle clientArea = QtSWTConverter.convert(getQWidget().rect()); - if (clientArea.width < 0) { - clientArea.width = 0; - } - if (clientArea.height < 0) { - clientArea.height = 0; - } - - return clientArea; - } - - /** - * 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() { - checkWidget(); - return fullScreen; - } - - /** - * 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() { - checkWidget(); - // TODO how to do it with Qt? - return SWT.NONE; - } - - @Override - public Point getLocation() { - checkWidget(); - if (getWindowControl().isMinimized()) { - return super.getLocation(); - } - return QtSWTConverter.convert(getWindowControl().pos()); - } - - @Override - public boolean getMaximized() { - checkWidget(); - return !fullScreen && super.getMaximized(); - } - - /** - * 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() { - checkWidget(); - return QtSWTConverter.convert(getWindowControl().minimumSize()); - } - - /** - * Gets the receiver's modified state. - * - * </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 boolean getModified() { - checkWidget(); - return modified; - } - - /** - * Returns the region that defines the shape of the shell, or null if the - * shell has the default shape. - * - * @return the region that defines the shape of the shell (or null) - * - * @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 Region getRegion() { - /* This method is needed for the @since 3.0 Javadoc */ - checkWidget(); - return region; - } - - @Override - public Shell getShell() { - checkWidget(); - return this; - } - - @Override - public Point getSize() { - checkWidget(); - return QtSWTConverter.convert(getWindowControl().size()); - } - - /** - * 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() { - checkWidget(); - int count = 0; - Shell[] shells = display.getShells(); - for (int i = 0; i < shells.length; i++) { - Control shell = shells[i]; - do { - shell = shell.parent; - } while (shell != null && shell != this); - if (shell == this) { - count++; - } - } - int index = 0; - Shell[] result = new Shell[count]; - for (int i = 0; i < shells.length; i++) { - Control shell = shells[i]; - do { - shell = shell.parent; - } while (shell != null && shell != this); - if (shell == this) { - result[index++] = shells[i]; - } - } - return result; - } - - /** - * Returns the instance of the ToolBar object representing the tool bar that can appear on the - * trim of the shell. This will return <code>null</code> if the platform does not support tool bars that - * not part of the content area of the shell, or if the style of the shell does not support a - * tool bar. - * <p> - * - * @return a ToolBar object representing the window's tool bar or null. - * - * @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() { - return null; - } - - @Override - protected Composite findDeferredControl() { - return layoutCount > 0 ? this : null; - } - - // @Override - // public boolean isEnabled() { - // checkWidget(); - // return getEnabled(); - //} - - /** - * 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() { - checkWidget(); - updateLayout(); - setVisible(true); - bringToTop(); - if (isDisposed()) { - return; - } - if (!restoreFocus() && !traverseGroup(true)) { - setFocus(FocusReason.OtherFocusReason); - } - } - - @Override - public boolean print(GC gc) { - checkWidget(); - if (gc == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (gc.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - //TODO - return false; - } - - @Override - void releaseChildren(boolean destroy) { - Shell[] shells = getShells(); - for (int i = 0; i < shells.length; i++) { - Shell shell = shells[i]; - if (shell != null && !shell.isDisposed()) { - shell.release(false); - } - } - super.releaseChildren(destroy); - } - - @Override - void releaseParent() { - /* Do nothing */ - } - - @Override - void releaseQWidget() { - getWindowControl().close(); - super.releaseQWidget(); - mainWindow = null; - dialogWindow = null; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - lastActive = null; - } - - @Override - void removeMenu(Menu menu) { - super.removeMenu(menu); - if (menu == activeMenu) { - activeMenu = null; - } - } - - /** - * 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) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Close, listener); - eventTable.unhook(SWT.Iconify, listener); - eventTable.unhook(SWT.Deiconify, listener); - eventTable.unhook(SWT.Activate, listener); - eventTable.unhook(SWT.Deactivate, listener); - } - - /** - * 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() { - checkWidget(); - if (!isVisible()) { - return; - } - bringToTop(); - // widget could be disposed at this point - } - - void setActiveControl(Control control) { - if (control != null && control.isDisposed()) { - control = null; - } - if (lastActive != null && lastActive.isDisposed()) { - lastActive = null; - } - if (lastActive == control) { - return; - } - - /* - * Compute the list of controls to be activated and deactivated by - * finding the first common parent control. - */ - Control[] activate = control == null ? new Control[0] : control.getPath(); - Control[] deactivate = lastActive == null ? new Control[0] : lastActive.getPath(); - lastActive = control; - int index = 0, length = Math.min(activate.length, deactivate.length); - while (index < length) { - if (activate[index] != deactivate[index]) { - break; - } - index++; - } - - /* - * It is possible (but unlikely), that application code could have - * destroyed some of the widgets. If this happens, keep processing those - * widgets that are not disposed. - */ - for (int i = deactivate.length - 1; i >= index; --i) { - if (!deactivate[i].isDisposed()) { - deactivate[i].sendEvent(SWT.Deactivate); - } - } - for (int i = activate.length - 1; i >= index; --i) { - if (!activate[i].isDisposed()) { - activate[i].sendEvent(SWT.Activate); - } - } - } - - /** - * 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) { - checkWidget(); - if (alpha < 0 || alpha > 255) { - return; - } - getQWidget().setWindowOpacity((double) alpha / 255); - } - - @Override - protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) { - if (fullScreen) { - setFullScreen(false); - } - - Rectangle geometry = QtSWTConverter.convert(getWindowControl().frameGeometry()); - if (move) { - int oldX = geometry.x; - int oldY = geometry.y; - boolean moved = oldX != x || oldY != y; - if (moved) { - getWindowControl().move(x, y); - } - } - - if (resize) { - int oldW = geometry.width; - int oldH = geometry.height; - boolean resized = oldW != width || oldH != height; - - if (resized) { - if ((style & SWT.RESIZE) == 0) { - unlockSize(); - } - - getWindowControl().resize(width, height); - - if ((style & SWT.RESIZE) == 0) { - getWindowControl().setFixedSize(Math.max(0, width), Math.max(0, height)); - } - } - } - } - - @Override - public void setEnabled(boolean enabled) { - checkWidget(); - if (super.getEnabled() == enabled) { - return; - } - super.setEnabled(enabled); - if (enabled && getWindowControl().isActiveWindow()) { - if (!restoreFocus()) { - traverseGroup(true); - } - } - } - - /** - * 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 maximmized 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) { - checkWidget(); - if (this.fullScreen == fullScreen) { - return; - } - this.fullScreen = fullScreen; - if (fullScreen) { - getWindowControl().showFullScreen(); - } else { - getWindowControl().showNormal(); - } - } - - /** - * 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) { - checkWidget(); - // 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) { - checkWidget(); - getQWidget().setMinimumSize(width, height); - } - - /** - * 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) { - checkWidget(); - if (size == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setMinimumSize(size.x, size.y); - } - - /** - * 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) { - checkWidget(); - this.modified = modified; - } - - /** - * 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) { - checkWidget(); - if ((style & SWT.NO_TRIM) == 0) { - return; - } - super.setRegion(region); - } - - @Override - public void setVisible(boolean visible) { - checkWidget(); - int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL; - if ((style & mask) != 0) { - if (visible) { - display.setModalShell(this); - if ((style & (SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL)) != 0) { - display.setModalDialog(null); - } - Control control = display.getFocusControl(); - if (control != null && !control.isActive()) { - bringToTop(); - if (isDisposed()) { - return; - } - } - getWindowControl().setWindowModality(getModalityFromStyle()); - QWidget mouseGrabber = QWidget.mouseGrabber(); - if (mouseGrabber != null) { - mouseGrabber.releaseMouse(); - } - } else { - display.clearModal(this); - } - } else { - updateModal(); - } - - _setVisible(getWindowControl(), visible); - } - - private WindowModality getModalityFromStyle() { - if ((style & SWT.SYSTEM_MODAL) != 0) { - return WindowModality.ApplicationModal; - } - if ((style & SWT.APPLICATION_MODAL) != 0) { - return WindowModality.ApplicationModal; - } - if ((style & SWT.PRIMARY_MODAL) != 0) { - return WindowModality.ApplicationModal; - } - return WindowModality.NonModal; - } - - @Override - boolean traverseEscape() { - if (parent == null) { - return false; - } - if (!isVisible() || !isEnabled()) { - return false; - } - close(); - return true; - } - - void updateModal() { - } - - @Override - public boolean qtCloseEvent() { - return closeWidget(); - } - - @Override - public boolean qtWindowStateChangeEvent(QObject source, QWindowStateChangeEvent event) { - if (source != getWindowControl()) { - return false; - } - WindowStates oldState = event.oldState(); - WindowStates newState = getWindowControl().windowState(); - if (oldState.isSet(WindowState.WindowMinimized) && !newState.isSet(WindowState.WindowMinimized)) { - sendEvent(SWT.Deiconify); - return false; - } - if (!oldState.isSet(WindowState.WindowMinimized) && newState.isSet(WindowState.WindowMinimized)) { - sendEvent(SWT.Iconify); - menuShell().saveFocus(); - return false; - } - return false; - } - - @Override - public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - QWidget clickTarget = getQWidget().childAt(mouseEvent.x(), mouseEvent.y()); - if (clickTarget != null && clickTarget != getQWidget()) { - Widget swtControl = display.findControl(clickTarget); - if (swtControl instanceof Control) { - setActiveControl((Control) swtControl); - } - } - } - return false; - } - -} |