def addStep(self, step): column = 0 parentItem = self.findParentItem(step._category) if not parentItem: parentItem = QtGui.QTreeWidgetItem(self) parentItem.setText(column, step._category) parentItem.setTextAlignment(column, QtCore.Qt.AlignCenter) font = parentItem.font(column) font.setPointSize(12) font.setWeight(QtGui.QFont.Bold) parentItem.setFont(column, font) if not parentItem.isExpanded(): parentItem.setExpanded(True) stepItem = QtGui.QTreeWidgetItem(parentItem) stepItem.setText(column, step.getName()) if step._icon: stepItem.setIcon(column, QtGui.QIcon(QtGui.QPixmap.fromImage(step._icon))) else: stepItem.setIcon(column, QtGui.QIcon(QtGui.QPixmap.fromImage(createDefaultImageIcon(step.getName())))) stepItem.setData(column, QtCore.Qt.UserRole, step) stepItem.setFlags(QtCore.Qt.ItemIsEnabled)
def _updateImage(self): image_file = self._ui.iconLineEdit.text() if image_file: image = QtGui.QPixmap(image_file) if image: self._ui.iconPictureLabel.setPixmap(image.scaled(64, 64, aspectRatioMode=QtCore.Qt.KeepAspectRatio, transformMode=QtCore.Qt.FastTransformation)) else: image = createDefaultImageIcon(self._ui.nameLineEdit.text()) self._ui.iconPictureLabel.setPixmap(QtGui.QPixmap.fromImage(image).scaled(64, 64, aspectRatioMode=QtCore.Qt.KeepAspectRatio, transformMode=QtCore.Qt.FastTransformation)) self.completeChanged.emit()
def mousePressEvent(self, event): item = self.itemAt(event.pos()) if not item: return None if self.indexOfTopLevelItem(item) >= 0: # Item is a top level item and it doesn't have drag and drop abilities return QtGui.QTreeWidget.mousePressEvent(self, event) itemData = QtCore.QByteArray() dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.WriteOnly) step = item.data(0, QtCore.Qt.UserRole) if step._icon: pixmap = QtGui.QPixmap(step._icon) else: icon = createDefaultImageIcon(step.getName()) pixmap = QtGui.QPixmap() pixmap.convertFromImage(icon) pixmap = pixmap.scaled(64, 64, aspectRatioMode=QtCore.Qt.KeepAspectRatio, transformMode=QtCore.Qt.FastTransformation) hotspot = QtCore.QPoint(pixmap.width() / 2, pixmap.height() / 2) name = step.getName() # bytearray(step.getName(), sys.stdout.encoding) dataStream.writeUInt32(len(name)) dataStream.writeRawData(name) dataStream << hotspot mimeData = QtCore.QMimeData() mimeData.setData('image/x-workflow-step', itemData) drag = QtGui.QDrag(self) drag.setMimeData(mimeData) drag.setHotSpot(hotspot) drag.setPixmap(pixmap) drag.exec_(QtCore.Qt.MoveAction) return QtGui.QTreeWidget.mousePressEvent(self, event)
def __init__(self, metastep): Item.__init__(self) self._metastep = metastep icon = self._metastep._step._icon if not icon: icon = QtGui.QImage(createDefaultImageIcon(self._metastep._step.getName())) self._pixmap = QtGui.QPixmap.fromImage(icon).scaled(self.Size, self.Size, aspectRatioMode=QtCore.Qt.KeepAspectRatio, transformMode=QtCore.Qt.FastTransformation) self.setToolTip(metastep._step._name) self.setFlag(QtGui.QGraphicsItem.ItemIsMovable) self.setFlag(QtGui.QGraphicsItem.ItemSendsGeometryChanges) self.setCacheMode(self.DeviceCoordinateCache) self.setZValue(-1) self._contextMenu = QtGui.QMenu() configureAction = QtGui.QAction('Configure', self._contextMenu) configureAction.triggered.connect(self.configureMe) annotateAction = QtGui.QAction('Annotate', self._contextMenu) annotateAction.setEnabled(False) annotateAction.triggered.connect(self.annotateMe) deleteAction = QtGui.QAction('Delete', self._contextMenu) deleteAction.triggered.connect(self._removeMe) self._contextMenu.addAction(configureAction) self._contextMenu.addAction(annotateAction) self._contextMenu.addSeparator() self._contextMenu.addAction(deleteAction) self._step_port_items = [] # Collect all ports that provide or use from the step uses_ports = [port for port in self._metastep._step._ports if port.hasUses()] provides_ports = [port for port in self._metastep._step._ports if port.hasProvides()] uses_count = 0 uses_total = len(uses_ports) provides_count = 0 provides_total = len(provides_ports) for port in self._metastep._step._ports: port_item = StepPort(port, self) w = port_item.width() h = port_item.height() if port in uses_ports: port_total = uses_total index = uses_count x_pos = -3 * w / 4 uses_count += 1 pred = 'http://physiomeproject.org/workflow/1.0/rdf-schema#uses' tooltip_stub = 'uses: ' else: # port in provides_ports: port_total = provides_total index = provides_count x_pos = self.Size - w / 4 provides_count += 1 pred = 'http://physiomeproject.org/workflow/1.0/rdf-schema#provides' tooltip_stub = 'provides: ' triples = port.getTriplesForPred(pred) triple_objects = [triple[2] for triple in triples] alpha = h / 4.0 # Controls the spacing between the ports y_pos = self.Size / 2.0 - (port_total * h + (port_total - 1) * alpha) / 2.0 + (h + alpha) * index port_item.moveBy(x_pos, y_pos) port_item.setToolTip(tooltip_stub + ', '.join(triple_objects)) self._step_port_items.append(port_item) self._configure_item = ConfigureIcon(self) self._configure_item.moveBy(40, 40) self.updateConfigureIcon() self._modified_item = MercurialIcon(self) self._modified_item.moveBy(5, 40) self.updateMercurialIcon()