Add a menu entry to change column size for last column in novel tree
This commit is contained in:
@@ -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"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user