Exemple #1
0
/**
 * 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);
}
Exemple #2
0
/**
 * 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);
}
Exemple #3
0
/**
 * 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);
}