package com.baselet.gwt.client.keyboard; import com.google.gwt.event.dom.client.KeyCodeEvent; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.shared.EventHandler; public enum Shortcut { // DIAGRAM SHORTCUTS DELETE_ELEMENT("DELETE BACKSPACE", "delete the currently selected elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return code == KeyCodes.KEY_DELETE || code == KeyCodes.KEY_BACKSPACE; } }), SELECT_ALL("Ctrl+A", "select all elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && code == 'A'; } }), DESELECT_ALL("Ctrl+Shift+A Ctrl+D", "deselect all elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && code == 'D' || event.isControlKeyDown() && event.isShiftKeyDown() && code == 'A'; } }), COPY("Ctrl+C", "copy selected elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && code == 'C'; } }), CUT("Ctrl+X", "cut selected elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && code == 'X'; } }), PASTE("Ctrl+V", "paste cut or copied elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && code == 'V'; } }), SAVE("Ctrl+S", "save current diagram in browser storage", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && code == 'S'; } }), DISABLE_STICKING("SHIFT", "hold to disable sticking of elements", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return code == KeyCodes.KEY_SHIFT; } }), MOVE_UP("Cursor ↑", "moves selected element(s) up", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return code == KeyCodes.KEY_UP; } }), MOVE_DOWN("Cursor ↓", "moves selected element(s) down", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return code == KeyCodes.KEY_DOWN; } }), MOVE_LEFT("Cursor ←", "moves selected element(s) left", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return code == KeyCodes.KEY_LEFT; } }), MOVE_RIGHT("Cursor →", "moves selected element(s) right", Category.DIAGRAM, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return code == KeyCodes.KEY_RIGHT; } }), // BROWSER SHORTCUTS FULLSCREEN("F11", "switch to fullscreen", Category.BROWSER, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return KeyCodesExt.isSwitchToFullscreen(code); } }), ZOOM_IN("Ctrl+PLUS", "zoom diagram in", Category.BROWSER, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && KeyCodesExt.isPlus(code); } }), ZOOM_OUT("Ctrl+MINUS", "zoom diagram out", Category.BROWSER, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && KeyCodesExt.isMinus(code); } }), ZOOM_RESET("Ctrl+0", "reset diagram zoom", Category.BROWSER, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && KeyCodesExt.isZero(code); } }), // PROPERTIES PANEL SHORTCUTS SHOW_AUTOCOMPLETION("Ctrl+SPACE", "Show all autocompletion suggestions", Category.PROPERTIES, new Check() { @Override public boolean check(int code, KeyCodeEvent<? extends EventHandler> event) { return event.isControlKeyDown() && KeyCodesExt.isSpace(code); } }), ; private static interface Check { public boolean check(int code, KeyCodeEvent<? extends EventHandler> event); } public enum Category { DIAGRAM("DIAGRAM"), BROWSER("BROWSER (only if browser supports them)"), PROPERTIES("PROPERTIES PANEL"); private String header; private Category(String header) { this.header = header; } public String getHeader() { return header; } } private String shortcut; private String description; private Category category; private Check check; Shortcut(String shortcut, String description, Category category, Check check) { this.shortcut = shortcut; this.description = description; this.category = category; this.check = check; } public boolean matches(KeyCodeEvent<? extends EventHandler> event) { return check.check(event.getNativeKeyCode(), event); } public String getShortcut() { return shortcut; } public String getDescription() { return description; } public Category getCategory() { return category; } }