X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fmenu%2FTMenu.java;h=8915c0c290a93eaf52325e4130d78eb9f9a21bec;hb=e16dda65585466c8987bd1efd718431450a96605;hp=51cc343e8606164291af84a252e561fec695625b;hpb=daa4106c096cd4d2b92c3cbae6491edccd25fcc4;p=nikiroo-utils.git diff --git a/src/jexer/menu/TMenu.java b/src/jexer/menu/TMenu.java index 51cc343..8915c0c 100644 --- a/src/jexer/menu/TMenu.java +++ b/src/jexer/menu/TMenu.java @@ -1,29 +1,27 @@ /* * Jexer - Java Text User Interface * - * License: LGPLv3 or later + * The MIT License (MIT) * - * This module is licensed under the GNU Lesser General Public License - * Version 3. Please see the file "COPYING" in this directory for more - * information about the GNU Lesser General Public License Version 3. + * Copyright (C) 2016 Kevin Lamonte * - * Copyright (C) 2015 Kevin Lamonte + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 3 of - * the License, or (at your option) any later version. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see - * http://www.gnu.org/licenses/, or write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * @author Kevin Lamonte [kevin.lamonte@gmail.com] * @version 1 @@ -241,8 +239,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; } @@ -261,9 +267,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)) { @@ -303,18 +307,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 TMenuItem addItem(final int id, final String label) { assert (id >= 1024); - return addItemInternal(id, label, key); + return addItemInternal(id, label, null); } /** @@ -325,51 +326,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 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); @@ -377,6 +356,7 @@ public final class TMenu extends TWindow { for (TWidget widget: getChildren()) { widget.setWidth(getWidth() - 2); } + getApplication().addMenuItem(menuItem); getApplication().recomputeMenuX(); activate(0); return menuItem; @@ -389,13 +369,12 @@ public final class TMenu extends TWindow { * (inclusive). * @return the new menu item */ - public final TMenuItem addDefaultItem(final int id) { + public TMenuItem addDefaultItem(final int id) { assert (id >= 0); assert (id < 1024); String label; TKeypress key = null; - boolean hasKey = true; switch (id) { @@ -406,7 +385,6 @@ public final class TMenu extends TWindow { case MID_SHELL: label = "O&S Shell"; - hasKey = false; break; case MID_OPEN_FILE: @@ -428,21 +406,17 @@ public final class TMenu extends TWindow { break; case MID_CLEAR: label = "C&lear"; - hasKey = false; // 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"; @@ -462,7 +436,6 @@ public final class TMenu extends TWindow { break; case MID_WINDOW_CLOSE: label = "&Close"; - hasKey = false; // key = kbCtrlW; break; @@ -470,16 +443,13 @@ public final class TMenu extends TWindow { throw new IllegalArgumentException("Invalid menu ID: " + id); } - if (hasKey) { - return addItemInternal(id, label, key); - } - return addItemInternal(id, label); + return addItemInternal(id, label, key); } /** * Convenience function to add a menu separator. */ - public final void addSeparator() { + public void addSeparator() { int newY = getChildren().size() + 1; assert (newY < getHeight()); @@ -496,7 +466,7 @@ public final class TMenu extends TWindow { * denoted by prefixing a letter with "&", e.g. "&File" * @return the new sub-menu */ - public final TSubMenu addSubMenu(final String title) { + public TSubMenu addSubMenu(final String title) { int newY = getChildren().size() + 1; assert (newY < getHeight());