manuskript/manuskript/ui/views/lineEditView.py
2021-02-21 23:45:34 +01:00

118 lines
3.4 KiB
Python

#!/usr/bin/env python
# --!-- coding: utf8 --!--
from PyQt5.QtCore import QMutex
from PyQt5.QtWidgets import QLineEdit
from manuskript.enums import Outline
from manuskript.functions import toString
class lineEditView(QLineEdit):
def __init__(self, parent=None):
QLineEdit.__init__(self, parent)
self._column = Outline.title
self._indexes = None
self._index = None
self._placeholderText = None
self._updating = QMutex()
def setModel(self, model):
self._model = model
self._model.dataChanged.connect(self.update)
def setColumn(self, col):
self._column = col
def setCurrentModelIndex(self, index):
self._indexes = None
if index.isValid():
if index.column() != self._column:
index = index.sibling(index.row(), self._column)
self._index = index
self._model = index.model()
# self.item = index.internalPointer()
if self._placeholderText != None:
self.setPlaceholderText(self._placeholderText)
self.textEdited.connect(self.submit)
self.updateText()
def setCurrentModelIndexes(self, indexes):
self._indexes = []
self._index = None
for i in indexes:
if i.isValid():
if i.column() != self._column:
i = i.sibling(i.row(), self._column)
self._indexes.append(i)
self.textEdited.connect(self.submit)
self.updateText()
def submit(self):
self._updating.lock()
text = self.text()
self._updating.unlock()
if self._index:
# item = self._index.internalPointer()
if text != self._model.data(self._index):
self._model.setData(self._index, text)
elif self._indexes:
for i in self._indexes:
# item = i.internalPointer()
if text != self._model.data(i):
self._model.setData(i, text)
def update(self, topLeft, bottomRight):
update = False
if self._index:
if topLeft.row() <= self._index.row() <= bottomRight.row():
update = True
elif self._indexes:
for i in self._indexes:
if topLeft.row() <= i.row() <= bottomRight.row():
update = True
if update:
self.updateText()
def updateText(self):
self._updating.lock()
if self._index:
# item = self._index.internalPointer()
# txt = toString(item.data(self._column))
txt = toString(self._model.data(self._index))
if self.text() != txt:
self.setText(txt)
elif self._indexes:
t = []
same = True
for i in self._indexes:
# item = i.internalPointer()
# t.append(toString(item.data(self._column)))
t.append(toString(self._model.data(i)))
for t2 in t[1:]:
if t2 != t[0]:
same = False
break
if same:
self.setText(t[0])
else:
self.setText("")
if not self._placeholderText:
self._placeholderText = self.placeholderText()
self.setPlaceholderText(self.tr("Various"))
self._updating.unlock()