X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fmenu%2FTMenu.java;h=6dfb5fcfabe71f2f1d961572c0a877045b0e85a2;hb=efb7af1f330223bfe9ac67112149d7a3f1b68421;hp=c9938084b3d47e9a1808041cefdc19a09eb1fc60;hpb=e826b451baf0d1e66d09ce03a6fefee2eb8386f5;p=fanfix.git diff --git a/src/jexer/menu/TMenu.java b/src/jexer/menu/TMenu.java index c993808..6dfb5fc 100644 --- a/src/jexer/menu/TMenu.java +++ b/src/jexer/menu/TMenu.java @@ -1,4 +1,4 @@ -/** +/* * Jexer - Java Text User Interface * * License: LGPLv3 or later @@ -126,16 +126,9 @@ public final class TMenu extends TWindow { */ @Override public void draw() { - CellAttributes menuColor; CellAttributes background = getTheme().getColor("tmenu"); - if (getAbsoluteActive()) { - menuColor = getTheme().getColor("tmenu.highlighted"); - } else { - menuColor = getTheme().getColor("tmenu"); - } - - assert (getAbsoluteActive()); + assert (isAbsoluteActive()); // Fill in the interior background for (int i = 0; i < getHeight(); i++) { @@ -177,7 +170,6 @@ public final class TMenu extends TWindow { @Override public void onMouseDown(final TMouseEvent mouse) { this.mouse = mouse; - setRepaint(); // Pass to children for (TWidget widget: getChildren()) { @@ -202,7 +194,6 @@ public final class TMenu extends TWindow { @Override public void onMouseUp(final TMouseEvent mouse) { this.mouse = mouse; - setRepaint(); // Pass to children for (TWidget widget: getChildren()) { @@ -227,11 +218,10 @@ public final class TMenu extends TWindow { @Override public void onMouseMotion(final TMouseEvent mouse) { this.mouse = mouse; - setRepaint(); // See if we should activate a different menu item for (TWidget widget: getChildren()) { - if ((mouse.getMouse1()) + if ((mouse.isMouse1()) && (widget.mouseWouldHit(mouse)) ) { // Activate this menu item @@ -251,8 +241,16 @@ public final class TMenu extends TWindow { */ @Override public void onKeypress(final TKeypressEvent keypress) { - if (getActiveChild() != null) { - if (getActiveChild() instanceof TSubMenu) { + + /* + System.err.printf("keypress: %s active child: %s\n", keypress, + getActiveChild()); + */ + + if (getActiveChild() != this) { + if ((getActiveChild() instanceof TSubMenu) + || (getActiveChild() instanceof TMenu) + ) { getActiveChild().onKeypress(keypress); return; } @@ -271,9 +269,7 @@ public final class TMenu extends TWindow { return; } if (keypress.equals(kbRight)) { - if (!isSubMenu) { - getApplication().switchMenu(true); - } + getApplication().switchMenu(true); return; } if (keypress.equals(kbLeft)) { @@ -286,14 +282,14 @@ public final class TMenu extends TWindow { } // Switch to a menuItem if it has an mnemonic - if (!keypress.getKey().getIsKey() - && !keypress.getKey().getAlt() - && !keypress.getKey().getCtrl()) { + if (!keypress.getKey().isFnKey() + && !keypress.getKey().isAlt() + && !keypress.getKey().isCtrl()) { for (TWidget widget: getChildren()) { TMenuItem item = (TMenuItem) widget; if ((item.getMnemonic() != null) && (Character.toLowerCase(item.getMnemonic().getShortcut()) - == Character.toLowerCase(keypress.getKey().getCh())) + == Character.toLowerCase(keypress.getKey().getChar())) ) { // Send an enter keystroke to it activate(item); @@ -305,8 +301,7 @@ public final class TMenu extends TWindow { // Dispatch the keypress to an active widget for (TWidget widget: getChildren()) { - if (widget.getActive()) { - setRepaint(); + if (widget.isActive()) { widget.handleEvent(keypress); return; } @@ -314,18 +309,15 @@ public final class TMenu extends TWindow { } /** - * Convenience function to add a custom menu item. + * Convenience function to add a menu item. * * @param id menu item ID. Must be greater than 1024. * @param label menu item label - * @param key global keyboard accelerator * @return the new menu item */ - public final TMenuItem addItem(final int id, final String label, - final TKeypress key) { - + public final TMenuItem addItem(final int id, final String label) { assert (id >= 1024); - return addItemInternal(id, label, key); + return addItemInternal(id, label, null); } /** @@ -336,51 +328,29 @@ public final class TMenu extends TWindow { * @param key global keyboard accelerator * @return the new menu item */ - private TMenuItem addItemInternal(final int id, final String label, + public final TMenuItem addItem(final int id, final String label, final TKeypress key) { - int newY = getChildren().size() + 1; - assert (newY < getHeight()); - - TMenuItem menuItem = new TMenuItem(this, id, 1, newY, label); - menuItem.setKey(key); - setHeight(getHeight() + 1); - if (menuItem.getWidth() + 2 > getWidth()) { - setWidth(menuItem.getWidth() + 2); - } - for (TWidget widget: getChildren()) { - widget.setWidth(getWidth() - 2); - } - getApplication().addAccelerator(menuItem, key.toLowerCase()); - getApplication().recomputeMenuX(); - activate(0); - return menuItem; + assert (id >= 1024); + return addItemInternal(id, label, key); } /** - * Convenience function to add a menu item. + * Convenience function to add a custom menu item. * * @param id menu item ID. Must be greater than 1024. * @param label menu item label + * @param key global keyboard accelerator * @return the new menu item */ - public final TMenuItem addItem(final int id, final String label) { - assert (id >= 1024); - return addItemInternal(id, label); - } + private TMenuItem addItemInternal(final int id, final String label, + final TKeypress key) { - /** - * Convenience function to add a menu item. - * - * @param id menu item ID - * @param label menu item label - * @return the new menu item - */ - private TMenuItem addItemInternal(final int id, final String label) { int newY = getChildren().size() + 1; assert (newY < getHeight()); TMenuItem menuItem = new TMenuItem(this, id, 1, newY, label); + menuItem.setKey(key); setHeight(getHeight() + 1); if (menuItem.getWidth() + 2 > getWidth()) { setWidth(menuItem.getWidth() + 2); @@ -388,6 +358,7 @@ public final class TMenu extends TWindow { for (TWidget widget: getChildren()) { widget.setWidth(getWidth() - 2); } + getApplication().addMenuItem(menuItem); getApplication().recomputeMenuX(); activate(0); return menuItem; @@ -406,7 +377,6 @@ public final class TMenu extends TWindow { String label; TKeypress key = null; - boolean hasKey = true; switch (id) { @@ -417,7 +387,6 @@ public final class TMenu extends TWindow { case MID_SHELL: label = "O&S Shell"; - hasKey = false; break; case MID_OPEN_FILE: @@ -439,20 +408,17 @@ public final class TMenu extends TWindow { break; case MID_CLEAR: label = "C&lear"; - key = kbDel; + // key = kbDel; break; case MID_TILE: label = "&Tile"; - hasKey = false; break; case MID_CASCADE: label = "C&ascade"; - hasKey = false; break; case MID_CLOSE_ALL: label = "Cl&ose All"; - hasKey = false; break; case MID_WINDOW_MOVE: label = "&Size/Move"; @@ -472,17 +438,14 @@ public final class TMenu extends TWindow { break; case MID_WINDOW_CLOSE: label = "&Close"; - key = kbCtrlW; + // key = kbCtrlW; break; default: throw new IllegalArgumentException("Invalid menu ID: " + id); } - if (hasKey) { - return addItemInternal(id, label, key); - } - return addItemInternal(id, label); + return addItemInternal(id, label, key); } /** @@ -492,7 +455,9 @@ public final class TMenu extends TWindow { int newY = getChildren().size() + 1; assert (newY < getHeight()); - TMenuItem menuItem = new TMenuSeparator(this, 1, newY); + // We just have to construct it, don't need to hang onto what it + // makes. + new TMenuSeparator(this, 1, newY); setHeight(getHeight() + 1); }