Improve dialogue highlighting settings (#2457)

This commit is contained in:
Veronica Berglyd Olsen
2025-07-06 18:27:26 +02:00
committed by GitHub
2 changed files with 47 additions and 17 deletions
+38 -11
View File
@@ -29,7 +29,7 @@ import logging
from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt6.QtGui import QAction, QCloseEvent, QKeyEvent, QKeySequence from PyQt6.QtGui import QAction, QCloseEvent, QKeyEvent, QKeySequence
from PyQt6.QtWidgets import ( from PyQt6.QtWidgets import (
QCompleter, QDialogButtonBox, QFileDialog, QHBoxLayout, QLineEdit, QCompleter, QDialogButtonBox, QFileDialog, QHBoxLayout, QLineEdit, QMenu,
QPushButton, QVBoxLayout, QWidget QPushButton, QVBoxLayout, QWidget
) )
@@ -600,6 +600,7 @@ class GuiPreferences(NDialog):
self.sidebar.addButton(title, section) self.sidebar.addButton(title, section)
self.mainForm.addGroupLabel(title, section) self.mainForm.addGroupLabel(title, section)
# Dialogue Quotes
self.dialogStyle = NComboBox(self) self.dialogStyle = NComboBox(self)
self.dialogStyle.addItem(self.tr("None"), 0) self.dialogStyle.addItem(self.tr("None"), 0)
self.dialogStyle.addItem(self.tr("Single Quotes"), 1) self.dialogStyle.addItem(self.tr("Single Quotes"), 1)
@@ -611,6 +612,15 @@ class GuiPreferences(NDialog):
self.tr("Applies to the selected quote styles.") self.tr("Applies to the selected quote styles.")
) )
# Open-Ended Dialogue
self.allowOpenDial = NSwitch(self)
self.allowOpenDial.setChecked(CONFIG.allowOpenDial)
self.mainForm.addRow(
self.tr("Allow open-ended dialogue"), self.allowOpenDial,
self.tr("Highlight dialogue line with no closing quote.")
)
# Alternative Dialogue
self.altDialogOpen = QLineEdit(self) self.altDialogOpen = QLineEdit(self)
self.altDialogOpen.setMaxLength(4) self.altDialogOpen.setMaxLength(4)
self.altDialogOpen.setFixedWidth(boxFixed) self.altDialogOpen.setFixedWidth(boxFixed)
@@ -628,23 +638,30 @@ class GuiPreferences(NDialog):
self.tr("Custom highlighting of dialogue text.") self.tr("Custom highlighting of dialogue text.")
) )
self.allowOpenDial = NSwitch(self) # Dialogue Line
self.allowOpenDial.setChecked(CONFIG.allowOpenDial) self.mnLineSymbols = QMenu(self)
self.mainForm.addRow( for symbol in nwQuotes.ALLOWED:
self.tr("Allow open-ended dialogue"), self.allowOpenDial, label = trConst(nwQuotes.SYMBOLS.get(symbol, nwQuotes.DASHES.get(symbol, "None")))
self.tr("Highlight dialogue line with no closing quote.") self.mnLineSymbols.addAction(
) f"[ {symbol } ] {label}",
lambda symbol=symbol: self._insertDialogLineSymbol(symbol)
)
self.dialogLine = QLineEdit(self) self.dialogLine = QLineEdit(self)
self.dialogLine.setMaxLength(4) self.dialogLine.setMinimumWidth(100)
self.dialogLine.setFixedWidth(boxFixed)
self.dialogLine.setAlignment(QtAlignCenter) self.dialogLine.setAlignment(QtAlignCenter)
self.dialogLine.setText(CONFIG.dialogLine) self.dialogLine.setText(" ".join(CONFIG.dialogLine))
self.dialogLineButton = NIconToolButton(self, iSz, "add", "green")
self.dialogLineButton.setMenu(self.mnLineSymbols)
self.mainForm.addRow( self.mainForm.addRow(
self.tr("Dialogue line symbols"), self.dialogLine, self.tr("Dialogue line symbols"), self.dialogLine,
self.tr("Lines starting with any of these symbols are dialogue.") self.tr("Lines starting with any of these symbols are dialogue."),
button=self.dialogLineButton
) )
# Narrator Break
self.narratorBreak = NComboBox(self) self.narratorBreak = NComboBox(self)
self.narratorDialog = NComboBox(self) self.narratorDialog = NComboBox(self)
for key, value in nwQuotes.DASHES.items(): for key, value in nwQuotes.DASHES.items():
@@ -664,6 +681,7 @@ class GuiPreferences(NDialog):
self.tr("Alternates dialogue highlighting within any paragraph.") self.tr("Alternates dialogue highlighting within any paragraph.")
) )
# Emphasis
self.highlightEmph = NSwitch(self) self.highlightEmph = NSwitch(self)
self.highlightEmph.setChecked(CONFIG.highlightEmph) self.highlightEmph.setChecked(CONFIG.highlightEmph)
self.mainForm.addRow( self.mainForm.addRow(
@@ -671,6 +689,7 @@ class GuiPreferences(NDialog):
self.tr("Applies to the document editor only.") self.tr("Applies to the document editor only.")
) )
# Additional Spaces
self.showMultiSpaces = NSwitch(self) self.showMultiSpaces = NSwitch(self)
self.showMultiSpaces.setChecked(CONFIG.showMultiSpaces) self.showMultiSpaces.setChecked(CONFIG.showMultiSpaces)
self.mainForm.addRow( self.mainForm.addRow(
@@ -906,6 +925,14 @@ class GuiPreferences(NDialog):
self.askBeforeBackup.setEnabled(state) self.askBeforeBackup.setEnabled(state)
return return
@pyqtSlot(str)
def _insertDialogLineSymbol(self, symbol: str) -> None:
"""Insert a symbol in the dialogue line box."""
current = self.dialogLine.text()
values = processDialogSymbols(f"{current} {symbol}")
self.dialogLine.setText(" ".join(values))
return
@pyqtSlot(bool) @pyqtSlot(bool)
def _toggleAutoReplaceMain(self, state: bool) -> None: def _toggleAutoReplaceMain(self, state: bool) -> None:
"""Toggle switches controlled by the auto replace switch.""" """Toggle switches controlled by the auto replace switch."""
+9 -6
View File
@@ -268,14 +268,17 @@ def testDlgPreferences_Settings(qtbot, monkeypatch, nwGUI, fncPath, tstPaths):
# Text Highlighting # Text Highlighting
prefs.dialogStyle.setCurrentData(3, 0) prefs.dialogStyle.setCurrentData(3, 0)
prefs.allowOpenDial.setChecked(False) prefs.allowOpenDial.setChecked(False)
prefs.dialogLine.setText("") prefs.dialogLine.setText(nwUnicode.U_EMDASH)
prefs.narratorBreak.setCurrentData("", "") prefs.narratorBreak.setCurrentData(nwUnicode.U_EMDASH, "")
prefs.narratorDialog.setCurrentData("", "") prefs.narratorDialog.setCurrentData(nwUnicode.U_EMDASH, "")
prefs.altDialogOpen.setText("%") # Symbol also tests for #2455 prefs.altDialogOpen.setText("%") # Symbol also tests for #2455
prefs.altDialogClose.setText("%") # Symbol also tests for #2455 prefs.altDialogClose.setText("%") # Symbol also tests for #2455
prefs.highlightEmph.setChecked(False) prefs.highlightEmph.setChecked(False)
prefs.showMultiSpaces.setChecked(False) prefs.showMultiSpaces.setChecked(False)
prefs._insertDialogLineSymbol(nwUnicode.U_ENDASH)
assert prefs.dialogLine.text() == f"{nwUnicode.U_ENDASH} {nwUnicode.U_EMDASH}"
assert CONFIG.dialogStyle == 2 assert CONFIG.dialogStyle == 2
assert CONFIG.allowOpenDial is True assert CONFIG.allowOpenDial is True
assert CONFIG.dialogLine == "" assert CONFIG.dialogLine == ""
@@ -398,9 +401,9 @@ def testDlgPreferences_Settings(qtbot, monkeypatch, nwGUI, fncPath, tstPaths):
# Text Highlighting # Text Highlighting
assert CONFIG.dialogStyle == 3 assert CONFIG.dialogStyle == 3
assert CONFIG.allowOpenDial is False assert CONFIG.allowOpenDial is False
assert CONFIG.dialogLine == "" assert CONFIG.dialogLine == f"{nwUnicode.U_ENDASH}{nwUnicode.U_EMDASH}"
assert CONFIG.narratorBreak == "" assert CONFIG.narratorBreak == nwUnicode.U_EMDASH
assert CONFIG.narratorDialog == "" assert CONFIG.narratorDialog == nwUnicode.U_EMDASH
assert CONFIG.altDialogOpen == "%" assert CONFIG.altDialogOpen == "%"
assert CONFIG.altDialogClose == "%" assert CONFIG.altDialogClose == "%"
assert CONFIG.highlightEmph is False assert CONFIG.highlightEmph is False