diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp index 1ec962ce2d4..9f81d0dfba0 100644 --- a/src/plugins/diffeditor/diffeditor.cpp +++ b/src/plugins/diffeditor/diffeditor.cpp @@ -83,7 +83,6 @@ public slots: void setDisplaySettings(const DisplaySettings &ds); protected: - BaseTextEditor *createEditor() { return new BaseTextEditor; } void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); @@ -98,7 +97,8 @@ private: DescriptionEditorWidget::DescriptionEditorWidget(QWidget *parent) : BaseTextEditorWidget(parent) { - setSimpleTextDocument("DiffEditor.DescriptionEditor"); + setupFallBackEditor("DiffEditor.DescriptionEditor"); + DisplaySettings settings = displaySettings(); settings.m_textWrapping = false; settings.m_displayLineNumbers = false; diff --git a/src/plugins/diffeditor/diffeditorplugin.h b/src/plugins/diffeditor/diffeditorplugin.h index 40eccd47d6c..c64671f9d3d 100644 --- a/src/plugins/diffeditor/diffeditorplugin.h +++ b/src/plugins/diffeditor/diffeditorplugin.h @@ -35,7 +35,6 @@ #include namespace DiffEditor { - namespace Internal { class DiffEditorPlugin : public ExtensionSystem::IPlugin diff --git a/src/plugins/diffeditor/selectabletexteditorwidget.cpp b/src/plugins/diffeditor/selectabletexteditorwidget.cpp index 2c7cdfd1038..c0cced24ca2 100644 --- a/src/plugins/diffeditor/selectabletexteditorwidget.cpp +++ b/src/plugins/diffeditor/selectabletexteditorwidget.cpp @@ -38,8 +38,8 @@ namespace DiffEditor { SelectableTextEditorWidget::SelectableTextEditorWidget(QWidget *parent) : BaseTextEditorWidget(parent) { - setSimpleTextDocument("DiffEditor.UnifiedDiffEditor"); setFrameStyle(QFrame::NoFrame); + setupFallBackEditor("DiffEditor.UnifiedDiffEditor"); } SelectableTextEditorWidget::~SelectableTextEditorWidget() diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp index 3e6eeb8f41a..a61d3ccd0fc 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp @@ -69,28 +69,10 @@ using namespace Core; using namespace TextEditor; +using namespace Utils; namespace DiffEditor { -////////////////////// - -class SideDiffEditor : public BaseTextEditor -{ - Q_OBJECT -public: - SideDiffEditor() - { - connect(this, SIGNAL(tooltipRequested(TextEditor::BaseTextEditor*,QPoint,int)), - this, SLOT(slotTooltipRequested(TextEditor::BaseTextEditor*,QPoint,int))); - } - -private slots: - void slotTooltipRequested(TextEditor::BaseTextEditor *editor, - const QPoint &globalPoint, - int position); - -}; - //////////////////////// /* class MultiHighlighter : public SyntaxHighlighter @@ -168,7 +150,7 @@ protected: return SelectableTextEditorWidget::extraAreaWidth(markWidthPtr); } void applyFontSettings(); - BaseTextEditor *createEditor() { return new SideDiffEditor; } + virtual QString lineNumber(int blockNumber) const; virtual int lineNumberDigits() const; virtual bool selectionVisible(int blockNumber) const; @@ -209,27 +191,6 @@ private: // MultiHighlighter *m_highlighter; }; -//////////////////////// - -void SideDiffEditor::slotTooltipRequested(TextEditor::BaseTextEditor *editor, - const QPoint &globalPoint, - int position) -{ - SideDiffEditorWidget *ew = qobject_cast(editorWidget()); - if (!ew) - return; - - QMap fi = ew->fileInfo(); - QMap::const_iterator it - = fi.constFind(ew->document()->findBlock(position).blockNumber()); - if (it != fi.constEnd()) { - Utils::ToolTip::show(globalPoint, Utils::TextContent(it.value().fileName), - editor->widget()); - } else { - Utils::ToolTip::hide(); - } -} - //////////////////////// /* MultiHighlighter::MultiHighlighter(SideDiffEditorWidget *editor, QTextDocument *document) @@ -324,7 +285,8 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent) m_lineNumberDigits(1), m_inPaintEvent(false) { - textDocument()->setId("DiffEditor.SideDiffEditor"); + setupFallBackEditor("DiffEditor.SideDiffEditor"); + DisplaySettings settings = displaySettings(); settings.m_textWrapping = false; settings.m_displayLineNumbers = true; @@ -334,6 +296,16 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent) settings.m_highlightBlocks = false; SelectableTextEditorWidget::setDisplaySettings(settings); + BaseTextEditor *editor = this->editor(); + connect(editor, &BaseTextEditor::tooltipRequested, [this](BaseTextEditor *, const QPoint &point, int position) { + int block = textDocument()->document()->findBlock(position).blockNumber(); + auto it = m_fileInfo.constFind(block); + if (it != m_fileInfo.constEnd()) + ToolTip::show(point, TextContent(it.value().fileName), this); + else + ToolTip::hide(); + }); + // setCodeFoldingSupported(true); // m_highlighter = new MultiHighlighter(this, baseTextDocument()->document()); diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp index 7fb5c959fd9..41361793ee6 100644 --- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp +++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp @@ -81,6 +81,8 @@ UnifiedDiffEditorWidget::UnifiedDiffEditorWidget(QWidget *parent) , m_leftLineNumberDigits(1) , m_rightLineNumberDigits(1) { + setupFallBackEditor(Id()); + DisplaySettings settings = displaySettings(); settings.m_textWrapping = false; settings.m_displayLineNumbers = true; @@ -376,11 +378,6 @@ void UnifiedDiffEditorWidget::patch(int diffFileIndex, int chunkIndex, bool reve m_controller->requestReload(); } -TextEditor::BaseTextEditor *UnifiedDiffEditorWidget::createEditor() -{ - return new BaseTextEditor; -} - void UnifiedDiffEditorWidget::clear(const QString &message) { m_leftLineNumberDigits = 1; diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.h b/src/plugins/diffeditor/unifieddiffeditorwidget.h index 69ffb658230..ef479129285 100644 --- a/src/plugins/diffeditor/unifieddiffeditorwidget.h +++ b/src/plugins/diffeditor/unifieddiffeditorwidget.h @@ -68,7 +68,6 @@ public slots: protected: void mouseDoubleClickEvent(QMouseEvent *e); void contextMenuEvent(QContextMenuEvent *e); - TextEditor::BaseTextEditor *createEditor(); QString lineNumber(int blockNumber) const; int lineNumberDigits() const; diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 6dbe1d03d08..0f22eb4c04b 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -240,7 +240,12 @@ class BaseTextEditorWidgetPrivate : public QObject { public: BaseTextEditorWidgetPrivate(BaseTextEditorWidget *parent); - ~BaseTextEditorWidgetPrivate() { delete m_toolBar; } + ~BaseTextEditorWidgetPrivate() + { + delete m_toolBar; + if (m_editorIsFallBack) + delete m_editor; + } void setupDocumentSignals(); void updateLineSelectionColor(); @@ -432,6 +437,7 @@ public: QScopedPointer m_clipboardAssistProvider; bool m_isMissingSyntaxDefinition; + bool m_editorIsFallBack; QScopedPointer m_autoCompleter; }; @@ -486,6 +492,7 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate(BaseTextEditorWidget *p m_markDragging(false), m_clipboardAssistProvider(new Internal::ClipboardAssistProvider), m_isMissingSyntaxDefinition(false), + m_editorIsFallBack(false), m_autoCompleter(new AutoCompleter) { Aggregation::Aggregate *aggregate = new Aggregation::Aggregate; @@ -680,11 +687,6 @@ BaseTextEditorWidget::~BaseTextEditorWidget() d = 0; } -void BaseTextEditorWidget::setSimpleTextDocument(Id id) -{ - setTextDocument(BaseTextDocumentPtr(new BaseTextDocument(id))); -} - void BaseTextEditorWidget::print(QPrinter *printer) { const bool oldFullPage = printer->fullPage(); @@ -897,11 +899,8 @@ int BaseTextEditorWidgetPrivate::visualIndent(const QTextBlock &block) const BaseTextEditor *BaseTextEditorWidget::editor() const { if (!d->m_editor) { - auto that = const_cast(this); - d->m_editor = that->createEditor(); - if (!d->m_editor->m_widget) - d->m_editor->setEditorWidget(that); - d->m_codeAssistant.configure(d->m_editor); + QTC_CHECK("should not happen anymore" && false); + const_cast(this)->setupFallBackEditor(Id()); } return d->m_editor; } @@ -6528,12 +6527,16 @@ QColor BaseTextEditorWidget::replacementPenColor(int blockNumber) const return QColor(); } -BaseTextEditor *BaseTextEditorWidget::createEditor() +void BaseTextEditorWidget::setupFallBackEditor(Id id) { - QTC_CHECK("should not happen anymore" && false); - auto editor = new BaseTextEditor; - editor->setEditorWidget(this); - return editor; + QTC_CHECK(!d->m_editor); + QTC_CHECK(!d->m_editorIsFallBack); + BaseTextDocumentPtr doc(new BaseTextDocument(id)); + doc->setFontSettings(TextEditorSettings::fontSettings()); + setTextDocument(doc); + d->m_editor = new BaseTextEditor; + d->m_editor->setEditorWidget(this); + d->m_editorIsFallBack = true; } void BaseTextEditorWidget::appendStandardContextMenuActions(QMenu *menu) diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 18efca4febb..484758d7d39 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -240,8 +240,6 @@ public: ~BaseTextEditorWidget(); void setTextDocument(const BaseTextDocumentPtr &doc); - void setSimpleTextDocument(Core::Id id); // Convenience. - BaseTextDocument *textDocument() const; BaseTextDocumentPtr textDocumentPtr() const; @@ -540,7 +538,6 @@ protected: virtual bool replacementVisible(int blockNumber) const; virtual QColor replacementPenColor(int blockNumber) const; - virtual BaseTextEditor *createEditor(); virtual void triggerPendingUpdates(); virtual void applyFontSettings(); @@ -581,6 +578,7 @@ public: QString selectedText() const; void setupAsPlainEditor(); + void setupFallBackEditor(Core::Id id); protected: /*! diff --git a/src/plugins/texteditor/snippets/snippeteditor.cpp b/src/plugins/texteditor/snippets/snippeteditor.cpp index eae0b91be11..bfe9b9c93cf 100644 --- a/src/plugins/texteditor/snippets/snippeteditor.cpp +++ b/src/plugins/texteditor/snippets/snippeteditor.cpp @@ -49,15 +49,7 @@ namespace TextEditor { SnippetEditorWidget::SnippetEditorWidget(QWidget *parent) : BaseTextEditorWidget(parent) { - setSimpleTextDocument(TextEditor::Constants::SNIPPET_EDITOR_ID); - textDocument()->setFontSettings(TextEditorSettings::fontSettings()); - - // Should not be necessary in this case, but the base text editor - // implementation assumes a valid associated editor. - auto dummy = new BaseTextEditor; - dummy->addContext(Constants::SNIPPET_EDITOR_ID); - dummy->setEditorWidget(this); - + setupFallBackEditor(TextEditor::Constants::SNIPPET_EDITOR_ID); setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); setHighlightCurrentLine(false); setLineNumbersVisible(false);