Ejemplo n.º 1
0
class ControlToolButton(ControlBase):
    def __init__(self, *args, **kwargs):
        self._checkable = kwargs.get('checkable', False)
        self._maxheight = kwargs.get('maxheight', None)
        self._maxwidth = kwargs.get('maxwidth', None)
        super(ControlToolButton, self).__init__(*args, **kwargs)

        default = kwargs.get('default', None)
        if default: self.value = default

        icon = kwargs.get('icon', None)
        if icon: self.icon = icon

    def init_form(self):
        self._form = QToolButton()
        if self._maxwidth: self._form.setMaximumWidth(self._maxwidth)
        if self._maxheight: self._form.setMaximumHeight(self._maxheight)
        self._form.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self._form.setCheckable(self._checkable)
        self.label = self._label
        self._form.setToolTip(self.help)

    def click(self):
        self._form.click()

    def load_form(self, data, path=None):
        pass

    def save_form(self, data, path=None):
        pass

    ##########################################################################

    @property
    def label(self):
        return ControlBase.label.fget(self)

    @label.setter
    def label(self, value):
        ControlBase.label.fset(self, value)
        if value is None:
            self._form.setToolButtonStyle(Qt.ToolButtonIconOnly)
        else:
            self._form.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
            self._form.setText(self._label)

    @property
    def icon(self):
        return self._form.icon()

    @icon.setter
    def icon(self, value):
        if isinstance(value, (str, bytes)):
            self._form.setIcon(QIcon(value))
        else:
            self._form.setIcon(value)

    ##########################################################################

    @property
    def value(self):
        return None

    @value.setter
    def value(self, value):
        try:
            self._form.clicked.disconnect()  # ignore previous signals if any
        except TypeError as err:
            # http://stackoverflow.com/questions/21586643/pyqt-widget-connect-and-disconnect
            pass
        self._form.clicked[bool].connect(value)

    @property
    def checked(self):
        return self._form.isChecked()

    @checked.setter
    def checked(self, value):
        self._form.setChecked(value)