Maki
Formally verfied low-code orchestration
Loading...
Searching...
No Matches
system_menu.h
1#pragma once
2
3#include <QList>
4#include <QTreeWidget>
5
6#include "result.h"
7#include "test_and_set.h"
8#include "types.h"
9
10class NodeItem;
11class Flow;
12class QTreeWidgetItem;
13class FlowSaveInfo;
14
23class SystemMenu : public QTreeWidget
24{
25 Q_OBJECT
26public:
31 SystemMenu(QWidget* parent);
32
39 VoidResult onNodeAdded(const QString& flowId, NodeItem* node, const Types::LibraryTypes canvasType);
40
48 VoidResult onNodeRemoved(const QString& flowId, const QString& nodeId, const QString& parentId);
49
56 VoidResult onNodeModified(const QString& flowId, NodeItem* node);
57
65 VoidResult onNodeSelected(const QString& flowId, NodeItem* node, bool selected);
66
73 VoidResult onFlowAdded(Flow* flow, NodeItem* node);
74
81 VoidResult onFlowRemoved(const QString& flowId, const QString& nodeId);
82
83 VoidResult onPipelineAdded(std::shared_ptr<const FlowSaveInfo> info);
84 VoidResult onPipelineRemoved(const QString& id);
85
86signals:
92 void nodeFocused(const QString& flowId, const QString& nodeId);
93
99 void nodeRemoved(const QString& flowId, const QString& nodeId);
100
106 void flowSelected(const QString& flowId, const QString& nodeId);
107
113 void flowRemoved(const QString& flowId, const QString& nodeId);
114
120 void flowRenamed(const QString& flowId, const QString& nodeId);
121
122 void editPipeline(const QString& pipelineId);
123 void removePipeline(const QString& pipelineId);
124
125private slots:
130 void showContextMenu(const QPoint& pos);
131
137 void onItemClicked(QTreeWidgetItem* item, int /* column */);
138
139protected:
140 void resizeEvent(QResizeEvent* event) override;
141
142private:
147 enum Roles
148 {
150 Capabilities,
151 SubTasks,
152 Flows,
153 PipelineRoot,
154 Pipeline,
159 };
160
161 qreal mNameColumnRatio = 0.7;
162 TestAndSet<bool> mAdjustingColumns = false;
163
164 void resizeColumns(int changedColumn = -1, int requestedWidth = -1);
165
171 VoidResult addRootNode(NodeItem* node);
172
178 VoidResult addLeafNode(NodeItem* node);
179
185 void populateItem(QTreeWidgetItem* item, const QIcon& icon, const QString& name, const QString& type, const QString& data, const Roles role,
186 const QString& canvas = "");
187
188 void populateTaskItem(QTreeWidgetItem* item, NodeItem* node);
189
195 QTreeWidgetItem* getItemById(const QString& id) const;
196
197 QTreeWidgetItem* findParentItemByRole(const QString& id, Roles role) const;
198 QTreeWidgetItem* getOrCreateChildGroup(const QString& parentId, Roles role);
199 QTreeWidgetItem* getOrCreateGroup(const QString& id, Roles role, QTreeWidgetItem* parent);
200
201 void removeGroupIfEmpty(QTreeWidgetItem* group);
202
207 QTreeWidgetItem* systemFlows();
208
213 QTreeWidgetItem* componentFlows();
214
219 void editFlow(QTreeWidgetItem* item);
220
225 void removeFlow(QTreeWidgetItem* item);
226};
Represents the save information for a flow.
Definition flow_info.h:15
Represents a flow in the system.
Definition flow.h:17
Represents a graphical node item in a flowchart.
Definition node.h:26
void editFlow(QTreeWidgetItem *item)
Starts editing the given flow item.
Definition system_menu.cpp:504
VoidResult onFlowRemoved(const QString &flowId, const QString &nodeId)
Handles the removal of a flow from the menu.
Definition system_menu.cpp:206
VoidResult onFlowAdded(Flow *flow, NodeItem *node)
Handles the addition of a flow to the menu.
Definition system_menu.cpp:164
VoidResult addRootNode(NodeItem *node)
Adds a root node to the menu.
Definition system_menu.cpp:293
void onItemClicked(QTreeWidgetItem *item, int)
Handles clicks on tree items.
Definition system_menu.cpp:491
QTreeWidgetItem * systemFlows()
Returns the root item containing system flows.
VoidResult onNodeModified(const QString &flowId, NodeItem *node)
Handles modifications to an existing node.
Definition system_menu.cpp:148
void nodeFocused(const QString &flowId, const QString &nodeId)
Emitted when a node should be focused in the editor.
void removeFlow(QTreeWidgetItem *item)
Removes the given flow item.
Definition system_menu.cpp:525
void flowSelected(const QString &flowId, const QString &nodeId)
Emitted when a flow is selected.
QTreeWidgetItem * componentFlows()
Returns the root item containing component flows.
void populateItem(QTreeWidgetItem *item, const QIcon &icon, const QString &name, const QString &type, const QString &data, const Roles role, const QString &canvas="")
Populates a tree widget item using data from a node.
Definition system_menu.cpp:269
void nodeRemoved(const QString &flowId, const QString &nodeId)
Emitted when a node should be removed.
VoidResult onNodeAdded(const QString &flowId, NodeItem *node, const Types::LibraryTypes canvasType)
Handles the addition of a node to a flow.
Definition system_menu.cpp:58
VoidResult addLeafNode(NodeItem *node)
Adds a leaf node to the menu.
Definition system_menu.cpp:305
QTreeWidgetItem * getItemById(const QString &id) const
Finds a tree item by its identifier.
Definition system_menu.cpp:391
VoidResult onNodeSelected(const QString &flowId, NodeItem *node, bool selected)
Handles selection state changes for a node.
Definition system_menu.cpp:159
SystemMenu(QWidget *parent)
Constructs the system menu widget.
Definition system_menu.cpp:24
void flowRenamed(const QString &flowId, const QString &nodeId)
Emitted when a flow should be renamed.
Roles
Identifies the semantic role of a tree item.
Definition system_menu.h:148
@ NodeRole
Item represents a node within a flow.
Definition system_menu.h:157
@ FlowRole
Item represents a flow.
Definition system_menu.h:156
@ ToplevelRole
Item represents a top-level category node.
Definition system_menu.h:149
@ ComponentRole
Item represents a component category or container.
Definition system_menu.h:155
@ PipelineRole
Item represents a pipeline.
Definition system_menu.h:158
void showContextMenu(const QPoint &pos)
Shows the context menu at the given position.
Definition system_menu.cpp:453
VoidResult onNodeRemoved(const QString &flowId, const QString &nodeId, const QString &parentId)
Handles the removal of a node from a flow.
Definition system_menu.cpp:102
void flowRemoved(const QString &flowId, const QString &nodeId)
Emitted when a flow should be removed.