From c22aa375101432480d408a77f01335b56c392fb5 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Wed, 10 Jun 2015 15:57:44 +0200 Subject: [PATCH] Statuses are in a model, too. --- i18n/snowflaQe_fr.qm | Bin 9627 -> 10862 bytes i18n/snowflaQe_fr.ts | 207 +++++++++++++++++---------- src/loadSave.py | 3 +- src/mainWindow.py | 28 +++- src/models/outlineModel.py | 29 ---- src/settingsWindow.py | 13 ++ src/ui/cmbOutlineStatusChoser.py | 31 ++-- src/ui/editors/editorWidget.py | 1 + src/ui/mainWindow.py | 18 +-- src/ui/mainWindow.ui | 6 +- src/ui/settings.py | 4 +- src/ui/settings.ui | 12 +- src/ui/views/corkDelegate.py | 22 +-- src/ui/views/outlineBasics.py | 29 ++-- src/ui/views/outlineView.py | 10 +- src/ui/views/treeOutlineDelegates.py | 27 ++-- test_project/labels.xml | 16 +-- test_project/outline.xml | 36 ++--- test_project/status.xml | 36 +++++ 19 files changed, 325 insertions(+), 203 deletions(-) create mode 100644 test_project/status.xml diff --git a/i18n/snowflaQe_fr.qm b/i18n/snowflaQe_fr.qm index b67ee8c9ecc6b5a75afd97217c055da3828196e4..8f480a289952379be19ab0705e114e59688726a8 100644 GIT binary patch delta 1970 zcmaJ=2~bpZ9R6V6d+aWI0dfc^hpd{CLt>ha!=xNu944y>nhEYhR~MFcpGRh{R#@Is zFN-`&M;(_8w`Eeh z%{%(AJ?7kZTQ^-uia$B~!{gV+0>VIEH9+X6z{Jx)k^jBHgs|r& zo{uH21;l|6jtYQoCWMPtz%T|v%X%PjP#0P)5U!>I#y${kFC*4N@ZL)UOz{vN93qZ` zIN}jt&48G_n}VYtj(?iC6JqX9Kv)Gt+hz*4K%ABhB<~`!E^Ir*@)P{OFGPbu_+L18i1%TAl8y6emZhmw$tcQcymYm&YShf6X?jW3waIIbhZikMGuJW zn6l&;V6K2oETgeSu)S7KL+3GdJ~6Bb)7H>H@|P$Y?xWx^6mQK2qDxSG_Gcib0y9Fb z6s*RK@^qpPN6W7RaN@$k=8g-hjAm^@s#x6DJ~E#iQ6OlaOB4m_h$;Hp@3Vjq)o61BtF`fcL=wd`2$ z>0({F`ZTB*vL4W$0CJJ}x&rV`uZE0xmwNLNe!- zR;ey?v@bnG4vN;Y(8YoUfdV1Zw_(_}?jKV;jl&QF#gA3Ii zy1u?teO7S12~Dtf>N!YR87LI8?GE*3pGaSoAxaaYM-FQ$>CG9a5OW-r>KIGZh-6Im zn?(gnWZosBjNdLSmD*@ua-ZFr z!CKDDza$mi59het6(QUWvut-LE_ac`K37&=Sm^MbN=y~JvB>Y7+9F0QrNKnb?(w$k z^5w;ePJiqDJSLBVwMsQ2byuRWjVyZ7hw{=C26 zo4!Mv!UaP$OUHga{Pwsv1x)7=-k7 zQm_wlTQQJX4_S8_NQy%?*0BCHWSan7FGF_3fRtWroazEB3n*Rt4>^XiSPL6%N4fuR zau7bbn+==cdv%zN#!yjDCLY1IH;z%i6aEJb>RAvD94-cy+>5}uKgoGi*;WB*Ayn1n zk$w22?ka#F#(%j31Hc< z@^JVhb$2Kg$=yI!zp}G!8gR}F*N!<3bRjItXLkb2y<+p0c0j!(UfBH+53Ck#19V_+ z5&i9pfc%;KkNb9~zEpCJwIoL{h z=SYNlSET>+2^!);qxW%>;b&#vKCZ_7y&OnA$_cCGQ~|R|`&Q0rO?1$%=Aej@R~y>D;yIhzS$%}uqQ2XF9ndxPLe3IK=T$FGQP)+d&U6*C z?}h|*_8?##O=y_@90;e(SekNOymXf=Cu2YIVAPsfQb`9cYuS@@p0M8qv#0gD$l$M!V>vS#u8FV#7zZnrCV`*yCEwZ)=#nq18q|TC5P& diff --git a/i18n/snowflaQe_fr.ts b/i18n/snowflaQe_fr.ts index dbecd8b2..58ea2b91 100644 --- a/i18n/snowflaQe_fr.ts +++ b/i18n/snowflaQe_fr.ts @@ -129,7 +129,7 @@ Noms - + Filter Filtre @@ -149,7 +149,7 @@ Motivation - + Goal Goal @@ -174,7 +174,7 @@ <html><head/><body><p align="right">Résumé<br/>en un paragraphe</p></body></html> - + Notes Notes @@ -244,7 +244,7 @@ Contexte - + Outline Plan @@ -269,7 +269,7 @@ Goal: - + One line scene summary Résumé en une ligne @@ -289,7 +289,7 @@ - + Scene Scène @@ -309,12 +309,12 @@ - + Compile Compile - + Scene summary Résumé de la scène @@ -324,47 +324,47 @@ Outils - + Cheat sheet Aide-mémoire - + Albert - perso - + Jean - perso - + Crapoquak - animal - + La revenche du capitaine - intrigue - + Debug - + FlatData - + Persos - + Perso Infos @@ -379,92 +379,92 @@ Aide - + Open Ouvrir - + Ctrl+O - + Recents Récents - + Ctrl+R - + Save Enregistrer - + Ctrl+S - + Ctrl+S - + Save as... Enregistrer sous... - + Ctrl+Shift+S - + Quit Quitter - + Ctrl+Q - + &Snowflake - + New Nouveau - + Ctrl+N - + Show help texts Montrer les bulles d'aides - + Ctrl+Shift+B - + Spellcheck Correcteur orthographique - + F8 - + Word count Nombre de mots @@ -474,84 +474,99 @@ Mode - + New character Nouveau perso - + (~{} pages) (~{} pages) - + Enter infos about your book, and yourself. Entrez toutes les informations relatives au livre, ainsi qu'à vous. - + Take time to think about a one sentance (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Prenez le temps de réfléchir à un résumé de votre livre, en une phrase (~50 mots). Puis augmentez cette phrase en un paragraphe, puis en une page, puis en un résumé complet. - + Create your characters. Créez ici vos personnage. - + Develop plots. Développez vos intrigues. - + Create the outline of your masterpiece. Créez le plan de votre chef-d'œuvre. - + Write. Écrivez. - + Debug infos. Sometimes useful. Des infos pour débugger des fois pendant qu'on code c'est utile. - + Dictionary Dictionnaire - + Install PyEnchant to use spellcheck Installez PyEnchant pour profiter du correcteur orthographique - + Words: {}{} Mots: {}{} Text - + Texte Cork - + Cork - + Label - + Label - + Labels - + Labels + + + + Edit + Édition + + + + Labels... + Labels... + + + + Status... + Status... @@ -583,6 +598,41 @@ Scène 2 + + + Idea + Idée + + + + Note + Note + + + + Chapter + Chapitre + + + + TODO + TODO + + + + First draft + Premier brouillon + + + + Second draft + Second brouillon + + + + Final + Final + SpellAction @@ -621,12 +671,12 @@ editorWidget - + {} words / {} {} mots / {} - + {} words {} mots @@ -636,7 +686,7 @@ Form - + Form @@ -650,57 +700,57 @@ outlineBasics - + Copy Copier - + Cut Couper - + Paste Coller - + Delete Supprimer - + Set POV Choisir le POV - + Set Status Choisir le status - + Set Label Choisir le label - + New Folder Nouveau Dossier - + New Scene Nouvelle Scène - + None Aucun - + New Nouveau @@ -708,27 +758,40 @@ qApp - + Saving to {}. Enregistrement de {}. - + Loading {}... Chargement de {}... + + settingsWindow + + + New status + Nouveau status + + + + New label + Nouveau label + + sldImportance Form - + Form TextLabel - + TextLabel diff --git a/src/loadSave.py b/src/loadSave.py index 6c9674f9..a0a18fe0 100644 --- a/src/loadSave.py +++ b/src/loadSave.py @@ -36,7 +36,8 @@ def saveStandardItemModelXML(mdl, xml): col = ET.SubElement(row, "col") col.attrib["col"] = str(y) if mdl.data(mdl.index(x, y), Qt.DecorationRole) != None: - col.attrib["color"] = iconColor(mdl.data(mdl.index(x, y), Qt.DecorationRole)).name(QColor.HexArgb) + color = iconColor(mdl.data(mdl.index(x, y), Qt.DecorationRole)).name(QColor.HexArgb) + col.attrib["color"] = color if color != "#ff000000" else "#00000000" if mdl.data(mdl.index(x, y)) != "": col.text = mdl.data(mdl.index(x, y)) diff --git a/src/mainWindow.py b/src/mainWindow.py index 311ccdfa..bafc540b 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -139,19 +139,31 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.mdlLabels = QStandardItemModel() for color, text in [ (Qt.transparent, ""), - (Qt.yellow, "Idea"), - (Qt.green, "Note"), - (Qt.blue, "Chapter"), - (Qt.red, "Scene") + (Qt.yellow, self.tr("Idea")), + (Qt.green, self.tr("Note")), + (Qt.blue, self.tr("Chapter")), + (Qt.red, self.tr("Scene")) ]: self.mdlLabels.appendRow(QStandardItem(iconFromColor(color), text)) - + # Status + self.mdlStatus = QStandardItemModel() + for text in [ + "", + self.tr("TODO"), + self.tr("First draft"), + self.tr("Second draft"), + self.tr("Final") + ]: + self.mdlStatus.appendRow(QStandardItem(text)) + # Outline self.mdlOutline = outlineModel() self.treeRedacOutline.setModel(self.mdlOutline) self.treePlanOutline.setModelPersos(self.mdlPersos) self.treePlanOutline.setModelLabels(self.mdlLabels) + self.treePlanOutline.setModelStatus(self.mdlStatus) + self.treePlanOutline.setModel(self.mdlOutline) self.cmbPlanPOV.setModels(self.mdlPersos, self.mdlOutline) @@ -181,7 +193,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.cmbRedacPOV.setModels(self.mdlPersos, self.mdlOutline) self.cmbRedacLabel.setModels(self.mdlLabels, self.mdlOutline) - self.cmbRedacStatus.setModel(self.mdlOutline) + self.cmbRedacStatus.setModels(self.mdlStatus, self.mdlOutline) #self.chkRedacCompile.setModel(self.mdlOutline) self.mprOutline = QDataWidgetMapper() @@ -230,6 +242,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.tblDebugPersosInfos.setModel(self.mdlPersosInfos) self.treeDebugOutline.setModel(self.mdlOutline) self.lstDebugLabels.setModel(self.mdlLabels) + self.lstDebugStatus.setModel(self.mdlStatus) + # Playing with qStyle self.cmbStyle.addItems(list(QStyleFactory.keys())) @@ -326,6 +340,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): loadStandardItemModelXML(self.mdlPersos, "{}/perso.xml".format(project)) loadStandardItemModelXML(self.mdlPersosInfos, "{}/persoInfos.xml".format(project)) loadStandardItemModelXML(self.mdlLabels, "{}/labels.xml".format(project)) + loadStandardItemModelXML(self.mdlStatus, "{}/status.xml".format(project)) self.mdlOutline.loadFromXML("{}/outline.xml".format(project)) # Stuff @@ -351,6 +366,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): saveStandardItemModelXML(self.mdlPersos, "{}/perso.xml".format(self.currentProject)) saveStandardItemModelXML(self.mdlPersosInfos, "{}/persoInfos.xml".format(self.currentProject)) saveStandardItemModelXML(self.mdlLabels, "{}/labels.xml".format(self.currentProject)) + saveStandardItemModelXML(self.mdlStatus, "{}/status.xml".format(self.currentProject)) self.mdlOutline.saveToXML("{}/outline.xml".format(self.currentProject)) # closeEvent diff --git a/src/models/outlineModel.py b/src/models/outlineModel.py index 3f31e4da..e0a426e0 100644 --- a/src/models/outlineModel.py +++ b/src/models/outlineModel.py @@ -14,13 +14,10 @@ from functions import * class outlineModel(QAbstractItemModel): - newStatuses = pyqtSignal() - def __init__(self): QAbstractItemModel.__init__(self) self.rootItem = outlineItem(self, title="root") - self.generateStatuses() def index(self, row, column, parent): @@ -95,9 +92,6 @@ class outlineModel(QAbstractItemModel): item = index.internalPointer() item.setData(index.column(), value, role) - if index.column() == Outline.status.value: - self.generateStatuses() - self.dataChanged.emit(index.sibling(index.row(), 0), index.sibling(index.row(), max([i.value for i in Outline]))) return True @@ -310,33 +304,10 @@ class outlineModel(QAbstractItemModel): #try: root = ET.parse(xml) self.rootItem = outlineItem(self, xml=ET.tostring(root)) - self.generateStatuses() #except: #print("N'arrive pas à ouvrir {}".format(xml)) #return - - - ################# DIVERS ################# - - def generateStatuses(self, item=None): - if item == None: - self.statuses = [ - "TODO", - "First draft", - "Second draft", - "Final" - ] - item = self.rootItem - - val = item.data(Outline.status.value) - if val and not val in self.statuses: - self.statuses.append(val) - self.newStatuses.emit() - for c in item.children(): - self.generateStatuses(c) - - class outlineItem(): diff --git a/src/settingsWindow.py b/src/settingsWindow.py index d92391ad..62ced753 100644 --- a/src/settingsWindow.py +++ b/src/settingsWindow.py @@ -29,6 +29,19 @@ class settingsWindow(QWidget, Ui_Settings): self.btnLabelRemove.clicked.connect(self.removeLabel) self.btnLabelColor.clicked.connect(self.setLabelColor) + # Statuses + self.lstStatus.setModel(self.mw.mdlStatus) + self.lstStatus.setRowHidden(0, True) + self.btnStatusAdd.clicked.connect(self.addStatus) + self.btnStatusRemove.clicked.connect(self.removeStatus) + + def addStatus(self): + self.mw.mdlStatus.appendRow(QStandardItem(self.tr("New status"))) + + def removeStatus(self): + for i in self.lstStatus.selectedIndexes(): + self.mw.mdlStatus.removeRows(i.row(), 1) + def updateLabelColor(self, index): px = QPixmap(64, 64) px.fill(iconColor(self.mw.mdlLabels.item(index.row()).icon())) diff --git a/src/ui/cmbOutlineStatusChoser.py b/src/ui/cmbOutlineStatusChoser.py index 0f4940ca..2a24a4ed 100644 --- a/src/ui/cmbOutlineStatusChoser.py +++ b/src/ui/cmbOutlineStatusChoser.py @@ -13,40 +13,41 @@ class cmbOutlineStatusChoser(QComboBox): QComboBox.__init__(self, parent) self.activated[int].connect(self.changed) self.currentModelIndex = None - self.setEditable(True) - self.setAutoFillBackground(True) - def setModel(self, mdlOutline): + def setModels(self, mdlStatus, mdlOutline): + self.mdlStatus = mdlStatus + self.mdlStatus.dataChanged.connect(self.updateItems) # Not emiting? self.mdlOutline = mdlOutline - self.mdlOutline.dataChanged.connect(self.updateItems) self.mdlOutline.dataChanged.connect(self.updateSelectedItem) - self.mdlOutline.newStatuses.connect(self.updateItems) self.updateItems() def updateSelectedItem(self, idx1=None, idx2=None): if not self.currentModelIndex or not self.currentModelIndex.isValid(): self.setCurrentIndex(0) else: - item = self.currentModelIndex.internalPointer() - self.setCurrentIndex(self.findText(item.data(Outline.status.value))) + val = self.currentModelIndex.internalPointer().data(Outline.status.value) + if not val: val = 0 + try: + self.setCurrentIndex(int(val)) + except: + pass def changed(self, idx): if self.currentModelIndex: modelIndex = self.mdlOutline.index(self.currentModelIndex.row(), Outline.status.value, self.currentModelIndex.parent()) - self.mdlOutline.setData(modelIndex, self.currentText()) + self.mdlOutline.setData(modelIndex, self.currentIndex()) def setCurrentModelIndex(self, idx): self.currentModelIndex = idx + self.updateItems() self.updateSelectedItem() - def updateItems(self): - + def updateItems(self, topLeft=None, bottomRight=None, roles=None): self.clear() - - self.addItem("") - - for status in self.mdlOutline.statuses: - self.addItem(status) + for i in range(self.mdlStatus.rowCount()): + item = self.mdlStatus.item(i, 0) + if item: + self.addItem(item.text()) if self.currentModelIndex: self.updateSelectedItem() \ No newline at end of file diff --git a/src/ui/editors/editorWidget.py b/src/ui/editors/editorWidget.py index ca439d93..c515c0ec 100644 --- a/src/ui/editors/editorWidget.py +++ b/src/ui/editors/editorWidget.py @@ -137,6 +137,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.stack.setCurrentIndex(3) self.outlineView.setModelPersos(mainWindow().mdlPersos) self.outlineView.setModelLabels(mainWindow().mdlLabels) + self.outlineView.setModelStatus(mainWindow().mdlStatus) self.outlineView.setModel(self._model) self.outlineView.setRootIndex(self.currentIndex) diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index 72bc809a..486e8bcf 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -952,7 +952,6 @@ class Ui_MainWindow(object): sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.cmbRedacStatus.sizePolicy().hasHeightForWidth()) self.cmbRedacStatus.setSizePolicy(sizePolicy) - self.cmbRedacStatus.setEditable(True) self.cmbRedacStatus.setFrame(False) self.cmbRedacStatus.setObjectName("cmbRedacStatus") self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbRedacStatus) @@ -1097,6 +1096,9 @@ class Ui_MainWindow(object): self.lstDebugLabels = QtWidgets.QListView(self.tab) self.lstDebugLabels.setObjectName("lstDebugLabels") self.horizontalLayout.addWidget(self.lstDebugLabels) + self.lstDebugStatus = QtWidgets.QListView(self.tab) + self.lstDebugStatus.setObjectName("lstDebugStatus") + self.horizontalLayout.addWidget(self.lstDebugStatus) self.tabWidget.addTab(self.tab, "") self.verticalLayout_29.addWidget(self.tabWidget) self.tabMain.addTab(self.lytTabDebug, "") @@ -1366,12 +1368,12 @@ class Ui_MainWindow(object): self.actLabels.setText(_translate("MainWindow", "Labels...")) self.actStatus.setText(_translate("MainWindow", "Status...")) -from ui.cmbOutlineLabelChoser import cmbOutlineLabelChoser -from ui.chkOutlineCompile import chkOutlineCompile -from ui.views.outlineView import outlineView -from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser -from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser -from ui.sldImportance import sldImportance -from ui.editors.editorWidget import editorWidget from ui.collapsibleGroupBox2 import collapsibleGroupBox2 +from ui.cmbOutlineLabelChoser import cmbOutlineLabelChoser +from ui.sldImportance import sldImportance +from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser +from ui.views.outlineView import outlineView +from ui.chkOutlineCompile import chkOutlineCompile from ui.views.treeView import treeView +from ui.editors.editorWidget import editorWidget +from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index c139950d..1b80e261 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -1879,9 +1879,6 @@ 0 - - true - false @@ -2140,6 +2137,9 @@ + + + diff --git a/src/ui/settings.py b/src/ui/settings.py index 5b745067..e34a7301 100644 --- a/src/ui/settings.py +++ b/src/ui/settings.py @@ -66,7 +66,7 @@ class Ui_Settings(object): self.tab_2.setObjectName("tab_2") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.tab_2) self.verticalLayout_4.setObjectName("verticalLayout_4") - self.lstStatus = QtWidgets.QListWidget(self.tab_2) + self.lstStatus = QtWidgets.QListView(self.tab_2) self.lstStatus.setObjectName("lstStatus") self.verticalLayout_4.addWidget(self.lstStatus) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() @@ -90,7 +90,7 @@ class Ui_Settings(object): self.verticalLayout.addWidget(self.tabWidget) self.retranslateUi(Settings) - self.tabWidget.setCurrentIndex(0) + self.tabWidget.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(Settings) def retranslateUi(self, Settings): diff --git a/src/ui/settings.ui b/src/ui/settings.ui index 0aae2e74..d3ad4415 100644 --- a/src/ui/settings.ui +++ b/src/ui/settings.ui @@ -17,7 +17,7 @@ - 0 + 1 @@ -93,7 +93,9 @@ - + + + @@ -103,7 +105,9 @@ - + + + @@ -130,7 +134,7 @@ - + diff --git a/src/ui/views/corkDelegate.py b/src/ui/views/corkDelegate.py index 8e81b1dd..97f7d516 100644 --- a/src/ui/views/corkDelegate.py +++ b/src/ui/views/corkDelegate.py @@ -281,16 +281,18 @@ class corkDelegate(QStyledItemDelegate): mainRect = self.mainRect status = item.data(Outline.status.value) if status: - p.save() - p.setClipRegion(QRegion(mainRect)) - f = p.font() - f.setPointSize(f.pointSize() + 12) - f.setBold(True) - p.setFont(f) - p.setPen(QColor(Qt.red).lighter(175)) - _rotate(-35) - p.drawText(mainRect, Qt.AlignCenter, status) - p.restore() + it = mainWindow().mdlStatus.item(int(status), 0) + if it != None: + p.save() + p.setClipRegion(QRegion(mainRect)) + f = p.font() + f.setPointSize(f.pointSize() + 12) + f.setBold(True) + p.setFont(f) + p.setPen(QColor(Qt.red).lighter(175)) + _rotate(-35) + p.drawText(mainRect, Qt.AlignCenter, it.text()) + p.restore() # Draw Summary # One line diff --git a/src/ui/views/outlineBasics.py b/src/ui/views/outlineBasics.py index 5ee6858b..ce2b109c 100644 --- a/src/ui/views/outlineBasics.py +++ b/src/ui/views/outlineBasics.py @@ -58,6 +58,7 @@ class outlineBasics(QAbstractItemView): self.menu.addSeparator() + # POV self.menuPOV = QMenu(qApp.translate("outlineBasics", "Set POV"), self.menu) mw = mainWindow() a = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "None"), self.menuPOV) @@ -74,25 +75,23 @@ class outlineBasics(QAbstractItemView): mpr.mapped.connect(self.setPOV) self.menu.addMenu(self.menuPOV) - + # Status self.menuStatus = QMenu(qApp.translate("outlineBasics", "Set Status"), self.menu) - if self.model(): - a = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "None"), self.menuStatus) - a.triggered.connect(lambda: self.setStatus("")) - self.menuStatus.addAction(a) - self.menuStatus.addSeparator() + #a = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "None"), self.menuStatus) + #a.triggered.connect(lambda: self.setStatus("")) + #self.menuStatus.addAction(a) + #self.menuStatus.addSeparator() - mpr = QSignalMapper(self.menuStatus) - for status in self.model().statuses: - a = QAction(status, self.menuStatus) - a.triggered.connect(mpr.map) - mpr.setMapping(a, status) - self.menuStatus.addAction(a) - mpr.mapped[str].connect(self.setStatus) - + mpr = QSignalMapper(self.menuStatus) + for i in range(mw.mdlStatus.rowCount()): + a = QAction(mw.mdlStatus.item(i, 0).text(), self.menuStatus) + a.triggered.connect(mpr.map) + mpr.setMapping(a, i) + self.menuStatus.addAction(a) + mpr.mapped.connect(self.setStatus) self.menu.addMenu(self.menuStatus) - + # Labels self.menuLabel = QMenu(qApp.translate("outlineBasics", "Set Label"), self.menu) mpr = QSignalMapper(self.menuLabel) for i in range(mw.mdlLabels.rowCount()): diff --git a/src/ui/views/outlineView.py b/src/ui/views/outlineView.py index 83b74e7c..d3616abc 100644 --- a/src/ui/views/outlineView.py +++ b/src/ui/views/outlineView.py @@ -13,13 +13,15 @@ from ui.views.outlineBasics import * class outlineView(QTreeView, dndView, outlineBasics): - def __init__(self, parent=None, modelPersos=None, modelLabels=None): + def __init__(self, parent=None, modelPersos=None, modelLabels=None, modelStatus=None): QTreeView.__init__(self, parent) dndView.__init__(self) outlineBasics.__init__(self, parent) self.modelPersos = modelPersos self.modelLabels = modelLabels + self.modelStatus = modelStatus + self.header().setStretchLastSection(False) def setModelPersos(self, model): @@ -30,6 +32,10 @@ class outlineView(QTreeView, dndView, outlineBasics): # This is used by treeOutlineLabelDelegate to display labels self.modelLabels = model + def setModelStatus(self, model): + # This is used by treeOutlineStatusDelegate to display statuses + self.modelStatus = model + def setModel(self, model): QTreeView.setModel(self, model) @@ -38,7 +44,7 @@ class outlineView(QTreeView, dndView, outlineBasics): self.setItemDelegateForColumn(Outline.POV.value, self.treePlanOutlinePersoDelegate) self.treePlanOutlineCompileDelegate = treeOutlineCompileDelegate() self.setItemDelegateForColumn(Outline.compile.value, self.treePlanOutlineCompileDelegate) - self.treePlanOutlineStatusDelegate = treeOutlineStatusDelegate() + self.treePlanOutlineStatusDelegate = treeOutlineStatusDelegate(self.modelStatus) self.setItemDelegateForColumn(Outline.status.value, self.treePlanOutlineStatusDelegate) self.treePlanOutlineGoalPercentageDelegate = treeOutlineGoalPercentageDelegate() self.setItemDelegateForColumn(Outline.goalPercentage.value, self.treePlanOutlineGoalPercentageDelegate) diff --git a/src/ui/views/treeOutlineDelegates.py b/src/ui/views/treeOutlineDelegates.py index 149a2db3..d9a238b6 100644 --- a/src/ui/views/treeOutlineDelegates.py +++ b/src/ui/views/treeOutlineDelegates.py @@ -113,32 +113,43 @@ class treeOutlineGoalPercentageDelegate(QStyledItemDelegate): class treeOutlineStatusDelegate(QStyledItemDelegate): - def __init__(self, parent=None): + def __init__(self, mdlStatus, parent=None): QStyledItemDelegate.__init__(self, parent) + self.mdlStatus = mdlStatus def sizeHint(self, option, index): s = QStyledItemDelegate.sizeHint(self, option, index) + if s.width() > 150: + s.setWidth(150) + elif s.width() < 50: + s.setWidth(50) return s + QSize(18, 0) def createEditor(self, parent, option, index): editor = QComboBox(parent) editor.setAutoFillBackground(True) - editor.setEditable(True) editor.setFrame(False) return editor def setEditorData(self, editor, index): - statuses = index.model().statuses - editor.addItem("") - for status in statuses: - editor.addItem(status) - editor.setCurrentIndex(editor.findText(index.data())) + for i in range(self.mdlStatus.rowCount()): + editor.addItem(self.mdlStatus.item(i, 0).text()) + + val = index.internalPointer().data(Outline.status.value) + if not val: val = 0 + editor.setCurrentIndex(int(val)) editor.showPopup() def setModelData(self, editor, model, index): - val = editor.currentText() + val = editor.currentIndex() model.setData(index, val) + def displayText(self, value, locale): + try: + return self.mdlStatus.item(int(value), 0).text() + except: + return "" + class treeOutlineLabelDelegate(QStyledItemDelegate): diff --git a/test_project/labels.xml b/test_project/labels.xml index e98ad8b9..fe3c3a13 100644 --- a/test_project/labels.xml +++ b/test_project/labels.xml @@ -8,7 +8,6 @@