Merge branch 'main' into feature/build_class

This commit is contained in:
Veronica Berglyd Olsen
2023-01-10 17:59:04 +01:00
125 changed files with 3202 additions and 3659 deletions
+5 -5
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -54,14 +54,14 @@ from novelwriter.config import Config
##
__package__ = "novelwriter"
__copyright__ = "Copyright 20182022, Veronica Berglyd Olsen"
__copyright__ = "Copyright 20182023, Veronica Berglyd Olsen"
__license__ = "GPLv3"
__author__ = "Veronica Berglyd Olsen"
__maintainer__ = "Veronica Berglyd Olsen"
__email__ = "code@vkbo.net"
__version__ = "2.0.1"
__hexversion__ = "0x020001f0"
__date__ = "2022-11-29"
__version__ = "2.0.3"
__hexversion__ = "0x020003f0"
__date__ = "2023-01-08"
__status__ = "Stable"
__domain__ = "novelwriter.io"
__url__ = "https://novelwriter.io"
@@ -1,37 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg7536"
sodipodi:docname="mixed_edit.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview1259"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="34.625"
inkscape:cx="8.7364621"
inkscape:cy="11.98556"
inkscape:window-width="2560"
inkscape:window-height="1330"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg7536" />
id="svg7536">
<metadata
id="metadata7542">
<rdf:RDF>
@@ -40,6 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -25,10 +25,9 @@
</rdf:RDF>
</metadata>
<path
d="m2 17.714v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h11.429c2.3629 0 4.2857 1.9229 4.2857 4.2857v7.1429c0 0.79-0.64 1.4286-1.4286 1.4286-0.78857 0-1.4286-0.63857-1.4286-1.4286v-7.1429c0-0.78857-0.64143-1.4286-1.4286-1.4286h-11.429c-0.78714 0-1.4286 0.64-1.4286 1.4286v11.429c0 0.78857 0.64143 1.4286 1.4286 1.4286h4.2857c0.78857 0 1.4286 0.63857 1.4286 1.4286s-0.64 1.4286-1.4286 1.4286h-4.2857c-2.3629 0-4.2857-1.9229-4.2857-4.2857zm15.714 4.2857h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
fill="#848484"
stroke-width="1.4286"
id="path2927" />
id="path2927"
style="fill:#848484;fill-opacity:1"
d="M 6.2851562,2 C 3.9296438,1.9318024 1.8530839,4.1116184 2,6.4548618 2.0068983,10.304935 1.9861657,14.15563 2.0104329,18.005313 2.1401885,20.174302 4.0868901,22.059322 6.2851562,22 c 3.8832648,-0.0037 7.7667178,0.0074 11.6498648,-0.0056 C 20.253096,21.935675 22.190613,19.73469 22,17.432001 21.996299,13.643017 22.007418,9.8538453 21.994414,6.0649793 21.935675,3.7469037 19.734691,1.8093866 17.432001,2 13.716386,2 10.000771,2 6.2851562,2 Z m 7.1621098,2.8554688 c 1.517767,0.018193 3.040205,-0.037158 4.55493,0.029088 0.831903,0.1432784 1.247019,1.0200413 1.140382,1.796579 -0.0049,3.726426 0.0098,7.453347 -0.0074,11.179464 -0.06228,0.897202 -0.990183,1.406807 -1.816343,1.281978 -3.726391,-0.005 -7.4532932,0.0099 -11.1793638,-0.0075 -0.8893499,-0.06498 -1.4061831,-0.991209 -1.2820783,-1.81622 0.00424,-3.720679 -0.00847,-7.4417768 0.00635,-11.1621953 0.056947,-0.8627405 0.9413144,-1.4230927 1.7608001,-1.2992468 2.2741995,-0.00131 4.5486615,0.00261 6.8226985,-0.00195 z" />
<rect
x="7"
y="10.1"

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="arrow-maximise.svg"
id="svg7486"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs7490" />
<sodipodi:namedview
inkscape:current-layer="svg7486"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview7488"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="stroke-width:1.25;fill:#6699cc;fill-opacity:1"
id="path7484"

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="arrow-minimise.svg"
id="svg8816"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs8820" />
<sodipodi:namedview
inkscape:current-layer="svg8816"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview8818"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#6699cc;fill-opacity:1;stroke-width:1.24999"
id="path8814"

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="refresh.svg"
id="svg6649"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs6653" />
<sodipodi:namedview
inkscape:current-layer="svg6649"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview6651"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#99cc99;fill-opacity:1;stroke-width:1.33321"
id="path6647"

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -5,35 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg5291"
sodipodi:docname="status_lines-dark.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1344"
id="namedview6681"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12.065574"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg5291" />
id="svg5291">
<metadata
id="metadata5297">
<rdf:RDF>
@@ -42,7 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,37 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg7536"
sodipodi:docname="mixed_edit.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview1259"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="34.625"
inkscape:cx="3.1913357"
inkscape:cy="11.98556"
inkscape:window-width="2560"
inkscape:window-height="1330"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg7536" />
id="svg7536">
<metadata
id="metadata7542">
<rdf:RDF>
@@ -40,6 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -25,10 +25,9 @@
</rdf:RDF>
</metadata>
<path
d="m2 17.714v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h11.429c2.3629 0 4.2857 1.9229 4.2857 4.2857v7.1429c0 0.79-0.64 1.4286-1.4286 1.4286-0.78857 0-1.4286-0.63857-1.4286-1.4286v-7.1429c0-0.78857-0.64143-1.4286-1.4286-1.4286h-11.429c-0.78714 0-1.4286 0.64-1.4286 1.4286v11.429c0 0.78857 0.64143 1.4286 1.4286 1.4286h4.2857c0.78857 0 1.4286 0.63857 1.4286 1.4286s-0.64 1.4286-1.4286 1.4286h-4.2857c-2.3629 0-4.2857-1.9229-4.2857-4.2857zm15.714 4.2857h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
fill="#333"
stroke-width="1.4286"
id="path969" />
id="path969"
style="fill:#333333;fill-opacity:1"
d="M 6.2851562,2 C 3.9296438,1.9318024 1.8530839,4.1116184 2,6.4548618 2.0068983,10.304935 1.9861657,14.15563 2.0104329,18.005313 2.1401885,20.174302 4.0868901,22.059322 6.2851562,22 c 3.8832648,-0.0037 7.7667178,0.0074 11.6498648,-0.0056 C 20.253096,21.935675 22.190613,19.73469 22,17.432001 21.996299,13.643017 22.007418,9.8538453 21.994414,6.0649793 21.935675,3.7469037 19.734691,1.8093866 17.432001,2 13.716386,2 10.000771,2 6.2851562,2 Z m 7.1621098,2.8554688 c 1.517767,0.018193 3.040205,-0.037158 4.55493,0.029088 0.831903,0.1432784 1.247019,1.0200413 1.140382,1.796579 -0.0049,3.726426 0.0098,7.453347 -0.0074,11.179464 -0.06228,0.897202 -0.990183,1.406807 -1.816343,1.281978 -3.726391,-0.005 -7.4532932,0.0099 -11.1793638,-0.0075 -0.8893499,-0.06498 -1.4061831,-0.991209 -1.2820783,-1.81622 0.00424,-3.720679 -0.00847,-7.4417768 0.00635,-11.1621953 0.056947,-0.8627405 0.9413144,-1.4230927 1.7608001,-1.2992468 2.2741995,-0.00131 4.5486615,0.00261 6.8226985,-0.00195 z" />
<rect
x="7"
y="10.1"

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -5,15 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg7486"
sodipodi:docname="arrow-maximise.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
id="svg7486">
<metadata
id="metadata7492">
<rdf:RDF>
@@ -28,27 +24,6 @@
</metadata>
<defs
id="defs7490" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1370"
id="namedview7488"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="1"
inkscape:window-maximized="1"
inkscape:current-layer="svg7486" />
<path
d="m 15.75,2 c -0.69125,0 -1.25,0.56 -1.25,1.25 0,0.69 0.55875,1.25 1.25,1.25 h 1.9825 l -4.11625,4.11625 c -0.48875,0.48875 -0.48875,1.27875 0,1.7675 C 13.86,10.6275 14.18,10.75 14.5,10.75 c 0.32,0 0.64,-0.1225 0.88375,-0.36625 L 19.5,6.2675 V 8.25 c 0,0.69 0.55875,1.25 1.25,1.25 C 21.44125,9.5 22,8.94 22,8.25 V 2 Z M 8.61625,13.61625 4.5,17.7325 V 15.75 C 4.5,15.06 3.94125,14.5 3.25,14.5 2.55875,14.5 2,15.06 2,15.75 v 6.24875 H 3.245 L 8.25,22 C 8.94,22 9.5,21.44 9.5,20.75 9.5,20.06 8.94125,19.5 8.25,19.5 H 6.2675 l 4.11625,-4.115 c 0.48875,-0.48875 0.48875,-1.27875 0,-1.7675 C 9.895,13.12875 9.105,13.1275 8.61625,13.6163 Z M 5.75,12 C 6.44,12 7,11.44 7,10.75 V 7 h 3.75 C 11.44125,7 12,6.44 12,5.75 12,5.06 11.44125,4.5 10.75,4.5 H 4.50125 L 4.5,10.75 C 4.5,11.44 5.05875,12 5.75,12 Z m 12.5,0 C 17.55875,12 17,12.56 17,13.25 V 17 H 13.25 C 12.55875,17 12,17.56 12,18.25 c 0,0.69 0.55875,1.25 1.25,1.25 H 19.5 V 13.25 C 19.5,12.56 18.94125,12 18.25,12 Z"
id="path7484"

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="arrow-minimise.svg"
id="svg8816"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs8820" />
<sodipodi:namedview
inkscape:current-layer="svg8816"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview8818"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#4271ae;fill-opacity:1;stroke-width:1.24999"
id="path8814"

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -1,34 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1169"
sodipodi:docname="typ_export.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview2676"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="34.625"
inkscape:cx="6.4259928"
inkscape:cy="11.98556"
inkscape:window-width="2560"
inkscape:window-height="1330"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1169" />
id="svg1169">
<metadata
id="metadata13645">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs1173" />
<path

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -5,15 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg6649"
sodipodi:docname="refresh.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
id="svg6649">
<metadata
id="metadata6655">
<rdf:RDF>
@@ -28,27 +24,6 @@
</metadata>
<defs
id="defs6653" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1370"
id="namedview6651"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="1"
inkscape:window-maximized="1"
inkscape:current-layer="svg6649" />
<path
d="M 13.162667,12.25611 H 20 V 5.4213831 C 19.989333,3.9083317 19.105333,3.5443996 18.036,4.6148668 L 16.497333,6.1585791 C 15.144,5.0987766 13.488,4.5188846 11.742667,4.5188846 9.676,4.5188846 7.7306667,5.3240679 6.2706667,6.7864621 4.8053333,8.242191 4,10.189828 4,12.25611 4,14.326391 4.8053333,16.271361 6.268,17.731089 7.7306667,19.193484 9.674667,20 11.742667,20 c 2.066666,0 4.012,-0.806516 5.474666,-2.270244 0.394667,-0.395926 0.744,-0.827845 1.04,-1.286427 C 18.72,15.72213 18.510667,14.763642 17.790667,14.303728 17.072,13.842481 16.113333,14.051775 15.652,14.770308 c -0.177333,0.275948 -0.389333,0.533234 -0.624,0.773189 -0.878667,0.87717 -2.045333,1.359747 -3.285333,1.359747 -1.24,0 -2.406667,-0.481244 -3.285334,-1.359747 -0.8759997,-0.87717 -1.3599997,-2.043619 -1.3599997,-3.286054 0,-1.239769 0.4826667,-2.406219 1.3599997,-3.280722 0.878667,-0.87717 2.045334,-1.36108 3.285334,-1.36108 0.917333,0 1.794666,0.26795 2.545333,0.762525 l -1.930667,1.934306 c -1.070666,1.069134 -0.706666,1.943638 0.805334,1.943638 z"
id="path6647"

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -5,35 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg5291"
sodipodi:docname="status_lines.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1344"
id="namedview7270"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12.065574"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg5291" />
id="svg5291">
<metadata
id="metadata5297">
<rdf:RDF>
@@ -42,7 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

+69
View File
@@ -0,0 +1,69 @@
<!DOCTYPE html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
<h2>Credits</h2>
<h3>Main Developer</h3>
<p>Veronica Berglyd Olsen (<a href="https://github.com/vkbo">@vkbo</a>)</p>
<h3>Contributors</h3>
<p>
<b>Concept:</b> Marian Lückhof (<a href="https://github.com/Number042">@Number042</a>)<br>
<b>Internationalisation:</b> Bruno Meneguello (<a href="https://github.com/bkmeneguello">@bkmeneguello</a>)<br>
<b>Setup and Packaging:</b> Rachel Powers (<a href="https://github.com/Ryex">@Ryex</a>)
</p>
<p>For other contributions, see the project's
<a href="https://github.com/vkbo/novelWriter/graphs/contributors">Contributors</a> page.</p>
<h3>Translations</h3>
<p>The default language is English (UK) with English (US) as an option. These are the original
translators for the languages currently available:</p>
<p>
<b>Dutch:</b> Martijn van der Kleijn (<a href="https://github.com/mvdkleijn">@mvdkleijn</a>)<br>
<b>French:</b> Jan Lüdke (<a href="https://github.com/jyhelle">@jyhelle</a>)<br>
<b>German:</b> Myian (<a href="https://github.com/heymyian">@heymyian</a>)<br>
<b>Latin American Spanish:</b> Tommy Marplatt (<a href="https://github.com/tmarplatt">@tmarplatt</a>)<br>
<b>Norwegian:</b> Veronica Berglyd Olsen (<a href="https://github.com/vkbo">@vkbo</a>)<br>
<b>Portuguese:</b> Bruno Meneguello (<a href="https://github.com/bkmeneguello">@bkmeneguello</a>)<br>
<b>Simplified Chinese:</b> Qianzhi Long (<a href="https://github.com/longqzh">@longqzh</a>)
</p>
<p>Additional larger translation contributions:</p>
<p>
<b>French:</b> Albert Aribaud (<a href="https://github.com/aaribaud">@aaribaud</a>)
</p>
<p>Translations are managed on <a href="https://crowdin.com/project/novelwriter">Crowdin</a>, and
more contributions are listed on the project's <a href="https://crowdin.com/project/novelwriter/members">Members</a> page.</p>
<h3>Libraries</h3>
<p>The following libraries are dependencies of novelWriter:</p>
<p>
<a href="https://www.qt.io">Qt5</a> by Qt Company<br>
<a href="https://www.riverbankcomputing.com/software/pyqt">PyQt5</a> by Riverbank Computing<br>
<a href="https://lxml.de">lxml</a> by Martijn Faassen<br>
<a href="https://abiword.github.io/enchant">Enchant</a> by Dom Lachowicz<br>
<a href="https://pyenchant.github.io/pyenchant">PyEnchant</a> by Dimitri Merejkowsky
</p>
<h3>Assets</h3>
<p>Some of the assets bundled with novelWriter were adapted from the following sources:</p>
<p>
<a href="https://github.com/stephenhutchings/typicons.font">Typicons</a> icons by Stephen Hutchings (CC BY-SA 4.0)<br>
<a href="https://github.com/chriskempson/base16">Tomorrow</a> syntax themes by Chris Kempson (MIT License)<br>
<a href="https://github.com/sdras/night-owl-vscode-theme">Owl</a> syntax themes by Sarah Drasner (MIT License)<br>
<a href="https://github.com/altercation/solarized">Solarized</a> themes by Ethan Schoonover (MIT License)
</p>
<h3>Special Mentions</h3>
<p>Additional thanks to <a href="https://github.com/johnblommers">@johnblommers</a> who was an early user and who has provided a lot
of very useful feedback over the years.</p>
</body>
</html>
+15
View File
@@ -94,5 +94,20 @@ Project Settings dialog has been updated to reflect some of the same changes.</p
<p>This is a patch release that fixes a minor issues with loading custom GUI themes that haven't
been updated to include the icon theme setting. The patch also updates the French translation.</p>
<h3>Patch 2.0.2 &ndash; 1 December 2022</h3>
<p>This is a patch release that fixes a minor issues with syntax highlighting not updating when the
highlighting preferences were changed. It also fixes an issue that broke the FreeBSD release.</p>
<h3>Patch 2.0.3 &ndash; 8 January 2023</h3>
<p>This is a patch release that fixes a few bugs and usability issues. The editing of status and
importance labels in Project Settings should now be a bit more intuitive. Opening a document from
the Outline View that is already open in the editor should now switch to the editor view. The
convert folder to note or document feature in the project tree has also been fixed. Some icons have
been updated and a renderring issue with one of them fixed. Chinese, Norwegian, US English, German
and Spanish translations have been updated as well. A new credits tab has been added to the About
dialog box, replacing the Credits section on the main About tab.</p>
</body>
</html>
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-12 [0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+3 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -461,10 +461,11 @@ class Config:
self._confPath.mkdir(exist_ok=True)
self._dataPath.mkdir(exist_ok=True)
# Also create the syntax and themes folders if possible
# Also create the syntax, themes and icons folders if possible
if self._dataPath.is_dir():
(self._dataPath / "syntax").mkdir(exist_ok=True)
(self._dataPath / "themes").mkdir(exist_ok=True)
(self._dataPath / "icons").mkdir(exist_ok=True)
# Check if config file exists, and load it. If not, we save defaults
if (self._confPath / nwFiles.CONF_FILE).is_file():
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-28 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -9,7 +9,7 @@ Created: 2022-10-11 [2.0rc1] DocSplitter
Created: 2022-11-03 [2.0rc2] ProjectBuilder
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -12,7 +12,7 @@ Created: 2022-05-29 [2.0rc1] TagsIndex
Created: 2022-05-29 [2.0rc1] ItemIndex
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-10-27 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2019-10-21 [0.3.1]
Rewritten: 2020-02-19 [0.4.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+4 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -251,6 +251,9 @@ class NWProject(QObject):
"""
self.clearProject()
if not self._storage.openProjectInPlace(projPath):
self.mainGui.makeAlert(self.tr(
"Could not open project with path: {0}"
).format(projPath), nwAlert.ERROR)
return False
logger.info("Opening project: %s", projPath)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-10-30 [2.0rc2]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -9,7 +9,7 @@ Created: 2022-09-28 [2.0rc2] ProjectXMLReader
Created: 2022-10-31 [2.0rc2] ProjectXMLWriter
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-06-11 [0.1.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2019-05-19 [0.1.3]
Rewritten: 2022-04-05 [2.0b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+8 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-11-01 [2.0rc2] NWStorage
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -102,6 +102,10 @@ class NWStorage:
# but it can point to a folder containing files
inPath = inPath.parent
if not (inPath.is_dir() or newProject):
# If the project is not new, the folder must already exist.
return False
self._storagePath = inPath
self._runtimePath = inPath
self._lockFilePath = inPath / nwFiles.PROJ_LOCK
@@ -114,7 +118,9 @@ class NWStorage:
return True
def openProjectArchive(self, path): # pragma: no cover
pass
"""Placeholder for later implementation. See #977.
"""
return False
def runPostSaveTasks(self, autoSave=False): # pragma: no cover
"""Run tasks after the project has been saved.
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-07 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-05 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-02-06 [1.2b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-01-26 [1.2b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-07 [0.4.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -9,7 +9,7 @@ Created: 2020-05-03 [0.4.5] QSwitch
Created: 2020-05-17 [0.5.1] PagedDialog
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+19 -71
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-21 [0.5.2]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -85,6 +85,10 @@ class GuiAbout(QDialog):
self.pageNotes.setOpenExternalLinks(True)
self.pageNotes.document().setDocumentMargin(self.mainConf.pxInt(16))
self.pageCredits = QTextBrowser()
self.pageCredits.setOpenExternalLinks(True)
self.pageCredits.document().setDocumentMargin(self.mainConf.pxInt(16))
self.pageLicense = QTextBrowser()
self.pageLicense.setOpenExternalLinks(True)
self.pageLicense.document().setDocumentMargin(self.mainConf.pxInt(16))
@@ -93,6 +97,7 @@ class GuiAbout(QDialog):
self.tabBox = QTabWidget()
self.tabBox.addTab(self.pageAbout, self.tr("About"))
self.tabBox.addTab(self.pageNotes, self.tr("Release"))
self.tabBox.addTab(self.pageCredits, self.tr("Credits"))
self.tabBox.addTab(self.pageLicense, self.tr("Licence"))
self.innerBox.addWidget(self.tabBox)
@@ -115,6 +120,7 @@ class GuiAbout(QDialog):
self._setStyleSheet()
self._fillAboutPage()
self._fillNotesPage()
self._fillCreditsPage()
self._fillLicensePage()
qApp.restoreOverrideCursor()
return
@@ -140,20 +146,12 @@ class GuiAbout(QDialog):
"<p>{license1}</p>"
"<p>{license2}</p>"
"<p>{license3}</p>"
"<h3>{title2}</h3>"
"<p>{credits}</p>"
).format(
title1=self.tr("About novelWriter"),
copy=novelwriter.__copyright__,
link=self.tr("Website: {0}").format(
f"<a href='{novelwriter.__url__}'>{novelwriter.__domain__}</a>"
),
title2=self.tr("Credits"),
credits=self._wrapTable([
(self.tr("Developer"), "Veronica Berglyd Olsen"),
(self.tr("Concept"), "Veronica Berglyd Olsen, Marian Lückhof"),
(self.tr("i18n"), "Bruno Meneguello"),
]),
intro=self.tr(
"novelWriter is a markdown-like text editor designed for organising and "
"writing novels. It is written in Python 3 with a Qt5 GUI, using PyQt5."
@@ -177,55 +175,6 @@ class GuiAbout(QDialog):
),
)
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Translations"),
self._wrapTable([
("Deutsch", "Myian"),
("English", "Veronica Berglyd Olsen"),
("Español Latinoamericano", "Tommy Marplatt"),
("Français", "Jan Lüdke (jyhelle)"),
("Nederlands", "Martijn van der Kleijn"),
("Norsk Bokmål", "Veronica Berglyd Olsen"),
("Português", "Bruno Meneguello"),
("简体中文", "Qianzhi Long"),
])
)
mainTheme = self.mainGui.mainTheme
iconCache = self.mainGui.mainTheme.iconCache
if mainTheme.themeName and mainTheme.themeAuthor != "N/A":
licURL = f"<a href='{mainTheme.themeLicenseUrl}'>{mainTheme.themeLicense}</a>"
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Theme: {0}").format(mainTheme.themeName),
self._wrapTable([
(self.tr("Author"), mainTheme.themeAuthor),
(self.tr("Credit"), mainTheme.themeCredit),
(self.tr("Licence"), licURL),
])
)
if iconCache.themeName:
licURL = f"<a href='{iconCache.themeLicenseUrl}'>{iconCache.themeLicense}</a>"
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Icons: {0}").format(iconCache.themeName),
self._wrapTable([
(self.tr("Author"), iconCache.themeAuthor),
(self.tr("Credit"), iconCache.themeCredit),
(self.tr("Licence"), licURL),
])
)
if mainTheme.syntaxName:
licURL = f"<a href='{mainTheme.syntaxLicenseUrl}'>{mainTheme.syntaxLicense}</a>"
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Syntax: {0}").format(mainTheme.syntaxName),
self._wrapTable([
(self.tr("Author"), mainTheme.syntaxAuthor),
(self.tr("Credit"), mainTheme.syntaxCredit),
(self.tr("Licence"), licURL),
])
)
self.pageAbout.setHtml(aboutMsg)
return
@@ -241,6 +190,17 @@ class GuiAbout(QDialog):
self.pageNotes.setHtml("Error loading release notes text ...")
return
def _fillCreditsPage(self):
"""Load the content for the Credits page.
"""
docPath = self.mainConf.assetPath("text") / "credits_en.htm"
docText = readTextFile(docPath)
if docText:
self.pageCredits.setHtml(docText)
else:
self.pageCredits.setHtml("Error loading credits text ...")
return
def _fillLicensePage(self):
"""Load the content for the Licence page.
"""
@@ -252,16 +212,6 @@ class GuiAbout(QDialog):
self.pageLicense.setHtml("Error loading licence text ...")
return
def _wrapTable(self, theData):
"""Wrap a list of label/value tuples in an html table.
"""
theTable = []
for aLabel, aValue in theData:
theTable.append(
f"<tr><td><b>{aLabel}:</b></td><td>{aValue}</td></tr>"
)
return "<table>{0}</table>".format("".join(theTable))
def _setStyleSheet(self):
"""Set stylesheet for all browser tabs
"""
@@ -275,9 +225,6 @@ class GuiAbout(QDialog):
".alt {{"
" color: rgb({kColR},{kColG},{kColB});"
"}}\n"
"td {{"
" padding-right: 0.8em;"
"}}\n"
).format(
hColR=self.mainGui.mainTheme.colHead[0],
hColG=self.mainGui.mainTheme.colHead[1],
@@ -288,6 +235,7 @@ class GuiAbout(QDialog):
)
self.pageAbout.document().setDefaultStyleSheet(styleSheet)
self.pageNotes.document().setDefaultStyleSheet(styleSheet)
self.pageCredits.document().setDefaultStyleSheet(styleSheet)
self.pageLicense.document().setDefaultStyleSheet(styleSheet)
return
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-01-23 [0.4.3]
Rewritten: 2022-10-06 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-02-01 [0.4.3]
Rewritten: 2022-10-12 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-06-11 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+15 -9
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-06-10 [0.1.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -826,6 +826,7 @@ class GuiPreferencesSyntax(QWidget):
super().__init__(parent=prefsGui)
self.mainConf = novelwriter.CONFIG
self.prefsGui = prefsGui
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -893,16 +894,21 @@ class GuiPreferencesSyntax(QWidget):
def saveValues(self):
"""Save the values set for this tab.
"""
# Quotes & Dialogue
self.mainConf.highlightQuotes = self.highlightQuotes.isChecked()
self.mainConf.allowOpenSQuote = self.allowOpenSQuote.isChecked()
self.mainConf.allowOpenDQuote = self.allowOpenDQuote.isChecked()
highlightQuotes = self.highlightQuotes.isChecked()
allowOpenSQuote = self.allowOpenSQuote.isChecked()
allowOpenDQuote = self.allowOpenDQuote.isChecked()
highlightEmph = self.highlightEmph.isChecked()
showMultiSpaces = self.showMultiSpaces.isChecked()
# Text Emphasis
self.mainConf.highlightEmph = self.highlightEmph.isChecked()
self.prefsGui._updateSyntax |= self.mainConf.highlightQuotes != highlightQuotes
self.prefsGui._updateSyntax |= self.mainConf.highlightEmph != highlightEmph
self.prefsGui._updateSyntax |= self.mainConf.showMultiSpaces != showMultiSpaces
# Text Errors
self.mainConf.showMultiSpaces = self.showMultiSpaces.isChecked()
self.mainConf.highlightQuotes = highlightQuotes
self.mainConf.allowOpenSQuote = allowOpenSQuote
self.mainConf.allowOpenDQuote = allowOpenDQuote
self.mainConf.highlightEmph = highlightEmph
self.mainConf.showMultiSpaces = showMultiSpaces
return
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-01-03 [1.1rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-02-26 [0.4.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+55 -39
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,8 +26,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
import logging
import novelwriter
from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush
from PyQt5.QtCore import Qt, QLocale
from PyQt5.QtGui import QIcon, QPixmap, QColor
from PyQt5.QtCore import Qt, QLocale, pyqtSlot
from PyQt5.QtWidgets import (
QColorDialog, QComboBox, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit,
QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
@@ -300,7 +300,7 @@ class GuiProjectEditStatus(QWidget):
self.colDeleted = []
self.colChanged = False
self.selColour = QColor(100, 100, 100)
self.selColour = QColor(100, 100, 100)
self.iPx = self.mainTheme.baseIconSize
@@ -338,16 +338,18 @@ class GuiProjectEditStatus(QWidget):
self.editName = QLineEdit()
self.editName.setMaxLength(40)
self.editName.setEnabled(False)
self.editName.setPlaceholderText(self.tr("Select item to edit"))
self.editName.setEnabled(False)
self.colPixmap = QPixmap(self.iPx, self.iPx)
self.colPixmap.fill(QColor(100, 100, 100))
self.colButton = QPushButton(QIcon(self.colPixmap), self.tr("Colour"))
self.colButton.setIconSize(self.colPixmap.rect().size())
self.colButton.setEnabled(False)
self.colButton.clicked.connect(self._selectColour)
self.saveButton = QPushButton(self.tr("Save"))
self.saveButton.setEnabled(False)
self.saveButton.clicked.connect(self._saveItem)
# Assemble
@@ -399,9 +401,10 @@ class GuiProjectEditStatus(QWidget):
return [], []
##
# User Actions
# Private Slots
##
@pyqtSlot()
def _selectColour(self):
"""Open a dialog to select the status icon colour.
"""
@@ -417,20 +420,20 @@ class GuiProjectEditStatus(QWidget):
self.colButton.setIconSize(pixmap.rect().size())
return
@pyqtSlot()
def _newItem(self):
"""Create a new status item.
"""
newItem = self._addItem(None, self.tr("New Item"), (100, 100, 100), 0)
newItem.setBackground(self.COL_LABEL, QBrush(QColor(0, 255, 0, 70)))
newItem.setBackground(self.COL_USAGE, QBrush(QColor(0, 255, 0, 70)))
self._addItem(None, self.tr("New Item"), (100, 100, 100), 0)
self.colChanged = True
return
@pyqtSlot()
def _delItem(self):
"""Delete a status item.
"""
selItem = self._getSelectedItem()
if selItem is not None:
if isinstance(selItem, QTreeWidgetItem):
iRow = self.listBox.indexOfTopLevelItem(selItem)
if selItem.data(self.COL_LABEL, self.NUM_ROLE) > 0:
self.mainGui.makeAlert(self.tr(
@@ -442,21 +445,60 @@ class GuiProjectEditStatus(QWidget):
self.colChanged = True
return
@pyqtSlot()
def _saveItem(self):
"""Save changes made to a status item.
"""
selItem = self._getSelectedItem()
if selItem is not None:
if isinstance(selItem, QTreeWidgetItem):
selItem.setText(self.COL_LABEL, simplified(self.editName.text()))
selItem.setIcon(self.COL_LABEL, self.colButton.icon())
selItem.setData(self.COL_LABEL, self.COL_ROLE, (
self.selColour.red(), self.selColour.green(), self.selColour.blue()
))
self.editName.setEnabled(False)
self.colChanged = True
return
@pyqtSlot()
def _selectedItem(self):
"""Extract the info of a selected item and populate the settings
boxes and button. If no item is selected, clear the form.
"""
selItem = self._getSelectedItem()
if isinstance(selItem, QTreeWidgetItem):
cols = selItem.data(self.COL_LABEL, self.COL_ROLE)
name = selItem.text(self.COL_LABEL)
pixmap = QPixmap(self.iPx, self.iPx)
pixmap.fill(QColor(*cols))
self.selColour = QColor(*cols)
self.editName.setText(name)
self.colButton.setIcon(QIcon(pixmap))
self.editName.selectAll()
self.editName.setFocus()
self.editName.setEnabled(True)
self.colButton.setEnabled(True)
self.saveButton.setEnabled(True)
else:
pixmap = QPixmap(self.iPx, self.iPx)
pixmap.fill(QColor(100, 100, 100))
self.selColour = QColor(100, 100, 100)
self.editName.setText("")
self.colButton.setIcon(QIcon(pixmap))
self.editName.setEnabled(False)
self.colButton.setEnabled(False)
self.saveButton.setEnabled(False)
return
##
# Internal Functions
##
def _addItem(self, key, name, cols, count):
"""Add a status item to the list.
"""
@@ -473,7 +515,7 @@ class GuiProjectEditStatus(QWidget):
self.listBox.addTopLevelItem(item)
return item
return
def _moveItem(self, step):
"""Move and item up or down step.
@@ -498,32 +540,6 @@ class GuiProjectEditStatus(QWidget):
return
def _selectedItem(self):
"""Extract the info of a selected item and populate the settings
boxes and button.
"""
selItem = self._getSelectedItem()
if selItem is None:
return
cols = selItem.data(self.COL_LABEL, self.COL_ROLE)
name = selItem.text(self.COL_LABEL)
pixmap = QPixmap(self.iPx, self.iPx)
pixmap.fill(QColor(*cols))
self.selColour = QColor(*cols)
self.editName.setText(name)
self.colButton.setIcon(QIcon(pixmap))
self.editName.setEnabled(True)
self.editName.selectAll()
self.editName.setFocus()
return
##
# Internal Functions
##
def _getSelectedItem(self):
"""Get the currently selected item.
"""
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-06-18 [0.9]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-08-21 [1.5b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-02-12 [1.2rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-11-02 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-08-02 [0.10.2]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-05-17 [0.5.1] StatusLED
Created: 2022-11-17 [2.0] NovelSelector
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -13,7 +13,7 @@ Created: 2020-06-27 [0.10] GuiDocEditFooter
Rewritten: 2020-10-07 [1.0b3] BackgroundWordCounter
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-06 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -11,7 +11,7 @@ Created: 2020-06-09 [0.8] GuiDocViewFooter
Created: 2020-09-08 [1.0b1] GuiDocViewHistory
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-24 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-27 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -11,7 +11,7 @@ Created: 2019-11-16 [0.4.1] GuiOutlineHeaderMenu
Created: 2020-06-02 [0.7] GuiOutlineDetails
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+24 -8
View File
@@ -9,7 +9,7 @@ Created: 2022-06-06 [2.0rc1] GuiProjectView
Created: 2022-06-06 [2.0rc1] GuiProjectToolBar
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1251,18 +1251,30 @@ class GuiProjectTree(QTreeWidget):
isDocFile = isFile and tItem.isDocumentLayout()
isNoteFile = isFile and tItem.isNoteLayout()
if (isNoteFile or isFolder) and tItem.documentAllowed():
if isNoteFile and tItem.documentAllowed():
aConvert1 = mTrans.addAction(self.tr("Convert to {0}").format(trDoc))
aConvert1.triggered.connect(
lambda: self._changeItemLayout(tHandle, nwItemLayout.DOCUMENT)
)
if isDocFile or isFolder:
if isDocFile:
aConvert2 = mTrans.addAction(self.tr("Convert to {0}").format(trNote))
aConvert2.triggered.connect(
lambda: self._changeItemLayout(tHandle, nwItemLayout.NOTE)
)
if isFolder and tItem.documentAllowed():
aConvert3 = mTrans.addAction(self.tr("Convert to {0}").format(trDoc))
aConvert3.triggered.connect(
lambda: self._covertFolderToFile(tHandle, nwItemLayout.DOCUMENT)
)
if isFolder:
aConvert4 = mTrans.addAction(self.tr("Convert to {0}").format(trNote))
aConvert4.triggered.connect(
lambda: self._covertFolderToFile(tHandle, nwItemLayout.NOTE)
)
if hasChild and isFile:
aMerge1 = mTrans.addAction(self.tr("Merge Child Items into Self"))
aMerge1.triggered.connect(lambda: self._mergeDocuments(tHandle, False))
@@ -1681,19 +1693,23 @@ class GuiProjectTree(QTreeWidget):
del self._treeMap[tHandle]
return None
else:
elif pHandle in self._treeMap:
byIndex = -1
if nHandle is not None and nHandle in self._treeMap:
try:
byIndex = self._treeMap[pHandle].indexOfChild(self._treeMap[nHandle])
except Exception:
logger.error("Failed to get index of item with handle '%s'", nHandle)
byIndex = self._treeMap[pHandle].indexOfChild(self._treeMap[nHandle])
if byIndex >= 0:
self._treeMap[pHandle].insertChild(byIndex + 1, newItem)
else:
self._treeMap[pHandle].addChild(newItem)
self.propagateCount(tHandle, nwItem.wordCount, countChildren=True)
else:
self.mainGui.makeAlert(self.tr(
"There is nowhere to add item with name '{0}'."
).format(nwItem.itemName), nwAlert.ERROR)
del self._treeMap[tHandle]
return None
self.setTreeItemValues(tHandle)
newItem.setExpanded(nwItem.isExpanded)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-05-10 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2019-04-20 [0.0.1] GuiMainStatus
Created: 2020-05-17 [0.5.1] StatusLED
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+5 -3
View File
@@ -8,7 +8,7 @@ Created: 2019-05-18 [0.1.3] GuiTheme
Created: 2019-11-08 [0.4] GuiIcons
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -507,8 +507,10 @@ class GuiIcons:
self._themeMap = {}
themePath = self._iconPath / iconTheme
if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme)
return False
themePath = self.mainConf.dataPath("icons") / iconTheme
if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme)
return False
themeConf = themePath / self._confName
logger.info("Loading icon theme '%s'", iconTheme)
+2 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -610,6 +610,7 @@ class GuiMain(QMainWindow):
logger.debug("Requested item '%s' is not a document", tHandle)
return False
self._changeView(nwView.EDITOR)
cHandle = self.docEditor.docHandle()
if cHandle == tHandle:
self.docEditor.setCursorLine(tLine)
@@ -618,7 +619,6 @@ class GuiMain(QMainWindow):
return True
self.closeDocument(beforeOpen=True)
self._changeView(nwView.EDITOR)
if self.docEditor.loadText(tHandle, tLine):
self.theProject.data.setLastHandle(tHandle, "editor")
self.projView.setSelectedHandle(tHandle, doScroll=doScroll)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-09 [0.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-04-02 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-07-11 [0.10.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-10-20 [0.3]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by