summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java1423
1 files changed, 0 insertions, 1423 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java
deleted file mode 100644
index 14e057d36c..0000000000
--- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java
+++ /dev/null
@@ -1,1423 +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 java.util.List;
-
-import com.trolltech.qt.core.QObject;
-import com.trolltech.qt.core.Qt.LayoutDirection;
-import com.trolltech.qt.gui.QAction;
-import com.trolltech.qt.gui.QActionGroup;
-import com.trolltech.qt.gui.QApplication;
-import com.trolltech.qt.gui.QBrush;
-import com.trolltech.qt.gui.QColor;
-import com.trolltech.qt.gui.QMenu;
-import com.trolltech.qt.gui.QMenuBar;
-import com.trolltech.qt.gui.QPalette;
-import com.trolltech.qt.gui.QWidget;
-import com.trolltech.qt.gui.QPalette.ColorRole;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.HelpListener;
-import org.eclipse.swt.events.MenuListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.internal.qt.QtSWTConverter;
-
-/**
- * Instances of this class are user interface objects that contain menu items.
- * <dl>
- * <dt><b>Styles:</b></dt>
- * <dd>BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP</dd>
- * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
- * <dt><b>Events:</b></dt>
- * <dd>Help, Hide, Show</dd>
- * </dl>
- * <p>
- * Note: Only one of BAR, DROP_DOWN and POP_UP may be specified. Only one of
- * LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
- * </p>
- * <p>
- * IMPORTANT: This class is <em>not</em> intended to be subclassed.
- * </p>
- *
- * @see <a href="http://www.eclipse.org/swt/snippets/#menu">Menu 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 Menu extends Widget {
- private int x, y;
- private boolean hasLocation;
- private Color foreground = null;
- private Color background = null;
- private Image backgroundImage;
- MenuItem cascade;
- Decorations parent;
- private QActionGroup actionGroup;
-
- /**
- * Constructs a new instance of this class given its parent, and sets the
- * style for the instance so that the instance will be a popup menu on the
- * given parent's shell.
- * <p>
- * After constructing a menu, it can be set into its parent using
- * <code>parent.setMenu(menu)</code>. In this case, the parent may be any
- * control in the same widget tree as the parent.
- * </p>
- *
- * @param parent
- * a control which will be the parent of the new instance (cannot
- * be null)
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_NULL_ARGUMENT - if the parent is null</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#POP_UP
- * @see Widget#checkSubclass
- * @see Widget#getStyle
- */
- public Menu(Control parent) {
- this(checkNull(parent).menuShell(), null, SWT.POP_UP);
- }
-
- /**
- * Constructs a new instance of this class given its parent (which must be a
- * <code>Decorations</code>) 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>
- * After constructing a menu or menuBar, it can be set into its parent using
- * <code>parent.setMenu(menu)</code> or
- * <code>parent.setMenuBar(menuBar)</code>.
- * </p>
- *
- * @param parent
- * a decorations control which will be the parent of the new
- * instance (cannot be null)
- * @param style
- * the style of menu to construct
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_NULL_ARGUMENT - if the parent is null</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#BAR
- * @see SWT#DROP_DOWN
- * @see SWT#POP_UP
- * @see Widget#checkSubclass
- * @see Widget#getStyle
- */
- public Menu(Decorations parent, int style) {
- this(parent, null, checkStyle(style));
- }
-
- /**
- * Constructs a new instance of this class given its parent (which must be a
- * <code>Menu</code>) and sets the style for the instance so that the
- * instance will be a drop-down menu on the given parent's parent.
- * <p>
- * After constructing a drop-down menu, it can be set into its parentMenu
- * using <code>parentMenu.setMenu(menu)</code>.
- * </p>
- *
- * @param parentMenu
- * a menu which will be the parent of the new instance (cannot be
- * null)
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_NULL_ARGUMENT - if the parent is null</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#DROP_DOWN
- * @see Widget#checkSubclass
- * @see Widget#getStyle
- */
- public Menu(Menu parentMenu) {
- this(checkNull(parentMenu).parent, parentMenu.getQWidget(), SWT.DROP_DOWN);
- }
-
- /**
- * Constructs a new instance of this class given its parent (which must be a
- * <code>MenuItem</code>) and sets the style for the instance so that the
- * instance will be a drop-down menu on the given parent's parent menu.
- * <p>
- * After constructing a drop-down menu, it can be set into its parentItem
- * using <code>parentItem.setMenu(menu)</code>.
- * </p>
- *
- * @param parentItem
- * a menu item which will be the parent of the new instance
- * (cannot be null)
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_NULL_ARGUMENT - if the parent is null</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#DROP_DOWN
- * @see Widget#checkSubclass
- * @see Widget#getStyle
- */
- public Menu(MenuItem parentItem) {
- this(checkNull(parentItem).parent);
- }
-
- Menu(Decorations parent, QWidget qParent, int style) {
- super(parent, checkStyle(style));
- display = parent.display;
- createWidget(parent, qParent, style);
- }
-
- protected void createWidget(Decorations parent, QWidget qParent, int style) {
- state |= DRAG_DETECT;
- this.parent = parent;
- checkAndUpdateOrientation(parent);
- QWidget qtControl = createQtControl(qParent != null ? qParent : parent.getQWidget());
- if (qtControl == null) {
- error(SWT.ERROR_UNSPECIFIED);
- }
- setQWidget(qtControl);
- if ((style & SWT.RIGHT_TO_LEFT) != 0) {
- qtControl.setLayoutDirection(LayoutDirection.RightToLeft);
- }
- register();
- if ((state & PARENT_BACKGROUND) != 0) {
- updateBackground();
- }
- parent.addMenu(this);
- }
-
- protected QWidget createQtControl(QWidget parent) {
- state &= ~CANVAS;
- if (isMenuBar()) {
- return new QMenuBar(parent);
- }
- return new QMenu(parent);
- }
-
- QMenuBar getQMenuBar() {
- return (QMenuBar) getQWidget();
- }
-
- QMenu getQMenu() {
- return (QMenu) getQWidget();
- }
-
- void addToActionGroup(QAction action) {
- initActionGroup();
- actionGroup.addAction(action);
- }
-
- void removeFromActionGroup(QAction action) {
- if (hasActionGroup()) {
- actionGroup.removeAction(action);
- }
- }
-
- private boolean hasActionGroup() {
- return actionGroup != null;
- }
-
- private void initActionGroup() {
- if (actionGroup == null) {
- actionGroup = new QActionGroup(getQWidget());
- if ((parent.style & SWT.NO_RADIO_GROUP) != 0) {
- actionGroup.setExclusive(false);
- }
- }
- }
-
- void register() {
- display.addControl(getQWidget(), this);
- }
-
- void deregister() {
- display.removeControl(getQWidget());
- }
-
- void _setVisible(boolean visible) {
- if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) {
- return;
- }
- getQWidget().setHidden(!visible);
- }
-
- /**
- * Adds the listener to the collection of listeners who will be notified
- * when help events are generated for the control, by sending it one of the
- * messages defined in the <code>HelpListener</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 HelpListener
- * @see #removeHelpListener
- */
- public void addHelpListener(HelpListener listener) {
- checkWidget();
- if (listener == null) {
- error(SWT.ERROR_NULL_ARGUMENT);
- }
- TypedListener typedListener = new TypedListener(listener);
- addListener(SWT.Help, typedListener);
- }
-
- /**
- * Adds the listener to the collection of listeners who will be notified
- * when menus are hidden or shown, by sending it one of the messages defined
- * in the <code>MenuListener</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 MenuListener
- * @see #removeMenuListener
- */
- public void addMenuListener(MenuListener listener) {
- checkWidget();
- if (listener == null) {
- error(SWT.ERROR_NULL_ARGUMENT);
- }
- TypedListener typedListener = new TypedListener(listener);
- addListener(SWT.Hide, typedListener);
- addListener(SWT.Show, typedListener);
- }
-
- static Control checkNull(Control control) {
- if (control == null) {
- SWT.error(SWT.ERROR_NULL_ARGUMENT);
- }
- return control;
- }
-
- static Menu checkNull(Menu menu) {
- if (menu == null) {
- SWT.error(SWT.ERROR_NULL_ARGUMENT);
- }
- return menu;
- }
-
- static MenuItem checkNull(MenuItem item) {
- if (item == null) {
- SWT.error(SWT.ERROR_NULL_ARGUMENT);
- }
- return item;
- }
-
- static int checkStyle(int style) {
- return checkBits(style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
- }
-
- void addAction(QAction action, int index) {
- QWidget menu = getQWidget();
- int itemCount = _getItemCount();
- if (index >= 0 && index < itemCount) {
- MenuItem[] items = getItems();
- QAction before = items[index].getQAction();
- menu.insertAction(before, action);
- } else {
- menu.addAction(action);
- }
- }
-
- void removeAction(QAction action) {
- if (isMenuBar()) {
- getQMenuBar().removeAction(action);
- } else {
- getQMenu().removeAction(action);
- }
- }
-
- boolean isMenuBar() {
- return (style & SWT.BAR) != 0;
- }
-
- Color defaultBackground() {
- return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
- }
-
- Color defaultForeground() {
- return display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
- }
-
- void fixMenus(Decorations newParent) {
- MenuItem[] items = getItems();
- for (int i = 0; i < items.length; i++) {
- items[i].fixMenus(newParent);
- }
- parent.removeMenu(this);
- newParent.addMenu(this);
- this.parent = newParent;
- }
-
- /**
- * Returns the receiver's background color.
- *
- * @return the background color
- *
- * @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.3
- */
- /* public */Color getBackground() {
- checkWidget();
- return background != null ? Color.qt_new(display, background.getColor()) : defaultBackground();
- }
-
- /**
- * Returns the receiver's background image.
- *
- * @return the background image
- *
- * @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.3
- */
- /* public */Image getBackgroundImage() {
- checkWidget();
- return backgroundImage;
- }
-
- /**
- * Returns a rectangle describing the receiver's size and location relative
- * to its parent (or its display if its parent is null), unless the receiver
- * is a menu or a shell. In this case, the location is relative to the
- * display.
- * <p>
- * Note that the bounds of a menu or menu item are undefined when the menu
- * is not visible. This is because most platforms compute the bounds of a
- * menu dynamically just before it is displayed.
- * </p>
- *
- * @return the receiver's bounding rectangle
- *
- * @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 */Rectangle getBounds() {
- checkWidget();
- return QtSWTConverter.convert(getQWidget().frameGeometry());
- }
-
- /**
- * Returns the default menu item or null if none has been previously set.
- *
- * @return the default menu item.
- *
- * </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>
- */
- public MenuItem getDefaultItem() {
- checkWidget();
- // if ( OS.IsWinCE )
- // return null;
- // int id = OS.GetMenuDefaultItem( handle, OS.MF_BYCOMMAND,
- // OS.GMDI_USEDISABLED );
- // if ( id == -1 )
- // return null;
- // MENUITEMINFO info = new MENUITEMINFO();
- // info.cbSize = MENUITEMINFO.sizeof;
- // info.fMask = OS.MIIM_ID;
- // if ( OS.GetMenuItemInfo( handle, id, false, info ) ) {
- // return display.getMenuItem( info.wID );
- // }
- return null;
- }
-
- /**
- * Returns <code>true</code> if the receiver is enabled, and
- * <code>false</code> otherwise. A disabled menu is typically not selectable
- * from the user interface and draws with an inactive or "grayed" look.
- *
- * @return the receiver's enabled 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>
- *
- * @see #isEnabled
- */
- public boolean getEnabled() {
- checkWidget();
- return getQMenuBar().isEnabled();
- }
-
- /**
- * Returns the foreground color that the receiver will use to draw.
- *
- * @return the receiver's foreground color
- *
- * @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 */Color getForeground() {
- checkWidget();
- return foreground != null ? Color.qt_new(display, foreground.getColor()) : defaultForeground();
- }
-
- /**
- * Returns the item at the given, zero-relative index in the receiver.
- * Throws an exception if the index is out of range.
- *
- * @param index
- * the index of the item to return
- * @return the item at the given index
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_INVALID_RANGE - if the index is not between 0
- * and the number of elements in the list minus 1 (inclusive)
- * </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>
- */
- public MenuItem getItem(int index) {
- checkWidget();
- List<QAction> list = getQWidget().actions();
- int count = list.size();
- if (!(0 <= index && index < count)) {
- error(SWT.ERROR_INVALID_RANGE);
- }
- Widget widget = display.findControl(list.get(index));
- if (widget == null || !MenuItem.class.isInstance(widget)) {
- error(SWT.ERROR_CANNOT_GET_ITEM);
- }
- return (MenuItem) widget;
- }
-
- /**
- * Returns the number of items contained in the receiver.
- *
- * @return the number of items
- *
- * @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 int getItemCount() {
- checkWidget();
- return _getItemCount();
- }
-
- /**
- * Returns a (possibly empty) array of <code>MenuItem</code>s which are the
- * items in the receiver.
- * <p>
- * Note: This is not the actual structure used by the receiver to maintain
- * its list of items, so modifying the array will not affect the receiver.
- * </p>
- *
- * @return the items in 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>
- */
- public MenuItem[] getItems() {
- checkWidget();
- List<QAction> list = getQWidget().actions();
- int count = list.size();
- if (count == 0) {
- return new MenuItem[0];
- }
- MenuItem[] children = new MenuItem[count];
- int items = 0;
- for (QAction action : list) {
- if (action != null) {
- Widget widget = display.findControl(action);
- if (widget != null && widget != this) {
- if (widget instanceof MenuItem) {
- children[items++] = (MenuItem) widget;
- }
- }
- }
- }
- if (items == count) {
- return children;
- }
- MenuItem[] newChildren = new MenuItem[items];
- System.arraycopy(children, 0, newChildren, 0, items);
- return newChildren;
- }
-
- int _getItemCount() {
- return getQWidget().actions().size();
- }
-
- @Override
- String getNameText() {
- String result = "";//$NON-NLS-1$
- MenuItem[] items = getItems();
- int length = items.length;
- if (length > 0) {
- for (int i = 0; i < length - 1; i++) {
- result = result + items[i].getNameText() + ", ";//$NON-NLS-1$
- }
- result = result + items[length - 1].getNameText();
- }
- return result;
- }
-
- /**
- * Returns the receiver's parent, which must be a <code>Decorations</code>.
- *
- * @return the receiver's parent
- *
- * @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 Decorations getParent() {
- checkWidget();
- return parent;
- }
-
- /**
- * Returns the receiver's parent item, which must be a <code>MenuItem</code>
- * or null when the receiver is a root.
- *
- * @return the receiver's parent item
- *
- * @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 MenuItem getParentItem() {
- checkWidget();
- return cascade;
- }
-
- /**
- * Returns the receiver's parent item, which must be a <code>Menu</code> or
- * null when the receiver is a root.
- *
- * @return the receiver's parent item
- *
- * @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 Menu getParentMenu() {
- checkWidget();
- if (cascade != null) {
- return cascade.parent;
- }
- return null;
- }
-
- /**
- * Returns the receiver's shell. For all controls other than shells, this
- * simply returns the control's nearest ancestor shell. Shells return
- * themselves, even if they are children of other shells.
- *
- * @return the receiver's shell
- *
- * @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 #getParent
- */
- public Shell getShell() {
- checkWidget();
- return parent.getShell();
- }
-
- /**
- * Returns <code>true</code> if the receiver is visible, and
- * <code>false</code> otherwise.
- * <p>
- * If one of the receiver's ancestors is not visible or some other condition
- * makes the receiver not visible, this method may still indicate that it is
- * considered visible even though it may not actually be showing.
- * </p>
- *
- * @return the receiver's visibility 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>
- */
- public boolean getVisible() {
- checkWidget();
- if ((style & SWT.BAR) != 0) {
- return this == parent.menuShell().menuBar;
- }
- if ((style & SWT.POP_UP) != 0) {
- Menu[] popups = display.popups;
- if (popups == null) {
- return false;
- }
- for (int i = 0; i < popups.length; i++) {
- if (popups[i] == this) {
- return true;
- }
- }
- }
- Shell shell = getShell();
- Menu menu = shell.activeMenu;
- while (menu != null && menu != this) {
- menu = menu.getParentMenu();
- }
- return this == menu;
- }
-
- /**
- * Searches the receiver's list starting at the first item (index 0) until
- * an item is found that is equal to the argument, and returns the index of
- * that item. If no item is found, returns -1.
- *
- * @param item
- * the search item
- * @return the index of the item
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_NULL_ARGUMENT - if the item 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>
- */
- public int indexOf(MenuItem item) {
- checkWidget();
- if (item == null) {
- error(SWT.ERROR_NULL_ARGUMENT);
- }
- if (item.isDisposed()) {
- error(SWT.ERROR_INVALID_ARGUMENT);
- }
- if (item.parent != this) {
- return -1;
- }
- List<QAction> actions = getQWidget().actions();
- for (int i = 0; i < actions.size(); i++) {
- if (actions.get(i) == item.getQAction()) {
- return i;
- }
- }
- return -1;
- }
-
- /**
- * Returns <code>true</code> if the receiver is enabled and all of the
- * receiver's ancestors are enabled, and <code>false</code> otherwise. A
- * disabled menu is typically not selectable from the user interface and
- * draws with an inactive or "grayed" look.
- *
- * @return the receiver's enabled 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>
- *
- * @see #getEnabled
- */
- public boolean isEnabled() {
- checkWidget();
- Menu parentMenu = getParentMenu();
- if (parentMenu == null) {
- return getEnabled() && parent.isEnabled();
- }
- return getEnabled() && parentMenu.isEnabled();
- }
-
- /**
- * Returns <code>true</code> if the receiver is visible and all of the
- * receiver's ancestors are visible and <code>false</code> otherwise.
- *
- * @return the receiver's visibility 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>
- *
- * @see #getVisible
- */
- public boolean isVisible() {
- checkWidget();
- return getVisible();
- }
-
- void redraw() {
- if (!isVisible()) {
- return;
- }
- if ((style & SWT.BAR) != 0) {
- display.addBar(this);
- }
- }
-
- @Override
- void releaseQWidget() {
- super.releaseQWidget();
- cascade = null;
- }
-
- @Override
- void releaseChildren(boolean destroy) {
- MenuItem[] items = getItems();
- for (int i = 0; i < items.length; i++) {
- MenuItem item = items[i];
- if (item != null && !item.isDisposed()) {
- item.release(false);
- }
- }
- super.releaseChildren(destroy);
- }
-
- @Override
- void releaseParent() {
- super.releaseParent();
- if ((style & SWT.BAR) != 0) {
- display.removeBar(this);
- if (this == parent.menuBar) {
- parent.setMenuBar(null);
- }
- } else {
- if ((style & SWT.POP_UP) != 0) {
- display.removePopup(this);
- }
- }
- }
-
- @Override
- void releaseWidget() {
- super.releaseWidget();
- backgroundImage = null;
- if (parent != null) {
- parent.removeMenu(this);
- }
- parent = null;
- }
-
- /**
- * Removes the listener from the collection of listeners who will be
- * notified when the help events are generated for the control.
- *
- * @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 HelpListener
- * @see #addHelpListener
- */
- public void removeHelpListener(HelpListener listener) {
- checkWidget();
- if (listener == null) {
- error(SWT.ERROR_NULL_ARGUMENT);
- }
- if (eventTable == null) {
- return;
- }
- eventTable.unhook(SWT.Help, listener);
- }
-
- /**
- * Removes the listener from the collection of listeners who will be
- * notified when the menu events are generated for the control.
- *
- * @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 MenuListener
- * @see #addMenuListener
- */
- public void removeMenuListener(MenuListener listener) {
- checkWidget();
- if (listener == null) {
- error(SWT.ERROR_NULL_ARGUMENT);
- }
- if (eventTable == null) {
- return;
- }
- eventTable.unhook(SWT.Hide, listener);
- eventTable.unhook(SWT.Show, listener);
- }
-
- /**
- * Sets the receiver's background color to the color specified by the
- * argument, or to the default system color for the control if the argument
- * is null.
- *
- * @param color
- * the new color (or null)
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument 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.3
- */
- /* public */void setBackground(Color color) {
- checkWidget();
- if (color != null) {
- if (color.isDisposed()) {
- SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- }
- }
- Color oldColor = background;
- if (color == null) {
- background = null;
- } else {
- if (color.equals(background)) {
- return;
- }
- background = color;
- }
- if (oldColor != null) {
- oldColor.dispose();
- }
- updateBackground();
- }
-
- /**
- * Sets the receiver's background image to the image specified by the
- * argument, or to the default system color for the control if the argument
- * is null. The background image is tiled to fill the available space.
- *
- * @param image
- * the new image (or null)
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument has been
- * disposed</li>
- * <li>ERROR_INVALID_ARGUMENT - if the argument is not a
- * bitmap</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.3
- */
- /* public */void setBackgroundImage(Image image) {
- checkWidget();
- if (image != null) {
- if (image.isDisposed()) {
- error(SWT.ERROR_INVALID_ARGUMENT);
- }
- if (!image.isBitmap()) {
- error(SWT.ERROR_INVALID_ARGUMENT);
- }
- }
- if (backgroundImage == image) {
- return;
- }
- backgroundImage = image;
- updateBackground();
- }
-
- /**
- * Sets the receiver's foreground color to the color specified by the
- * argument, or to the default system color for the control if the argument
- * is null.
- *
- * @param color
- * the new color (or null)
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the argument 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.3
- */
- /* public */void setForeground(Color color) {
- checkWidget();
- if (color != null) {
- if (color.isDisposed()) {
- SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- }
- }
- Color oldColor = foreground;
- if (color == null) {
- foreground = null;
- } else {
- if (color.equals(foreground)) {
- return;
- }
- foreground = color;
- }
- if (oldColor != null) {
- oldColor.dispose();
- }
- applyForegroundColor(foreground);
- }
-
- /**
- * Sets the default menu item to the argument or removes the default
- * emphasis when the argument is <code>null</code>.
- *
- * @param item
- * the default menu item or null
- *
- * @exception IllegalArgumentException
- * <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the menu item 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>
- */
- public void setDefaultItem(MenuItem item) {
- checkWidget();
- if (item != null) {
- if (item.isDisposed()) {
- error(SWT.ERROR_INVALID_ARGUMENT);
- }
- if (item.parent != this) {
- return;
- }
- if (!isMenuBar()) {
- getQMenu().setDefaultAction(item.getQAction());
- }
- } else {
- if (!isMenuBar()) {
- getQMenu().setDefaultAction(null);
- }
- }
- }
-
- /**
- * Enables the receiver if the argument is <code>true</code>, and disables
- * it otherwise. A disabled menu is typically not selectable from the user
- * interface and draws with an inactive or "grayed" look.
- *
- * @param enabled
- * the new enabled 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>
- */
- public void setEnabled(boolean enabled) {
- checkWidget();
- getQWidget().setEnabled(enabled);
- getQWidget().update();
- }
-
- /**
- * Sets the location of the receiver, which must be a popup, to the point
- * specified by the arguments which are relative to the display.
- * <p>
- * Note that this is different from most widgets where the location of the
- * widget is relative to the parent.
- * </p>
- * <p>
- * Note that the platform window manager ultimately has control over the
- * location of popup menus.
- * </p>
- *
- * @param x
- * the new x coordinate for the receiver
- * @param y
- * the new y coordinate 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>
- */
- public void setLocation(int x, int y) {
- checkWidget();
- if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) {
- return;
- }
- this.x = x;
- this.y = y;
- hasLocation = true;
- }
-
- /**
- * Sets the location of the receiver, which must be a popup, to the point
- * specified by the argument which is relative to the display.
- * <p>
- * Note that this is different from most widgets where the location of the
- * widget is relative to the parent.
- * </p>
- * <p>
- * Note that the platform window manager ultimately has control over the
- * location of popup menus.
- * </p>
- *
- * @param location
- * the new location 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 2.1
- */
- public void setLocation(Point location) {
- checkWidget();
- if (location == null) {
- SWT.error(SWT.ERROR_NULL_ARGUMENT);
- }
- setLocation(location.x, location.y);
- }
-
- /**
- * Marks the receiver as visible if the argument is <code>true</code>, and
- * marks it invisible otherwise.
- * <p>
- * If one of the receiver's ancestors is not visible or some other condition
- * makes the receiver not visible, marking it visible may not actually cause
- * it to be displayed.
- * </p>
- *
- * @param visible
- * the new visibility 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>
- */
- public void setVisible(boolean visible) {
- checkWidget();
- if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) {
- return;
- }
- if (visible) {
- display.addPopup(this);
- if (hasLocation) {
- getQMenu().move(x, y);
- }
- getQMenu().setVisible(true);
- } else {
- display.removePopup(this);
- _setVisible(false);
- }
- }
-
- @Override
- public boolean qtHideEvent(QObject source) {
- if (source == getQWidget()) {
- if (!isDisposed()) {
- sendEvent(SWT.Hide);
- }
- }
- return super.qtHideEvent(source);
- }
-
- @Override
- public boolean qtShowEvent(QObject source) {
- if (source == getQWidget()) {
- if (!isDisposed()) {
- sendEvent(SWT.Show);
- }
- }
- return super.qtShowEvent(source);
- }
-
- void updateBackground() {
- if (backgroundImage != null) {
- applyBackgroundImage(backgroundImage);
- return;
- }
- if (background != null) {
- applyBackgroundColor(background);
- return;
- }
- }
-
- private void applyBackgroundColor(Color color) {
- updatedPalette(color, getBackgroundColorRoles());
- updateAutoFillBackground();
- }
-
- private void updatedPalette(Color color, ColorRole[] colorRoles) {
- QPalette palette = getQWidget().palette();
- if (color != null) {
- QColor qColor = new QColor(color.getColor());
- for (ColorRole role : colorRoles) {
- palette.setColor(role, qColor);
- }
- } else {
- QPalette defaultPalette = QApplication.palette();
- for (ColorRole role : colorRoles) {
- QBrush brush = defaultPalette.brush(role);
- palette.setBrush(role, brush);
- }
- }
- getQWidget().setPalette(palette);
- }
-
- private QPalette.ColorRole[] getBackgroundColorRoles() {
- return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base, QPalette.ColorRole.Button };
- }
-
- private void updateAutoFillBackground() {
- if (background != null || backgroundImage != null) {
- getQWidget().setAutoFillBackground(true);
- }
- }
-
- private void applyBackgroundImage(Image image) {
- QPalette palette = getQWidget().palette().clone();
- try {
- setPaletteBgImage(palette, image);
- getQWidget().setPalette(palette);
- } finally {
- palette.dispose();
- }
- updateAutoFillBackground();
- }
-
- private void setPaletteBgImage(QPalette palette, Image image) {
- ColorRole[] bkRoles = getBackgroundImageRoles();
- if (image != null) {
- for (ColorRole bkRole : bkRoles) {
- palette.setBrush(bkRole, new QBrush(image.getQPixmap()));
- }
- } else {
- QPalette defaultPalette = QApplication.palette();
- for (ColorRole role : bkRoles) {
- QBrush brush = defaultPalette.brush(role);
- palette.setBrush(role, brush.clone());
- }
- }
- }
-
- private ColorRole[] getBackgroundImageRoles() {
- return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base };
- }
-
- private void applyForegroundColor(Color color) {
- updatedPalette(color, getForegroundColorRoles());
- }
-
- private ColorRole[] getForegroundColorRoles() {
- return new ColorRole[] { QPalette.ColorRole.WindowText, QPalette.ColorRole.Text, QPalette.ColorRole.ButtonText };
- }
-}