示例#1
0
void MultiLineEdit::updateScrollBars()
{
    QFontMetrics fm(font());
    int _maxPixelHeight = fm.lineSpacing() * _maxHeight;
    if (_scrollBarsEnabled && document()->size().height() > _maxPixelHeight)
        setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    else
        setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    if (!_scrollBarsEnabled || isSingleLine())
        setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    else
        setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
}
示例#2
0
void MGuiEditText::editText(MWinEvent * windowEvent)
{
	unsigned int sStart;
	unsigned int sEnd;

	bool selection = getSelectionIds(&sStart, &sEnd);

	if(selection)
		setCharId(sStart);

	// events
	if(windowEvent->type == MWIN_EVENT_KEY_DOWN)
	{
		switch(windowEvent->data[0])
		{
		case MKEY_UP:
			if(! isSingleLine())
				upCharId(-1);

			setSelection(0, 0);
			return;

		case MKEY_DOWN:
			if(! isSingleLine())
				upCharId(1);

			setSelection(0, 0);
			return;

		case MKEY_RIGHT:
			addCharId();
			setSelection(0, 0);
			return;

		case MKEY_LEFT:
			subCharId();
			setSelection(0, 0);
			return;

		case MKEY_SPACE:
			if(selection)
			{
				m_text.erase(m_text.begin() + sStart, m_text.begin() + sEnd);
				setSelection(0, 0);
			}

			if(! canAddCharacter())
				return;

			m_text.insert(getCharId(), " ", 1);
			addCharId();
			autoScaleFromText();
			onChange();
			return;

		case MKEY_TAB:
			if(! isSingleLine())
			{
				if(selection)
				{
					m_text.erase(m_text.begin() + sStart, m_text.begin() + sEnd);
					setSelection(0, 0);
				}

				if(! canAddCharacter())
					return;

				m_text.insert(getCharId(), "	", 1);
				addCharId();
				autoScaleFromText();
				onChange();
			}
			return;

		case MKEY_BACKSPACE:
			if(selection)
			{
				m_text.erase(m_text.begin() + sStart, m_text.begin() + sEnd);
				setSelection(0, 0);
				autoScaleFromText();
				onChange();
			}
			else if(getCharId() > 0)
			{
				m_text.erase(m_text.begin() + getCharId() - 1);
				subCharId();
				autoScaleFromText();
				onChange();
			}
			return;

		case MKEY_DELETE:
			if(getCharId() < m_text.size())
			{
				if(selection)
				{
					m_text.erase(m_text.begin() + sStart, m_text.begin() + sEnd);
					setSelection(0, 0);
				}
				else
				{
					m_text.erase(m_text.begin() + getCharId());
				}

				autoScaleFromText();
				onChange();
			}
			return;

		case MKEY_RETURN:
			if(! isSingleLine())
			{
				if(selection)
				{
					m_text.erase(m_text.begin() + sStart, m_text.begin() + sEnd);
					setSelection(0, 0);
				}

				if(! canAddCharacter())
					return;

				m_text.insert(getCharId(), "\n", 1);
				addCharId();
				autoScaleFromText();
				onChange();
			}
			else
			{
				setHighLight(false);
				autoScaleFromText();
				setSelection(0, 0);
				sendVariable();
			}
			return;
		}
	}

	if(windowEvent->type == MWIN_EVENT_CHAR)
	{
		char character = windowEvent->data[0];

		if(character >= 0 && character < 33)
			return;

		// add character
		if(character)
		{
			if(selection)
			{
				m_text.erase(m_text.begin() + sStart, m_text.begin() + sEnd);
				setSelection(0, 0);
			}

			if(! canAddCharacter())
				return;

			m_text.insert(getCharId(), &character, 1);
			addCharId();
			autoScaleFromText();
			onChange();
		}
	}
}