Skip to content

Commit e61b6e5

Browse files
committed
drag and drop, panning, mouse zoom added
1 parent 43f29f4 commit e61b6e5

File tree

1 file changed

+55
-10
lines changed

1 file changed

+55
-10
lines changed

node_editor/gui/view.py

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class View(QtWidgets.QGraphicsView):
1414

1515
_mouse_wheel_zoom_rate = 0.0015
1616

17+
request_node = QtCore.Signal(str)
18+
1719
def __init__(self, parent):
1820
super(View, self).__init__(parent)
1921
self.setRenderHint(QtGui.QPainter.Antialiasing)
@@ -23,9 +25,10 @@ def __init__(self, parent):
2325
gl_format.setSamples(10)
2426
gl_widget = QtOpenGL.QGLWidget(gl_format)
2527

28+
self.currentScale = 1
2629
self._pan = False
27-
self._panStartX = 0
28-
self._panStartY = 0
30+
self._pan_start_x = 0
31+
self._pan_start_y = 0
2932
self._numScheduledScalings = 0
3033
self.lastMousePos = QtCore.QPoint()
3134

@@ -37,10 +40,6 @@ def __init__(self, parent):
3740
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
3841
self.setFrameShape(QtWidgets.QFrame.NoFrame)
3942

40-
def toggleDragMode(self):
41-
if self.dragMode() == QtWidgets.QGraphicsView.ScrollHandDrag:
42-
self.setDragMode(QtWidgets.QGraphicsView.NoDrag)
43-
4443
def wheelEvent(self, event):
4544
num_degrees = event.delta() / 8.0
4645
num_steps = num_degrees / 5.0
@@ -50,15 +49,18 @@ def wheelEvent(self, event):
5049
if self._numScheduledScalings * num_steps < 0:
5150
self._numScheduledScalings = num_steps
5251

53-
self.anim = QtCore.QTimeLine(100)
54-
self.anim.setUpdateInterval(2)
52+
self.anim = QtCore.QTimeLine(350)
53+
self.anim.setUpdateInterval(20)
5554

5655
self.anim.valueChanged.connect(self.scaling_time)
5756
self.anim.finished.connect(self.anim_finished)
5857
self.anim.start()
5958

6059
def scaling_time(self, x):
6160
factor = 1.0 + self._numScheduledScalings / 300.0
61+
62+
self.currentScale *= factor
63+
6264
self.scale(factor, factor)
6365

6466
def anim_finished(self):
@@ -124,9 +126,52 @@ def contextMenuEvent(self, event):
124126

125127
if item:
126128
if isinstance(item, Connection):
127-
# print(type(item))
128-
# if item.type() == Connection.Type:
129+
129130
print("Found Connection", item)
130131
elbow_action = QtWidgets.QAction("Add Elbow", self)
131132
elbow_action.triggered.connect(self.add_elbow)
132133
self.menu.addAction(elbow_action)
134+
135+
def dragEnterEvent(self, e):
136+
137+
if e.mimeData().hasFormat("text/plain"):
138+
e.accept()
139+
else:
140+
e.ignore()
141+
142+
def dropEvent(self, e):
143+
drop_node_name = e.mimeData().text()
144+
self.request_node.emit(drop_node_name)
145+
146+
def mousePressEvent(self, event):
147+
if event.button() == QtCore.Qt.MiddleButton:
148+
self._pan = True
149+
self._pan_start_x = event.x()
150+
self._pan_start_y = event.y()
151+
self.setCursor(QtCore.Qt.ClosedHandCursor)
152+
153+
return super(View, self).mousePressEvent(event)
154+
155+
def mouseReleaseEvent(self, event):
156+
if event.button() == QtCore.Qt.MiddleButton:
157+
self._pan = False
158+
self.setCursor(QtCore.Qt.ArrowCursor)
159+
160+
return super(View, self).mouseReleaseEvent(event)
161+
162+
def mouseMoveEvent(self, event):
163+
if self._pan:
164+
165+
self.horizontalScrollBar().setValue(
166+
self.horizontalScrollBar().value() - (event.x() - self._pan_start_x)
167+
)
168+
169+
self.verticalScrollBar().setValue(
170+
self.verticalScrollBar().value() - (event.y() - self._pan_start_y)
171+
)
172+
173+
self._pan_start_x = event.x()
174+
self._pan_start_y = event.y()
175+
176+
return super(View, self).mouseMoveEvent(event)
177+

0 commit comments

Comments
 (0)