##// END OF EJS Templates
New class to manage actions in the visualization
trabillard -
r1078:e77848f95b30
parent child
Show More
@@ -0,0 +1,12
1 #ifndef SCIQLOP_VISUALIZATIONACTIONMANAGER_H
2 #define SCIQLOP_VISUALIZATIONACTIONMANAGER_H
3
4
5 class VisualizationActionManager {
6 public:
7 VisualizationActionManager();
8
9 void installSelectionZoneActions();
10 };
11
12 #endif // SCIQLOP_VISUALIZATIONACTIONMANAGER_H
@@ -0,0 +1,14
1 #include "Visualization/VisualizationActionManager.h"
2
3 #include <Actions/ActionsGuiController.h>
4 #include <SqpApplication.h>
5
6 VisualizationActionManager::VisualizationActionManager() {}
7
8 void VisualizationActionManager::installSelectionZoneActions()
9 {
10 auto &actionController = sqpApp->actionsGuiController();
11 actionController.addSectionZoneAction("Remove Selected Zone(s)", [](auto &zone) {});
12 actionController.addSectionZoneAction("Align Left", [](auto &zone) {});
13 actionController.addSectionZoneAction("Align Right", [](auto &zone) {});
14 }
@@ -1,106 +1,107
1 1
2 2 gui_moc_headers = [
3 3 'include/DataSource/DataSourceWidget.h',
4 4 'include/Settings/SqpSettingsDialog.h',
5 5 'include/Settings/SqpSettingsGeneralWidget.h',
6 6 'include/SidePane/SqpSidePane.h',
7 7 'include/SqpApplication.h',
8 8 'include/DragAndDrop/DragDropScroller.h',
9 9 'include/DragAndDrop/DragDropTabSwitcher.h',
10 10 'include/TimeWidget/TimeWidget.h',
11 11 'include/Variable/VariableInspectorWidget.h',
12 12 'include/Variable/RenameVariableDialog.h',
13 13 'include/Visualization/qcustomplot.h',
14 14 'include/Visualization/VisualizationGraphWidget.h',
15 15 'include/Visualization/VisualizationTabWidget.h',
16 16 'include/Visualization/VisualizationWidget.h',
17 17 'include/Visualization/VisualizationZoneWidget.h',
18 18 'include/Visualization/VisualizationDragDropContainer.h',
19 19 'include/Visualization/VisualizationDragWidget.h',
20 20 'include/Visualization/ColorScaleEditor.h',
21 21 'include/Visualization/SelectionZoneAction.h'
22 22 ]
23 23
24 24 gui_ui_files = [
25 25 'ui/DataSource/DataSourceWidget.ui',
26 26 'ui/Settings/SqpSettingsDialog.ui',
27 27 'ui/Settings/SqpSettingsGeneralWidget.ui',
28 28 'ui/SidePane/SqpSidePane.ui',
29 29 'ui/TimeWidget/TimeWidget.ui',
30 30 'ui/Variable/VariableInspectorWidget.ui',
31 31 'ui/Variable/RenameVariableDialog.ui',
32 32 'ui/Variable/VariableMenuHeaderWidget.ui',
33 33 'ui/Visualization/VisualizationGraphWidget.ui',
34 34 'ui/Visualization/VisualizationTabWidget.ui',
35 35 'ui/Visualization/VisualizationWidget.ui',
36 36 'ui/Visualization/VisualizationZoneWidget.ui',
37 37 'ui/Visualization/ColorScaleEditor.ui'
38 38 ]
39 39
40 40 gui_qresources = ['resources/sqpguiresources.qrc']
41 41
42 42 gui_moc_files = qt5.preprocess(moc_headers : gui_moc_headers,
43 43 ui_files : gui_ui_files,
44 44 qresources : gui_qresources)
45 45
46 46 gui_sources = [
47 47 'src/SqpApplication.cpp',
48 48 'src/DragAndDrop/DragDropHelper.cpp',
49 49 'src/DragAndDrop/DragDropScroller.cpp',
50 50 'src/DragAndDrop/DragDropTabSwitcher.cpp',
51 51 'src/Common/ColorUtils.cpp',
52 52 'src/Common/VisualizationDef.cpp',
53 53 'src/DataSource/DataSourceTreeWidgetItem.cpp',
54 54 'src/DataSource/DataSourceTreeWidgetHelper.cpp',
55 55 'src/DataSource/DataSourceWidget.cpp',
56 56 'src/DataSource/DataSourceTreeWidget.cpp',
57 57 'src/Settings/SqpSettingsDialog.cpp',
58 58 'src/Settings/SqpSettingsGeneralWidget.cpp',
59 59 'src/SidePane/SqpSidePane.cpp',
60 60 'src/TimeWidget/TimeWidget.cpp',
61 61 'src/Variable/VariableInspectorWidget.cpp',
62 62 'src/Variable/VariableInspectorTableView.cpp',
63 63 'src/Variable/VariableMenuHeaderWidget.cpp',
64 64 'src/Variable/RenameVariableDialog.cpp',
65 65 'src/Visualization/VisualizationGraphHelper.cpp',
66 66 'src/Visualization/VisualizationGraphRenderingDelegate.cpp',
67 67 'src/Visualization/VisualizationGraphWidget.cpp',
68 68 'src/Visualization/VisualizationTabWidget.cpp',
69 69 'src/Visualization/VisualizationWidget.cpp',
70 70 'src/Visualization/VisualizationZoneWidget.cpp',
71 71 'src/Visualization/qcustomplot.cpp',
72 72 'src/Visualization/QCustomPlotSynchronizer.cpp',
73 73 'src/Visualization/operations/FindVariableOperation.cpp',
74 74 'src/Visualization/operations/GenerateVariableMenuOperation.cpp',
75 75 'src/Visualization/operations/MenuBuilder.cpp',
76 76 'src/Visualization/operations/RemoveVariableOperation.cpp',
77 77 'src/Visualization/operations/RescaleAxeOperation.cpp',
78 78 'src/Visualization/VisualizationDragDropContainer.cpp',
79 79 'src/Visualization/VisualizationDragWidget.cpp',
80 80 'src/Visualization/AxisRenderingUtils.cpp',
81 81 'src/Visualization/PlottablesRenderingUtils.cpp',
82 82 'src/Visualization/MacScrollBarStyle.cpp',
83 83 'src/Visualization/VisualizationCursorItem.cpp',
84 84 'src/Visualization/ColorScaleEditor.cpp',
85 85 'src/Visualization/SqpColorScale.cpp',
86 86 'src/Visualization/QCPColorMapIterator.cpp',
87 87 'src/Visualization/VisualizationSelectionZoneItem.cpp',
88 88 'src/Visualization/VisualizationSelectionZoneManager.cpp',
89 89 'src/Visualization/SelectionZoneAction.cpp',
90 'src/Visualization/ActionsGuiController.cpp'
90 'src/Visualization/ActionsGuiController.cpp',
91 'src/Visualization/VisualizationActionManager.cpp'
91 92 ]
92 93
93 94 gui_inc = include_directories(['include'])
94 95
95 96 sciqlop_gui_lib = library('sciqlopgui',
96 97 gui_sources,
97 98 gui_moc_files,
98 99 include_directories : [gui_inc],
99 100 dependencies : [ qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core],
100 101 install : true
101 102 )
102 103
103 104 sciqlop_gui = declare_dependency(link_with : sciqlop_gui_lib,
104 105 include_directories : gui_inc,
105 106 dependencies : [qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core])
106 107
@@ -1,197 +1,201
1 1 #include "Visualization/VisualizationWidget.h"
2 2 #include "Visualization/IVisualizationWidgetVisitor.h"
3 #include "Visualization/VisualizationActionManager.h"
3 4 #include "Visualization/VisualizationGraphWidget.h"
4 5 #include "Visualization/VisualizationSelectionZoneManager.h"
5 6 #include "Visualization/VisualizationTabWidget.h"
6 7 #include "Visualization/VisualizationZoneWidget.h"
7 8 #include "Visualization/operations/FindVariableOperation.h"
8 9 #include "Visualization/operations/GenerateVariableMenuOperation.h"
9 10 #include "Visualization/operations/RemoveVariableOperation.h"
10 11 #include "Visualization/operations/RescaleAxeOperation.h"
11 12 #include "Visualization/qcustomplot.h"
12 13
13 14 #include "ui_VisualizationWidget.h"
14 15
15 16 #include "DragAndDrop/DragDropGuiController.h"
16 17 #include "SqpApplication.h"
17 18
18 19 #include <QToolButton>
19 20
20 21 #include <memory>
21 22
22 23 Q_LOGGING_CATEGORY(LOG_VisualizationWidget, "VisualizationWidget")
23 24
24 25 struct VisualizationWidget::VisualizationWidgetPrivate {
25 26 std::unique_ptr<VisualizationSelectionZoneManager> m_ZoneSelectionManager = nullptr;
27 VisualizationActionManager m_ActionManager;
26 28
27 29 VisualizationWidgetPrivate()
28 30 : m_ZoneSelectionManager(std::make_unique<VisualizationSelectionZoneManager>())
29 31 {
30 32 }
31 33 };
32 34
33 35 VisualizationWidget::VisualizationWidget(QWidget *parent)
34 36 : QWidget{parent},
35 37 ui{new Ui::VisualizationWidget},
36 38 impl{spimpl::make_unique_impl<VisualizationWidgetPrivate>()}
37 39 {
38 40 ui->setupUi(this);
39 41
40 42 auto addTabViewButton = new QToolButton{ui->tabWidget};
41 43 addTabViewButton->setText(tr("Add View"));
42 44 addTabViewButton->setCursor(Qt::ArrowCursor);
43 45 ui->tabWidget->setCornerWidget(addTabViewButton, Qt::TopRightCorner);
44 46
45 47 auto enableMinimumCornerWidgetSize = [this](bool enable) {
46 48
47 49 auto tabViewCornerWidget = ui->tabWidget->cornerWidget();
48 50 auto width = enable ? tabViewCornerWidget->width() : 0;
49 51 auto height = enable ? tabViewCornerWidget->height() : 0;
50 52 tabViewCornerWidget->setMinimumHeight(height);
51 53 tabViewCornerWidget->setMinimumWidth(width);
52 54 ui->tabWidget->setMinimumHeight(height);
53 55 ui->tabWidget->setMinimumWidth(width);
54 56 };
55 57
56 58 auto addTabView = [this, enableMinimumCornerWidgetSize]() {
57 59 auto widget = new VisualizationTabWidget{QString{"View %1"}.arg(ui->tabWidget->count() + 1),
58 60 ui->tabWidget};
59 61 auto index = ui->tabWidget->addTab(widget, widget->name());
60 62 if (ui->tabWidget->count() > 0) {
61 63 enableMinimumCornerWidgetSize(false);
62 64 }
63 65 qCInfo(LOG_VisualizationWidget()) << tr("add the tab of index %1").arg(index);
64 66 };
65 67
66 68 auto removeTabView = [this, enableMinimumCornerWidgetSize](int index) {
67 69 if (ui->tabWidget->count() == 1) {
68 70 enableMinimumCornerWidgetSize(true);
69 71 }
70 72
71 73 // Removes widget from tab and closes it
72 74 auto widget = ui->tabWidget->widget(index);
73 75 ui->tabWidget->removeTab(index);
74 76 if (widget) {
75 77 widget->close();
76 78 }
77 79
78 80 qCInfo(LOG_VisualizationWidget()) << tr("remove the tab of index %1").arg(index);
79 81
80 82 };
81 83
82 84 ui->tabWidget->setTabsClosable(true);
83 85
84 86 connect(addTabViewButton, &QToolButton::clicked, addTabView);
85 87 connect(ui->tabWidget, &QTabWidget::tabCloseRequested, removeTabView);
86 88
87 89 sqpApp->dragDropGuiController().addDragDropTabBar(ui->tabWidget->tabBar());
88 90
91 impl->m_ActionManager.installSelectionZoneActions();
92
89 93 // Adds default tab
90 94 addTabView();
91 95 }
92 96
93 97 VisualizationWidget::~VisualizationWidget()
94 98 {
95 99 sqpApp->dragDropGuiController().removeDragDropTabBar(ui->tabWidget->tabBar());
96 100 delete ui;
97 101 }
98 102
99 103 VisualizationSelectionZoneManager &VisualizationWidget::selectionZoneManager() const
100 104 {
101 105 return *impl->m_ZoneSelectionManager.get();
102 106 }
103 107
104 108 void VisualizationWidget::accept(IVisualizationWidgetVisitor *visitor)
105 109 {
106 110 if (visitor) {
107 111 visitor->visitEnter(this);
108 112
109 113 // Apply visitor for tab children
110 114 for (auto i = 0; i < ui->tabWidget->count(); ++i) {
111 115 // Widgets different from tabs are not visited (no action)
112 116 if (auto visualizationTabWidget
113 117 = dynamic_cast<VisualizationTabWidget *>(ui->tabWidget->widget(i))) {
114 118 visualizationTabWidget->accept(visitor);
115 119 }
116 120 }
117 121
118 122 visitor->visitLeave(this);
119 123 }
120 124 else {
121 125 qCCritical(LOG_VisualizationWidget()) << tr("Can't visit widget : the visitor is null");
122 126 }
123 127 }
124 128
125 129 bool VisualizationWidget::canDrop(const Variable &variable) const
126 130 {
127 131 // The main widget can never accomodate a variable
128 132 Q_UNUSED(variable);
129 133 return false;
130 134 }
131 135
132 136 bool VisualizationWidget::contains(const Variable &variable) const
133 137 {
134 138 Q_UNUSED(variable);
135 139 return false;
136 140 }
137 141
138 142 QString VisualizationWidget::name() const
139 143 {
140 144 return QStringLiteral("MainView");
141 145 }
142 146
143 147 void VisualizationWidget::attachVariableMenu(
144 148 QMenu *menu, const QVector<std::shared_ptr<Variable> > &variables) noexcept
145 149 {
146 150 // Menu is generated only if there is a single variable
147 151 if (variables.size() == 1) {
148 152 if (auto variable = variables.first()) {
149 153 // Gets the containers of the variable
150 154 FindVariableOperation findVariableOperation{variable};
151 155 accept(&findVariableOperation);
152 156 auto variableContainers = findVariableOperation.result();
153 157
154 158 // Generates the actions that make it possible to visualize the variable
155 159 GenerateVariableMenuOperation generateVariableMenuOperation{
156 160 menu, variable, std::move(variableContainers)};
157 161 accept(&generateVariableMenuOperation);
158 162 }
159 163 else {
160 164 qCCritical(LOG_VisualizationWidget()) << tr(
161 165 "Can't generate the menu relative to the visualization: the variable is null");
162 166 }
163 167 }
164 168 else {
165 169 qCDebug(LOG_VisualizationWidget())
166 170 << tr("No generation of the menu related to the visualization: several variables are "
167 171 "selected");
168 172 }
169 173 }
170 174
171 175 void VisualizationWidget::onVariableAboutToBeDeleted(std::shared_ptr<Variable> variable) noexcept
172 176 {
173 177 // Calls the operation of removing all references to the variable in the visualization
174 178 auto removeVariableOperation = RemoveVariableOperation{variable};
175 179 accept(&removeVariableOperation);
176 180 }
177 181
178 182 void VisualizationWidget::onRangeChanged(std::shared_ptr<Variable> variable,
179 183 const SqpRange &range) noexcept
180 184 {
181 185 // Calls the operation of rescaling all graph that contrains variable in the visualization
182 186 auto rescaleVariableOperation = RescaleAxeOperation{variable, range};
183 187 accept(&rescaleVariableOperation);
184 188 }
185 189
186 190 void VisualizationWidget::closeEvent(QCloseEvent *event)
187 191 {
188 192 // Closes tabs in the widget
189 193 for (auto i = 0; i < ui->tabWidget->count(); ++i) {
190 194 if (auto visualizationTabWidget
191 195 = dynamic_cast<VisualizationTabWidget *>(ui->tabWidget->widget(i))) {
192 196 visualizationTabWidget->close();
193 197 }
194 198 }
195 199
196 200 QWidget::closeEvent(event);
197 201 }
General Comments 0
You need to be logged in to leave comments. Login now