コード例 #1
0
class PaletteSelectorLayout(QGroupBox):
    """
    Qt Layout class for a palette
    """
    def __init__(self, fgIndex, bgIndex, palette, informFunction, parent=None):
        super(PaletteSelectorLayout, self).__init__("", parent)

        if ZXAttribute.paletteCount() != 2:
            raise Exception(
                "The palette selector is current designed for 2 palettes only")

        self._bright = palette
        self._fgIndex = fgIndex
        self._bgIndex = bgIndex
        self._informFunction = informFunction

        vert_layout = QVBoxLayout()
        self.setLayout(vert_layout)

        vert_layout.addWidget(QLabel("Palette Selector:"))
        vert_layout.addSpacing(20)

        # Add check box to select brightness
        bright_select = QCheckBox("Bright Enabled")
        vert_layout.addWidget(bright_select)
        if palette == 1:
            bright_select.setChecked(True)
        bright_select.clicked.connect(self._brightSelect)

        vert_layout.addSpacing(10)

        # Foreground color checkboxes
        self._fg_group = QButtonGroup()
        self._fg_group.setExclusive(True)
        self._createLayout(vert_layout, "Foreground color:", self._fg_group,
                           self._fgIndexSelect, fgIndex)

        vert_layout.addSpacing(10)

        # Background color checkboxes
        self._bg_group = QButtonGroup()
        self._bg_group.setExclusive(True)
        self._createLayout(vert_layout, "Background color:", self._bg_group,
                           self._bgIndexSelect, bgIndex)

    def _createLayout(self, vert_layout, labelText, buttonGroup, clickSlot,
                      setIndex):
        horiz_layout = QHBoxLayout()
        vert_layout.addLayout(horiz_layout)

        horiz_layout.addWidget(QLabel(labelText))

        for index in range(0, ZXAttribute.paletteSize()):
            button = QCheckBox()
            color = QColor(*ZXAttribute.getPaletteColor(index, 0))
            button.setStyleSheet("background-color: {}".format(color.name()))
            button.setText(ZXAttribute.getPaletteName(index, 0))

            if index == setIndex:
                button.setChecked(True)

            buttonGroup.addButton(button, index)
            horiz_layout.addWidget(button)

            button.clicked.connect(clickSlot)

    @Slot()
    def _brightSelect(self, checked):
        if not checked:
            self._bright = 0
        else:
            self._bright = 1
        self._informFunction(self.fgIndex, self.bgIndex, self.palette)

    @Slot()
    def _fgIndexSelect(self, checked):
        self._fgIndex = self._fg_group.id(self.sender())
        self._informFunction(self.fgIndex, self.bgIndex, self.palette)

    @Slot()
    def _bgIndexSelect(self, checked):
        self._bgIndex = self._bg_group.id(self.sender())
        self._informFunction(self.fgIndex, self.bgIndex, self.palette)

    @property
    def palette(self):
        return self._bright

    @property
    def fgIndex(self):
        return self._fgIndex

    @property
    def bgIndex(self):
        return self._bgIndex
コード例 #2
0
ファイル: multicheck.py プロジェクト: xuerenjie124/sleap
class MultiCheckWidget(QGroupBox):
    """Qt Widget to show multiple checkboxes for a sequence of numbers.

    Args:
        count: The number of checkboxes to show.
        title: Display title for group of checkboxes.
        selected: List of checkbox numbers to initially check.
        default: Whether to default boxes as checked.
    """
    def __init__(self,
                 *args,
                 count: int,
                 title: Optional[str] = "",
                 selected: Optional[List] = None,
                 default: Optional[bool] = False,
                 **kwargs):
        super(MultiCheckWidget, self).__init__(*args, **kwargs)

        # QButtonGroup is the logical container
        # it allows us to get list of checked boxes more easily
        self.check_group = QButtonGroup()
        self.check_group.setExclusive(False)  # more than one can be checked

        if title != "":
            self.setTitle(title)
            self.setFlat(False)
        else:
            self.setFlat(True)

        if selected is None:
            selected = list(range(count)) if default else []

        check_layout = QGridLayout()
        self.setLayout(check_layout)
        for i in range(count):
            check = QCheckBox("%d" % (i))
            # call signal/slot on self when one of the checkboxes is changed
            check.stateChanged.connect(lambda e: self.selectionChanged.emit())
            self.check_group.addButton(check, i)
            check_layout.addWidget(check, i // 8, i % 8)
        self.setSelected(selected)

    """
    selectionChanged signal sent when a checkbox gets a stateChanged signal
    """
    selectionChanged = Signal()

    def getSelected(self) -> list:
        """Method to get list of the checked checkboxes.

        Returns:
            list of checked checkboxes
        """
        selected = []
        for check_button in self.check_group.buttons():
            if check_button.isChecked():
                selected.append(self.check_group.id(check_button))
        return selected

    def setSelected(self, selected: list):
        """Method to set some checkboxes as checked.

        Args:
            selected: List of checkboxes to check.

        Returns:
            None
        """
        for check_button in self.check_group.buttons():
            if self.check_group.id(check_button) in selected:
                check_button.setChecked(True)
            else:
                check_button.setChecked(False)

    def boundingRect(self) -> QRectF:
        """Method required by Qt.
        """
        return QRectF()

    def paint(self, painter, option, widget=None):
        """Method required by Qt.
        """
        pass
コード例 #3
0
class PreferencesDocumentPresetsPage(QWidget):

    preferencesChanged = Signal()

    def __init__(self, parent=None):
        super().__init__(parent)

        # Title
        title = QLabel(
            self.tr("<strong style=\"font-size:large;\">{0}</strong>").format(
                self.title()))

        #
        # Content: Header Labels

        rdbDefaultHeaderLabelHorizontalLetters = QRadioButton(
            self.tr("Letters"))
        rdbDefaultHeaderLabelHorizontalLetters.setToolTip(
            self.
            tr("Capital letters as default horizontal header labels of new documents"
               ))

        rdbDefaultHeaderLabelHorizontalNumbers = QRadioButton(
            self.tr("Numbers"))
        rdbDefaultHeaderLabelHorizontalNumbers.setToolTip(
            self.
            tr("Decimal numbers as default horizontal header labels of new documents"
               ))

        self._grpDefaultHeaderLabelHorizontal = QButtonGroup(self)
        self._grpDefaultHeaderLabelHorizontal.addButton(
            rdbDefaultHeaderLabelHorizontalLetters,
            Preferences.HeaderLabel.Letter.value)
        self._grpDefaultHeaderLabelHorizontal.addButton(
            rdbDefaultHeaderLabelHorizontalNumbers,
            Preferences.HeaderLabel.Decimal.value)
        self._grpDefaultHeaderLabelHorizontal.buttonClicked.connect(
            self._onPreferencesChanged)

        defaultHeaderLabelHorizontalBox = QHBoxLayout()
        defaultHeaderLabelHorizontalBox.addWidget(
            rdbDefaultHeaderLabelHorizontalLetters)
        defaultHeaderLabelHorizontalBox.addWidget(
            rdbDefaultHeaderLabelHorizontalNumbers)

        rdbDefaultHeaderLabelVerticalLetters = QRadioButton(self.tr("Letters"))
        rdbDefaultHeaderLabelVerticalLetters.setToolTip(
            self.
            tr("Capital letters as default vertical header labels of new documents"
               ))

        rdbDefaultHeaderLabelVerticalNumbers = QRadioButton(self.tr("Numbers"))
        rdbDefaultHeaderLabelVerticalNumbers.setToolTip(
            self.
            tr("Decimal numbers as default vertical header labels of new documents"
               ))

        self._grpDefaultHeaderLabelVertical = QButtonGroup()
        self._grpDefaultHeaderLabelVertical.addButton(
            rdbDefaultHeaderLabelVerticalLetters,
            Preferences.HeaderLabel.Letter.value)
        self._grpDefaultHeaderLabelVertical.addButton(
            rdbDefaultHeaderLabelVerticalNumbers,
            Preferences.HeaderLabel.Decimal.value)
        self._grpDefaultHeaderLabelVertical.buttonClicked.connect(
            self._onPreferencesChanged)

        defaultHeaderLabelVerticalBox = QHBoxLayout()
        defaultHeaderLabelVerticalBox.addWidget(
            rdbDefaultHeaderLabelVerticalLetters)
        defaultHeaderLabelVerticalBox.addWidget(
            rdbDefaultHeaderLabelVerticalNumbers)

        defaultHeaderLabelLayout = QFormLayout()
        defaultHeaderLabelLayout.addRow(
            self.tr("Labels of the horizontal header"),
            defaultHeaderLabelHorizontalBox)
        defaultHeaderLabelLayout.addRow(
            self.tr("Labels of the vertical header"),
            defaultHeaderLabelVerticalBox)

        defaultHeaderLabelGroup = QGroupBox(self.tr("Header Labels"))
        defaultHeaderLabelGroup.setLayout(defaultHeaderLabelLayout)

        #
        # Content: Cell Counts

        self._spbDefaultCellCountColumn = QSpinBox()
        self._spbDefaultCellCountColumn.setRange(1, 1000)
        self._spbDefaultCellCountColumn.setToolTip(
            self.tr("Default number of columns of new documents"))
        self._spbDefaultCellCountColumn.valueChanged.connect(
            self._onPreferencesChanged)

        self._spbDefaultCellCountRow = QSpinBox()
        self._spbDefaultCellCountRow.setRange(1, 1000)
        self._spbDefaultCellCountRow.setToolTip(
            self.tr("Default number of rows of new documents"))
        self._spbDefaultCellCountRow.valueChanged.connect(
            self._onPreferencesChanged)

        defaultCellCountLayout = QFormLayout()
        defaultCellCountLayout.addRow(self.tr("Number of columns"),
                                      self._spbDefaultCellCountColumn)
        defaultCellCountLayout.addRow(self.tr("Number of rows"),
                                      self._spbDefaultCellCountRow)

        defaultCellCountGroup = QGroupBox(self.tr("Cell Counts"))
        defaultCellCountGroup.setLayout(defaultCellCountLayout)

        # Main layout
        self._layout = QVBoxLayout(self)
        self._layout.addWidget(title)
        self._layout.addWidget(defaultHeaderLabelGroup)
        self._layout.addWidget(defaultCellCountGroup)
        self._layout.addStretch(1)

    def setZeroMargins(self):

        self._layout.setContentsMargins(0, 0, 0, 0)

    def title(self):

        return self.tr("Document Presets")

    def _onPreferencesChanged(self):

        self.preferencesChanged.emit()

    def setDefaultHeaderLabelHorizontal(self, type):

        if type.value != self._grpDefaultHeaderLabelHorizontal.checkedId():
            self._onPreferencesChanged()

        for button in self._grpDefaultHeaderLabelHorizontal.buttons():
            if self._grpDefaultHeaderLabelHorizontal.id(button) == type.value:
                button.setChecked(True)

    def defaultHeaderLabelHorizontal(self):

        return Preferences.HeaderLabel(
            self._grpDefaultHeaderLabelHorizontal.checkedId())

    def setDefaultHeaderLabelVertical(self, type):

        if type.value != self._grpDefaultHeaderLabelVertical.checkedId():
            self._onPreferencesChanged()

        for button in self._grpDefaultHeaderLabelVertical.buttons():
            if self._grpDefaultHeaderLabelVertical.id(button) == type.value:
                button.setChecked(True)

    def defaultHeaderLabelVertical(self):

        return Preferences.HeaderLabel(
            self._grpDefaultHeaderLabelVertical.checkedId())

    def setDefaultCellCountColumn(self, val):

        self._spbDefaultCellCountColumn.setValue(val)

    def defaultCellCountColumn(self):

        return self._spbDefaultCellCountColumn.value()

    def setDefaultCellCountRow(self, val):

        self._spbDefaultCellCountRow.setValue(val)

    def defaultCellCountRow(self):

        return self._spbDefaultCellCountRow.value()