From 78bb9cd525f424337b8a733d1c17d7788a323078 Mon Sep 17 00:00:00 2001 From: hjk Date: Sat, 26 Jul 2014 12:45:48 +0200 Subject: [PATCH] TextEditor: Pimpl BaseTextEditor Change-Id: I876025562678513dd8e8c6537783c81aef7cb2aa Reviewed-by: Tobias Hunger --- src/plugins/texteditor/basetexteditor.cpp | 136 +++++++++++++--------- src/plugins/texteditor/basetexteditor.h | 15 +-- 2 files changed, 86 insertions(+), 65 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index c2636db1bb2..f897e969022 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -162,6 +162,20 @@ private: QSizeF m_size; }; +class BaseTextEditorPrivate +{ +public: + // Note: This is always a copy of IContext::m_widget. + BaseTextEditorWidget *m_editorWidget; + + QToolBar *m_toolBar; + QWidget *m_stretchWidget; + QAction *m_cursorPositionLabelAction; + Utils::LineColumnLabel *m_cursorPositionLabel; + QAction *m_fileEncodingLabelAction; + Utils::LineColumnLabel *m_fileEncodingLabel; +}; + class BaseTextEditorWidgetPrivate { BaseTextEditorWidgetPrivate(const BaseTextEditorWidgetPrivate &); @@ -792,8 +806,8 @@ bool BaseTextEditorWidget::open(QString *errorString, const QString &fileName, c if (d->m_document->open(errorString, fileName, realFileName)) { moveCursor(QTextCursor::Start); d->updateCannotDecodeInfo(); - if (editor()->m_fileEncodingLabel) { - connect(editor()->m_fileEncodingLabel, SIGNAL(clicked()), this, + if (editor()->fileEncodingLabel()) { + connect(editor()->fileEncodingLabel(), SIGNAL(clicked()), this, SLOT(selectEncoding()), Qt::UniqueConnection); connect(d->m_document->document(), SIGNAL(modificationChanged(bool)), this, SLOT(updateTextCodecLabel()), Qt::UniqueConnection); @@ -6372,9 +6386,10 @@ void BaseTextEditorWidget::appendStandardContextMenuActions(QMenu *menu) BaseTextEditor::BaseTextEditor(BaseTextEditorWidget *editor) - : m_editorWidget(editor) + : d(new BaseTextEditorPrivate) { - setWidget(m_editorWidget); + setWidget(editor); + d->m_editorWidget = editor; Aggregation::Aggregate *aggregate = new Aggregation::Aggregate; BaseTextFind *baseTextFind = new BaseTextFind(editor); connect(baseTextFind, SIGNAL(highlightAll(QString,Core::FindFlags)), @@ -6384,147 +6399,148 @@ BaseTextEditor::BaseTextEditor(BaseTextEditorWidget *editor) aggregate->add(baseTextFind); aggregate->add(editor); - m_cursorPositionLabel = new Utils::LineColumnLabel; + d->m_cursorPositionLabel = new Utils::LineColumnLabel; const int spacing = editor->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2; - m_cursorPositionLabel->setContentsMargins(spacing, 0, spacing, 0); + d->m_cursorPositionLabel->setContentsMargins(spacing, 0, spacing, 0); - m_fileEncodingLabel = new Utils::LineColumnLabel; - m_fileEncodingLabel->setContentsMargins(spacing, 0, spacing, 0); + d->m_fileEncodingLabel = new Utils::LineColumnLabel; + d->m_fileEncodingLabel->setContentsMargins(spacing, 0, spacing, 0); - m_stretchWidget = new QWidget; - m_stretchWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + d->m_stretchWidget = new QWidget; + d->m_stretchWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - m_toolBar = new QToolBar; - m_toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); - m_toolBar->addWidget(m_stretchWidget); - m_cursorPositionLabelAction = m_toolBar->addWidget(m_cursorPositionLabel); - m_fileEncodingLabelAction = m_toolBar->addWidget(m_fileEncodingLabel); + d->m_toolBar = new QToolBar; + d->m_toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + d->m_toolBar->addWidget(d->m_stretchWidget); + d->m_cursorPositionLabelAction = d->m_toolBar->addWidget(d->m_cursorPositionLabel); + d->m_fileEncodingLabelAction = d->m_toolBar->addWidget(d->m_fileEncodingLabel); setFileEncodingLabelVisible(editor->displaySettings().m_displayFileEncoding); connect(editor, SIGNAL(cursorPositionChanged()), this, SLOT(updateCursorPosition())); - connect(m_cursorPositionLabel, SIGNAL(clicked()), this, SLOT(openGotoLocator())); + connect(d->m_cursorPositionLabel, SIGNAL(clicked()), this, SLOT(openGotoLocator())); } BaseTextEditor::~BaseTextEditor() { - delete m_toolBar; - delete m_editorWidget; + delete d->m_toolBar; + delete d->m_editorWidget; + delete d; } BaseTextDocument *BaseTextEditor::baseTextDocument() { - return m_editorWidget->baseTextDocument(); + return d->m_editorWidget->baseTextDocument(); } IDocument *BaseTextEditor::document() { - return m_editorWidget->baseTextDocument(); + return d->m_editorWidget->baseTextDocument(); } QWidget *BaseTextEditor::toolBar() { - return m_toolBar; + return d->m_toolBar; } void BaseTextEditor::insertExtraToolBarWidget(BaseTextEditor::Side side, QWidget *widget) { if (widget->sizePolicy().horizontalPolicy() & QSizePolicy::ExpandFlag) { - if (m_stretchWidget) - m_stretchWidget->deleteLater(); - m_stretchWidget = 0; + if (d->m_stretchWidget) + d->m_stretchWidget->deleteLater(); + d->m_stretchWidget = 0; } if (side == Right) - m_toolBar->insertWidget(m_cursorPositionLabelAction, widget); + d->m_toolBar->insertWidget(d->m_cursorPositionLabelAction, widget); else - m_toolBar->insertWidget(m_toolBar->actions().first(), widget); + d->m_toolBar->insertWidget(d->m_toolBar->actions().first(), widget); } int BaseTextEditor::currentLine() const { - return m_editorWidget->textCursor().blockNumber() + 1; + return d->m_editorWidget->textCursor().blockNumber() + 1; } int BaseTextEditor::currentColumn() const { - QTextCursor cursor = m_editorWidget->textCursor(); + QTextCursor cursor = d->m_editorWidget->textCursor(); return cursor.position() - cursor.block().position() + 1; } void BaseTextEditor::gotoLine(int line, int column, bool centerLine) { - m_editorWidget->gotoLine(line, column, centerLine); + d->m_editorWidget->gotoLine(line, column, centerLine); } int BaseTextEditor::columnCount() const { - return m_editorWidget->columnCount(); + return d->m_editorWidget->columnCount(); } int BaseTextEditor::rowCount() const { - return m_editorWidget->rowCount(); + return d->m_editorWidget->rowCount(); } int BaseTextEditor::position(BaseTextEditor::PositionOperation posOp, int at) const { - return m_editorWidget->position(posOp, at); + return d->m_editorWidget->position(posOp, at); } void BaseTextEditor::convertPosition(int pos, int *line, int *column) const { - m_editorWidget->convertPosition(pos, line, column); + d->m_editorWidget->convertPosition(pos, line, column); } QRect BaseTextEditor::cursorRect(int pos) const { - QTextCursor tc = m_editorWidget->textCursor(); + QTextCursor tc = d->m_editorWidget->textCursor(); if (pos >= 0) tc.setPosition(pos); - QRect result = m_editorWidget->cursorRect(tc); - result.moveTo(m_editorWidget->viewport()->mapToGlobal(result.topLeft())); + QRect result = d->m_editorWidget->cursorRect(tc); + result.moveTo(d->m_editorWidget->viewport()->mapToGlobal(result.topLeft())); return result; } QString BaseTextEditor::selectedText() const { - return m_editorWidget->selectedText(); + return d->m_editorWidget->selectedText(); } void BaseTextEditor::remove(int length) { - QTextCursor tc = m_editorWidget->textCursor(); + QTextCursor tc = d->m_editorWidget->textCursor(); tc.setPosition(tc.position() + length, QTextCursor::KeepAnchor); tc.removeSelectedText(); } void BaseTextEditor::insert(const QString &string) { - m_editorWidget->insertPlainText(string); + d->m_editorWidget->insertPlainText(string); } void BaseTextEditor::replace(int length, const QString &string) { - QTextCursor tc = m_editorWidget->textCursor(); + QTextCursor tc = d->m_editorWidget->textCursor(); tc.setPosition(tc.position() + length, QTextCursor::KeepAnchor); tc.insertText(string); } void BaseTextEditor::setCursorPosition(int pos) { - m_editorWidget->setBlockSelection(false); - QTextCursor tc = m_editorWidget->textCursor(); + d->m_editorWidget->setBlockSelection(false); + QTextCursor tc = d->m_editorWidget->textCursor(); tc.setPosition(pos); - m_editorWidget->setTextCursor(tc); + d->m_editorWidget->setTextCursor(tc); } void BaseTextEditor::select(int toPos) { - m_editorWidget->setBlockSelection(false); - QTextCursor tc = m_editorWidget->textCursor(); + d->m_editorWidget->setBlockSelection(false); + QTextCursor tc = d->m_editorWidget->textCursor(); tc.setPosition(toPos, QTextCursor::KeepAnchor); - m_editorWidget->setTextCursor(tc); + d->m_editorWidget->setTextCursor(tc); } const CommentDefinition *BaseTextEditor::commentDefinition() const @@ -6537,20 +6553,25 @@ CompletionAssistProvider *BaseTextEditor::completionAssistProvider() return 0; } +QObject *BaseTextEditor::fileEncodingLabel() const +{ + return d->m_fileEncodingLabel; +} + void BaseTextEditor::updateCursorPosition() { - const QTextCursor cursor = m_editorWidget->textCursor(); + const QTextCursor cursor = d->m_editorWidget->textCursor(); const QTextBlock block = cursor.block(); const int line = block.blockNumber() + 1; const int column = cursor.position() - block.position(); - m_cursorPositionLabel->setText(tr("Line: %1, Col: %2").arg(line) + d->m_cursorPositionLabel->setText(tr("Line: %1, Col: %2").arg(line) .arg(baseTextDocument()->tabSettings().columnAt(block.text(), column)+1), tr("Line: 9999, Col: 999")); m_contextHelpId.clear(); if (!block.isVisible()) - m_editorWidget->ensureCursorVisible(); + d->m_editorWidget->ensureCursorVisible(); } @@ -6565,19 +6586,19 @@ void BaseTextEditor::openGotoLocator() void BaseTextEditor::setFileEncodingLabelVisible(bool visible) { - m_fileEncodingLabelAction->setVisible(visible); + d->m_fileEncodingLabelAction->setVisible(visible); } void BaseTextEditor::setFileEncodingLabelText(const QString &text) { - m_fileEncodingLabel->setText(text, text); + d->m_fileEncodingLabel->setText(text, text); } QString BaseTextEditor::contextHelpId() const { if (m_contextHelpId.isEmpty()) emit const_cast(this)->contextHelpIdRequested(const_cast(this), - m_editorWidget->textCursor().position()); + d->m_editorWidget->textCursor().position()); return m_contextHelpId; } @@ -6875,17 +6896,17 @@ QString BaseTextEditorWidget::foldReplacementText(const QTextBlock &) const bool BaseTextEditor::open(QString *errorString, const QString &fileName, const QString &realFileName) { - return m_editorWidget->open(errorString, fileName, realFileName); + return d->m_editorWidget->open(errorString, fileName, realFileName); } QByteArray BaseTextEditor::saveState() const { - return m_editorWidget->saveState(); + return d->m_editorWidget->saveState(); } bool BaseTextEditor::restoreState(const QByteArray &state) { - return m_editorWidget->restoreState(state); + return d->m_editorWidget->restoreState(state); } BaseTextDocument *BaseTextEditor::textDocument() @@ -6898,6 +6919,11 @@ BaseTextEditor *BaseTextEditor::currentTextEditor() return qobject_cast(Core::EditorManager::currentEditor()); } +BaseTextEditorWidget *BaseTextEditor::editorWidget() const +{ + return d->m_editorWidget; +} + } // namespace TextEditor #include "basetexteditor.moc" diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index ea36e8a4b1d..0a511c9f4ea 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -70,6 +70,7 @@ class CompletionAssistProvider; typedef QList RefactorMarkers; namespace Internal { + class BaseTextEditorPrivate; class BaseTextEditorWidgetPrivate; class TextEditorOverlay; } @@ -131,7 +132,7 @@ public: static BaseTextEditor *currentTextEditor(); friend class BaseTextEditorWidget; - BaseTextEditorWidget *editorWidget() const { return m_editorWidget; } + BaseTextEditorWidget *editorWidget() const; BaseTextDocument *baseTextDocument(); // IEditor @@ -183,6 +184,8 @@ public: virtual CompletionAssistProvider *completionAssistProvider(); + QObject *fileEncodingLabel() const; // FIXME: Remove + signals: void markRequested(TextEditor::BaseTextEditor *editor, int line, TextEditor::BaseTextEditor::MarkRequestKind kind); void markContextMenuRequested(TextEditor::BaseTextEditor *editor, int line, QMenu *menu); @@ -198,15 +201,7 @@ private slots: void setFileEncodingLabelText(const QString &text); private: - // Note: This is always a copy of IContext::m_widget. - BaseTextEditorWidget *m_editorWidget; - - QToolBar *m_toolBar; - QWidget *m_stretchWidget; - QAction *m_cursorPositionLabelAction; - Utils::LineColumnLabel *m_cursorPositionLabel; - QAction *m_fileEncodingLabelAction; - Utils::LineColumnLabel *m_fileEncodingLabel; + Internal::BaseTextEditorPrivate *d; };