X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fmenu%2FTMenu.java;h=99add703c18fe2d9e59d241bb325b549c16638f1;hb=8582f35a3ffb8212463076217eb89278f42331d4;hp=da349bf3ccc7d7faa5dbf066b7cad7f51be8c258;hpb=928811d8e292801029b7b6605453524f65e9ebd9;p=fanfix.git diff --git a/src/jexer/menu/TMenu.java b/src/jexer/menu/TMenu.java index da349bf..99add70 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; } @@ -321,7 +316,7 @@ public final class TMenu extends TWindow { * @param key global keyboard accelerator * @return the new menu item */ - public TMenuItem addItem(final int id, final String label, + public final TMenuItem addItem(final int id, final String label, final TKeypress key) { assert (id >= 1024); @@ -351,7 +346,7 @@ public final class TMenu extends TWindow { for (TWidget widget: getChildren()) { widget.setWidth(getWidth() - 2); } - getApplication().addAccelerator(menuItem, toLower(key)); + getApplication().addAccelerator(menuItem, key.toLowerCase()); getApplication().recomputeMenuX(); activate(0); return menuItem; @@ -364,7 +359,7 @@ public final class TMenu extends TWindow { * @param label menu item label * @return the new menu item */ - public TMenuItem addItem(final int id, final String label) { + public final TMenuItem addItem(final int id, final String label) { assert (id >= 1024); return addItemInternal(id, label); } @@ -400,7 +395,7 @@ public final class TMenu extends TWindow { * (inclusive). * @return the new menu item */ - public TMenuItem addDefaultItem(final int id) { + public final TMenuItem addDefaultItem(final int id) { assert (id >= 0); assert (id < 1024); @@ -439,7 +434,8 @@ public final class TMenu extends TWindow { break; case MID_CLEAR: label = "C&lear"; - key = kbDel; + hasKey = false; + // key = kbDel; break; case MID_TILE: @@ -472,7 +468,8 @@ public final class TMenu extends TWindow { break; case MID_WINDOW_CLOSE: label = "&Close"; - key = kbCtrlW; + hasKey = false; + // key = kbCtrlW; break; default: @@ -488,11 +485,13 @@ public final class TMenu extends TWindow { /** * Convenience function to add a menu separator. */ - public void addSeparator() { + public final void addSeparator() { 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); } @@ -503,7 +502,7 @@ public final class TMenu extends TWindow { * denoted by prefixing a letter with "&", e.g. "&File" * @return the new sub-menu */ - public TSubMenu addSubMenu(final String title) { + public final TSubMenu addSubMenu(final String title) { int newY = getChildren().size() + 1; assert (newY < getHeight());