/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.vaadin.client; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.vaadin.terminal.gwt.client.ui.VTextField; public class VNumericField extends VTextField { public VNumericField() { super(); addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent e) { if (e.getCharCode() == KeyCodes.KEY_BACKSPACE || e.getCharCode() == KeyCodes.KEY_DELETE || e.getCharCode() == KeyCodes.KEY_END || e.getCharCode() == KeyCodes.KEY_ENTER || e.getCharCode() == KeyCodes.KEY_ESCAPE || e.getCharCode() == KeyCodes.KEY_HOME || e.getCharCode() == KeyCodes.KEY_LEFT || e.getCharCode() == KeyCodes.KEY_PAGEDOWN || e.getCharCode() == KeyCodes.KEY_PAGEUP || e.getCharCode() == KeyCodes.KEY_RIGHT || e.getCharCode() == KeyCodes.KEY_TAB || e.isAnyModifierKeyDown()) return; if (!Character.isDigit(e.getCharCode())) e.preventDefault(); } }); addKeyDownHandler(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { try { if (event.getNativeKeyCode() == KeyCodes.KEY_UP) { int value = Integer.parseInt(getValue()); value++; setValue(String.valueOf(value)); event.preventDefault(); } else if (event.getNativeKeyCode() == KeyCodes.KEY_DOWN) { int value = Integer.parseInt(getValue()); value--; setValue(String.valueOf(value)); event.preventDefault(); } } catch (Exception e) { setValue("0"); } } }); } @SuppressWarnings("unused") private String getValueToOperate(String value) { return value.length() > 1 ? value.substring(value.length() - 2) : value .substring(value.length() - 1); } @SuppressWarnings("unused") private String getLiteralValue(String value) { return value.length() > 1 ? value.substring(0, value.length() - 2) : value.substring(0, value.length() - 1); } }