Beispiel #1
0
    def createGUI(self):
        colorEditorFactory = QItemEditorFactory()
        colorEditorFactory.registerEditor(QVariant.Color, ColorListItemEditorCreator())
        colorEditorDelegate = QStyledItemDelegate(self)
        colorEditorDelegate.setItemEditorFactory(colorEditorFactory)

        figureEditorFactory = QItemEditorFactory()
        figureEditorFactory.registerEditor(QVariant.String, FigureListItemEditorCreator())
        figureEditorDelegate = QStyledItemDelegate(self)
        figureEditorDelegate.setItemEditorFactory(figureEditorFactory)

        self.regionTableWidget.cellChanged.connect(self.regionTableWidgetCellChanged)
        self.regionTableWidget.setColumnCount(3)
        self.regionTableWidget.setItemDelegateForColumn(1, colorEditorDelegate)
        self.regionTableWidget.setItemDelegateForColumn(2, figureEditorDelegate)

        self.regionTableWidget.setHorizontalHeaderLabels(["Name", "Color", "Type"])
        self.regionTableWidget.verticalHeader().setVisible(False)
        self.regionTableWidget.resize(150, 50)


        qApp = QtWidgets.qApp
        self.upRegionButton.setIcon(qApp.style().standardIcon(QStyle.SP_ArrowUp))
        self.downRegionButton.setIcon(qApp.style().standardIcon(QStyle.SP_ArrowDown))

        self.addRegionButton.clicked.connect(self.addRegionButtonClicked)
        self.removeRegionButton.clicked.connect(self.removeRegionButtonClicked)
        self.upRegionButton.clicked.connect(self.upRegionButtonClicked)
        self.downRegionButton.clicked.connect(self.downRegionButtonClicked)

        self.radiusSpinBox.valueChanged.connect(self.radiusSpinBoxValueChanged)
Beispiel #2
0
    def createAllView(self):
        styledItemDelegate = QStyledItemDelegate()
        styledItemDelegate.setItemEditorFactory(ItemEditorFactory())
        self.setItemDelegate(styledItemDelegate)

        # create the view
        self.setSelectionMode(QAbstractItemView.SingleSelection)
        #self.setSelectionBehavior(QAbstractItemView.SelectRows)

        # set the table model
        self.tablemodel = MyTableModel(self)
        self.setModel(self.tablemodel)
        self.clicked.connect(self.showSelection)
        #self.dataChanged.connect(self.selection_changed)

        # set the minimum size
        self.setMinimumSize(100, 100)

        # set horizontal header properties
        hh = self.horizontalHeader()
        hh.setMinimumSectionSize(75)
        hh.setStretchLastSection(True)
        hh.setSortIndicator(1, Qt.AscendingOrder)

        vh = self.verticalHeader()
        vh.setVisible(False)

        # set column width to fit contents
        self.resizeColumnsToContents()

        # set row height
        self.resizeRowsToContents()

        # enable sorting
        self.setSortingEnabled(True)
Beispiel #3
0
    def createGUI(self):
        colorEditorFactory = QItemEditorFactory()
        colorListItemEditorCreator = ColorListItemEditorCreator()
        colorListItemEditorCreator.setActivatedSlot(self.comboBoxActivated)
        colorEditorFactory.registerEditor(QVariant.Color,
                                          colorListItemEditorCreator)
        colorEditorDelegate = QStyledItemDelegate(self)
        colorEditorDelegate.setItemEditorFactory(colorEditorFactory)

        figureEditorFactory = QItemEditorFactory()
        figureListItemEditorCreator = FigureListItemEditorCreator()
        figureListItemEditorCreator.setActivatedSlot(self.comboBoxActivated)
        figureEditorFactory.registerEditor(QVariant.String,
                                           figureListItemEditorCreator)
        figureEditorDelegate = QStyledItemDelegate(self)
        figureEditorDelegate.setItemEditorFactory(figureEditorFactory)

        self.regionTableWidget.cellChanged.connect(
            self.regionTableWidgetCellChanged)
        self.regionTableWidget.setColumnCount(3)
        self.regionTableWidget.setItemDelegateForColumn(1, colorEditorDelegate)
        self.regionTableWidget.setItemDelegateForColumn(
            2, figureEditorDelegate)

        self.regionTableWidget.setHorizontalHeaderLabels(
            ["Name", "Color", "Type"])
        self.regionTableWidget.verticalHeader().setVisible(False)
        self.regionTableWidget.resize(150, 50)

        qApp = QtWidgets.qApp
        self.upRegionButton.setIcon(qApp.style().standardIcon(
            QStyle.SP_ArrowUp))
        self.downRegionButton.setIcon(qApp.style().standardIcon(
            QStyle.SP_ArrowDown))

        self.addRegionButton.clicked.connect(self.addRegionButtonClicked)
        self.removeRegionButton.clicked.connect(self.removeRegionButtonClicked)
        self.upRegionButton.clicked.connect(self.upRegionButtonClicked)
        self.downRegionButton.clicked.connect(self.downRegionButtonClicked)

        self.radiusSpinBox.valueChanged.connect(self.radiusSpinBoxValueChanged)

        self.actionCoordinates.triggered.connect(self.setCoordinatesVisible)
        self.actionPoints.triggered.connect(self.setPointsVisible)
        self.actionLines.triggered.connect(self.setLinesVisible)
        self.actionRegions.triggered.connect(self.setRegionsVisible)
Beispiel #4
0
class RecipientsEditor(QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setRowCount(1)
        self.setColumnCount(2)

        self.verticalHeader().hide()
        self.horizontalHeader().hide()
        self.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents)

        self.tdelegate = QStyledItemDelegate()
        self.tdelegate.setItemEditorFactory(TypeFactory(self))
        self.setItemDelegateForColumn(0, self.tdelegate)

        self.edelegate = QStyledItemDelegate()
        self.edelegate.setItemEditorFactory(EditorFactory(self))
        self.setItemDelegateForColumn(1, self.edelegate)

        self.itemChanged.connect(self._updateColumnCount)

        self.setItem(0, 0, QTableWidgetItem('To'))

        self.msg = None

    def set_message(self, msg):
        self.msg = msg

    @Slot(QTableWidgetItem)
    def _updateColumnCount(self, qitem):
        if qitem.column() == 0:
            return

        if not qitem.text().strip():
            if self.rowCount() > 1:
                self.removeRow(qitem.row())
        elif qitem.row() + 1 == self.rowCount():
            cur = self.rowCount()
            self.setRowCount(cur + 1)
            self.setItem(cur, 0, QTableWidgetItem('To'))

    def sizeHint(self):
        return QSize(0, self.sizeHintForRow(0))

    def set_recipients(self, *, to=None, cc=None, bcc=None):
        by_type = {
            'To': to or (),
            'Cc': cc or (),
            'Bcc': bcc or (),
        }

        self.setRowCount(sum(len(addrs) for addrs in by_type.values()) + 1)
        row = 0
        for type_, pairs in by_type.items():
            for name, addr in pairs:
                self.setItem(row, 0, QTableWidgetItem(type_))
                if name:
                    self.setItem(row, 1, QTableWidgetItem(f'{name} <{addr}>'))
                else:
                    self.setItem(row, 1, QTableWidgetItem(addr))
                row += 1

    def get_recipients(self):
        by_type = {
            'To': [],
            'Cc': [],
            'Bcc': [],
        }

        for row in range(self.rowCount() -
                         1):  # last line is supposed to be empty
            text = self.item(row, 1).text()
            mtc = re.fullmatch(r'(.*)\s*<([^>]+)>\s*', text)
            if mtc:
                name = mtc[1].strip()
                addr = mtc[2]
            else:
                name = ''
                addr = text

            by_type[self.item(row, 0).text()].append((name, addr))

        return by_type

    editStarted = Signal(QLineEdit)