diff --git a/src/ui/chkOutlineCompile.py b/src/ui/chkOutlineCompile.py index 141eec7a..74910420 100644 --- a/src/ui/chkOutlineCompile.py +++ b/src/ui/chkOutlineCompile.py @@ -13,33 +13,107 @@ class chkOutlineCompile(QCheckBox): def __init__(self, parent=None): QCheckBox.__init__(self, parent) - self.stateChanged.connect(self.changed) - self.currentModelIndex = None + self.stateChanged.connect(self.submit) + self._column = Outline.compile.value + self._index = None + self._indexes = None + self._model = None + self._updating = False - def setModel(self, mdlOutline): - self.mdlOutline = mdlOutline - self.mdlOutline.dataChanged.connect(self.updateSelectedItem) + def setModel(self, model): + self._model = model + self._model.dataChanged.connect(self.update) - def setCurrentModelIndex(self, idx): - self.currentModelIndex = idx - self.updateSelectedItem() + def setCurrentModelIndex(self, index): + self._indexes = None + if index.column() != self._column: + index = index.sibling(index.row(), self._column) + self._index = index + self.setTristate(False) + self.updateCheckState() - def updateSelectedItem(self, idx1=None, idx2=None): - if not self.currentModelIndex or not self.currentModelIndex.isValid(): + def setCurrentModelIndexes(self, indexes): + self._index = None + self._indexes = [] + for i in indexes: + if i.column() != self._column: + i = i.sibling(i.row(), self._column) + self._indexes.append(i) + self.updateCheckState() + + def getCheckedValue(self, index): + item = index.internalPointer() + c = item.data(Outline.compile) + if c: + c = int(c) + else: + c = Qt.Unchecked + + return c + + def update(self, topLeft, bottomRight): + + if self._updating: + # We are currently putting data in the model, so no updates + return + + if self._index: + if topLeft.row() <= self._index.row() <= bottomRight.row(): + self.updateCheckState() + + elif self._indexes: + update = False + + for i in self._indexes: + if topLeft.row() <= i.row() <= bottomRight.row(): + update = True + + if update: + self.updateCheckState() + + def updateCheckState(self): + + if self._index: + self.setEnabled(True) + c = self.getCheckedValue(self._index) + self.setCheckState(c) + + elif self._indexes: + self.setEnabled(True) + values = [] + for i in self._indexes: + values.append(self.getCheckedValue(i)) + + same = True + for v in values[1:]: + if v != values[0]: + same = False + break + + if same: + self.setCheckState(values[0]) + else: + self._updating = True + self.setCheckState(Qt.PartiallyChecked) + self._updating = False + + else: self.setChecked(False) self.setEnabled(False) - else: - self.setEnabled(True) - item = self.currentModelIndex.internalPointer() - c = item.data(Outline.compile) - if c: - c = int(c) - else: - c = Qt.Unchecked - self.setCheckState(c) - def changed(self, state): - if self.currentModelIndex and self.currentModelIndex.isValid(): - mdl = self.currentModelIndex.model() - modelIndex = mdl.index(self.currentModelIndex.row(), Outline.compile.value, self.currentModelIndex.parent()) - mdl.setData(modelIndex, state) \ No newline at end of file + def submit(self, state): + + if self._updating: + return + + if self._index: + if self._model.data(self._index) != state: + self._model.setData(self._index, state) + + elif self._indexes: + for i in self._indexes: + if self._model.data(i) != state: + self._model.setData(i, state) + + self.setTristate(False) + \ No newline at end of file diff --git a/src/ui/views/lineEditView.py b/src/ui/views/lineEditView.py index 98355117..7cc8c66b 100644 --- a/src/ui/views/lineEditView.py +++ b/src/ui/views/lineEditView.py @@ -17,6 +17,7 @@ class lineEditView(QLineEdit): def setModel(self, model): self._model = model + self._model.dataChanged.connect(self.update) def setColumn(self, col): self._column = col @@ -31,7 +32,6 @@ class lineEditView(QLineEdit): if self._placeholderText != None: self.setPlaceholderText(self._placeholderText) self.textEdited.connect(self.submit) - self._model.dataChanged.connect(self.update) self.updateText() def setCurrentModelIndexes(self, indexes): @@ -45,7 +45,6 @@ class lineEditView(QLineEdit): self._indexes.append(i) self.textEdited.connect(self.submit) - self._model.dataChanged.connect(self.update) self.updateText() def submit(self): @@ -98,6 +97,7 @@ class lineEditView(QLineEdit): for t2 in t[1:]: if t2 != t[0]: same = False + break if same: self.setText(t[0]) diff --git a/src/ui/views/propertiesView.py b/src/ui/views/propertiesView.py index 7922b597..865450cc 100644 --- a/src/ui/views/propertiesView.py +++ b/src/ui/views/propertiesView.py @@ -54,5 +54,6 @@ class propertiesView(QWidget, Ui_propertiesView): print("Multiple selection, Work in progress") self.txtTitle.setCurrentModelIndexes(indexes) self.txtGoal.setCurrentModelIndexes(indexes) + self.chkCompile.setCurrentModelIndexes(indexes) #FIXME: do the other views \ No newline at end of file