19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  this work for additional information regarding copyright ownership.
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  the License.  You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.event.FocusListener;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.event.MouseEvent;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.peer.MenuComponentPeer;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.Serializable;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Locale; //import javax.accessibility.Accessible;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//import javax.accessibility.AccessibleComponent;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//import javax.accessibility.AccessibleContext;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//import javax.accessibility.AccessibleRole;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//import javax.accessibility.AccessibleSelection;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//import javax.accessibility.AccessibleStateSet;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.MultiRectArea;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.state.MenuItemState;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.state.MenuState;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.luni.util.NotImplementedException;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The MenuComponent abstract class is the superclass for menu components. Menu
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * components receive and process AWT events.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class MenuComponent implements Serializable {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant serialVersionUID.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final long serialVersionUID = -4536902356223894379L;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The name.
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String name;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The font.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Font font;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The parent.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MenuContainer parent;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The deprecated event handler.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean deprecatedEventHandler = true;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The selected item index.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int selectedItemIndex;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT: private AccessibleContext accessibleContext;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The toolkit.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final Toolkit toolkit = Toolkit.getDefaultToolkit();
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * protected abstract class AccessibleAWTMenuComponent extends
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AccessibleContext implements Serializable, AccessibleComponent,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AccessibleSelection { private static final long serialVersionUID =
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * -4269533416223798698L; public void addFocusListener(FocusListener
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * listener) { } public boolean contains(Point pt) { return false; } public
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Accessible getAccessibleAt(Point pt) { return null; } public Color
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getBackground() { return null; } public Rectangle getBounds() { return
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * null; } public Cursor getCursor() { return null; } public Font getFont()
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * { return MenuComponent.this.getFont(); } public FontMetrics
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getFontMetrics(Font font) { return null; } public Color getForeground() {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return null; } public Point getLocation() { return null; } public Point
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getLocationOnScreen() { return null; } public Dimension getSize() {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return null; } public boolean isEnabled() { return true; // always
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * enabled } public boolean isFocusTraversable() { return true; // always
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * focus traversable } public boolean isShowing() { return true;// always
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * showing } public boolean isVisible() { return true; // always visible }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * public void removeFocusListener(FocusListener listener) { } public void
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requestFocus() { } public void setBackground(Color color) { } public void
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * setBounds(Rectangle rect) { } public void setCursor(Cursor cursor) { }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * public void setEnabled(boolean enabled) { } public void setFont(Font
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * font) { MenuComponent.this.setFont(font); } public void
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * setForeground(Color color) { } public void setLocation(Point pt) { }
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * public void setSize(Dimension pt) { } public void setVisible(boolean
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * visible) { } public void addAccessibleSelection(int index) { } public
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * void clearAccessibleSelection() { } public Accessible
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getAccessibleSelection(int index) { return null; } public int
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getAccessibleSelectionCount() { return 0; } public boolean
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * isAccessibleChildSelected(int index) { return false; } public void
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removeAccessibleSelection(int index) { } public void
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * selectAllAccessibleSelection() { }
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public Accessible getAccessibleChild(int index) { return null;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public int getAccessibleChildrenCount() { return 0; }
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public AccessibleComponent getAccessibleComponent() { return
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this; }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public String getAccessibleDescription() { return
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * super.getAccessibleDescription(); }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public int getAccessibleIndexInParent() { toolkit.lockAWT();
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * try { Accessible aParent = getAccessibleParent(); int aIndex = -1; if
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (aParent instanceof MenuComponent) { MenuComponent parent =
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (MenuComponent) aParent; int count = parent.getItemCount(); for (int i =
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * 0; i < count; i++) { MenuComponent comp = parent.getItem(i); if (comp
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instanceof Accessible) { aIndex++; if (comp == MenuComponent.this) {
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return aIndex; } } } } return -1; } finally { toolkit.unlockAWT(); } }
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public String getAccessibleName() { return
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * super.getAccessibleName(); }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public Accessible getAccessibleParent() { toolkit.lockAWT();
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * try { Accessible aParent = super.getAccessibleParent(); if (aParent !=
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * null) { return aParent; } MenuContainer parent = getParent(); if (parent
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instanceof Accessible) { aParent = (Accessible) parent; } return aParent;
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * } finally { toolkit.unlockAWT(); } }
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public AccessibleRole getAccessibleRole() { return
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AccessibleRole.AWT_COMPONENT; }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public AccessibleSelection getAccessibleSelection() { return
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this; }
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public AccessibleStateSet getAccessibleStateSet() { return new
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AccessibleStateSet(); }
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override public Locale getLocale() { return Locale.getDefault(); } }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The accessor to MenuComponent internal state, utilized by the visual
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * theme.
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws HeadlessException
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             the headless exception.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class State implements MenuState { Dimension size; Dimension getSize() {
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if (size == null) { calculate(); } return size; } public int getWidth() {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return getSize().width; } public int getHeight() { return
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getSize().height; } public Font getFont() { return
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuComponent.this.getFont(); } public int getItemCount() { return
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuComponent.this.getItemCount(); } public int getSelectedItemIndex() {
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return MenuComponent.this.getSelectedItemIndex(); } public boolean
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * isFontSet() { return MenuComponent.this.isFontSet(); }
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @SuppressWarnings("deprecation") public FontMetrics getFontMetrics(Font
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * f) { return MenuComponent.this.toolkit.getFontMetrics(f); } public Point
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getLocation() { return MenuComponent.this.getLocation(); } public
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuItemState getItem(int index) { MenuItem item =
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuComponent.this.getItem(index); return item.itemState; } public void
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * setSize(int w, int h) { this.size = new Dimension(w, h); } void
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calculate() { size = new Dimension();
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * size.setSize(toolkit.theme.calculateMenuSize(this)); } void reset() { for
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (int i = 0; i < getItemCount(); i++) { ((MenuItem.State)
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getItem(i)).reset(); } } }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Pop-up box for menu. It transfers the paint events, keyboard and mouse
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * events to the menu component itself.
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class MenuPopupBox extends PopupBox { private final Point lastMousePos =
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * new Point();
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override boolean isMenu() { return true; }
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override void paint(Graphics gr) { MenuComponent.this.paint(gr); }
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override void onKeyEvent(int eventId, int vKey, long when, int
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * modifiers) { MenuComponent.this.onKeyEvent(eventId, vKey, when,
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * modifiers); }
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @Override void onMouseEvent(int eventId, Point where, int mouseButton,
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * long when, int modifiers, int wheelRotation) { // prevent conflict of
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * mouse and keyboard // when sub-menu drops down due to keyboard navigation
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if (lastMousePos.equals(where) && (eventId == MouseEvent.MOUSE_MOVED ||
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * eventId == MouseEvent.MOUSE_ENTERED)) { return; }
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * lastMousePos.setLocation(where); MenuComponent.this.onMouseEvent(eventId,
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * where, mouseButton, when, modifiers); } }
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new MenuComponent object.
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws HeadlessException
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             if the graphical interface environment can't support
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             MenuComponents.
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MenuComponent() throws HeadlessException {
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Toolkit.checkHeadless();
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            name = autoName();
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            selectedItemIndex = -1;
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the name of the MenuComponent object.
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the name of the MenuComponent object.
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getName() {
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return name;
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a String representation of the MenuComponent object.
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a String representation of the MenuComponent object.
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return getClass().getName() + "[" + paramString() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the parent menu container.
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the parent.
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MenuContainer getParent() {
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return parent;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the name of the MenuComponent to the specified string.
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the new name of the MenuComponent object.
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setName(String name) {
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.name = name;
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Dispatches AWT event.
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param event
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the AWTEvent.
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void dispatchEvent(AWTEvent event) {
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processEvent(event);
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (deprecatedEventHandler) {
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                postDeprecatedEvent(event);
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Post deprecated event.
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param event
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the event.
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void postDeprecatedEvent(AWTEvent event) {
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Event evt = event.getEvent();
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (evt != null) {
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postEvent(evt);
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the peer of the MenuComponent; an application must not use this
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * method directly.
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the MenuComponentPeer object.
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws NotImplementedException
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             if this method is not implemented by a subclass.
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @deprecated an application must not use this method directly.
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Deprecated
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MenuComponentPeer getPeer() throws org.apache.harmony.luni.util.NotImplementedException {
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (true) {
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new RuntimeException("Method is not implemented"); //TODO: implement //$NON-NLS-1$
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the locking object of this MenuComponent.
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the locking object of this MenuComponent.
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected final Object getTreeLock() {
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return toolkit.awtTreeLock;
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Posts the Event to the MenuComponent.
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param e
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Event.
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if the event is posted successfully, false otherwise.
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @deprecated Replaced dispatchEvent method.
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SuppressWarnings("deprecation")
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Deprecated
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean postEvent(Event e) {
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (parent != null) {
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return parent.postEvent(e);
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the string representation of the MenuComponent state.
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return returns the string representation of the MenuComponent state.
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected String paramString() {
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return getName();
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * public AccessibleContext getAccessibleContext() { toolkit.lockAWT(); try
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * { if (accessibleContext == null) { accessibleContext =
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * createAccessibleContext(); } return accessibleContext; } finally {
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * toolkit.unlockAWT(); } }
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the font of the MenuComponent object.
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the Font of the MenuComponent object.
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Font getFont() {
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (font == null && hasDefaultFont()) {
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return toolkit.getDefaultFont();
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (font == null && parent != null) {
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return parent.getFont();
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return font;
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Checks if is font set.
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if is font set
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean isFontSet() {
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return font != null
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || ((parent instanceof MenuComponent) && ((MenuComponent)parent).isFontSet());
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Checks for default font.
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if successful.
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean hasDefaultFont() {
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Processes an AWTEevent on this menu component.
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param event
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the AWTEvent.
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void processEvent(AWTEvent event) {
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // do nothing
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Removes the peer of the MenuComponent.
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeNotify() {
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the Font for this MenuComponent object.
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param font
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the new Font to be used for this MenuComponent.
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setFont(Font font) {
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        toolkit.lockAWT();
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.font = font;
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            toolkit.unlockAWT();
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the parent.
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param parent
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the new parent.
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setParent(MenuContainer parent) {
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.parent = parent;
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the location.
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the location.
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Point getLocation() {
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Point(0, 0);
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the width.
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the width.
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getWidth() {
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the height.
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the height.
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getHeight() {
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recursively find the menu item for a menu shortcut.
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param gr
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the gr.
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the menu item; or null if the item is not available for this
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         shortcut.
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuItem getShortcutMenuItemImpl(MenuShortcut ms) { if (ms == null) {
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return null; } for (int i = 0; i < getItemCount(); i++) { MenuItem mi =
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getItem(i); if (mi instanceof Menu) { mi = ((Menu)
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * mi).getShortcutMenuItemImpl(ms); if (mi != null) { return mi; } } else if
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (ms.equals(mi.getShortcut())) { return mi; } } return null; }
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void paint(Graphics gr) {
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gr.setColor(Color.LIGHT_GRAY);
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gr.fillRect(0, 0, getWidth(), getHeight());
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gr.setColor(Color.BLACK);
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Mouse events handler.
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param eventId
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            one of the MouseEvent.MOUSE_* constants.
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param where
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            mouse location.
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mouseButton
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            mouse button that was pressed or released.
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param when
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            event time.
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modifiers
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            input event modifiers.
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void onMouseEvent(int eventId, Point where, int mouseButton, long when, int modifiers) {
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Keyboard event handler.
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param eventId
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            one of the KeyEvent.KEY_* constants.
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param vKey
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the key code.
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param when
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            event time.
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modifiers
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            input event modifiers.
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void onKeyEvent(int eventId, int vKey, long when, int modifiers) {
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Post the ActionEvent or ItemEvent, depending on type of the menu item.
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param index
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index.
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the item rect.
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * void fireItemAction(int item, long when, int modifiers) { MenuItem mi =
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getItem(item); mi.itemSelected(when, modifiers); } MenuItem getItem(int
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * index) { // to be overridden return null; } int getItemCount() { return
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * 0; }
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The sub-menu of currently selecetd item, or null if such a
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         sub-menu is not available.
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Menu getSelectedSubmenu() { if (selectedItemIndex < 0) { return null; }
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuItem item = getItem(selectedItemIndex); return (item instanceof Menu)
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * ? (Menu) item : null; }
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Convenience method for selectItem(index, true).
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * void selectItem(int index) { selectItem(index, true); }
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Change the selection in the menu.
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param index
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            new selecetd item's index.
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param showSubMenu
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            if new selected item has a sub-menu, should that sub-menu be
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            displayed.
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * void selectItem(int index, boolean showSubMenu) { if (selectedItemIndex
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * == index) { return; } if (selectedItemIndex >= 0 &&
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getItem(selectedItemIndex) instanceof Menu) { ((Menu)
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getItem(selectedItemIndex)).hide(); } MultiRectArea clip =
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getUpdateClip(index, selectedItemIndex); selectedItemIndex = index;
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Graphics gr = getGraphics(clip); if (gr != null) { paint(gr); } if
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (showSubMenu) { showSubMenu(selectedItemIndex); } }
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Change the selected item to the next one in the requested direction
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * moving cyclically, skipping separators
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param forward
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the direction to move the selection.
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param showSubMenu
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            if new selected item has a sub-menu, should that sub-menu be
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            displayed.
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * void selectNextItem(boolean forward, boolean showSubMenu) { int selected
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * = getSelectedItemIndex(); int count = getItemCount(); if (count == 0) {
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * return; } if (selected < 0) { selected = (forward ? count - 1 : 0); } int
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * i = selected; do { i = (forward ? (i + 1) : (i + count - 1)) % count; i
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * %= count; MenuItem item = getItem(i); if (!"-".equals(item.getLabel())) {
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * //$NON-NLS-1$ selectItem(i, showSubMenu); return; } } while (i !=
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * selected); } void showSubMenu(int index) { if ((index < 0) ||
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * !isActive()) { return; } MenuItem item = getItem(index); if (item
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instanceof Menu) { Menu menu = ((Menu) getItem(index)); if
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (menu.getItemCount() == 0) { return; } Point location =
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getSubmenuLocation(index); menu.show(location.x, location.y, false); } }
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the menu bar which is the root of current menu's hierarchy; or
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         null if the hierarchy root is not a menu bar.
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MenuBar getMenuBar() { if (parent instanceof MenuBar) { return (MenuBar)
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * parent; } if (parent instanceof MenuComponent) { return ((MenuComponent)
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * parent).getMenuBar(); } return null; } PopupBox getPopupBox() { return
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * null; }
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Rectangle getItemRect(int index) {
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine the clip region when menu selection is changed from index1 to
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * index2.
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param index1
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            old selected item.
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param index2
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            new selected item.
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the region to repaint.
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    final MultiRectArea getUpdateClip(int index1, int index2) {
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MultiRectArea clip = new MultiRectArea();
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (index1 >= 0) {
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            clip.add(getItemRect(index1));
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (index2 >= 0) {
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            clip.add(getItemRect(index2));
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return clip;
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the submenu location.
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param index
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index.
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the submenu location.
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Point getSubmenuLocation(int index) {
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Point(0, 0);
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the selected item index.
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the selected item index.
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int getSelectedItemIndex() {
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return selectedItemIndex;
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Hide.
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void hide() {
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        selectedItemIndex = -1;
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (parent instanceof MenuComponent) {
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ((MenuComponent)parent).itemHidden(this);
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Item hidden.
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mc
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the mc.
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void itemHidden(MenuComponent mc) {
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Checks if is visible.
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if is visible.
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean isVisible() {
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Checks if is active.
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if is active.
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean isActive() {
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Hide all menu hierarchy.
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void endMenu() {
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // ???AWT: toolkit.dispatcher.popupDispatcher.deactivateAll();
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Handle the mouse click or Enter key event on a menu's item.
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param when
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the event time.
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modifiers
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            input event modifiers.
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void itemSelected(long when, int modifiers) {
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        endMenu();
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Auto name.
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the string.
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String autoName() {
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String name = getClass().getName();
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (name.indexOf("$") != -1) { //$NON-NLS-1$
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // ???AWT: int number = toolkit.autoNumber.nextMenuComponent++;
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int number = 0;
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        name = name.substring(name.lastIndexOf(".") + 1) + Integer.toString(number); //$NON-NLS-1$
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return name;
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Creates the Graphics object for the pop-up box of this menu component.
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param clip
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the clip to set on this Graphics.
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the created Graphics object, or null if such object is not
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         available.
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Graphics getGraphics(MultiRectArea clip) {
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // to be overridden
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return accessible context specific for particular menu component.
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ???AWT
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AccessibleContext createAccessibleContext() { return null; }
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
784