-
Notifications
You must be signed in to change notification settings - Fork 1
/
view.cpp
109 lines (90 loc) · 2.58 KB
/
view.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
MIT License
Copyright (c) 2021 Ramesh Choudhary
*/
#include "view.h"
#include<graphLayout.h>
View::~View(){}
View::View(QWidget *parent)
: QGraphicsView(parent)
{
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
void View::fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRatioMode)
{
QGraphicsView::fitInView(rect,aspectRatioMode);
emit transformed();
}
void View::enableEditing(bool set)
{
this->m_editing=set;
}
void View::setGraphLayout(GraphLayout *graphLaoyout)
{
this->graphLaoyout=graphLaoyout;
}
void View::mouseMoveEvent(QMouseEvent *event)
{
if(isMousPressed && event->modifiers()==Qt::KeyboardModifier::ControlModifier)
{
QPointF newPoint = event->pos();
QPointF dif = lastpoint - newPoint;
if(transform().m11()<1)
dif = QPointF(dif.x()/transform().m11(),dif.y()/transform().m22());
QRectF sR = sceneRect();
setSceneRect(sR.x()+dif.x(),sR.y()+dif.y(),sR.width(),sR.height());
lastpoint = newPoint;
}
else QGraphicsView::mouseMoveEvent(event);
}
void View::mousePressEvent(QMouseEvent *event)
{
if(m_editing)
{
graphLaoyout->editingEvent(mapToScene(event->pos()));
}
else
{
isMousPressed=true;
lastpoint = event->pos();
QGraphicsView::mousePressEvent(event);
}
}
void View::mouseReleaseEvent(QMouseEvent *event)
{
isMousPressed=false;
QGraphicsView::mouseReleaseEvent(event);
}
void View::scalingTime(qreal q) {
Q_UNUSED(q);
qreal factor = 1.0+ qreal(_numScheduledScalings)/300.0;
scale(factor,factor);
}
void View::animFinished() {
if (_numScheduledScalings > 0) _numScheduledScalings--;
else _numScheduledScalings++;
sender()->~QObject();
emit transformed();
}
void View::scaleView(int numSteps)
{
_numScheduledScalings += numSteps;
if (_numScheduledScalings * numSteps < 0) // if user moved the wheel in another direction, we reset previously scheduled scalings
_numScheduledScalings = numSteps;
QTimeLine *anim = new QTimeLine(350, this);
anim->setUpdateInterval(20);
connect(anim, SIGNAL (valueChanged(qreal)), SLOT (scalingTime(qreal)));
connect(anim, SIGNAL (finished()), SLOT (animFinished()));
anim->start();
}
void View::wheelEvent(QWheelEvent *event)
{
if(event->modifiers()==Qt::KeyboardModifier::ControlModifier)
{
int numDegrees = event->angleDelta().y() / 8;
int numSteps = numDegrees / 15;
scaleView(numSteps);
}
else QGraphicsView::wheelEvent(event);
}