X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fmenu%2FTMenu.java;h=6a875c7c8377f154e9cafb07b064cde7ab889d3d;hb=505be508ae7d3fb48122be548b310a238cfb91eb;hp=8a8ec6be752d1443e60969baa5505671a567279f;hpb=e9bb3c1e57e52ea19a153059a3f42656ea6ed51c;p=fanfix.git diff --git a/src/jexer/menu/TMenu.java b/src/jexer/menu/TMenu.java index 8a8ec6b..6a875c7 100644 --- a/src/jexer/menu/TMenu.java +++ b/src/jexer/menu/TMenu.java @@ -37,6 +37,7 @@ import jexer.TWindow; import jexer.bits.CellAttributes; import jexer.bits.GraphicsChars; import jexer.bits.MnemonicString; +import jexer.bits.StringUtils; import jexer.event.TKeypressEvent; import jexer.event.TMouseEvent; import static jexer.TKeypress.*; @@ -61,7 +62,7 @@ public class TMenu extends TWindow { // Tools menu public static final int MID_REPAINT = 1; public static final int MID_VIEW_IMAGE = 2; - public static final int MID_CHANGE_FONT = 3; + public static final int MID_SCREEN_OPTIONS = 3; // File menu public static final int MID_NEW = 10; @@ -71,10 +72,12 @@ public class TMenu extends TWindow { public static final int MID_SHELL = 13; // Edit menu - public static final int MID_CUT = 20; - public static final int MID_COPY = 21; - public static final int MID_PASTE = 22; - public static final int MID_CLEAR = 23; + public static final int MID_UNDO = 20; + public static final int MID_REDO = 21; + public static final int MID_CUT = 22; + public static final int MID_COPY = 23; + public static final int MID_PASTE = 24; + public static final int MID_CLEAR = 25; // Search menu public static final int MID_FIND = 30; @@ -128,8 +131,9 @@ public class TMenu extends TWindow { public static final int MID_TABLE_INSERT_BELOW = 107; public static final int MID_TABLE_COLUMN_NARROW = 110; public static final int MID_TABLE_COLUMN_WIDEN = 111; - public static final int MID_TABLE_FILE_SAVE_CSV = 115; - public static final int MID_TABLE_FILE_SAVE_TEXT = 116; + public static final int MID_TABLE_FILE_OPEN_CSV = 115; + public static final int MID_TABLE_FILE_SAVE_CSV = 116; + public static final int MID_TABLE_FILE_SAVE_TEXT = 117; // ------------------------------------------------------------------------ // Variables -------------------------------------------------------------- @@ -150,6 +154,11 @@ public class TMenu extends TWindow { */ private MnemonicString mnemonic; + /** + * If true, draw icons with menu items. Note package private access. + */ + boolean useIcons = false; + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -176,10 +185,15 @@ public class TMenu extends TWindow { assert (mnemonic.getShortcutIdx() >= 0); // Recompute width and height to reflect an empty menu - setWidth(getTitle().length() + 4); + setWidth(StringUtils.width(getTitle()) + 4); setHeight(2); setActive(false); + + if (System.getProperty("jexer.menuIcons", "false").equals("true")) { + useIcons = true; + } + } // ------------------------------------------------------------------------ @@ -270,15 +284,21 @@ public class TMenu extends TWindow { /* System.err.printf("keypress: %s active child: %s\n", keypress, getActiveChild()); - */ + */ if (getActiveChild() != this) { - if ((getActiveChild() instanceof TSubMenu) - || (getActiveChild() instanceof TMenu) - ) { + if (getActiveChild() instanceof TMenu) { getActiveChild().onKeypress(keypress); return; } + + if (getActiveChild() instanceof TSubMenu) { + TSubMenu subMenu = (TSubMenu) getActiveChild(); + if (subMenu.menu.isActive()) { + subMenu.onKeypress(keypress); + return; + } + } } if (keypress.equals(kbEsc)) { @@ -310,12 +330,18 @@ public class TMenu extends TWindow { if (!keypress.getKey().isFnKey() && !keypress.getKey().isAlt() && !keypress.getKey().isCtrl()) { + + // System.err.println("Checking children for mnemonic..."); + for (TWidget widget: getChildren()) { TMenuItem item = (TMenuItem) widget; - if ((item.getMnemonic() != null) + if ((item.isEnabled() == true) + && (item.getMnemonic() != null) && (Character.toLowerCase(item.getMnemonic().getShortcut()) == Character.toLowerCase(keypress.getKey().getChar())) ) { + // System.err.println("activate: " + item); + // Send an enter keystroke to it activate(item); item.handleEvent(new TKeypressEvent(kbEnter)); @@ -417,7 +443,6 @@ public class TMenu extends TWindow { * @return the new menu item */ public TMenuItem addItem(final int id, final String label) { - assert (id >= 1024); return addItemInternal(id, label, null); } @@ -433,7 +458,7 @@ public class TMenu extends TWindow { final boolean enabled) { assert (id >= 1024); - return addItemInternal(id, label, null, enabled); + return addItemInternal(id, label, null, enabled, -1); } /** @@ -479,7 +504,7 @@ public class TMenu extends TWindow { private TMenuItem addItemInternal(final int id, final String label, final TKeypress key) { - return addItemInternal(id, label, key, true); + return addItemInternal(id, label, key, true, -1); } /** @@ -489,15 +514,16 @@ public class TMenu extends TWindow { * @param label menu item label * @param key global keyboard accelerator * @param enabled default state for enabled + * @param icon icon picture/emoji * @return the new menu item */ private TMenuItem addItemInternal(final int id, final String label, - final TKeypress key, final boolean enabled) { + final TKeypress key, final boolean enabled, final int icon) { int newY = getChildren().size() + 1; assert (newY < getHeight()); - TMenuItem menuItem = new TMenuItem(this, id, 1, newY, label); + TMenuItem menuItem = new TMenuItem(this, id, 1, newY, label, icon); menuItem.setKey(key); menuItem.setEnabled(enabled); setHeight(getHeight() + 1); @@ -538,6 +564,7 @@ public class TMenu extends TWindow { String label; TKeypress key = null; + int icon = -1; boolean checkable = false; boolean checked = false; @@ -545,53 +572,69 @@ public class TMenu extends TWindow { case MID_REPAINT: label = i18n.getString("menuRepaintDesktop"); + icon = 0x1F3A8; break; case MID_VIEW_IMAGE: label = i18n.getString("menuViewImage"); break; - case MID_CHANGE_FONT: - label = i18n.getString("menuChangeFont"); + case MID_SCREEN_OPTIONS: + label = i18n.getString("menuScreenOptions"); break; case MID_NEW: label = i18n.getString("menuNew"); + icon = 0x1F5CE; break; case MID_EXIT: label = i18n.getString("menuExit"); key = kbAltX; + icon = 0x1F5D9; break; case MID_SHELL: label = i18n.getString("menuShell"); + icon = 0x1F5AE; break; case MID_OPEN_FILE: label = i18n.getString("menuOpen"); key = kbF3; + icon = 0x1F5C1; break; + case MID_UNDO: + label = i18n.getString("menuUndo"); + key = kbCtrlZ; + break; + case MID_REDO: + label = i18n.getString("menuRedo"); + key = kbCtrlY; + break; case MID_CUT: label = i18n.getString("menuCut"); key = kbCtrlX; + icon = 0x1F5F6; break; case MID_COPY: label = i18n.getString("menuCopy"); key = kbCtrlC; + icon = 0x1F5D0; break; case MID_PASTE: label = i18n.getString("menuPaste"); key = kbCtrlV; + icon = 0x1F4CB; break; case MID_CLEAR: label = i18n.getString("menuClear"); - // key = kbDel; break; case MID_FIND: label = i18n.getString("menuFind"); + icon = 0x1F50D; break; case MID_REPLACE: label = i18n.getString("menuReplace"); @@ -609,6 +652,7 @@ public class TMenu extends TWindow { break; case MID_CASCADE: label = i18n.getString("menuWindowCascade"); + icon = 0x1F5D7; break; case MID_CLOSE_ALL: label = i18n.getString("menuWindowCloseAll"); @@ -616,18 +660,22 @@ public class TMenu extends TWindow { case MID_WINDOW_MOVE: label = i18n.getString("menuWindowMove"); key = kbCtrlF5; + icon = 0x263C; break; case MID_WINDOW_ZOOM: label = i18n.getString("menuWindowZoom"); key = kbF5; + icon = 0x2195; break; case MID_WINDOW_NEXT: label = i18n.getString("menuWindowNext"); key = kbF6; + icon = 0x2192; break; case MID_WINDOW_PREVIOUS: label = i18n.getString("menuWindowPrevious"); key = kbShiftF6; + icon = 0x2190; break; case MID_WINDOW_CLOSE: label = i18n.getString("menuWindowClose"); @@ -659,6 +707,12 @@ public class TMenu extends TWindow { label = i18n.getString("menuHelpAbout"); break; + case MID_TABLE_RENAME_COLUMN: + label = i18n.getString("menuTableRenameColumn"); + break; + case MID_TABLE_RENAME_ROW: + label = i18n.getString("menuTableRenameRow"); + break; case MID_TABLE_VIEW_ROW_LABELS: label = i18n.getString("menuTableViewRowLabels"); checkable = true; @@ -742,6 +796,9 @@ public class TMenu extends TWindow { label = i18n.getString("menuTableColumnWiden"); key = kbShiftRight; break; + case MID_TABLE_FILE_OPEN_CSV: + label = i18n.getString("menuTableFileOpenCsv"); + break; case MID_TABLE_FILE_SAVE_CSV: label = i18n.getString("menuTableFileSaveCsv"); break; @@ -753,7 +810,7 @@ public class TMenu extends TWindow { throw new IllegalArgumentException("Invalid menu ID: " + id); } - TMenuItem item = addItemInternal(id, label, key, enabled); + TMenuItem item = addItemInternal(id, label, key, enabled, icon); item.setCheckable(checkable); return item; }