##// END OF EJS Templates
Adds a a gui controller class to manage global actions across the application.
trabillard -
r1076:666a84a7f3b2
parent child
Show More
@@ -0,0 +1,22
1 #ifndef SCIQLOP_ACTIONSGUICONTROLLER_H
2 #define SCIQLOP_ACTIONSGUICONTROLLER_H
3
4 #include <Actions/SelectionZoneAction.h>
5 #include <Common/spimpl.h>
6
7 #include <memory>
8
9 class ActionsGuiController {
10 public:
11 ActionsGuiController();
12
13 std::shared_ptr<SelectionZoneAction>
14 addSectionZoneAction(const QString &name, SelectionZoneAction::ExecuteFunction function);
15 QVector<std::shared_ptr<SelectionZoneAction> > selectionZoneActions() const;
16
17 private:
18 class ActionsGuiControllerPrivate;
19 spimpl::unique_impl_ptr<ActionsGuiControllerPrivate> impl;
20 };
21
22 #endif // SCIQLOP_ACTIONSGUICONTROLLER_H
@@ -0,0 +1,49
1 #ifndef SCIQLOP_SELECTIONZONEACTION_H
2 #define SCIQLOP_SELECTIONZONEACTION_H
3
4 #include <Common/spimpl.h>
5
6 #include <QLoggingCategory>
7 #include <QObject>
8
9 #include <functional>
10
11 class VisualizationSelectionZoneItem;
12
13 Q_DECLARE_LOGGING_CATEGORY(LOG_SelectionZoneAction)
14
15 /**
16 * @brief The SelectionZoneAction class represents an action on a selection zone in the
17 * visualization.
18 *
19 * The action is a function that will be executed when the slot execute() is called.
20 */
21 class SelectionZoneAction : public QObject {
22
23 Q_OBJECT
24
25 public:
26 /// Signature of the function associated to the action
27 using ExecuteFunction
28 = std::function<void(const QVector<VisualizationSelectionZoneItem *> &item)>;
29
30 /**
31 * @param name the name of the action, displayed to the user
32 * @param fun the function that will be called when the action is executed
33 * @sa execute()
34 */
35 explicit SelectionZoneAction(const QString &name, ExecuteFunction fun);
36
37 /// The name of the action
38 QString name() const noexcept;
39
40 public slots:
41 /// Executes the action
42 void execute(const QVector<VisualizationSelectionZoneItem *> &item);
43
44 private:
45 class SelectionZoneActionPrivate;
46 spimpl::unique_impl_ptr<SelectionZoneActionPrivate> impl;
47 };
48
49 #endif // SCIQLOP_SELECTIONZONEACTION_H
@@ -0,0 +1,26
1 #include "Actions/ActionsGuiController.h"
2
3 struct ActionsGuiController::ActionsGuiControllerPrivate {
4
5 QVector<std::shared_ptr<SelectionZoneAction> > m_SelectionZoneActions;
6 };
7
8 ActionsGuiController::ActionsGuiController()
9 : impl{spimpl::make_unique_impl<ActionsGuiControllerPrivate>()}
10 {
11 }
12
13 std::shared_ptr<SelectionZoneAction>
14 ActionsGuiController::addSectionZoneAction(const QString &name,
15 SelectionZoneAction::ExecuteFunction function)
16 {
17 auto action = std::make_shared<SelectionZoneAction>(name, function);
18 impl->m_SelectionZoneActions.push_back(action);
19
20 return action;
21 }
22
23 QVector<std::shared_ptr<SelectionZoneAction> > ActionsGuiController::selectionZoneActions() const
24 {
25 return impl->m_SelectionZoneActions;
26 }
@@ -0,0 +1,30
1 #include <Actions/SelectionZoneAction.h>
2 #include <Visualization/VisualizationSelectionZoneItem.h>
3
4 Q_LOGGING_CATEGORY(LOG_SelectionZoneAction, "SelectionZoneAction")
5
6 struct SelectionZoneAction::SelectionZoneActionPrivate {
7 explicit SelectionZoneActionPrivate(const QString &name,
8 SelectionZoneAction::ExecuteFunction fun)
9 : m_Name{name}, m_Fun{std::move(fun)}
10 {
11 }
12
13 QString m_Name;
14 SelectionZoneAction::ExecuteFunction m_Fun;
15 };
16
17 SelectionZoneAction::SelectionZoneAction(const QString &name, ExecuteFunction fun)
18 : impl{spimpl::make_unique_impl<SelectionZoneActionPrivate>(name, std::move(fun))}
19 {
20 }
21
22 QString SelectionZoneAction::name() const noexcept
23 {
24 return impl->m_Name;
25 }
26
27 void SelectionZoneAction::execute(const QVector<VisualizationSelectionZoneItem *> &item)
28 {
29 impl->m_Fun(item);
30 }
@@ -21,6 +21,7 class TimeController;
21 21 class VariableController;
22 22 class VisualizationController;
23 23 class DragDropGuiController;
24 class ActionsGuiController;
24 25
25 26 /**
26 27 * @brief The SqpApplication class aims to make the link between SciQlop
@@ -48,6 +49,7 public:
48 49 /// Accessors for the differents sciqlop helpers, these helpers classes are like controllers but
49 50 /// doesn't live in a thread and access gui
50 51 DragDropGuiController &dragDropGuiController() noexcept;
52 ActionsGuiController &actionsGuiController() noexcept;
51 53
52 54 enum class PlotsInteractionMode { None, ZoomBox, DragAndDrop, SelectionZones };
53 55
@@ -17,7 +17,8 gui_moc_headers = [
17 17 'include/Visualization/VisualizationZoneWidget.h',
18 18 'include/Visualization/VisualizationDragDropContainer.h',
19 19 'include/Visualization/VisualizationDragWidget.h',
20 'include/Visualization/ColorScaleEditor.h'
20 'include/Visualization/ColorScaleEditor.h',
21 'include/Visualization/SelectionZoneAction.h'
21 22 ]
22 23
23 24 gui_ui_files = [
@@ -84,7 +85,9 gui_sources = [
84 85 'src/Visualization/SqpColorScale.cpp',
85 86 'src/Visualization/QCPColorMapIterator.cpp',
86 87 'src/Visualization/VisualizationSelectionZoneItem.cpp',
87 'src/Visualization/VisualizationSelectionZoneManager.cpp'
88 'src/Visualization/VisualizationSelectionZoneManager.cpp',
89 'src/Visualization/SelectionZoneAction.cpp',
90 'src/Visualization/ActionsGuiController.cpp'
88 91 ]
89 92
90 93 gui_inc = include_directories(['include'])
@@ -1,6 +1,6
1 1 #include "SqpApplication.h"
2 2
3 #include <Catalogue/CatalogueController.h>
3 #include <Actions/ActionsGuiController.h>
4 4 #include <Data/IDataProvider.h>
5 5 #include <DataSource/DataSourceController.h>
6 6 #include <DragAndDrop/DragDropGuiController.h>
@@ -24,6 +24,7 public:
24 24 m_VisualizationController{std::make_unique<VisualizationController>()},
25 25 m_DragDropGuiController{std::make_unique<DragDropGuiController>()},
26 26 m_CatalogueController{std::make_unique<CatalogueController>()},
27 m_ActionsGuiController{std::make_unique<ActionsGuiController>()},
27 28 m_PlotInterractionMode(SqpApplication::PlotsInteractionMode::None),
28 29 m_PlotCursorMode(SqpApplication::PlotsCursorMode::NoCursor)
29 30 {
@@ -62,8 +63,6 public:
62 63 m_VariableControllerThread.setObjectName("VariableControllerThread");
63 64 m_VisualizationController->moveToThread(&m_VisualizationControllerThread);
64 65 m_VisualizationControllerThread.setObjectName("VsualizationControllerThread");
65 m_CatalogueController->moveToThread(&m_CatalogueControllerThread);
66 m_CatalogueControllerThread.setObjectName("CatalogueControllerThread");
67 66
68 67
69 68 // Additionnal init
@@ -83,9 +82,6 public:
83 82
84 83 m_VisualizationControllerThread.quit();
85 84 m_VisualizationControllerThread.wait();
86
87 m_CatalogueControllerThread.quit();
88 m_CatalogueControllerThread.wait();
89 85 }
90 86
91 87 std::unique_ptr<DataSourceController> m_DataSourceController;
@@ -93,14 +89,14 public:
93 89 std::unique_ptr<TimeController> m_TimeController;
94 90 std::unique_ptr<NetworkController> m_NetworkController;
95 91 std::unique_ptr<VisualizationController> m_VisualizationController;
96 std::unique_ptr<CatalogueController> m_CatalogueController;
92
97 93 QThread m_DataSourceControllerThread;
98 94 QThread m_NetworkControllerThread;
99 95 QThread m_VariableControllerThread;
100 96 QThread m_VisualizationControllerThread;
101 QThread m_CatalogueControllerThread;
102 97
103 98 std::unique_ptr<DragDropGuiController> m_DragDropGuiController;
99 std::unique_ptr<ActionsGuiController> m_ActionsGuiController;
104 100
105 101 SqpApplication::PlotsInteractionMode m_PlotInterractionMode;
106 102 SqpApplication::PlotsCursorMode m_PlotCursorMode;
@@ -132,16 +128,10 SqpApplication::SqpApplication(int &argc, char **argv)
132 128 connect(&impl->m_VisualizationControllerThread, &QThread::finished,
133 129 impl->m_VisualizationController.get(), &VisualizationController::finalize);
134 130
135 connect(&impl->m_CatalogueControllerThread, &QThread::started,
136 impl->m_CatalogueController.get(), &CatalogueController::initialize);
137 connect(&impl->m_CatalogueControllerThread, &QThread::finished,
138 impl->m_CatalogueController.get(), &CatalogueController::finalize);
139
140 131 impl->m_DataSourceControllerThread.start();
141 132 impl->m_NetworkControllerThread.start();
142 133 impl->m_VariableControllerThread.start();
143 134 impl->m_VisualizationControllerThread.start();
144 impl->m_CatalogueControllerThread.start();
145 135 }
146 136
147 137 SqpApplication::~SqpApplication()
@@ -182,6 +172,11 DragDropGuiController &SqpApplication::dragDropGuiController() noexcept
182 172 return *impl->m_DragDropGuiController;
183 173 }
184 174
175 ActionsGuiController &SqpApplication::actionsGuiController() noexcept
176 {
177 return *impl->m_ActionsGuiController;
178 }
179
185 180 SqpApplication::PlotsInteractionMode SqpApplication::plotsInteractionMode() const
186 181 {
187 182 return impl->m_PlotInterractionMode;
General Comments 0
You need to be logged in to leave comments. Login now