Bring back the "Scroll past end" setting (#1605)

This commit is contained in:
Veronica Berglyd Olsen
2023-11-13 22:13:39 +01:00
committed by GitHub
5 changed files with 87 additions and 84 deletions
+3
View File
@@ -148,6 +148,7 @@ class Config:
self.autoScroll = False # Typewriter-like scrolling self.autoScroll = False # Typewriter-like scrolling
self.autoScrollPos = 30 # Start point for typewriter-like scrolling self.autoScrollPos = 30 # Start point for typewriter-like scrolling
self.scrollPastEnd = True # Scroll past end of document, and centre cursor
self.wordCountTimer = 5.0 # Interval for word count update in seconds self.wordCountTimer = 5.0 # Interval for word count update in seconds
self.incNotesWCount = True # The status bar word count includes notes self.incNotesWCount = True # The status bar word count includes notes
@@ -577,6 +578,7 @@ class Config:
self.doReplaceDots = conf.rdBool(sec, "repdots", self.doReplaceDots) self.doReplaceDots = conf.rdBool(sec, "repdots", self.doReplaceDots)
self.autoScroll = conf.rdBool(sec, "autoscroll", self.autoScroll) self.autoScroll = conf.rdBool(sec, "autoscroll", self.autoScroll)
self.autoScrollPos = conf.rdInt(sec, "autoscrollpos", self.autoScrollPos) self.autoScrollPos = conf.rdInt(sec, "autoscrollpos", self.autoScrollPos)
self.scrollPastEnd = conf.rdBool(sec, "scrollpastend", self.scrollPastEnd)
self.fmtSQuoteOpen = conf.rdStr(sec, "fmtsquoteopen", self.fmtSQuoteOpen) self.fmtSQuoteOpen = conf.rdStr(sec, "fmtsquoteopen", self.fmtSQuoteOpen)
self.fmtSQuoteClose = conf.rdStr(sec, "fmtsquoteclose", self.fmtSQuoteClose) self.fmtSQuoteClose = conf.rdStr(sec, "fmtsquoteclose", self.fmtSQuoteClose)
self.fmtDQuoteOpen = conf.rdStr(sec, "fmtdquoteopen", self.fmtDQuoteOpen) self.fmtDQuoteOpen = conf.rdStr(sec, "fmtdquoteopen", self.fmtDQuoteOpen)
@@ -701,6 +703,7 @@ class Config:
"repdots": str(self.doReplaceDots), "repdots": str(self.doReplaceDots),
"autoscroll": str(self.autoScroll), "autoscroll": str(self.autoScroll),
"autoscrollpos": str(self.autoScrollPos), "autoscrollpos": str(self.autoScrollPos),
"scrollpastend": str(self.scrollPastEnd),
"fmtsquoteopen": str(self.fmtSQuoteOpen), "fmtsquoteopen": str(self.fmtSQuoteOpen),
"fmtsquoteclose": str(self.fmtSQuoteClose), "fmtsquoteclose": str(self.fmtSQuoteClose),
"fmtdquoteopen": str(self.fmtDQuoteOpen), "fmtdquoteopen": str(self.fmtDQuoteOpen),
+80 -82
View File
@@ -26,7 +26,7 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtGui import QFont from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt, pyqtSlot
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QDialog, QWidget, QComboBox, QSpinBox, QPushButton, QDialogButtonBox, QDialog, QWidget, QComboBox, QSpinBox, QPushButton, QDialogButtonBox,
QLineEdit, QFileDialog, QFontDialog, QDoubleSpinBox QLineEdit, QFileDialog, QFontDialog, QDoubleSpinBox
@@ -43,12 +43,11 @@ logger = logging.getLogger(__name__)
class GuiPreferences(NPagedDialog): class GuiPreferences(NPagedDialog):
def __init__(self, mainGui): def __init__(self, parent: QWidget) -> None:
super().__init__(parent=mainGui) super().__init__(parent=parent)
logger.debug("Create: GuiPreferences") logger.debug("Create: GuiPreferences")
self.setObjectName("GuiPreferences") self.setObjectName("GuiPreferences")
self.setWindowTitle(self.tr("Preferences")) self.setWindowTitle(self.tr("Preferences"))
self.tabGeneral = GuiPreferencesGeneral(self) self.tabGeneral = GuiPreferencesGeneral(self)
@@ -93,26 +92,27 @@ class GuiPreferences(NPagedDialog):
## ##
@property @property
def updateTheme(self): def updateTheme(self) -> bool:
return self._updateTheme return self._updateTheme
@property @property
def updateSyntax(self): def updateSyntax(self) -> bool:
return self._updateSyntax return self._updateSyntax
@property @property
def needsRestart(self): def needsRestart(self) -> bool:
return self._needsRestart return self._needsRestart
@property @property
def refreshTree(self): def refreshTree(self) -> bool:
return self._refreshTree return self._refreshTree
## ##
# Slots # Private Slots
## ##
def _doSave(self): @pyqtSlot()
def _doSave(self) -> None:
"""Trigger all the save functions in the tabs, and collect the """Trigger all the save functions in the tabs, and collect the
status of the saves. status of the saves.
""" """
@@ -132,9 +132,9 @@ class GuiPreferences(NPagedDialog):
return return
def _doClose(self): @pyqtSlot()
"""Close the preferences without saving the changes. def _doClose(self) -> None:
""" """Close the preferences without saving the changes."""
self._saveWindowSize() self._saveWindowSize()
self.reject() self.reject()
return return
@@ -143,9 +143,8 @@ class GuiPreferences(NPagedDialog):
# Internal Functions # Internal Functions
## ##
def _saveWindowSize(self): def _saveWindowSize(self) -> None:
"""Save the dialog window size. """Save the dialog window size."""
"""
CONFIG.setPreferencesWinSize(self.width(), self.height()) CONFIG.setPreferencesWinSize(self.width(), self.height())
return return
@@ -154,7 +153,7 @@ class GuiPreferences(NPagedDialog):
class GuiPreferencesGeneral(QWidget): class GuiPreferencesGeneral(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
self.prefsGui = prefsGui self.prefsGui = prefsGui
@@ -285,9 +284,8 @@ class GuiPreferencesGeneral(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab. """Save the values set for this tab."""
"""
guiLocale = self.guiLocale.currentData() guiLocale = self.guiLocale.currentData()
guiTheme = self.guiTheme.currentData() guiTheme = self.guiTheme.currentData()
guiSyntax = self.guiSyntax.currentData() guiSyntax = self.guiSyntax.currentData()
@@ -316,12 +314,12 @@ class GuiPreferencesGeneral(QWidget):
return return
## ##
# Slots # Private Slots
## ##
def _selectFont(self): @pyqtSlot()
"""Open the QFontDialog and set a font for the font style. def _selectFont(self) -> None:
""" """Open the QFontDialog and set a font for the font style."""
currFont = QFont() currFont = QFont()
currFont.setFamily(CONFIG.guiFont) currFont.setFamily(CONFIG.guiFont)
currFont.setPointSize(CONFIG.guiFontSize) currFont.setPointSize(CONFIG.guiFontSize)
@@ -336,7 +334,7 @@ class GuiPreferencesGeneral(QWidget):
class GuiPreferencesProjects(QWidget): class GuiPreferencesProjects(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
# The Form # The Form
@@ -438,9 +436,8 @@ class GuiPreferencesProjects(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab. """Save the values set for this tab."""
"""
# Automatic Save # Automatic Save
CONFIG.autoSaveDoc = self.autoSaveDoc.value() CONFIG.autoSaveDoc = self.autoSaveDoc.value()
CONFIG.autoSaveProj = self.autoSaveProj.value() CONFIG.autoSaveProj = self.autoSaveProj.value()
@@ -457,12 +454,12 @@ class GuiPreferencesProjects(QWidget):
return return
## ##
# Slots # Private Slots
## ##
def _backupFolder(self): @pyqtSlot()
"""Open a dialog to select the backup folder. def _backupFolder(self) -> None:
""" """Open a dialog to select the backup folder."""
currDir = self.backupPath or "" currDir = self.backupPath or ""
newDir = QFileDialog.getExistingDirectory( newDir = QFileDialog.getExistingDirectory(
self, self.tr("Backup Directory"), str(currDir), options=QFileDialog.ShowDirsOnly self, self.tr("Backup Directory"), str(currDir), options=QFileDialog.ShowDirsOnly
@@ -472,15 +469,13 @@ class GuiPreferencesProjects(QWidget):
self.mainForm.setHelpText( self.mainForm.setHelpText(
self.backupPathRow, self.tr("Path: {0}").format(self.backupPath) self.backupPathRow, self.tr("Path: {0}").format(self.backupPath)
) )
return True return
return
return False @pyqtSlot(bool)
def _toggledBackupOnClose(self, state: bool) -> None:
def _toggledBackupOnClose(self, theState): """Toggle switch that depends on the backup on close switch."""
"""Enable or disable switch that depends on the backup on close self.askBeforeBackup.setEnabled(state)
switch.
"""
self.askBeforeBackup.setEnabled(theState)
return return
# END Class GuiPreferencesProjects # END Class GuiPreferencesProjects
@@ -488,7 +483,7 @@ class GuiPreferencesProjects(QWidget):
class GuiPreferencesDocuments(QWidget): class GuiPreferencesDocuments(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
# The Form # The Form
@@ -604,9 +599,8 @@ class GuiPreferencesDocuments(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab. """Save the values set for this tab."""
"""
# Text Style # Text Style
CONFIG.setTextFont(self.textFont.text(), self.textSize.value()) CONFIG.setTextFont(self.textFont.text(), self.textSize.value())
@@ -621,12 +615,12 @@ class GuiPreferencesDocuments(QWidget):
return return
## ##
# Slots # Private Slots
## ##
@pyqtSlot()
def _selectFont(self): def _selectFont(self):
"""Open the QFontDialog and set a font for the font style. """Open the QFontDialog and set a font for the font style."""
"""
currFont = QFont() currFont = QFont()
currFont.setFamily(CONFIG.textFont) currFont.setFamily(CONFIG.textFont)
currFont.setPointSize(CONFIG.textSize) currFont.setPointSize(CONFIG.textSize)
@@ -642,7 +636,7 @@ class GuiPreferencesDocuments(QWidget):
class GuiPreferencesEditor(QWidget): class GuiPreferencesEditor(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
# The Form # The Form
@@ -726,6 +720,15 @@ class GuiPreferencesEditor(QWidget):
# ================ # ================
self.mainForm.addGroupLabel(self.tr("Scroll Behaviour")) self.mainForm.addGroupLabel(self.tr("Scroll Behaviour"))
# Scroll Past End
self.scrollPastEnd = NSwitch()
self.scrollPastEnd.setChecked(CONFIG.scrollPastEnd)
self.mainForm.addRow(
self.tr("Scroll past end of the document"),
self.scrollPastEnd,
self.tr("Also centres the cursor when scrolling.")
)
# Typewriter Scrolling # Typewriter Scrolling
self.autoScroll = NSwitch() self.autoScroll = NSwitch()
self.autoScroll.setChecked(CONFIG.autoScroll) self.autoScroll.setChecked(CONFIG.autoScroll)
@@ -750,7 +753,7 @@ class GuiPreferencesEditor(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab.""" """Save the values set for this tab."""
# Spell Checking # Spell Checking
CONFIG.spellLanguage = self.spellLanguage.currentData() CONFIG.spellLanguage = self.spellLanguage.currentData()
@@ -766,6 +769,7 @@ class GuiPreferencesEditor(QWidget):
# Scroll Behaviour # Scroll Behaviour
CONFIG.autoScroll = self.autoScroll.isChecked() CONFIG.autoScroll = self.autoScroll.isChecked()
CONFIG.autoScrollPos = self.autoScrollPos.value() CONFIG.autoScrollPos = self.autoScrollPos.value()
CONFIG.scrollPastEnd = self.scrollPastEnd.isChecked()
return return
@@ -774,7 +778,7 @@ class GuiPreferencesEditor(QWidget):
class GuiPreferencesSyntax(QWidget): class GuiPreferencesSyntax(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
self.prefsGui = prefsGui self.prefsGui = prefsGui
@@ -840,9 +844,8 @@ class GuiPreferencesSyntax(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab. """Save the values set for this tab."""
"""
highlightQuotes = self.highlightQuotes.isChecked() highlightQuotes = self.highlightQuotes.isChecked()
allowOpenSQuote = self.allowOpenSQuote.isChecked() allowOpenSQuote = self.allowOpenSQuote.isChecked()
allowOpenDQuote = self.allowOpenDQuote.isChecked() allowOpenDQuote = self.allowOpenDQuote.isChecked()
@@ -862,15 +865,14 @@ class GuiPreferencesSyntax(QWidget):
return return
## ##
# Slots # Private Slots
## ##
def _toggleHighlightQuotes(self, theState): @pyqtSlot(bool)
"""Enables or disables switches controlled by the highlight def _toggleHighlightQuotes(self, state: bool) -> None:
quotes switch. """Toggle switches controlled by the highlight quotes switch."""
""" self.allowOpenSQuote.setEnabled(state)
self.allowOpenSQuote.setEnabled(theState) self.allowOpenDQuote.setEnabled(state)
self.allowOpenDQuote.setEnabled(theState)
return return
# END Class GuiPreferencesSyntax # END Class GuiPreferencesSyntax
@@ -878,7 +880,7 @@ class GuiPreferencesSyntax(QWidget):
class GuiPreferencesAutomation(QWidget): class GuiPreferencesAutomation(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
# The Form # The Form
@@ -989,9 +991,8 @@ class GuiPreferencesAutomation(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab. """Save the values set for this tab."""
"""
# Automatic Features # Automatic Features
CONFIG.autoSelect = self.autoSelect.isChecked() CONFIG.autoSelect = self.autoSelect.isChecked()
CONFIG.doReplace = self.doReplace.isChecked() CONFIG.doReplace = self.doReplace.isChecked()
@@ -1010,18 +1011,17 @@ class GuiPreferencesAutomation(QWidget):
return return
## ##
# Slots # Private Slots
## ##
def _toggleAutoReplaceMain(self, theState): @pyqtSlot(bool)
"""Enables or disables switches controlled by the main auto def _toggleAutoReplaceMain(self, state: bool) -> None:
replace switch. """Toggle switches controlled by the auto replace switch."""
""" self.doReplaceSQuote.setEnabled(state)
self.doReplaceSQuote.setEnabled(theState) self.doReplaceDQuote.setEnabled(state)
self.doReplaceDQuote.setEnabled(theState) self.doReplaceDash.setEnabled(state)
self.doReplaceDash.setEnabled(theState) self.doReplaceDots.setEnabled(state)
self.doReplaceDots.setEnabled(theState) self.fmtPadThin.setEnabled(state)
self.fmtPadThin.setEnabled(theState)
return return
# END Class GuiPreferencesAutomation # END Class GuiPreferencesAutomation
@@ -1029,7 +1029,7 @@ class GuiPreferencesAutomation(QWidget):
class GuiPreferencesQuotes(QWidget): class GuiPreferencesQuotes(QWidget):
def __init__(self, prefsGui): def __init__(self, prefsGui: GuiPreferences) -> None:
super().__init__(parent=prefsGui) super().__init__(parent=prefsGui)
# The Form # The Form
@@ -1113,9 +1113,8 @@ class GuiPreferencesQuotes(QWidget):
return return
def saveValues(self): def saveValues(self) -> None:
"""Save the values set for this tab. """Save the values set for this tab."""
"""
# Quotation Style # Quotation Style
CONFIG.fmtSQuoteOpen = self.quoteSym["SO"].text() CONFIG.fmtSQuoteOpen = self.quoteSym["SO"].text()
CONFIG.fmtSQuoteClose = self.quoteSym["SC"].text() CONFIG.fmtSQuoteClose = self.quoteSym["SC"].text()
@@ -1124,12 +1123,11 @@ class GuiPreferencesQuotes(QWidget):
return return
## ##
# Slots # Internal Functions
## ##
def _getQuote(self, qType): def _getQuote(self, qType: str) -> None:
"""Dialog for single quote open. """Dialog for single quote open."""
"""
qtBox = GuiQuoteSelect(self, currentQuote=self.quoteSym[qType].text()) qtBox = GuiQuoteSelect(self, currentQuote=self.quoteSym[qType].text())
if qtBox.exec_() == QDialog.Accepted: if qtBox.exec_() == QDialog.Accepted:
self.quoteSym[qType].setText(qtBox.selectedQuote) self.quoteSym[qType].setText(qtBox.selectedQuote)
+2 -2
View File
@@ -164,7 +164,6 @@ class GuiDocEditor(QPlainTextEdit):
self.setMinimumWidth(CONFIG.pxInt(300)) self.setMinimumWidth(CONFIG.pxInt(300))
self.setAutoFillBackground(True) self.setAutoFillBackground(True)
self.setFrameStyle(QFrame.NoFrame) self.setFrameStyle(QFrame.NoFrame)
self.setCenterOnScroll(True)
# Custom Shortcuts # Custom Shortcuts
self.keyContext = QShortcut(self) self.keyContext = QShortcut(self)
@@ -342,7 +341,8 @@ class GuiDocEditor(QPlainTextEdit):
self._qDocument.setDefaultTextOption(options) self._qDocument.setDefaultTextOption(options)
# Scroll bars # Scrolling
self.setCenterOnScroll(CONFIG.scrollPastEnd)
if CONFIG.hideVScroll: if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else: else:
@@ -45,6 +45,7 @@ repdash = True
repdots = True repdots = True
autoscroll = False autoscroll = False
autoscrollpos = 30 autoscrollpos = 30
scrollpastend = True
fmtsquoteopen = fmtsquoteopen =
fmtsquoteclose = fmtsquoteclose =
fmtdquoteopen = “ fmtdquoteopen = “
@@ -45,6 +45,7 @@ repdash = True
repdots = True repdots = True
autoscroll = True autoscroll = True
autoscrollpos = 30 autoscrollpos = 30
scrollpastend = True
fmtsquoteopen = fmtsquoteopen =
fmtsquoteclose = fmtsquoteclose =
fmtdquoteopen = “ fmtdquoteopen = “