/** * Changes the text edit according to keyboard input, and * unfocuses the text if Enter is pressed. * @param action Pointer to an action. * @param state State that the action handlers belong to. */ void TextEdit::keyboardPress(Action *action, State *state) { switch (action->getDetails()->key.keysym.sym) { #ifdef DINGOO case SDLK_UP: _ascii++; if (_ascii > L'~') { _ascii = L' '; } break; case SDLK_DOWN: _ascii--; if (_ascii < L' ') { _ascii = L'~'; } break; case SDLK_LEFT: if (_value.length() > 0) { _value.resize(_value.length() - 1); } break; case SDLK_RIGHT: if (!exceedsMaxWidth(_ascii)) { _value += _ascii; } break; #else case SDLK_LEFT: if (_caretPos > 0) { _caretPos--; } break; case SDLK_RIGHT: if (_caretPos < _value.length()) { _caretPos++; } break; case SDLK_HOME: _caretPos = 0; break; case SDLK_END: _caretPos = _value.length(); break; case SDLK_BACKSPACE: if (_caretPos > 0) { _value.erase(_caretPos - 1, 1); _caretPos--; } break; case SDLK_DELETE: if (_caretPos < _value.length()) { _value.erase(_caretPos, 1); } break; case SDLK_RETURN: _isFocused = false; _blink = false; _timer->stop(); break; default: if (action->getDetails()->key.keysym.unicode != 0) { if (action->getDetails()->key.keysym.unicode >= L' ' && action->getDetails()->key.keysym.unicode <= L'~' && !exceedsMaxWidth((wchar_t)action->getDetails()->key.keysym.unicode)) { _value.insert(_caretPos, 1, (wchar_t)action->getDetails()->key.keysym.unicode); _caretPos++; } } #endif } _redraw = true; InteractiveSurface::keyboardPress(action, state); }
/** * Changes the text edit according to keyboard input, and * unfocuses the text if Enter is pressed. * @param action Pointer to an action. * @param state State that the action handlers belong to. */ void TextEdit::keyboardPress(Action *action, State *state) { if (Options::keyboardMode == KEYBOARD_OFF) { switch (action->getDetails()->key.keysym.sym) { case SDLK_UP: _ascii++; if (_ascii > L'~') { _ascii = L' '; } break; case SDLK_DOWN: _ascii--; if (_ascii < L' ') { _ascii = L'~'; } break; case SDLK_LEFT: if (_value.length() > 0) { _value.resize(_value.length() - 1); } break; case SDLK_RIGHT: if (!exceedsMaxWidth(_ascii)) { _value += _ascii; } break; default: break; } } else if (Options::keyboardMode == KEYBOARD_ON) { switch (action->getDetails()->key.keysym.sym) { case SDLK_LEFT: if (_caretPos > 0) { _caretPos--; } break; case SDLK_RIGHT: if (_caretPos < _value.length()) { _caretPos++; } break; case SDLK_HOME: _caretPos = 0; break; case SDLK_END: _caretPos = _value.length(); break; case SDLK_BACKSPACE: if (_caretPos > 0) { _value.erase(_caretPos - 1, 1); _caretPos--; } break; case SDLK_DELETE: if (_caretPos < _value.length()) { _value.erase(_caretPos, 1); } break; case SDLK_RETURN: case SDLK_KP_ENTER: if (!_value.empty()) { setFocus(false); } break; default: Uint16 key = action->getDetails()->key.keysym.unicode; if (isValidChar(key) && !exceedsMaxWidth((wchar_t)key)) { _value.insert(_caretPos, 1, (wchar_t)action->getDetails()->key.keysym.unicode); _caretPos++; } } } _redraw = true; if (_change) { (state->*_change)(action); } InteractiveSurface::keyboardPress(action, state); }
/** * Changes the text edit according to keyboard input, and * unfocuses the text if Enter is pressed. * @param action Pointer to an action. * @param state State that the action handlers belong to. */ void TextEdit::keyboardPress(Action *action, State *state) { if (Options::getInt("keyboardMode") == KEYBOARD_OFF) { switch (action->getDetails()->key.keysym.sym) { case SDLK_UP: _ascii++; if (_ascii > L'~') { _ascii = L' '; } break; case SDLK_DOWN: _ascii--; if (_ascii < L' ') { _ascii = L'~'; } break; case SDLK_LEFT: if (_value.length() > 0) { _value.resize(_value.length() - 1); } break; case SDLK_RIGHT: if (!exceedsMaxWidth(_ascii)) { _value += _ascii; } break; default: break; } } else if (Options::getInt("keyboardMode") == KEYBOARD_ON) { switch (action->getDetails()->key.keysym.sym) { case SDLK_LEFT: if (_caretPos > 0) { _caretPos--; } break; case SDLK_RIGHT: if (_caretPos < _value.length()) { _caretPos++; } break; case SDLK_HOME: _caretPos = 0; break; case SDLK_END: _caretPos = _value.length(); break; case SDLK_BACKSPACE: if (_caretPos > 0) { _value.erase(_caretPos - 1, 1); _caretPos--; } break; case SDLK_DELETE: if (_caretPos < _value.length()) { _value.erase(_caretPos, 1); } break; case SDLK_RETURN: case SDLK_KP_ENTER: deFocus(); break; default: Uint16 key = action->getDetails()->key.keysym.unicode; if (((_numerical && key >= L'0' && key <= L'9') || (!_numerical && ((key >= L' ' && key <= L'~') || key >= 160))) && !exceedsMaxWidth((wchar_t)key)) { _value.insert(_caretPos, 1, (wchar_t)action->getDetails()->key.keysym.unicode); _caretPos++; } } } _redraw = true; InteractiveSurface::keyboardPress(action, state); }