コード例 #1
0
class DownloadOption(QWidget):
    """ A Widget with download/update/remove options.
    """

    download_clicked = Signal()
    remove_clicked = Signal()

    def __init__(self, state=AVAILABLE, parent=None):
        QWidget.__init__(self, parent)
        layout = QHBoxLayout()
        layout.setSpacing(1)
        layout.setContentsMargins(1, 1, 1, 1)

        self.checkButton = QCheckBox()

        layout.addWidget(self.checkButton)
        self.setLayout(layout)

        self.setMinimumHeight(20)
        self.setMaximumHeight(20)

        self._state = state
        self._update()

    @property
    def state(self):
        return self._state

    @state.setter
    def state(self, state):
        self._state = state
        self._update()

    def _update(self):
        self.checkButton.setDisabled(False)

        if self.state == AVAILABLE:
            self.checkButton.setChecked(False)
        elif self.state == CURRENT:
            self.checkButton.setChecked(True)
        elif self.state == OUTDATED:
            self.checkButton.setChecked(True)
        elif self.state == DEPRECATED:
            self.checkButton.setChecked(True)
        elif self.state == USER_FILE:
            self.checkButton.setChecked(False)
            self.checkButton.setDisabled(True)
        else:
            raise ValueError("Invalid state %r" % self.state)

        try:
            self.checkButton.clicked.disconnect(
            )  # Remove old signals if they exist
        except Exception:
            pass

        if not self.checkButton.isChecked(
        ):  # Switch signals if the file is present or not
            self.checkButton.clicked.connect(self.download_clicked)
        else:
            self.checkButton.clicked.connect(self.remove_clicked)