Added spell check language setting to project class and project settings

This commit is contained in:
Veronica K. B. Olsen
2020-09-05 17:18:18 +02:00
parent f2bb0fcea6
commit 6e949b975f
3 changed files with 48 additions and 13 deletions
+15 -6
View File
@@ -76,6 +76,7 @@ class NWProject():
self.projCache = None # The full path to the project's cache folder 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.projContent = None # The full path to the project's content folder
self.projDict = None # The spell check dictionary 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 self.projFile = None # The file name of the project main XML file
# Project Meta # Project Meta
@@ -190,6 +191,7 @@ class NWProject():
self.projCache = None self.projCache = None
self.projContent = None self.projContent = None
self.projDict = None self.projDict = None
self.projLang = None
self.projFile = nwFiles.PROJ_FILE self.projFile = nwFiles.PROJ_FILE
self.projName = "" self.projName = ""
self.bookTitle = "" self.bookTitle = ""
@@ -561,6 +563,8 @@ class NWProject():
self.doBackup = checkBool(xItem.text, False) self.doBackup = checkBool(xItem.text, False)
elif xItem.tag == "spellCheck": elif xItem.tag == "spellCheck":
self.spellCheck = checkBool(xItem.text, False) self.spellCheck = checkBool(xItem.text, False)
elif xItem.tag == "spellLang":
self.projLang = checkString(xItem.text, None, True)
elif xItem.tag == "autoOutline": elif xItem.tag == "autoOutline":
self.autoOutline = checkBool(xItem.text, True) self.autoOutline = checkBool(xItem.text, True)
elif xItem.tag == "lastEdited": elif xItem.tag == "lastEdited":
@@ -654,8 +658,8 @@ class NWProject():
# Save Project Meta # Save Project Meta
xProject = etree.SubElement(nwXML, "project") xProject = etree.SubElement(nwXML, "project")
self._packProjectValue(xProject, "name", self.projName, True) self._packProjectValue(xProject, "name", self.projName)
self._packProjectValue(xProject, "title", self.bookTitle, True) self._packProjectValue(xProject, "title", self.bookTitle)
self._packProjectValue(xProject, "author", self.bookAuthors) self._packProjectValue(xProject, "author", self.bookAuthors)
self._packProjectValue(xProject, "saveCount", str(self.saveCount)) self._packProjectValue(xProject, "saveCount", str(self.saveCount))
self._packProjectValue(xProject, "autoCount", str(self.autoCount)) self._packProjectValue(xProject, "autoCount", str(self.autoCount))
@@ -665,6 +669,7 @@ class NWProject():
xSettings = etree.SubElement(nwXML, "settings") xSettings = etree.SubElement(nwXML, "settings")
self._packProjectValue(xSettings, "doBackup", self.doBackup) self._packProjectValue(xSettings, "doBackup", self.doBackup)
self._packProjectValue(xSettings, "spellCheck", self.spellCheck) self._packProjectValue(xSettings, "spellCheck", self.spellCheck)
self._packProjectValue(xSettings, "spellLang", self.projLang)
self._packProjectValue(xSettings, "autoOutline", self.autoOutline) self._packProjectValue(xSettings, "autoOutline", self.autoOutline)
self._packProjectValue(xSettings, "lastEdited", self.lastEdited) self._packProjectValue(xSettings, "lastEdited", self.lastEdited)
self._packProjectValue(xSettings, "lastViewed", self.lastViewed) self._packProjectValue(xSettings, "lastViewed", self.lastViewed)
@@ -990,6 +995,12 @@ class NWProject():
self.setProjectChanged(True) self.setProjectChanged(True)
return 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): def setAutoOutline(self, theMode):
"""Enable/disable automatic update of project outline. """Enable/disable automatic update of project outline.
""" """
@@ -1240,12 +1251,10 @@ class NWProject():
if not isinstance(theValue, list): if not isinstance(theValue, list):
theValue = [theValue] theValue = [theValue]
for aValue in theValue: for aValue in theValue:
if not isinstance(aValue, str): if (aValue == "" or aValue is None) and not allowNone:
aValue = str(aValue)
if aValue == "" and not allowNone:
continue continue
xItem = etree.SubElement(xParent, theName) xItem = etree.SubElement(xParent, theName)
xItem.text = aValue xItem.text = str(aValue)
return return
def _packProjectKeyValue(self, xParent, theName, theDict): def _packProjectKeyValue(self, xParent, theName, theDict):
+3 -2
View File
@@ -48,7 +48,7 @@ from PyQt5.QtWidgets import (
QFrame QFrame
) )
from nw.core import NWDoc, NWSpellSimple, countWords from nw.core import NWDoc, NWSpellCheck, NWSpellSimple, countWords
from nw.gui.dochighlight import GuiDocHighlighter from nw.gui.dochighlight import GuiDocHighlighter
from nw.common import transferCase from nw.common import transferCase
from nw.constants import ( from nw.constants import (
@@ -73,6 +73,7 @@ class GuiDocEditor(QTextEdit):
self.spellCheck = False self.spellCheck = False
self.nwDocument = NWDoc(self.theProject, self.theParent) self.nwDocument = NWDoc(self.theProject, self.theParent)
self.theHandle = None self.theHandle = None
self.theDict = None
# Document Variables # Document Variables
self.charCount = 0 self.charCount = 0
@@ -1334,7 +1335,7 @@ class GuiDocEditor(QTextEdit):
"""Create the spell checking object based on the spellTool """Create the spell checking object based on the spellTool
setting in config. setting in config.
""" """
if self.mainConf.spellTool == "enchant": if self.mainConf.spellTool == NWSpellCheck.SP_ENCHANT:
from nw.core.spellcheck import NWSpellEnchant from nw.core.spellcheck import NWSpellEnchant
self.theDict = NWSpellEnchant() self.theDict = NWSpellEnchant()
else: else:
+30 -5
View File
@@ -33,7 +33,7 @@ from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QHBoxLayout, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit, QLabel, QHBoxLayout, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit, QLabel,
QWidget, QDialogButtonBox, QListWidget, QPushButton, QListWidgetItem, QWidget, QDialogButtonBox, QListWidget, QPushButton, QListWidgetItem,
QColorDialog, QAbstractItemView, QTreeWidget, QTreeWidgetItem QColorDialog, QAbstractItemView, QTreeWidget, QTreeWidgetItem, QComboBox
) )
from nw.constants import nwAlert from nw.constants import nwAlert
@@ -55,12 +55,15 @@ class GuiProjectSettings(PagedDialog):
self.theProject.countStatus() self.theProject.countStatus()
self.setWindowTitle("Project Settings") 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.resize(
self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winWidth", 570)), self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winWidth", wW)),
self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winHeight", 355)) self.mainConf.pxInt(self.optState.getInt("GuiProjectSettings", "winHeight", wH))
) )
self.tabMain = GuiProjectEditMain(self.theParent, self.theProject) self.tabMain = GuiProjectEditMain(self.theParent, self.theProject)
@@ -96,11 +99,13 @@ class GuiProjectSettings(PagedDialog):
projName = self.tabMain.editName.text() projName = self.tabMain.editName.text()
bookTitle = self.tabMain.editTitle.text() bookTitle = self.tabMain.editTitle.text()
bookAuthors = self.tabMain.editAuthors.toPlainText() bookAuthors = self.tabMain.editAuthors.toPlainText()
spellLang = self.tabMain.spellLang.currentData()
doBackup = not self.tabMain.doBackup.isChecked() doBackup = not self.tabMain.doBackup.isChecked()
self.theProject.setProjectName(projName) self.theProject.setProjectName(projName)
self.theProject.setBookTitle(bookTitle) self.theProject.setBookTitle(bookTitle)
self.theProject.setBookAuthors(bookAuthors) self.theProject.setBookAuthors(bookAuthors)
self.theProject.setSpellLang(spellLang)
self.theProject.setProjBackup(doBackup) self.theProject.setProjBackup(doBackup)
if self.tabStatus.colChanged: if self.tabStatus.colChanged:
@@ -191,6 +196,26 @@ class GuiProjectEditMain(QWidget):
"One name per line." "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 = QSwitch(self)
self.doBackup.setChecked(not self.theProject.doBackup) self.doBackup.setChecked(not self.theProject.doBackup)
self.mainForm.addRow( self.mainForm.addRow(