From bd319da256e613aa2ecb92a5ab658f54e92085bc Mon Sep 17 00:00:00 2001 From: Jochen Becher Date: Sun, 14 Feb 2016 11:02:49 +0100 Subject: [PATCH] ModelEditor: Introduce factory for properties view class The factory allows usage of inherited view class for easy properties extensions. Change-Id: I73303a9c6f96df48dea508eadb9e829af32cdbe5 Reviewed-by: Tobias Hunger --- .../qmt/model_widgets_ui/propertiesview.cpp | 10 ++++++++-- .../modelinglib/qmt/model_widgets_ui/propertiesview.h | 6 +++++- .../qmt/model_widgets_ui/propertiesviewmview.h | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.cpp b/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.cpp index 520e7c0fb5e..0c59fe20c1f 100644 --- a/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.cpp +++ b/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.cpp @@ -43,6 +43,7 @@ PropertiesView::PropertiesView(QObject *parent) m_diagramController(0), m_stereotypeController(0), m_styleController(0), + m_viewFactory([=](PropertiesView *propertiesView) { return new MView(propertiesView); }), m_selectedDiagram(0), m_widget(0) { @@ -149,6 +150,11 @@ void PropertiesView::setStyleController(StyleController *styleController) m_styleController = styleController; } +void PropertiesView::setMViewFactory(std::function factory) +{ + m_viewFactory = factory; +} + void PropertiesView::setSelectedModelElements(const QList &modelElements) { QMT_CHECK(modelElements.size() > 0); @@ -157,7 +163,7 @@ void PropertiesView::setSelectedModelElements(const QList &modelElem m_selectedModelElements = modelElements; m_selectedDiagramElements.clear(); m_selectedDiagram = 0; - m_mview.reset(new MView(this)); + m_mview.reset(m_viewFactory(this)); m_mview->update(m_selectedModelElements); m_widget = m_mview->topLevelWidget(); } @@ -172,7 +178,7 @@ void PropertiesView::setSelectedDiagramElements(const QList &diagram m_selectedDiagramElements = diagramElements; m_selectedDiagram = diagram; m_selectedModelElements.clear(); - m_mview.reset(new MView(this)); + m_mview.reset(m_viewFactory(this)); m_mview->update(m_selectedDiagramElements, m_selectedDiagram); m_widget = m_mview->topLevelWidget(); } diff --git a/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.h b/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.h index 94f59af5779..a4ea9b4d07a 100644 --- a/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.h +++ b/src/libs/modelinglib/qmt/model_widgets_ui/propertiesview.h @@ -31,6 +31,7 @@ #include "qmt/infrastructure/qmt_global.h" #include +#include QT_BEGIN_NAMESPACE class QWidget; @@ -51,9 +52,10 @@ class StyleController; class QMT_EXPORT PropertiesView : public QObject { Q_OBJECT - class MView; public: + class MView; + explicit PropertiesView(QObject *parent = 0); ~PropertiesView() override; @@ -65,6 +67,7 @@ public: void setStereotypeController(StereotypeController *stereotypeController); StyleController *styleController() const { return m_styleController; } void setStyleController(StyleController *styleController); + void setMViewFactory(std::function factory); QList selectedModelElements() const { return m_selectedModelElements; } void setSelectedModelElements(const QList &modelElements); @@ -118,6 +121,7 @@ private: DiagramController *m_diagramController; StereotypeController *m_stereotypeController; StyleController *m_styleController; + std::function m_viewFactory; QList m_selectedModelElements; QList m_selectedDiagramElements; MDiagram *m_selectedDiagram; diff --git a/src/libs/modelinglib/qmt/model_widgets_ui/propertiesviewmview.h b/src/libs/modelinglib/qmt/model_widgets_ui/propertiesviewmview.h index 78288836ba7..b5daf798dee 100644 --- a/src/libs/modelinglib/qmt/model_widgets_ui/propertiesviewmview.h +++ b/src/libs/modelinglib/qmt/model_widgets_ui/propertiesviewmview.h @@ -98,7 +98,7 @@ public: void update(QList &diagramElements, MDiagram *diagram); void edit(); -private: +protected: void onStereotypesChanged(const QString &stereotypes); void onObjectNameChanged(const QString &name); void onNamespaceChanged(const QString ¨Namespace);