Esempio n. 1
0
/** Redefined to be able to move TagButton when typing. */
void TagLineEdit::keyPressEvent(QKeyEvent *event)
{
	if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right) {
		/// TODO cursorWordForward / cursorWordBackard to stop on TagButton
		if (QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) {
			qDebug() << "cursorWordForward / backward";
		}
		LineEdit::keyPressEvent(event);
		for (TagButton *t : _tags) {
			if (t->frameGeometry().contains(cursorRect().center())) {
				if (event->key() == Qt::Key_Left) {
					cursorBackward(false, t->spaceCount() - 1);
				} else {
					cursorForward(false, t->spaceCount() - 1);
				}
				break;
			}
		}
	} else {
		QString k = event->text();
		int w = fontMetrics().width(k);
		if (event->key() == Qt::Key_Delete) {
			qDebug() << Q_FUNC_INFO << "Key_Delete";
			w = -w;
		}
		for (TagButton *t : _tags) {
			if (t->frameGeometry().x() > cursorRect().center().x()) {
				t->move(t->x() + w, 0);
			}
		}
		LineEdit::keyPressEvent(event);
	}
}
Esempio n. 2
0
void GuidLineEdit::keyPressEvent(QKeyEvent * event)
{
    if (event == QKeySequence::Delete || event->key() == Qt::Key_Backspace)
    {
        int pos = cursorPosition();
        if (event->key() == Qt::Key_Backspace && pos > 0) {
            cursorBackward(false);
            pos = cursorPosition();
        }
        
        QString txt = text();
        QString selected = selectedText();

        if (!selected.isEmpty()) {
            pos = QLineEdit::selectionStart();
            for (int i = pos; i < pos + selected.count(); i++)
                if (txt[i] != QChar('-'))
                    txt[i] = QChar('.');
        }
        else 
            txt[pos] = QChar('.');

        setCursorPosition(0);
        insert(txt);
        setCursorPosition(pos);

        return;
    }

    // Call original event handler
    QLineEdit::keyPressEvent(event);
}
Esempio n. 3
0
void CharLineEdit::keyPressEvent(QKeyEvent* event)
{
	bool handled = false;

	if (selectionStart() == -1)
	{
		switch (event->key())
		{
		case Qt::Key_Backspace:
			if (isAtEndOfSeparator())
			{
				// Delete separator characters in a single keypress.
				// Don't use setText This method maintains the undo history
				backspace();
				backspace();
				backspace();
				handled = true;
			}
			break;

		case Qt::Key_Delete:
			if (isAtStartOfSeparator())
			{
				del();
				del();
				del();
				handled = true;
			}
			break;

		case Qt::Key_Left:
			if (isAtEndOfSeparator())
			{
				cursorBackward(false, 3);
				handled = true;
			}
			break;

		case Qt::Key_Right:
			if (isAtStartOfSeparator())
			{
				cursorForward(false, 3);
				handled = true;
			}
			break;
		}
	}

	if (handled)
	{
		event->ignore();
	}
	else
	{
		QLineEdit::keyPressEvent(event);
	}

	emit keyPressed(event);
}
Esempio n. 4
0
/** Redefined to be able to move tag buttons.
 * Backspace method is not virtual in QLineEdit, therefore keyPressEvent must be intercepted and eaten. */
void TagLineEdit::backspace()
{
	bool oneTagNeedToBeRemoved = false;
	TagButton *tag = nullptr;
	QPoint cursorCenter;

	cursorBackward(false);
	int dx = fontMetrics().width(text().at(cursorPosition()));
	for (TagButton *button : _tags) {
		cursorCenter = cursorRect().center();
		// One tag button need to be removed
		if (button->frameGeometry().contains(cursorCenter)) {
			oneTagNeedToBeRemoved = true;
			tag = button;
		}

		// Tags need to be moved to the left
		if (button->x() > cursorCenter.x()) {
			button->move(button->x() - dx, 0);
			button->setPosition(cursorPosition());
		}
	}

	cursorForward(false);
	if (oneTagNeedToBeRemoved) {
		for (int i = 0; i < tag->spaceCount(); i++) {
			LineEdit::backspace();
		}

		dx = fontMetrics().width(" ") * tag->spaceCount();
		for (TagButton *button : _tags) {
			if (button != tag && button->x() > cursorCenter.x()) {
				button->move(button->x() - dx, 0);
				button->setPosition(cursorPosition());
			}
		}
		_tags.removeOne(tag);
		delete tag;
		/// FIXME
		//emit taglistHasChanged(this->toStringList());
	} else {
		LineEdit::backspace();
	}
}
int LineEditHistory::beginOfWord( bool mark )
{
	int pos = cursorPosition();
	if( pos == 0 )
		return 0;
	int move = 0;
	QString text = this->text();
	pos--;
	while( !text[ pos ].isSpace() &&
		( text[ pos ].isLetter() || text[ pos ].isNumber() ||
		( text[ pos ] == '_' ) ) )
	{
		move++;
		if( pos == 0 )
			break;
		pos--;
	}
	cursorBackward( mark, move );
	return move;
}
Esempio n. 6
0
/** Redefined to automatically move cursor outside TagButton. */
void TagLineEdit::mousePressEvent(QMouseEvent *event)
{
	LineEdit::mousePressEvent(event);
	for (TagButton *t : _tags) {
		QRect r = t->frameGeometry();
		if (r.contains(event->pos())) {
			if (r.x() + r.width() / 2 >= event->pos().x()) {
				while (r.contains(cursorRect().center()) && cursorPosition() > 0) {
					cursorBackward(false);
					//qDebug() << "cursorBackward" << "pos" << t->position() << "spaces" << t->spaceCount();
				}
			} else {
				while (r.contains(cursorRect().center()) && cursorPosition() < text().length()) {
					cursorForward(false);
					//qDebug() << "cursorForward" << "pos" << t->position() << "spaces" << t->spaceCount();
				}
			}
			break;
		}
	}
}
Esempio n. 7
0
//////////////////////////////////////////////////////////////
/// \brief QQPalmiLineEditInt::insertText
/// \param str
///
void QQPalmiLineEditInt::insertText(const QString &str)
{
	QString newStr = str;

	int moveCursorCount = 0;
	if(str.contains("%s"))
	{
		if(!hasFocus())
			setSelection(m_savedSelection.first, m_savedSelection.second);
		QString selection = selectedText();
		newStr.replace("%s", selection);

		if(selection.length() == 0)
			moveCursorCount = str.length() - (str.indexOf("%s") + 2);
	}
	insert(newStr);

	if(moveCursorCount > 0)
		cursorBackward(false, moveCursorCount);

	m_postHistory.last() = text();
	m_indexInPostHistory = m_postHistory.size() - 1; //last
}