Move DiffEditorController into DiffEditorDocument.

Prepare for making diff editor splittable.

Change-Id: I285ad46d095a98f2707d385558dfda0b10b77c1f
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
Jarek Kobus
2014-01-31 09:01:49 +01:00
committed by Jarek Kobus
parent 97895e9026
commit f156c3e013
5 changed files with 94 additions and 51 deletions

View File

@@ -116,20 +116,43 @@ void DescriptionEditorWidget::setDisplaySettings(const DisplaySettings &ds)
///////////////////////////////// DiffEditor ////////////////////////////////// ///////////////////////////////// DiffEditor //////////////////////////////////
DiffEditor::DiffEditor(SideBySideDiffEditorWidget *editorWidget) DiffEditor::DiffEditor()
: IEditor(0) : IEditor(0)
, m_toolWidget(0) , m_document(new Internal::DiffEditorDocument(QLatin1String(Constants::DIFF_EDITOR_MIMETYPE)))
, m_document(new Internal::DiffEditorDocument(QLatin1String(Constants::DIFF_EDITOR_MIMETYPE), this)) , m_descriptionWidget(0)
, m_diffWidget(editorWidget) , m_diffWidget(0)
, m_diffEditorController(0) , m_diffEditorController(0)
, m_toolBar(0)
, m_entriesComboBox(0) , m_entriesComboBox(0)
, m_toggleDescriptionAction(0) , m_toggleDescriptionAction(0)
{
ctor();
}
DiffEditor::DiffEditor(DiffEditor *other)
: IEditor(0)
, m_document(other->m_document)
, m_descriptionWidget(0)
, m_diffWidget(0)
, m_diffEditorController(0)
, m_toolBar(0)
, m_entriesComboBox(0)
, m_toggleDescriptionAction(0)
{
ctor();
}
void DiffEditor::ctor()
{ {
QSplitter *splitter = new Core::MiniSplitter(Qt::Vertical); QSplitter *splitter = new Core::MiniSplitter(Qt::Vertical);
m_descriptionWidget = new Internal::DescriptionEditorWidget(splitter); m_descriptionWidget = new Internal::DescriptionEditorWidget(splitter);
m_descriptionWidget->setReadOnly(true); m_descriptionWidget->setReadOnly(true);
splitter->addWidget(m_descriptionWidget); splitter->addWidget(m_descriptionWidget);
splitter->addWidget(editorWidget);
m_diffWidget = new SideBySideDiffEditorWidget(splitter);
splitter->addWidget(m_diffWidget);
setWidget(splitter); setWidget(splitter);
connect(TextEditorSettings::instance(), SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), connect(TextEditorSettings::instance(), SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
@@ -140,29 +163,34 @@ DiffEditor::DiffEditor(SideBySideDiffEditorWidget *editorWidget)
m_descriptionWidget->setCodeStyle(TextEditorSettings::codeStyle()); m_descriptionWidget->setCodeStyle(TextEditorSettings::codeStyle());
m_descriptionWidget->baseTextDocument()->setFontSettings(TextEditorSettings::fontSettings()); m_descriptionWidget->baseTextDocument()->setFontSettings(TextEditorSettings::fontSettings());
m_diffEditorController = editorWidget ? editorWidget->diffEditorController() : 0; m_diffEditorController = m_document->diffEditorController();
if (m_diffEditorController) { m_diffWidget->setDiffEditorController(m_diffEditorController);
connect(m_diffEditorController, SIGNAL(currentDiffFileIndexChanged(int)),
this, SLOT(activateEntry(int)));
connect(m_diffEditorController, SIGNAL(descriptionChanged(QString)),
this, SLOT(slotDescriptionChanged(QString)));
connect(m_diffEditorController, SIGNAL(descriptionEnablementChanged(bool)),
this, SLOT(slotDescriptionVisibilityChanged()));
connect(m_diffEditorController, SIGNAL(descriptionVisibilityChanged(bool)),
this, SLOT(slotDescriptionVisibilityChanged()));
slotDescriptionChanged(m_diffEditorController->description()); connect(m_diffEditorController, SIGNAL(currentDiffFileIndexChanged(int)),
slotDescriptionVisibilityChanged(); this, SLOT(activateEntry(int)));
} connect(m_diffEditorController, SIGNAL(descriptionChanged(QString)),
this, SLOT(slotDescriptionChanged(QString)));
connect(m_diffEditorController, SIGNAL(descriptionEnablementChanged(bool)),
this, SLOT(slotDescriptionVisibilityChanged()));
connect(m_diffEditorController, SIGNAL(descriptionVisibilityChanged(bool)),
this, SLOT(slotDescriptionVisibilityChanged()));
slotDescriptionChanged(m_diffEditorController->description());
slotDescriptionVisibilityChanged();
} }
DiffEditor::~DiffEditor() DiffEditor::~DiffEditor()
{ {
delete m_toolWidget; delete m_toolBar;
if (m_widget) if (m_widget)
delete m_widget; delete m_widget;
} }
Core::IEditor *DiffEditor::duplicate()
{
return new DiffEditor(this);
}
bool DiffEditor::open(QString *errorString, const QString &fileName, const QString &realFileName) bool DiffEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
{ {
Q_UNUSED(errorString) Q_UNUSED(errorString)
@@ -173,7 +201,7 @@ bool DiffEditor::open(QString *errorString, const QString &fileName, const QStri
Core::IDocument *DiffEditor::document() Core::IDocument *DiffEditor::document()
{ {
return m_document; return m_document.data();
} }
Core::Id DiffEditor::id() const Core::Id DiffEditor::id() const
@@ -199,11 +227,11 @@ static QToolBar *createToolBar(const QWidget *someWidget)
QWidget *DiffEditor::toolBar() QWidget *DiffEditor::toolBar()
{ {
if (m_toolWidget) if (m_toolBar)
return m_toolWidget; return m_toolBar;
// Create // Create
m_toolWidget = createToolBar(m_diffWidget); m_toolBar = createToolBar(m_diffWidget);
m_entriesComboBox = new QComboBox; m_entriesComboBox = new QComboBox;
m_entriesComboBox->setMinimumContentsLength(20); m_entriesComboBox->setMinimumContentsLength(20);
@@ -213,38 +241,38 @@ QWidget *DiffEditor::toolBar()
m_entriesComboBox->setSizePolicy(policy); m_entriesComboBox->setSizePolicy(policy);
connect(m_entriesComboBox, SIGNAL(activated(int)), connect(m_entriesComboBox, SIGNAL(activated(int)),
this, SLOT(entryActivated(int))); this, SLOT(entryActivated(int)));
m_toolWidget->addWidget(m_entriesComboBox); m_toolBar->addWidget(m_entriesComboBox);
QToolButton *whitespaceButton = new QToolButton(m_toolWidget); QToolButton *whitespaceButton = new QToolButton(m_toolBar);
whitespaceButton->setText(tr("Ignore Whitespace")); whitespaceButton->setText(tr("Ignore Whitespace"));
whitespaceButton->setCheckable(true); whitespaceButton->setCheckable(true);
whitespaceButton->setChecked(true); whitespaceButton->setChecked(true);
m_toolWidget->addWidget(whitespaceButton); m_toolBar->addWidget(whitespaceButton);
QLabel *contextLabel = new QLabel(m_toolWidget); QLabel *contextLabel = new QLabel(m_toolBar);
contextLabel->setText(tr("Context Lines:")); contextLabel->setText(tr("Context Lines:"));
contextLabel->setContentsMargins(6, 0, 6, 0); contextLabel->setContentsMargins(6, 0, 6, 0);
m_toolWidget->addWidget(contextLabel); m_toolBar->addWidget(contextLabel);
QSpinBox *contextSpinBox = new QSpinBox(m_toolWidget); QSpinBox *contextSpinBox = new QSpinBox(m_toolBar);
contextSpinBox->setRange(-1, 100); contextSpinBox->setRange(-1, 100);
contextSpinBox->setValue(3); contextSpinBox->setValue(3);
contextSpinBox->setFrame(false); contextSpinBox->setFrame(false);
contextSpinBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); // Mac Qt5 contextSpinBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); // Mac Qt5
m_toolWidget->addWidget(contextSpinBox); m_toolBar->addWidget(contextSpinBox);
QToolButton *toggleSync = new QToolButton(m_toolWidget); QToolButton *toggleSync = new QToolButton(m_toolBar);
toggleSync->setIcon(QIcon(QLatin1String(Core::Constants::ICON_LINK))); toggleSync->setIcon(QIcon(QLatin1String(Core::Constants::ICON_LINK)));
toggleSync->setCheckable(true); toggleSync->setCheckable(true);
toggleSync->setChecked(true); toggleSync->setChecked(true);
toggleSync->setToolTip(tr("Synchronize Horizontal Scroll Bars")); toggleSync->setToolTip(tr("Synchronize Horizontal Scroll Bars"));
m_toolWidget->addWidget(toggleSync); m_toolBar->addWidget(toggleSync);
QToolButton *toggleDescription = new QToolButton(m_toolWidget); QToolButton *toggleDescription = new QToolButton(m_toolBar);
toggleDescription->setIcon(QIcon(QLatin1String(Core::Constants::ICON_TOGGLE_TOPBAR))); toggleDescription->setIcon(QIcon(QLatin1String(Core::Constants::ICON_TOGGLE_TOPBAR)));
toggleDescription->setCheckable(true); toggleDescription->setCheckable(true);
toggleDescription->setChecked(true); toggleDescription->setChecked(true);
m_toggleDescriptionAction = m_toolWidget->addWidget(toggleDescription); m_toggleDescriptionAction = m_toolBar->addWidget(toggleDescription);
slotDescriptionVisibilityChanged(); slotDescriptionVisibilityChanged();
if (m_diffEditorController) { if (m_diffEditorController) {
@@ -259,7 +287,7 @@ QWidget *DiffEditor::toolBar()
// TODO: synchronize in opposite direction too // TODO: synchronize in opposite direction too
} }
return m_toolWidget; return m_toolBar;
} }
void DiffEditor::setDiff(const QList<DiffEditorController::DiffFilesContents> &diffFileList, void DiffEditor::setDiff(const QList<DiffEditorController::DiffFilesContents> &diffFileList,
@@ -367,7 +395,7 @@ void DiffEditor::slotDescriptionVisibilityChanged()
if (!m_toggleDescriptionAction) if (!m_toggleDescriptionAction)
return; return;
QWidget *toggle = m_toolWidget->widgetForAction(m_toggleDescriptionAction); QWidget *toggle = m_toolBar->widgetForAction(m_toggleDescriptionAction);
if (visible) if (visible)
toggle->setToolTip(tr("Hide Change Description")); toggle->setToolTip(tr("Hide Change Description"));
else else

View File

@@ -53,7 +53,8 @@ class DIFFEDITOR_EXPORT DiffEditor : public Core::IEditor
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit DiffEditor(SideBySideDiffEditorWidget *editorWidget); DiffEditor();
DiffEditor(DiffEditor *other);
virtual ~DiffEditor(); virtual ~DiffEditor();
public: public:
@@ -64,6 +65,9 @@ public:
void clear(const QString &message); void clear(const QString &message);
// Core::IEditor // Core::IEditor
bool duplicateSupported() const { return false; }
Core::IEditor *duplicate();
bool open(QString *errorString, const QString &fileName, const QString &realFileName); bool open(QString *errorString, const QString &fileName, const QString &realFileName);
Core::IDocument *document(); Core::IDocument *document();
Core::Id id() const; Core::Id id() const;
@@ -79,16 +83,15 @@ private slots:
void slotDescriptionChanged(const QString &description); void slotDescriptionChanged(const QString &description);
void slotDescriptionVisibilityChanged(); void slotDescriptionVisibilityChanged();
protected:
QToolBar *m_toolWidget;
private: private:
void ctor();
void updateEntryToolTip(); void updateEntryToolTip();
Internal::DiffEditorDocument *m_document; QSharedPointer<Internal::DiffEditorDocument> m_document;
TextEditor::BaseTextEditorWidget *m_descriptionWidget; TextEditor::BaseTextEditorWidget *m_descriptionWidget;
SideBySideDiffEditorWidget *m_diffWidget; SideBySideDiffEditorWidget *m_diffWidget;
DiffEditorController *m_diffEditorController; DiffEditorController *m_diffEditorController;
QToolBar *m_toolBar;
QComboBox *m_entriesComboBox; QComboBox *m_entriesComboBox;
QAction *m_toggleDescriptionAction; QAction *m_toggleDescriptionAction;
}; };

View File

@@ -29,6 +29,7 @@
#include "diffeditordocument.h" #include "diffeditordocument.h"
#include "diffeditorconstants.h" #include "diffeditorconstants.h"
#include "diffeditorcontroller.h"
#include <QCoreApplication> #include <QCoreApplication>
@@ -37,14 +38,24 @@ namespace Internal {
///////////////////////////////// DiffFile ////////////////////////////////// ///////////////////////////////// DiffFile //////////////////////////////////
DiffEditorDocument::DiffEditorDocument(const QString &mimeType, QObject *parent) : DiffEditorDocument::DiffEditorDocument(const QString &mimeType) :
Core::IDocument(parent), Core::IDocument(),
m_mimeType(mimeType) m_mimeType(mimeType),
m_diffEditorController(new DiffEditorController(this))
{ {
setDisplayName(QCoreApplication::translate("DiffEditor", Constants::DIFF_EDITOR_DISPLAY_NAME)); setDisplayName(QCoreApplication::translate("DiffEditor", Constants::DIFF_EDITOR_DISPLAY_NAME));
setTemporary(true); setTemporary(true);
} }
DiffEditorDocument::~DiffEditorDocument()
{
}
DiffEditorController *DiffEditorDocument::diffEditorController() const
{
return m_diffEditorController;
}
bool DiffEditorDocument::setContents(const QByteArray &contents) bool DiffEditorDocument::setContents(const QByteArray &contents)
{ {
Q_UNUSED(contents); Q_UNUSED(contents);

View File

@@ -36,14 +36,18 @@
namespace DiffEditor { namespace DiffEditor {
class DiffEditorController;
namespace Internal { namespace Internal {
class DiffEditorDocument : public Core::IDocument class DiffEditorDocument : public Core::IDocument
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit DiffEditorDocument(const QString &mimeType, explicit DiffEditorDocument(const QString &mimeType);
QObject *parent = 0); virtual ~DiffEditorDocument();
DiffEditorController *diffEditorController() const;
bool setContents(const QByteArray &contents); bool setContents(const QByteArray &contents);
QString defaultPath() const { return QString(); } QString defaultPath() const { return QString(); }
@@ -58,6 +62,7 @@ public:
private: private:
const QString m_mimeType; const QString m_mimeType;
DiffEditorController *m_diffEditorController;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -48,11 +48,7 @@ DiffEditorFactory::DiffEditorFactory(QObject *parent)
Core::IEditor *DiffEditorFactory::createEditor() Core::IEditor *DiffEditorFactory::createEditor()
{ {
SideBySideDiffEditorWidget *editorWidget = new SideBySideDiffEditorWidget(); return new DiffEditor();
DiffEditorController *editorController = new DiffEditorController(editorWidget);
editorWidget->setDiffEditorController(editorController);
DiffEditor *editor = new DiffEditor(editorWidget);
return editor;
} }
} // namespace Internal } // namespace Internal