DiffEditor: Move IDiffView hierarchy to diffeditor.cpp

And remove two unused Q_OBJECTs.

Change-Id: I9628ce60e3951794d267acd61ca0f9b76ee979db
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2024-10-10 08:25:39 +02:00
parent dbf8642d8a
commit 3f21e4d2d9
6 changed files with 244 additions and 355 deletions

View File

@@ -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

View File

@@ -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 <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
@@ -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<FileData> &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<FileData> &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<FileData> &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<FileData> &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<FileData> &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();

View File

@@ -31,8 +31,6 @@ QtcPlugin {
"diffenums.h",
"diffutils.cpp",
"diffutils.h",
"diffview.cpp",
"diffview.h",
"selectabletexteditorwidget.cpp",
"selectabletexteditorwidget.h",
"sidebysidediffeditorwidget.cpp",

View File

@@ -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 <utils/qtcassert.h>
#include <QCoreApplication>
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<FileData> &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<FileData> &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

View File

@@ -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 <utils/id.h>
#include <QIcon>
#include <QString>
#include <QObject>
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<FileData> &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<FileData> &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<FileData> &diffFileList) override;
void setMessage(const QString &message) override;
void endOperation() override;
void setSync(bool sync) override;
private:
SideBySideDiffEditorWidget *m_widget;
};
} // namespace Internal
} // namespace DiffEditor

View File

@@ -95,8 +95,9 @@ using SideBySideShowResults = std::array<SideBySideShowResult, SideCount>;
class SideBySideDiffEditorWidget : public QWidget
{
Q_OBJECT
public:
explicit SideBySideDiffEditorWidget(QWidget *parent = nullptr);
SideBySideDiffEditorWidget(QWidget *parent = nullptr);
~SideBySideDiffEditorWidget();
void setDocument(DiffEditorDocument *document);