manuskript/src/ui/editors/completer.py

88 lines
2.7 KiB
Python
Raw Normal View History

#!/usr/bin/env python
#--!-- coding: utf8 --!--
from qt import *
from enums import *
from models.outlineModel import *
from ui.editors.completer_ui import *
from functions import *
class completer(QWidget, Ui_completer):
activated = pyqtSignal(str)
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self.setWindowFlags(Qt.Popup)
self.text.textEdited.connect(self.updateListFromData)
self.text.returnPressed.connect(self.submit)
self.list.itemActivated.connect(self.submit)
self.outlineModel = mainWindow().mdlOutline
self.persoModel = mainWindow().mdlPersos
self.data = {}
self.populate()
self.hide()
def popup(self):
self.text.setFocus(Qt.PopupFocusReason)
self.show()
def addCategory(self, title):
item = QListWidgetItem(title)
item.setBackground(QBrush(lightBlue()))
item.setForeground(QBrush(Qt.darkBlue))
item.setFlags(Qt.ItemIsEnabled)
self.list.addItem(item)
def populate(self):
if self.outlineModel:
d = []
def addChildren(item):
for c in item.children():
d.append((c.title(), c.ID()))
addChildren(c)
r = self.outlineModel.rootItem
addChildren(r)
self.data[(self.tr("Texts"), "T")] = d
if self.persoModel:
d = []
for r in range(self.persoModel.rowCount()):
name = self.persoModel.item(r, Perso.name.value).text()
ID = self.persoModel.item(r, Perso.ID.value).text()
d.append((name, ID))
self.data[(self.tr("Characters"), "C")] = d
self.updateListFromData()
def updateListFromData(self):
self.list.clear()
for cat in self.data:
self.addCategory(cat[0])
for item in [i for i in self.data[cat] if self.text.text().lower() in i[0].lower()]:
i = QListWidgetItem(item[0])
i.setData(Qt.UserRole, "::{}:{}::".format(cat[1], item[1]))
self.list.addItem(i)
self.list.setCurrentRow(1)
self.text.setFocus(Qt.PopupFocusReason)
def submit(self):
i = self.list.currentItem()
self.activated.emit(i.data(Qt.UserRole))
self.hide()
def keyPressEvent(self, event):
if event.key() in [Qt.Key_Up, Qt.Key_Down]:
self.list.keyPressEvent(event)
else:
QWidget.keyPressEvent(self, event)