diff --git a/novelwriter/config.py b/novelwriter/config.py index 35690669..0597c82e 100644 --- a/novelwriter/config.py +++ b/novelwriter/config.py @@ -44,7 +44,7 @@ from novelwriter.common import ( NWConfigParser, checkInt, checkPath, describeFont, fontMatcher, formatTimeStamp ) -from novelwriter.constants import nwFiles, nwHtmlUnicode, nwUnicode +from novelwriter.constants import nwFiles, nwHtmlUnicode, nwQuotes, nwUnicode from novelwriter.error import formatException, logException if TYPE_CHECKING: @@ -681,8 +681,8 @@ class Config: self.dialogStyle = conf.rdInt(sec, "dialogstyle", self.dialogStyle) self.allowOpenDial = conf.rdBool(sec, "allowopendial", self.allowOpenDial) self.dialogLine = conf.rdStr(sec, "dialogline", self.dialogLine) - self.narratorBreak = conf.rdStr(sec, "narratorbreak", self.narratorBreak) - self.narratorDialog = conf.rdStr(sec, "narratordialog", self.narratorDialog) + narratorBreak = conf.rdStr(sec, "narratorbreak", self.narratorBreak) + narratorDialog = conf.rdStr(sec, "narratordialog", self.narratorDialog) self.altDialogOpen = conf.rdStr(sec, "altdialogopen", self.altDialogOpen) self.altDialogClose = conf.rdStr(sec, "altdialogclose", self.altDialogClose) self.highlightEmph = conf.rdBool(sec, "highlightemph", self.highlightEmph) @@ -721,6 +721,9 @@ class Config: logger.info("Using straight double quotes, so disabling auto-replace") self.doReplaceDQuote = False + self.narratorBreak = narratorBreak if narratorBreak in nwQuotes.DASHES else "" + self.narratorDialog = narratorDialog if narratorDialog in nwQuotes.DASHES else "" + return True def saveConfig(self) -> bool: diff --git a/novelwriter/constants.py b/novelwriter/constants.py index 9928ece4..72ba4b90 100644 --- a/novelwriter/constants.py +++ b/novelwriter/constants.py @@ -505,6 +505,13 @@ class nwQuotes: "\u300f": QT_TRANSLATE_NOOP("Constant", "Right white corner bracket"), } + DASHES: Final[dict[str, str]] = { + "": QT_TRANSLATE_NOOP("Constant", "None"), + "\u2013": QT_TRANSLATE_NOOP("Constant", "Short dash"), + "\u2014": QT_TRANSLATE_NOOP("Constant", "Long dash"), + "\u2015": QT_TRANSLATE_NOOP("Constant", "Horizontal bar"), + } + class nwUnicode: """Supported unicode character constants and their HTML equivalents.""" diff --git a/novelwriter/dialogs/preferences.py b/novelwriter/dialogs/preferences.py index aa4f9cd1..166b98be 100644 --- a/novelwriter/dialogs/preferences.py +++ b/novelwriter/dialogs/preferences.py @@ -36,7 +36,7 @@ from PyQt6.QtWidgets import ( from novelwriter import CONFIG, SHARED from novelwriter.common import compact, describeFont, uniqueCompact from novelwriter.config import DEF_GUI, DEF_ICONS, DEF_SYNTAX, DEF_TREECOL -from novelwriter.constants import nwLabels, nwUnicode, trConst +from novelwriter.constants import nwLabels, nwQuotes, nwUnicode, trConst from novelwriter.dialogs.quotes import GuiQuoteSelect from novelwriter.extensions.configlayout import NColorLabel, NScrollableForm from novelwriter.extensions.modified import ( @@ -636,21 +636,20 @@ class GuiPreferences(NDialog): self.tr("Lines starting with any of these symbols are dialogue.") ) - self.narratorBreak = QLineEdit(self) - self.narratorBreak.setMaxLength(1) - self.narratorBreak.setFixedWidth(boxFixed) - self.narratorBreak.setAlignment(QtAlignCenter) - self.narratorBreak.setText(CONFIG.narratorBreak) + self.narratorBreak = NComboBox(self) + self.narratorDialog = NComboBox(self) + for key, value in nwQuotes.DASHES.items(): + label = trConst(value) + self.narratorBreak.addItem(label, key) + self.narratorDialog.addItem(label, key) + + self.narratorBreak.setCurrentData(CONFIG.narratorBreak, "") + self.narratorDialog.setCurrentData(CONFIG.narratorDialog, "") + self.mainForm.addRow( self.tr("Narrator break symbol"), self.narratorBreak, self.tr("Symbol to indicate a narrator break in dialogue.") ) - - self.narratorDialog = QLineEdit(self) - self.narratorDialog.setMaxLength(1) - self.narratorDialog.setFixedWidth(boxFixed) - self.narratorDialog.setAlignment(QtAlignCenter) - self.narratorDialog.setText(CONFIG.narratorDialog) self.mainForm.addRow( self.tr("Alternating dialogue/narration symbol"), self.narratorDialog, self.tr("Alternates dialogue highlighting within any paragraph.") @@ -1035,8 +1034,8 @@ class GuiPreferences(NDialog): dialogueStyle = self.dialogStyle.currentData() allowOpenDial = self.allowOpenDial.isChecked() dialogueLine = uniqueCompact(self.dialogLine.text()) - narratorBreak = self.narratorBreak.text().strip() - narratorDialog = self.narratorDialog.text().strip() + narratorBreak = self.narratorBreak.currentData() + narratorDialog = self.narratorDialog.currentData() altDialogOpen = compact(self.altDialogOpen.text()) altDialogClose = compact(self.altDialogClose.text()) highlightEmph = self.highlightEmph.isChecked() diff --git a/tests/test_dialogs/test_dlg_preferences.py b/tests/test_dialogs/test_dlg_preferences.py index c7a1b7e4..5cb97dd0 100644 --- a/tests/test_dialogs/test_dlg_preferences.py +++ b/tests/test_dialogs/test_dlg_preferences.py @@ -265,8 +265,8 @@ def testDlgPreferences_Settings(qtbot, monkeypatch, nwGUI, fncPath, tstPaths): prefs.dialogStyle.setCurrentData(3, 0) prefs.allowOpenDial.setChecked(False) prefs.dialogLine.setText("–") - prefs.narratorBreak.setText("–") - prefs.narratorDialog.setText("–") + prefs.narratorBreak.setCurrentData("–", "") + prefs.narratorDialog.setCurrentData("–", "") prefs.altDialogOpen.setText("<") prefs.altDialogClose.setText(">") prefs.highlightEmph.setChecked(False)