/* @ITMillApache2LicenseForJavaFiles@ */ package com.itmill.toolkit.demo; import java.util.Date; import com.itmill.toolkit.Application; import com.itmill.toolkit.event.Action; import com.itmill.toolkit.event.ShortcutAction; import com.itmill.toolkit.event.Action.Handler; import com.itmill.toolkit.ui.Button; import com.itmill.toolkit.ui.HorizontalLayout; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.Panel; import com.itmill.toolkit.ui.TextField; import com.itmill.toolkit.ui.VerticalLayout; import com.itmill.toolkit.ui.Window; /** * Test application for KeyboardShortcuts */ public class KeyboardShortcut extends Application implements Handler { private VerticalLayout loki; private final Label instructions = new Label( "

Keyboard shortcuts is a must have feature for applications in a " + "daily use. In IT Mill toolkit shortcuts are binded to " + "Panel and its subclasses like Windows (most common place)." + "

" + "

Browsers reserve some keyboard combinations for their own" + " actions, so all combinations cannot be used in web " + "applications. (see our article on " + "www.itmill.com)

" + "

Focus must be inside web application (eg. not in address " + "bar) for shortcuts to work. By default app element is focused.

" + "Shortcuts used in this example: " + "
ESC restarts program, ctrl-shift-a (Button A), " + "ctrl-shift-z (Button Z), ctrl-shift-x (Button X)", Label.CONTENT_XHTML); private final Action ACTION_A = new ShortcutAction("Button a action", ShortcutAction.KeyCode.A, new int[] { ShortcutAction.ModifierKey.CTRL, ShortcutAction.ModifierKey.SHIFT }); private final Action ACTION_Z = new ShortcutAction("Button z action", ShortcutAction.KeyCode.Z, new int[] { ShortcutAction.ModifierKey.CTRL, ShortcutAction.ModifierKey.SHIFT }); private final Action ACTION_X = new ShortcutAction("Button x action", ShortcutAction.KeyCode.X, new int[] { ShortcutAction.ModifierKey.CTRL, ShortcutAction.ModifierKey.SHIFT }); private final Action ACTION_RESTART = new ShortcutAction("Restart ", ShortcutAction.KeyCode.ESCAPE, null); private final Action[] actions = new Action[] { ACTION_A, ACTION_Z, ACTION_X, ACTION_RESTART }; private TextField f; public void init() { final Window w = new Window("Keyboard shortcuts demo"); final VerticalLayout main = new VerticalLayout(); main.setMargin(true); main.setSpacing(true); setMainWindow(w); w.setLayout(main); final Panel p = new Panel("Test application for shortcut actions"); p.addComponent(instructions); final HorizontalLayout buttons = new HorizontalLayout(); // Restart button final Button close = new Button("restart", this, "close"); final Button a = new Button("Button A", this, "actionAHandler"); final Button z = new Button("Button Z", this, "actionZHandler"); final Button x = new Button("Button X", this, "actionXHandler"); f = new TextField(); buttons.addComponent(close); buttons.addComponent(a); buttons.addComponent(z); buttons.addComponent(x); buttons.addComponent(f); p.addComponent(buttons); main.addComponent(p); loki = new VerticalLayout(); main.addComponent(loki); main.setExpandRatio(loki,1.0f); w.addActionHandler(this); } public Action[] getActions(Object target, Object sender) { return actions; } public void handleAction(Action action, Object sender, Object target) { if (action == ACTION_A) { actionAHandler(); } if (action == ACTION_Z) { actionZHandler(); } if (action == ACTION_X) { actionXHandler(); } if (action == ACTION_RESTART) { actionRestartHandler(); } } public void actionAHandler() { log("Button A handler fired"); } public void actionZHandler() { log("Button Z handler fired"); } public void actionXHandler() { log("Button X handler fired"); } public void actionRestartHandler() { close(); } public void log(String s) { loki.addComponentAsFirst(new Label(new Date() + " : " + s)); } }