From 9529a79707335883fc4fe9fa348ad94df88361c1 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 8 Jan 2023 17:16:27 +0100 Subject: [PATCH 1/2] Clear the staus/import form when no item is selected (#1290) --- novelwriter/dialogs/projsettings.py | 57 ++++++++++++++++++----------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index 0688bb70..ff39c835 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -338,16 +338,18 @@ class GuiProjectEditStatus(QWidget): self.editName = QLineEdit() self.editName.setMaxLength(40) - self.editName.setEnabled(False) self.editName.setPlaceholderText(self.tr("Select item to edit")) + self.editName.setEnabled(False) self.colPixmap = QPixmap(self.iPx, self.iPx) self.colPixmap.fill(QColor(100, 100, 100)) self.colButton = QPushButton(QIcon(self.colPixmap), self.tr("Colour")) self.colButton.setIconSize(self.colPixmap.rect().size()) + self.colButton.setEnabled(False) self.colButton.clicked.connect(self._selectColour) self.saveButton = QPushButton(self.tr("Save")) + self.saveButton.setEnabled(False) self.saveButton.clicked.connect(self._saveItem) # Assemble @@ -446,14 +448,15 @@ class GuiProjectEditStatus(QWidget): """Save changes made to a status item. """ selItem = self._getSelectedItem() - if selItem is not None: - selItem.setText(self.COL_LABEL, simplified(self.editName.text())) - selItem.setIcon(self.COL_LABEL, self.colButton.icon()) - selItem.setData(self.COL_LABEL, self.COL_ROLE, ( - self.selColour.red(), self.selColour.green(), self.selColour.blue() - )) - self.editName.setEnabled(False) - self.colChanged = True + if selItem is None: + return + + selItem.setText(self.COL_LABEL, simplified(self.editName.text())) + selItem.setIcon(self.COL_LABEL, self.colButton.icon()) + selItem.setData(self.COL_LABEL, self.COL_ROLE, ( + self.selColour.red(), self.selColour.green(), self.selColour.blue() + )) + self.colChanged = True return @@ -503,20 +506,32 @@ class GuiProjectEditStatus(QWidget): boxes and button. """ selItem = self._getSelectedItem() - if selItem is None: - return + if isinstance(selItem, QTreeWidgetItem): + cols = selItem.data(self.COL_LABEL, self.COL_ROLE) + name = selItem.text(self.COL_LABEL) - cols = selItem.data(self.COL_LABEL, self.COL_ROLE) - name = selItem.text(self.COL_LABEL) + pixmap = QPixmap(self.iPx, self.iPx) + pixmap.fill(QColor(*cols)) + self.selColour = QColor(*cols) + self.editName.setText(name) + self.colButton.setIcon(QIcon(pixmap)) + self.editName.selectAll() + self.editName.setFocus() - pixmap = QPixmap(self.iPx, self.iPx) - pixmap.fill(QColor(*cols)) - self.selColour = QColor(*cols) - self.editName.setText(name) - self.colButton.setIcon(QIcon(pixmap)) - self.editName.setEnabled(True) - self.editName.selectAll() - self.editName.setFocus() + self.editName.setEnabled(True) + self.colButton.setEnabled(True) + self.saveButton.setEnabled(True) + + else: + pixmap = QPixmap(self.iPx, self.iPx) + pixmap.fill(QColor(100, 100, 100)) + self.selColour = QColor(100, 100, 100) + self.editName.setText("") + self.colButton.setIcon(QIcon(pixmap)) + + self.editName.setEnabled(False) + self.colButton.setEnabled(False) + self.saveButton.setEnabled(False) return From be1894ab97dfcf0990271edfb680253054bdcfdf Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 8 Jan 2023 17:24:36 +0100 Subject: [PATCH 2/2] Clean up the status/import form code a bit --- novelwriter/dialogs/projsettings.py | 119 ++++++++++++++-------------- 1 file changed, 60 insertions(+), 59 deletions(-) diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index ff39c835..be469385 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -26,8 +26,8 @@ along with this program. If not, see . import logging import novelwriter -from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush -from PyQt5.QtCore import Qt, QLocale +from PyQt5.QtGui import QIcon, QPixmap, QColor +from PyQt5.QtCore import Qt, QLocale, pyqtSlot from PyQt5.QtWidgets import ( QColorDialog, QComboBox, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget @@ -300,7 +300,7 @@ class GuiProjectEditStatus(QWidget): self.colDeleted = [] self.colChanged = False - self.selColour = QColor(100, 100, 100) + self.selColour = QColor(100, 100, 100) self.iPx = self.mainTheme.baseIconSize @@ -401,9 +401,10 @@ class GuiProjectEditStatus(QWidget): return [], [] ## - # User Actions + # Private Slots ## + @pyqtSlot() def _selectColour(self): """Open a dialog to select the status icon colour. """ @@ -419,20 +420,20 @@ class GuiProjectEditStatus(QWidget): self.colButton.setIconSize(pixmap.rect().size()) return + @pyqtSlot() def _newItem(self): """Create a new status item. """ - newItem = self._addItem(None, self.tr("New Item"), (100, 100, 100), 0) - newItem.setBackground(self.COL_LABEL, QBrush(QColor(0, 255, 0, 70))) - newItem.setBackground(self.COL_USAGE, QBrush(QColor(0, 255, 0, 70))) + self._addItem(None, self.tr("New Item"), (100, 100, 100), 0) self.colChanged = True return + @pyqtSlot() def _delItem(self): """Delete a status item. """ selItem = self._getSelectedItem() - if selItem is not None: + if isinstance(selItem, QTreeWidgetItem): iRow = self.listBox.indexOfTopLevelItem(selItem) if selItem.data(self.COL_LABEL, self.NUM_ROLE) > 0: self.mainGui.makeAlert(self.tr( @@ -444,66 +445,25 @@ class GuiProjectEditStatus(QWidget): self.colChanged = True return + @pyqtSlot() def _saveItem(self): """Save changes made to a status item. """ selItem = self._getSelectedItem() - if selItem is None: - return - - selItem.setText(self.COL_LABEL, simplified(self.editName.text())) - selItem.setIcon(self.COL_LABEL, self.colButton.icon()) - selItem.setData(self.COL_LABEL, self.COL_ROLE, ( - self.selColour.red(), self.selColour.green(), self.selColour.blue() - )) - self.colChanged = True - - return - - def _addItem(self, key, name, cols, count): - """Add a status item to the list. - """ - pixmap = QPixmap(self.iPx, self.iPx) - pixmap.fill(QColor(*cols)) - - item = QTreeWidgetItem() - item.setText(self.COL_LABEL, name) - item.setIcon(self.COL_LABEL, QIcon(pixmap)) - item.setData(self.COL_LABEL, self.KEY_ROLE, key) - item.setData(self.COL_LABEL, self.COL_ROLE, cols) - item.setData(self.COL_LABEL, self.NUM_ROLE, count) - item.setText(self.COL_USAGE, self._usageString(count)) - - self.listBox.addTopLevelItem(item) - - return item - - def _moveItem(self, step): - """Move and item up or down step. - """ - selItem = self._getSelectedItem() - if selItem is None: - return - - tIndex = self.listBox.indexOfTopLevelItem(selItem) - nChild = self.listBox.topLevelItemCount() - nIndex = tIndex + step - if nIndex < 0 or nIndex >= nChild: - return - - cItem = self.listBox.takeTopLevelItem(tIndex) - self.listBox.insertTopLevelItem(nIndex, cItem) - self.listBox.clearSelection() - - if cItem is not None: - cItem.setSelected(True) - self.colChanged = True + if isinstance(selItem, QTreeWidgetItem): + selItem.setText(self.COL_LABEL, simplified(self.editName.text())) + selItem.setIcon(self.COL_LABEL, self.colButton.icon()) + selItem.setData(self.COL_LABEL, self.COL_ROLE, ( + self.selColour.red(), self.selColour.green(), self.selColour.blue() + )) + self.colChanged = True return + @pyqtSlot() def _selectedItem(self): """Extract the info of a selected item and populate the settings - boxes and button. + boxes and button. If no item is selected, clear the form. """ selItem = self._getSelectedItem() if isinstance(selItem, QTreeWidgetItem): @@ -539,6 +499,47 @@ class GuiProjectEditStatus(QWidget): # Internal Functions ## + def _addItem(self, key, name, cols, count): + """Add a status item to the list. + """ + pixmap = QPixmap(self.iPx, self.iPx) + pixmap.fill(QColor(*cols)) + + item = QTreeWidgetItem() + item.setText(self.COL_LABEL, name) + item.setIcon(self.COL_LABEL, QIcon(pixmap)) + item.setData(self.COL_LABEL, self.KEY_ROLE, key) + item.setData(self.COL_LABEL, self.COL_ROLE, cols) + item.setData(self.COL_LABEL, self.NUM_ROLE, count) + item.setText(self.COL_USAGE, self._usageString(count)) + + self.listBox.addTopLevelItem(item) + + return + + def _moveItem(self, step): + """Move and item up or down step. + """ + selItem = self._getSelectedItem() + if selItem is None: + return + + tIndex = self.listBox.indexOfTopLevelItem(selItem) + nChild = self.listBox.topLevelItemCount() + nIndex = tIndex + step + if nIndex < 0 or nIndex >= nChild: + return + + cItem = self.listBox.takeTopLevelItem(tIndex) + self.listBox.insertTopLevelItem(nIndex, cItem) + self.listBox.clearSelection() + + if cItem is not None: + cItem.setSelected(True) + self.colChanged = True + + return + def _getSelectedItem(self): """Get the currently selected item. """