forked from dorkbox/SystemTray
WIP adding mnemonic support for windows/mac
This commit is contained in:
parent
f0fe9fa9a2
commit
d4ac42d21f
@ -15,11 +15,13 @@
|
||||
*/
|
||||
package dorkbox.systemTray.swing;
|
||||
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JMenuItem;
|
||||
|
||||
import dorkbox.systemTray.Menu;
|
||||
import dorkbox.systemTray.MenuEntry;
|
||||
@ -69,6 +71,23 @@ class SwingEntry implements MenuEntry {
|
||||
_native.setEnabled(enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
void setShortcut(final char key) {
|
||||
if (_native instanceof JMenuItem) {
|
||||
// yikes...
|
||||
final int vKey = getVkKey(key);
|
||||
|
||||
parent.dispatch(new Runnable() {
|
||||
@Override
|
||||
public
|
||||
void run() {
|
||||
((JMenuItem) _native).setMnemonic(vKey);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
String getText() {
|
||||
@ -188,4 +207,114 @@ class SwingEntry implements MenuEntry {
|
||||
SwingEntry other = (SwingEntry) obj;
|
||||
return this.id == other.id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a key character into it's corresponding VK entry
|
||||
*/
|
||||
static
|
||||
int getVkKey(final char key) {
|
||||
switch (key) {
|
||||
case 0x08: return KeyEvent.VK_BACK_SPACE;
|
||||
case 0x09: return KeyEvent.VK_TAB;
|
||||
case 0x0a: return KeyEvent.VK_ENTER;
|
||||
case 0x1B: return KeyEvent.VK_ESCAPE;
|
||||
case 0x20AC: return KeyEvent.VK_EURO_SIGN;
|
||||
case 0x20: return KeyEvent.VK_SPACE;
|
||||
case 0x21: return KeyEvent.VK_EXCLAMATION_MARK;
|
||||
case 0x22: return KeyEvent.VK_QUOTEDBL;
|
||||
case 0x23: return KeyEvent.VK_NUMBER_SIGN;
|
||||
case 0x24: return KeyEvent.VK_DOLLAR;
|
||||
case 0x26: return KeyEvent.VK_AMPERSAND;
|
||||
case 0x27: return KeyEvent.VK_QUOTE;
|
||||
case 0x28: return KeyEvent.VK_LEFT_PARENTHESIS;
|
||||
case 0x29: return KeyEvent.VK_RIGHT_PARENTHESIS;
|
||||
case 0x2A: return KeyEvent.VK_ASTERISK;
|
||||
case 0x2B: return KeyEvent.VK_PLUS;
|
||||
case 0x2C: return KeyEvent.VK_COMMA;
|
||||
case 0x2D: return KeyEvent.VK_MINUS;
|
||||
case 0x2E: return KeyEvent.VK_PERIOD;
|
||||
case 0x2F: return KeyEvent.VK_SLASH;
|
||||
case 0x30: return KeyEvent.VK_0;
|
||||
case 0x31: return KeyEvent.VK_1;
|
||||
case 0x32: return KeyEvent.VK_2;
|
||||
case 0x33: return KeyEvent.VK_3;
|
||||
case 0x34: return KeyEvent.VK_4;
|
||||
case 0x35: return KeyEvent.VK_5;
|
||||
case 0x36: return KeyEvent.VK_6;
|
||||
case 0x37: return KeyEvent.VK_7;
|
||||
case 0x38: return KeyEvent.VK_8;
|
||||
case 0x39: return KeyEvent.VK_9;
|
||||
case 0x3A: return KeyEvent.VK_COLON;
|
||||
case 0x3B: return KeyEvent.VK_SEMICOLON;
|
||||
case 0x3C: return KeyEvent.VK_LESS;
|
||||
case 0x3D: return KeyEvent.VK_EQUALS;
|
||||
case 0x3E: return KeyEvent.VK_GREATER;
|
||||
case 0x40: return KeyEvent.VK_AT;
|
||||
case 0x41: return KeyEvent.VK_A;
|
||||
case 0x42: return KeyEvent.VK_B;
|
||||
case 0x43: return KeyEvent.VK_C;
|
||||
case 0x44: return KeyEvent.VK_D;
|
||||
case 0x45: return KeyEvent.VK_E;
|
||||
case 0x46: return KeyEvent.VK_F;
|
||||
case 0x47: return KeyEvent.VK_G;
|
||||
case 0x48: return KeyEvent.VK_H;
|
||||
case 0x49: return KeyEvent.VK_I;
|
||||
case 0x4A: return KeyEvent.VK_J;
|
||||
case 0x4B: return KeyEvent.VK_K;
|
||||
case 0x4C: return KeyEvent.VK_L;
|
||||
case 0x4D: return KeyEvent.VK_M;
|
||||
case 0x4E: return KeyEvent.VK_N;
|
||||
case 0x4F: return KeyEvent.VK_O;
|
||||
case 0x50: return KeyEvent.VK_P;
|
||||
case 0x51: return KeyEvent.VK_Q;
|
||||
case 0x52: return KeyEvent.VK_R;
|
||||
case 0x53: return KeyEvent.VK_S;
|
||||
case 0x54: return KeyEvent.VK_T;
|
||||
case 0x55: return KeyEvent.VK_U;
|
||||
case 0x56: return KeyEvent.VK_V;
|
||||
case 0x57: return KeyEvent.VK_W;
|
||||
case 0x58: return KeyEvent.VK_X;
|
||||
case 0x59: return KeyEvent.VK_Y;
|
||||
case 0x5A: return KeyEvent.VK_Z;
|
||||
case 0x5B: return KeyEvent.VK_OPEN_BRACKET;
|
||||
case 0x5C: return KeyEvent.VK_BACK_SLASH;
|
||||
case 0x5D: return KeyEvent.VK_CLOSE_BRACKET;
|
||||
case 0x5E: return KeyEvent.VK_CIRCUMFLEX;
|
||||
case 0x5F: return KeyEvent.VK_UNDERSCORE;
|
||||
case 0x60: return KeyEvent.VK_BACK_QUOTE;
|
||||
case 0x61: return KeyEvent.VK_A;
|
||||
case 0x62: return KeyEvent.VK_B;
|
||||
case 0x63: return KeyEvent.VK_C;
|
||||
case 0x64: return KeyEvent.VK_D;
|
||||
case 0x65: return KeyEvent.VK_E;
|
||||
case 0x66: return KeyEvent.VK_F;
|
||||
case 0x67: return KeyEvent.VK_G;
|
||||
case 0x68: return KeyEvent.VK_H;
|
||||
case 0x69: return KeyEvent.VK_I;
|
||||
case 0x6A: return KeyEvent.VK_J;
|
||||
case 0x6B: return KeyEvent.VK_K;
|
||||
case 0x6C: return KeyEvent.VK_L;
|
||||
case 0x6D: return KeyEvent.VK_M;
|
||||
case 0x6E: return KeyEvent.VK_N;
|
||||
case 0x6F: return KeyEvent.VK_O;
|
||||
case 0x70: return KeyEvent.VK_P;
|
||||
case 0x71: return KeyEvent.VK_Q;
|
||||
case 0x72: return KeyEvent.VK_R;
|
||||
case 0x73: return KeyEvent.VK_S;
|
||||
case 0x74: return KeyEvent.VK_T;
|
||||
case 0x75: return KeyEvent.VK_U;
|
||||
case 0x76: return KeyEvent.VK_V;
|
||||
case 0x77: return KeyEvent.VK_W;
|
||||
case 0x78: return KeyEvent.VK_X;
|
||||
case 0x79: return KeyEvent.VK_Y;
|
||||
case 0x7A: return KeyEvent.VK_Z;
|
||||
case 0x7B: return KeyEvent.VK_BRACELEFT;
|
||||
case 0x7D: return KeyEvent.VK_BRACERIGHT;
|
||||
case 0x7F: return KeyEvent.VK_DELETE;
|
||||
case 0xA1: return KeyEvent.VK_INVERTED_EXCLAMATION_MARK;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,11 @@ class SwingEntrySeparator extends SwingEntry implements MenuSpacer {
|
||||
void removePrivate() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
void setShortcut(final char key) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
boolean hasImage() {
|
||||
|
@ -50,6 +50,11 @@ class SwingEntryStatus extends SwingEntry implements MenuStatus {
|
||||
void removePrivate() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
void setShortcut(final char key) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
boolean hasImage() {
|
||||
|
Loading…
Reference in New Issue
Block a user