Skip to content

Commit c61d5f2

Browse files
committedMay 28, 2015
Merge pull request #2063 from HenningJagd/master
[processing] behavior of scroll zoom in the modeler
2 parents 352e824 + 8c624a3 commit c61d5f2

File tree

4 files changed

+38
-20
lines changed

4 files changed

+38
-20
lines changed
 

‎python/plugins/processing/modeler/ModelerArrowItem.py

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"""
4848

4949
from PyQt4.QtCore import Qt, QPointF
50-
from PyQt4.QtGui import QGraphicsPathItem, QPen, QGraphicsItem, QPainterPath, QPolygonF
50+
from PyQt4.QtGui import QGraphicsPathItem, QPen, QGraphicsItem, QPainterPath, QPolygonF, QPainter
5151
from processing.modeler.ModelerGraphicItem import ModelerGraphicItem
5252
from processing.modeler.ModelerAlgorithm import Algorithm
5353

@@ -61,56 +61,62 @@ def __init__(self, startItem, startIndex, endItem, endIndex,
6161
self.startIndex = startIndex
6262
self.startItem = startItem
6363
self.endItem = endItem
64+
self.endPoints = []
6465
self.setFlag(QGraphicsItem.ItemIsSelectable, False)
6566
self.myColor = Qt.gray
6667
self.setPen(QPen(self.myColor, 1, Qt.SolidLine,
6768
Qt.RoundCap, Qt.RoundJoin))
6869
self.setZValue(0)
6970

70-
def paint(self, painter, option, widget=None):
71-
myPen = self.pen()
72-
myPen.setColor(self.myColor)
73-
painter.setPen(myPen)
74-
painter.setBrush(self.myColor)
75-
71+
def updatePath(self):
72+
self.endPoints = []
7673
controlPoints = []
7774
endPt = self.endItem.getLinkPointForParameter(self.endIndex)
7875
startPt = self.startItem.getLinkPointForOutput(self.startIndex)
7976
if isinstance(self.startItem.element, Algorithm):
8077
if self.startIndex != -1:
8178
controlPoints.append(self.startItem.pos() + startPt)
8279
controlPoints.append(self.startItem.pos() + startPt
83-
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
80+
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
8481
controlPoints.append(self.endItem.pos() + endPt
85-
- QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
82+
- QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
8683
controlPoints.append(self.endItem.pos() + endPt)
8784
pt = QPointF(self.startItem.pos() + startPt
8885
+ QPointF(-3, -3))
89-
painter.drawEllipse(pt.x(), pt.y(), 6, 6)
86+
self.endPoints.append(pt)
9087
pt = QPointF(self.endItem.pos() + endPt +
9188
QPointF(-3, -3))
92-
painter.drawEllipse(pt.x(), pt.y(), 6, 6)
89+
self.endPoints.append(pt)
9390
else:
9491
# Case where there is a dependency on an algorithm not
9592
# on an output
9693
controlPoints.append(self.startItem.pos() + startPt)
9794
controlPoints.append(self.startItem.pos() + startPt
98-
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
95+
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
9996
controlPoints.append(self.endItem.pos() + endPt
100-
- QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
97+
- QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
10198
controlPoints.append(self.endItem.pos() + endPt)
10299
else:
103100
controlPoints.append(self.startItem.pos())
104101
controlPoints.append(self.startItem.pos()
105-
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
102+
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
106103
controlPoints.append(self.endItem.pos() + endPt
107-
- QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
104+
- QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
108105
controlPoints.append(self.endItem.pos() + endPt)
109106
pt = QPointF(self.endItem.pos() + endPt + QPointF(-3, -3))
110-
painter.drawEllipse(pt.x(), pt.y(), 6, 6)
111-
107+
self.endPoints.append(pt)
112108
path = QPainterPath()
113109
path.moveTo(controlPoints[0])
114110
path.cubicTo(*controlPoints[1:])
115-
painter.strokePath(path, painter.pen())
116111
self.setPath(path)
112+
113+
def paint(self, painter, option, widget=None):
114+
myPen = self.pen()
115+
myPen.setColor(self.myColor)
116+
painter.setPen(myPen)
117+
painter.setBrush(self.myColor)
118+
painter.setRenderHint(QPainter.Antialiasing)
119+
120+
for point in self.endPoints:
121+
painter.drawEllipse(point.x(), point.y(), 6, 6)
122+
painter.strokePath(self.shape(), painter.pen())

‎python/plugins/processing/modeler/ModelerDialog.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ def _wheelEvent(event):
106106
if event.delta() > 0:
107107
factor = 1/factor
108108
self.view.scale(factor, factor)
109-
self.view.centerOn(event.pos().x(), event.pos().y())
110109
self.repaintModel()
111110

112111
def _enterEvent(e):

‎python/plugins/processing/modeler/ModelerGraphicItem.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,15 @@ def foldInput(self, folded):
100100
pt = self.getLinkPointForOutput(-1)
101101
pt = QPointF(0, pt.y())
102102
self.outButton.position = pt
103+
for arrow in self.arrows:
104+
arrow.updatePath()
103105
self.update()
104106

105107
def foldOutput(self, folded):
106108
self.element.outputsFolded = folded
107109
self.prepareGeometryChange()
110+
for arrow in self.arrows:
111+
arrow.updatePath()
108112
self.update()
109113

110114
def addArrow(self, arrow):
@@ -302,7 +306,7 @@ def getLinkPointForOutput(self, outputIndex):
302306
def itemChange(self, change, value):
303307
if change == QGraphicsItem.ItemPositionHasChanged:
304308
for arrow in self.arrows:
305-
arrow.updatePosition()
309+
arrow.updatePath()
306310
self.element.pos = self.pos()
307311

308312
return value

‎python/plugins/processing/modeler/ModelerScene.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,17 @@ def paintModel(self, model):
105105
sourceItems = self.getItemsFromParamValue(value)
106106
for sourceItem, sourceIdx in sourceItems:
107107
arrow = ModelerArrowItem(sourceItem, sourceIdx, self.algItems[alg.name], idx)
108+
sourceItem.addArrow(arrow)
109+
self.algItems[alg.name].addArrow(arrow)
110+
arrow.updatePath()
108111
self.addItem(arrow)
109112
idx += 1
110113
for depend in alg.dependencies:
111114
arrow = ModelerArrowItem(self.algItems[depend], -1,
112115
self.algItems[alg.name], -1)
116+
self.algItems[depend].addArrow(arrow)
117+
self.algItems[alg.name].addArrow(arrow)
118+
arrow.updatePath()
113119
self.addItem(arrow)
114120

115121
# And finally the outputs
@@ -132,6 +138,9 @@ def paintModel(self, model):
132138
outputItems[key] = item
133139
arrow = ModelerArrowItem(self.algItems[alg.name], idx, item,
134140
-1)
141+
self.algItems[alg.name].addArrow(arrow)
142+
item.addArrow(arrow)
143+
arrow.updatePath()
135144
self.addItem(arrow)
136145
idx += 1
137146
else:

0 commit comments

Comments
 (0)
Please sign in to comment.