2 * Jexer - Java Text User Interface
4 * License: LGPLv3 or later
6 * This module is licensed under the GNU Lesser General Public License
7 * Version 3. Please see the file "COPYING" in this directory for more
8 * information about the GNU Lesser General Public License Version 3.
10 * Copyright (C) 2015 Kevin Lamonte
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 3 of
15 * the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this program; if not, see
24 * http://www.gnu.org/licenses/, or write to the Free Software
25 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
28 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
33 import jexer
.TKeypress
;
35 import jexer
.bits
.CellAttributes
;
36 import jexer
.bits
.GraphicsChars
;
37 import jexer
.event
.TKeypressEvent
;
38 import static jexer
.TKeypress
.*;
41 * TSubMenu is a special case menu item that wraps another TMenu.
43 public final class TSubMenu
extends TMenuItem
{
46 * The menu window. Note package private access.
51 * Package private constructor.
53 * @param parent parent widget
54 * @param title menu title. Title must contain a keyboard shortcut,
55 * denoted by prefixing a letter with "&", e.g. "&File"
56 * @param x column relative to parent
57 * @param y row relative to parent
59 TSubMenu(final TMenu parent
, final String title
, final int x
, final int y
) {
60 super(parent
, TMenu
.MID_UNUSED
, x
, y
, title
);
65 this.menu
= new TMenu(parent
.getApplication(), x
, getAbsoluteY() - 1,
67 setWidth(menu
.getWidth() + 2);
69 this.menu
.isSubMenu
= true;
73 * Draw the menu title.
79 CellAttributes menuColor
;
80 if (isAbsoluteActive()) {
81 menuColor
= getTheme().getColor("tmenu.highlighted");
84 menuColor
= getTheme().getColor("tmenu");
86 menuColor
= getTheme().getColor("tmenu.disabled");
91 getScreen().putCharXY(getWidth() - 2, 0, GraphicsChars
.CP437
[0x10],
98 * @param keypress keystroke event
101 public void onKeypress(final TKeypressEvent keypress
) {
103 if (menu
.isActive()) {
104 menu
.onKeypress(keypress
);
108 if (keypress
.equals(kbEnter
)) {
113 if (keypress
.equals(kbRight
)) {
118 if (keypress
.equals(kbDown
)) {
119 getParent().switchWidget(true);
123 if (keypress
.equals(kbUp
)) {
124 getParent().switchWidget(false);
128 if (keypress
.equals(kbLeft
)) {
129 TMenu parentMenu
= (TMenu
) getParent();
130 if (parentMenu
.isSubMenu
) {
131 getApplication().closeSubMenu();
133 getApplication().switchMenu(false);
138 if (keypress
.equals(kbEsc
)) {
139 getApplication().closeMenu();
145 * Override dispatch() to do nothing.
148 public void dispatch() {
149 assert (isEnabled());
150 if (isAbsoluteActive()) {
151 if (!menu
.isActive()) {
152 getApplication().addSubMenu(menu
);
153 menu
.setActive(true);
159 * Returns my active widget.
161 * @return widget that is active, or this if no children
164 public TWidget
getActiveChild() {
165 if (menu
.isActive()) {
168 // Menu not active, return me
173 * Convenience function to add a custom menu item.
175 * @param id menu item ID. Must be greater than 1024.
176 * @param label menu item label
177 * @param key global keyboard accelerator
178 * @return the new menu item
180 public TMenuItem
addItem(final int id
, final String label
,
181 final TKeypress key
) {
183 return menu
.addItem(id
, label
, key
);
187 * Convenience function to add a menu item.
189 * @param id menu item ID. Must be greater than 1024.
190 * @param label menu item label
191 * @return the new menu item
193 public TMenuItem
addItem(final int id
, final String label
) {
194 return menu
.addItem(id
, label
);
198 * Convenience function to add one of the default menu items.
200 * @param id menu item ID. Must be between 0 (inclusive) and 1023
202 * @return the new menu item
204 public TMenuItem
addDefaultItem(final int id
) {
205 return menu
.addDefaultItem(id
);
209 * Convenience function to add a menu separator.
211 public void addSeparator() {
216 * Convenience function to add a sub-menu.
218 * @param title menu title. Title must contain a keyboard shortcut,
219 * denoted by prefixing a letter with "&", e.g. "&File"
220 * @return the new sub-menu
222 public TSubMenu
addSubMenu(final String title
) {
223 return menu
.addSubMenu(title
);