anpstudio 0.1.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 <QString>
11
12#include <functional>
13
14class Document;
15class ClusterItem;
16class NodeItem;
17class LinkItem;
18class QToolButton;
19class QGraphicsProxyWidget;
20class QGraphicsItem;
21class QKeyEvent;
22
29class NetworkCanvas : public QGraphicsView {
30 Q_OBJECT
31public:
36 explicit NetworkCanvas(Document* doc, QWidget* parent = nullptr);
37
39 void rebuild();
41 void setConnectMode(bool on);
43 [[nodiscard]] bool connectMode() const { return connectMode_; }
45 void select(const QString& cluster, const QString& node);
46
47signals:
49 void nodeActivated(const QString& name);
51 void selectionChanged(const QString& cluster, const QString& node);
52
53protected:
55 void contextMenuEvent(QContextMenuEvent* event) override;
57 void mousePressEvent(QMouseEvent* event) override;
58 void keyPressEvent(QKeyEvent* event) override;
59 void resizeEvent(QResizeEvent* event) override;
60
61private:
62 void persistLayout();
63 void updateLinks();
64 void positionAddClusterButton();
65 void promptAddCluster();
66 void promptAddNode(const QString& clusterName);
67 [[nodiscard]] QString uniqueClusterName() const;
68 [[nodiscard]] QString uniqueNodeName() const;
69 void startInlineRenameCluster(const QString& cluster);
70 void startInlineRenameNode(const QString& node);
71 void beginInlineRename(QGraphicsItem* parentItem,
72 const QRectF& localRect,
73 const QString& oldName,
74 std::function<void()> onShow,
75 std::function<void()> onHide,
76 std::function<void(const QString&)> onCommit);
77 void cancelInlineRename();
78 NodeItem* nodeItemAt(const QPoint& viewPos) const;
79
80 Document* doc_ = nullptr;
81 QGraphicsScene* scene_ = nullptr;
82 QToolButton* addClusterBtn_ = nullptr;
83 QHash<QString, ClusterItem*> clusters_;
84 QHash<QString, NodeItem*> nodes_;
85 QList<LinkItem*> links_;
86 bool connectMode_ = false;
87 QString connectSrc_;
88 QGraphicsProxyWidget* renameProxy_ = nullptr;
89 std::function<void()> renameHideCb_;
90 bool renameClosing_ = false;
91};
Owns the root anpcpp::AnpNetwork, undo stack, file path, and dirty flag.
Definition document.hpp:23
Visual editor for clusters, nodes, and connections.
Definition network_canvas.hpp:29
void nodeActivated(const QString &name)
Emitted to open a node's subnetwork (e.g.
void rebuild()
Rebuilds scene items from the current network.
void setConnectMode(bool on)
Enables or disables click-to-connect link mode.
void contextMenuEvent(QContextMenuEvent *event) override
Shows context menu for add/connect operations.
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:43
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 node selection and connect-mode clicks.