mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-17 18:34:33 +12:00
88 lines
2.7 KiB
Python
88 lines
2.7 KiB
Python
|
#!/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)
|