package org.geogebra.web.web.util.keyboard; import org.geogebra.keyboard.web.KeyboardListener; import org.geogebra.web.html5.gui.textbox.GTextBox; import org.geogebra.web.html5.gui.util.KeyboardLocale; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.user.client.Event; public class GTextBoxProcessing implements KeyboardListener { GTextBox field; public GTextBoxProcessing(GTextBox field) { this.field = field; } @Override public void setFocus(boolean focus) { if (field == null) { return; } field.setFocus(focus); } @Override public void onEnter() { NativeEvent event2 = Document.get().createKeyDownEvent(false, false, false, false, ENTER); field.onBrowserEvent(Event.as(event2)); } @Override public void onBackSpace() { int start = field.getCursorPos(); int end = start + field.getSelectionLength(); if (field.getSelectionLength() < 1) { // nothing selected -> delete character before cursor end = start; start--; } if (start > 0) { // cursor not at the beginning of text -> delete something String oldText = field.getText(); String newText = oldText.substring(0, start) + oldText.substring(end); field.setText(newText); field.setCursorPos(start); } } @Override public void insertString(String text) { insertAtEnd(text); } /** * only for {@link GTextBox} * * @param text */ private void insertAtEnd(String text) { String oldText = field.getText(); int caretPos = field.getCursorPos(); String newText = oldText.substring(0, caretPos) + text + oldText.substring(caretPos); field.setText(newText); field.setCursorPos(caretPos + text.length()); } @Override public void onArrow(ArrowType type) { int cursorPos = field.getCursorPos(); switch (type) { case left: if (cursorPos > 0) { field.setCursorPos(cursorPos - 1); } break; case right: if (cursorPos < field.getText().length()) { field.setCursorPos(cursorPos + 1); } break; } } @Override public boolean resetAfterEnter() { // overridden for RTI return false; } @Override public void setKeyBoardModeText(boolean text) { // overridden for RTI } @Override public void scrollCursorIntoView() { // overridden for RTI } @Override public void updateForNewLanguage(KeyboardLocale localization) { // overridden for RTI } @Override public boolean isSVCell() { return false; } @Override public void endEditing() { // TODO Auto-generated method stub } @Override public GTextBox getField() { return field; } public void onKeyboardClosed() { // TODO Auto-generated method stub } }