bool TextCursor::isSame(Cursor* c) { auto tc = dynamic_cast<TextCursor*>(c); if (tc) return tc->owner() == owner() && tc->selectionBegin() == selectionBegin() && tc->selectionEnd() == selectionEnd(); return false; }
QString ChatItem::selection() const { if (selectionMode() == FullSelection) return data(MessageModel::DisplayRole).toString(); if (selectionMode() == PartialSelection) { int start = qMin(selectionStart(), selectionEnd()); int end = start + qAbs(selectionStart() - selectionEnd()); QTextCursor cSelect(document()); cSelect.setPosition(start); cSelect.setPosition(end, QTextCursor::KeepAnchor); return cSelect.selectedText(); } return QString(); }
QAbstractTextDocumentLayout::Selection ChatItem::selectionLayout() const { QAbstractTextDocumentLayout::Selection selection; if (!hasSelection()) return selection; int start; int end; if (selectionMode() == FullSelection) { start = 0; end = document()->characterCount()-1; } else { start = selectionStart(); end = selectionEnd(); } QTextCursor c(document()); c.setPosition(start); c.setPosition(end, QTextCursor::KeepAnchor); selection.cursor = c; return selection; }
void TabCompleter::complete() { if (!enabled) { buildCompletionList(); enabled = true; } if (nextCompletion != completionMap.end()) { // clear previous completion auto cur = msgEdit->textCursor(); cur.setPosition(cur.selectionEnd()); msgEdit->setTextCursor(cur); for (int i = 0; i < lastCompletionLength; ++i) msgEdit->textCursor().deletePreviousChar(); // insert completion msgEdit->insertPlainText(*nextCompletion); // remember charcount to delete next time and advance to next completion lastCompletionLength = nextCompletion->length(); ++nextCompletion; // we're completing the first word of the line if (msgEdit->textCursor().position() == lastCompletionLength) { msgEdit->insertPlainText(nickSuffix); lastCompletionLength += nickSuffix.length(); } } else { // we're at the end of the list -> start over again if (!completionMap.isEmpty()) { nextCompletion = completionMap.begin(); complete(); } } }
QString ContentsChatItem::selection() const { if (selectionMode() == FullSelection) return data(MessageModel::DisplayRole).toString(); if (selectionMode() == PartialSelection) { int start = qMin(selectionStart(), selectionEnd()); int end = start + qAbs(selectionStart() - selectionEnd()); int offset = 0; for (const Smiley &s : privateData()->smileys) { if(s.smileyfiedStart() >= start && s.smileyfiedStart()+1 <= end) { offset += s.text().count() - ((s.type() == Smiley::Emoji) ? s.graphics().count() : 1); } } return data(MessageModel::DisplayRole).toString().mid(start, end-start+offset);; } return QString(); }
void HTMLTextFormControlElement::setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionState& exceptionState) { if (start > end) { exceptionState.throwDOMException(IndexSizeError, "The provided start value (" + String::number(start) + ") is larger than the provided end value (" + String::number(end) + ")."); return; } if (hasAuthorShadowRoot()) return; String text = innerTextValue(); unsigned textLength = text.length(); unsigned replacementLength = replacement.length(); unsigned newSelectionStart = selectionStart(); unsigned newSelectionEnd = selectionEnd(); start = std::min(start, textLength); end = std::min(end, textLength); if (start < end) text.replace(start, end - start, replacement); else text.insert(replacement, start); setInnerTextValue(text); // FIXME: What should happen to the value (as in value()) if there's no renderer? if (!renderer()) return; subtreeHasChanged(); if (equalIgnoringCase(selectionMode, "select")) { newSelectionStart = start; newSelectionEnd = start + replacementLength; } else if (equalIgnoringCase(selectionMode, "start")) newSelectionStart = newSelectionEnd = start; else if (equalIgnoringCase(selectionMode, "end")) newSelectionStart = newSelectionEnd = start + replacementLength; else { // Default is "preserve". long delta = replacementLength - (end - start); if (newSelectionStart > end) newSelectionStart += delta; else if (newSelectionStart > start) newSelectionStart = start; if (newSelectionEnd > end) newSelectionEnd += delta; else if (newSelectionEnd > start) newSelectionEnd = start + replacementLength; } setSelectionRange(newSelectionStart, newSelectionEnd, SelectionHasNoDirection); }
void HTMLTextFormControlElement::setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionCode& ec) { if (start > end) { ec = INDEX_SIZE_ERR; return; } String text = innerTextValue(); unsigned textLength = text.length(); unsigned replacementLength = replacement.length(); unsigned newSelectionStart = selectionStart(); unsigned newSelectionEnd = selectionEnd(); start = std::min(start, textLength); end = std::min(end, textLength); if (start < end) text.replace(start, end - start, replacement); else text.insert(replacement, start); setInnerTextValue(text); // FIXME: What should happen to the value (as in value()) if there's no renderer? if (!renderer()) return; subtreeHasChanged(); if (equalIgnoringCase(selectionMode, "select")) { newSelectionStart = start; newSelectionEnd = start + replacementLength; } else if (equalIgnoringCase(selectionMode, "start")) newSelectionStart = newSelectionEnd = start; else if (equalIgnoringCase(selectionMode, "end")) newSelectionStart = newSelectionEnd = start + replacementLength; else { // Default is "preserve". long delta = replacementLength - (end - start); if (newSelectionStart > end) newSelectionStart += delta; else if (newSelectionStart > start) newSelectionStart = start; if (newSelectionEnd > end) newSelectionEnd += delta; else if (newSelectionEnd > start) newSelectionEnd = start + replacementLength; } setSelectionRange(newSelectionStart, newSelectionEnd, SelectionHasNoDirection); }
void HTMLTextFormControlElement::setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionState& exceptionState) { if (start > end) { exceptionState.throwDOMException(IndexSizeError, "The provided start value (" + String::number(start) + ") is larger than the provided end value (" + String::number(end) + ")."); return; } if (openShadowRoot()) return; String text = innerEditorValue(); unsigned textLength = text.length(); unsigned replacementLength = replacement.length(); unsigned newSelectionStart = selectionStart(); unsigned newSelectionEnd = selectionEnd(); start = std::min(start, textLength); end = std::min(end, textLength); if (start < end) text.replace(start, end - start, replacement); else text.insert(replacement, start); setValue(text, TextFieldEventBehavior::DispatchNoEvent); if (selectionMode == "select") { newSelectionStart = start; newSelectionEnd = start + replacementLength; } else if (selectionMode == "start") { newSelectionStart = newSelectionEnd = start; } else if (selectionMode == "end") { newSelectionStart = newSelectionEnd = start + replacementLength; } else { ASSERT(selectionMode == "preserve"); long delta = replacementLength - (end - start); if (newSelectionStart > end) newSelectionStart += delta; else if (newSelectionStart > start) newSelectionStart = start; if (newSelectionEnd > end) newSelectionEnd += delta; else if (newSelectionEnd > start) newSelectionEnd = start + replacementLength; } setSelectionRange(newSelectionStart, newSelectionEnd, SelectionHasNoDirection); }
QTextCursor YFileCursor::qTextCursor(const YTextDocument * document) const { if(isNull()) { return QTextCursor(); } int anchor = fileToDocPos(charAddress(), document); int position = fileToDocPos(selectionEnd(), document); if(position < anchor) { std::swap(position, anchor); } QTextCursor cursor(document->begin()); cursor.setPosition(anchor); cursor.setPosition(position, QTextCursor::KeepAnchor); return cursor; }
void HTMLTextFormControlElement::setRangeText(const String& replacement, ExceptionCode& ec) { setRangeText(replacement, selectionStart(), selectionEnd(), String(), ec); }
String HTMLTextFormControlElement::selectedText() const { if (!isTextFormControl()) return String(); return value().substring(selectionStart(), selectionEnd() - selectionStart()); }
void HTMLTextFormControlElement::setSelectionDirection(const String& direction) { setSelectionRange(selectionStart(), selectionEnd(), direction); }
void HTMLTextFormControlElement::setSelectionStart(int start) { setSelectionRange(start, max(start, selectionEnd()), selectionDirection()); }
void HTMLTextFormControlElement::setRangeText(const String& replacement, ExceptionState& exceptionState) { setRangeText(replacement, selectionStart(), selectionEnd(), "preserve", exceptionState); }
int QDeclarativeTextEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QDeclarativeImplicitSizePaintedItem::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 47) qt_static_metacall(this, _c, _id, _a); _id -= 47; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QString*>(_v) = text(); break; case 1: *reinterpret_cast< QColor*>(_v) = color(); break; case 2: *reinterpret_cast< QColor*>(_v) = selectionColor(); break; case 3: *reinterpret_cast< QColor*>(_v) = selectedTextColor(); break; case 4: *reinterpret_cast< QFont*>(_v) = font(); break; case 5: *reinterpret_cast< HAlignment*>(_v) = hAlign(); break; case 6: *reinterpret_cast< VAlignment*>(_v) = vAlign(); break; case 7: *reinterpret_cast< WrapMode*>(_v) = wrapMode(); break; case 8: *reinterpret_cast< int*>(_v) = lineCount(); break; case 9: *reinterpret_cast< qreal*>(_v) = paintedWidth(); break; case 10: *reinterpret_cast< qreal*>(_v) = paintedHeight(); break; case 11: *reinterpret_cast< TextFormat*>(_v) = textFormat(); break; case 12: *reinterpret_cast< bool*>(_v) = isReadOnly(); break; case 13: *reinterpret_cast< bool*>(_v) = isCursorVisible(); break; case 14: *reinterpret_cast< int*>(_v) = cursorPosition(); break; case 15: *reinterpret_cast< QRect*>(_v) = cursorRectangle(); break; case 16: *reinterpret_cast< QDeclarativeComponent**>(_v) = cursorDelegate(); break; case 17: *reinterpret_cast< int*>(_v) = selectionStart(); break; case 18: *reinterpret_cast< int*>(_v) = selectionEnd(); break; case 19: *reinterpret_cast< QString*>(_v) = selectedText(); break; case 20: *reinterpret_cast< bool*>(_v) = focusOnPress(); break; case 21: *reinterpret_cast< bool*>(_v) = persistentSelection(); break; case 22: *reinterpret_cast< qreal*>(_v) = textMargin(); break; case 23: *reinterpret_cast< Qt::InputMethodHints*>(_v) = inputMethodHints(); break; case 24: *reinterpret_cast< bool*>(_v) = selectByMouse(); break; case 25: *reinterpret_cast< SelectionMode*>(_v) = mouseSelectionMode(); break; case 26: *reinterpret_cast< bool*>(_v) = canPaste(); break; case 27: *reinterpret_cast< bool*>(_v) = isInputMethodComposing(); break; } _id -= 28; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setText(*reinterpret_cast< QString*>(_v)); break; case 1: setColor(*reinterpret_cast< QColor*>(_v)); break; case 2: setSelectionColor(*reinterpret_cast< QColor*>(_v)); break; case 3: setSelectedTextColor(*reinterpret_cast< QColor*>(_v)); break; case 4: setFont(*reinterpret_cast< QFont*>(_v)); break; case 5: setHAlign(*reinterpret_cast< HAlignment*>(_v)); break; case 6: setVAlign(*reinterpret_cast< VAlignment*>(_v)); break; case 7: setWrapMode(*reinterpret_cast< WrapMode*>(_v)); break; case 11: setTextFormat(*reinterpret_cast< TextFormat*>(_v)); break; case 12: setReadOnly(*reinterpret_cast< bool*>(_v)); break; case 13: setCursorVisible(*reinterpret_cast< bool*>(_v)); break; case 14: setCursorPosition(*reinterpret_cast< int*>(_v)); break; case 16: setCursorDelegate(*reinterpret_cast< QDeclarativeComponent**>(_v)); break; case 20: setFocusOnPress(*reinterpret_cast< bool*>(_v)); break; case 21: setPersistentSelection(*reinterpret_cast< bool*>(_v)); break; case 22: setTextMargin(*reinterpret_cast< qreal*>(_v)); break; case 23: setInputMethodHints(*reinterpret_cast< Qt::InputMethodHints*>(_v)); break; case 24: setSelectByMouse(*reinterpret_cast< bool*>(_v)); break; case 25: setMouseSelectionMode(*reinterpret_cast< SelectionMode*>(_v)); break; } _id -= 28; } else if (_c == QMetaObject::ResetProperty) { switch (_id) { case 5: resetHAlign(); break; } _id -= 28; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 28; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 28; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 28; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 28; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 28; } #endif // QT_NO_PROPERTIES return _id; }