diff --git a/src/plugins/diffeditor/CMakeLists.txt b/src/plugins/diffeditor/CMakeLists.txt index aa7731fc2af..fb4766d4a05 100644 --- a/src/plugins/diffeditor/CMakeLists.txt +++ b/src/plugins/diffeditor/CMakeLists.txt @@ -13,7 +13,6 @@ add_qtc_plugin(DiffEditor diffeditorwidgetcontroller.cpp diffeditorwidgetcontroller.h diffenums.h diffutils.cpp diffutils.h - diffview.cpp diffview.h selectabletexteditorwidget.cpp selectabletexteditorwidget.h sidebysidediffeditorwidget.cpp sidebysidediffeditorwidget.h unifieddiffeditorwidget.cpp unifieddiffeditorwidget.h diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp index 085b5b05593..1add32f331f 100644 --- a/src/plugins/diffeditor/diffeditor.cpp +++ b/src/plugins/diffeditor/diffeditor.cpp @@ -3,12 +3,13 @@ #include "diffeditor.h" -#include "diffenums.h" #include "diffeditorconstants.h" #include "diffeditordocument.h" #include "diffeditoricons.h" #include "diffeditortr.h" -#include "diffview.h" +#include "diffenums.h" +#include "sidebysidediffeditorwidget.h" +#include "unifieddiffeditorwidget.h" #include #include @@ -60,21 +61,249 @@ using namespace Utils; namespace DiffEditor::Internal { -class DescriptionEditorWidget : public TextEditorWidget +class IDiffView : public QObject +{ + Q_OBJECT + +public: + IDiffView() = default; + + QIcon icon() const { return m_icon; } + QString toolTip() const { return m_toolTip; } + bool supportsSync() const { return m_supportsSync; } + QString syncToolTip() const { return m_syncToolTip; } + Utils::Id id() const { return m_id; } + + virtual QWidget *widget() = 0; + virtual void setDocument(DiffEditorDocument *document) = 0; + + virtual void beginOperation() = 0; + virtual void setCurrentDiffFileIndex(int index) = 0; + virtual void setDiff(const QList &diffFileList) = 0; + virtual void setMessage(const QString &message) = 0; + virtual void endOperation() = 0; + + virtual void setSync(bool) = 0; + +signals: + void currentDiffFileIndexChanged(int index); + +protected: + void setIcon(const QIcon &icon) { m_icon = icon; } + void setToolTip(const QString &toolTip) { m_toolTip = toolTip; } + void setId(const Utils::Id &id) { m_id = id; } + void setSupportsSync(bool sync) { m_supportsSync = sync; } + void setSyncToolTip(const QString &text) { m_syncToolTip = text; } + +private: + QIcon m_icon; + QString m_toolTip; + Utils::Id m_id; + bool m_supportsSync = false; + QString m_syncToolTip; +}; + +class UnifiedView final : public IDiffView +{ +public: + UnifiedView() + { + setId(Constants::UNIFIED_VIEW_ID); + setIcon(Icons::UNIFIED_DIFF.icon()); + setToolTip(Tr::tr("Switch to Unified Diff Editor")); + } + + QWidget *widget() final; + + void setDocument(DiffEditorDocument *document) final; + + void beginOperation() final; + void setCurrentDiffFileIndex(int index) final; + void setDiff(const QList &diffFileList) final; + void setMessage(const QString &message) final; + void endOperation() final; + + void setSync(bool sync) final; + +private: + UnifiedDiffEditorWidget *m_widget = nullptr; +}; + +QWidget *UnifiedView::widget() +{ + if (!m_widget) { + m_widget = new UnifiedDiffEditorWidget; + connect(m_widget, &UnifiedDiffEditorWidget::currentDiffFileIndexChanged, + this, &UnifiedView::currentDiffFileIndexChanged); + } + return m_widget; +} + +void UnifiedView::setDocument(DiffEditorDocument *document) +{ + QTC_ASSERT(m_widget, return); + m_widget->setDocument(document); + if (!document) + return; + + switch (document->state()) { + case DiffEditorDocument::Reloading: + m_widget->clear(Tr::tr("Waiting for data...")); + break; + case DiffEditorDocument::LoadFailed: + m_widget->clear(Tr::tr("Retrieving data failed.")); + break; + default: + break; + } +} + +void UnifiedView::beginOperation() +{ + QTC_ASSERT(m_widget, return); + DiffEditorDocument *document = m_widget->diffDocument(); + if (document && document->state() == DiffEditorDocument::LoadOK) + m_widget->saveState(); +} + +void UnifiedView::setDiff(const QList &diffFileList) +{ + QTC_ASSERT(m_widget, return); + m_widget->setDiff(diffFileList); +} + +void UnifiedView::setMessage(const QString &message) +{ + m_widget->clear(message); +} + +void UnifiedView::endOperation() +{ + QTC_ASSERT(m_widget, return); + m_widget->restoreState(); +} + +void UnifiedView::setCurrentDiffFileIndex(int index) +{ + QTC_ASSERT(m_widget, return); + m_widget->setCurrentDiffFileIndex(index); +} + +void UnifiedView::setSync(bool sync) +{ + Q_UNUSED(sync) +} + +class SideBySideView final : public IDiffView +{ +public: + SideBySideView() + { + setId(Constants::SIDE_BY_SIDE_VIEW_ID); + setIcon(Icons::SIDEBYSIDE_DIFF.icon()); + setToolTip(Tr::tr("Switch to Side By Side Diff Editor")); + setSupportsSync(true); + setSyncToolTip(Tr::tr("Synchronize Horizontal Scroll Bars")); + } + + QWidget *widget() final; + + void setDocument(DiffEditorDocument *document) final; + + void beginOperation() final; + void setCurrentDiffFileIndex(int index) final; + void setDiff(const QList &diffFileList) final; + void setMessage(const QString &message) final; + void endOperation() final; + + void setSync(bool sync) final; + +private: + SideBySideDiffEditorWidget *m_widget = nullptr; +}; + +QWidget *SideBySideView::widget() +{ + if (!m_widget) { + m_widget = new SideBySideDiffEditorWidget; + connect(m_widget, &SideBySideDiffEditorWidget::currentDiffFileIndexChanged, + this, &SideBySideView::currentDiffFileIndexChanged); + } + return m_widget; +} + +void SideBySideView::setDocument(DiffEditorDocument *document) +{ + QTC_ASSERT(m_widget, return); + m_widget->setDocument(document); + if (!document) + return; + + switch (document->state()) { + case DiffEditorDocument::Reloading: + m_widget->clear(Tr::tr("Waiting for data...")); + break; + case DiffEditorDocument::LoadFailed: + m_widget->clear(Tr::tr("Retrieving data failed.")); + break; + default: + break; + } +} + +void SideBySideView::beginOperation() +{ + QTC_ASSERT(m_widget, return); + DiffEditorDocument *document = m_widget->diffDocument(); + if (document && document->state() == DiffEditorDocument::LoadOK) + m_widget->saveState(); +} + +void SideBySideView::setCurrentDiffFileIndex(int index) +{ + QTC_ASSERT(m_widget, return); + m_widget->setCurrentDiffFileIndex(index); +} + +void SideBySideView::setDiff(const QList &diffFileList) +{ + QTC_ASSERT(m_widget, return); + m_widget->setDiff(diffFileList); +} + +void SideBySideView::setMessage(const QString &message) +{ + QTC_ASSERT(m_widget, return); + m_widget->clear(message); +} + +void SideBySideView::endOperation() +{ + QTC_ASSERT(m_widget, return); + m_widget->restoreState(); +} + +void SideBySideView::setSync(bool sync) +{ + QTC_ASSERT(m_widget, return); + m_widget->setHorizontalSync(sync); +} + +class DescriptionEditorWidget final : public TextEditorWidget { Q_OBJECT public: DescriptionEditorWidget(QWidget *parent = nullptr); - QSize sizeHint() const override; + QSize sizeHint() const final; signals: void requestResize(); protected: - void setDisplaySettings(const DisplaySettings &ds) override; - void setMarginSettings(const MarginSettings &ms) override; - void applyFontSettings() override; + void setDisplaySettings(const DisplaySettings &ds) final; + void setMarginSettings(const MarginSettings &ms) final; + void applyFontSettings() final; }; DescriptionEditorWidget::DescriptionEditorWidget(QWidget *parent) @@ -130,15 +359,15 @@ void DescriptionEditorWidget::applyFontSettings() ///////////////////////////////// DiffEditor ////////////////////////////////// -class DiffEditor : public Core::IEditor +class DiffEditor final : public IEditor { public: - DiffEditor(DiffEditorDocument *doc); - ~DiffEditor() override; + explicit DiffEditor(DiffEditorDocument *doc); + ~DiffEditor() final; - Core::IEditor *duplicate() override; - Core::IDocument *document() const override; - QWidget *toolBar() override; + IEditor *duplicate() final; + IDocument *document() const final; + QWidget *toolBar() final; private: DiffEditor(); diff --git a/src/plugins/diffeditor/diffeditor.qbs b/src/plugins/diffeditor/diffeditor.qbs index 2713ec2fb73..0611bdea4c1 100644 --- a/src/plugins/diffeditor/diffeditor.qbs +++ b/src/plugins/diffeditor/diffeditor.qbs @@ -31,8 +31,6 @@ QtcPlugin { "diffenums.h", "diffutils.cpp", "diffutils.h", - "diffview.cpp", - "diffview.h", "selectabletexteditorwidget.cpp", "selectabletexteditorwidget.h", "sidebysidediffeditorwidget.cpp", diff --git a/src/plugins/diffeditor/diffview.cpp b/src/plugins/diffeditor/diffview.cpp deleted file mode 100644 index b3652bd0f0b..00000000000 --- a/src/plugins/diffeditor/diffview.cpp +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "diffview.h" - -#include "diffeditorconstants.h" -#include "diffeditordocument.h" -#include "diffeditoricons.h" -#include "diffeditortr.h" -#include "unifieddiffeditorwidget.h" -#include "sidebysidediffeditorwidget.h" - -#include - -#include - -namespace DiffEditor::Internal { - -IDiffView::IDiffView(QObject *parent) : QObject(parent) -{ } - -QIcon IDiffView::icon() const -{ - return m_icon; -} - -QString IDiffView::toolTip() const -{ - return m_toolTip; -} - -bool IDiffView::supportsSync() const -{ - return m_supportsSync; -} - -QString IDiffView::syncToolTip() const -{ - return m_syncToolTip; -} - -Utils::Id IDiffView::id() const -{ - return m_id; -} - -void IDiffView::setIcon(const QIcon &icon) -{ - m_icon = icon; -} - -void IDiffView::setToolTip(const QString &toolTip) -{ - m_toolTip = toolTip; -} - -void IDiffView::setId(const Utils::Id &id) -{ - m_id = id; -} - -void IDiffView::setSupportsSync(bool sync) -{ - m_supportsSync = sync; -} - -void IDiffView::setSyncToolTip(const QString &text) -{ - m_syncToolTip = text; -} - -UnifiedView::UnifiedView() -{ - setId(Constants::UNIFIED_VIEW_ID); - setIcon(Icons::UNIFIED_DIFF.icon()); - setToolTip(Tr::tr("Switch to Unified Diff Editor")); -} - -QWidget *UnifiedView::widget() -{ - if (!m_widget) { - m_widget = new UnifiedDiffEditorWidget; - connect(m_widget, &UnifiedDiffEditorWidget::currentDiffFileIndexChanged, - this, &UnifiedView::currentDiffFileIndexChanged); - } - return m_widget; -} - -void UnifiedView::setDocument(DiffEditorDocument *document) -{ - QTC_ASSERT(m_widget, return); - m_widget->setDocument(document); - if (!document) - return; - - switch (document->state()) { - case DiffEditorDocument::Reloading: - m_widget->clear(Tr::tr("Waiting for data...")); - break; - case DiffEditorDocument::LoadFailed: - m_widget->clear(Tr::tr("Retrieving data failed.")); - break; - default: - break; - } -} - -void UnifiedView::beginOperation() -{ - QTC_ASSERT(m_widget, return); - DiffEditorDocument *document = m_widget->diffDocument(); - if (document && document->state() == DiffEditorDocument::LoadOK) - m_widget->saveState(); -} - -void UnifiedView::setDiff(const QList &diffFileList) -{ - QTC_ASSERT(m_widget, return); - m_widget->setDiff(diffFileList); -} - -void UnifiedView::setMessage(const QString &message) -{ - m_widget->clear(message); -} - -void UnifiedView::endOperation() -{ - QTC_ASSERT(m_widget, return); - m_widget->restoreState(); -} - -void UnifiedView::setCurrentDiffFileIndex(int index) -{ - QTC_ASSERT(m_widget, return); - m_widget->setCurrentDiffFileIndex(index); -} - -void UnifiedView::setSync(bool sync) -{ - Q_UNUSED(sync) -} - -SideBySideView::SideBySideView() - : m_widget(nullptr) -{ - setId(Constants::SIDE_BY_SIDE_VIEW_ID); - setIcon(Icons::SIDEBYSIDE_DIFF.icon()); - setToolTip(Tr::tr("Switch to Side By Side Diff Editor")); - setSupportsSync(true); - setSyncToolTip(Tr::tr("Synchronize Horizontal Scroll Bars")); -} - -QWidget *SideBySideView::widget() -{ - if (!m_widget) { - m_widget = new SideBySideDiffEditorWidget; - connect(m_widget, &SideBySideDiffEditorWidget::currentDiffFileIndexChanged, - this, &SideBySideView::currentDiffFileIndexChanged); - } - return m_widget; -} - -void SideBySideView::setDocument(DiffEditorDocument *document) -{ - QTC_ASSERT(m_widget, return); - m_widget->setDocument(document); - if (!document) - return; - - switch (document->state()) { - case DiffEditorDocument::Reloading: - m_widget->clear(Tr::tr("Waiting for data...")); - break; - case DiffEditorDocument::LoadFailed: - m_widget->clear(Tr::tr("Retrieving data failed.")); - break; - default: - break; - } -} - -void SideBySideView::beginOperation() -{ - QTC_ASSERT(m_widget, return); - DiffEditorDocument *document = m_widget->diffDocument(); - if (document && document->state() == DiffEditorDocument::LoadOK) - m_widget->saveState(); -} - -void SideBySideView::setCurrentDiffFileIndex(int index) -{ - QTC_ASSERT(m_widget, return); - m_widget->setCurrentDiffFileIndex(index); -} - -void SideBySideView::setDiff(const QList &diffFileList) -{ - QTC_ASSERT(m_widget, return); - m_widget->setDiff(diffFileList); -} - -void SideBySideView::setMessage(const QString &message) -{ - QTC_ASSERT(m_widget, return); - m_widget->clear(message); -} - -void SideBySideView::endOperation() -{ - QTC_ASSERT(m_widget, return); - m_widget->restoreState(); -} - -void SideBySideView::setSync(bool sync) -{ - QTC_ASSERT(m_widget, return); - m_widget->setHorizontalSync(sync); -} - -} // namespace DiffEditor::Internal diff --git a/src/plugins/diffeditor/diffview.h b/src/plugins/diffeditor/diffview.h deleted file mode 100644 index 5e044203cda..00000000000 --- a/src/plugins/diffeditor/diffview.h +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "diffenums.h" - -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE -class QWidget; -QT_END_NAMESPACE - -namespace DiffEditor { - -class FileData; - -namespace Internal { - -class DiffEditorDocument; -class SideBySideDiffEditorWidget; -class UnifiedDiffEditorWidget; - -class IDiffView : public QObject -{ - Q_OBJECT - -public: - explicit IDiffView(QObject *parent = nullptr); - - QIcon icon() const; - QString toolTip() const; - bool supportsSync() const; - QString syncToolTip() const; - - Utils::Id id() const; - virtual QWidget *widget() = 0; - virtual void setDocument(DiffEditorDocument *document) = 0; - - virtual void beginOperation() = 0; - virtual void setCurrentDiffFileIndex(int index) = 0; - virtual void setDiff(const QList &diffFileList) = 0; - virtual void setMessage(const QString &message) = 0; - virtual void endOperation() = 0; - - virtual void setSync(bool) = 0; - -signals: - void currentDiffFileIndexChanged(int index); - -protected: - void setIcon(const QIcon &icon); - void setToolTip(const QString &toolTip); - void setId(const Utils::Id &id); - void setSupportsSync(bool sync); - void setSyncToolTip(const QString &text); - -private: - QIcon m_icon; - QString m_toolTip; - Utils::Id m_id; - bool m_supportsSync = false; - QString m_syncToolTip; -}; - -class UnifiedView : public IDiffView -{ - Q_OBJECT - -public: - UnifiedView(); - - QWidget *widget() override; - - void setDocument(DiffEditorDocument *document) override; - - void beginOperation() override; - void setCurrentDiffFileIndex(int index) override; - void setDiff(const QList &diffFileList) override; - void setMessage(const QString &message) override; - void endOperation() override; - - void setSync(bool sync) override; - -private: - UnifiedDiffEditorWidget *m_widget = nullptr; -}; - -class SideBySideView : public IDiffView -{ - Q_OBJECT - -public: - SideBySideView(); - - QWidget *widget() override; - - void setDocument(DiffEditorDocument *document) override; - - void beginOperation() override; - void setCurrentDiffFileIndex(int index) override; - void setDiff(const QList &diffFileList) override; - void setMessage(const QString &message) override; - void endOperation() override; - - void setSync(bool sync) override; - -private: - SideBySideDiffEditorWidget *m_widget; -}; - -} // namespace Internal -} // namespace DiffEditor diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.h b/src/plugins/diffeditor/sidebysidediffeditorwidget.h index a7e69fc2d6e..acec402b7e6 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.h +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.h @@ -95,8 +95,9 @@ using SideBySideShowResults = std::array; class SideBySideDiffEditorWidget : public QWidget { Q_OBJECT + public: - explicit SideBySideDiffEditorWidget(QWidget *parent = nullptr); + SideBySideDiffEditorWidget(QWidget *parent = nullptr); ~SideBySideDiffEditorWidget(); void setDocument(DiffEditorDocument *document);