/*
* Copyright 2000-2016 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.ui.declarative.converters;
import java.io.Serializable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.event.ShortcutAction.ModifierKey;
/**
* Provides mappings between shortcut keycodes and their representation in
* design attributes. Contains a default framework implementation as a field.
*
* @since 7.4
* @author Vaadin Ltd
*/
public interface ShortcutKeyMapper extends Serializable {
/**
* Gets the key code for a given string.
*
* @param attributePresentation
* String
* @return Key code.
*/
public int getKeycodeForString(String attributePresentation);
/**
* Returns a string for a given key code.
*
* @param keyCode
* Key code.
* @return String.
*/
public String getStringForKeycode(int keyCode);
/**
* An instance of a default keymapper.
*/
public static final ShortcutKeyMapper DEFAULT = new ShortcutKeyMapper() {
private final Map<Integer, String> keyCodeMap = new ConcurrentHashMap<>();
private final Map<String, Integer> presentationMap = new ConcurrentHashMap<>();
{
// map modifiers
mapKey(ModifierKey.ALT, "alt");
mapKey(ModifierKey.CTRL, "ctrl");
mapKey(ModifierKey.META, "meta");
mapKey(ModifierKey.SHIFT, "shift");
// map keys
mapKey(KeyCode.ENTER, "enter");
mapKey(KeyCode.ESCAPE, "escape");
mapKey(KeyCode.PAGE_UP, "pageup");
mapKey(KeyCode.PAGE_DOWN, "pagedown");
mapKey(KeyCode.TAB, "tab");
mapKey(KeyCode.ARROW_LEFT, "left");
mapKey(KeyCode.ARROW_UP, "up");
mapKey(KeyCode.ARROW_RIGHT, "right");
mapKey(KeyCode.ARROW_DOWN, "down");
mapKey(KeyCode.BACKSPACE, "backspace");
mapKey(KeyCode.DELETE, "delete");
mapKey(KeyCode.INSERT, "insert");
mapKey(KeyCode.END, "end");
mapKey(KeyCode.HOME, "home");
mapKey(KeyCode.F1, "f1");
mapKey(KeyCode.F2, "f2");
mapKey(KeyCode.F3, "f3");
mapKey(KeyCode.F4, "f4");
mapKey(KeyCode.F5, "f5");
mapKey(KeyCode.F6, "f6");
mapKey(KeyCode.F7, "f7");
mapKey(KeyCode.F8, "f8");
mapKey(KeyCode.F9, "f9");
mapKey(KeyCode.F10, "f10");
mapKey(KeyCode.F11, "f11");
mapKey(KeyCode.F12, "f12");
mapKey(KeyCode.NUM0, "0");
mapKey(KeyCode.NUM1, "1");
mapKey(KeyCode.NUM2, "2");
mapKey(KeyCode.NUM3, "3");
mapKey(KeyCode.NUM4, "4");
mapKey(KeyCode.NUM5, "5");
mapKey(KeyCode.NUM6, "6");
mapKey(KeyCode.NUM7, "7");
mapKey(KeyCode.NUM8, "8");
mapKey(KeyCode.NUM9, "9");
mapKey(KeyCode.SPACEBAR, "spacebar");
mapKey(KeyCode.A, "a");
mapKey(KeyCode.B, "b");
mapKey(KeyCode.C, "c");
mapKey(KeyCode.D, "d");
mapKey(KeyCode.E, "e");
mapKey(KeyCode.F, "f");
mapKey(KeyCode.G, "g");
mapKey(KeyCode.H, "h");
mapKey(KeyCode.I, "i");
mapKey(KeyCode.J, "j");
mapKey(KeyCode.K, "k");
mapKey(KeyCode.L, "l");
mapKey(KeyCode.M, "m");
mapKey(KeyCode.N, "n");
mapKey(KeyCode.O, "o");
mapKey(KeyCode.P, "p");
mapKey(KeyCode.Q, "q");
mapKey(KeyCode.R, "r");
mapKey(KeyCode.S, "s");
mapKey(KeyCode.T, "t");
mapKey(KeyCode.U, "u");
mapKey(KeyCode.V, "v");
mapKey(KeyCode.X, "x");
mapKey(KeyCode.Y, "y");
mapKey(KeyCode.Z, "z");
}
private void mapKey(int keyCode, String presentation) {
keyCodeMap.put(keyCode, presentation);
presentationMap.put(presentation, keyCode);
}
@Override
public int getKeycodeForString(String attributePresentation) {
Integer code = presentationMap.get(attributePresentation);
return code != null ? code.intValue() : -1;
}
@Override
public String getStringForKeycode(int keyCode) {
return keyCodeMap.get(keyCode);
}
};
}