From 865f0c0adccfef5e32f3d452cd1ee3b2a6988ab3 Mon Sep 17 00:00:00 2001 From: Maxime Perrotin Date: Fri, 21 Nov 2014 15:43:59 +0100 Subject: [PATCH] Improve support for condition boxes --- .../basicmscgraph/mscGraphBasicMSCScene.py | 11 +++++----- .../basicmscgraph/mscGraphCondition.py | 22 ++++++++----------- mscgraphics/basicmscgraph/mscGraphMessage.py | 5 ----- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/mscgraphics/basicmscgraph/mscGraphBasicMSCScene.py b/mscgraphics/basicmscgraph/mscGraphBasicMSCScene.py index 8f36a1e..fc657d0 100644 --- a/mscgraphics/basicmscgraph/mscGraphBasicMSCScene.py +++ b/mscgraphics/basicmscgraph/mscGraphBasicMSCScene.py @@ -228,14 +228,15 @@ class MscGraphBasicMSCScene(QGraphicsScene): self.removeItem(comment) #--------------- Conditions - def addCondition(self, instance, pos=None, label=''): + def addCondition(self, instance, y=None, label=''): u""" - Add new "condition" to the scene and position it in "pos" if any + Add new "condition" to the scene and position it in y pos if any """ - condition = MscGraphCondition(label=label, parent=self.bmsc()) + condition = MscGraphCondition(label=label, y=y, + parent=self.bmsc(), instance=instance) instance.addEvent(condition) - if pos is not None: - condition.setPos(pos) + if y is not None: + condition.setY(instance.mapFromScene(0, y).y()) condition.itemSelected.connect(self.itemSelected) self.itemInserted.emit(condition) return condition diff --git a/mscgraphics/basicmscgraph/mscGraphCondition.py b/mscgraphics/basicmscgraph/mscGraphCondition.py index eb8ffca..9000f2c 100644 --- a/mscgraphics/basicmscgraph/mscGraphCondition.py +++ b/mscgraphics/basicmscgraph/mscGraphCondition.py @@ -41,12 +41,10 @@ class MscGraphCondition(MscGraphItem): DefaultWidth = 150 DefaultHeight = 30 - def __init__(self, data=None, y=0, label=None, parent=None): - u""" - Initize - """ + def __init__(self, data=None, y=0, label=None, parent=None, instance=None): super(MscGraphCondition, self).__init__(parent) self.setFlag(super(MscGraphCondition, self).ItemIsMovable, True) + self.instance = instance if label is None: label = "Condition" @@ -63,6 +61,7 @@ class MscGraphCondition(MscGraphItem): # Create Path self.createPath() + self.setPos(self.pos().x(), y or 0) #************************************************************************** # Data Functions @@ -100,30 +99,27 @@ class MscGraphCondition(MscGraphItem): def updateLabelPosition(self): self.label.setCenterPos(QPointF(0, 15)) - #self.label.setPos(self.x() + 10, - # -self.label.boundingRect().height() / 2) #************************************************************************** # Item Change #************************************************************************** def limitsOfItem(self, value): u""" Check the limits of the event area of parent """ - parent = self.parentItem() + parent = self.instance if parent == None: return value upperY = parent.upperLimit().y() - bottomY = parent.bottomLimit().y() + #bottomY = parent.bottomLimit().y() valueY = value.y() if valueY < upperY: valueY = upperY - - value.setX(self.pos().x()) - value.setY(valueY) - return value + new_pos = QPointF(self.pos().x(), valueY) + return new_pos def itemChange(self, change, value): + ''' On position change, check that item stays in an allowed area ''' if (change == super(MscGraphCondition, self).ItemPositionChange): value = self.limitsOfItem(value) @@ -131,7 +127,7 @@ class MscGraphCondition(MscGraphItem): self.mscData().setAbsPos(self.mapToScene(0, 0).y()) self.yHasChanged.emit(self) - return MscGraphItem.itemChange(self, change, value) + return value #MscGraphItem.itemChange(self, change, value) #************************************************************************** # Paint Functions diff --git a/mscgraphics/basicmscgraph/mscGraphMessage.py b/mscgraphics/basicmscgraph/mscGraphMessage.py index fc6a0a8..96e2a7c 100644 --- a/mscgraphics/basicmscgraph/mscGraphMessage.py +++ b/mscgraphics/basicmscgraph/mscGraphMessage.py @@ -206,11 +206,6 @@ class MscGraphMessage(MscGraphItem): if value.y() < recvStart.y(): value.setY(recvStart.y()) -# # Message are not below the instances -# if value.y() > sendEnd.y(): -# value.setY(sendEnd.y()) -# if value.y() > recvEnd.y(): -# value.setY(recvEnd.y()) value.setX(self.pos().x()) return value -- GitLab