207 lines
4.9 KiB
Java
207 lines
4.9 KiB
Java
|
/*
|
||
|
|
||
|
Copyright 2006 Rene Grothmann, modified by Eric Hakenholz
|
||
|
|
||
|
This file is part of C.a.R. software.
|
||
|
|
||
|
C.a.R. is a free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, version 3 of the License.
|
||
|
|
||
|
C.a.R. 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 General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
package rene.gui;
|
||
|
|
||
|
import java.util.StringTokenizer;
|
||
|
|
||
|
import rene.dialogs.ItemEditorElement;
|
||
|
import rene.util.sort.SortObject;
|
||
|
|
||
|
/**
|
||
|
* A keyboard item. Can be constructed from a menu string (like
|
||
|
* editor.file.open) and a key string (like control.o). Can test a key event, if
|
||
|
* it fits.
|
||
|
*/
|
||
|
|
||
|
public class KeyboardItem implements ItemEditorElement, SortObject {
|
||
|
boolean Shift, Control, Alt;
|
||
|
String CharKey;
|
||
|
String MenuString, ActionName;
|
||
|
int CommandType = 0;
|
||
|
|
||
|
/**
|
||
|
* Copy constructor, for use in editing (clone).
|
||
|
*/
|
||
|
public KeyboardItem(final KeyboardItem item) {
|
||
|
Shift = item.Shift;
|
||
|
Control = item.Control;
|
||
|
Alt = item.Alt;
|
||
|
CharKey = item.CharKey;
|
||
|
MenuString = item.MenuString;
|
||
|
ActionName = item.ActionName;
|
||
|
CommandType = item.CommandType;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param charkey
|
||
|
* The keyboard descriptive character (like "page down")
|
||
|
* @param menustring
|
||
|
* The menu item (may have some *s added)
|
||
|
* @param actionname
|
||
|
* The description of the menu item.
|
||
|
* @param shift
|
||
|
* ,control,alt Modifier flags.
|
||
|
* @param commandtype
|
||
|
* The command key, that is needed (0 is none).
|
||
|
*/
|
||
|
public KeyboardItem(final String charkey, final String menustring,
|
||
|
final String actionname, final boolean shift,
|
||
|
final boolean control, final boolean alt, final int commandtype) {
|
||
|
Shift = shift;
|
||
|
Control = control;
|
||
|
Alt = alt;
|
||
|
CharKey = charkey.toLowerCase();
|
||
|
MenuString = menustring;
|
||
|
ActionName = actionname;
|
||
|
CommandType = commandtype;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param menu
|
||
|
* The menu string.
|
||
|
* @param key
|
||
|
* The key descripion a la "esc1.shift.control.e"
|
||
|
*/
|
||
|
public KeyboardItem(final String menu, final String key) {
|
||
|
MenuString = menu;
|
||
|
Shift = Control = Alt = false;
|
||
|
CommandType = 0;
|
||
|
CharKey = "";
|
||
|
final StringTokenizer t = new StringTokenizer(key, ".");
|
||
|
while (t.hasMoreTokens()) {
|
||
|
final String token = (String) t.nextToken();
|
||
|
if (t.hasMoreTokens()) {
|
||
|
if (token.equals("control"))
|
||
|
Control = true;
|
||
|
else if (token.equals("shift"))
|
||
|
Shift = true;
|
||
|
else if (token.equals("alt"))
|
||
|
Alt = true;
|
||
|
else if (token.startsWith("esc"))
|
||
|
// esc should be followed by a number
|
||
|
{
|
||
|
try {
|
||
|
CommandType = Integer.parseInt(token.substring(3));
|
||
|
} catch (final Exception e) {
|
||
|
}
|
||
|
} else
|
||
|
return;
|
||
|
} else {
|
||
|
if (key.equals(""))
|
||
|
return;
|
||
|
CharKey = token.toLowerCase();
|
||
|
}
|
||
|
}
|
||
|
ActionName = Global.name(getStrippedMenuString());
|
||
|
}
|
||
|
|
||
|
public String getMenuString() {
|
||
|
return MenuString;
|
||
|
}
|
||
|
|
||
|
public String getActionName() {
|
||
|
return ActionName;
|
||
|
}
|
||
|
|
||
|
public String getCharKey() {
|
||
|
return CharKey;
|
||
|
}
|
||
|
|
||
|
public boolean isShift() {
|
||
|
return Shift;
|
||
|
}
|
||
|
|
||
|
public boolean isControl() {
|
||
|
return Control;
|
||
|
}
|
||
|
|
||
|
public boolean isAlt() {
|
||
|
return Alt;
|
||
|
}
|
||
|
|
||
|
public int getCommandType() {
|
||
|
return CommandType;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get a menu string, which is stripped from stars.
|
||
|
*/
|
||
|
public String getStrippedMenuString() {
|
||
|
String s = MenuString;
|
||
|
while (s.endsWith("*"))
|
||
|
s = s.substring(0, s.length() - 1);
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Compute a visible shortcut to append after the menu items (like
|
||
|
* "(Ctr O)". The modifiers depend on the language.
|
||
|
*/
|
||
|
public String shortcut() {
|
||
|
if (CharKey.equals("none"))
|
||
|
return "";
|
||
|
String s = CharKey.toUpperCase();
|
||
|
if (Alt)
|
||
|
s = Global.name("shortcut.alt") + " " + s;
|
||
|
if (Control)
|
||
|
s = Global.name("shortcut.control") + " " + s;
|
||
|
if (Shift)
|
||
|
s = Global.name("shortcut.shift") + " " + s;
|
||
|
if (CommandType > 0)
|
||
|
s = Keyboard.commandShortcut(CommandType) + " " + s;
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the name of this KeyboardItem element.
|
||
|
*/
|
||
|
public String getName() {
|
||
|
return MenuString;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method of SortObject, necessary to sort the keys by name.
|
||
|
*/
|
||
|
public int compare(final SortObject o) {
|
||
|
return getName().compareTo(((KeyboardItem) o).getName());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return a key description for this item (to save as parameter). This
|
||
|
* should be the same as the key parameter in the constructor.
|
||
|
*/
|
||
|
public String keyDescription() {
|
||
|
String s = CharKey.toLowerCase();
|
||
|
if (s.equals("none") || s.equals("default"))
|
||
|
return s;
|
||
|
if (Alt)
|
||
|
s = "alt." + s;
|
||
|
if (Control)
|
||
|
s = "control." + s;
|
||
|
if (Shift)
|
||
|
s = "shift." + s;
|
||
|
if (CommandType > 0)
|
||
|
s = "esc" + CommandType + "." + s;
|
||
|
return s;
|
||
|
}
|
||
|
}
|