61QQuickTextSelection::QQuickTextSelection(QObject *parent)
65 if (
auto *textEdit = qmlobject_cast<QQuickTextEdit *>(parent)) {
66 m_doc = textEdit->textDocument();
67 m_control = QQuickTextEditPrivate::get(textEdit)->control;
68 connect(m_control, &QQuickTextControl::currentCharFormatChanged,
69 this, &QQuickTextSelection::updateFromCharFormat);
70 connect(m_control, &QQuickTextControl::cursorPositionChanged,
71 this, &QQuickTextSelection::updateFromBlockFormat);
124void QQuickTextSelection::setSelectionStart(
int start)
127 if (start == cur.selectionStart())
131 cur.setPosition(start, QTextCursor::MoveAnchor);
132 m_control->setTextCursor(cur);
134 m_cursor.setPosition(start, QTextCursor::MoveAnchor);
136 emit selectionStartChanged();
152void QQuickTextSelection::setSelectionEnd(
int end)
155 if (end == cur.selectionEnd())
159 cur.setPosition(end, QTextCursor::KeepAnchor);
160 m_control->setTextCursor(cur);
162 m_cursor.setPosition(end, QTextCursor::KeepAnchor);
164 emit selectionEndChanged();
201void QQuickTextSelection::setFont(
const QFont &font)
204 if (cur.selection().isEmpty())
205 cur.select(QTextCursor::WordUnderCursor);
207 if (font == cur.charFormat().font())
212 cur.mergeCharFormat(fmt);
228void QQuickTextSelection::setColor(QColor color)
231 if (cur.selection().isEmpty())
232 cur.select(QTextCursor::WordUnderCursor);
234 if (color == cur.charFormat().foreground().color())
238 fmt.setForeground(color);
239 cur.mergeCharFormat(fmt);
311bool QQuickTextSelection::moveSelectionStart(MoveOperation op,
int n)
313 const QTextCursor::MoveOperation qop =
static_cast<QTextCursor::MoveOperation>(op);
316 if (cur.movePosition(qop, QTextCursor::MoveAnchor, n)) {
317 m_control->setTextCursor(cur);
321 return m_cursor.movePosition(qop, QTextCursor::MoveAnchor, n);
340bool QQuickTextSelection::moveSelectionEnd(MoveOperation op,
int n)
342 const QTextCursor::MoveOperation qop =
static_cast<QTextCursor::MoveOperation>(op);
345 if (cur.movePosition(qop, QTextCursor::KeepAnchor, n)) {
346 m_control->setTextCursor(cur);
350 return m_cursor.movePosition(qop, QTextCursor::KeepAnchor, n);
367void QQuickTextSelection::duplicate()
369 auto sel = cursor().selection();
370 const auto start = selectionEnd();
371 setSelectionStart(start);
372 cursor().insertFragment(sel);
375 const auto end = selectionEnd();
376 setSelectionStart(start);
377 setSelectionEnd(end);
388void QQuickTextSelection::linkTo(
const QUrl &destination)
391 if (cur.selection().isEmpty())
392 cur.select(QTextCursor::WordUnderCursor);
393 cur.beginEditBlock();
394 QTextCharFormat fmt = cur.charFormat();
395 fmt.setForeground(QPalette().link());
397 fmt.setAnchorHref(destination.toString());
398 cur.setCharFormat(fmt);