/** * Returns HTML markup for selected text. If no text is selected, returns * HTML markup for all text. */ QString PsiTextView::getHtml() const { PsiTextView *ptv = (PsiTextView *)this; QTextCursor cursor = ptv->textCursor(); int position = ptv->verticalScrollBar()->value(); bool unselectAll = false; if (!hasSelectedText()) { ptv->selectAll(); unselectAll = true; } QMimeData *mime = createMimeDataFromSelection(); QString result = mime->html(); delete mime; // we need to restore original position if selectAll() // was called, because setTextCursor() (which is necessary // to clear selection) will move vertical scroll bar if (unselectAll) { cursor.clearSelection(); ptv->setTextCursor(cursor); ptv->verticalScrollBar()->setValue(position); } return result; }
void PersistentState::timerEvent(QTimerEvent *e) { if (e->timerId() == _dragStartTimer.timerId()) { _dragStartTimer.stop(); _mousePressed = false; QMimeData *data = createMimeDataFromSelection(); QDrag *drag = new QDrag(editor()); drag->setMimeData(data); Qt::DropActions actions = Qt::CopyAction; if (!editor()->isReadOnly()) actions |= Qt::MoveAction; Qt::DropAction action = drag->start(actions); if (action == Qt::MoveAction && drag->target() != editor()) _persistentCursor.removeSelectedText(); } }
QString PsiTextView::getTextHelper(bool html) const { PsiTextView *ptv = (PsiTextView *)this; QTextCursor cursor = ptv->textCursor(); int position = ptv->verticalScrollBar()->value(); bool unselectAll = false; if (!textCursor().hasSelection()) { #if QT_VERSION == 0x040701 // workaround for crash when deleting last character with backspace (qt-4.7.1) // http://bugreports.qt.nokia.com/browse/QTBUG-15857 QTextCursor tempCursor = QTextCursor(ptv->document()); tempCursor.movePosition(QTextCursor::Start); ptv->setTextCursor(tempCursor); #endif ptv->selectAll(); unselectAll = true; } QMimeData *mime = createMimeDataFromSelection(); QString result; if (html) result = mime->html(); else result = mime->text(); delete mime; // we need to restore original position if selectAll() // was called, because setTextCursor() (which is necessary // to clear selection) will move vertical scroll bar if (unselectAll) { cursor.clearSelection(); ptv->setTextCursor(cursor); ptv->verticalScrollBar()->setValue(position); } return result; }