From 18878dd19b9a019e79a3ed37c8643dc2fba47753 Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sat, 29 Oct 2022 17:55:45 +0200
Subject: [PATCH 1/5] Change how item data is stored in the project tree
---
novelwriter/gui/projtree.py | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py
index 19d8af38..b80a6352 100644
--- a/novelwriter/gui/projtree.py
+++ b/novelwriter/gui/projtree.py
@@ -417,11 +417,15 @@ class GuiProjectToolBar(QWidget):
class GuiProjectTree(QTreeWidget):
+ C_DATA = 0
C_NAME = 0
C_COUNT = 1
C_ACTIVE = 2
C_STATUS = 3
+ D_HANDLE = Qt.UserRole
+ D_WORDS = Qt.UserRole + 1
+
def __init__(self, projView):
super().__init__(parent=projView)
@@ -974,10 +978,10 @@ class GuiProjectTree(QTreeWidget):
if countChildren:
for i in range(tItem.childCount()):
- newCount += int(tItem.child(i).data(self.C_COUNT, Qt.UserRole))
+ newCount += int(tItem.child(i).data(self.C_DATA, self.D_WORDS))
tItem.setText(self.C_COUNT, f"{newCount:n}")
- tItem.setData(self.C_COUNT, Qt.UserRole, int(newCount))
+ tItem.setData(self.C_DATA, self.D_WORDS, int(newCount))
pItem = tItem.parent()
if pItem is None:
@@ -986,8 +990,8 @@ class GuiProjectTree(QTreeWidget):
pCount = 0
pHandle = None
for i in range(pItem.childCount()):
- pCount += int(pItem.child(i).data(self.C_COUNT, Qt.UserRole))
- pHandle = pItem.data(self.C_NAME, Qt.UserRole)
+ pCount += int(pItem.child(i).data(self.C_DATA, self.D_WORDS))
+ pHandle = pItem.data(self.C_DATA, self.D_HANDLE)
if pHandle:
if self.theProject.tree.checkType(pHandle, nwItemType.FILE):
@@ -1038,8 +1042,8 @@ class GuiProjectTree(QTreeWidget):
return False
dstIndex = min(max(0, dstIndex), dstItem.childCount())
- sHandle = srcItem.data(self.C_NAME, Qt.UserRole)
- dHandle = dstItem.data(self.C_NAME, Qt.UserRole)
+ sHandle = srcItem.data(self.C_DATA, self.D_HANDLE)
+ dHandle = dstItem.data(self.C_DATA, self.D_HANDLE)
logger.debug("Moving item '%s' back to '%s', index %d", sHandle, dHandle, dstIndex)
wCount = self._getItemWordCount(sHandle)
@@ -1063,7 +1067,7 @@ class GuiProjectTree(QTreeWidget):
"""
selItem = self.selectedItems()
if selItem:
- return selItem[0].data(self.C_NAME, Qt.UserRole)
+ return selItem[0].data(self.C_DATA, self.D_HANDLE)
return None
@@ -1149,7 +1153,7 @@ class GuiProjectTree(QTreeWidget):
hasChild = False
selItem = self.itemAt(clickPos)
if isinstance(selItem, QTreeWidgetItem):
- tHandle = selItem.data(self.C_NAME, Qt.UserRole)
+ tHandle = selItem.data(self.C_DATA, self.D_HANDLE)
tItem = self.theProject.tree[tHandle]
hasChild = selItem.childCount() > 0
@@ -1308,7 +1312,7 @@ class GuiProjectTree(QTreeWidget):
if not isinstance(selItem, QTreeWidgetItem):
return
- tHandle = selItem.data(self.C_NAME, Qt.UserRole)
+ tHandle = selItem.data(self.C_DATA, self.D_HANDLE)
tItem = self.theProject.tree[tHandle]
if tItem is None:
return
@@ -1367,7 +1371,7 @@ class GuiProjectTree(QTreeWidget):
# Update item parent handle in the project, make sure meta data
# is updated accordingly, and update word count
- pHandle = trItemP.data(self.C_NAME, Qt.UserRole)
+ pHandle = trItemP.data(self.C_DATA, self.D_HANDLE)
nwItemS.setParent(pHandle)
trItemP.setExpanded(True)
logger.debug("The parent of item '%s' has been changed to '%s'", tHandle, pHandle)
@@ -1397,7 +1401,7 @@ class GuiProjectTree(QTreeWidget):
tItem = self._getTreeItem(tHandle)
if tItem is None:
return 0
- return int(tItem.data(self.C_COUNT, Qt.UserRole))
+ return int(tItem.data(self.C_DATA, self.D_WORDS))
def _getTreeItem(self, tHandle):
"""Return the QTreeWidgetItem of a given item handle.
@@ -1617,7 +1621,7 @@ class GuiProjectTree(QTreeWidget):
"""This is a recursive function returning all items in a tree
starting at a given QTreeWidgetItem.
"""
- tHandle = tItem.data(self.C_NAME, Qt.UserRole)
+ tHandle = tItem.data(self.C_DATA, self.D_HANDLE)
cCount = tItem.childCount()
# Update tree-related meta data
@@ -1650,8 +1654,8 @@ class GuiProjectTree(QTreeWidget):
newItem.setTextAlignment(self.C_ACTIVE, Qt.AlignLeft)
newItem.setTextAlignment(self.C_STATUS, Qt.AlignLeft)
- newItem.setData(self.C_NAME, Qt.UserRole, tHandle)
- newItem.setData(self.C_COUNT, Qt.UserRole, 0)
+ newItem.setData(self.C_DATA, self.D_HANDLE, tHandle)
+ newItem.setData(self.C_DATA, self.D_WORDS, 0)
self._treeMap[tHandle] = newItem
if pHandle is None:
From ea59379479f4f21d7727edd007f5862e6df5708c Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sun, 30 Oct 2022 01:20:31 +0200
Subject: [PATCH 2/5] Add new checkbox icons
---
.../assets/icons/typicons_dark/icons.conf | 6 ++--
.../typicons_dark/mixed_input-checked.svg | 35 +++++++++++++++++++
.../icons/typicons_dark/mixed_input-none.svg | 31 ++++++++++++++++
.../typicons_dark/mixed_input-unchecked.svg | 35 +++++++++++++++++++
.../assets/icons/typicons_light/icons.conf | 6 ++--
.../typicons_light/mixed_input-checked.svg | 35 +++++++++++++++++++
.../icons/typicons_light/mixed_input-none.svg | 31 ++++++++++++++++
.../typicons_light/mixed_input-unchecked.svg | 35 +++++++++++++++++++
8 files changed, 210 insertions(+), 4 deletions(-)
create mode 100644 novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg
create mode 100644 novelwriter/assets/icons/typicons_dark/mixed_input-none.svg
create mode 100644 novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg
create mode 100644 novelwriter/assets/icons/typicons_light/mixed_input-checked.svg
create mode 100644 novelwriter/assets/icons/typicons_light/mixed_input-none.svg
create mode 100644 novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg
diff --git a/novelwriter/assets/icons/typicons_dark/icons.conf b/novelwriter/assets/icons/typicons_dark/icons.conf
index 521e9ee8..fa8b8619 100644
--- a/novelwriter/assets/icons/typicons_dark/icons.conf
+++ b/novelwriter/assets/icons/typicons_dark/icons.conf
@@ -21,7 +21,7 @@ backward = typ_chevron-left.svg
bookmark = typ_bookmark.svg
bullet-off = typ_media-record-outline.svg
bullet-on = typ_media-record.svg
-check = typ_tick.svg
+checked = mixed_input-checked.svg
close = typ_times.svg
cls_archive = typ_delete.svg
cls_character = typ_user.svg
@@ -41,13 +41,14 @@ forward = typ_chevron-right.svg
maximise = typ_arrow-maximise.svg
menu = typ_th-menu.svg
minimise = typ_arrow-minimise.svg
+noncheckable = mixed_input-none.svg
proj_chapter = mixed_document-chapter.svg
proj_details = typ_th-list-grey.svg
proj_document = typ_document-text.svg
proj_folder = typ_folder.svg
proj_note = mixed_document-note.svg
-proj_section = mixed_document-section.svg
proj_scene = mixed_document-scene.svg
+proj_section = mixed_document-section.svg
proj_stats = typ_chart-bar-grey.svg
proj_title = mixed_document-title.svg
reference = typ_at.svg
@@ -70,6 +71,7 @@ status_stats = typ_chart-bar-grey.svg
status_time = typ_stopwatch-grey.svg
sticky-off = typ_pin-outline.svg
sticky-on = typ_pin.svg
+unchecked = mixed_input-unchecked.svg
up = typ_chevron-up.svg
view_build = typ_export.svg
view_editor = mixed_edit.svg
diff --git a/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg b/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg
new file mode 100644
index 00000000..e6236d3c
--- /dev/null
+++ b/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg
@@ -0,0 +1,35 @@
+
+
diff --git a/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg b/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg
new file mode 100644
index 00000000..a34897ee
--- /dev/null
+++ b/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg
@@ -0,0 +1,31 @@
+
+
diff --git a/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg b/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg
new file mode 100644
index 00000000..65ec7feb
--- /dev/null
+++ b/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg
@@ -0,0 +1,35 @@
+
+
diff --git a/novelwriter/assets/icons/typicons_light/icons.conf b/novelwriter/assets/icons/typicons_light/icons.conf
index 1b6b1348..5212b685 100644
--- a/novelwriter/assets/icons/typicons_light/icons.conf
+++ b/novelwriter/assets/icons/typicons_light/icons.conf
@@ -21,7 +21,7 @@ backward = typ_chevron-left.svg
bookmark = typ_bookmark.svg
bullet-off = typ_media-record-outline.svg
bullet-on = typ_media-record.svg
-check = typ_tick.svg
+checked = mixed_input-checked.svg
close = typ_times.svg
cls_archive = typ_delete.svg
cls_character = typ_user.svg
@@ -41,13 +41,14 @@ forward = typ_chevron-right.svg
maximise = typ_arrow-maximise.svg
menu = typ_th-menu.svg
minimise = typ_arrow-minimise.svg
+noncheckable = mixed_input-none.svg
proj_chapter = mixed_document-chapter.svg
proj_details = typ_th-list-grey.svg
proj_document = typ_document-text.svg
proj_folder = typ_folder.svg
proj_note = mixed_document-note.svg
-proj_section = mixed_document-section.svg
proj_scene = mixed_document-scene.svg
+proj_section = mixed_document-section.svg
proj_stats = typ_chart-bar-grey.svg
proj_title = mixed_document-title.svg
reference = typ_at.svg
@@ -70,6 +71,7 @@ status_stats = typ_chart-bar-grey.svg
status_time = typ_stopwatch-grey.svg
sticky-off = typ_pin-outline.svg
sticky-on = typ_pin.svg
+unchecked = mixed_input-unchecked.svg
up = typ_chevron-up.svg
view_build = typ_export.svg
view_editor = mixed_edit.svg
diff --git a/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg b/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg
new file mode 100644
index 00000000..d41ac684
--- /dev/null
+++ b/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg
@@ -0,0 +1,35 @@
+
+
diff --git a/novelwriter/assets/icons/typicons_light/mixed_input-none.svg b/novelwriter/assets/icons/typicons_light/mixed_input-none.svg
new file mode 100644
index 00000000..dde0c2cd
--- /dev/null
+++ b/novelwriter/assets/icons/typicons_light/mixed_input-none.svg
@@ -0,0 +1,31 @@
+
+
diff --git a/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg b/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg
new file mode 100644
index 00000000..e3bb7a58
--- /dev/null
+++ b/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg
@@ -0,0 +1,35 @@
+
+
From e80536405e59a00b17921250e06cf96a9bd6815e Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sun, 30 Oct 2022 01:21:07 +0200
Subject: [PATCH 3/5] Replace active status icons in project tree
---
.../assets/icons/typicons_dark/typ_tick.svg | 31 -------------------
.../assets/icons/typicons_light/typ_tick.svg | 31 -------------------
novelwriter/gui/projtree.py | 7 +++--
novelwriter/gui/theme.py | 6 ++--
4 files changed, 8 insertions(+), 67 deletions(-)
delete mode 100644 novelwriter/assets/icons/typicons_dark/typ_tick.svg
delete mode 100644 novelwriter/assets/icons/typicons_light/typ_tick.svg
diff --git a/novelwriter/assets/icons/typicons_dark/typ_tick.svg b/novelwriter/assets/icons/typicons_dark/typ_tick.svg
deleted file mode 100644
index 84383114..00000000
--- a/novelwriter/assets/icons/typicons_dark/typ_tick.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
diff --git a/novelwriter/assets/icons/typicons_light/typ_tick.svg b/novelwriter/assets/icons/typicons_light/typ_tick.svg
deleted file mode 100644
index 1c24677a..00000000
--- a/novelwriter/assets/icons/typicons_light/typ_tick.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py
index b80a6352..0055340a 100644
--- a/novelwriter/gui/projtree.py
+++ b/novelwriter/gui/projtree.py
@@ -951,10 +951,13 @@ class GuiProjectTree(QTreeWidget):
trItem.setToolTip(self.C_STATUS, itemStatus)
if nwItem.isFileType():
- iconName = "check" if nwItem.isActive else "cross"
+ iconName = "checked" if nwItem.isActive else "unchecked"
toolTip = self._lblActive if nwItem.isActive else self._lblInactive
- trItem.setIcon(self.C_ACTIVE, self.mainTheme.getIcon(iconName))
trItem.setToolTip(self.C_ACTIVE, toolTip)
+ else:
+ iconName = "noncheckable"
+
+ trItem.setIcon(self.C_ACTIVE, self.mainTheme.getIcon(iconName))
if self.mainConf.emphLabels and nwItem.isDocumentLayout():
trFont = trItem.font(self.C_NAME)
diff --git a/novelwriter/gui/theme.py b/novelwriter/gui/theme.py
index 93c26440..570b06b2 100644
--- a/novelwriter/gui/theme.py
+++ b/novelwriter/gui/theme.py
@@ -448,9 +448,9 @@ class GuiIcons:
"view_editor", "view_novel", "view_outline",
# General Button Icons
- "add", "backward", "bookmark", "check", "close", "cross", "down", "edit", "forward",
- "maximise", "menu", "minimise", "reference", "refresh", "remove", "search_replace",
- "search", "settings", "up",
+ "add", "backward", "bookmark", "checked", "close", "cross", "down", "edit", "forward",
+ "maximise", "menu", "minimise", "noncheckable", "reference", "refresh", "remove",
+ "search_replace", "search", "settings", "unchecked", "up",
# Switches
"sticky-on", "sticky-off",
From dbade05e46c54c6cb3e241fdefa5fab7be74607a Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sun, 30 Oct 2022 02:33:00 +0200
Subject: [PATCH 4/5] Generate nicer status icons
---
novelwriter/core/status.py | 47 ++++++++++++++++++++++++++------------
1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/novelwriter/core/status.py b/novelwriter/core/status.py
index a379f911..b84a3690 100644
--- a/novelwriter/core/status.py
+++ b/novelwriter/core/status.py
@@ -26,11 +26,13 @@ along with this program. If not, see .
import random
import logging
+
import novelwriter
from lxml import etree
-from PyQt5.QtGui import QIcon, QPixmap, QColor
+from PyQt5.QtGui import QIcon, QPainter, QPainterPath, QPixmap, QColor
+from PyQt5.QtCore import QRectF, Qt
from novelwriter.common import checkInt, minmax, simplified
@@ -49,10 +51,15 @@ class NWStatus:
self._reverse = {}
self._default = None
- self._iconSize = novelwriter.CONFIG.pxInt(32)
- pixmap = QPixmap(self._iconSize, self._iconSize)
- pixmap.fill(QColor(100, 100, 100))
- self._defaultIcon = QIcon(pixmap)
+ self._iPX = novelwriter.CONFIG.pxInt(24)
+
+ pA = novelwriter.CONFIG.pxInt(2)
+ pB = novelwriter.CONFIG.pxInt(20)
+ pR = float(novelwriter.CONFIG.pxInt(4))
+ self._iconPath = QPainterPath()
+ self._iconPath.addRoundedRect(QRectF(pA, pA, pB, pB), pR, pR)
+
+ self._defaultIcon = self._createIcon([100, 100, 100])
if self._type == self.STATUS:
self._prefix = "s"
@@ -63,19 +70,16 @@ class NWStatus:
return
- def write(self, key, name, cols, count=None):
+ def write(self, key, name, col, count=None):
"""Add or update a status entry. If the key is invalid, a new
key is generated.
"""
if not self._isKey(key):
key = self._newKey()
- if not isinstance(cols, tuple):
- cols = (100, 100, 100)
- if len(cols) != 3:
- cols = (100, 100, 100)
-
- pixmap = QPixmap(self._iconSize, self._iconSize)
- pixmap.fill(QColor(*cols))
+ if not isinstance(col, tuple):
+ col = (100, 100, 100)
+ if len(col) != 3:
+ col = (100, 100, 100)
name = simplified(name)
if count is None:
@@ -83,8 +87,8 @@ class NWStatus:
self._store[key] = {
"name": name,
- "icon": QIcon(pixmap),
- "cols": cols,
+ "icon": self._createIcon(col),
+ "cols": col,
"count": count,
}
self._reverse[name] = key
@@ -267,6 +271,19 @@ class NWStatus:
return False
return True
+ def _createIcon(self, col):
+ """Generate an icon for a status label.
+ """
+ pixmap = QPixmap(self._iPX, self._iPX)
+ pixmap.fill(Qt.transparent)
+
+ painter = QPainter(pixmap)
+ painter.setRenderHint(QPainter.Antialiasing)
+ painter.fillPath(self._iconPath, QColor(*col))
+ painter.end()
+
+ return QIcon(pixmap)
+
##
# Iterator Bits
##
From 80496ab1ed6113576ee6fa0a38a23d60bc8bab8b Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sun, 30 Oct 2022 15:16:39 +0100
Subject: [PATCH 5/5] Improve active/inactive icons again
---
.../typicons_dark/mixed_input-checked.svg | 26 ++++++++++-------
.../icons/typicons_dark/mixed_input-none.svg | 29 ++++++++++++++-----
.../typicons_dark/mixed_input-unchecked.svg | 26 ++++++++++-------
.../typicons_light/mixed_input-checked.svg | 26 ++++++++++-------
.../icons/typicons_light/mixed_input-none.svg | 29 ++++++++++++++-----
.../typicons_light/mixed_input-unchecked.svg | 26 ++++++++++-------
novelwriter/core/status.py | 1 -
setup.py | 1 +
8 files changed, 103 insertions(+), 61 deletions(-)
diff --git a/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg b/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg
index e6236d3c..a044fbaa 100644
--- a/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg
+++ b/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg
@@ -5,13 +5,15 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.2"
width="24"
height="24"
+ version="1.2"
viewBox="0 0 24 24"
- id="svg2803">
+ id="svg2287">
+
+ id="metadata2281">
@@ -22,14 +24,16 @@
-
+ d="m17.714 22h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
+ fill="#848484"
+ stroke-width="1.4286"
+ id="path2283" />
+ d="m19.02 3.3503c-0.60933 0.010623-1.2003 0.31545-1.5586 0.86719l-5.0977 7.8477-2.3672-3.6445c-0.57329-0.88278-1.7442-1.1319-2.627-0.55859-0.88278 0.57329-1.1319 1.7461-0.55859 2.6289l3.9199 6.0391c0.38514 0.59307 1.0409 0.88965 1.6973 0.85352 0.03023-2.78e-4 0.05972-0.0041 0.08984-0.0059 0.0556-0.0057 0.11074-0.0088 0.16602-0.01953 0.52104-0.07621 1.0077-0.36147 1.3184-0.83984l6.6445-10.23c0.57329-0.88278 0.32419-2.0556-0.55859-2.6289-0.33104-0.21498-0.70276-0.31497-1.0684-0.30859z"
+ fill="#9c9"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="1.111"
+ id="path2285" />
diff --git a/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg b/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg
index a34897ee..105e1d8f 100644
--- a/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg
+++ b/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg
@@ -5,13 +5,15 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.2"
width="24"
height="24"
+ version="1.2"
viewBox="0 0 24 24"
- id="svg2803">
+ id="svg2931">
+
+ id="metadata2925">
@@ -22,10 +24,21 @@
-
+ d="m2 17.714v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h11.429c2.3629 0 4.2857 1.9229 4.2857 4.2857v7.1429c0 0.79-0.64 1.4286-1.4286 1.4286-0.78857 0-1.4286-0.63857-1.4286-1.4286v-7.1429c0-0.78857-0.64143-1.4286-1.4286-1.4286h-11.429c-0.78714 0-1.4286 0.64-1.4286 1.4286v11.429c0 0.78857 0.64143 1.4286 1.4286 1.4286h4.2857c0.78857 0 1.4286 0.63857 1.4286 1.4286s-0.64 1.4286-1.4286 1.4286h-4.2857c-2.3629 0-4.2857-1.9229-4.2857-4.2857zm15.714 4.2857h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
+ fill="#848484"
+ stroke-width="1.4286"
+ id="path2927" />
+
diff --git a/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg b/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg
index 65ec7feb..b5ee8b37 100644
--- a/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg
+++ b/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg
@@ -5,13 +5,15 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.2"
width="24"
height="24"
+ version="1.2"
viewBox="0 0 24 24"
- id="svg2803">
+ id="svg3574">
+
+ id="metadata3568">
@@ -22,14 +24,16 @@
-
+ d="m17.714 22h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
+ fill="#848484"
+ stroke-width="1.4286"
+ id="path3570" />
+ d="m17.99 3.3379c-0.48501 0.025418-0.96034 0.23584-1.3125 0.62695l-4.6777 5.1953-1.332-1.4785c-0.70433-0.78223-1.9014-0.84495-2.6836-0.14062-0.78223 0.70433-0.84495 1.9014-0.14062 2.6836l1.5996 1.7754-1.5977 1.7754c-0.70433 0.78223-0.64161 1.9793 0.14062 2.6836 0.78223 0.70433 1.9773 0.64161 2.6816-0.14062l1.332-1.4785 1.332 1.4785c0.70433 0.78224 1.9014 0.84495 2.6836 0.14062 0.78223-0.70433 0.84495-1.9014 0.14062-2.6836l-1.5996-1.7754 4.9453-5.4922c0.70433-0.78223 0.64161-1.9793-0.14062-2.6836-0.39112-0.35216-0.88608-0.51175-1.3711-0.48633z"
+ fill="#d64848"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="1.111"
+ id="path3572" />
diff --git a/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg b/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg
index d41ac684..8e42a8b6 100644
--- a/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg
+++ b/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg
@@ -5,13 +5,15 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.2"
width="24"
height="24"
+ version="1.2"
viewBox="0 0 24 24"
- id="svg2803">
+ id="svg879">
+
+ id="metadata873">
@@ -22,14 +24,16 @@
-
+ d="m17.714 22h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
+ fill="#333"
+ stroke-width="1.4286"
+ id="path875" />
+ d="m19.02 3.3503c-0.60933 0.010623-1.2003 0.31545-1.5586 0.86719l-5.0977 7.8477-2.3672-3.6445c-0.57329-0.88278-1.7442-1.1319-2.627-0.55859-0.88278 0.57329-1.1319 1.7461-0.55859 2.6289l3.9199 6.0391c0.38514 0.59307 1.0409 0.88965 1.6973 0.85352 0.03023-2.78e-4 0.05972-0.0041 0.08984-0.0059 0.0556-0.0057 0.11074-0.0088 0.16602-0.01953 0.52104-0.07621 1.0077-0.36147 1.3184-0.83984l6.6445-10.23c0.57329-0.88278 0.32419-2.0556-0.55859-2.6289-0.33104-0.21498-0.70276-0.31497-1.0684-0.30859z"
+ fill="#718c00"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="1.111"
+ id="path877" />
diff --git a/novelwriter/assets/icons/typicons_light/mixed_input-none.svg b/novelwriter/assets/icons/typicons_light/mixed_input-none.svg
index dde0c2cd..f80dd7ff 100644
--- a/novelwriter/assets/icons/typicons_light/mixed_input-none.svg
+++ b/novelwriter/assets/icons/typicons_light/mixed_input-none.svg
@@ -5,13 +5,15 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.2"
width="24"
height="24"
+ version="1.2"
viewBox="0 0 24 24"
- id="svg2803">
+ id="svg973">
+
+ id="metadata967">
@@ -22,10 +24,21 @@
-
+ d="m2 17.714v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h11.429c2.3629 0 4.2857 1.9229 4.2857 4.2857v7.1429c0 0.79-0.64 1.4286-1.4286 1.4286-0.78857 0-1.4286-0.63857-1.4286-1.4286v-7.1429c0-0.78857-0.64143-1.4286-1.4286-1.4286h-11.429c-0.78714 0-1.4286 0.64-1.4286 1.4286v11.429c0 0.78857 0.64143 1.4286 1.4286 1.4286h4.2857c0.78857 0 1.4286 0.63857 1.4286 1.4286s-0.64 1.4286-1.4286 1.4286h-4.2857c-2.3629 0-4.2857-1.9229-4.2857-4.2857zm15.714 4.2857h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
+ fill="#333"
+ stroke-width="1.4286"
+ id="path969" />
+
diff --git a/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg b/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg
index e3bb7a58..0bd5f6dc 100644
--- a/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg
+++ b/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg
@@ -5,13 +5,15 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- version="1.2"
width="24"
height="24"
+ version="1.2"
viewBox="0 0 24 24"
- id="svg2803">
+ id="svg1616">
+
+ id="metadata1610">
@@ -22,14 +24,16 @@
-
+ d="m17.714 22h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
+ fill="#333"
+ stroke-width="1.4286"
+ id="path1612" />
+ d="m17.99 3.3379c-0.48501 0.025418-0.96034 0.23584-1.3125 0.62695l-4.6777 5.1953-1.332-1.4785c-0.70433-0.78223-1.9014-0.84495-2.6836-0.14062-0.78223 0.70433-0.84495 1.9014-0.14062 2.6836l1.5996 1.7754-1.5977 1.7754c-0.70433 0.78223-0.64161 1.9793 0.14062 2.6836 0.78223 0.70433 1.9773 0.64161 2.6816-0.14062l1.332-1.4785 1.332 1.4785c0.70433 0.78224 1.9014 0.84495 2.6836 0.14062 0.78223-0.70433 0.84495-1.9014 0.14062-2.6836l-1.5996-1.7754 4.9453-5.4922c0.70433-0.78223 0.64161-1.9793-0.14062-2.6836-0.39112-0.35216-0.88608-0.51175-1.3711-0.48633z"
+ fill="#c82829"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="1.111"
+ id="path1614" />
diff --git a/novelwriter/core/status.py b/novelwriter/core/status.py
index b84a3690..c466461e 100644
--- a/novelwriter/core/status.py
+++ b/novelwriter/core/status.py
@@ -26,7 +26,6 @@ along with this program. If not, see .
import random
import logging
-
import novelwriter
from lxml import etree
diff --git a/setup.py b/setup.py
index a0bb9b03..675a29c8 100755
--- a/setup.py
+++ b/setup.py
@@ -131,6 +131,7 @@ def makeCheckSum(sumFile, cwd=None):
except Exception as exc:
print("Could not generate sha256 file")
print(str(exc))
+ return ""
return shaFile