manuskript/manuskript/ui/views/plotDelegate.py
2016-02-06 08:38:33 +01:00

105 lines
3.4 KiB
Python

#!/usr/bin/env python
#--!-- coding: utf8 --!--
from qt import *
from enums import *
from functions import *
import settings
import collections
class plotDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
QStyledItemDelegate.__init__(self, parent)
def sizeHint(self, option, index):
s = QStyledItemDelegate.sizeHint(self, option, index)
if s.width() < 200:
s.setWidth(200)
return s
def createEditor(self, parent, option, index):
editor = QLineEdit(parent)
editor.setFrame(False)
editor.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
return editor
def setEditorData(self, editor, index):
editor.setText(index.model().data(index))
self.txt = editor
self.menu = QMenu(editor)
plotsTypes = collections.OrderedDict({
self.tr("General"): [
self.tr("Promise"),
self.tr("Problem"),
self.tr("Progress"),
self.tr("Resolution")
],
self.tr("Try / Fail"): [
self.tr("No and"),
self.tr("Yes but"),
],
self.tr("Freytag's pyramid"): [
self.tr("Exposition"),
self.tr("Rising action"),
self.tr("Climax"),
self.tr("Falling action"),
self.tr("Resolution"),
],
self.tr("Three acts"): [
self.tr("1. Setup"),
self.tr("1. Inciting event"),
self.tr("1. Turning point"),
"---",
self.tr("2. Choice"),
self.tr("2. Reversal"),
self.tr("2. Disaster"),
"---",
self.tr("3. Stand up"),
self.tr("3. Climax"),
self.tr("3. Ending"),
],
self.tr("Hero's journey"): [
self.tr("Ordinary world"),
self.tr("Call to adventure"),
self.tr("Refusal of the call"),
self.tr("Meeting with mentor"),
self.tr("Corssing the Threshold"),
self.tr("Tests"),
self.tr("Approach"),
self.tr("Abyss"),
self.tr("Reward / Revelation"),
self.tr("Transformation"),
self.tr("Atonement"),
self.tr("Return"),
],
})
for name in plotsTypes:
m = QMenu(name, self.menu)
for sub in plotsTypes[name]:
if sub == "---":
m.addSeparator()
else:
a = QAction(sub, m)
a.triggered.connect(self.submit)
m.addAction(a)
self.menu.addMenu(m)
editor.addAction(QIcon.fromTheme("list-add"), QLineEdit.LeadingPosition).triggered.connect(self.popupMenu)
def setModelData(self, editor, model, index):
val = editor.text()
model.setData(index, val)
def popupMenu(self):
act = self.sender()
self.menu.popup(self.txt.parent().mapToGlobal(self.txt.geometry().bottomLeft()))
def submit(self):
act = self.sender()
self.txt.setText(act.text())