Merge branch 'main' into release_0.12
This commit is contained in:
+1
-3
@@ -10,9 +10,7 @@ coverage:
|
||||
project:
|
||||
default:
|
||||
threshold: 1%
|
||||
patch:
|
||||
default:
|
||||
threshold: 1%
|
||||
patch: no
|
||||
changes: no
|
||||
|
||||
parsers:
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
name: Flake 8 Checks
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
checkSyntax:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Python Setup
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.7
|
||||
architecture: x64
|
||||
- name: Checkout novelWriter
|
||||
uses: actions/checkout@v2
|
||||
- name: Install flake8
|
||||
run: pip install flake8
|
||||
- name: Check for Syntax Error on novelWriter
|
||||
run: flake8 nw --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||
- name: Check for Syntax Error on Tests
|
||||
run: flake8 tests --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||
- name: Check for Code Style on novelWriter
|
||||
run: flake8 nw --count --max-line-length=99 --select E1,E231,E27,E4,E5,E7,E9,W,F --show-source --statistics
|
||||
@@ -0,0 +1,25 @@
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
configuration: docs/source/conf.py
|
||||
|
||||
# Build documentation with MkDocs
|
||||
#mkdocs:
|
||||
# configuration: mkdocs.yml
|
||||
|
||||
# Optionally build your docs in additional formats such as PDF
|
||||
formats:
|
||||
- htmlzip
|
||||
- epub
|
||||
- pdf
|
||||
|
||||
# Optionally set the version of Python and requirements required to build your docs
|
||||
python:
|
||||
version: 3.7
|
||||
install:
|
||||
- requirements: docs/source/requirements.txt
|
||||
@@ -0,0 +1 @@
|
||||
sphinx_rtd_theme
|
||||
+4
-4
@@ -239,13 +239,13 @@ def main(sysArgs=None):
|
||||
)
|
||||
|
||||
try:
|
||||
import PyQt5.QtSvg
|
||||
except:
|
||||
import PyQt5.QtSvg # noqa: F401
|
||||
except ImportError:
|
||||
errorData.append("Python module 'PyQt5.QtSvg' is missing.")
|
||||
|
||||
try:
|
||||
import lxml
|
||||
except:
|
||||
import lxml # noqa: F401
|
||||
except ImportError:
|
||||
errorData.append("Python module 'lxml' is missing.")
|
||||
|
||||
if errorData:
|
||||
|
||||
+4
-5
@@ -26,7 +26,6 @@
|
||||
"""
|
||||
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
@@ -38,7 +37,7 @@ def checkString(checkValue, defaultValue, allowNone=False):
|
||||
"""Check if a variable is a string or a none.
|
||||
"""
|
||||
if allowNone:
|
||||
if checkValue == None:
|
||||
if checkValue is None:
|
||||
return None
|
||||
if checkValue == "None":
|
||||
return None
|
||||
@@ -50,20 +49,20 @@ def checkInt(checkValue, defaultValue, allowNone=False):
|
||||
"""Check if a variable is an integer or a none.
|
||||
"""
|
||||
if allowNone:
|
||||
if checkValue == None:
|
||||
if checkValue is None:
|
||||
return None
|
||||
if checkValue == "None":
|
||||
return None
|
||||
try:
|
||||
return int(checkValue)
|
||||
except:
|
||||
except Exception:
|
||||
return defaultValue
|
||||
|
||||
def checkBool(checkValue, defaultValue, allowNone=False):
|
||||
"""Check if a variable is a boolean or a none.
|
||||
"""
|
||||
if allowNone:
|
||||
if checkValue == None:
|
||||
if checkValue is None:
|
||||
return None
|
||||
if checkValue == "None":
|
||||
return None
|
||||
|
||||
+4
-5
@@ -29,7 +29,6 @@ import logging
|
||||
import configparser
|
||||
import json
|
||||
import sys
|
||||
import nw
|
||||
|
||||
from os import path, mkdir, unlink, rename
|
||||
from time import time
|
||||
@@ -862,7 +861,7 @@ class Config:
|
||||
for i in range(listLen):
|
||||
try:
|
||||
outData.append(castTo(inData[i]))
|
||||
except:
|
||||
except Exception:
|
||||
outData.append(listDefault[i])
|
||||
return outData
|
||||
|
||||
@@ -902,16 +901,16 @@ class Config:
|
||||
"""Cheks if we have the optional packages used by some features.
|
||||
"""
|
||||
try:
|
||||
import enchant
|
||||
import enchant # noqa: F401
|
||||
self.hasEnchant = True
|
||||
logger.debug("Checking package 'pyenchant': Ok")
|
||||
except:
|
||||
except Exception:
|
||||
self.hasEnchant = False
|
||||
logger.debug("Checking package 'pyenchant': Missing")
|
||||
|
||||
try:
|
||||
self.hasAssistant = which("assistant")
|
||||
except:
|
||||
except Exception:
|
||||
self.hasAssistant = False
|
||||
if self.hasAssistant:
|
||||
logger.debug("Checking executable 'assistant': Ok")
|
||||
|
||||
+1
-4
@@ -27,7 +27,6 @@
|
||||
|
||||
import logging
|
||||
import json
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
from time import time
|
||||
@@ -222,7 +221,7 @@ class NWIndex():
|
||||
if len(self.textCounts[tHandle]) != 3:
|
||||
self.indexBroken = True
|
||||
|
||||
except:
|
||||
except Exception:
|
||||
self.indexBroken = True
|
||||
|
||||
if self.indexBroken:
|
||||
@@ -603,8 +602,6 @@ class NWIndex():
|
||||
by tHandle.
|
||||
"""
|
||||
theRefs = {}
|
||||
|
||||
tItem = self.theProject.projTree[tHandle]
|
||||
if tHandle is None:
|
||||
return theRefs
|
||||
|
||||
|
||||
+17
-18
@@ -26,7 +26,6 @@
|
||||
"""
|
||||
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from lxml import etree
|
||||
|
||||
@@ -73,19 +72,19 @@ class NWItem():
|
||||
"order" : str(self.itemOrder),
|
||||
"parent" : str(self.parHandle),
|
||||
})
|
||||
xSub = self._subPack(xPack,"name", text=str(self.itemName))
|
||||
xSub = self._subPack(xPack,"type", text=str(self.itemType.name))
|
||||
xSub = self._subPack(xPack,"class", text=str(self.itemClass.name))
|
||||
xSub = self._subPack(xPack,"status", text=str(self.itemStatus))
|
||||
self._subPack(xPack, "name", text=str(self.itemName))
|
||||
self._subPack(xPack, "type", text=str(self.itemType.name))
|
||||
self._subPack(xPack, "class", text=str(self.itemClass.name))
|
||||
self._subPack(xPack, "status", text=str(self.itemStatus))
|
||||
if self.itemType == nwItemType.FILE:
|
||||
xSub = self._subPack(xPack,"exported", text=str(self.isExported))
|
||||
xSub = self._subPack(xPack,"layout", text=str(self.itemLayout.name))
|
||||
xSub = self._subPack(xPack,"charCount", text=str(self.charCount), none=False)
|
||||
xSub = self._subPack(xPack,"wordCount", text=str(self.wordCount), none=False)
|
||||
xSub = self._subPack(xPack,"paraCount", text=str(self.paraCount), none=False)
|
||||
xSub = self._subPack(xPack,"cursorPos", text=str(self.cursorPos), none=False)
|
||||
self._subPack(xPack, "exported", text=str(self.isExported))
|
||||
self._subPack(xPack, "layout", text=str(self.itemLayout.name))
|
||||
self._subPack(xPack, "charCount", text=str(self.charCount), none=False)
|
||||
self._subPack(xPack, "wordCount", text=str(self.wordCount), none=False)
|
||||
self._subPack(xPack, "paraCount", text=str(self.paraCount), none=False)
|
||||
self._subPack(xPack, "cursorPos", text=str(self.cursorPos), none=False)
|
||||
else:
|
||||
xSub = self._subPack(xPack,"expanded", text=str(self.isExpanded))
|
||||
self._subPack(xPack, "expanded", text=str(self.isExpanded))
|
||||
return
|
||||
|
||||
def unpackXML(self, xItem):
|
||||
@@ -130,12 +129,12 @@ class NWItem():
|
||||
def _subPack(xParent, name, attrib=None, text=None, none=True):
|
||||
"""Packs the values into an xml element.
|
||||
"""
|
||||
if not none and (text == None or text == "None"):
|
||||
if not none and (text is None or text == "None"):
|
||||
return None
|
||||
xSub = etree.SubElement(xParent, name, attrib=attrib)
|
||||
if text is not None:
|
||||
xSub.text = text
|
||||
return xSub
|
||||
return
|
||||
|
||||
##
|
||||
# Set Item Values
|
||||
@@ -233,18 +232,18 @@ class NWItem():
|
||||
"""Save the expanded status of an item in the project tree.
|
||||
"""
|
||||
if isinstance(expState, str):
|
||||
self.isExpanded = expState == str(True)
|
||||
self.isExpanded = (expState == str(True))
|
||||
else:
|
||||
self.isExpanded = expState == True
|
||||
self.isExpanded = (expState == True) # noqa: E712
|
||||
return
|
||||
|
||||
def setExported(self, expState):
|
||||
"""Save the export flag.
|
||||
"""
|
||||
if isinstance(expState, str):
|
||||
self.isExported = expState == str(True)
|
||||
self.isExported = (expState == str(True))
|
||||
else:
|
||||
self.isExported = expState == True
|
||||
self.isExported = (expState == True) # noqa: E712
|
||||
return
|
||||
|
||||
##
|
||||
|
||||
+3
-3
@@ -153,15 +153,15 @@ class OptionState():
|
||||
def setValue(self, setGroup, setName, setValue):
|
||||
"""Saves a value, with a given group and name.
|
||||
"""
|
||||
if not setGroup in self.validMap:
|
||||
if setGroup not in self.validMap:
|
||||
logger.error("Unknown option group '%s'" % setGroup)
|
||||
return False
|
||||
|
||||
if not setName in self.validMap[setGroup]:
|
||||
if setName not in self.validMap[setGroup]:
|
||||
logger.error("Unknown option name '%s'" % setName)
|
||||
return False
|
||||
|
||||
if not setGroup in self.theState:
|
||||
if setGroup not in self.theState:
|
||||
self.theState[setGroup] = {}
|
||||
|
||||
self.theState[setGroup][setName] = setValue
|
||||
|
||||
+17
-17
@@ -26,7 +26,6 @@
|
||||
"""
|
||||
|
||||
import logging
|
||||
import json
|
||||
import nw
|
||||
|
||||
from os import path, mkdir, listdir, unlink, rename, rmdir
|
||||
@@ -265,27 +264,28 @@ class NWProject():
|
||||
if popMinimal:
|
||||
# Creating a minimal project with a few root folders and a
|
||||
# single chapter folder with a single file.
|
||||
nHandle = self.newRoot("Novel", nwItemClass.NOVEL)
|
||||
xHandle = self.newRoot("Plot", nwItemClass.PLOT)
|
||||
xHandle = self.newRoot("Characters", nwItemClass.CHARACTER)
|
||||
xHandle = self.newRoot("World", nwItemClass.WORLD)
|
||||
tHandle = self.newFile("Title Page", nwItemClass.NOVEL, nHandle)
|
||||
dHandle = self.newFolder("New Chapter", nwItemClass.NOVEL, nHandle)
|
||||
cHandle = self.newFile("New Chapter", nwItemClass.NOVEL, dHandle)
|
||||
sHandle = self.newFile("New Scene", nwItemClass.NOVEL, dHandle)
|
||||
xHandle = {}
|
||||
xHandle[1] = self.newRoot("Novel", nwItemClass.NOVEL)
|
||||
xHandle[2] = self.newRoot("Plot", nwItemClass.PLOT)
|
||||
xHandle[3] = self.newRoot("Characters", nwItemClass.CHARACTER)
|
||||
xHandle[4] = self.newRoot("World", nwItemClass.WORLD)
|
||||
xHandle[5] = self.newFile("Title Page", nwItemClass.NOVEL, xHandle[1])
|
||||
xHandle[6] = self.newFolder("New Chapter", nwItemClass.NOVEL, xHandle[1])
|
||||
xHandle[7] = self.newFile("New Chapter", nwItemClass.NOVEL, xHandle[6])
|
||||
xHandle[8] = self.newFile("New Scene", nwItemClass.NOVEL, xHandle[6])
|
||||
|
||||
self.projTree.setFileItemLayout(tHandle, nwItemLayout.TITLE)
|
||||
self.projTree.setFileItemLayout(cHandle, nwItemLayout.CHAPTER)
|
||||
self.projTree.setFileItemLayout(xHandle[5], nwItemLayout.TITLE)
|
||||
self.projTree.setFileItemLayout(xHandle[7], nwItemLayout.CHAPTER)
|
||||
|
||||
aDoc.openDocument(tHandle, showStatus=False)
|
||||
aDoc.openDocument(xHandle[5], showStatus=False)
|
||||
aDoc.saveDocument(titlePage)
|
||||
aDoc.clearDocument()
|
||||
|
||||
aDoc.openDocument(cHandle, showStatus=False)
|
||||
aDoc.openDocument(xHandle[7], showStatus=False)
|
||||
aDoc.saveDocument("## New Chapter\n\n")
|
||||
aDoc.clearDocument()
|
||||
|
||||
aDoc.openDocument(sHandle, showStatus=False)
|
||||
aDoc.openDocument(xHandle[8], showStatus=False)
|
||||
aDoc.saveDocument("### New Scene\n\n")
|
||||
aDoc.clearDocument()
|
||||
|
||||
@@ -838,7 +838,6 @@ class NWProject():
|
||||
project path, or if the folder doesn't exist, look for the zip
|
||||
file in the assets folder.
|
||||
"""
|
||||
projName = projData.get("projName", "Sample Project")
|
||||
projPath = projData.get("projPath", None)
|
||||
if projPath is None:
|
||||
logger.error("No project path set for the example project")
|
||||
@@ -1243,7 +1242,8 @@ class NWProject():
|
||||
for aValue in theValue:
|
||||
if not isinstance(aValue, str):
|
||||
aValue = str(aValue)
|
||||
if aValue == "" and not allowNone: continue
|
||||
if aValue == "" and not allowNone:
|
||||
continue
|
||||
xItem = etree.SubElement(xParent, theName)
|
||||
xItem.text = aValue
|
||||
return
|
||||
@@ -1402,7 +1402,7 @@ class NWProject():
|
||||
try:
|
||||
rmdir(theData)
|
||||
logger.info("Removed folder: %s" % theFolder)
|
||||
except:
|
||||
except Exception:
|
||||
errList.append("Failed to remove: %s" % theFolder)
|
||||
|
||||
return errList
|
||||
|
||||
@@ -149,7 +149,7 @@ class NWSpellEnchant(NWSpellCheck):
|
||||
self.theDict = enchant.Dict(theLang)
|
||||
self.spellLanguage = theLang
|
||||
logger.debug("Enchant spell checking for language %s loaded" % theLang)
|
||||
except:
|
||||
except Exception:
|
||||
logger.error("Failed to load enchant spell checking for language %s" % theLang)
|
||||
self.theDict = NWSpellEnchantDummy()
|
||||
self.spellLanguage = None
|
||||
@@ -186,7 +186,7 @@ class NWSpellEnchant(NWSpellCheck):
|
||||
for spTag, spProvider in enchant.list_dicts():
|
||||
spName = "%s [%s]" % (self.expandLanguage(spTag), spProvider.name)
|
||||
retList.append((spTag, spName))
|
||||
except:
|
||||
except Exception:
|
||||
logger.error("Failed to list languages for enchant spell checking")
|
||||
return retList
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
"""
|
||||
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from lxml import etree
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
|
||||
import logging
|
||||
import re
|
||||
import nw
|
||||
|
||||
from nw.core.tokenizer import Tokenizer
|
||||
from nw.constants import nwUnicode, nwLabels, nwKeyWords
|
||||
@@ -153,12 +152,6 @@ class ToHtml(Tokenizer):
|
||||
h3 = "h3"
|
||||
h4 = "h4"
|
||||
|
||||
alignHead = self.A_LEFT
|
||||
if self.doJustify:
|
||||
alignPar = self.A_JUSTIFY
|
||||
else:
|
||||
alignPar = self.A_LEFT
|
||||
|
||||
self.theResult = ""
|
||||
|
||||
thisPar = []
|
||||
|
||||
+23
-40
@@ -28,7 +28,6 @@
|
||||
"""
|
||||
|
||||
import logging
|
||||
import nw
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -78,7 +77,8 @@ def countWords(theText):
|
||||
charCount += theLen
|
||||
if countPara and prevEmpty:
|
||||
paraCount += 1
|
||||
prevEmpty = countPara == False
|
||||
|
||||
prevEmpty = not countPara
|
||||
|
||||
return charCount, wordCount, paraCount
|
||||
|
||||
@@ -139,48 +139,31 @@ def _numberToWordEN(numVal):
|
||||
tenVal = (numVal-oneVal) % 100
|
||||
hunVal = (numVal-tenVal-oneVal) % 1000
|
||||
|
||||
if hunVal == 100: hunWord = "One Hundred"
|
||||
if hunVal == 200: hunWord = "Two Hundred"
|
||||
if hunVal == 300: hunWord = "Three Hundred"
|
||||
if hunVal == 400: hunWord = "Four Hundred"
|
||||
if hunVal == 500: hunWord = "Five Hundred"
|
||||
if hunVal == 600: hunWord = "Six Hundred"
|
||||
if hunVal == 700: hunWord = "Seven Hundred"
|
||||
if hunVal == 800: hunWord = "Eight Hundred"
|
||||
if hunVal == 900: hunWord = "Nine Hundred"
|
||||
|
||||
if tenVal == 20: tenWord = "Twenty"
|
||||
if tenVal == 30: tenWord = "Thirty"
|
||||
if tenVal == 40: tenWord = "Forty"
|
||||
if tenVal == 50: tenWord = "Fifty"
|
||||
if tenVal == 60: tenWord = "Sixty"
|
||||
if tenVal == 70: tenWord = "Seventy"
|
||||
if tenVal == 80: tenWord = "Eighty"
|
||||
if tenVal == 90: tenWord = "Ninety"
|
||||
theHundreds = {
|
||||
100: "One Hundred", 200: "Two Hundred", 300: "Three Hundred",
|
||||
400: "Four Hundred", 500: "Five Hundred", 600: "Six Hundred",
|
||||
700: "Seven Hundred", 800: "Eight Hundred", 900: "Nine Hundred",
|
||||
}
|
||||
theTens = {
|
||||
20: "Twenty", 30: "Thirty", 40: "Forty", 50: "Fifty",
|
||||
60: "Sixty", 70: "Seventy", 80: "Eighty", 90: "Ninety",
|
||||
}
|
||||
theTeens = {
|
||||
0: "Ten", 1: "Eleven", 2: "Twelve", 3: "Thirteen", 4: "Fourteen",
|
||||
5: "Fifteen", 6: "Sixteen", 7: "Seventeen", 8: "Eighteen", 9: "Nineteen",
|
||||
}
|
||||
theOnes = {
|
||||
0: "", 1: "One", 2: "Two", 3: "Three", 4: "Four",
|
||||
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine",
|
||||
}
|
||||
|
||||
hunWord = theHundreds.get(hunVal, "")
|
||||
tenWord = theTens.get(tenVal, "")
|
||||
if tenVal == 10:
|
||||
if oneVal == 0: oneWord = "Ten"
|
||||
if oneVal == 1: oneWord = "Eleven"
|
||||
if oneVal == 2: oneWord = "Twelve"
|
||||
if oneVal == 3: oneWord = "Thirteen"
|
||||
if oneVal == 4: oneWord = "Fourteen"
|
||||
if oneVal == 5: oneWord = "Fifteen"
|
||||
if oneVal == 6: oneWord = "Sixteen"
|
||||
if oneVal == 7: oneWord = "Seventeen"
|
||||
if oneVal == 8: oneWord = "Eighteen"
|
||||
if oneVal == 9: oneWord = "Nineteen"
|
||||
oneWord = theTeens.get(oneVal, "")
|
||||
numWord = ("%s %s" % (hunWord, oneWord)).strip()
|
||||
else:
|
||||
if oneVal == 0: oneWord = ""
|
||||
if oneVal == 1: oneWord = "One"
|
||||
if oneVal == 2: oneWord = "Two"
|
||||
if oneVal == 3: oneWord = "Three"
|
||||
if oneVal == 4: oneWord = "Four"
|
||||
if oneVal == 5: oneWord = "Five"
|
||||
if oneVal == 6: oneWord = "Six"
|
||||
if oneVal == 7: oneWord = "Seven"
|
||||
if oneVal == 8: oneWord = "Eight"
|
||||
if oneVal == 9: oneWord = "Nine"
|
||||
oneWord = theOnes.get(oneVal, "")
|
||||
if tenVal == 0:
|
||||
numWord = ("%s %s" % (hunWord, oneWord)).strip()
|
||||
else:
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
|
||||
import logging
|
||||
import json
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
from lxml import etree
|
||||
|
||||
@@ -964,7 +964,6 @@ class GuiBuildNovelDocView(QTextBrowser):
|
||||
lblFont.setPointSizeF(0.9*self.theTheme.fontPointSize)
|
||||
|
||||
fPx = int(1.1*self.theTheme.fontPixelSize)
|
||||
mPx = self.mainConf.pxInt(4)
|
||||
|
||||
self.theTitle = QLabel("<b>Build Time:</b> Unknown", self)
|
||||
self.theTitle.setIndent(0)
|
||||
|
||||
+3
-9
@@ -963,7 +963,8 @@ class GuiDocEditor(QTextEdit):
|
||||
logger.info(
|
||||
"The document size is %d > %d, big doc mode is enabled" % (
|
||||
theSize, self.mainConf.bigDocLimit*1000
|
||||
))
|
||||
)
|
||||
)
|
||||
self.bigDoc = True
|
||||
else:
|
||||
self.bigDoc = False
|
||||
@@ -1271,7 +1272,7 @@ class GuiDocEditor(QTextEdit):
|
||||
try:
|
||||
isFind = self.lastFind[0] == theCursor.selectionStart()
|
||||
isFind &= self.lastFind[1] == theCursor.selectionEnd()
|
||||
except:
|
||||
except Exception:
|
||||
isFind = False
|
||||
|
||||
if isFind:
|
||||
@@ -1371,7 +1372,6 @@ class GuiDocEditSearch(QFrame):
|
||||
self.doMatchCap = self.mainConf.searchMatchCap
|
||||
|
||||
mPx = self.mainConf.pxInt(6)
|
||||
fPx = int(0.9*self.theTheme.fontPixelSize)
|
||||
tPx = int(0.8*self.theTheme.fontPixelSize)
|
||||
boxFont = self.theTheme.guiFont
|
||||
boxFont.setPointSizeF(0.9*self.theTheme.fontPointSize)
|
||||
@@ -1891,7 +1891,6 @@ class GuiDocEditFooter(QWidget):
|
||||
self.sPx = int(round(0.9*self.theTheme.baseIconSize))
|
||||
fPx = int(0.9*self.theTheme.fontPixelSize)
|
||||
bSp = self.mainConf.pxInt(4)
|
||||
hSp = self.mainConf.pxInt(8)
|
||||
|
||||
lblFont = self.font()
|
||||
lblFont.setPointSizeF(0.9*self.theTheme.fontPointSize)
|
||||
@@ -1901,11 +1900,6 @@ class GuiDocEditFooter(QWidget):
|
||||
self.setAutoFillBackground(True)
|
||||
self.setPalette(self.thePalette)
|
||||
|
||||
buttonStyle = (
|
||||
"QToolButton {{border: none; background: transparent;}} "
|
||||
"QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}"
|
||||
).format(*self.theTheme.colText)
|
||||
|
||||
# Status
|
||||
self.statusIcon = QLabel("")
|
||||
self.statusIcon.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
@@ -366,7 +366,6 @@ class GuiDocViewer(QTextBrowser):
|
||||
"}}\n"
|
||||
).format(
|
||||
textSize = self.mainConf.textSize,
|
||||
preSize = self.mainConf.textSize*0.9,
|
||||
tColR = self.theTheme.colText[0],
|
||||
tColG = self.theTheme.colText[1],
|
||||
tColB = self.theTheme.colText[2],
|
||||
@@ -701,7 +700,6 @@ class GuiDocViewDetails(QScrollArea):
|
||||
self.refList.setScaledContents(True)
|
||||
self.refList.linkActivated.connect(self._linkClicked)
|
||||
|
||||
hCol = self.palette().highlight().color()
|
||||
self.linkStyle = "style='color: rgb({0},{1},{2})'".format(
|
||||
*self.theTheme.colLink
|
||||
)
|
||||
|
||||
+4
-5
@@ -193,7 +193,7 @@ class GuiOutline(QTreeWidget):
|
||||
tHandle = tItem.data(self.colIndex[nwOutline.TITLE], Qt.UserRole)
|
||||
try:
|
||||
tLine = int(tItem.text(self.colIndex[nwOutline.LINE]))
|
||||
except:
|
||||
except Exception:
|
||||
tLine = 1
|
||||
|
||||
logger.verbose("User selected entry with handle %s on line %s" % (tHandle, tLine))
|
||||
@@ -254,7 +254,7 @@ class GuiOutline(QTreeWidget):
|
||||
for hName in tempOrder:
|
||||
try:
|
||||
treeOrder.append(nwOutline[hName])
|
||||
except:
|
||||
except Exception:
|
||||
logger.warning("Ignored unknown outline column '%s'" % str(hName))
|
||||
|
||||
# Add columns that was not in the file to the treeOrder array.
|
||||
@@ -276,14 +276,14 @@ class GuiOutline(QTreeWidget):
|
||||
for hName in tmpWidth:
|
||||
try:
|
||||
self.colWidth[nwOutline[hName]] = self.mainConf.pxInt(tmpWidth[hName])
|
||||
except:
|
||||
except Exception:
|
||||
logger.warning("Ignored unknown outline column '%s'" % str(hName))
|
||||
|
||||
tmpHidden = self.optState.getValue("GuiOutline", "columnHidden", {})
|
||||
for hName in tmpHidden:
|
||||
try:
|
||||
self.colHidden[nwOutline[hName]] = tmpHidden[hName]
|
||||
except:
|
||||
except Exception:
|
||||
logger.warning("Ignored unknown outline column '%s'" % str(hName))
|
||||
|
||||
self.headerMenu.setHiddenState(self.colHidden)
|
||||
@@ -374,7 +374,6 @@ class GuiOutline(QTreeWidget):
|
||||
continue
|
||||
|
||||
tLevel = self.theIndex.novelIndex[tHandle][sTitle]["level"]
|
||||
tTime = self.theIndex.novelIndex[tHandle][sTitle]["updated"]
|
||||
tItem = self._createTreeItem(tHandle, sTitle, tLevel)
|
||||
self.treeMap[titleKey] = tItem
|
||||
|
||||
|
||||
@@ -30,8 +30,7 @@ import nw
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import (
|
||||
QScrollArea, QWidget, QGridLayout, QHBoxLayout, QGroupBox, QLabel,
|
||||
QSizePolicy
|
||||
QScrollArea, QWidget, QGridLayout, QHBoxLayout, QGroupBox, QLabel
|
||||
)
|
||||
|
||||
from nw.constants import nwLabels, nwKeyWords
|
||||
@@ -237,7 +236,7 @@ class GuiOutlineDetails(QScrollArea):
|
||||
nwItem = self.theProject.projTree[tHandle]
|
||||
novIdx = self.theIndex.novelIndex[tHandle][sTitle]
|
||||
theRefs = self.theIndex.getReferences(tHandle, sTitle)
|
||||
except:
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
if novIdx["level"] in self.LVL_MAP:
|
||||
|
||||
@@ -720,7 +720,6 @@ class GuiConfigEditEditingTab(QWidget):
|
||||
def _disableComboItem(self, theList, theValue):
|
||||
"""Disable a list item in the combo box.
|
||||
"""
|
||||
theIdx = theList.findData(theValue)
|
||||
theModel = theList.model()
|
||||
anItem = theModel.item(1)
|
||||
anItem.setFlags(anItem.flags() ^ Qt.ItemIsEnabled)
|
||||
|
||||
@@ -422,7 +422,6 @@ class GuiProjectEditStatus(QWidget):
|
||||
"""
|
||||
logger.verbose("Save item button clicked")
|
||||
selItem = self._getSelectedItem()
|
||||
iRow = self.listBox.row(selItem)
|
||||
if selItem is not None:
|
||||
selIdx = selItem.data(Qt.UserRole)
|
||||
self.colData[selIdx] = (
|
||||
|
||||
+1
-3
@@ -475,7 +475,6 @@ class GuiProjectTree(QTreeWidget):
|
||||
tName = nwItem.itemName
|
||||
tClass = nwItem.itemClass
|
||||
tHandle = nwItem.itemHandle
|
||||
pHandle = nwItem.parHandle
|
||||
|
||||
expIcon = QIcon()
|
||||
|
||||
@@ -670,7 +669,6 @@ class GuiProjectTree(QTreeWidget):
|
||||
isNote = snItem.itemLayout == nwItemLayout.NOTE
|
||||
onFile = dnItem.itemType == nwItemType.FILE
|
||||
isRoot = snItem.itemType == nwItemType.ROOT
|
||||
onRoot = dnItem.itemType == nwItemType.ROOT
|
||||
isOnTop = self.dropIndicatorPosition() == QAbstractItemView.OnItem
|
||||
if (isSame or isNone or isNote) and not (onFile and isOnTop) and not isRoot:
|
||||
logger.debug("Drag'n'drop of item %s accepted" % sHandle)
|
||||
@@ -756,7 +754,7 @@ class GuiProjectTree(QTreeWidget):
|
||||
if nHandle is not None and nHandle in self.theMap:
|
||||
try:
|
||||
byIndex = self.theMap[pHandle].indexOfChild(self.theMap[nHandle])
|
||||
except:
|
||||
except Exception:
|
||||
logger.error("Failed to get index of item with handle %s" % nHandle)
|
||||
if byIndex >= 0:
|
||||
self.theMap[pHandle].insertChild(byIndex+1, newItem)
|
||||
|
||||
+2
-3
@@ -35,7 +35,6 @@ from PyQt5.QtGui import QColor, QPainter
|
||||
from PyQt5.QtWidgets import qApp, QStatusBar, QLabel, QAbstractButton
|
||||
|
||||
from nw.core import NWSpellCheck
|
||||
from nw.common import formatInt
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -242,9 +241,9 @@ class StatusLED(QAbstractButton):
|
||||
"""
|
||||
if theState is None:
|
||||
self._theCol = self.colNone
|
||||
elif theState == True:
|
||||
elif theState:
|
||||
self._theCol = self.colTrue
|
||||
elif theState == False:
|
||||
elif not theState:
|
||||
self._theCol = self.colFalse
|
||||
else:
|
||||
self._theCol = self.colNone
|
||||
|
||||
+8
-4
@@ -33,7 +33,7 @@ import nw
|
||||
from os import path, listdir
|
||||
from math import ceil
|
||||
|
||||
from PyQt5.QtCore import Qt, QSize
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtSvg import QSvgWidget
|
||||
from PyQt5.QtWidgets import QStyle, qApp
|
||||
from PyQt5.QtGui import (
|
||||
@@ -182,7 +182,7 @@ class GuiTheme:
|
||||
for fontFam in listdir(fontAssets):
|
||||
fontDir = path.join(fontAssets, fontFam)
|
||||
if path.isdir(fontDir):
|
||||
if not fontFam in self.guiFontDB.families():
|
||||
if fontFam not in self.guiFontDB.families():
|
||||
for fontFile in listdir(fontDir):
|
||||
ttfFile = path.join(fontDir, fontFile)
|
||||
if path.isfile(ttfFile) and fontFile.endswith(".ttf"):
|
||||
@@ -260,6 +260,7 @@ class GuiTheme:
|
||||
cssData = inFile.read()
|
||||
except Exception as e:
|
||||
logger.error("Could not load theme css file")
|
||||
logger.error(str(e))
|
||||
return False
|
||||
|
||||
# Config File
|
||||
@@ -269,6 +270,7 @@ class GuiTheme:
|
||||
confParser.read_file(inFile)
|
||||
except Exception as e:
|
||||
logger.error("Could not load theme settings from: %s" % self.confFile)
|
||||
logger.error(str(e))
|
||||
return False
|
||||
|
||||
## Main
|
||||
@@ -324,6 +326,7 @@ class GuiTheme:
|
||||
confParser.read_file(inFile)
|
||||
except Exception as e:
|
||||
logger.error("Could not load syntax colours from: %s" % self.syntaxFile)
|
||||
logger.error(str(e))
|
||||
return False
|
||||
|
||||
## Main
|
||||
@@ -438,7 +441,7 @@ class GuiTheme:
|
||||
outData.append(int(inData[0]))
|
||||
outData.append(int(inData[1]))
|
||||
outData.append(int(inData[2]))
|
||||
except:
|
||||
except Exception:
|
||||
logger.error("Could not load theme colours for '%s' from config file" % cnfName)
|
||||
outData = [0, 0, 0]
|
||||
else:
|
||||
@@ -456,7 +459,7 @@ class GuiTheme:
|
||||
readCol.append(int(inData[0]))
|
||||
readCol.append(int(inData[1]))
|
||||
readCol.append(int(inData[2]))
|
||||
except:
|
||||
except Exception:
|
||||
logger.error("Could not load theme colours for '%s' from config file" % cnfName)
|
||||
return
|
||||
if len(readCol) == 3:
|
||||
@@ -615,6 +618,7 @@ class GuiIcons:
|
||||
confParser.read_file(inFile)
|
||||
except Exception as e:
|
||||
logger.error("Could not load icon theme settings from: %s" % self.confFile)
|
||||
logger.error(str(e))
|
||||
return False
|
||||
|
||||
## Main
|
||||
|
||||
+3
-4
@@ -269,7 +269,7 @@ class GuiMain(QMainWindow):
|
||||
"""
|
||||
if self.hasProject:
|
||||
msgBox = QMessageBox()
|
||||
msgRes = msgBox.warning(
|
||||
msgBox.warning(
|
||||
self, "New Project",
|
||||
"Please close the current project before making a new one."
|
||||
)
|
||||
@@ -288,7 +288,7 @@ class GuiMain(QMainWindow):
|
||||
|
||||
if path.isfile(path.join(projPath, self.theProject.projFile)) and not forceNew:
|
||||
msgBox = QMessageBox()
|
||||
msgRes = msgBox.critical(
|
||||
msgBox.critical(
|
||||
self, "New Project",
|
||||
"A project already exists in that location. Please choose another folder."
|
||||
)
|
||||
@@ -391,7 +391,7 @@ class GuiMain(QMainWindow):
|
||||
int(self.theProject.lockedBy[3])
|
||||
).strftime("%x %X")
|
||||
)
|
||||
except:
|
||||
except Exception:
|
||||
lockDetails = ""
|
||||
|
||||
msgBox = QMessageBox()
|
||||
@@ -713,7 +713,6 @@ class GuiMain(QMainWindow):
|
||||
|
||||
self.treeView.saveTreeOrder()
|
||||
self.theIndex.clearIndex()
|
||||
nItems = len(self.theProject.projTree)
|
||||
|
||||
theDoc = NWDoc(self.theProject, self)
|
||||
for nDone, tItem in enumerate(self.theProject.projTree):
|
||||
|
||||
@@ -12,19 +12,6 @@ class DummyMain():
|
||||
return
|
||||
|
||||
def makeAlert(self, theMessage, theLevel):
|
||||
if theLevel == nwAlert.WARN:
|
||||
lvlMsg = "WARNING: "
|
||||
elif theLevel == nwAlert.ERROR:
|
||||
lvlMsg = "ERROR: "
|
||||
elif theLevel == nwAlert.BUG:
|
||||
lvlMsg = "BUG: "
|
||||
else:
|
||||
lvlMsg = ""
|
||||
if isinstance(theMessage, list):
|
||||
for msgLine in logMsg:
|
||||
print(lvlMsg+msgLine)
|
||||
else:
|
||||
print(lvlMsg+theMessage)
|
||||
return
|
||||
|
||||
def setStatus(self, theMessage):
|
||||
|
||||
Reference in New Issue
Block a user