Convert Preferences dialog to save/cancel like Project Settings

This commit is contained in:
Veronica Berglyd Olsen
2024-07-03 18:29:38 +02:00
parent 069e35565f
commit e1bcfcfc05
2 changed files with 12 additions and 31 deletions
+9 -22
View File
@@ -29,8 +29,8 @@ import logging
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QKeyEvent, QKeySequence from PyQt5.QtGui import QCloseEvent, QKeyEvent, QKeySequence
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QAbstractButton, QCompleter, QDialogButtonBox, QFileDialog, QHBoxLayout, QCompleter, QDialogButtonBox, QFileDialog, QHBoxLayout, QLineEdit,
QLineEdit, QPushButton, QVBoxLayout, QWidget QPushButton, QVBoxLayout, QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
@@ -43,10 +43,7 @@ from novelwriter.extensions.modified import (
) )
from novelwriter.extensions.pagedsidebar import NPagedSideBar from novelwriter.extensions.pagedsidebar import NPagedSideBar
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import ( from novelwriter.types import QtAlignCenter, QtDialogCancel, QtDialogSave
QtAlignCenter, QtDialogApply, QtDialogClose, QtDialogSave, QtRoleAccept,
QtRoleApply, QtRoleReject
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -89,8 +86,9 @@ class GuiPreferences(NDialog):
self.mainForm.setHelpTextStyle(SHARED.theme.helpText) self.mainForm.setHelpTextStyle(SHARED.theme.helpText)
# Buttons # Buttons
self.buttonBox = QDialogButtonBox(QtDialogApply | QtDialogSave | QtDialogClose, self) self.buttonBox = QDialogButtonBox(QtDialogSave | QtDialogCancel, self)
self.buttonBox.clicked.connect(self._dialogButtonClicked) self.buttonBox.accepted.connect(self._doSave)
self.buttonBox.rejected.connect(self.reject)
# Assemble # Assemble
self.searchBox = QHBoxLayout() self.searchBox = QHBoxLayout()
@@ -784,19 +782,6 @@ class GuiPreferences(NDialog):
# Private Slots # Private Slots
## ##
@pyqtSlot("QAbstractButton*")
def _dialogButtonClicked(self, button: QAbstractButton) -> None:
"""Handle button clicks from the dialog button box."""
role = self.buttonBox.buttonRole(button)
if role == QtRoleApply:
self._saveValues()
elif role == QtRoleAccept:
self._saveValues()
self.close()
elif role == QtRoleReject:
self.close()
return
@pyqtSlot(int) @pyqtSlot(int)
def _sidebarClicked(self, section: int) -> None: def _sidebarClicked(self, section: int) -> None:
"""Process a user request to switch page.""" """Process a user request to switch page."""
@@ -897,7 +882,7 @@ class GuiPreferences(NDialog):
CONFIG.setPreferencesWinSize(self.width(), self.height()) CONFIG.setPreferencesWinSize(self.width(), self.height())
return return
def _saveValues(self) -> None: def _doSave(self) -> None:
"""Save the values set in the form.""" """Save the values set in the form."""
updateTheme = False updateTheme = False
needsRestart = False needsRestart = False
@@ -1012,4 +997,6 @@ class GuiPreferences(NDialog):
CONFIG.saveConfig() CONFIG.saveConfig()
self.newPreferencesReady.emit(needsRestart, refreshTree, updateTheme, updateSyntax) self.newPreferencesReady.emit(needsRestart, refreshTree, updateTheme, updateSyntax)
self.close()
return return
+3 -9
View File
@@ -30,7 +30,7 @@ from novelwriter import CONFIG, SHARED
from novelwriter.constants import nwUnicode from novelwriter.constants import nwUnicode
from novelwriter.dialogs.preferences import GuiPreferences from novelwriter.dialogs.preferences import GuiPreferences
from novelwriter.dialogs.quotes import GuiQuoteSelect from novelwriter.dialogs.quotes import GuiQuoteSelect
from novelwriter.types import QtDialogApply, QtDialogClose, QtDialogSave, QtModNone from novelwriter.types import QtDialogCancel, QtDialogSave, QtModNone
KEY_DELAY = 1 KEY_DELAY = 1
@@ -116,12 +116,6 @@ def testDlgPreferences_Actions(qtbot, monkeypatch, nwGUI):
prefs._gotoSearch() prefs._gotoSearch()
assert value.args[0] < old assert value.args[0] < old
# Check Apply Button
prefs.show()
with qtbot.waitSignal(prefs.newPreferencesReady) as signal:
prefs.buttonBox.button(QtDialogApply).click()
assert signal.args == [False, False, False, False]
# Check Save Button # Check Save Button
prefs.show() prefs.show()
with qtbot.waitSignal(prefs.newPreferencesReady) as signal: with qtbot.waitSignal(prefs.newPreferencesReady) as signal:
@@ -130,7 +124,7 @@ def testDlgPreferences_Actions(qtbot, monkeypatch, nwGUI):
# Check Close Button # Check Close Button
prefs.show() prefs.show()
prefs.buttonBox.button(QtDialogClose).click() prefs.buttonBox.button(QtDialogCancel).click()
assert prefs.isHidden() is True assert prefs.isHidden() is True
# Close Using Escape Key # Close Using Escape Key
@@ -315,7 +309,7 @@ def testDlgPreferences_Settings(qtbot, monkeypatch, nwGUI, tstPaths):
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QFontDatabase, "families", lambda *a: ["TestFont"]) mp.setattr(QFontDatabase, "families", lambda *a: ["TestFont"])
with qtbot.waitSignal(prefs.newPreferencesReady) as signal: with qtbot.waitSignal(prefs.newPreferencesReady) as signal:
prefs.buttonBox.button(QtDialogApply).click() prefs.buttonBox.button(QtDialogSave).click()
assert signal.args == [True, True, True, True] assert signal.args == [True, True, True, True]
# Check Settings # Check Settings