class FlowChartView(QWidget): """ Flowchart view """ def __init__(self, parent): """ Constructs FlowChartView widget @param parent: @type parent: """ QWidget.__init__(self, parent) self.steps = [] self.timestamps = [] self.arrows = [] self.createWidget() def createWidget(self): """ Create the widget """ self.diagramScene = QGraphicsScene(self) self.view = QGraphicsView(self.diagramScene) self.view.setRenderHint(QPainter.Antialiasing) # set the main layout layout = QVBoxLayout() self.logEdit = QTextEdit() self.logEdit.setReadOnly(True) hSplitter2 = QSplitter(self) hSplitter2.setOrientation(Qt.Vertical) hSplitter2.addWidget(self.view) hSplitter2.addWidget(self.logEdit) hSplitter2.setStretchFactor(0, 1) layout.addWidget(hSplitter2) self.setLayout(layout) def reset(self): """ Clear all """ #self.diagramScene.clear() for stp in self.steps: self.diagramScene.removeItem(stp) for stp in self.arrows: self.diagramScene.removeItem(stp) for stamp in self.timestamps: self.diagramScene.removeItem(stamp) self.diagramScene.clear() self.diagramScene.update() self.view.resetCachedContent() self.steps = [] self.arrows = [] self.timestamps = [] self.logEdit.setText("") def addStep(self, text, color="#A5A2A5", width=400, height=40, data=None, textBold=False, textItalic=False, timestamp="00:00:00"): """ Add step """ # take the last one if len(self.steps): latestBlock = self.steps[-1:][0] else: latestBlock = None newBlock = BlockItem(self, text, blockColor=color, width=width, height=height, data=data, bold=textBold, italic=textItalic) if width == 100: newBlock.setPos(400 / 2 - 100 / 2, len(self.steps) * 80) elif width == 300: newBlock.setPos(400 / 2 - 300 / 2, len(self.steps) * 80) else: newBlock.setPos(0, len(self.steps) * 80) self.steps.append(newBlock) self.diagramScene.addItem(newBlock) newTimestampBlock = TimestampItem(self, timestamp) newTimestampBlock.setPos(-200, len(self.timestamps) * 80) self.timestamps.append(newTimestampBlock) self.diagramScene.addItem(newTimestampBlock) if latestBlock is not None: newArrow = LineItem(latestBlock, newBlock) self.diagramScene.addItem(newArrow) self.arrows.append(newArrow) if QtHelper.str2bool(Settings.instance().readValue( key='TestRun/auto-scrolling-graph')): self.view.centerOn(newBlock) return newBlock
def center_view_on_frame(self, gv: QGraphicsView, frame_uuid: UUID): item = self._frame_items.get(frame_uuid) if item is not None: gv.centerOn(item)