TextEditor: Use more direct approach for fallback IEditor construction

There are still a few places where the EditorWidget is the primary
object, or several of them per "visible" IEditor (e.g. Diff).
Provide a means to streamline setup there, too.

Change-Id: I14cfbd68e555ebc539e707032a0e5bef563e0a36
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
hjk
2014-08-28 18:46:39 +02:00
parent 92cab936b9
commit ec5ea375e0
9 changed files with 40 additions and 80 deletions

View File

@@ -83,7 +83,6 @@ public slots:
void setDisplaySettings(const DisplaySettings &ds); void setDisplaySettings(const DisplaySettings &ds);
protected: protected:
BaseTextEditor *createEditor() { return new BaseTextEditor; }
void mouseMoveEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e);
@@ -98,7 +97,8 @@ private:
DescriptionEditorWidget::DescriptionEditorWidget(QWidget *parent) DescriptionEditorWidget::DescriptionEditorWidget(QWidget *parent)
: BaseTextEditorWidget(parent) : BaseTextEditorWidget(parent)
{ {
setSimpleTextDocument("DiffEditor.DescriptionEditor"); setupFallBackEditor("DiffEditor.DescriptionEditor");
DisplaySettings settings = displaySettings(); DisplaySettings settings = displaySettings();
settings.m_textWrapping = false; settings.m_textWrapping = false;
settings.m_displayLineNumbers = false; settings.m_displayLineNumbers = false;

View File

@@ -35,7 +35,6 @@
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
namespace DiffEditor { namespace DiffEditor {
namespace Internal { namespace Internal {
class DiffEditorPlugin : public ExtensionSystem::IPlugin class DiffEditorPlugin : public ExtensionSystem::IPlugin

View File

@@ -38,8 +38,8 @@ namespace DiffEditor {
SelectableTextEditorWidget::SelectableTextEditorWidget(QWidget *parent) SelectableTextEditorWidget::SelectableTextEditorWidget(QWidget *parent)
: BaseTextEditorWidget(parent) : BaseTextEditorWidget(parent)
{ {
setSimpleTextDocument("DiffEditor.UnifiedDiffEditor");
setFrameStyle(QFrame::NoFrame); setFrameStyle(QFrame::NoFrame);
setupFallBackEditor("DiffEditor.UnifiedDiffEditor");
} }
SelectableTextEditorWidget::~SelectableTextEditorWidget() SelectableTextEditorWidget::~SelectableTextEditorWidget()

View File

@@ -69,28 +69,10 @@
using namespace Core; using namespace Core;
using namespace TextEditor; using namespace TextEditor;
using namespace Utils;
namespace DiffEditor { 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 class MultiHighlighter : public SyntaxHighlighter
@@ -168,7 +150,7 @@ protected:
return SelectableTextEditorWidget::extraAreaWidth(markWidthPtr); return SelectableTextEditorWidget::extraAreaWidth(markWidthPtr);
} }
void applyFontSettings(); void applyFontSettings();
BaseTextEditor *createEditor() { return new SideDiffEditor; }
virtual QString lineNumber(int blockNumber) const; virtual QString lineNumber(int blockNumber) const;
virtual int lineNumberDigits() const; virtual int lineNumberDigits() const;
virtual bool selectionVisible(int blockNumber) const; virtual bool selectionVisible(int blockNumber) const;
@@ -209,27 +191,6 @@ private:
// MultiHighlighter *m_highlighter; // MultiHighlighter *m_highlighter;
}; };
////////////////////////
void SideDiffEditor::slotTooltipRequested(TextEditor::BaseTextEditor *editor,
const QPoint &globalPoint,
int position)
{
SideDiffEditorWidget *ew = qobject_cast<SideDiffEditorWidget *>(editorWidget());
if (!ew)
return;
QMap<int, DiffFileInfo> fi = ew->fileInfo();
QMap<int, DiffFileInfo>::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) MultiHighlighter::MultiHighlighter(SideDiffEditorWidget *editor, QTextDocument *document)
@@ -324,7 +285,8 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent)
m_lineNumberDigits(1), m_lineNumberDigits(1),
m_inPaintEvent(false) m_inPaintEvent(false)
{ {
textDocument()->setId("DiffEditor.SideDiffEditor"); setupFallBackEditor("DiffEditor.SideDiffEditor");
DisplaySettings settings = displaySettings(); DisplaySettings settings = displaySettings();
settings.m_textWrapping = false; settings.m_textWrapping = false;
settings.m_displayLineNumbers = true; settings.m_displayLineNumbers = true;
@@ -334,6 +296,16 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent)
settings.m_highlightBlocks = false; settings.m_highlightBlocks = false;
SelectableTextEditorWidget::setDisplaySettings(settings); 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); // setCodeFoldingSupported(true);
// m_highlighter = new MultiHighlighter(this, baseTextDocument()->document()); // m_highlighter = new MultiHighlighter(this, baseTextDocument()->document());

View File

@@ -81,6 +81,8 @@ UnifiedDiffEditorWidget::UnifiedDiffEditorWidget(QWidget *parent)
, m_leftLineNumberDigits(1) , m_leftLineNumberDigits(1)
, m_rightLineNumberDigits(1) , m_rightLineNumberDigits(1)
{ {
setupFallBackEditor(Id());
DisplaySettings settings = displaySettings(); DisplaySettings settings = displaySettings();
settings.m_textWrapping = false; settings.m_textWrapping = false;
settings.m_displayLineNumbers = true; settings.m_displayLineNumbers = true;
@@ -376,11 +378,6 @@ void UnifiedDiffEditorWidget::patch(int diffFileIndex, int chunkIndex, bool reve
m_controller->requestReload(); m_controller->requestReload();
} }
TextEditor::BaseTextEditor *UnifiedDiffEditorWidget::createEditor()
{
return new BaseTextEditor;
}
void UnifiedDiffEditorWidget::clear(const QString &message) void UnifiedDiffEditorWidget::clear(const QString &message)
{ {
m_leftLineNumberDigits = 1; m_leftLineNumberDigits = 1;

View File

@@ -68,7 +68,6 @@ public slots:
protected: protected:
void mouseDoubleClickEvent(QMouseEvent *e); void mouseDoubleClickEvent(QMouseEvent *e);
void contextMenuEvent(QContextMenuEvent *e); void contextMenuEvent(QContextMenuEvent *e);
TextEditor::BaseTextEditor *createEditor();
QString lineNumber(int blockNumber) const; QString lineNumber(int blockNumber) const;
int lineNumberDigits() const; int lineNumberDigits() const;

View File

@@ -240,7 +240,12 @@ class BaseTextEditorWidgetPrivate : public QObject
{ {
public: public:
BaseTextEditorWidgetPrivate(BaseTextEditorWidget *parent); BaseTextEditorWidgetPrivate(BaseTextEditorWidget *parent);
~BaseTextEditorWidgetPrivate() { delete m_toolBar; } ~BaseTextEditorWidgetPrivate()
{
delete m_toolBar;
if (m_editorIsFallBack)
delete m_editor;
}
void setupDocumentSignals(); void setupDocumentSignals();
void updateLineSelectionColor(); void updateLineSelectionColor();
@@ -432,6 +437,7 @@ public:
QScopedPointer<Internal::ClipboardAssistProvider> m_clipboardAssistProvider; QScopedPointer<Internal::ClipboardAssistProvider> m_clipboardAssistProvider;
bool m_isMissingSyntaxDefinition; bool m_isMissingSyntaxDefinition;
bool m_editorIsFallBack;
QScopedPointer<AutoCompleter> m_autoCompleter; QScopedPointer<AutoCompleter> m_autoCompleter;
}; };
@@ -486,6 +492,7 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate(BaseTextEditorWidget *p
m_markDragging(false), m_markDragging(false),
m_clipboardAssistProvider(new Internal::ClipboardAssistProvider), m_clipboardAssistProvider(new Internal::ClipboardAssistProvider),
m_isMissingSyntaxDefinition(false), m_isMissingSyntaxDefinition(false),
m_editorIsFallBack(false),
m_autoCompleter(new AutoCompleter) m_autoCompleter(new AutoCompleter)
{ {
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate; Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
@@ -680,11 +687,6 @@ BaseTextEditorWidget::~BaseTextEditorWidget()
d = 0; d = 0;
} }
void BaseTextEditorWidget::setSimpleTextDocument(Id id)
{
setTextDocument(BaseTextDocumentPtr(new BaseTextDocument(id)));
}
void BaseTextEditorWidget::print(QPrinter *printer) void BaseTextEditorWidget::print(QPrinter *printer)
{ {
const bool oldFullPage = printer->fullPage(); const bool oldFullPage = printer->fullPage();
@@ -897,11 +899,8 @@ int BaseTextEditorWidgetPrivate::visualIndent(const QTextBlock &block) const
BaseTextEditor *BaseTextEditorWidget::editor() const BaseTextEditor *BaseTextEditorWidget::editor() const
{ {
if (!d->m_editor) { if (!d->m_editor) {
auto that = const_cast<BaseTextEditorWidget *>(this); QTC_CHECK("should not happen anymore" && false);
d->m_editor = that->createEditor(); const_cast<BaseTextEditorWidget *>(this)->setupFallBackEditor(Id());
if (!d->m_editor->m_widget)
d->m_editor->setEditorWidget(that);
d->m_codeAssistant.configure(d->m_editor);
} }
return d->m_editor; return d->m_editor;
} }
@@ -6528,12 +6527,16 @@ QColor BaseTextEditorWidget::replacementPenColor(int blockNumber) const
return QColor(); return QColor();
} }
BaseTextEditor *BaseTextEditorWidget::createEditor() void BaseTextEditorWidget::setupFallBackEditor(Id id)
{ {
QTC_CHECK("should not happen anymore" && false); QTC_CHECK(!d->m_editor);
auto editor = new BaseTextEditor; QTC_CHECK(!d->m_editorIsFallBack);
editor->setEditorWidget(this); BaseTextDocumentPtr doc(new BaseTextDocument(id));
return editor; 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) void BaseTextEditorWidget::appendStandardContextMenuActions(QMenu *menu)

View File

@@ -240,8 +240,6 @@ public:
~BaseTextEditorWidget(); ~BaseTextEditorWidget();
void setTextDocument(const BaseTextDocumentPtr &doc); void setTextDocument(const BaseTextDocumentPtr &doc);
void setSimpleTextDocument(Core::Id id); // Convenience.
BaseTextDocument *textDocument() const; BaseTextDocument *textDocument() const;
BaseTextDocumentPtr textDocumentPtr() const; BaseTextDocumentPtr textDocumentPtr() const;
@@ -540,7 +538,6 @@ protected:
virtual bool replacementVisible(int blockNumber) const; virtual bool replacementVisible(int blockNumber) const;
virtual QColor replacementPenColor(int blockNumber) const; virtual QColor replacementPenColor(int blockNumber) const;
virtual BaseTextEditor *createEditor();
virtual void triggerPendingUpdates(); virtual void triggerPendingUpdates();
virtual void applyFontSettings(); virtual void applyFontSettings();
@@ -581,6 +578,7 @@ public:
QString selectedText() const; QString selectedText() const;
void setupAsPlainEditor(); void setupAsPlainEditor();
void setupFallBackEditor(Core::Id id);
protected: protected:
/*! /*!

View File

@@ -49,15 +49,7 @@ namespace TextEditor {
SnippetEditorWidget::SnippetEditorWidget(QWidget *parent) SnippetEditorWidget::SnippetEditorWidget(QWidget *parent)
: BaseTextEditorWidget(parent) : BaseTextEditorWidget(parent)
{ {
setSimpleTextDocument(TextEditor::Constants::SNIPPET_EDITOR_ID); setupFallBackEditor(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);
setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
setHighlightCurrentLine(false); setHighlightCurrentLine(false);
setLineNumbersVisible(false); setLineNumbersVisible(false);