anpstudio 0.4.0
ANP Studio — Analytic Network Process desktop application
Loading...
Searching...
No Matches
network_canvas.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <QGraphicsView>
9#include <QHash>
10#include <QSet>
11#include <QString>
12
13#include <functional>
14
15class Document;
16class ClusterItem;
17class NodeItem;
18class LinkItem;
19class ClusterLinkItem;
20class QToolButton;
21class QGraphicsProxyWidget;
22class QGraphicsItem;
23class QKeyEvent;
24
31class NetworkCanvas : public QGraphicsView {
32 Q_OBJECT
33public:
38 explicit NetworkCanvas(Document* doc, QWidget* parent = nullptr);
39 ~NetworkCanvas() override;
40
42 void rebuild();
52 void setConnectMode(bool on);
54 [[nodiscard]] bool connectMode() const { return connectMode_; }
56 void select(const QString& cluster, const QString& node);
57
58signals:
60 void nodeActivated(const QString& name);
62 void selectionChanged(const QString& cluster, const QString& node);
64 void connectModeChanged(bool on);
65
66protected:
68 void contextMenuEvent(QContextMenuEvent* event) override;
70 void mousePressEvent(QMouseEvent* event) override;
71 void keyPressEvent(QKeyEvent* event) override;
72 void resizeEvent(QResizeEvent* event) override;
73
74private:
75 void updateLinks();
76 void applyLinkVisibility();
77 void positionAddClusterButton();
78 void fitClustersInView();
79 void promptAddCluster();
80 void promptAddNode(const QString& clusterName);
81 [[nodiscard]] QString uniqueClusterName() const;
82 [[nodiscard]] QString uniqueNodeName() const;
83 [[nodiscard]] bool isNodeNameAvailable(const QString& name,
84 const QString& exceptName = {}) const;
85 [[nodiscard]] bool isClusterNameAvailable(const QString& name,
86 const QString& exceptName = {}) const;
87 void startInlineRenameCluster(const QString& cluster,
88 const QString& editText = {});
89 void startInlineRenameNode(const QString& node, const QString& editText = {});
90 void beginInlineRename(QGraphicsItem* parentItem,
91 const QRectF& localRect,
92 const QString& oldName,
93 std::function<void()> onShow,
94 std::function<void()> onHide,
95 std::function<void(const QString&)> onCommit,
96 const QString& editText = {});
98 void finishInlineRename(bool accept, bool viaEnter);
99 void cancelInlineRename();
100
101 [[nodiscard]] NodeItem* nodeItemAt(const QPoint& viewPos) const;
102 [[nodiscard]] ClusterItem* clusterItemAt(const QPoint& viewPos) const;
103
104 void clearConnectionSources();
105 void setSoleConnectionSource(const QString& node);
106 void toggleConnectionSource(const QString& node);
107 void setConnectionSourcesFromCluster(ClusterItem* cluster, bool unionWith);
108 void refreshConnectionVisuals();
109 void syncDocumentSelectionFromSources();
110 void batchToggleToDestinations(const QList<QString>& dests);
111 void handleConnectionLeftClick(QMouseEvent* event);
112 void handleConnectionRightClick(QMouseEvent* event);
113
114 Document* doc_ = nullptr;
115 QGraphicsScene* scene_ = nullptr;
116 QToolButton* addClusterBtn_ = nullptr;
117 QHash<QString, ClusterItem*> clusters_;
118 QHash<QString, NodeItem*> nodes_;
119 QList<LinkItem*> links_;
120 QList<ClusterLinkItem*> clusterLinks_;
121 bool connectMode_ = false;
122 bool rebuilding_ = false;
123 QSet<QString> connectionSources_;
124 QString connectionPrimary_;
125 QGraphicsProxyWidget* renameProxy_ = nullptr;
126 std::function<void()> renameHideCb_;
127 std::function<void(const QString&)> renameOnCommit_;
128 QString renameOldName_;
130 QString nodeCreateChainCluster_;
131 bool renameClosing_ = false;
133 bool renameDeferReturnPressed_ = false;
135 bool renameReturnWired_ = false;
137 bool renameAbortRemovesNode_ = false;
139 bool renameIsNode_ = true;
140};
Owns the root anpcpp::AnpNetwork, undo stack, file path, and dirty flag.
Definition document.hpp:71
Visual editor for clusters, nodes, and connections.
Definition network_canvas.hpp:31
void nodeActivated(const QString &name)
Emitted to open a node's subnetwork (e.g.
void organizeClusters()
Topology-aware auto-layout of cluster windows (undoable).
void rebuild()
Rebuilds scene items from the current network.
void connectModeChanged(bool on)
Emitted when Connection mode is entered or left.
void setConnectMode(bool on)
Enables or disables Connection mode.
void persistLayout()
Writes current cluster item positions into the model.
void contextMenuEvent(QContextMenuEvent *event) override
Shows context menu for add/connect operations (Normal mode only).
NetworkCanvas(Document *doc, QWidget *parent=nullptr)
void select(const QString &cluster, const QString &node)
Highlights a cluster/node from Document selection.
bool connectMode() const
Definition network_canvas.hpp:54
void selectionChanged(const QString &cluster, const QString &node)
Emitted when the user selects a cluster or node on the canvas.
void mousePressEvent(QMouseEvent *event) override
Handles Connection-mode clicks and Normal-mode interaction.