Skip to content

Commit 845d342

Browse files
committed
add frozen menu flag
1 parent 92b4676 commit 845d342

5 files changed

Lines changed: 41 additions & 12 deletions

File tree

examples/calculator/RandomNumber.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
class RandomNumberModel : public MathOperationDataModel
1616
{
1717
public:
18+
RandomNumberModel() {
19+
setFrozenMenu(true);
20+
}
21+
1822
virtual ~RandomNumberModel() {}
1923

2024
public:

include/QtNodes/internal/DataFlowGraphicsScene.hpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,7 @@ class NODE_EDITOR_PUBLIC DataFlowGraphicsScene : public BasicGraphicsScene
2424
public:
2525
std::vector<NodeId> selectedNodes() const;
2626
QMenu *createSceneMenu(QPointF const scenePos) override;
27-
void updateConnectionGraphics(const std::unordered_set<ConnectionId> &connections, bool state)
28-
{
29-
for (auto const &c : connections) {
30-
if (auto *cgo = connectionGraphicsObject(c)) {
31-
cgo->connectionState().setFrozen(state);
32-
cgo->update();
33-
}
34-
}
35-
}
27+
void updateConnectionGraphics(const std::unordered_set<ConnectionId> &connections, bool state);
3628

3729
public Q_SLOTS:
3830
bool save() const;

include/QtNodes/internal/NodeDelegateModel.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "NodeData.hpp"
66
#include "NodeStyle.hpp"
77
#include "Serializable.hpp"
8+
#include <QtGui/QColor>
89

910
#include <QtWidgets/QWidget>
1011

@@ -80,6 +81,10 @@ class NODE_EDITOR_PUBLIC NodeDelegateModel
8081

8182
void setFrozenState(bool state) { _frozen = state; }
8283

84+
bool frozenMenu() const { return _frozenMenu; }
85+
86+
void setFrozenMenu(bool state) { _frozenMenu = state; }
87+
8388
public Q_SLOTS:
8489
virtual void inputConnectionCreated(ConnectionId const &) {}
8590
virtual void inputConnectionDeleted(ConnectionId const &) {}
@@ -124,6 +129,8 @@ public Q_SLOTS:
124129
NodeStyle _nodeStyle;
125130

126131
bool _frozen{false};
132+
133+
bool _frozenMenu{false};
127134
};
128135

129136
} // namespace QtNodes

src/DataFlowGraphicsScene.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,15 @@ bool DataFlowGraphicsScene::load()
190190
return true;
191191
}
192192

193+
void DataFlowGraphicsScene::updateConnectionGraphics(
194+
const std::unordered_set<ConnectionId> &connections, bool state)
195+
{
196+
for (auto const &c : connections) {
197+
if (auto *cgo = connectionGraphicsObject(c)) {
198+
cgo->connectionState().setFrozen(state);
199+
cgo->update();
200+
}
201+
}
202+
}
203+
193204
} // namespace QtNodes

src/GraphicsView.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include "BasicGraphicsScene.hpp"
44
#include "ConnectionGraphicsObject.hpp"
5+
#include "DataFlowGraphModel.hpp"
6+
#include "NodeDelegateModel.hpp"
57
#include "NodeGraphicsObject.hpp"
68
#include "StyleCollection.hpp"
79
#include "UndoCommands.hpp"
@@ -23,7 +25,10 @@
2325
#include <cmath>
2426

2527
using QtNodes::BasicGraphicsScene;
28+
using QtNodes::DataFlowGraphModel;
2629
using QtNodes::GraphicsView;
30+
using QtNodes::NodeDelegateModel;
31+
using QtNodes::NodeGraphicsObject;
2732

2833
GraphicsView::GraphicsView(QWidget *parent)
2934
: QGraphicsView(parent)
@@ -167,11 +172,21 @@ void GraphicsView::centerScene()
167172
void GraphicsView::contextMenuEvent(QContextMenuEvent *event)
168173
{
169174
QGraphicsView::contextMenuEvent(event);
170-
QMenu *menu;
175+
QMenu *menu = nullptr;
171176

172-
if (itemAt(event->pos())) {
177+
bool isFrozenMenu;
178+
179+
if (auto *dfModel = dynamic_cast<DataFlowGraphModel *>(&nodeScene()->graphModel())) {
180+
if (auto n = qgraphicsitem_cast<NodeGraphicsObject *>(itemAt(event->pos()))) {
181+
if (auto *delegate = dfModel->delegateModel<NodeDelegateModel>(n->nodeId())) {
182+
isFrozenMenu = delegate->frozenMenu();
183+
}
184+
}
185+
}
186+
187+
if (itemAt(event->pos()) && isFrozenMenu) {
173188
menu = nodeScene()->createFreezeMenu();
174-
} else {
189+
} else if (!itemAt(event->pos())) {
175190
menu = nodeScene()->createSceneMenu(mapToScene(event->pos()));
176191
}
177192

0 commit comments

Comments
 (0)