##// END OF EJS Templates
Implements visit of tab and zone...
Alexandre Leroux -
r197:fae2d5d3e62c
parent child
Show More
@@ -1,116 +1,137
1 1 #include "Visualization/operations/GenerateVariableMenuOperation.h"
2 2
3 3 #include "Visualization/VisualizationGraphWidget.h"
4 4 #include "Visualization/VisualizationTabWidget.h"
5 5 #include "Visualization/VisualizationZoneWidget.h"
6 6
7 7 #include <Variable/Variable.h>
8 8
9 9 #include <QMenu>
10 10 #include <QStack>
11 11
12 12 Q_LOGGING_CATEGORY(LOG_GenerateVariableMenuOperation, "GenerateVariableMenuOperation")
13 13
14 14 namespace {
15 15
16 16 /// Helper assigned to build the hierarchical menu associated with a variable
17 17 struct MenuBuilder {
18 18 /**
19 19 * Ctor
20 20 * @param menu the parent menu
21 21 */
22 22 explicit MenuBuilder(QMenu *menu)
23 23 {
24 24 if (menu) {
25 25 m_Menus.push(menu);
26 26 }
27 27 else {
28 28 qCCritical(LOG_GenerateVariableMenuOperation())
29 29 << QObject::tr("No parent menu has been defined");
30 30 }
31 31 }
32 32
33 33 /**
34 34 * Adds a new menu to the current menu
35 35 * @param name the name of the menu
36 36 */
37 37 void addMenu(const QString &name)
38 38 {
39 39 if (auto currMenu = currentMenu()) {
40 40 m_Menus.push(currMenu->addMenu(name));
41 41 }
42 42 else {
43 43 qCCritical(LOG_GenerateVariableMenuOperation())
44 44 << QObject::tr("No current menu to attach the new menu");
45 45 }
46 46 }
47 47
48 48 /// Closes the current menu
49 49 void closeMenu()
50 50 {
51 51 if (!m_Menus.isEmpty()) {
52 52 m_Menus.pop();
53 53 }
54 54 }
55 55
56 56 /// Gets the current menu (i.e. the top menu of the stack)
57 57 QMenu *currentMenu() const { return !m_Menus.isEmpty() ? m_Menus.top() : nullptr; }
58 58
59 59 /// Stack of all menus currently opened
60 60 QStack<QMenu *> m_Menus{};
61 61 };
62 62
63 63 } // namespace
64 64
65 65 struct GenerateVariableMenuOperation::GenerateVariableMenuOperationPrivate {
66 66 explicit GenerateVariableMenuOperationPrivate(QMenu *menu, std::shared_ptr<Variable> variable)
67 67 : m_Variable{variable}, m_MenuBuilder{menu}
68 68 {
69 69 }
70 70
71 void visitNodeEnter(const IVisualizationWidget &container)
72 {
73 // Opens a new menu associated to the node
74 m_MenuBuilder.addMenu(container.name());
75 }
76
77 template <typename ActionFun>
78 void visitNodeLeave()
79 {
80 // Closes the menu associated to the node
81 m_MenuBuilder.closeMenu();
82 }
83
71 84 std::shared_ptr<Variable> m_Variable;
72 85 MenuBuilder m_MenuBuilder;
73 86 };
74 87
75 88 GenerateVariableMenuOperation::GenerateVariableMenuOperation(QMenu *menu,
76 89 std::shared_ptr<Variable> variable)
77 90 : impl{spimpl::make_unique_impl<GenerateVariableMenuOperationPrivate>(menu, variable)}
78 91 {
79 92 }
80 93
81 94 void GenerateVariableMenuOperation::visitEnter(VisualizationWidget *widget)
82 95 {
83 96 // VisualizationWidget is not intended to accommodate a variable
84 97 Q_UNUSED(widget)
85 98 }
86 99
87 100 void GenerateVariableMenuOperation::visitLeave(VisualizationWidget *widget)
88 101 {
89 102 // VisualizationWidget is not intended to accommodate a variable
90 103 Q_UNUSED(widget)
91 104 }
92 105
93 106 void GenerateVariableMenuOperation::visitEnter(VisualizationTabWidget *tabWidget)
94 107 {
95 /// @todo ALX
108 if (tabWidget) {
109 impl->visitNodeEnter(*tabWidget);
110 }
note

log error on else

96 111 }
97 112
98 113 void GenerateVariableMenuOperation::visitLeave(VisualizationTabWidget *tabWidget)
99 114 {
100 /// @todo ALX
115 if (tabWidget) {
116 impl->visitNodeLeave();
117 }
note

log error on else

101 118 }
102 119
103 120 void GenerateVariableMenuOperation::visitEnter(VisualizationZoneWidget *zoneWidget)
104 121 {
105 /// @todo ALX
122 if (zoneWidget) {
123 impl->visitNodeEnter(*zoneWidget);
124 }
note

log error on else

106 125 }
107 126
108 127 void GenerateVariableMenuOperation::visitLeave(VisualizationZoneWidget *zoneWidget)
109 128 {
110 /// @todo ALX
129 if (zoneWidget) {
130 impl->visitNodeLeave();
131 }
note

log error on else

111 132 }
112 133
113 134 void GenerateVariableMenuOperation::visit(VisualizationGraphWidget *graphWidget)
114 135 {
115 136 /// @todo ALX
116 137 }
General Comments 0
You need to be logged in to leave comments. Login now