DesignMode: Apply 'static pattern'

Also:
 - and replace some occurrences of DesignMode::instance()->id() by
   Core::Constants::MODE_DESIGN for less dependence on the lifetime
   of the DesignMode object (and less indirection)
 - remove storage if DesignMode::instance() values when direct
   use of the static functions suffice
 - remove some unused items from the interface
 - use member-initialization in DesignMode::Private.

Change-Id: Ie66c06da0fc0a3ccc588b8079e51db6b39284152
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2018-01-23 09:09:46 +01:00
parent fba61c5b55
commit 2b76504bd2
9 changed files with 28 additions and 50 deletions

View File

@@ -91,7 +91,7 @@ CorePlugin::~CorePlugin()
} }
if (m_designMode) { if (m_designMode) {
if (m_designMode->designModeIsRequired()) if (DesignMode::designModeIsRequired())
removeObject(m_designMode); removeObject(m_designMode);
delete m_designMode; delete m_designMode;
} }
@@ -226,7 +226,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
void CorePlugin::extensionsInitialized() void CorePlugin::extensionsInitialized()
{ {
if (m_designMode->designModeIsRequired()) if (DesignMode::designModeIsRequired())
addObject(m_designMode); addObject(m_designMode);
Find::extensionsInitialized(); Find::extensionsInitialized();
m_locator->extensionsInitialized(); m_locator->extensionsInitialized();

View File

@@ -40,8 +40,6 @@
#include <QStackedWidget> #include <QStackedWidget>
static Core::DesignMode *m_instance = 0;
namespace Core { namespace Core {
struct DesignEditorInfo struct DesignEditorInfo
@@ -60,17 +58,15 @@ public:
public: public:
QPointer<IEditor> m_currentEditor; QPointer<IEditor> m_currentEditor;
bool m_isActive; bool m_isActive = false;
bool m_isRequired; bool m_isRequired = false;
QList<DesignEditorInfo*> m_editors; QList<DesignEditorInfo*> m_editors;
QStackedWidget *m_stackWidget; QStackedWidget *m_stackWidget;
Context m_activeContext; Context m_activeContext;
}; };
DesignModePrivate::DesignModePrivate() DesignModePrivate::DesignModePrivate()
: m_isActive(false), : m_stackWidget(new QStackedWidget)
m_isRequired(false),
m_stackWidget(new QStackedWidget)
{} {}
DesignModePrivate::~DesignModePrivate() DesignModePrivate::~DesignModePrivate()
@@ -78,10 +74,13 @@ DesignModePrivate::~DesignModePrivate()
delete m_stackWidget; delete m_stackWidget;
} }
static DesignMode *m_instance = nullptr;
static DesignModePrivate *d = nullptr;
DesignMode::DesignMode() DesignMode::DesignMode()
: d(new DesignModePrivate)
{ {
m_instance = this; m_instance = this;
d = new DesignModePrivate;
ICore::addPreCloseListener([]() -> bool { ICore::addPreCloseListener([]() -> bool {
m_instance->currentEditorChanged(0); m_instance->currentEditorChanged(0);
@@ -121,19 +120,11 @@ void DesignMode::setDesignModeIsRequired()
d->m_isRequired = true; d->m_isRequired = true;
} }
bool DesignMode::designModeIsRequired() const bool DesignMode::designModeIsRequired()
{ {
return d->m_isRequired; return d->m_isRequired;
} }
QStringList DesignMode::registeredMimeTypes() const
{
QStringList rc;
foreach (const DesignEditorInfo *i, d->m_editors)
rc += i->mimeTypes;
return rc;
}
/** /**
* Registers a widget to be displayed when an editor with a file specified in * Registers a widget to be displayed when an editor with a file specified in
* mimeTypes is opened. This also appends the additionalContext in ICore to * mimeTypes is opened. This also appends the additionalContext in ICore to

View File

@@ -30,8 +30,6 @@
namespace Core { namespace Core {
class IEditor; class IEditor;
namespace Internal { class DesignModeCoreListener; }
/** /**
* A global mode for Design pane - used by Bauhaus (QML Designer) and * A global mode for Design pane - used by Bauhaus (QML Designer) and
* Qt Designer. Other plugins can register themselves by registerDesignWidget() * Qt Designer. Other plugins can register themselves by registerDesignWidget()
@@ -39,8 +37,6 @@ namespace Internal { class DesignModeCoreListener; }
* to the main editor widget itself. * to the main editor widget itself.
*/ */
class DesignModePrivate;
class CORE_EXPORT DesignMode : public IMode class CORE_EXPORT DesignMode : public IMode
{ {
Q_OBJECT Q_OBJECT
@@ -51,15 +47,13 @@ public:
static DesignMode *instance(); static DesignMode *instance();
void setDesignModeIsRequired(); static void setDesignModeIsRequired();
bool designModeIsRequired() const; static bool designModeIsRequired();
void registerDesignWidget(QWidget *widget, static void registerDesignWidget(QWidget *widget,
const QStringList &mimeTypes, const QStringList &mimeTypes,
const Context &context); const Context &context);
void unregisterDesignWidget(QWidget *widget); static void unregisterDesignWidget(QWidget *widget);
QStringList registeredMimeTypes() const;
signals: signals:
void actionsUpdated(Core::IEditor *editor); void actionsUpdated(Core::IEditor *editor);
@@ -70,9 +64,6 @@ private:
void currentEditorChanged(IEditor *editor); void currentEditorChanged(IEditor *editor);
void updateContext(Id newMode, Id oldMode); void updateContext(Id newMode, Id oldMode);
void setActiveContext(const Context &context); void setActiveContext(const Context &context);
DesignModePrivate *d;
friend class Internal::DesignModeCoreListener;
}; };
} // namespace Core } // namespace Core

View File

@@ -117,7 +117,7 @@ bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error)
void FormEditorPlugin::extensionsInitialized() void FormEditorPlugin::extensionsInitialized()
{ {
DesignMode::instance()->setDesignModeIsRequired(); DesignMode::setDesignModeIsRequired();
// 4) test and make sure everything works (undo, saving, editors, opening/closing multiple files, dirtiness etc) // 4) test and make sure everything works (undo, saving, editors, opening/closing multiple files, dirtiness etc)
ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS); ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS);

View File

@@ -215,7 +215,6 @@ public:
QList<Id> m_toolActionIds; QList<Id> m_toolActionIds;
QWidget *m_modeWidget = nullptr; QWidget *m_modeWidget = nullptr;
EditorWidget *m_editorWidget = nullptr; EditorWidget *m_editorWidget = nullptr;
DesignMode *m_designMode = nullptr;
QWidget *m_editorToolBar = nullptr; QWidget *m_editorToolBar = nullptr;
EditorToolBar *m_toolBar = nullptr; EditorToolBar *m_toolBar = nullptr;
@@ -283,7 +282,7 @@ FormEditorData::~FormEditorData()
m_editorWidget->saveSettings(s); m_editorWidget->saveSettings(s);
s->endGroup(); s->endGroup();
m_designMode->unregisterDesignWidget(m_modeWidget); DesignMode::unregisterDesignWidget(m_modeWidget);
delete m_modeWidget; delete m_modeWidget;
m_modeWidget = nullptr; m_modeWidget = nullptr;
} }
@@ -406,7 +405,6 @@ void FormEditorData::fullInit()
m_toolBar->setNavigationVisible(false); m_toolBar->setNavigationVisible(false);
m_toolBar->addCenterToolBar(m_editorToolBar); m_toolBar->addCenterToolBar(m_editorToolBar);
m_designMode = DesignMode::instance();
m_modeWidget = new QWidget; m_modeWidget = new QWidget;
m_modeWidget->setObjectName("DesignerModeWidget"); m_modeWidget->setObjectName("DesignerModeWidget");
QVBoxLayout *layout = new QVBoxLayout; QVBoxLayout *layout = new QVBoxLayout;
@@ -417,7 +415,7 @@ void FormEditorData::fullInit()
// 'Run' in 'Design' mode emits output. // 'Run' in 'Design' mode emits output.
MiniSplitter *splitter = new MiniSplitter(Qt::Vertical); MiniSplitter *splitter = new MiniSplitter(Qt::Vertical);
splitter->addWidget(m_editorWidget); splitter->addWidget(m_editorWidget);
QWidget *outputPane = new OutputPanePlaceHolder(m_designMode->id(), splitter); QWidget *outputPane = new OutputPanePlaceHolder(Core::Constants::MODE_DESIGN, splitter);
outputPane->setObjectName("DesignerOutputPanePlaceHolder"); outputPane->setObjectName("DesignerOutputPanePlaceHolder");
splitter->addWidget(outputPane); splitter->addWidget(outputPane);
layout->addWidget(splitter); layout->addWidget(splitter);
@@ -428,7 +426,7 @@ void FormEditorData::fullInit()
m_context = new DesignerContext(designerContexts, m_modeWidget, m_instance); m_context = new DesignerContext(designerContexts, m_modeWidget, m_instance);
ICore::addContextObject(m_context); ICore::addContextObject(m_context);
m_designMode->registerDesignWidget(m_modeWidget, QStringList(FORM_MIMETYPE), m_contexts); DesignMode::registerDesignWidget(m_modeWidget, QStringList(FORM_MIMETYPE), m_contexts);
setupViewActions(); setupViewActions();

View File

@@ -117,7 +117,7 @@ static bool checkIfEditorIsQtQuick(Core::IEditor *editor)
static bool isDesignerMode(Core::Id mode) static bool isDesignerMode(Core::Id mode)
{ {
return mode == Core::DesignMode::instance()->id(); return mode == Core::Constants::MODE_DESIGN;
} }
static bool documentIsAlreadyOpen(DesignDocument *designDocument, Core::IEditor *editor, Core::Id newMode) static bool documentIsAlreadyOpen(DesignDocument *designDocument, Core::IEditor *editor, Core::Id newMode)
@@ -158,7 +158,7 @@ QmlDesignerPlugin::QmlDesignerPlugin()
QmlDesignerPlugin::~QmlDesignerPlugin() QmlDesignerPlugin::~QmlDesignerPlugin()
{ {
if (d) { if (d) {
Core::DesignMode::instance()->unregisterDesignWidget(d->mainWidget); Core::DesignMode::unregisterDesignWidget(d->mainWidget);
Core::ICore::removeContextObject(d->context); Core::ICore::removeContextObject(d->context);
d->context = nullptr; d->context = nullptr;
} }
@@ -251,7 +251,7 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget)
const QStringList mimeTypes = { QmlJSTools::Constants::QML_MIMETYPE, const QStringList mimeTypes = { QmlJSTools::Constants::QML_MIMETYPE,
QmlJSTools::Constants::QMLUI_MIMETYPE }; QmlJSTools::Constants::QMLUI_MIMETYPE };
Core::DesignMode::instance()->registerDesignWidget(modeWidget, mimeTypes, d->context->context()); Core::DesignMode::registerDesignWidget(modeWidget, mimeTypes, d->context->context());
connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated, connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated,
&d->shortCutManager, &ShortCutManager::updateActions); &d->shortCutManager, &ShortCutManager::updateActions);

View File

@@ -118,7 +118,7 @@ ScxmlEditorData::~ScxmlEditorData()
ICore::removeContextObject(m_context); ICore::removeContextObject(m_context);
if (m_modeWidget) { if (m_modeWidget) {
m_designMode->unregisterDesignWidget(m_modeWidget); DesignMode::unregisterDesignWidget(m_modeWidget);
delete m_modeWidget; delete m_modeWidget;
m_modeWidget = nullptr; m_modeWidget = nullptr;
} }
@@ -132,7 +132,6 @@ void ScxmlEditorData::fullInit()
m_widgetStack = new ScxmlEditorStack; m_widgetStack = new ScxmlEditorStack;
m_widgetToolBar = new QToolBar; m_widgetToolBar = new QToolBar;
m_mainToolBar = createMainToolBar(); m_mainToolBar = createMainToolBar();
m_designMode = DesignMode::instance();
m_modeWidget = createModeWidget(); m_modeWidget = createModeWidget();
// Create undo/redo group/actions // Create undo/redo group/actions
@@ -153,7 +152,7 @@ void ScxmlEditorData::fullInit()
m_context = new ScxmlContext(scxmlContexts, m_modeWidget, this); m_context = new ScxmlContext(scxmlContexts, m_modeWidget, this);
ICore::addContextObject(m_context); ICore::addContextObject(m_context);
m_designMode->registerDesignWidget(m_modeWidget, QStringList(QLatin1String(ProjectExplorer::Constants::SCXML_MIMETYPE)), m_contexts); DesignMode::registerDesignWidget(m_modeWidget, QStringList(QLatin1String(ProjectExplorer::Constants::SCXML_MIMETYPE)), m_contexts);
} }
IEditor *ScxmlEditorData::createEditor() IEditor *ScxmlEditorData::createEditor()
@@ -232,7 +231,7 @@ QWidget *ScxmlEditorData::createModeWidget()
// 'Run' in 'Design' mode emits output. // 'Run' in 'Design' mode emits output.
auto splitter = new MiniSplitter(Qt::Vertical); auto splitter = new MiniSplitter(Qt::Vertical);
splitter->addWidget(m_widgetStack); splitter->addWidget(m_widgetStack);
auto outputPane = new OutputPanePlaceHolder(m_designMode->id(), splitter); auto outputPane = new OutputPanePlaceHolder(Core::Constants::MODE_DESIGN, splitter);
outputPane->setObjectName("DesignerOutputPanePlaceHolder"); outputPane->setObjectName("DesignerOutputPanePlaceHolder");
splitter->addWidget(outputPane); splitter->addWidget(outputPane);
layout->addWidget(splitter); layout->addWidget(splitter);

View File

@@ -29,8 +29,8 @@
#include <QUndoGroup> #include <QUndoGroup>
#include <QCoreApplication> #include <QCoreApplication>
#include <coreplugin/designmode.h>
#include <coreplugin/editortoolbar.h> #include <coreplugin/editortoolbar.h>
#include <coreplugin/icontext.h>
using namespace Core; using namespace Core;
@@ -61,7 +61,6 @@ private:
Context m_contexts; Context m_contexts;
QWidget *m_modeWidget = nullptr; QWidget *m_modeWidget = nullptr;
ScxmlEditorStack *m_widgetStack = nullptr; ScxmlEditorStack *m_widgetStack = nullptr;
DesignMode *m_designMode = nullptr;
QToolBar *m_widgetToolBar = nullptr; QToolBar *m_widgetToolBar = nullptr;
EditorToolBar *m_mainToolBar = nullptr; EditorToolBar *m_mainToolBar = nullptr;
QUndoGroup *m_undoGroup = nullptr; QUndoGroup *m_undoGroup = nullptr;

View File

@@ -58,7 +58,7 @@ bool ScxmlEditorPlugin::initialize(const QStringList &arguments, QString *errorS
void ScxmlEditorPlugin::extensionsInitialized() void ScxmlEditorPlugin::extensionsInitialized()
{ {
DesignMode::instance()->setDesignModeIsRequired(); DesignMode::setDesignModeIsRequired();
} }
ExtensionSystem::IPlugin::ShutdownFlag ScxmlEditorPlugin::aboutToShutdown() ExtensionSystem::IPlugin::ShutdownFlag ScxmlEditorPlugin::aboutToShutdown()