Skip to content

Commit 4ad8391

Browse files
zmothpaceholder
authored andcommitted
Add scale up and scale down range (paceholder#3)
* set default (0.3, 2) * 0 means you can scale up/down indefinitely * the scale size can be specified by `setupScale`
1 parent aec1c22 commit 4ad8391

File tree

5 files changed

+146
-36
lines changed

5 files changed

+146
-36
lines changed

examples/calculator/main.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@ main(int argc, char* argv[])
9494
l->addWidget(menuBar);
9595
auto scene = new DataFlowGraphicsScene(dataFlowGraphModel,
9696
&mainWidget);
97-
l->addWidget(new GraphicsView(scene));
97+
98+
auto view = new GraphicsView(scene);
99+
l->addWidget(view);
98100
l->setContentsMargins(0, 0, 0, 0);
99101
l->setSpacing(0);
100102

@@ -104,6 +106,9 @@ main(int argc, char* argv[])
104106
QObject::connect(loadAction, &QAction::triggered,
105107
scene, &DataFlowGraphicsScene::load);
106108

109+
QObject::connect(scene, &DataFlowGraphicsScene::sceneLoaded,
110+
view, &GraphicsView::centerScene);
111+
107112
mainWidget.setWindowTitle("Data Flow: simplest calculator");
108113
mainWidget.resize(800, 600);
109114
// Center window.

include/QtNodes/internal/DataFlowGraphicsScene.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ public Q_SLOTS:
4141
void
4242
load();
4343

44+
Q_SIGNALS:
45+
void
46+
sceneLoaded();
47+
4448
private:
4549
DataFlowGraphModel &_graphModel;
4650
};

include/QtNodes/internal/GraphicsView.hpp

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,24 @@ namespace QtNodes
99

1010
class BasicGraphicsScene;
1111

12+
13+
/**
14+
* @brief A central view able to render objects from `BasicGraphicsScene`.
15+
*/
1216
class NODE_EDITOR_PUBLIC GraphicsView
1317
: public QGraphicsView
1418
{
1519
Q_OBJECT
1620
public:
17-
GraphicsView(QWidget *parent = Q_NULLPTR);
18-
GraphicsView(BasicGraphicsScene *scene, QWidget *parent = Q_NULLPTR);
21+
struct ScaleRange
22+
{
23+
double minimum = 0;
24+
double maximum = 0;
25+
};
26+
27+
public:
28+
GraphicsView(QWidget* parent = Q_NULLPTR);
29+
GraphicsView(BasicGraphicsScene* scene, QWidget* parent = Q_NULLPTR);
1930

2031
GraphicsView(const GraphicsView &) = delete;
2132
GraphicsView
@@ -28,58 +39,76 @@ class NODE_EDITOR_PUBLIC GraphicsView
2839
deleteSelectionAction() const;
2940

3041
void
31-
setScene(BasicGraphicsScene *scene);
42+
setScene(BasicGraphicsScene* scene);
3243

3344
void
3445
centerScene();
3546

47+
/// @brief max=0/min=0 indicates infinite zoom in/out
48+
void
49+
setScaleRange(double minimum = 0, double maximum = 0);
50+
51+
void
52+
setScaleRange(ScaleRange range);
53+
54+
double
55+
getScale() const;
56+
3657
public Q_SLOTS:
3758
void
3859
scaleUp();
3960

4061
void
4162
scaleDown();
4263

64+
void
65+
setupScale(double scale);
66+
4367
void
4468
onDeleteSelectedObjects();
4569

4670
void
4771
onDuplicateSelectedObjects();
4872

73+
Q_SIGNALS:
74+
void
75+
scaleChanged(double scale);
76+
4977
protected:
5078
void
51-
contextMenuEvent(QContextMenuEvent *event) override;
79+
contextMenuEvent(QContextMenuEvent* event) override;
5280

5381
void
54-
wheelEvent(QWheelEvent *event) override;
82+
wheelEvent(QWheelEvent* event) override;
5583

5684
void
57-
keyPressEvent(QKeyEvent *event) override;
85+
keyPressEvent(QKeyEvent* event) override;
5886

5987
void
60-
keyReleaseEvent(QKeyEvent *event) override;
88+
keyReleaseEvent(QKeyEvent* event) override;
6189

6290
void
63-
mousePressEvent(QMouseEvent *event) override;
91+
mousePressEvent(QMouseEvent* event) override;
6492

6593
void
66-
mouseMoveEvent(QMouseEvent *event) override;
94+
mouseMoveEvent(QMouseEvent* event) override;
6795

6896
void
6997
drawBackground(QPainter* painter, const QRectF & r) override;
7098

7199
void
72-
showEvent(QShowEvent *event) override;
100+
showEvent(QShowEvent* event) override;
73101

74102
protected:
75-
BasicGraphicsScene *
103+
BasicGraphicsScene*
76104
nodeScene();
77105

78106
private:
79-
QAction* _clearSelectionAction;
80-
QAction* _deleteSelectionAction;
81-
QAction* _duplicateSelectionAction;
107+
QAction* _clearSelectionAction = nullptr;
108+
QAction* _deleteSelectionAction = nullptr;
109+
QAction* _duplicateSelectionAction = nullptr;
82110

83111
QPointF _clickPos;
112+
ScaleRange _scaleRange;
84113
};
85114
}

src/DataFlowGraphicsScene.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ load()
218218
QByteArray const wholeFile = file.readAll();
219219

220220
_graphModel.load(QJsonDocument::fromJson(wholeFile).object());
221+
222+
Q_EMIT sceneLoaded();
221223
}
222224

223225

0 commit comments

Comments
 (0)