##// END OF EJS Templates
Unplot menu (1)...
Alexandre Leroux -
r323:55e8cf41b3b4
parent child
Show More
@@ -1,146 +1,146
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 : m_Variable{variable}, m_MenuBuilder{menu}
17 : m_Variable{variable}, m_PlotMenuBuilder{menu}
18 18 {
19 19 }
20 20
21 21 void visitRootEnter()
22 22 {
23 23 // Creates the root menu
24 m_MenuBuilder.addMenu(QObject::tr("Plot"), QIcon{":/icones/plot.png"});
24 m_PlotMenuBuilder.addMenu(QObject::tr("Plot"), QIcon{":/icones/plot.png"});
25 25 }
26 26
27 27 void visitRootLeave()
28 28 {
29 29 // Closes the root menu
30 m_MenuBuilder.closeMenu();
30 m_PlotMenuBuilder.closeMenu();
31 31 }
32 32
33 33 void visitNodeEnter(const IVisualizationWidget &container)
34 34 {
35 35 // Opens a new menu associated to the node
36 m_MenuBuilder.addMenu(container.name());
36 m_PlotMenuBuilder.addMenu(container.name());
37 37 }
38 38
39 39 template <typename ActionFun>
40 40 void visitNodeLeave(const IVisualizationWidget &container, const QString &actionName,
41 41 ActionFun actionFunction)
42 42 {
43 43 if (m_Variable && container.canDrop(*m_Variable)) {
44 m_MenuBuilder.addSeparator();
45 m_MenuBuilder.addAction(actionName, actionFunction);
44 m_PlotMenuBuilder.addSeparator();
45 m_PlotMenuBuilder.addAction(actionName, actionFunction);
46 46 }
47 47
48 48 // Closes the menu associated to the node
49 m_MenuBuilder.closeMenu();
49 m_PlotMenuBuilder.closeMenu();
50 50 }
51 51
52 52 template <typename ActionFun>
53 53 void visitLeaf(const IVisualizationWidget &container, const QString &actionName,
54 54 ActionFun actionFunction)
55 55 {
56 56 if (m_Variable && container.canDrop(*m_Variable)) {
57 m_MenuBuilder.addAction(actionName, actionFunction);
57 m_PlotMenuBuilder.addAction(actionName, actionFunction);
58 58 }
59 59 }
60 60
61 61 std::shared_ptr<Variable> m_Variable;
62 MenuBuilder m_MenuBuilder;
62 MenuBuilder m_PlotMenuBuilder; ///< Builder for the 'Plot' menu
63 63 };
64 64
65 65 GenerateVariableMenuOperation::GenerateVariableMenuOperation(QMenu *menu,
66 66 std::shared_ptr<Variable> variable)
67 67 : impl{spimpl::make_unique_impl<GenerateVariableMenuOperationPrivate>(menu, variable)}
68 68 {
69 69 }
70 70
71 71 void GenerateVariableMenuOperation::visitEnter(VisualizationWidget *widget)
72 72 {
73 73 // VisualizationWidget is not intended to accommodate a variable
74 74 Q_UNUSED(widget)
75 75
76 76 impl->visitRootEnter();
77 77 }
78 78
79 79 void GenerateVariableMenuOperation::visitLeave(VisualizationWidget *widget)
80 80 {
81 81 // VisualizationWidget is not intended to accommodate a variable
82 82 Q_UNUSED(widget)
83 83
84 84 impl->visitRootLeave();
85 85 }
86 86
87 87 void GenerateVariableMenuOperation::visitEnter(VisualizationTabWidget *tabWidget)
88 88 {
89 89 if (tabWidget) {
90 90 impl->visitNodeEnter(*tabWidget);
91 91 }
92 92 else {
93 93 qCCritical(LOG_GenerateVariableMenuOperation(),
94 94 "Can't visit enter VisualizationTabWidget : the widget is null");
95 95 }
96 96 }
97 97
98 98 void GenerateVariableMenuOperation::visitLeave(VisualizationTabWidget *tabWidget)
99 99 {
100 100 if (tabWidget) {
101 101 impl->visitNodeLeave(
102 102 *tabWidget, QObject::tr("Open in a new zone"),
103 103 [ var = impl->m_Variable, tabWidget ]() { tabWidget->createZone(var); });
104 104 }
105 105 else {
106 106 qCCritical(LOG_GenerateVariableMenuOperation(),
107 107 "Can't visit leave VisualizationTabWidget : the widget is null");
108 108 }
109 109 }
110 110
111 111 void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidget)
112 112 {
113 113 if (zoneWidget) {
114 114 impl->visitNodeEnter(*zoneWidget);
115 115 }
116 116 else {
117 117 qCCritical(LOG_GenerateVariableMenuOperation(),
118 118 "Can't visit enter VisualizationZoneWidget : the widget is null");
119 119 }
120 120 }
121 121
122 122 void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget)
123 123 {
124 124 if (zoneWidget) {
125 125 impl->visitNodeLeave(
126 126 *zoneWidget, QObject::tr("Open in a new graph"),
127 127 [ var = impl->m_Variable, zoneWidget ]() { zoneWidget->createGraph(var); });
128 128 }
129 129 else {
130 130 qCCritical(LOG_GenerateVariableMenuOperation(),
131 131 "Can't visit leave VisualizationZoneWidget : the widget is null");
132 132 }
133 133 }
134 134
135 135 void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget)
136 136 {
137 137 if (graphWidget) {
138 138 impl->visitLeaf(
139 139 *graphWidget, QObject::tr("Open in %1").arg(graphWidget->name()),
140 140 [ var = impl->m_Variable, graphWidget ]() { graphWidget->addVariableUsingGraph(var); });
141 141 }
142 142 else {
143 143 qCCritical(LOG_GenerateVariableMenuOperation(),
144 144 "Can't visit VisualizationGraphWidget : the widget is null");
145 145 }
146 146 }
General Comments 0
You need to be logged in to leave comments. Login now