Fixed and imrpoved margin calculations on GUI elements

This commit is contained in:
Veronica K. B. Olsen
2021-01-18 17:52:32 +01:00
parent f30b14a3da
commit 91d96b162e
5 changed files with 75 additions and 48 deletions
+9 -2
View File
@@ -457,8 +457,13 @@ class NWTree():
return return
def _makeHandle(self, addSeed=""): def _makeHandle(self, addSeed=""):
"""Generate a unique item handle. In the unlikely event that the """Generate a unique item handle. In the event that the key
key already exists, salt the seed and generate a new handle. already exists, salt the seed and generate a new handle.
A key collision is very unlikely to be caused by the truncation
of the sha256 hash to 13 characters. Assuming it is near-random,
it will on average happen every 4.5^15 times. However, the clock
seed is likely to occasionally generate a collision if the
handle requests come faster than the clock resolution.
""" """
if self._handleSeed is None: if self._handleSeed is None:
newSeed = str(time()) + addSeed newSeed = str(time()) + addSeed
@@ -466,11 +471,13 @@ class NWTree():
# This is used for debugging # This is used for debugging
newSeed = str(self._handleSeed) newSeed = str(self._handleSeed)
self._handleSeed += 1 self._handleSeed += 1
logger.verbose("Generating handle with seed '%s'" % newSeed) logger.verbose("Generating handle with seed '%s'" % newSeed)
itemHandle = sha256(newSeed.encode()).hexdigest()[0:13] itemHandle = sha256(newSeed.encode()).hexdigest()[0:13]
if itemHandle in self._projTree: if itemHandle in self._projTree:
logger.warning("Duplicate handle encountered! Retrying ...") logger.warning("Duplicate handle encountered! Retrying ...")
itemHandle = self._makeHandle(addSeed+"!") itemHandle = self._makeHandle(addSeed+"!")
return itemHandle return itemHandle
# END Class NWTree # END Class NWTree
+1 -1
View File
@@ -390,7 +390,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
theFormat.setBackground(QBrush(fmtCol, Qt.SolidPattern)) theFormat.setBackground(QBrush(fmtCol, Qt.SolidPattern))
if fmtSize is not None: if fmtSize is not None:
theFormat.setFontPointSize(round(fmtSize*self.mainConf.textSize)) theFormat.setFontPointSize(int(round(fmtSize*self.mainConf.textSize)))
return theFormat return theFormat
+36 -24
View File
@@ -49,24 +49,22 @@ class GuiItemDetails(QWidget):
self.theTheme = theParent.theTheme self.theTheme = theParent.theTheme
self.theHandle = None self.theHandle = None
self.mainBox = QGridLayout(self) # Sizes
self.mainBox.setVerticalSpacing(1) hSp = self.mainConf.pxInt(6)
self.mainBox.setHorizontalSpacing(6) vSp = self.mainConf.pxInt(1)
self.setLayout(self.mainBox) mPx = self.mainConf.pxInt(6)
iPx = self.theTheme.baseIconSize
fPt = self.theTheme.fontPointSize
self.pS = 0.9*self.theTheme.fontPointSize self.expCheck = self.theTheme.getPixmap("check", (iPx, iPx))
self.iPx = self.theTheme.baseIconSize self.expCross = self.theTheme.getPixmap("cross", (iPx, iPx))
self.sPx = int(round(0.8*self.theTheme.baseIconSize))
self.expCheck = self.theTheme.getPixmap("check", (self.iPx, self.iPx))
self.expCross = self.theTheme.getPixmap("cross", (self.iPx, self.iPx))
self.fntLabel = QFont() self.fntLabel = QFont()
self.fntLabel.setBold(True) self.fntLabel.setBold(True)
self.fntLabel.setPointSizeF(self.pS) self.fntLabel.setPointSizeF(0.9*fPt)
self.fntValue = QFont() self.fntValue = QFont()
self.fntValue.setPointSizeF(self.pS) self.fntValue.setPointSizeF(0.9*fPt)
# Label # Label
self.labelName = QLabel("Label") self.labelName = QLabel("Label")
@@ -147,6 +145,7 @@ class GuiItemDetails(QWidget):
self.pCountData.setAlignment(Qt.AlignRight) self.pCountData.setAlignment(Qt.AlignRight)
# Assemble # Assemble
self.mainBox = QGridLayout(self)
self.mainBox.addWidget(self.labelName, 0, 0, 1, 1) self.mainBox.addWidget(self.labelName, 0, 0, 1, 1)
self.mainBox.addWidget(self.labelFlag, 0, 1, 1, 1) self.mainBox.addWidget(self.labelFlag, 0, 1, 1, 1)
self.mainBox.addWidget(self.labelData, 0, 2, 1, 3) self.mainBox.addWidget(self.labelData, 0, 2, 1, 3)
@@ -175,6 +174,12 @@ class GuiItemDetails(QWidget):
self.mainBox.setColumnStretch(3, 0) self.mainBox.setColumnStretch(3, 0)
self.mainBox.setColumnStretch(4, 0) self.mainBox.setColumnStretch(4, 0)
self.mainBox.setHorizontalSpacing(hSp)
self.mainBox.setVerticalSpacing(vSp)
self.mainBox.setContentsMargins(mPx, mPx, mPx, mPx)
self.setLayout(self.mainBox)
# Make sure the columns for flags and counts don't resize too often # Make sure the columns for flags and counts don't resize too often
flagWidth = self.theTheme.getTextWidth("Mm", self.fntValue) flagWidth = self.theTheme.getTextWidth("Mm", self.fntValue)
countWidth = self.theTheme.getTextWidth("99,999", self.fntValue) countWidth = self.theTheme.getTextWidth("99,999", self.fntValue)
@@ -193,26 +198,30 @@ class GuiItemDetails(QWidget):
"""Clear all the data values. """Clear all the data values.
""" """
self.labelFlag.setPixmap(QPixmap(1, 1)) self.labelFlag.setPixmap(QPixmap(1, 1))
self.labelData.setText("")
self.statusFlag.setPixmap(QPixmap(1, 1)) self.statusFlag.setPixmap(QPixmap(1, 1))
self.statusData.setText("")
self.classFlag.setText("") self.classFlag.setText("")
self.classData.setText("")
self.layoutFlag.setText("") self.layoutFlag.setText("")
self.layoutData.setText("")
self.labelData.setText("")
self.statusData.setText("")
self.classData.setText("")
self.layoutData.setText("")
self.cCountData.setText("") self.cCountData.setText("")
self.wCountData.setText("") self.wCountData.setText("")
self.pCountData.setText("") self.pCountData.setText("")
return return
def updateCounts(self, tHandle, cC, wC, pC): def updateCounts(self, tHandle, cC, wC, pC):
"""Just update the counts if the handle is the same as the one """Update the counts if the handle is the same as the one we're
we're already showing. already showing. Otherwise, do nothing.
""" """
if tHandle == self.theHandle: if tHandle == self.theHandle:
self.cCountData.setText(f"{cC:n}") self.cCountData.setText(f"{cC:n}")
self.wCountData.setText(f"{wC:n}") self.wCountData.setText(f"{wC:n}")
self.pCountData.setText(f"{pC:n}") self.pCountData.setText(f"{pC:n}")
return return
def updateViewBox(self, tHandle): def updateViewBox(self, tHandle):
@@ -229,13 +238,13 @@ class GuiItemDetails(QWidget):
if len(theLabel) > 100: if len(theLabel) > 100:
theLabel = theLabel[:96].rstrip()+" ..." theLabel = theLabel[:96].rstrip()+" ..."
iStatus = nwItem.itemStatus itStatus = nwItem.itemStatus
if nwItem.itemClass == nwItemClass.NOVEL: if nwItem.itemClass == nwItemClass.NOVEL:
iStatus = self.theProject.statusItems.checkEntry(iStatus) # Make sure it's valid itStatus = self.theProject.statusItems.checkEntry(itStatus) # Make sure it's valid
flagIcon = self.theParent.statusIcons[iStatus] flagIcon = self.theParent.statusIcons[itStatus]
else: else:
iStatus = self.theProject.importItems.checkEntry(iStatus) # Make sure it's valid itStatus = self.theProject.importItems.checkEntry(itStatus) # Make sure it's valid
flagIcon = self.theParent.importIcons[iStatus] flagIcon = self.theParent.importIcons[itStatus]
if nwItem.itemType == nwItemType.FILE: if nwItem.itemType == nwItemType.FILE:
if nwItem.isExported: if nwItem.isExported:
@@ -244,8 +253,11 @@ class GuiItemDetails(QWidget):
self.labelFlag.setPixmap(self.expCross) self.labelFlag.setPixmap(self.expCross)
else: else:
self.labelFlag.setPixmap(QPixmap(1, 1)) self.labelFlag.setPixmap(QPixmap(1, 1))
self.statusFlag.setPixmap(flagIcon.pixmap(self.sPx, self.sPx))
iPx = int(round(0.8*self.theTheme.baseIconSize))
self.statusFlag.setPixmap(flagIcon.pixmap(iPx, iPx))
self.classFlag.setText(nwLabels.CLASS_FLAG[nwItem.itemClass]) self.classFlag.setText(nwLabels.CLASS_FLAG[nwItem.itemClass])
if nwItem.itemLayout == nwItemLayout.NO_LAYOUT: if nwItem.itemLayout == nwItemLayout.NO_LAYOUT:
self.layoutFlag.setText("-") self.layoutFlag.setText("-")
else: else:
+8 -6
View File
@@ -57,7 +57,7 @@ class GuiProjectDetails(PagedDialog):
self.setWindowTitle("Project Details") self.setWindowTitle("Project Details")
wW = self.mainConf.pxInt(600) wW = self.mainConf.pxInt(600)
wH = self.mainConf.pxInt(425) wH = self.mainConf.pxInt(400)
self.setMinimumWidth(wW) self.setMinimumWidth(wW)
self.setMinimumHeight(wH) self.setMinimumHeight(wH)
@@ -137,6 +137,7 @@ class GuiProjectDetailsMain(QWidget):
self.theIndex = theParent.theIndex self.theIndex = theParent.theIndex
fPx = self.theTheme.fontPixelSize fPx = self.theTheme.fontPixelSize
fPt = self.theTheme.fontPointSize
vPx = self.mainConf.pxInt(4) vPx = self.mainConf.pxInt(4)
hPx = self.mainConf.pxInt(12) hPx = self.mainConf.pxInt(12)
@@ -145,7 +146,7 @@ class GuiProjectDetailsMain(QWidget):
self.bookTitle = QLabel(self.theProject.bookTitle) self.bookTitle = QLabel(self.theProject.bookTitle)
bookFont = self.bookTitle.font() bookFont = self.bookTitle.font()
bookFont.setPixelSize(round(2.2*fPx)) bookFont.setPointSizeF(2.2*fPt)
bookFont.setWeight(QFont.Bold) bookFont.setWeight(QFont.Bold)
self.bookTitle.setFont(bookFont) self.bookTitle.setFont(bookFont)
self.bookTitle.setAlignment(Qt.AlignHCenter) self.bookTitle.setAlignment(Qt.AlignHCenter)
@@ -153,7 +154,7 @@ class GuiProjectDetailsMain(QWidget):
self.projName = QLabel("Working Title: %s" % self.theProject.projName) self.projName = QLabel("Working Title: %s" % self.theProject.projName)
workFont = self.projName.font() workFont = self.projName.font()
workFont.setPixelSize(round(0.8*fPx)) workFont.setPointSizeF(0.8*fPt)
workFont.setItalic(True) workFont.setItalic(True)
self.projName.setFont(workFont) self.projName.setFont(workFont)
self.projName.setAlignment(Qt.AlignHCenter) self.projName.setAlignment(Qt.AlignHCenter)
@@ -161,7 +162,7 @@ class GuiProjectDetailsMain(QWidget):
self.bookAuthors = QLabel("By %s" % self.theProject.getAuthors()) self.bookAuthors = QLabel("By %s" % self.theProject.getAuthors())
authFont = self.bookAuthors.font() authFont = self.bookAuthors.font()
authFont.setPixelSize(round(1.2*fPx)) authFont.setPointSizeF(1.2*fPt)
self.bookAuthors.setFont(authFont) self.bookAuthors.setFont(authFont)
self.bookAuthors.setAlignment(Qt.AlignHCenter) self.bookAuthors.setAlignment(Qt.AlignHCenter)
self.bookAuthors.setWordWrap(True) self.bookAuthors.setWordWrap(True)
@@ -219,12 +220,13 @@ class GuiProjectDetailsMain(QWidget):
# ======== # ========
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
self.outerBox.addSpacing(fPx)
self.outerBox.addWidget(self.bookTitle) self.outerBox.addWidget(self.bookTitle)
self.outerBox.addWidget(self.projName) self.outerBox.addWidget(self.projName)
self.outerBox.addWidget(self.bookAuthors) self.outerBox.addWidget(self.bookAuthors)
self.outerBox.addSpacing(round(2.5*fPx)) self.outerBox.addSpacing(2*fPx)
self.outerBox.addLayout(self.statsGrid) self.outerBox.addLayout(self.statsGrid)
self.outerBox.addSpacing(round(0.8*fPx)) self.outerBox.addSpacing(fPx)
self.outerBox.addStretch(1) self.outerBox.addStretch(1)
self.outerBox.addLayout(self.projPathBox) self.outerBox.addLayout(self.projPathBox)
+21 -15
View File
@@ -95,6 +95,11 @@ class GuiMain(QMainWindow):
# Build the GUI # Build the GUI
# ============= # =============
# Sizes
mPx = self.mainConf.pxInt(4)
fPx = self.theTheme.fontPixelSize
fPt = self.theTheme.fontPointSize
# Main GUI Elements # Main GUI Elements
self.statusBar = GuiMainStatus(self) self.statusBar = GuiMainStatus(self)
self.treeView = GuiProjectTree(self) self.treeView = GuiProjectTree(self)
@@ -107,24 +112,24 @@ class GuiMain(QMainWindow):
self.projMeta = GuiOutlineDetails(self) self.projMeta = GuiOutlineDetails(self)
self.mainMenu = GuiMainMenu(self) self.mainMenu = GuiMainMenu(self)
# Minor Gui Elements # Minor GUI Elements
self.statusIcons = [] self.statusIcons = []
self.importIcons = [] self.importIcons = []
# Project Tree Tabs # Project Tree Tabs
self.projTabs = QTabWidget() self.projTabs = QTabWidget()
self.projTabs.setTabPosition(QTabWidget.South) self.projTabs.setTabPosition(QTabWidget.South)
self.projTabs.setStyleSheet("QTabWidget::pane {border: 0;};") self.projTabs.setStyleSheet(r"QTabWidget::pane {border: 0;};")
self.projTabs.addTab(self.treeView, "Project") self.projTabs.addTab(self.treeView, "Project")
self.projTabs.addTab(self.novelView, "Novel") self.projTabs.addTab(self.novelView, "Novel")
self.projTabs.currentChanged.connect(self._projTabsChanged) self.projTabs.currentChanged.connect(self._projTabsChanged)
tabFont = self.projTabs.tabBar().font() tabFont = self.projTabs.tabBar().font()
tabFont.setPointSize(round(0.9*self.theTheme.fontPointSize)) tabFont.setPointSizeF(0.9*fPt)
self.projTabs.tabBar().setFont(tabFont) self.projTabs.tabBar().setFont(tabFont)
# Project Tree Action Buttons # Project Tree Action Buttons
btnSize = round(0.7*self.theTheme.fontPixelSize) btnSize = int(round(0.7*fPx))
self.treeButtons = QToolBar() self.treeButtons = QToolBar()
self.treeButtons.setToolButtonStyle(Qt.ToolButtonIconOnly) self.treeButtons.setToolButtonStyle(Qt.ToolButtonIconOnly)
self.treeButtons.setIconSize(QSize(btnSize, btnSize)) self.treeButtons.setIconSize(QSize(btnSize, btnSize))
@@ -151,7 +156,7 @@ class GuiMain(QMainWindow):
self.treePane = QWidget() self.treePane = QWidget()
self.treeBox = QVBoxLayout() self.treeBox = QVBoxLayout()
self.treeBox.setContentsMargins(0, 0, 0, 0) self.treeBox.setContentsMargins(0, 0, 0, 0)
self.treeBox.setSpacing(0) self.treeBox.setSpacing(mPx)
self.treeBox.addWidget(self.projTabs) self.treeBox.addWidget(self.projTabs)
self.treeBox.addWidget(self.treeMeta) self.treeBox.addWidget(self.treeMeta)
self.treePane.setLayout(self.treeBox) self.treePane.setLayout(self.treeBox)
@@ -176,26 +181,27 @@ class GuiMain(QMainWindow):
# Main Tabs : Editor / Outline # Main Tabs : Editor / Outline
self.mainTabs = QTabWidget() self.mainTabs = QTabWidget()
self.mainTabs.setTabPosition(QTabWidget.East) self.mainTabs.setTabPosition(QTabWidget.East)
self.mainTabs.setStyleSheet("QTabWidget::pane {border: 0;}") self.mainTabs.setStyleSheet(r"QTabWidget::pane {border: 0;}")
self.mainTabs.addTab(self.splitDocs, "Editor") self.mainTabs.addTab(self.splitDocs, "Editor")
self.mainTabs.addTab(self.splitOutline, "Outline") self.mainTabs.addTab(self.splitOutline, "Outline")
self.mainTabs.currentChanged.connect(self._mainTabChanged) self.mainTabs.currentChanged.connect(self._mainTabChanged)
# Splitter : Project Tree / Main Tabs # Splitter : Project Tree / Main Tabs
xCM = self.mainConf.pxInt(4)
self.splitMain = QSplitter(Qt.Horizontal) self.splitMain = QSplitter(Qt.Horizontal)
self.splitMain.setContentsMargins(xCM, xCM, xCM, xCM) self.splitMain.setContentsMargins(mPx, mPx, mPx, mPx)
self.splitMain.addWidget(self.treePane) self.splitMain.addWidget(self.treePane)
self.splitMain.addWidget(self.mainTabs) self.splitMain.addWidget(self.mainTabs)
self.splitMain.setSizes(self.mainConf.getMainPanePos()) self.splitMain.setSizes(self.mainConf.getMainPanePos())
# Indices of All Splitter Widgets # Indices of Splitter Widgets
self.idxTree = self.splitMain.indexOf(self.treePane) self.idxTree = self.splitMain.indexOf(self.treePane)
self.idxMain = self.splitMain.indexOf(self.mainTabs) self.idxMain = self.splitMain.indexOf(self.mainTabs)
self.idxEditor = self.splitDocs.indexOf(self.docEditor) self.idxEditor = self.splitDocs.indexOf(self.docEditor)
self.idxViewer = self.splitDocs.indexOf(self.splitView) self.idxViewer = self.splitDocs.indexOf(self.splitView)
self.idxViewDoc = self.splitView.indexOf(self.docViewer) self.idxViewDoc = self.splitView.indexOf(self.docViewer)
self.idxViewMeta = self.splitView.indexOf(self.viewMeta) self.idxViewMeta = self.splitView.indexOf(self.viewMeta)
# Indices of Tab Widgets
self.idxTabEdit = self.mainTabs.indexOf(self.splitDocs) self.idxTabEdit = self.mainTabs.indexOf(self.splitDocs)
self.idxTabProj = self.mainTabs.indexOf(self.splitOutline) self.idxTabProj = self.mainTabs.indexOf(self.splitOutline)
self.idxTreeView = self.projTabs.indexOf(self.treeView) self.idxTreeView = self.projTabs.indexOf(self.treeView)