diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 0f3c36f7fd5..f1b4b2045e2 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -1692,3 +1692,31 @@ TextEditor::IAssistInterface *QmlJSTextEditorWidget::createAssistInterface( } return 0; } + +QString QmlJSTextEditorWidget::foldReplacementText(const QTextBlock &block) const +{ + int curlyIndex = block.text().indexOf(QLatin1Char('{')); + + if ((curlyIndex == -1) || !m_semanticInfo.isValid()) + return TextEditor::BaseTextEditorWidget::foldReplacementText(block); + + int pos = block.position() + curlyIndex; + Node *node = m_semanticInfo.rangeAt(pos); + + if (node) { + UiObjectInitializer *objectInitializer = 0; + if (UiObjectDefinition *def = cast(node)) + objectInitializer = def->initializer; + else if (UiObjectBinding *binding = cast(node)) + objectInitializer = binding->initializer; + + // Get the id value, if it exists, and display it + if (objectInitializer) { + QString objectId = idOfObject(objectInitializer); + if (!objectId.isEmpty()) + return QLatin1String("id: ") + objectId + QLatin1String("..."); + } + } + + return TextEditor::BaseTextEditorWidget::foldReplacementText(block); +} diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h index 52c1bba71bb..532290bf3fa 100644 --- a/src/plugins/qmljseditor/qmljseditor.h +++ b/src/plugins/qmljseditor/qmljseditor.h @@ -216,6 +216,7 @@ protected: TextEditor::BaseTextEditor *createEditor(); void createToolBar(QmlJSEditorEditable *editable); TextEditor::BaseTextEditorWidget::Link findLinkAt(const QTextCursor &cursor, bool resolveTarget = true); + QString foldReplacementText(const QTextBlock &block) const; private: bool isClosingBrace(const QList &tokens) const; diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index fafb6685f55..adbd5dbbf0c 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2657,9 +2657,12 @@ QTextBlock BaseTextEditorWidget::foldedBlockAt(const QPoint &pos, QRect *box) co QRectF lineRect = line.naturalTextRect().translated(offset.x(), top); lineRect.adjust(0, 0, -1, -1); + QString replacement = QLatin1String(" {") + foldReplacementText(block) + + QLatin1String("}; "); + QRectF collapseRect(lineRect.right() + 12, lineRect.top(), - fontMetrics().width(QLatin1String(" {...}; ")), + fontMetrics().width(replacement), lineRect.height()); if (collapseRect.contains(pos)) { QTextBlock result = block; @@ -3453,9 +3456,12 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e) QRectF lineRect = line.naturalTextRect().translated(offset.x(), top); lineRect.adjust(0, 0, -1, -1); + QString replacement = foldReplacementText(block); + QString rectReplacement = QLatin1String(" {") + replacement + QLatin1String("}; "); + QRectF collapseRect(lineRect.right() + 12, lineRect.top(), - fontMetrics().width(QLatin1String(" {...}; ")), + fontMetrics().width(rectReplacement), lineRect.height()); painter.setRenderHint(QPainter::Antialiasing, true); painter.translate(.5, .5); @@ -3463,8 +3469,6 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e) painter.setRenderHint(QPainter::Antialiasing, false); painter.translate(-.5, -.5); - QString replacement = QLatin1String("..."); - if (TextBlockUserData *nextBlockUserData = BaseTextDocumentLayout::testUserData(nextBlock)) { if (nextBlockUserData->foldingStartIncluded()) replacement.prepend(nextBlock.text().trimmed().left(1)); @@ -6341,3 +6345,8 @@ IAssistInterface *BaseTextEditorWidget::createAssistInterface(AssistKind kind, Q_UNUSED(kind); return new DefaultAssistInterface(document(), position(), d->m_document, reason); } + +QString TextEditor::BaseTextEditorWidget::foldReplacementText(const QTextBlock &) const +{ + return QLatin1String("..."); +} diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 4eb82e2930e..bb5a9eff97e 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -507,6 +507,11 @@ protected: void maybeClearSomeExtraSelections(const QTextCursor &cursor); + /*! + Reimplement this function to change the default replacement text. + */ + virtual QString foldReplacementText(const QTextBlock &block) const; + protected slots: virtual void slotUpdateExtraAreaWidth(); virtual void slotModificationChanged(bool);