GUI and code tweaks and fixes (#852)
* Improve format menu header descriptions * Ensure that item status is parsed after item class from XML * Fix column alignment in ToC.txt file * Rename test variable and fix outdated docstring * Fix ToC.txt underline * Rename the Layout label on the item details panel * Add option to emphasise H1 and H2 labels in the project tree * Rename the main column of the novel tree to match project tree * Use the same document icons in the outline as the project tree * Move project tree settings to Project section of config file
This commit is contained in:
committed by
GitHub
parent
f7c768bb91
commit
a9368904e5
+33
-33
@@ -72,8 +72,8 @@ class GuiItemDetails(QWidget):
|
||||
self.labelName.setFont(fntLabel)
|
||||
self.labelName.setAlignment(Qt.AlignLeft | Qt.AlignBaseline)
|
||||
|
||||
self.labelFlag = QLabel("")
|
||||
self.labelFlag.setAlignment(Qt.AlignRight | Qt.AlignBaseline)
|
||||
self.labelIcon = QLabel("")
|
||||
self.labelIcon.setAlignment(Qt.AlignRight | Qt.AlignBaseline)
|
||||
|
||||
self.labelData = QLabel("")
|
||||
self.labelData.setFont(fntValue)
|
||||
@@ -85,8 +85,8 @@ class GuiItemDetails(QWidget):
|
||||
self.statusName.setFont(fntLabel)
|
||||
self.statusName.setAlignment(Qt.AlignLeft)
|
||||
|
||||
self.statusFlag = QLabel("")
|
||||
self.statusFlag.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
self.statusIcon = QLabel("")
|
||||
self.statusIcon.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
|
||||
self.statusData = QLabel("")
|
||||
self.statusData.setFont(fntValue)
|
||||
@@ -97,24 +97,24 @@ class GuiItemDetails(QWidget):
|
||||
self.className.setFont(fntLabel)
|
||||
self.className.setAlignment(Qt.AlignLeft)
|
||||
|
||||
self.classFlag = QLabel("")
|
||||
self.classFlag.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
self.classIcon = QLabel("")
|
||||
self.classIcon.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
|
||||
self.classData = QLabel("")
|
||||
self.classData.setFont(fntValue)
|
||||
self.classData.setAlignment(Qt.AlignLeft)
|
||||
|
||||
# Layout
|
||||
self.layoutName = QLabel(self.tr("Layout"))
|
||||
self.layoutName.setFont(fntLabel)
|
||||
self.layoutName.setAlignment(Qt.AlignLeft)
|
||||
self.usageName = QLabel(self.tr("Usage"))
|
||||
self.usageName.setFont(fntLabel)
|
||||
self.usageName.setAlignment(Qt.AlignLeft)
|
||||
|
||||
self.layoutFlag = QLabel("")
|
||||
self.layoutFlag.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
self.usageIcon = QLabel("")
|
||||
self.usageIcon.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
|
||||
self.layoutData = QLabel("")
|
||||
self.layoutData.setFont(fntValue)
|
||||
self.layoutData.setAlignment(Qt.AlignLeft)
|
||||
self.usageData = QLabel("")
|
||||
self.usageData.setFont(fntValue)
|
||||
self.usageData.setAlignment(Qt.AlignLeft)
|
||||
|
||||
# Character Count
|
||||
self.cCountName = QLabel(" "+self.tr("Characters"))
|
||||
@@ -146,24 +146,24 @@ class GuiItemDetails(QWidget):
|
||||
# Assemble
|
||||
self.mainBox = QGridLayout(self)
|
||||
self.mainBox.addWidget(self.labelName, 0, 0, 1, 1)
|
||||
self.mainBox.addWidget(self.labelFlag, 0, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.labelIcon, 0, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.labelData, 0, 2, 1, 3)
|
||||
|
||||
self.mainBox.addWidget(self.statusName, 1, 0, 1, 1)
|
||||
self.mainBox.addWidget(self.statusFlag, 1, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.statusIcon, 1, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.statusData, 1, 2, 1, 1)
|
||||
self.mainBox.addWidget(self.cCountName, 1, 3, 1, 1)
|
||||
self.mainBox.addWidget(self.cCountData, 1, 4, 1, 1)
|
||||
|
||||
self.mainBox.addWidget(self.className, 2, 0, 1, 1)
|
||||
self.mainBox.addWidget(self.classFlag, 2, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.classIcon, 2, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.classData, 2, 2, 1, 1)
|
||||
self.mainBox.addWidget(self.wCountName, 2, 3, 1, 1)
|
||||
self.mainBox.addWidget(self.wCountData, 2, 4, 1, 1)
|
||||
|
||||
self.mainBox.addWidget(self.layoutName, 3, 0, 1, 1)
|
||||
self.mainBox.addWidget(self.layoutFlag, 3, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.layoutData, 3, 2, 1, 1)
|
||||
self.mainBox.addWidget(self.usageName, 3, 0, 1, 1)
|
||||
self.mainBox.addWidget(self.usageIcon, 3, 1, 1, 1)
|
||||
self.mainBox.addWidget(self.usageData, 3, 2, 1, 1)
|
||||
self.mainBox.addWidget(self.pCountName, 3, 3, 1, 1)
|
||||
self.mainBox.addWidget(self.pCountData, 3, 4, 1, 1)
|
||||
|
||||
@@ -198,15 +198,15 @@ class GuiItemDetails(QWidget):
|
||||
"""
|
||||
self._itemHandle = None
|
||||
|
||||
self.labelFlag.setPixmap(QPixmap(1, 1))
|
||||
self.statusFlag.setPixmap(QPixmap(1, 1))
|
||||
self.classFlag.setText("")
|
||||
self.layoutFlag.setText("")
|
||||
self.labelIcon.setPixmap(QPixmap(1, 1))
|
||||
self.statusIcon.setPixmap(QPixmap(1, 1))
|
||||
self.classIcon.setText("")
|
||||
self.usageIcon.setText("")
|
||||
|
||||
self.labelData.setText("–")
|
||||
self.statusData.setText("–")
|
||||
self.classData.setText("–")
|
||||
self.layoutData.setText("–")
|
||||
self.usageData.setText("–")
|
||||
|
||||
self.cCountData.setText("–")
|
||||
self.wCountData.setText("–")
|
||||
@@ -238,11 +238,11 @@ class GuiItemDetails(QWidget):
|
||||
|
||||
if nwItem.itemType == nwItemType.FILE:
|
||||
if nwItem.isExported:
|
||||
self.labelFlag.setPixmap(self._expCheck)
|
||||
self.labelIcon.setPixmap(self._expCheck)
|
||||
else:
|
||||
self.labelFlag.setPixmap(self._expCross)
|
||||
self.labelIcon.setPixmap(self._expCross)
|
||||
else:
|
||||
self.labelFlag.setPixmap(QPixmap(1, 1))
|
||||
self.labelIcon.setPixmap(QPixmap(1, 1))
|
||||
|
||||
self.labelData.setText(theLabel)
|
||||
|
||||
@@ -257,25 +257,25 @@ class GuiItemDetails(QWidget):
|
||||
itStatus = self.theProject.importItems.checkEntry(itStatus) # Make sure it's valid
|
||||
flagIcon = self.theParent.importIcons[itStatus]
|
||||
|
||||
self.statusFlag.setPixmap(flagIcon.pixmap(iPx, iPx))
|
||||
self.statusIcon.setPixmap(flagIcon.pixmap(iPx, iPx))
|
||||
self.statusData.setText(nwItem.itemStatus)
|
||||
|
||||
# Class
|
||||
# =====
|
||||
|
||||
classIcon = self.theTheme.getIcon(nwLabels.CLASS_ICON[nwItem.itemClass])
|
||||
self.classFlag.setPixmap(classIcon.pixmap(iPx, iPx))
|
||||
self.classIcon.setPixmap(classIcon.pixmap(iPx, iPx))
|
||||
self.classData.setText(trConst(nwLabels.CLASS_NAME[nwItem.itemClass]))
|
||||
|
||||
# Layout
|
||||
# ======
|
||||
|
||||
hLevel = self.theParent.theIndex.getHandleHeaderLevel(tHandle)
|
||||
layoutIcon = self.theTheme.getItemIcon(
|
||||
usageIcon = self.theTheme.getItemIcon(
|
||||
nwItem.itemType, nwItem.itemClass, nwItem.itemLayout, hLevel
|
||||
)
|
||||
self.layoutFlag.setPixmap(layoutIcon.pixmap(iPx, iPx))
|
||||
self.layoutData.setText(nwItem.describeMe(hLevel))
|
||||
self.usageIcon.setPixmap(usageIcon.pixmap(iPx, iPx))
|
||||
self.usageData.setText(nwItem.describeMe(hLevel))
|
||||
|
||||
# Counts
|
||||
# ======
|
||||
|
||||
+8
-8
@@ -818,29 +818,29 @@ class GuiMainMenu(QMenuBar):
|
||||
# Format > Separator
|
||||
self.fmtMenu.addSeparator()
|
||||
|
||||
# Format > Header 1
|
||||
self.aFmtHead1 = QAction(self.tr("Header 1"), self)
|
||||
# Format > Header 1 (Partition)
|
||||
self.aFmtHead1 = QAction(self.tr("Header 1 (Partition)"), self)
|
||||
self.aFmtHead1.setStatusTip(self.tr("Change the block format to Header 1"))
|
||||
self.aFmtHead1.setShortcut("Ctrl+1")
|
||||
self.aFmtHead1.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H1))
|
||||
self.fmtMenu.addAction(self.aFmtHead1)
|
||||
|
||||
# Format > Header 2
|
||||
self.aFmtHead2 = QAction(self.tr("Header 2"), self)
|
||||
# Format > Header 2 (Chapter)
|
||||
self.aFmtHead2 = QAction(self.tr("Header 2 (Chapter)"), self)
|
||||
self.aFmtHead2.setStatusTip(self.tr("Change the block format to Header 2"))
|
||||
self.aFmtHead2.setShortcut("Ctrl+2")
|
||||
self.aFmtHead2.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H2))
|
||||
self.fmtMenu.addAction(self.aFmtHead2)
|
||||
|
||||
# Format > Header 3
|
||||
self.aFmtHead3 = QAction(self.tr("Header 3"), self)
|
||||
# Format > Header 3 (Scene)
|
||||
self.aFmtHead3 = QAction(self.tr("Header 3 (Scene)"), self)
|
||||
self.aFmtHead3.setStatusTip(self.tr("Change the block format to Header 3"))
|
||||
self.aFmtHead3.setShortcut("Ctrl+3")
|
||||
self.aFmtHead3.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H3))
|
||||
self.fmtMenu.addAction(self.aFmtHead3)
|
||||
|
||||
# Format > Header 4
|
||||
self.aFmtHead4 = QAction(self.tr("Header 4"), self)
|
||||
# Format > Header 4 (Section)
|
||||
self.aFmtHead4 = QAction(self.tr("Header 4 (Section)"), self)
|
||||
self.aFmtHead4.setStatusTip(self.tr("Change the block format to Header 4"))
|
||||
self.aFmtHead4.setShortcut("Ctrl+4")
|
||||
self.aFmtHead4.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H4))
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@ class GuiNovelTree(QTreeWidget):
|
||||
self.setIndentation(iPx)
|
||||
self.setColumnCount(3)
|
||||
self.setHeaderLabels([
|
||||
self.tr("Title"),
|
||||
self.tr("Novel Outline"),
|
||||
self.tr("Words"),
|
||||
self.tr("POV")
|
||||
])
|
||||
|
||||
+5
-2
@@ -33,7 +33,7 @@ from PyQt5.QtWidgets import (
|
||||
QTreeWidget, QTreeWidgetItem, QMenu, QAction, QAbstractItemView
|
||||
)
|
||||
|
||||
from nw.enum import nwOutline
|
||||
from nw.enum import nwItemLayout, nwItemType, nwOutline
|
||||
from nw.constants import trConst, nwKeyWords, nwLabels
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -434,6 +434,9 @@ class GuiOutline(QTreeWidget):
|
||||
newItem = QTreeWidgetItem()
|
||||
hIcon = "doc_%s" % novIdx["level"].lower()
|
||||
|
||||
hLevel = self.theIndex.getHandleHeaderLevel(tHandle)
|
||||
dIcon = self.theTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, hLevel)
|
||||
|
||||
cC = int(novIdx["cCount"])
|
||||
wC = int(novIdx["wCount"])
|
||||
pC = int(novIdx["pCount"])
|
||||
@@ -443,7 +446,7 @@ class GuiOutline(QTreeWidget):
|
||||
newItem.setIcon(self._colIdx[nwOutline.TITLE], self.theTheme.getIcon(hIcon))
|
||||
newItem.setText(self._colIdx[nwOutline.LEVEL], novIdx["level"])
|
||||
newItem.setText(self._colIdx[nwOutline.LABEL], nwItem.itemName)
|
||||
newItem.setIcon(self._colIdx[nwOutline.LABEL], self.theTheme.getIcon("proj_document"))
|
||||
newItem.setIcon(self._colIdx[nwOutline.LABEL], dIcon)
|
||||
newItem.setText(self._colIdx[nwOutline.LINE], sTitle[1:].lstrip("0"))
|
||||
newItem.setData(self._colIdx[nwOutline.LINE], Qt.UserRole, sTitle)
|
||||
newItem.setText(self._colIdx[nwOutline.SYNOP], novIdx["synopsis"])
|
||||
|
||||
+13
-1
@@ -86,7 +86,7 @@ class GuiProjectTree(QTreeWidget):
|
||||
self.setIndentation(iPx)
|
||||
self.setColumnCount(4)
|
||||
self.setHeaderLabels([
|
||||
self.tr("Label"), self.tr("Words"), "",
|
||||
self.tr("Project Tree"), self.tr("Words"), "",
|
||||
self.tr("Status") if self.mainConf.fullStatus else ""
|
||||
])
|
||||
|
||||
@@ -636,6 +636,13 @@ class GuiProjectTree(QTreeWidget):
|
||||
else:
|
||||
trItem.setToolTip(self.C_STATUS, nwItem.itemStatus)
|
||||
|
||||
if self.mainConf.emphLabels and nwItem.itemLayout == nwItemLayout.DOCUMENT:
|
||||
if hLevel in ("H1", "H2"):
|
||||
trFont = trItem.font(self.C_NAME)
|
||||
trFont.setBold(True)
|
||||
trFont.setUnderline(True)
|
||||
trItem.setFont(self.C_NAME, trFont)
|
||||
|
||||
return
|
||||
|
||||
def propagateCount(self, tHandle, theCount, nDepth=0):
|
||||
@@ -695,6 +702,11 @@ class GuiProjectTree(QTreeWidget):
|
||||
logger.debug("Building the project tree ...")
|
||||
self.clearTree()
|
||||
|
||||
self.setHeaderLabels([
|
||||
self.tr("Project Tree"), self.tr("Words"), "",
|
||||
self.tr("Status") if self.mainConf.fullStatus else ""
|
||||
])
|
||||
|
||||
iCount = 0
|
||||
for nwItem in self.theProject.getProjectItems():
|
||||
iCount += 1
|
||||
|
||||
Reference in New Issue
Block a user