From 37ec8e6280402ada59def156edbaacc5394e4404 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sun, 19 May 2019 17:00:05 +0200 Subject: [PATCH] Added code to extend the status and importance colour lists --- nw/gui/projecteditor.py | 145 ++++++++++++++++++++++++++++++++++++++-- nw/project/project.py | 8 +++ 2 files changed, 147 insertions(+), 6 deletions(-) diff --git a/nw/gui/projecteditor.py b/nw/gui/projecteditor.py index 2b1b2de3..d4d26b6e 100644 --- a/nw/gui/projecteditor.py +++ b/nw/gui/projecteditor.py @@ -15,11 +15,13 @@ import nw from os import path -from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, QLineEdit, QPlainTextEdit, - QPushButton, QWidget, QTabWidget, QDialogButtonBox -) +from PyQt5.QtGui import QIcon, QPixmap, QColor from PyQt5.QtSvg import QSvgWidget +from PyQt5.QtWidgets import ( + QDialog, QHBoxLayout, QVBoxLayout, QFormLayout, QLineEdit, QPlainTextEdit, QLabel, + QWidget, QTabWidget, QDialogButtonBox, QListWidget, QListWidgetItem, QPushButton, + QColorDialog +) logger = logging.getLogger(__name__) @@ -43,9 +45,13 @@ class GuiProjectEditor(QDialog): self.svgGradient.setFixedWidth(80) self.tabMain = GuiProjectEditMain(self.theParent, self.theProject) + self.tabStatus = GuiProjectEditStatus(self.theParent, self.theProject.statusCols) + self.tabImport = GuiProjectEditStatus(self.theParent, self.theProject.importCols) self.tabWidget = QTabWidget() - self.tabWidget.addTab(self.tabMain,"Settings") + self.tabWidget.addTab(self.tabMain, "Settings") + self.tabWidget.addTab(self.tabStatus,"Status") + self.tabWidget.addTab(self.tabImport,"Importance") self.setLayout(self.outerBox) self.outerBox.addWidget(self.svgGradient) @@ -66,14 +72,21 @@ class GuiProjectEditor(QDialog): def _doSave(self): logger.verbose("ProjectEditor save button clicked") + projName = self.tabMain.editName.text() bookTitle = self.tabMain.editTitle.text() bookAuthors = self.tabMain.editAuthors.toPlainText() self.theProject.setProjectName(projName) self.theProject.setBookTitle(bookTitle) self.theProject.setBookAuthors(bookAuthors) - self.theProject.setProjectChanged(True) + + statusCol = self.tabStatus.getNewList() + importCol = self.tabImport.getNewList() + self.theProject.setStatusColours(statusCol) + self.theProject.setImportColours(importCol) + self.close() + return def _doClose(self): @@ -111,3 +124,123 @@ class GuiProjectEditMain(QWidget): return # END Class GuiProjectEditMain + +class GuiProjectEditStatus(QWidget): + + def __init__(self, theParent, colList): + QWidget.__init__(self, theParent) + + self.theParent = theParent + self.colList = colList.copy() + self.colChanged = False + + self.mainBox = QHBoxLayout() + self.mainForm = QVBoxLayout() + + self.listBox = QListWidget() + self.listBox.itemSelectionChanged.connect(self._selectedItem) + + for iName, iR, iG, iB in self.colList: + self._addItem(iName, iR, iG, iB) + + self.editName = QLineEdit() + self.newButton = QPushButton("New") + self.delButton = QPushButton("Delete") + self.saveButton = QPushButton("Save") + self.colPixmap = QPixmap(16,16) + self.colPixmap.fill(QColor(120,120,120)) + self.colButton = QPushButton(QIcon(self.colPixmap),"Colour") + self.colButton.setIconSize(self.colPixmap.rect().size()) + + self.newButton.clicked.connect(self._newItem) + self.saveButton.clicked.connect(self._saveItem) + self.colButton.clicked.connect(self._selectColour) + + self.mainForm.addWidget(self.newButton) + self.mainForm.addWidget(self.delButton) + self.mainForm.addStretch(1) + self.mainForm.addWidget(QLabel("Name")) + self.mainForm.addWidget(self.editName) + self.mainForm.addWidget(self.colButton) + self.mainForm.addStretch(1) + self.mainForm.addWidget(self.saveButton) + + self.mainBox.addWidget(self.listBox) + self.mainBox.addLayout(self.mainForm) + + self.setLayout(self.mainBox) + + return + + def getNewList(self): + if self.colChanged: + newList = [] + for n in range(self.listBox.count()): + nItem = self.listBox.item(n) + nName = nItem.text() + nImg = nItem.icon().pixmap(16,16).toImage() + nCol = QColor(nImg.pixel(7,7)) + newList.append((nName,nCol.red(),nCol.green(),nCol.blue())) + return newList + return self.colList + + ## + # User Actions + ## + + def _selectColour(self): + logger.verbose("Item colour button clicked") + selImg = self.colButton.icon().pixmap(16,16).toImage() + selCol = QColor(selImg.pixel(7,7)) + newCol = QColorDialog.getColor(selCol, self, "Select Colour", QColorDialog.DontUseNativeDialog) + if newCol: + colPixmap = QPixmap(16,16) + colPixmap.fill(newCol) + self.colButton.setIcon(QIcon(colPixmap)) + self.colButton.setIconSize(colPixmap.rect().size()) + return + + def _newItem(self): + self._addItem("New Item", 0, 0, 0) + return + + def _saveItem(self): + logger.verbose("Item save button clicked") + selItem = self._getSelectedItem() + if selItem is not None: + selItem.setText(self.editName.text().strip()) + selItem.setIcon(self.colButton.icon()) + self.colChanged = True + return + + def _addItem(self, iName, iR, iG, iB): + logger.verbose("New item button clicked") + newIcon = QPixmap(16,16) + newIcon.fill(QColor(iR,iG,iB)) + newItem = QListWidgetItem() + newItem.setText(iName) + newItem.setIcon(QIcon(newIcon)) + self.listBox.addItem(newItem) + return + + def _selectedItem(self): + logger.verbose("Item selected") + selItem = self._getSelectedItem() + if selItem is not None: + self.editName.setText(selItem.text()) + self.colButton.setIcon(selItem.icon()) + return + + ## + # Internal Functions + ## + + def _getSelectedItem(self): + selItem = self.listBox.selectedItems() + if len(selItem) == 0: + return None + if isinstance(selItem[0], QListWidgetItem): + return selItem[0] + return None + +# END Class GuiProjectEditStatus diff --git a/nw/project/project.py b/nw/project/project.py index a2462d4d..2236592d 100644 --- a/nw/project/project.py +++ b/nw/project/project.py @@ -353,6 +353,14 @@ class NWProject(): self.setProjectChanged(True) return True + def setStatusColours(self, newCols): + self.setProjectChanged(True) + return + + def setImportColours(self, newCols): + self.setProjectChanged(True) + return + def setProjectChanged(self, bValue): self.projChanged = bValue self.theParent.setProjectStatus(self.projChanged)