Multi indexes chkOutlineCompile

This commit is contained in:
Olivier Keshavjee 2015-06-10 22:51:52 +02:00
parent 56306a819c
commit 20b44ad517
3 changed files with 101 additions and 26 deletions

View file

@ -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)
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)

View file

@ -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])

View file

@ -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