Complete the needed GUI class changes for the new NWStatus class

This commit is contained in:
Veronica Berglyd Olsen
2022-04-05 23:13:39 +02:00
parent 40e7055f16
commit ddd8b60816
6 changed files with 135 additions and 83 deletions
+34 -11
View File
@@ -687,6 +687,8 @@ class NWProject():
if len(aKey) > 0:
self._packProjectValue(xTitleFmt, aKey, aValue)
# Save Status/Importance
self.countStatus()
xStatus = etree.SubElement(xSettings, "status")
self.statusItems.packXML(xStatus)
xStatus = etree.SubElement(xSettings, "importance")
@@ -1018,7 +1020,8 @@ class NWProject():
if self.projSpell != theLang:
self.projSpell = theLang
self.setProjectChanged(True)
return True
return True
return False
def setProjectLang(self, theLang):
"""Set the project-specific language.
@@ -1065,26 +1068,46 @@ class NWProject():
self.setProjectChanged(True)
return True
def setStatusColours(self, newCols):
def setStatusColours(self, newCols, delCols):
"""Update the list of novel file status flags. Also iterate
through the project and replace keys that have been renamed.
"""
replaceMap = self.statusItems.setNewEntries(newCols)
for nwItem in self.projTree:
if nwItem.itemStatus in replaceMap:
nwItem.setStatus(replaceMap[nwItem.itemStatus])
if not (newCols or delCols):
return False
for entry in newCols:
key = entry.get("key", None)
name = entry.get("name", "")
cols = entry.get("cols", (100, 100, 100))
if name:
self.statusItems.write(key, name, cols)
for key in delCols:
self.statusItems.remove(key)
self.setProjectChanged(True)
return True
def setImportColours(self, newCols):
def setImportColours(self, newCols, delCols):
"""Update the list of note file importance flags. Also iterate
through the project and replace keys that have been renamed.
"""
replaceMap = self.importItems.setNewEntries(newCols)
for nwItem in self.projTree:
if nwItem.itemImport in replaceMap:
nwItem.setImport(replaceMap[nwItem.itemImport])
if not (newCols or delCols):
return False
for entry in newCols:
key = entry.get("key", None)
name = entry.get("name", "")
cols = entry.get("cols", (100, 100, 100))
if name:
self.importItems.write(key, name, cols)
for key in delCols:
self.importItems.remove(key)
self.setProjectChanged(True)
return True
def setAutoReplace(self, autoReplace):
+28 -16
View File
@@ -4,7 +4,8 @@ novelWriter Project Item Status Class
Data class for the status/importance settings of a project item
File History:
Created: 2019-05-19 [0.1.3]
Created: 2019-05-19 [0.1.3]
Rewritten: 2022-04-05 [1.7a0]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
@@ -31,7 +32,7 @@ from lxml import etree
from PyQt5.QtGui import QIcon, QPixmap, QColor
from novelwriter.common import checkInt, getMinMax, simplified
from novelwriter.common import checkInt, minmax, simplified
logger = logging.getLogger(__name__)
@@ -52,7 +53,7 @@ class NWStatus():
return
def write(self, key, name, cols):
def write(self, key, name, cols, count=None):
"""Add or update a status entry. If the key is invalid, a new
key is generated.
"""
@@ -67,7 +68,8 @@ class NWStatus():
pixmap.fill(QColor(*cols))
name = simplified(name)
count = self._store[key]["count"] if key in self._store else 0
if count is None:
count = self._store[key]["count"] if key in self._store else 0
self._store[key] = {
"name": name,
@@ -82,6 +84,20 @@ class NWStatus():
return key
def remove(self, key):
"""Remove an entry in the list, but not if the count is larger
than 0.
"""
if key not in self._store:
return False
if self._store[key]["count"] > 0:
return False
del self._reverse[self._store[key]["name"]]
del self._store[key]
return True
def check(self, value):
"""Check the key against the stored status names.
"""
@@ -134,12 +150,6 @@ class NWStatus():
else:
return self._defaultIcon
def setNewEntries(self, newList):
"""Update the list of entries after they have been modified by
the GUI tool.
"""
return {}
def resetCounts(self):
"""Clear the counts of references to the status entries.
"""
@@ -161,6 +171,7 @@ class NWStatus():
for key, data in self._store.items():
xSub = etree.SubElement(xParent, "entry", attrib={
"key": key,
"count": str(data["count"]),
"red": str(data["cols"][0]),
"green": str(data["cols"][1]),
"blue": str(data["cols"][2]),
@@ -177,12 +188,13 @@ class NWStatus():
self._default = None
for xChild in xParent:
name = xChild.text.strip()
key = xChild.attrib.get("key", None)
cR = getMinMax(checkInt(xChild.attrib.get("red", 100), 100), 0, 255)
cG = getMinMax(checkInt(xChild.attrib.get("green", 100), 100), 0, 255)
cB = getMinMax(checkInt(xChild.attrib.get("blue", 100), 100), 0, 255)
self.write(key, name, (cR, cG, cB))
key = xChild.attrib.get("key", None)
name = xChild.text.strip()
count = max(checkInt(xChild.attrib.get("count", 0), 0), 0)
red = minmax(checkInt(xChild.attrib.get("red", 100), 100), 0, 255)
green = minmax(checkInt(xChild.attrib.get("green", 100), 100), 0, 255)
blue = minmax(checkInt(xChild.attrib.get("blue", 100), 100), 0, 255)
self.write(key, name, (red, green, blue), count)
return True