From 51799ab33a99fde982cad80251734a166a090894 Mon Sep 17 00:00:00 2001 From: Matthias Puchner <github@mpuchner.de> Date: Mon, 22 Nov 2021 14:33:57 +0100 Subject: [PATCH] mv toggle action creation to ActionFactory instead of improper place (in toggled widget) --- GUI/Util/ActionFactory.cpp | 14 +++++++++++++ GUI/Util/ActionFactory.h | 7 +++++++ GUI/View/Compare/FitComparisonWidget.cpp | 6 +++++- GUI/View/Compare/FitComparisonWidget.h | 1 + GUI/View/Compare/FitComparisonWidget1D.cpp | 6 +++++- GUI/View/Compare/FitComparisonWidget1D.h | 1 + GUI/View/Intensity/IntensityDataWidget.cpp | 7 ++++++- GUI/View/Intensity/IntensityDataWidget.h | 1 + GUI/View/Mask/MaskEditorActions.cpp | 6 ++---- .../PropertyEditor/ItemPropertyWidget.cpp | 20 +------------------ GUI/View/PropertyEditor/ItemPropertyWidget.h | 8 -------- GUI/View/SpecularData/SpecularDataWidget.cpp | 6 +++++- GUI/View/SpecularData/SpecularDataWidget.h | 1 + 13 files changed, 49 insertions(+), 35 deletions(-) diff --git a/GUI/Util/ActionFactory.cpp b/GUI/Util/ActionFactory.cpp index c599a3f5dc2..6987927d820 100644 --- a/GUI/Util/ActionFactory.cpp +++ b/GUI/Util/ActionFactory.cpp @@ -44,3 +44,17 @@ QAction* ActionFactory::createShowInRealSpaceAction(QObject* parent, const QStri return action; } + +QAction* ActionFactory::createTogglePropertiesPanelAction(QObject* parent, QWidget* toggledWidget) +{ + auto* action = new QAction(parent); + action->setText("Properties"); + action->setIcon(QIcon(":/images/dock-right.svg")); + action->setToolTip("Toggle properties panel"); + action->setCheckable(true); + + if (toggledWidget) + QObject::connect(action, &QAction::triggered, toggledWidget, &QWidget::setVisible); + + return action; +} diff --git a/GUI/Util/ActionFactory.h b/GUI/Util/ActionFactory.h index a3f74a4bbfb..13d41aaf42c 100644 --- a/GUI/Util/ActionFactory.h +++ b/GUI/Util/ActionFactory.h @@ -20,6 +20,7 @@ class QAction; class QObject; class QString; +class QWidget; //! Factory to create commonly used actions class ActionFactory { @@ -44,6 +45,12 @@ public: static QAction* createShowInRealSpaceAction(QObject* parent, const QString& what, std::function<void()> slot = nullptr); + //! Create "toggle properties panel" action. + //! + //! If toggledWidget is given, it will be shown/hidden when the actions changes its state. + static QAction* createTogglePropertiesPanelAction(QObject* parent, + QWidget* toggledWidget = nullptr); + private: ActionFactory() = default; }; diff --git a/GUI/View/Compare/FitComparisonWidget.cpp b/GUI/View/Compare/FitComparisonWidget.cpp index 06d4a9731cf..bf3d8e2454f 100644 --- a/GUI/View/Compare/FitComparisonWidget.cpp +++ b/GUI/View/Compare/FitComparisonWidget.cpp @@ -17,6 +17,7 @@ #include "GUI/Model/Data/RealDataItem.h" #include "GUI/Model/Fit/FitSuiteItem.h" #include "GUI/Model/Job/JobItem.h" +#include "GUI/Util/ActionFactory.h" #include "GUI/View/Compare/FitComparisonController.h" #include "GUI/View/Compare/FitFlowWidget.h" #include "GUI/View/Intensity/ColorMap.h" @@ -66,6 +67,9 @@ FitComparisonWidget::FitComparisonWidget(QWidget* parent) m_resetViewAction->setToolTip("Reset View"); connect(m_resetViewAction, &QAction::triggered, this, &FitComparisonWidget::onResetViewAction); + m_togglePropertiesAction = + ActionFactory::createTogglePropertiesPanelAction(this, m_propertyWidget); + m_propertyWidget->setVisible(false); } @@ -73,7 +77,7 @@ FitComparisonWidget::~FitComparisonWidget() = default; QList<QAction*> FitComparisonWidget::actionList() { - return QList<QAction*>() << m_resetViewAction << m_propertyWidget->actionList(); + return QList<QAction*>() << m_resetViewAction << m_togglePropertiesAction; } void FitComparisonWidget::subscribeToItem() diff --git a/GUI/View/Compare/FitComparisonWidget.h b/GUI/View/Compare/FitComparisonWidget.h index f4d558c22e1..b4ff768df15 100644 --- a/GUI/View/Compare/FitComparisonWidget.h +++ b/GUI/View/Compare/FitComparisonWidget.h @@ -62,6 +62,7 @@ private: ItemPropertyWidget* m_propertyWidget; QAction* m_resetViewAction; + QAction* m_togglePropertiesAction; FitComparisonController2D* m_comparisonController; }; diff --git a/GUI/View/Compare/FitComparisonWidget1D.cpp b/GUI/View/Compare/FitComparisonWidget1D.cpp index 061bfb12d3f..a5ddc2f560f 100644 --- a/GUI/View/Compare/FitComparisonWidget1D.cpp +++ b/GUI/View/Compare/FitComparisonWidget1D.cpp @@ -17,6 +17,7 @@ #include "GUI/Model/Data/RealDataItem.h" #include "GUI/Model/Fit/FitSuiteItem.h" #include "GUI/Model/Job/JobItem.h" +#include "GUI/Util/ActionFactory.h" #include "GUI/View/Compare/FitComparisonViewController.h" #include "GUI/View/Compare/FitFlowWidget.h" #include "GUI/View/Intensity/Plot1D.h" @@ -65,6 +66,9 @@ FitComparisonWidget1D::FitComparisonWidget1D(QWidget* parent) connect(m_resetViewAction, &QAction::triggered, this, &FitComparisonWidget1D::onResetViewAction); + m_togglePropertiesAction = + ActionFactory::createTogglePropertiesPanelAction(this, m_propertyWidget); + m_propertyWidget->setVisible(false); } @@ -72,7 +76,7 @@ FitComparisonWidget1D::~FitComparisonWidget1D() = default; QList<QAction*> FitComparisonWidget1D::actionList() { - return QList<QAction*>() << m_resetViewAction << m_propertyWidget->actionList(); + return QList<QAction*>() << m_resetViewAction << m_togglePropertiesAction; } void FitComparisonWidget1D::subscribeToItem() diff --git a/GUI/View/Compare/FitComparisonWidget1D.h b/GUI/View/Compare/FitComparisonWidget1D.h index 17f157e85e4..cb601e160f9 100644 --- a/GUI/View/Compare/FitComparisonWidget1D.h +++ b/GUI/View/Compare/FitComparisonWidget1D.h @@ -55,6 +55,7 @@ private: ItemPropertyWidget* m_propertyWidget; QAction* m_resetViewAction; + QAction* m_togglePropertiesAction; FitComparison1DViewController* m_comparisonController; }; diff --git a/GUI/View/Intensity/IntensityDataWidget.cpp b/GUI/View/Intensity/IntensityDataWidget.cpp index 323be672082..3f5fb48b20b 100644 --- a/GUI/View/Intensity/IntensityDataWidget.cpp +++ b/GUI/View/Intensity/IntensityDataWidget.cpp @@ -15,6 +15,7 @@ #include "GUI/View/Intensity/IntensityDataWidget.h" #include "GUI/Model/Data/DataItemUtils.h" #include "GUI/Model/Data/IntensityDataItem.h" +#include "GUI/Util/ActionFactory.h" #include "GUI/View/Intensity/IntensityDataCanvas.h" #include "GUI/View/Intensity/IntensityDataFFTPresenter.h" #include "GUI/View/PropertyEditor/ItemPropertyWidget.h" @@ -48,6 +49,10 @@ IntensityDataWidget::IntensityDataWidget(QWidget* parent) connect(m_fftPresenter, &IntensityDataFFTPresenter::fftActionRequest, this, &IntensityDataWidget::onFFTAction); + m_togglePropertiesAction = + ActionFactory::createTogglePropertiesPanelAction(this, m_propertyWidget); + + m_propertyWidget->setVisible(false); } @@ -62,7 +67,7 @@ void IntensityDataWidget::setItem(SessionItem* jobItem) QList<QAction*> IntensityDataWidget::actionList() { return m_intensityCanvas->actionList() + m_fftPresenter->actionList() - + m_propertyWidget->actionList(); + + QList<QAction*>{m_togglePropertiesAction}; } void IntensityDataWidget::onContextMenuRequest(const QPoint& point) diff --git a/GUI/View/Intensity/IntensityDataWidget.h b/GUI/View/Intensity/IntensityDataWidget.h index 0a9a610118e..a962c0f837e 100644 --- a/GUI/View/Intensity/IntensityDataWidget.h +++ b/GUI/View/Intensity/IntensityDataWidget.h @@ -49,6 +49,7 @@ private: IntensityDataCanvas* m_intensityCanvas; ItemPropertyWidget* m_propertyWidget; IntensityDataFFTPresenter* m_fftPresenter; + QAction* m_togglePropertiesAction; }; #endif // BORNAGAIN_GUI_VIEW_INTENSITY_INTENSITYDATAWIDGET_H diff --git a/GUI/View/Mask/MaskEditorActions.cpp b/GUI/View/Mask/MaskEditorActions.cpp index c0c626cbb5a..486616215dc 100644 --- a/GUI/View/Mask/MaskEditorActions.cpp +++ b/GUI/View/Mask/MaskEditorActions.cpp @@ -15,6 +15,7 @@ #include "GUI/View/Mask/MaskEditorActions.h" #include "GUI/Model/Data/MaskItems.h" #include "GUI/Model/Session/SessionModel.h" +#include "GUI/Util/ActionFactory.h" #include <QAction> #include <QItemSelectionModel> #include <QMenu> @@ -27,7 +28,6 @@ MaskEditorActions::MaskEditorActions(QWidget* parent) , m_deleteMaskAction(new QAction("Remove mask", parent)) , m_resetViewAction(new QAction(this)) , m_savePlotAction(new QAction(this)) - , m_togglePanelAction(new QAction(this)) , m_maskModel(nullptr) , m_selectionModel(nullptr) @@ -62,9 +62,7 @@ MaskEditorActions::MaskEditorActions(QWidget* parent) m_savePlotAction->setToolTip("Save Plot"); connect(m_savePlotAction, &QAction::triggered, this, &MaskEditorActions::savePlotRequest); - m_togglePanelAction->setText("Properties"); - m_togglePanelAction->setIcon(QIcon(":/images/dock-right.svg")); - m_togglePanelAction->setToolTip("Toggle Property Panel"); + m_togglePanelAction = ActionFactory::createTogglePropertiesPanelAction(this); connect(m_togglePanelAction, &QAction::triggered, this, &MaskEditorActions::propertyPanelRequest); } diff --git a/GUI/View/PropertyEditor/ItemPropertyWidget.cpp b/GUI/View/PropertyEditor/ItemPropertyWidget.cpp index 41320f72a95..2fdbff645cc 100644 --- a/GUI/View/PropertyEditor/ItemPropertyWidget.cpp +++ b/GUI/View/PropertyEditor/ItemPropertyWidget.cpp @@ -19,9 +19,7 @@ #include <QVBoxLayout> ItemPropertyWidget::ItemPropertyWidget(QWidget* parent) - : SessionItemWidget(parent) - , m_togglePanelAction(new QAction(this)) - , m_componentEditor(new ComponentTreeView) + : SessionItemWidget(parent), m_componentEditor(new ComponentTreeView) { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); setWindowTitle("Properties"); @@ -33,12 +31,6 @@ ItemPropertyWidget::ItemPropertyWidget(QWidget* parent) mainLayout->setSpacing(0); mainLayout->addWidget(m_componentEditor); setLayout(mainLayout); - - m_togglePanelAction->setText("Properties"); - m_togglePanelAction->setIcon(QIcon(":/images/dock-right.svg")); - m_togglePanelAction->setToolTip("Toggle property panel"); - m_togglePanelAction->setCheckable(true); - connect(m_togglePanelAction, &QAction::toggled, this, &ItemPropertyWidget::onTogglePanelAction); } QSize ItemPropertyWidget::sizeHint() const @@ -53,16 +45,6 @@ QSize ItemPropertyWidget::minimumSizeHint() const GUI::Util::Style::PropertyPanelWidth()); } -QList<QAction*> ItemPropertyWidget::actionList() -{ - return QList<QAction*>() << m_togglePanelAction; -} - -void ItemPropertyWidget::onTogglePanelAction(bool toggled) -{ - setVisible(toggled); -} - void ItemPropertyWidget::subscribeToItem() { m_componentEditor->setItem(currentItem()); diff --git a/GUI/View/PropertyEditor/ItemPropertyWidget.h b/GUI/View/PropertyEditor/ItemPropertyWidget.h index 1683e71c7ce..83b80b2fb27 100644 --- a/GUI/View/PropertyEditor/ItemPropertyWidget.h +++ b/GUI/View/PropertyEditor/ItemPropertyWidget.h @@ -17,9 +17,7 @@ #include "GUI/View/Common/SessionItemWidget.h" -class IntensityDataItem; class ComponentTreeView; -class SessionItem; //! The ItemPropertyWidget shows ComponentTree for given Item. @@ -31,18 +29,12 @@ public: QSize sizeHint() const override; QSize minimumSizeHint() const override; - QList<QAction*> actionList() override; - -public slots: - void onTogglePanelAction(bool toggled); - protected: void subscribeToItem() override; void unsubscribeFromItem() override; void contextMenuEvent(QContextMenuEvent*) override; private: - QAction* m_togglePanelAction; ComponentTreeView* m_componentEditor; }; diff --git a/GUI/View/SpecularData/SpecularDataWidget.cpp b/GUI/View/SpecularData/SpecularDataWidget.cpp index bb4e70bbb2b..2da0e572cde 100644 --- a/GUI/View/SpecularData/SpecularDataWidget.cpp +++ b/GUI/View/SpecularData/SpecularDataWidget.cpp @@ -15,6 +15,7 @@ #include "GUI/View/SpecularData/SpecularDataWidget.h" #include "GUI/Model/Data/DataItemUtils.h" #include "GUI/Model/Data/SpecularDataItem.h" +#include "GUI/Util/ActionFactory.h" #include "GUI/View/PropertyEditor/ItemPropertyWidget.h" #include "GUI/View/SpecularData/SpecularDataCanvas.h" #include <QBoxLayout> @@ -43,6 +44,9 @@ SpecularDataWidget::SpecularDataWidget(QWidget* parent) connect(m_intensity_canvas, &SpecularDataCanvas::customContextMenuRequested, this, &SpecularDataWidget::onContextMenuRequest); + m_togglePropertiesAction = + ActionFactory::createTogglePropertiesPanelAction(this, m_property_widget); + m_property_widget->setVisible(false); } @@ -55,7 +59,7 @@ void SpecularDataWidget::setItem(SessionItem* jobItem) QList<QAction*> SpecularDataWidget::actionList() { - return m_intensity_canvas->actionList() + m_property_widget->actionList(); + return m_intensity_canvas->actionList() + QList<QAction*>{m_togglePropertiesAction}; } void SpecularDataWidget::onContextMenuRequest(const QPoint& point) diff --git a/GUI/View/SpecularData/SpecularDataWidget.h b/GUI/View/SpecularData/SpecularDataWidget.h index c871b073ee4..8a26e660ac9 100644 --- a/GUI/View/SpecularData/SpecularDataWidget.h +++ b/GUI/View/SpecularData/SpecularDataWidget.h @@ -39,6 +39,7 @@ private: SpecularDataCanvas* m_intensity_canvas; ItemPropertyWidget* m_property_widget; + QAction* m_togglePropertiesAction; }; #endif // BORNAGAIN_GUI_VIEW_SPECULARDATA_SPECULARDATAWIDGET_H -- GitLab