Add a menu entry to change column size for last column in novel tree

This commit is contained in:
Veronica Berglyd Olsen
2023-02-10 20:49:47 +01:00
parent fd14c682a9
commit cf742a89c0
2 changed files with 47 additions and 10 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ VALID_MAP = {
"widthCol3", "widthCol4", "wordsPerPage", "countFrom", "clearDouble", "widthCol3", "widthCol4", "wordsPerPage", "countFrom", "clearDouble",
}, },
"GuiWordList": {"winWidth", "winHeight"}, "GuiWordList": {"winWidth", "winHeight"},
"GuiNovelView": {"lastCol"}, "GuiNovelView": {"lastCol", "lastColSize"},
} }
+46 -9
View File
@@ -34,12 +34,13 @@ from time import time
from PyQt5.QtGui import QFont, QPalette from PyQt5.QtGui import QFont, QPalette
from PyQt5.QtCore import Qt, QSize, pyqtSlot, pyqtSignal from PyQt5.QtCore import Qt, QSize, pyqtSlot, pyqtSignal
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QAbstractItemView, QActionGroup, QFrame, QHBoxLayout, QHeaderView, QMenu, QAbstractItemView, QActionGroup, QFrame, QHBoxLayout, QHeaderView,
QSizePolicy, QToolButton, QToolTip, QTreeWidget, QTreeWidgetItem, QInputDialog, QMenu, QSizePolicy, QToolButton, QToolTip, QTreeWidget,
QVBoxLayout, QWidget QTreeWidgetItem, QVBoxLayout, QWidget
) )
from novelwriter.enum import nwDocMode, nwItemClass, nwOutline from novelwriter.enum import nwDocMode, nwItemClass, nwOutline
from novelwriter.common import minmax
from novelwriter.constants import nwHeaders, nwKeyWords, nwLabels, trConst from novelwriter.constants import nwHeaders, nwKeyWords, nwLabels, trConst
from novelwriter.gui.components import NovelSelector from novelwriter.gui.components import NovelSelector
@@ -126,20 +127,28 @@ class GuiNovelView(QWidget):
lastCol = self.theProject.options.getEnum( lastCol = self.theProject.options.getEnum(
"GuiNovelView", "lastCol", NovelTreeColumn, NovelTreeColumn.HIDDEN "GuiNovelView", "lastCol", NovelTreeColumn, NovelTreeColumn.HIDDEN
) )
lastColSize = self.theProject.options.getInt(
"GuiNovelView", "lastColSize", 25
)
self.clearProject() self.clearProject()
self.novelBar.buildNovelRootMenu() self.novelBar.buildNovelRootMenu()
self.novelBar.setLastColType(lastCol, doRefresh=False) self.novelBar.setLastColType(lastCol, doRefresh=False)
self.novelBar.setCurrentRoot(lastNovel) self.novelBar.setCurrentRoot(lastNovel)
self.novelBar.setEnabled(True) self.novelBar.setEnabled(True)
self.novelTree.setLastColSize(lastColSize)
return return
def closeProjectTasks(self): def closeProjectTasks(self):
"""Run closing project tasks. """Run closing project tasks.
""" """
lastColType = self.novelTree.lastColType lastColType = self.novelTree.lastColType
lastColSize = self.novelTree.lastColSize
self.theProject.options.setValue("GuiNovelView", "lastCol", lastColType) self.theProject.options.setValue("GuiNovelView", "lastCol", lastColType)
self.theProject.options.setValue("GuiNovelView", "lastColSize", lastColSize)
return return
def setTreeFocus(self): def setTreeFocus(self):
@@ -233,6 +242,10 @@ class GuiNovelToolBar(QWidget):
self._addLastColAction(NovelTreeColumn.FOCUS, self.tr("Focus Character")) self._addLastColAction(NovelTreeColumn.FOCUS, self.tr("Focus Character"))
self._addLastColAction(NovelTreeColumn.PLOT, self.tr("Novel Plot")) self._addLastColAction(NovelTreeColumn.PLOT, self.tr("Novel Plot"))
self.mLastCol.addSeparator()
self.aLastColSize = self.mLastCol.addAction(self.tr("Column Size"))
self.aLastColSize.triggered.connect(self._selectLastColumnSize)
self.tbMore = QToolButton(self) self.tbMore = QToolButton(self)
self.tbMore.setToolTip(self.tr("More Options")) self.tbMore.setToolTip(self.tr("More Options"))
self.tbMore.setIconSize(QSize(iPx, iPx)) self.tbMore.setIconSize(QSize(iPx, iPx))
@@ -339,6 +352,19 @@ class GuiNovelToolBar(QWidget):
self.novelView.novelTree.refreshTree(rootHandle=rootHandle, overRide=True) self.novelView.novelTree.refreshTree(rootHandle=rootHandle, overRide=True)
return return
@pyqtSlot()
def _selectLastColumnSize(self):
"""Set the maximum width for the last column.
"""
oldSize = self.novelView.novelTree.lastColSize
newSize, isOk = QInputDialog.getInt(
self, self.tr("Column Size"), self.tr("Maximum column size in %"), oldSize, 15, 75, 5
)
if isOk:
self.novelView.novelTree.setLastColSize(newSize)
self._refreshNovelTree()
return
## ##
# Internal Functions # Internal Functions
## ##
@@ -379,10 +405,11 @@ class GuiNovelTree(QTreeWidget):
self.theProject = novelView.mainGui.theProject self.theProject = novelView.mainGui.theProject
# Internal Variables # Internal Variables
self._treeMap = {} self._treeMap = {}
self._lastBuild = 0 self._lastBuild = 0
self._lastCol = NovelTreeColumn.POV self._lastCol = NovelTreeColumn.POV
self._actHandle = None self._lastColSize = 0.25
self._actHandle = None
# Cached Strings # Cached Strings
self._povLabel = trConst(nwLabels.KEY_NAME[nwKeyWords.POV_KEY]) self._povLabel = trConst(nwLabels.KEY_NAME[nwKeyWords.POV_KEY])
@@ -470,6 +497,10 @@ class GuiNovelTree(QTreeWidget):
def lastColType(self): def lastColType(self):
return self._lastCol return self._lastCol
@property
def lastColSize(self):
return int(self._lastColSize * 100)
## ##
# Class Methods # Class Methods
## ##
@@ -552,6 +583,12 @@ class GuiNovelTree(QTreeWidget):
self.refreshTree(rootHandle=lastNovel, overRide=True) self.refreshTree(rootHandle=lastNovel, overRide=True)
return return
def setLastColSize(self, colSize):
"""Set the column size in integer values between 15 and 75.
"""
self._lastColSize = minmax(colSize, 15, 75)/100.0
return
def setActiveHandle(self, tHandle): def setActiveHandle(self, tHandle):
"""Highlight the rows associated with a given handle. """Highlight the rows associated with a given handle.
""" """
@@ -619,7 +656,7 @@ class GuiNovelTree(QTreeWidget):
newW = event.size().width() newW = event.size().width()
oldW = event.oldSize().width() oldW = event.oldSize().width()
if newW != oldW: if newW != oldW:
eliW = int(0.25 * newW) eliW = int(self._lastColSize * newW)
fMetric = self.fontMetrics() fMetric = self.fontMetrics()
for i in range(self.topLevelItemCount()): for i in range(self.topLevelItemCount()):
trItem = self.topLevelItem(i) trItem = self.topLevelItem(i)
@@ -709,7 +746,7 @@ class GuiNovelTree(QTreeWidget):
trItem.setData(self.C_MORE, Qt.DecorationRole, self._pMore) trItem.setData(self.C_MORE, Qt.DecorationRole, self._pMore)
# Custom column # Custom column
mW = int(0.25 * self.viewport().width()) mW = int(self._lastColSize * self.viewport().width())
lastText, toolTip = self._getLastColumnText(tHandle, sTitle) lastText, toolTip = self._getLastColumnText(tHandle, sTitle)
elideText = self.fontMetrics().elidedText(lastText, Qt.ElideRight, mW) elideText = self.fontMetrics().elidedText(lastText, Qt.ElideRight, mW)
trItem.setText(self.C_EXTRA, elideText) trItem.setText(self.C_EXTRA, elideText)