SOme cleanup of code in config, and added tab width option

This commit is contained in:
Veronica K. B. Olsen
2019-05-25 22:01:59 +02:00
parent 93f9b37587
commit 3cbea6eff2
2 changed files with 97 additions and 103 deletions
+92 -102
View File
@@ -25,6 +25,11 @@ class Config:
WIN_WIDTH = 0
WIN_HEIGHT = 1
CNF_STR = 0
CNF_INT = 1
CNF_BOOL = 2
CNF_LIST = 3
def __init__(self):
# Set Application Variables
@@ -60,6 +65,7 @@ class Config:
self.textWidth = 600
self.textMargin = [40, 40]
self.textSize = 13
self.tabWidth = 40
self.doJustify = True
self.autoSelect = True
self.doReplace = True
@@ -68,7 +74,7 @@ class Config:
self.doReplaceDash = True
self.doReplaceDots = True
self.wordCountTimer = 5.0
self.fmtDoubleQuotes = ["",""]
self.fmtSingleQuotes = ["",""]
self.fmtApostrophe = ""
@@ -117,140 +123,105 @@ class Config:
def loadConfig(self):
logger.debug("Loading config file")
confParser = configparser.ConfigParser()
cnfParse = configparser.ConfigParser()
try:
confParser.read_file(open(path.join(self.confPath,self.confFile)))
cnfParse.read_file(open(path.join(self.confPath,self.confFile)))
except Exception as e:
logger.error("Could not load config file")
return False
# Get options
## Main
cnfSec = "Main"
if confParser.has_section(cnfSec):
if confParser.has_option(cnfSec,"theme"):
self.guiTheme = confParser.get(cnfSec,"theme")
self.guiTheme = self._parseLine(cnfParse, cnfSec, "theme", self.CNF_STR)
## Sizes
cnfSec = "Sizes"
if confParser.has_section(cnfSec):
if confParser.has_option(cnfSec,"geometry"):
self.winGeometry = self.unpackList(
confParser.get(cnfSec,"geometry"), 2, self.winGeometry
)
if confParser.has_option(cnfSec,"treecols"):
self.treeColWidth = self.unpackList(
confParser.get(cnfSec,"treecols"), 3, self.treeColWidth
)
if confParser.has_option(cnfSec,"mainpane"):
self.mainPanePos = self.unpackList(
confParser.get(cnfSec,"mainpane"), 2, self.mainPanePos
)
if confParser.has_option(cnfSec,"docpane"):
self.docPanePos = self.unpackList(
confParser.get(cnfSec,"docpane"), 2, self.docPanePos
)
self.winGeometry = self._parseLine(cnfParse, cnfSec, "geometry", self.CNF_LIST, self.winGeometry)
self.treeColWidth = self._parseLine(cnfParse, cnfSec, "treecols", self.CNF_LIST, self.treeColWidth)
self.mainPanePos = self._parseLine(cnfParse, cnfSec, "mainpane", self.CNF_LIST, self.mainPanePos)
self.docPanePos = self._parseLine(cnfParse, cnfSec, "docpane", self.CNF_LIST, self.docPanePos)
## Project
cnfSec = "Project"
if confParser.has_section(cnfSec):
if confParser.has_option(cnfSec,"autosaveproject"):
self.autoSaveProj = confParser.getint(cnfSec,"autosaveproject")
if confParser.has_option(cnfSec,"autosavedoc"):
self.autoSaveDoc = confParser.getint(cnfSec,"autosavedoc")
self.autoSaveProj = self._parseLine(cnfParse, cnfSec, "autosaveproject", self.CNF_INT)
self.autoSaveDoc = self._parseLine(cnfParse, cnfSec, "autosavedoc", self.CNF_INT)
## Editor
cnfSec = "Editor"
if confParser.has_section(cnfSec):
if confParser.has_option(cnfSec,"fixedwidth"):
self.textFixedW = confParser.getboolean(cnfSec,"fixedwidth")
if confParser.has_option(cnfSec,"width"):
self.textWidth = confParser.getint(cnfSec,"width")
if confParser.has_option(cnfSec,"margins"):
self.textMargin = self.unpackList(
confParser.get(cnfSec,"margins"), 2, self.textMargin
)
if confParser.has_option(cnfSec,"textsize"):
self.textSize = confParser.getint(cnfSec,"textsize")
if confParser.has_option(cnfSec,"justify"):
self.doJustify = confParser.getboolean(cnfSec,"justify")
if confParser.has_option(cnfSec,"autoselect"):
self.autoSelect = confParser.getboolean(cnfSec,"autoselect")
if confParser.has_option(cnfSec,"autoreplace"):
self.doReplace = confParser.getboolean(cnfSec,"autoreplace")
if confParser.has_option(cnfSec,"repsquotes"):
self.doReplaceSQuote = confParser.getboolean(cnfSec,"repsquotes")
if confParser.has_option(cnfSec,"repdquotes"):
self.doReplaceDQuote = confParser.getboolean(cnfSec,"repdquotes")
if confParser.has_option(cnfSec,"repdash"):
self.doReplaceDash = confParser.getboolean(cnfSec,"repdash")
if confParser.has_option(cnfSec,"repdots"):
self.doReplaceDots = confParser.getboolean(cnfSec,"repdots")
if confParser.has_option(cnfSec,"spellcheck"):
self.spellLanguage = confParser.get(cnfSec,"spellcheck")
self.textFixedW = self._parseLine(cnfParse, cnfSec, "fixedwidth", self.CNF_BOOL)
self.textWidth = self._parseLine(cnfParse, cnfSec, "width", self.CNF_INT)
self.textMargin = self._parseLine(cnfParse, cnfSec, "margins", self.CNF_LIST, self.textMargin)
self.textSize = self._parseLine(cnfParse, cnfSec, "textsize", self.CNF_INT)
self.tabWidth = self._parseLine(cnfParse, cnfSec, "tabwidth", self.CNF_INT)
self.doJustify = self._parseLine(cnfParse, cnfSec, "justify", self.CNF_BOOL)
self.autoSelect = self._parseLine(cnfParse, cnfSec, "autoselect", self.CNF_BOOL)
self.doReplace = self._parseLine(cnfParse, cnfSec, "autoreplace", self.CNF_BOOL)
self.doReplaceSQuote = self._parseLine(cnfParse, cnfSec, "repsquotes", self.CNF_BOOL)
self.doReplaceDQuote = self._parseLine(cnfParse, cnfSec, "repdquotes", self.CNF_BOOL)
self.doReplaceDash = self._parseLine(cnfParse, cnfSec, "repdash", self.CNF_BOOL)
self.doReplaceDots = self._parseLine(cnfParse, cnfSec, "repdots", self.CNF_BOOL)
self.spellLanguage = self._parseLine(cnfParse, cnfSec, "spellcheck", self.CNF_STR)
## Path
cnfSec = "Path"
if confParser.has_section(cnfSec):
for i in range(10):
if confParser.has_option(cnfSec,"recent%d" % i):
self.recentList[i] = confParser.get(cnfSec,"recent%d" % i)
for i in range(10):
self.recentList[i] = self._parseLine(cnfParse, cnfSec, "recent%d" % i,self.CNF_STR)
return True
def saveConfig(self):
logger.debug("Saving config file")
confParser = configparser.ConfigParser()
cnfParse = configparser.ConfigParser()
# Set options
## Main
cnfSec = "Main"
confParser.add_section(cnfSec)
confParser.set(cnfSec,"timestamp", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
confParser.set(cnfSec,"theme", str(self.guiTheme))
cnfParse.add_section(cnfSec)
cnfParse.set(cnfSec,"timestamp", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
cnfParse.set(cnfSec,"theme", str(self.guiTheme))
## Sizes
cnfSec = "Sizes"
confParser.add_section(cnfSec)
confParser.set(cnfSec,"geometry", self.packList(self.winGeometry))
confParser.set(cnfSec,"treecols", self.packList(self.treeColWidth))
confParser.set(cnfSec,"mainpane", self.packList(self.mainPanePos))
confParser.set(cnfSec,"docpane", self.packList(self.docPanePos))
cnfParse.add_section(cnfSec)
cnfParse.set(cnfSec,"geometry", self._packList(self.winGeometry))
cnfParse.set(cnfSec,"treecols", self._packList(self.treeColWidth))
cnfParse.set(cnfSec,"mainpane", self._packList(self.mainPanePos))
cnfParse.set(cnfSec,"docpane", self._packList(self.docPanePos))
## Project
cnfSec = "Project"
confParser.add_section(cnfSec)
confParser.set(cnfSec,"autosaveproject", str(self.autoSaveProj))
confParser.set(cnfSec,"autosavedoc", str(self.autoSaveDoc))
cnfParse.add_section(cnfSec)
cnfParse.set(cnfSec,"autosaveproject", str(self.autoSaveProj))
cnfParse.set(cnfSec,"autosavedoc", str(self.autoSaveDoc))
## Editor
cnfSec = "Editor"
confParser.add_section(cnfSec)
confParser.set(cnfSec,"fixedwidth", str(self.textFixedW))
confParser.set(cnfSec,"width", str(self.textWidth))
confParser.set(cnfSec,"margins", self.packList(self.textMargin))
confParser.set(cnfSec,"textsize", str(self.textSize))
confParser.set(cnfSec,"justify", str(self.doJustify))
confParser.set(cnfSec,"autoselect", str(self.autoSelect))
confParser.set(cnfSec,"autoreplace",str(self.doReplace))
confParser.set(cnfSec,"repsquotes", str(self.doReplaceSQuote))
confParser.set(cnfSec,"repdquotes", str(self.doReplaceDQuote))
confParser.set(cnfSec,"repdash", str(self.doReplaceDash))
confParser.set(cnfSec,"repdots", str(self.doReplaceDots))
confParser.set(cnfSec,"spellcheck", str(self.spellLanguage))
cnfParse.add_section(cnfSec)
cnfParse.set(cnfSec,"fixedwidth", str(self.textFixedW))
cnfParse.set(cnfSec,"width", str(self.textWidth))
cnfParse.set(cnfSec,"margins", self._packList(self.textMargin))
cnfParse.set(cnfSec,"textsize", str(self.textSize))
cnfParse.set(cnfSec,"tabwidth", str(self.tabWidth))
cnfParse.set(cnfSec,"justify", str(self.doJustify))
cnfParse.set(cnfSec,"autoselect", str(self.autoSelect))
cnfParse.set(cnfSec,"autoreplace",str(self.doReplace))
cnfParse.set(cnfSec,"repsquotes", str(self.doReplaceSQuote))
cnfParse.set(cnfSec,"repdquotes", str(self.doReplaceDQuote))
cnfParse.set(cnfSec,"repdash", str(self.doReplaceDash))
cnfParse.set(cnfSec,"repdots", str(self.doReplaceDots))
cnfParse.set(cnfSec,"spellcheck", str(self.spellLanguage))
## Path
cnfSec = "Path"
confParser.add_section(cnfSec)
cnfParse.add_section(cnfSec)
for i in range(10):
confParser.set(cnfSec,"recent%d" % i, str(self.recentList[i]))
cnfParse.set(cnfSec,"recent%d" % i, str(self.recentList[i]))
# Write config file
try:
confParser.write(open(path.join(self.confPath,self.confFile),"w"))
cnfParse.write(open(path.join(self.confPath,self.confFile),"w"))
self.confChanged = False
except Exception as e:
logger.error("Could not save config file")
@@ -258,19 +229,6 @@ class Config:
return True
def unpackList(self, inStr, listLen, listDefault, castTo=int):
inData = inStr.split(",")
outData = []
for i in range(listLen):
try:
outData.append(castTo(inData[i]))
except:
outData.append(listDefault[i])
return outData
def packList(self, inData):
return ", ".join(str(inVal) for inVal in inData)
##
# Setters
##
@@ -316,4 +274,36 @@ class Config:
self.confChanged = True
return True
##
# Internal Functions
##
def _unpackList(self, inStr, listLen, listDefault, castTo=int):
inData = inStr.split(",")
outData = []
for i in range(listLen):
try:
outData.append(castTo(inData[i]))
except:
outData.append(listDefault[i])
return outData
def _packList(self, inData):
return ", ".join(str(inVal) for inVal in inData)
def _parseLine(self, cnfParse, cnfSec, cnfName, cnfType, cnfDefault=[]):
if cnfParse.has_section(cnfSec):
if cnfParse.has_option(cnfSec, cnfName):
if cnfType == self.CNF_STR:
return cnfParse.get(cnfSec, cnfName)
elif cnfType == self.CNF_INT:
return cnfParse.getint(cnfSec, cnfName)
elif cnfType == self.CNF_BOOL:
return cnfParse.getboolean(cnfSec, cnfName)
elif cnfType == self.CNF_LIST:
return self._unpackList(
cnfParse.get(cnfSec, cnfName), len(cnfDefault), cnfDefault
)
return None
# End Class Config
+5 -1
View File
@@ -104,8 +104,12 @@ class GuiDocEditor(QTextEdit):
mTB = self.mainConf.textMargin[0]
mLR = self.mainConf.textMargin[1]
self.setViewportMargins(mLR,mTB,mLR,mTB)
theOpt = QTextOption()
if self.mainConf.tabWidth >= 0:
theOpt.setTabStopDistance(self.mainConf.tabWidth)
if self.mainConf.doJustify:
self.theDoc.setDefaultTextOption(QTextOption(Qt.AlignJustify))
theOpt.setAlignment(Qt.AlignJustify)
self.theDoc.setDefaultTextOption(theOpt)
return True
##