diff --git a/novelwriter/extensions/configlayout.py b/novelwriter/extensions/configlayout.py index 42a2e29c..637d90c1 100644 --- a/novelwriter/extensions/configlayout.py +++ b/novelwriter/extensions/configlayout.py @@ -27,7 +27,6 @@ along with this program. If not, see . """ from __future__ import annotations -from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor, QFont, QPalette from PyQt5.QtWidgets import ( QAbstractButton, QFrame, QHBoxLayout, QLabel, QLayout, QScrollArea, @@ -35,6 +34,7 @@ from PyQt5.QtWidgets import ( ) from novelwriter import CONFIG +from novelwriter.types import QtScrollAsNeeded DEFAULT_SCALE = 0.9 @@ -76,8 +76,8 @@ class NScrollablePage(QScrollArea): self._widget = QWidget(self) self.setWidget(self._widget) self.setWidgetResizable(True) - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) self.setFrameShadow(QFrame.Shadow.Sunken) self.setFrameShape(QFrame.Shape.StyledPanel) return @@ -113,8 +113,8 @@ class NScrollableForm(QScrollArea): self.setWidget(self._widget) self.setWidgetResizable(True) - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) self.setFrameShadow(QFrame.Shadow.Sunken) self.setFrameShape(QFrame.Shape.StyledPanel) diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 7722339b..00b2b112 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -66,7 +66,7 @@ from novelwriter.tools.lipsum import GuiLipsum from novelwriter.types import ( QtAlignCenterTop, QtAlignJustify, QtAlignLeft, QtAlignLeftTop, QtAlignRight, QtKeepAnchor, QtModCtrl, QtModNone, QtModShift, QtMouseLeft, - QtMoveAnchor, QtMoveLeft, QtMoveRight + QtMoveAnchor, QtMoveLeft, QtMoveRight, QtScrollAlwaysOff, QtScrollAsNeeded ) logger = logging.getLogger(__name__) @@ -354,14 +354,14 @@ class GuiDocEditor(QPlainTextEdit): # Scrolling self.setCenterOnScroll(CONFIG.scrollPastEnd) if CONFIG.hideVScroll: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) if CONFIG.hideHScroll: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) # Refresh the tab stops self.setTabStopDistance(CONFIG.getTabWidth()) diff --git a/novelwriter/gui/docviewer.py b/novelwriter/gui/docviewer.py index aa4cbb31..96c5df3d 100644 --- a/novelwriter/gui/docviewer.py +++ b/novelwriter/gui/docviewer.py @@ -46,7 +46,10 @@ from novelwriter.extensions.configlayout import NColourLabel from novelwriter.extensions.eventfilters import WheelEventFilter from novelwriter.extensions.modified import NIconToolButton from novelwriter.gui.theme import STYLES_MIN_TOOLBUTTON -from novelwriter.types import QtAlignCenterTop, QtKeepAnchor, QtMouseLeft, QtMoveAnchor +from novelwriter.types import ( + QtAlignCenterTop, QtKeepAnchor, QtMouseLeft, QtMoveAnchor, + QtScrollAlwaysOff, QtScrollAsNeeded +) logger = logging.getLogger(__name__) @@ -177,14 +180,14 @@ class GuiDocViewer(QTextBrowser): # Scroll bars if CONFIG.hideVScroll: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) if CONFIG.hideHScroll: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) # Refresh the tab stops self.setTabStopDistance(CONFIG.getTabWidth()) diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index e82f270c..98c7886f 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -47,8 +47,8 @@ from novelwriter.extensions.modified import NIconToolButton from novelwriter.extensions.novelselector import NovelSelector from novelwriter.gui.theme import STYLES_MIN_TOOLBUTTON from novelwriter.types import ( - QtAlignRight, QtDecoration, QtMouseLeft, QtMouseMiddle, QtSizeExpanding, - QtUserRole + QtAlignRight, QtDecoration, QtMouseLeft, QtMouseMiddle, QtScrollAlwaysOff, + QtScrollAsNeeded, QtSizeExpanding, QtUserRole ) logger = logging.getLogger(__name__) @@ -433,14 +433,14 @@ class GuiNovelTree(QTreeWidget): """Set or update tree widget settings.""" # Scroll bars if CONFIG.hideVScroll: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) if CONFIG.hideHScroll: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) return diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index 054f0fb4..4affb0fd 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -49,7 +49,7 @@ from novelwriter.extensions.configlayout import NColourLabel from novelwriter.extensions.novelselector import NovelSelector from novelwriter.types import ( QtAlignLeftTop, QtAlignRight, QtAlignRightTop, QtDecoration, - QtSizeExpanding, QtUserRole + QtScrollAlwaysOff, QtScrollAsNeeded, QtSizeExpanding, QtUserRole ) logger = logging.getLogger(__name__) @@ -433,13 +433,13 @@ class GuiOutlineTree(QTreeWidget): def initSettings(self) -> None: """Set or update outline settings.""" if CONFIG.hideVScroll: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) if CONFIG.hideHScroll: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) return def clearContent(self) -> None: @@ -976,8 +976,8 @@ class GuiOutlineDetails(QScrollArea): self.outerWidget.setLayout(self.outerBox) self.setWidget(self.outerWidget) - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) self.setWidgetResizable(True) self.setFrameStyle(QFrame.Shape.NoFrame) @@ -990,13 +990,13 @@ class GuiOutlineDetails(QScrollArea): def initSettings(self) -> None: """Set or update outline settings.""" if CONFIG.hideVScroll: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) if CONFIG.hideHScroll: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) self.updateClasses() return diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index a96a43a7..b2952be4 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -51,8 +51,8 @@ from novelwriter.enum import nwDocMode, nwItemClass, nwItemLayout, nwItemType from novelwriter.extensions.modified import NIconToolButton from novelwriter.gui.theme import STYLES_MIN_TOOLBUTTON from novelwriter.types import ( - QtAlignLeft, QtAlignRight, QtMouseLeft, QtMouseMiddle, QtSizeExpanding, - QtUserRole + QtAlignLeft, QtAlignRight, QtMouseLeft, QtMouseMiddle, QtScrollAlwaysOff, + QtScrollAsNeeded, QtSizeExpanding, QtUserRole ) logger = logging.getLogger(__name__) @@ -578,13 +578,13 @@ class GuiProjectTree(QTreeWidget): """Set or update tree widget settings.""" # Scroll bars if CONFIG.hideVScroll: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setVerticalScrollBarPolicy(QtScrollAsNeeded) if CONFIG.hideHScroll: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(QtScrollAlwaysOff) else: - self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(QtScrollAsNeeded) return ## diff --git a/novelwriter/tools/welcome.py b/novelwriter/tools/welcome.py index 7e2a20a3..d7b86e4a 100644 --- a/novelwriter/tools/welcome.py +++ b/novelwriter/tools/welcome.py @@ -49,7 +49,7 @@ from novelwriter.extensions.configlayout import NWrappedWidgetBox from novelwriter.extensions.modified import NDialog, NIconToolButton, NSpinBox from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.versioninfo import VersionInfoWidget -from novelwriter.types import QtAlignLeft, QtAlignRightTop, QtSelected +from novelwriter.types import QtAlignLeft, QtAlignRightTop, QtScrollAsNeeded, QtSelected logger = logging.getLogger(__name__) @@ -501,8 +501,8 @@ class _NewProjectPage(QWidget): self.scrollArea = QScrollArea(self) self.scrollArea.setWidget(self.projectForm) self.scrollArea.setWidgetResizable(True) - self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) - self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.scrollArea.setHorizontalScrollBarPolicy(QtScrollAsNeeded) + self.scrollArea.setVerticalScrollBarPolicy(QtScrollAsNeeded) self.enterForm = self.projectForm.enterForm diff --git a/novelwriter/types.py b/novelwriter/types.py index 1c47e9a1..f9f0ded8 100644 --- a/novelwriter/types.py +++ b/novelwriter/types.py @@ -110,6 +110,11 @@ QtSizeIgnored = QSizePolicy.Policy.Ignored QtSizeMinimum = QSizePolicy.Policy.Minimum QtSizeMinimumExpanding = QSizePolicy.Policy.MinimumExpanding +# Scroll Bar Policy + +QtScrollAlwaysOff = Qt.ScrollBarPolicy.ScrollBarAlwaysOff +QtScrollAsNeeded = Qt.ScrollBarPolicy.ScrollBarAsNeeded + # Other QRegExUnicode = QRegularExpression.PatternOption.UseUnicodePropertiesOption diff --git a/tests/test_gui/test_gui_doceditor.py b/tests/test_gui/test_gui_doceditor.py index 719ec0af..eb40f824 100644 --- a/tests/test_gui/test_gui_doceditor.py +++ b/tests/test_gui/test_gui_doceditor.py @@ -34,7 +34,7 @@ from novelwriter.gui.doceditor import GuiDocEditor from novelwriter.text.counting import standardCounter from novelwriter.types import ( QtAlignJustify, QtAlignLeft, QtKeepAnchor, QtModCtrl, QtMouseLeft, - QtMoveAnchor, QtMoveRight + QtMoveAnchor, QtMoveRight, QtScrollAlwaysOff, QtScrollAsNeeded ) from tests.mocked import causeOSError @@ -73,8 +73,8 @@ def testGuiEditor_Init(qtbot, nwGUI, projPath, ipsumText, mockRnd): # Check Defaults qDoc = docEditor.document() assert qDoc.defaultTextOption().alignment() == QtAlignLeft - assert docEditor.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded - assert docEditor.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded + assert docEditor.verticalScrollBarPolicy() == QtScrollAsNeeded + assert docEditor.horizontalScrollBarPolicy() == QtScrollAsNeeded assert docEditor._typPadChar == nwUnicode.U_NBSP assert docEditor.docHeader.itemTitle.text() == ( "Novel \u203a New Chapter \u203a New Scene" @@ -98,8 +98,8 @@ def testGuiEditor_Init(qtbot, nwGUI, projPath, ipsumText, mockRnd): assert qDoc.defaultTextOption().alignment() == QtAlignJustify assert qDoc.defaultTextOption().flags() & QTextOption.ShowTabsAndSpaces assert qDoc.defaultTextOption().flags() & QTextOption.ShowLineAndParagraphSeparators - assert docEditor.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff - assert docEditor.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff + assert docEditor.verticalScrollBarPolicy() == QtScrollAlwaysOff + assert docEditor.horizontalScrollBarPolicy() == QtScrollAlwaysOff assert docEditor._typPadChar == nwUnicode.U_THNBSP assert docEditor.docHeader.itemTitle.text() == "New Scene" diff --git a/tests/test_gui/test_gui_outline.py b/tests/test_gui/test_gui_outline.py index 1a5af352..12195fa9 100644 --- a/tests/test_gui/test_gui_outline.py +++ b/tests/test_gui/test_gui_outline.py @@ -26,11 +26,11 @@ from shutil import copyfile import pytest -from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QAction, QFileDialog, QWidget from novelwriter import CONFIG, SHARED from novelwriter.enum import nwItemClass, nwOutline, nwView +from novelwriter.types import QtScrollAlwaysOff, QtScrollAsNeeded from tests.tools import buildTestProject, cmpFiles, writeFile @@ -53,18 +53,18 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath): CONFIG.hideVScroll = True CONFIG.hideHScroll = True outlineView.initSettings() - assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff - assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff - assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff - assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff + assert outlineTree.verticalScrollBarPolicy() == QtScrollAlwaysOff + assert outlineTree.horizontalScrollBarPolicy() == QtScrollAlwaysOff + assert outlineData.verticalScrollBarPolicy() == QtScrollAlwaysOff + assert outlineData.horizontalScrollBarPolicy() == QtScrollAlwaysOff CONFIG.hideVScroll = False CONFIG.hideHScroll = False outlineView.initSettings() - assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded - assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded - assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded - assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded + assert outlineTree.verticalScrollBarPolicy() == QtScrollAsNeeded + assert outlineTree.horizontalScrollBarPolicy() == QtScrollAsNeeded + assert outlineData.verticalScrollBarPolicy() == QtScrollAsNeeded + assert outlineData.horizontalScrollBarPolicy() == QtScrollAsNeeded # Check focus with monkeypatch.context() as mp: diff --git a/tests/test_gui/test_gui_projtree.py b/tests/test_gui/test_gui_projtree.py index 082d7f38..7f663698 100644 --- a/tests/test_gui/test_gui_projtree.py +++ b/tests/test_gui/test_gui_projtree.py @@ -37,7 +37,10 @@ from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.enum import nwFocus, nwItemClass, nwItemLayout, nwItemType from novelwriter.gui.projtree import GuiProjectTree, GuiProjectView, _TreeContextMenu from novelwriter.guimain import GuiMain -from novelwriter.types import QtAccepted, QtModNone, QtMouseLeft, QtMouseMiddle, QtRejected +from novelwriter.types import ( + QtAccepted, QtModNone, QtMouseLeft, QtMouseMiddle, QtRejected, + QtScrollAlwaysOff, QtScrollAsNeeded +) from tests.mocked import causeOSError from tests.tools import C, buildTestProject @@ -957,14 +960,14 @@ def testGuiProjTree_Other(qtbot, monkeypatch, nwGUI: GuiMain, projPath, mockRnd) CONFIG.hideVScroll = True CONFIG.hideHScroll = True projView.initSettings() - assert projTree.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff - assert projTree.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff + assert projTree.verticalScrollBarPolicy() == QtScrollAlwaysOff + assert projTree.horizontalScrollBarPolicy() == QtScrollAlwaysOff CONFIG.hideVScroll = False CONFIG.hideHScroll = False projView.initSettings() - assert projTree.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded - assert projTree.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded + assert projTree.verticalScrollBarPolicy() == QtScrollAsNeeded + assert projTree.horizontalScrollBarPolicy() == QtScrollAsNeeded # Method: revealNewTreeItem # =========================