##// END OF EJS Templates
Unplot menu (6): handles 'Unplot' menu when visiting a graph...
Alexandre Leroux -
r302:782c5b48bc35
parent child
Show More
@@ -1,168 +1,183
1 1 #include "Visualization/operations/GenerateVariableMenuOperation.h"
2 2 #include "Visualization/operations/MenuBuilder.h"
3 3
4 4 #include "Visualization/VisualizationGraphWidget.h"
5 5 #include "Visualization/VisualizationTabWidget.h"
6 6 #include "Visualization/VisualizationZoneWidget.h"
7 7
8 8 #include <Variable/Variable.h>
9 9
10 10 #include <QMenu>
11 11 #include <QStack>
12 12
13 13 Q_LOGGING_CATEGORY(LOG_GenerateVariableMenuOperation, "GenerateVariableMenuOperation")
14 14
15 15 struct GenerateVariableMenuOperation::GenerateVariableMenuOperationPrivate {
16 16 explicit GenerateVariableMenuOperationPrivate(QMenu *menu, std::shared_ptr<Variable> variable)
17 17 : m_Variable{variable}, m_PlotMenuBuilder{menu}, m_UnplotMenuBuilder{menu}
18 18 {
19 19 }
20 20
21 21 void visitRootEnter()
22 22 {
23 23 // Creates the root menu
24 24 m_PlotMenuBuilder.addMenu(QObject::tr("Plot"), QIcon{":/icones/plot.png"});
25 25 m_UnplotMenuBuilder.addMenu(QObject::tr("Unplot"), QIcon{":/icones/unplot.png"});
26 26 }
27 27
28 28 void visitRootLeave()
29 29 {
30 30 // Closes the root menu
31 31 m_PlotMenuBuilder.closeMenu();
32 32 m_UnplotMenuBuilder.closeMenu();
33 33 }
34 34
35 35 void visitNodeEnter(const IVisualizationWidget &container)
36 36 {
37 37 // Opens a new menu associated to the node
38 38 m_PlotMenuBuilder.addMenu(container.name());
39 39 m_UnplotMenuBuilder.addMenu(container.name());
40 40 }
41 41
42 42 template <typename ActionFun>
43 43 void visitNodeLeavePlot(const IVisualizationWidget &container, const QString &actionName,
44 44 ActionFun actionFunction)
45 45 {
46 46 if (m_Variable && container.canDrop(*m_Variable)) {
47 47 m_PlotMenuBuilder.addSeparator();
48 48 m_PlotMenuBuilder.addAction(actionName, actionFunction);
49 49 }
50 50
51 51 // Closes the menu associated to the node
52 52 m_PlotMenuBuilder.closeMenu();
53 53 }
54 54
55 55 void visitNodeLeaveUnplot()
56 56 {
57 57 // Closes the menu associated to the node
58 58 m_UnplotMenuBuilder.closeMenu();
59 59 }
60 60
61 61 template <typename ActionFun>
62 void visitLeaf(const IVisualizationWidget &container, const QString &actionName,
62 void visitLeafPlot(const IVisualizationWidget &container, const QString &actionName,
63 63 ActionFun actionFunction)
64 64 {
65 65 if (m_Variable && container.canDrop(*m_Variable)) {
66 66 m_PlotMenuBuilder.addAction(actionName, actionFunction);
67 67 }
68 68 }
69 69
70 template <typename ActionFun>
71 void visitLeafUnplot(const IVisualizationWidget &container, const QString &actionName,
72 ActionFun actionFunction)
73 {
74 if (m_Variable && container.contains(*m_Variable)) {
75 m_UnplotMenuBuilder.addAction(actionName, actionFunction);
76 }
77 }
78
70 79 std::shared_ptr<Variable> m_Variable;
71 80 MenuBuilder m_PlotMenuBuilder; ///< Builder for the 'Plot' menu
72 81 MenuBuilder m_UnplotMenuBuilder; ///< Builder for the 'Unplot' menu
73 82 };
74 83
75 84 GenerateVariableMenuOperation::GenerateVariableMenuOperation(QMenu *menu,
76 85 std::shared_ptr<Variable> variable)
77 86 : impl{spimpl::make_unique_impl<GenerateVariableMenuOperationPrivate>(menu, variable)}
78 87 {
79 88 }
80 89
81 90 void GenerateVariableMenuOperation::visitEnter(VisualizationWidget *widget)
82 91 {
83 92 // VisualizationWidget is not intended to accommodate a variable
84 93 Q_UNUSED(widget)
85 94
86 95 // 'Plot' and 'Unplot' menus
87 96 impl->visitRootEnter();
88 97 }
89 98
90 99 void GenerateVariableMenuOperation::visitLeave(VisualizationWidget *widget)
91 100 {
92 101 // VisualizationWidget is not intended to accommodate a variable
93 102 Q_UNUSED(widget)
94 103
95 104 // 'Plot' and 'Unplot' menus
96 105 impl->visitRootLeave();
97 106 }
98 107
99 108 void GenerateVariableMenuOperation::visitEnter(VisualizationTabWidget *tabWidget)
100 109 {
101 110 if (tabWidget) {
102 111 // 'Plot' and 'Unplot' menus
103 112 impl->visitNodeEnter(*tabWidget);
104 113 }
105 114 else {
106 115 qCCritical(LOG_GenerateVariableMenuOperation(),
107 116 "Can't visit enter VisualizationTabWidget : the widget is null");
108 117 }
109 118 }
110 119
111 120 void GenerateVariableMenuOperation::visitLeave(VisualizationTabWidget *tabWidget)
112 121 {
113 122 if (tabWidget) {
114 123 // 'Plot' menu
115 124 impl->visitNodeLeavePlot(
116 125 *tabWidget, QObject::tr("Open in a new zone"),
117 126 [ var = impl->m_Variable, tabWidget ]() { tabWidget->createZone(var); });
118 127
119 128 // 'Unplot' menu
120 129 impl->visitNodeLeaveUnplot();
121 130 }
122 131 else {
123 132 qCCritical(LOG_GenerateVariableMenuOperation(),
124 133 "Can't visit leave VisualizationTabWidget : the widget is null");
125 134 }
126 135 }
127 136
128 137 void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidget)
129 138 {
130 139 if (zoneWidget) {
131 140 // 'Plot' and 'Unplot' menus
132 141 impl->visitNodeEnter(*zoneWidget);
133 142 }
134 143 else {
135 144 qCCritical(LOG_GenerateVariableMenuOperation(),
136 145 "Can't visit enter VisualizationZoneWidget : the widget is null");
137 146 }
138 147 }
139 148
140 149 void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget)
141 150 {
142 151 if (zoneWidget) {
143 152 // 'Plot' menu
144 153 impl->visitNodeLeavePlot(
145 154 *zoneWidget, QObject::tr("Open in a new graph"),
146 155 [ var = impl->m_Variable, zoneWidget ]() { zoneWidget->createGraph(var); });
147 156
148 157 // 'Unplot' menu
149 158 impl->visitNodeLeaveUnplot();
150 159 }
151 160 else {
152 161 qCCritical(LOG_GenerateVariableMenuOperation(),
153 162 "Can't visit leave VisualizationZoneWidget : the widget is null");
154 163 }
155 164 }
156 165
157 166 void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget)
158 167 {
159 168 if (graphWidget) {
160 impl->visitLeaf(
169 // 'Plot' menu
170 impl->visitLeafPlot(
161 171 *graphWidget, QObject::tr("Open in %1").arg(graphWidget->name()),
162 172 [ var = impl->m_Variable, graphWidget ]() { graphWidget->addVariableUsingGraph(var); });
173
174 // 'Unplot' menu
175 impl->visitLeafUnplot(
176 *graphWidget, QObject::tr("Remove from %1").arg(graphWidget->name()),
177 [ var = impl->m_Variable, graphWidget ]() { graphWidget->removeVariable(var); });
163 178 }
164 179 else {
165 180 qCCritical(LOG_GenerateVariableMenuOperation(),
166 181 "Can't visit VisualizationGraphWidget : the widget is null");
167 182 }
168 183 }
General Comments 0
You need to be logged in to leave comments. Login now