def createEditor(self, parent, option, model_index):
     assert isinstance(self.parent(), HierarchicalChecklistView)
     checklist = self.parent().model().get_checklist_from_model_index(model_index)
     checkbox = QCheckBox(checklist.name, parent=parent)
     checkbox.setTristate(True)
     checkbox.stateChanged.connect(partial(self.parent().model().handle_checkstate, model_index))
     return checkbox
class BoolConfigControl(ConfigControl):
    def __init__(self, config_item):
        ConfigControl.__init__(self, config_item)

        self._init_ui()
        self.update_from_config()

    def _init_ui(self):
        lbl_bool = QLabel(self._config_item.tag())
        lbl_bool.setFixedWidth(self.LABEL_WIDTH)

        self._chk_box = QCheckBox()
        self._chk_box.setTristate(False)

        hbox = QHBoxLayout()
        hbox.setContentsMargins(0, 0, 0, 0)
        hbox.addWidget(lbl_bool)
        hbox.addWidget(self._chk_box)
        hbox.addStretch()

        self.setLayout(hbox)

    def update_from_config(self):
        state = 2 if self._config_item.value() == True else 0
        self._chk_box.setCheckState(state)

    def save_to_config(self):
        value = True if self._chk_box.checkState() == 2 else False
        self._config_item.set(value)
Beispiel #3
0
class BoolConfigControl(ConfigControl):
    def __init__(self, config_item):
        ConfigControl.__init__(self, config_item)

        self._init_ui()
        self.update_from_config()

    def _init_ui(self):
        lbl_bool = QLabel(self._config_item.tag())
        lbl_bool.setFixedWidth(self.LABEL_WIDTH)

        self._chk_box = QCheckBox()
        self._chk_box.setTristate(False)

        hbox = QHBoxLayout()
        hbox.setContentsMargins(0, 0, 0, 0)
        hbox.addWidget(lbl_bool)
        hbox.addWidget(self._chk_box)
        hbox.addStretch()

        self.setLayout(hbox)

    def update_from_config(self):
        state = 2 if self._config_item.value() == True else 0
        self._chk_box.setCheckState(state)

    def save_to_config(self):
        value = True if self._chk_box.checkState() == 2 else False
        self._config_item.set(value)
Beispiel #4
0
 def add_checkbox(self, layout, propriete, titre):
     objets = [objet for objet in self.objets if objet.style(propriete) is not None]
     if objets:
         cb = QCheckBox(titre)
         cb.setTristate(True)
         layout.addWidget(cb)
         verifies = [objet.style(propriete) is True for objet in objets]
         if not any(verifies):
             etat = Qt.Unchecked
         elif all(verifies):
             etat = Qt.Checked
         else:
             etat = Qt.PartiallyChecked
         cb.setCheckState(etat)
         cb.stateChanged.connect(partial(self.checked, propriete))
         cb.stateChanged.connect(partial(cb.setTristate, False))
Beispiel #5
0
class CheckBox(HelpedWidget):
    """A checbox widget for booleans. The data structure expected and sent to the getter and setter is a boolean."""
    def __init__(self,
                 model,
                 check_label="Do this",
                 help_link="",
                 show_label=True,
                 alt_label=None,
                 default_check_state=True):
        """Construct a checkbox widget for booleans"""
        HelpedWidget.__init__(self, check_label, help_link)

        if show_label:
            if alt_label != None:
                self.check = QCheckBox(alt_label, self)
            else:
                self.check = QCheckBox(check_label, self)
        else:
            self.check = QCheckBox(self)

        self.check.setTristate(False)
        self.check.setChecked(default_check_state)
        self.connect(self.check, QtCore.SIGNAL('stateChanged(int)'),
                     self.contentsChanged)

        if not show_label:
            layout = QHBoxLayout()
            layout.addWidget(self.check)
            layout.setAlignment(Qt.AlignCenter)
            layout.setContentsMargins(0, 0, 0, 0)
            self.addLayout(layout)
        else:
            self.addWidget(self.check)

        assert isinstance(model, BooleanModelMixin)
        self.model = model
        self.model.observable().attach(
            BooleanModelMixin.BOOLEAN_VALUE_CHANGED_EVENT, self.modelChanged)
        self.modelChanged()

    def contentsChanged(self):
        """Called whenever the contents of the checbox changes."""
        self.model.setTrue(self.check.isChecked())

    def modelChanged(self):
        """Retrives data from the model and sets the state of the checkbox."""
        self.check.setChecked(self.model.isTrue())
Beispiel #6
0
class CheckBox(HelpedWidget):
    """A checbox widget for booleans. The data structure expected and sent to the getter and setter is a boolean."""

    def __init__(self, model, label="Checkbox", help_link="", show_label=True, alt_label=None, default_check_state=True):
        """Construct a checkbox widget for booleans"""
        HelpedWidget.__init__(self, label, help_link)

        if show_label:
            if alt_label is not None:
                self.check = QCheckBox(alt_label, self)
            else:
                self.check = QCheckBox(label,self)
        else:
            self.check = QCheckBox(self)
            
        self.check.setTristate(False)
        self.check.setChecked(default_check_state)
        self.connect(self.check, QtCore.SIGNAL('stateChanged(int)'), self.contentsChanged)

        if not show_label:
            layout = QHBoxLayout()
            layout.addWidget(self.check)
            layout.setAlignment(Qt.AlignCenter)
            layout.setContentsMargins(0, 0, 0, 0)
            self.addLayout(layout)
        else:
            self.addWidget(self.check)

        assert isinstance(model, BooleanModelMixin)
        self.model = model
        self.model.observable().attach(BooleanModelMixin.BOOLEAN_VALUE_CHANGED_EVENT, self.modelChanged)
        self.modelChanged()


    def contentsChanged(self):
        """Called whenever the contents of the checbox changes."""
        self.model.setState(self.check.isChecked())


    def modelChanged(self):
        """Retrives data from the model and sets the state of the checkbox."""
        self.check.setChecked(self.model.isTrue())
Beispiel #7
0
class ControlForm(QtGui.QDialog):
    def __init__(self, proxy, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setupUi(self)

        self.proxy = proxy
        self.proxy.lights_on_changed.connect(self.object_lights_on_changed)
        self.proxy.door_open_changed.connect(self.object_door_open_changed)
        self.proxy.color_changed.connect(self.object_color_changed)

    def on_lights_on_changed(self, value):
        proxy.lights_on = self.lights.isChecked()

    def on_door_open_changed(self, value):
        proxy.door_open = self.door_open.isChecked()

    def object_lights_on_changed(self, value, old_value, other):
        if value == self.lights.isChecked():
            return
        self.lights.setChecked(value)

    def object_door_open_changed(self, value, old_value, other):
        if value == self.door_open.isChecked():
            return
        self.door_open.setChecked(value)

    def object_color_changed(self, value, old_value, other):
        if value == self.color.text():
            return
        self.color.setText(value)
        self.color.textChanged.emit(value)

    def on_color_text_changed(self, value):
        self.color_box.setStyleSheet("QLabel { background-color: %s }" % value)

    def setupUi(self, parent):
        self.resize(275, 172)
        self.setWindowTitle('House')

        self.layout = QVBoxLayout(parent)
        self.layout.setSizeConstraint(QLayout.SetFixedSize)
        #align = (Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter)

        self.layout1 = QHBoxLayout()
        self.label1 = QLabel()
        self.label1.setMinimumSize(QSize(100, 0))
        self.label1.setText('Lights:')
        self.lights = QCheckBox()
        self.lights.setTristate(False)
        self.layout1.addWidget(self.label1)
        self.layout1.addWidget(self.lights)

        self.layout2 = QHBoxLayout()
        self.label2 = QLabel()
        self.label2.setMinimumSize(QSize(100, 0))
        self.label2.setText('Front door:')
        self.door_open = QCheckBox()
        self.door_open.setTristate(False)
        self.layout2.addWidget(self.label2)
        self.layout2.addWidget(self.door_open)

        self.layout3 = QHBoxLayout()
        self.label3 = QLabel()
        self.label3.setMinimumSize(QSize(100, 0))
        self.label3.setText('Color:')
        self.color = QLineEdit()
        self.color.setReadOnly(True)
        self.color.textChanged.connect(self.on_color_text_changed)
        self.color_box = QLabel()
        self.color_box.setText('  ')
        self.layout3.addWidget(self.label3)
        self.layout3.addWidget(self.color)
        self.layout3.addWidget(self.color_box)

        self.lights.stateChanged.connect(self.on_lights_on_changed)
        self.door_open.stateChanged.connect(self.on_door_open_changed)

        self.layout.addLayout(self.layout1)
        self.layout.addLayout(self.layout2)
        self.layout.addLayout(self.layout3)
Beispiel #8
0
class CustomAttributes(QGroupBox):
    
    changed = pyqtSignal()
    
    def __init__(self, parent=None):
        super(CustomAttributes, self).__init__(parent)
        grid = QGridLayout()
        self.setLayout(grid)
        
        self.toplabel = QLabel()
        self.toplabel.setEnabled(False)
        self.toplabel.setAlignment(Qt.AlignCenter)
        grid.addWidget(self.toplabel, 0, 0, 1, 3)
        
        self.textColor = ColorButton()
        l = self.textLabel = QLabel()
        l.setBuddy(self.textColor)
        grid.addWidget(l, 1, 0)
        grid.addWidget(self.textColor, 1, 1)
        c = ClearButton(iconSize=QSize(16, 16))
        c.clicked.connect(self.textColor.clear)
        grid.addWidget(c, 1, 2)
        
        self.backgroundColor = ColorButton()
        l = self.backgroundLabel = QLabel()
        l.setBuddy(self.backgroundColor)
        grid.addWidget(l, 2, 0)
        grid.addWidget(self.backgroundColor, 2, 1)
        c = ClearButton(iconSize=QSize(16, 16))
        c.clicked.connect(self.backgroundColor.clear)
        grid.addWidget(c, 2, 2)
        
        self.bold = QCheckBox()
        self.italic = QCheckBox()
        self.underline = QCheckBox()
        grid.addWidget(self.bold, 3, 0)
        grid.addWidget(self.italic, 4, 0)
        grid.addWidget(self.underline, 5, 0)
        
        self.underlineColor = ColorButton()
        grid.addWidget(self.underlineColor, 5, 1)
        c = ClearButton(iconSize=QSize(16, 16))
        c.clicked.connect(self.underlineColor.clear)
        grid.addWidget(c, 5, 2)
        grid.setRowStretch(6, 2)
        
        self.textColor.colorChanged.connect(self.changed)
        self.backgroundColor.colorChanged.connect(self.changed)
        self.underlineColor.colorChanged.connect(self.changed)
        self.bold.stateChanged.connect(self.changed)
        self.italic.stateChanged.connect(self.changed)
        self.underline.stateChanged.connect(self.changed)
        
        app.translateUI(self)
        
    def translateUI(self):
        self.textLabel.setText(_("Text"))
        self.backgroundLabel.setText(_("Background"))
        self.bold.setText(_("Bold"))
        self.italic.setText(_("Italic"))
        self.underline.setText(_("Underline"))
    
    def setTopText(self, text):
        self.toplabel.setText(text)
        
    def setTristate(self, enable):
        self._tristate = enable
        self.bold.setTristate(enable)
        self.italic.setTristate(enable)
        self.underline.setTristate(enable)
    
    def textFormat(self):
        """Returns our settings as a QTextCharFormat object."""
        f = QTextCharFormat()
        if self._tristate:
            value = lambda checkbox: [False, None, True][checkbox.checkState()]
        else:
            value = lambda checkbox: checkbox.isChecked()
        res = value(self.bold)
        if res is not None:
            f.setFontWeight(QFont.Bold if res else QFont.Normal)
        res = value(self.italic)
        if res is not None:
            f.setFontItalic(res)
        res = value(self.underline)
        if res is not None:
            f.setFontUnderline(res)
        if self.textColor.color().isValid():
            f.setForeground(self.textColor.color())
        if self.backgroundColor.color().isValid():
            f.setBackground(self.backgroundColor.color())
        if self.underlineColor.color().isValid():
            f.setUnderlineColor(self.underlineColor.color())
        return f

    def setTextFormat(self, f):
        """Sets our widget to the QTextCharFormat settings."""
        block = self.blockSignals(True)
        absent = Qt.PartiallyChecked if self._tristate else Qt.Unchecked
        if f.hasProperty(QTextFormat.FontWeight):
            self.bold.setChecked(f.fontWeight() >= QFont.Bold)
        else:
            self.bold.setCheckState(absent)
        if f.hasProperty(QTextFormat.FontItalic):
            self.italic.setChecked(f.fontItalic())
        else:
            self.italic.setCheckState(absent)
        if f.hasProperty(QTextFormat.TextUnderlineStyle):
            self.underline.setChecked(f.fontUnderline())
        else:
            self.underline.setCheckState(absent)
        
        if f.hasProperty(QTextFormat.ForegroundBrush):
            self.textColor.setColor(f.foreground().color())
        else:
            self.textColor.setColor(QColor())
        if f.hasProperty(QTextFormat.BackgroundBrush):
            self.backgroundColor.setColor(f.background().color())
        else:
            self.backgroundColor.setColor(QColor())
        if f.hasProperty(QTextFormat.TextUnderlineColor):
            self.underlineColor.setColor(f.underlineColor())
        else:
            self.underlineColor.setColor(QColor())
        self.blockSignals(block)
Beispiel #9
0
class ControlForm(QtGui.QDialog):

    def __init__(self, proxy, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setupUi(self)

        self.proxy = proxy
        self.proxy.lights_on_changed.connect(self.object_lights_on_changed)
        self.proxy.door_open_changed.connect(self.object_door_open_changed)
        self.proxy.color_changed.connect(self.object_color_changed)

    def on_lights_on_changed(self, value):
        proxy.lights_on = self.lights.isChecked()

    def on_door_open_changed(self, value):
        proxy.door_open = self.door_open.isChecked()

    def object_lights_on_changed(self, value, old_value, other):
        if value == self.lights.isChecked():
            return
        self.lights.setChecked(value)

    def object_door_open_changed(self, value, old_value, other):
        if value == self.door_open.isChecked():
            return
        self.door_open.setChecked(value)

    def object_color_changed(self, value, old_value, other):
        if value == self.color.text():
            return
        self.color.setText(value)
        self.color.textChanged.emit(value)

    def on_color_text_changed(self, value):
        self.color_box.setStyleSheet("QLabel { background-color: %s }" % value)

    def setupUi(self, parent):
        self.resize(275, 172)
        self.setWindowTitle('House')

        self.layout = QVBoxLayout(parent)
        self.layout.setSizeConstraint(QLayout.SetFixedSize)
        #align = (Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter)

        self.layout1 = QHBoxLayout()
        self.label1 = QLabel()
        self.label1.setMinimumSize(QSize(100, 0))
        self.label1.setText('Lights:')
        self.lights = QCheckBox()
        self.lights.setTristate(False)
        self.layout1.addWidget(self.label1)
        self.layout1.addWidget(self.lights)

        self.layout2 = QHBoxLayout()
        self.label2 = QLabel()
        self.label2.setMinimumSize(QSize(100, 0))
        self.label2.setText('Front door:')
        self.door_open = QCheckBox()
        self.door_open.setTristate(False)
        self.layout2.addWidget(self.label2)
        self.layout2.addWidget(self.door_open)

        self.layout3 = QHBoxLayout()
        self.label3 = QLabel()
        self.label3.setMinimumSize(QSize(100, 0))
        self.label3.setText('Color:')
        self.color = QLineEdit()
        self.color.setReadOnly(True)
        self.color.textChanged.connect(self.on_color_text_changed)
        self.color_box = QLabel()
        self.color_box.setText('  ')
        self.layout3.addWidget(self.label3)
        self.layout3.addWidget(self.color)
        self.layout3.addWidget(self.color_box)

        self.lights.stateChanged.connect(self.on_lights_on_changed)
        self.door_open.stateChanged.connect(self.on_door_open_changed)

        self.layout.addLayout(self.layout1)
        self.layout.addLayout(self.layout2)
        self.layout.addLayout(self.layout3)