novelWriter 2.2b1__py3-none-any.whl → 2.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. {novelWriter-2.2b1.dist-info → novelWriter-2.2.1.dist-info}/METADATA +3 -3
  2. {novelWriter-2.2b1.dist-info → novelWriter-2.2.1.dist-info}/RECORD +128 -114
  3. {novelWriter-2.2b1.dist-info → novelWriter-2.2.1.dist-info}/WHEEL +1 -1
  4. novelwriter/__init__.py +10 -5
  5. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  6. novelwriter/assets/i18n/nw_en_US.qm +0 -0
  7. novelwriter/assets/i18n/nw_es_419.qm +0 -0
  8. novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
  9. novelwriter/assets/i18n/nw_it_IT.qm +0 -0
  10. novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
  11. novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
  12. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  13. novelwriter/assets/i18n/project_de_DE.json +1 -0
  14. novelwriter/assets/i18n/project_en_GB.json +1 -0
  15. novelwriter/assets/i18n/project_en_US.json +1 -0
  16. novelwriter/assets/i18n/project_es_419.json +11 -0
  17. novelwriter/assets/i18n/project_fr_FR.json +11 -0
  18. novelwriter/assets/i18n/project_it_IT.json +11 -0
  19. novelwriter/assets/i18n/project_ja_JP.json +2 -1
  20. novelwriter/assets/i18n/project_nb_NO.json +1 -0
  21. novelwriter/assets/i18n/project_zh_CN.json +11 -0
  22. novelwriter/assets/icons/novelwriter.ico +0 -0
  23. novelwriter/assets/icons/typicons_dark/icons.conf +11 -3
  24. novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +4 -0
  25. novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +4 -0
  26. novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +4 -0
  27. novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +4 -0
  28. novelwriter/assets/icons/typicons_dark/nw_panel.svg +4 -0
  29. novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +4 -0
  30. novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +3 -1
  31. novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +4 -0
  32. novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +3 -1
  33. novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +4 -0
  34. novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +3 -1
  35. novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +4 -2
  36. novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +4 -2
  37. novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +4 -2
  38. novelwriter/assets/icons/typicons_dark/typ_eye.svg +4 -0
  39. novelwriter/assets/icons/typicons_light/icons.conf +11 -3
  40. novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +4 -0
  41. novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +4 -0
  42. novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +4 -0
  43. novelwriter/assets/icons/typicons_light/nw_deco-note.svg +4 -0
  44. novelwriter/assets/icons/typicons_light/nw_panel.svg +4 -0
  45. novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +4 -0
  46. novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +3 -1
  47. novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +4 -0
  48. novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +3 -1
  49. novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +4 -0
  50. novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +3 -1
  51. novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +4 -2
  52. novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +4 -2
  53. novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +4 -2
  54. novelwriter/assets/icons/typicons_light/typ_eye.svg +4 -0
  55. novelwriter/assets/icons/x-novelwriter-project.ico +0 -0
  56. novelwriter/assets/manual.pdf +0 -0
  57. novelwriter/assets/sample.zip +0 -0
  58. novelwriter/assets/text/release_notes.htm +50 -7
  59. novelwriter/common.py +35 -27
  60. novelwriter/config.py +13 -28
  61. novelwriter/constants.py +21 -4
  62. novelwriter/core/buildsettings.py +2 -2
  63. novelwriter/core/coretools.py +8 -2
  64. novelwriter/core/docbuild.py +1 -1
  65. novelwriter/core/document.py +1 -1
  66. novelwriter/core/index.py +102 -36
  67. novelwriter/core/item.py +2 -2
  68. novelwriter/core/options.py +6 -3
  69. novelwriter/core/project.py +5 -5
  70. novelwriter/core/projectdata.py +3 -3
  71. novelwriter/core/projectxml.py +1 -1
  72. novelwriter/core/sessions.py +2 -2
  73. novelwriter/core/spellcheck.py +4 -3
  74. novelwriter/core/status.py +3 -3
  75. novelwriter/core/storage.py +1 -1
  76. novelwriter/core/tohtml.py +11 -5
  77. novelwriter/core/tokenizer.py +28 -21
  78. novelwriter/core/tomd.py +6 -2
  79. novelwriter/core/toodt.py +12 -5
  80. novelwriter/core/tree.py +2 -2
  81. novelwriter/dialogs/about.py +30 -31
  82. novelwriter/dialogs/docmerge.py +24 -15
  83. novelwriter/dialogs/docsplit.py +27 -16
  84. novelwriter/dialogs/editlabel.py +19 -7
  85. novelwriter/dialogs/preferences.py +116 -131
  86. novelwriter/dialogs/projdetails.py +29 -36
  87. novelwriter/dialogs/projload.py +32 -36
  88. novelwriter/dialogs/projsettings.py +20 -15
  89. novelwriter/dialogs/quotes.py +32 -25
  90. novelwriter/dialogs/updates.py +17 -16
  91. novelwriter/dialogs/wordlist.py +34 -21
  92. novelwriter/enum.py +19 -8
  93. novelwriter/error.py +1 -1
  94. novelwriter/extensions/circularprogress.py +1 -1
  95. novelwriter/extensions/configlayout.py +3 -15
  96. novelwriter/extensions/{wheeleventfilter.py → eventfilters.py} +15 -5
  97. novelwriter/extensions/novelselector.py +1 -1
  98. novelwriter/extensions/pageddialog.py +1 -1
  99. novelwriter/extensions/pagedsidebar.py +2 -5
  100. novelwriter/extensions/simpleprogress.py +8 -9
  101. novelwriter/extensions/statusled.py +1 -1
  102. novelwriter/extensions/switch.py +4 -4
  103. novelwriter/extensions/switchbox.py +1 -6
  104. novelwriter/gui/doceditor.py +349 -236
  105. novelwriter/gui/dochighlight.py +10 -11
  106. novelwriter/gui/docviewer.py +158 -360
  107. novelwriter/gui/docviewerpanel.py +502 -0
  108. novelwriter/gui/editordocument.py +4 -4
  109. novelwriter/gui/itemdetails.py +2 -2
  110. novelwriter/gui/mainmenu.py +50 -36
  111. novelwriter/gui/noveltree.py +44 -53
  112. novelwriter/gui/outline.py +12 -7
  113. novelwriter/gui/projtree.py +465 -381
  114. novelwriter/gui/sidebar.py +9 -7
  115. novelwriter/gui/statusbar.py +48 -5
  116. novelwriter/gui/theme.py +26 -8
  117. novelwriter/guimain.py +212 -208
  118. novelwriter/shared.py +76 -30
  119. novelwriter/tools/dictionaries.py +268 -0
  120. novelwriter/tools/lipsum.py +34 -28
  121. novelwriter/tools/manusbuild.py +20 -10
  122. novelwriter/tools/manuscript.py +20 -27
  123. novelwriter/tools/manussettings.py +2 -4
  124. novelwriter/tools/projwizard.py +3 -3
  125. novelwriter/tools/writingstats.py +18 -5
  126. novelwriter/assets/icons/typicons_dark/nw_tb-markdown.svg +0 -8
  127. novelwriter/assets/icons/typicons_dark/nw_tb-shortcode.svg +0 -8
  128. novelwriter/assets/icons/typicons_dark/typ_at.svg +0 -4
  129. novelwriter/assets/icons/typicons_light/nw_tb-markdown.svg +0 -8
  130. novelwriter/assets/icons/typicons_light/nw_tb-shortcode.svg +0 -8
  131. novelwriter/assets/icons/typicons_light/typ_at.svg +0 -4
  132. {novelWriter-2.2b1.dist-info → novelWriter-2.2.1.dist-info}/LICENSE.md +0 -0
  133. {novelWriter-2.2b1.dist-info → novelWriter-2.2.1.dist-info}/entry_points.txt +0 -0
  134. {novelWriter-2.2b1.dist-info → novelWriter-2.2.1.dist-info}/top_level.txt +0 -0
@@ -3,11 +3,11 @@ novelWriter – GUI Doc Split Dialog
3
3
  ==================================
4
4
 
5
5
  File History:
6
- Created: 2020-02-01 [0.4.3]
7
- Rewritten: 2022-10-12 [2.0rc1]
6
+ Created: 2020-02-01 [0.4.3] GuiDocSplit
7
+ Rewritten: 2022-10-12 [2.0rc1] GuiDocSplit
8
8
 
9
9
  This file is a part of novelWriter
10
- Copyright 2018–2023, Veronica Berglyd Olsen
10
+ Copyright 2018–2024, Veronica Berglyd Olsen
11
11
 
12
12
  This program is free software: you can redistribute it and/or modify
13
13
  it under the terms of the GNU General Public License as published by
@@ -26,10 +26,11 @@ from __future__ import annotations
26
26
 
27
27
  import logging
28
28
 
29
- from PyQt5.QtCore import Qt
29
+ from PyQt5.QtGui import QCloseEvent
30
+ from PyQt5.QtCore import Qt, pyqtSlot
30
31
  from PyQt5.QtWidgets import (
31
- QDialog, QVBoxLayout, QComboBox, QListWidget, QAbstractItemView,
32
- QListWidgetItem, QDialogButtonBox, QLabel, QGridLayout
32
+ QAbstractItemView, QComboBox, QDialog, QDialogButtonBox, QGridLayout,
33
+ QLabel, QListWidget, QListWidgetItem, QVBoxLayout, QWidget
33
34
  )
34
35
 
35
36
  from novelwriter import CONFIG, SHARED
@@ -45,7 +46,7 @@ class GuiDocSplit(QDialog):
45
46
  LEVEL_ROLE = Qt.ItemDataRole.UserRole + 1
46
47
  LABEL_ROLE = Qt.ItemDataRole.UserRole + 2
47
48
 
48
- def __init__(self, parent, sHandle):
49
+ def __init__(self, parent: QWidget, sHandle: str) -> None:
49
50
  super().__init__(parent=parent)
50
51
 
51
52
  logger.debug("Create: GuiDocSplit")
@@ -138,11 +139,11 @@ class GuiDocSplit(QDialog):
138
139
 
139
140
  return
140
141
 
141
- def __del__(self): # pragma: no cover
142
+ def __del__(self) -> None: # pragma: no cover
142
143
  logger.debug("Delete: GuiDocSplit")
143
144
  return
144
145
 
145
- def getData(self):
146
+ def getData(self) -> tuple[dict, list]:
146
147
  """Return the user's choices. Also save the users options for
147
148
  the next time the dialog is used.
148
149
  """
@@ -167,6 +168,7 @@ class GuiDocSplit(QDialog):
167
168
  self._data["docHierarchy"] = docHierarchy
168
169
  self._data["moveToTrash"] = moveToTrash
169
170
 
171
+ logger.debug("Saving State: GuiDocSplit")
170
172
  pOptions = SHARED.project.options
171
173
  pOptions.setValue("GuiDocSplit", "spLevel", spLevel)
172
174
  pOptions.setValue("GuiDocSplit", "intoFolder", intoFolder)
@@ -175,12 +177,22 @@ class GuiDocSplit(QDialog):
175
177
  return self._data, self._text
176
178
 
177
179
  ##
178
- # Slots
180
+ # Events
179
181
  ##
180
182
 
181
- def _reloadList(self):
182
- """Reload the content of the list box.
183
- """
183
+ def closeEvent(self, event: QCloseEvent) -> None:
184
+ """Capture the close event and perform cleanup."""
185
+ event.accept()
186
+ self.deleteLater()
187
+ return
188
+
189
+ ##
190
+ # Private Slots
191
+ ##
192
+
193
+ @pyqtSlot()
194
+ def _reloadList(self) -> None:
195
+ """Reload the content of the list box."""
184
196
  sHandle = self._data.get("sHandle", None)
185
197
  self._loadContent(sHandle)
186
198
  return
@@ -189,9 +201,8 @@ class GuiDocSplit(QDialog):
189
201
  # Internal Functions
190
202
  ##
191
203
 
192
- def _loadContent(self, sHandle):
193
- """Load content from a given source item.
194
- """
204
+ def _loadContent(self, sHandle: str) -> None:
205
+ """Load content from a given source item."""
195
206
  self._data = {}
196
207
  self._data["sHandle"] = sHandle
197
208
 
@@ -3,10 +3,10 @@ novelWriter – Edit Label Dialog
3
3
  ===============================
4
4
 
5
5
  File History:
6
- Created: 2022-06-11 [2.0rc1]
6
+ Created: 2022-06-11 [2.0rc1] GuiEditLabel
7
7
 
8
8
  This file is a part of novelWriter
9
- Copyright 2018–2023, Veronica Berglyd Olsen
9
+ Copyright 2018–2024, Veronica Berglyd Olsen
10
10
 
11
11
  This program is free software: you can redistribute it and/or modify
12
12
  it under the terms of the GNU General Public License as published by
@@ -26,7 +26,8 @@ from __future__ import annotations
26
26
  import logging
27
27
 
28
28
  from PyQt5.QtWidgets import (
29
- QDialog, QVBoxLayout, QLineEdit, QLabel, QDialogButtonBox, QHBoxLayout
29
+ QDialog, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout,
30
+ QWidget
30
31
  )
31
32
 
32
33
  from novelwriter import CONFIG
@@ -36,9 +37,10 @@ logger = logging.getLogger(__name__)
36
37
 
37
38
  class GuiEditLabel(QDialog):
38
39
 
39
- def __init__(self, parent, text=""):
40
+ def __init__(self, parent: QWidget, text: str = "") -> None:
40
41
  super().__init__(parent=parent)
41
42
 
43
+ logger.debug("Create: GuiEditLabel")
42
44
  self.setObjectName("GuiEditLabel")
43
45
  self.setWindowTitle(self.tr("Item Label"))
44
46
 
@@ -70,16 +72,26 @@ class GuiEditLabel(QDialog):
70
72
 
71
73
  self.setLayout(self.outerBox)
72
74
 
75
+ logger.debug("Ready: GuiEditLabel")
76
+
77
+ return
78
+
79
+ def __del__(self) -> None: # pragma: no cover
80
+ logger.debug("Delete: GuiEditLabel")
73
81
  return
74
82
 
75
83
  @property
76
- def itemLabel(self):
84
+ def itemLabel(self) -> str:
77
85
  return self.labelValue.text()
78
86
 
79
87
  @classmethod
80
- def getLabel(cls, parent, text):
88
+ def getLabel(cls, parent: QWidget, text: str) -> tuple[str, bool]:
89
+ """Pop the dialog and return the result."""
81
90
  cls = GuiEditLabel(parent, text=text)
82
91
  cls.exec_()
83
- return cls.itemLabel, cls.result() == QDialog.Accepted
92
+ label = cls.itemLabel
93
+ accepted = cls.result() == QDialog.Accepted
94
+ cls.deleteLater()
95
+ return label, accepted
84
96
 
85
97
  # END Class GuiEditLabel