From 6e949b975f893a13e0a312b2c12bdf87e3a5a386 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 5 Sep 2020 17:18:18 +0200 Subject: [PATCH] Added spell check language setting to project class and project settings --- nw/core/project.py | 21 +++++++++++++++------ nw/gui/doceditor.py | 5 +++-- nw/gui/projsettings.py | 35 ++++++++++++++++++++++++++++++----- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index a2a670f5..dd3f8c05 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -76,6 +76,7 @@ class NWProject(): self.projCache = None # The full path to the project's cache folder self.projContent = None # The full path to the project's content folder self.projDict = None # The spell check dictionary + self.projLang = None # The spell check language, if different than default self.projFile = None # The file name of the project main XML file # Project Meta @@ -190,6 +191,7 @@ class NWProject(): self.projCache = None self.projContent = None self.projDict = None + self.projLang = None self.projFile = nwFiles.PROJ_FILE self.projName = "" self.bookTitle = "" @@ -561,6 +563,8 @@ class NWProject(): self.doBackup = checkBool(xItem.text, False) elif xItem.tag == "spellCheck": self.spellCheck = checkBool(xItem.text, False) + elif xItem.tag == "spellLang": + self.projLang = checkString(xItem.text, None, True) elif xItem.tag == "autoOutline": self.autoOutline = checkBool(xItem.text, True) elif xItem.tag == "lastEdited": @@ -654,8 +658,8 @@ class NWProject(): # Save Project Meta xProject = etree.SubElement(nwXML, "project") - self._packProjectValue(xProject, "name", self.projName, True) - self._packProjectValue(xProject, "title", self.bookTitle, True) + self._packProjectValue(xProject, "name", self.projName) + self._packProjectValue(xProject, "title", self.bookTitle) self._packProjectValue(xProject, "author", self.bookAuthors) self._packProjectValue(xProject, "saveCount", str(self.saveCount)) self._packProjectValue(xProject, "autoCount", str(self.autoCount)) @@ -665,6 +669,7 @@ class NWProject(): xSettings = etree.SubElement(nwXML, "settings") self._packProjectValue(xSettings, "doBackup", self.doBackup) self._packProjectValue(xSettings, "spellCheck", self.spellCheck) + self._packProjectValue(xSettings, "spellLang", self.projLang) self._packProjectValue(xSettings, "autoOutline", self.autoOutline) self._packProjectValue(xSettings, "lastEdited", self.lastEdited) self._packProjectValue(xSettings, "lastViewed", self.lastViewed) @@ -990,6 +995,12 @@ class NWProject(): self.setProjectChanged(True) return True + def setSpellLang(self, theLang): + """Set the project-specific spell check language. + """ + self.projLang = checkString(theLang, None, True) + return True + def setAutoOutline(self, theMode): """Enable/disable automatic update of project outline. """ @@ -1240,12 +1251,10 @@ class NWProject(): if not isinstance(theValue, list): theValue = [theValue] for aValue in theValue: - if not isinstance(aValue, str): - aValue = str(aValue) - if aValue == "" and not allowNone: + if (aValue == "" or aValue is None) and not allowNone: continue xItem = etree.SubElement(xParent, theName) - xItem.text = aValue + xItem.text = str(aValue) return def _packProjectKeyValue(self, xParent, theName, theDict): diff --git a/nw/gui/doceditor.py b/nw/gui/doceditor.py index b0e4b5f4..470f04ca 100644 --- a/nw/gui/doceditor.py +++ b/nw/gui/doceditor.py @@ -48,7 +48,7 @@ from PyQt5.QtWidgets import ( QFrame ) -from nw.core import NWDoc, NWSpellSimple, countWords +from nw.core import NWDoc, NWSpellCheck, NWSpellSimple, countWords from nw.gui.dochighlight import GuiDocHighlighter from nw.common import transferCase from nw.constants import ( @@ -73,6 +73,7 @@ class GuiDocEditor(QTextEdit): self.spellCheck = False self.nwDocument = NWDoc(self.theProject, self.theParent) self.theHandle = None + self.theDict = None # Document Variables self.charCount = 0 @@ -1334,7 +1335,7 @@ class GuiDocEditor(QTextEdit): """Create the spell checking object based on the spellTool setting in config. """ - if self.mainConf.spellTool == "enchant": + if self.mainConf.spellTool == NWSpellCheck.SP_ENCHANT: from nw.core.spellcheck import NWSpellEnchant self.theDict = NWSpellEnchant() else: diff --git a/nw/gui/projsettings.py b/nw/gui/projsettings.py index 066c618f..a00d345e 100644 --- a/nw/gui/projsettings.py +++ b/nw/gui/projsettings.py @@ -33,7 +33,7 @@ from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush from PyQt5.QtWidgets import ( QHBoxLayout, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit, QLabel, QWidget, QDialogButtonBox, QListWidget, QPushButton, QListWidgetItem, - QColorDialog, QAbstractItemView, QTreeWidget, QTreeWidgetItem + QColorDialog, QAbstractItemView, QTreeWidget, QTreeWidgetItem, QComboBox ) from nw.constants import nwAlert @@ -55,12 +55,15 @@ class GuiProjectSettings(PagedDialog): self.theProject.countStatus() self.setWindowTitle("Project Settings") - self.setMinimumWidth(self.mainConf.pxInt(570)) - self.setMinimumHeight(self.mainConf.pxInt(355)) + wW = self.mainConf.pxInt(570) + wH = self.mainConf.pxInt(375) + + self.setMinimumWidth(wW) + self.setMinimumHeight(wH) self.resize( - self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winWidth", 570)), - self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winHeight", 355)) + self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winWidth", wW)), + self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winHeight", wH)) ) self.tabMain = GuiProjectEditMain(self.theParent, self.theProject) @@ -96,11 +99,13 @@ class GuiProjectSettings(PagedDialog): projName = self.tabMain.editName.text() bookTitle = self.tabMain.editTitle.text() bookAuthors = self.tabMain.editAuthors.toPlainText() + spellLang = self.tabMain.spellLang.currentData() doBackup = not self.tabMain.doBackup.isChecked() self.theProject.setProjectName(projName) self.theProject.setBookTitle(bookTitle) self.theProject.setBookAuthors(bookAuthors) + self.theProject.setSpellLang(spellLang) self.theProject.setProjBackup(doBackup) if self.tabStatus.colChanged: @@ -191,6 +196,26 @@ class GuiProjectEditMain(QWidget): "One name per line." ) + self.spellLang = QComboBox(self) + theDict = self.theParent.docEditor.theDict + self.spellLang.addItem("Default", "None") + if theDict is not None: + for spTag, spName in theDict.listDictionaries(): + self.spellLang.addItem(spName, spTag) + + self.mainForm.addRow( + "Spell check language", + self.spellLang, + "Overrides main preferences." + ) + + if self.theProject.projLang is None: + spellIdx = 0 + else: + spellIdx = self.spellLang.findData(self.theProject.projLang) + if spellIdx != -1: + self.spellLang.setCurrentIndex(spellIdx) + self.doBackup = QSwitch(self) self.doBackup.setChecked(not self.theProject.doBackup) self.mainForm.addRow(