novelWriter 2.6.2__py3-none-any.whl → 2.7__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 (348) hide show
  1. novelwriter/__init__.py +98 -75
  2. novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
  3. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  4. novelwriter/assets/i18n/nw_en_US.qm +0 -0
  5. novelwriter/assets/i18n/nw_es_419.qm +0 -0
  6. novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
  7. novelwriter/assets/i18n/nw_it_IT.qm +0 -0
  8. novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
  9. novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
  10. novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
  11. novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
  12. novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
  13. novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
  14. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  15. novelwriter/assets/i18n/project_de_DE.json +3 -1
  16. novelwriter/assets/i18n/project_en_GB.json +2 -0
  17. novelwriter/assets/i18n/project_en_US.json +2 -0
  18. novelwriter/assets/i18n/project_it_IT.json +2 -0
  19. novelwriter/assets/i18n/project_ja_JP.json +2 -0
  20. novelwriter/assets/i18n/project_nb_NO.json +2 -0
  21. novelwriter/assets/i18n/project_nn_NO.json +5 -0
  22. novelwriter/assets/i18n/project_pl_PL.json +2 -0
  23. novelwriter/assets/i18n/project_pt_BR.json +2 -0
  24. novelwriter/assets/i18n/project_ru_RU.json +2 -0
  25. novelwriter/assets/i18n/project_zh_CN.json +2 -0
  26. novelwriter/assets/icons/font_awesome.icons +109 -0
  27. novelwriter/assets/icons/material_filled_bold.icons +109 -0
  28. novelwriter/assets/icons/material_filled_normal.icons +109 -0
  29. novelwriter/assets/icons/material_filled_thin.icons +109 -0
  30. novelwriter/assets/icons/material_rounded_bold.icons +109 -0
  31. novelwriter/assets/icons/material_rounded_normal.icons +109 -0
  32. novelwriter/assets/icons/material_rounded_thin.icons +109 -0
  33. novelwriter/assets/icons/remix_filled.icons +109 -0
  34. novelwriter/assets/icons/remix_outline.icons +109 -0
  35. novelwriter/assets/images/splash.png +0 -0
  36. novelwriter/assets/manual.pdf +0 -0
  37. novelwriter/assets/{manual_fr_FR.pdf → manual_fr.pdf} +0 -0
  38. novelwriter/assets/sample.zip +0 -0
  39. novelwriter/assets/syntax/cyberpunk_night.conf +1 -1
  40. novelwriter/assets/syntax/snazzy.conf +3 -3
  41. novelwriter/assets/text/credits_en.htm +12 -6
  42. novelwriter/assets/themes/cyberpunk_night.conf +23 -7
  43. novelwriter/assets/themes/default_dark.conf +20 -4
  44. novelwriter/assets/themes/default_light.conf +21 -5
  45. novelwriter/assets/themes/dracula.conf +20 -4
  46. novelwriter/assets/themes/snazzy.conf +48 -0
  47. novelwriter/assets/themes/solarized_dark.conf +24 -8
  48. novelwriter/assets/themes/solarized_light.conf +22 -6
  49. novelwriter/common.py +43 -27
  50. novelwriter/config.py +201 -139
  51. novelwriter/constants.py +92 -56
  52. novelwriter/core/buildsettings.py +26 -17
  53. novelwriter/core/coretools.py +52 -41
  54. novelwriter/core/docbuild.py +20 -13
  55. novelwriter/core/document.py +2 -2
  56. novelwriter/core/index.py +166 -432
  57. novelwriter/core/indexdata.py +406 -0
  58. novelwriter/core/item.py +50 -32
  59. novelwriter/core/itemmodel.py +43 -38
  60. novelwriter/core/novelmodel.py +225 -0
  61. novelwriter/core/options.py +1 -1
  62. novelwriter/core/project.py +24 -25
  63. novelwriter/core/projectdata.py +47 -29
  64. novelwriter/core/projectxml.py +18 -8
  65. novelwriter/core/sessions.py +32 -15
  66. novelwriter/core/spellcheck.py +4 -3
  67. novelwriter/core/status.py +12 -15
  68. novelwriter/core/storage.py +1 -1
  69. novelwriter/core/tree.py +55 -13
  70. novelwriter/dialogs/about.py +19 -22
  71. novelwriter/dialogs/docmerge.py +23 -24
  72. novelwriter/dialogs/docsplit.py +26 -26
  73. novelwriter/dialogs/editlabel.py +19 -20
  74. novelwriter/dialogs/preferences.py +143 -69
  75. novelwriter/dialogs/projectsettings.py +51 -54
  76. novelwriter/dialogs/quotes.py +14 -19
  77. novelwriter/dialogs/wordlist.py +25 -30
  78. novelwriter/enum.py +8 -0
  79. novelwriter/error.py +16 -16
  80. novelwriter/extensions/configlayout.py +24 -20
  81. novelwriter/extensions/eventfilters.py +9 -5
  82. novelwriter/extensions/modified.py +34 -15
  83. novelwriter/extensions/novelselector.py +18 -5
  84. novelwriter/extensions/pagedsidebar.py +39 -49
  85. novelwriter/extensions/progressbars.py +10 -8
  86. novelwriter/extensions/statusled.py +6 -13
  87. novelwriter/extensions/switch.py +31 -41
  88. novelwriter/extensions/switchbox.py +8 -3
  89. novelwriter/extensions/versioninfo.py +4 -4
  90. novelwriter/formats/shared.py +1 -1
  91. novelwriter/formats/todocx.py +14 -10
  92. novelwriter/formats/tohtml.py +7 -5
  93. novelwriter/formats/tokenizer.py +37 -33
  94. novelwriter/formats/tomarkdown.py +6 -2
  95. novelwriter/formats/toodt.py +27 -22
  96. novelwriter/formats/toqdoc.py +19 -14
  97. novelwriter/formats/toraw.py +6 -2
  98. novelwriter/gui/doceditor.py +314 -305
  99. novelwriter/gui/dochighlight.py +46 -45
  100. novelwriter/gui/docviewer.py +102 -104
  101. novelwriter/gui/docviewerpanel.py +47 -51
  102. novelwriter/gui/editordocument.py +8 -5
  103. novelwriter/gui/itemdetails.py +15 -18
  104. novelwriter/gui/mainmenu.py +147 -146
  105. novelwriter/gui/noveltree.py +246 -406
  106. novelwriter/gui/outline.py +145 -76
  107. novelwriter/gui/projtree.py +139 -132
  108. novelwriter/gui/search.py +34 -31
  109. novelwriter/gui/sidebar.py +13 -18
  110. novelwriter/gui/statusbar.py +27 -21
  111. novelwriter/gui/theme.py +554 -436
  112. novelwriter/guimain.py +56 -38
  113. novelwriter/shared.py +32 -23
  114. novelwriter/splash.py +74 -0
  115. novelwriter/text/comments.py +70 -0
  116. novelwriter/text/patterns.py +4 -4
  117. novelwriter/tools/dictionaries.py +20 -29
  118. novelwriter/tools/lipsum.py +18 -18
  119. novelwriter/tools/manusbuild.py +39 -42
  120. novelwriter/tools/manuscript.py +114 -127
  121. novelwriter/tools/manussettings.py +129 -102
  122. novelwriter/tools/noveldetails.py +60 -72
  123. novelwriter/tools/welcome.py +57 -75
  124. novelwriter/tools/writingstats.py +112 -102
  125. novelwriter/types.py +5 -7
  126. {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/METADATA +6 -6
  127. novelwriter-2.7.dist-info/RECORD +162 -0
  128. {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/WHEEL +1 -1
  129. novelWriter-2.6.2.dist-info/RECORD +0 -363
  130. novelwriter/assets/icons/typicons_dark/README.md +0 -29
  131. novelwriter/assets/icons/typicons_dark/icons.conf +0 -134
  132. novelwriter/assets/icons/typicons_dark/mixed_copy.svg +0 -4
  133. novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -12
  134. novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -6
  135. novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -12
  136. novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -12
  137. novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -12
  138. novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -12
  139. novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -4
  140. novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -5
  141. novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -5
  142. novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -5
  143. novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -5
  144. novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +0 -6
  145. novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +0 -6
  146. novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +0 -6
  147. novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +0 -6
  148. novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -6
  149. novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +0 -6
  150. novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +0 -6
  151. novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -4
  152. novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -4
  153. novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -4
  154. novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -4
  155. novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -4
  156. novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -4
  157. novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -4
  158. novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -4
  159. novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -4
  160. novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -4
  161. novelwriter/assets/icons/typicons_dark/nw_font.svg +0 -4
  162. novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -4
  163. novelwriter/assets/icons/typicons_dark/nw_quote.svg +0 -4
  164. novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -4
  165. novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -4
  166. novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -4
  167. novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -4
  168. novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -4
  169. novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -6
  170. novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -4
  171. novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -6
  172. novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -7
  173. novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -4
  174. novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -6
  175. novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -7
  176. novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -7
  177. novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -7
  178. novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +0 -5
  179. novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -4
  180. novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -4
  181. novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -4
  182. novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -4
  183. novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -4
  184. novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -4
  185. novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -6
  186. novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -4
  187. novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -4
  188. novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -4
  189. novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -4
  190. novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -4
  191. novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -4
  192. novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -4
  193. novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -4
  194. novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -4
  195. novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -4
  196. novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -4
  197. novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -4
  198. novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -4
  199. novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -4
  200. novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -8
  201. novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -4
  202. novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -4
  203. novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -4
  204. novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -4
  205. novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -4
  206. novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -4
  207. novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -5
  208. novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -4
  209. novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -4
  210. novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -4
  211. novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -4
  212. novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -4
  213. novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -4
  214. novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -4
  215. novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -4
  216. novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -5
  217. novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -4
  218. novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -4
  219. novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -4
  220. novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -4
  221. novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -4
  222. novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -4
  223. novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -4
  224. novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -4
  225. novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -4
  226. novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -4
  227. novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -4
  228. novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -4
  229. novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -4
  230. novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -4
  231. novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -9
  232. novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -4
  233. novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -5
  234. novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -4
  235. novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -4
  236. novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -5
  237. novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -4
  238. novelwriter/assets/icons/typicons_light/README.md +0 -29
  239. novelwriter/assets/icons/typicons_light/icons.conf +0 -134
  240. novelwriter/assets/icons/typicons_light/mixed_copy.svg +0 -4
  241. novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -12
  242. novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -6
  243. novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -12
  244. novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -12
  245. novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -12
  246. novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -12
  247. novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -4
  248. novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -5
  249. novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -5
  250. novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -5
  251. novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -5
  252. novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +0 -6
  253. novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +0 -6
  254. novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +0 -6
  255. novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +0 -6
  256. novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -6
  257. novelwriter/assets/icons/typicons_light/mixed_size-height.svg +0 -6
  258. novelwriter/assets/icons/typicons_light/mixed_size-width.svg +0 -6
  259. novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -4
  260. novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -4
  261. novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -4
  262. novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -4
  263. novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -4
  264. novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -4
  265. novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -4
  266. novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -4
  267. novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -4
  268. novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -4
  269. novelwriter/assets/icons/typicons_light/nw_font.svg +0 -4
  270. novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -4
  271. novelwriter/assets/icons/typicons_light/nw_quote.svg +0 -4
  272. novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -4
  273. novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -4
  274. novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -4
  275. novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -4
  276. novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -4
  277. novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -6
  278. novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -4
  279. novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -6
  280. novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -7
  281. novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -4
  282. novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -6
  283. novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -7
  284. novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -7
  285. novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -7
  286. novelwriter/assets/icons/typicons_light/nw_toolbar.svg +0 -5
  287. novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -4
  288. novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -4
  289. novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -4
  290. novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -4
  291. novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -4
  292. novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -4
  293. novelwriter/assets/icons/typicons_light/typ_book.svg +0 -6
  294. novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -4
  295. novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -4
  296. novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -4
  297. novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -4
  298. novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -4
  299. novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -4
  300. novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -4
  301. novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -4
  302. novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -4
  303. novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -4
  304. novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -4
  305. novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -4
  306. novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -4
  307. novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -4
  308. novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -5
  309. novelwriter/assets/icons/typicons_light/typ_document.svg +0 -4
  310. novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -4
  311. novelwriter/assets/icons/typicons_light/typ_export.svg +0 -4
  312. novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -4
  313. novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -4
  314. novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -4
  315. novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -5
  316. novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -4
  317. novelwriter/assets/icons/typicons_light/typ_key.svg +0 -4
  318. novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -4
  319. novelwriter/assets/icons/typicons_light/typ_location.svg +0 -4
  320. novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -4
  321. novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -4
  322. novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -4
  323. novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -4
  324. novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -5
  325. novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -4
  326. novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -4
  327. novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -4
  328. novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -4
  329. novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -4
  330. novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -4
  331. novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -4
  332. novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -4
  333. novelwriter/assets/icons/typicons_light/typ_search.svg +0 -4
  334. novelwriter/assets/icons/typicons_light/typ_star.svg +0 -4
  335. novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -4
  336. novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -4
  337. novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -4
  338. novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -4
  339. novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -9
  340. novelwriter/assets/icons/typicons_light/typ_times.svg +0 -4
  341. novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -5
  342. novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -4
  343. novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -4
  344. novelwriter/assets/icons/typicons_light/typ_user.svg +0 -5
  345. novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -4
  346. {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/entry_points.txt +0 -0
  347. {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info/licenses}/LICENSE.md +0 -0
  348. {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/top_level.txt +0 -0
@@ -28,18 +28,18 @@ import logging
28
28
  from pathlib import Path
29
29
  from zipfile import ZipFile
30
30
 
31
- from PyQt5.QtCore import pyqtSlot
32
- from PyQt5.QtGui import QCloseEvent, QTextCursor
33
- from PyQt5.QtWidgets import (
31
+ from PyQt6.QtCore import pyqtSlot
32
+ from PyQt6.QtGui import QCloseEvent, QTextCursor
33
+ from PyQt6.QtWidgets import (
34
34
  QApplication, QDialogButtonBox, QFileDialog, QFrame, QHBoxLayout, QLabel,
35
35
  QLineEdit, QPlainTextEdit, QPushButton, QVBoxLayout, QWidget
36
36
  )
37
37
 
38
38
  from novelwriter import CONFIG, SHARED
39
- from novelwriter.common import cssCol, formatFileFilter, formatInt, getFileSize, openExternalPath
39
+ from novelwriter.common import formatFileFilter, formatInt, getFileSize, openExternalPath
40
40
  from novelwriter.error import formatException
41
41
  from novelwriter.extensions.modified import NIconToolButton, NNonBlockingDialog
42
- from novelwriter.types import QtDialogClose
42
+ from novelwriter.types import QtDialogClose, QtHexArgb
43
43
 
44
44
  logger = logging.getLogger(__name__)
45
45
 
@@ -57,12 +57,9 @@ class GuiDictionaries(NNonBlockingDialog):
57
57
  self._currDicts = set()
58
58
 
59
59
  iSz = SHARED.theme.baseIconSize
60
- iPx = CONFIG.pxInt(4)
61
- mPx = CONFIG.pxInt(8)
62
- sPx = CONFIG.pxInt(16)
63
60
 
64
- self.setMinimumWidth(CONFIG.pxInt(500))
65
- self.setMinimumHeight(CONFIG.pxInt(300))
61
+ self.setMinimumWidth(500)
62
+ self.setMinimumHeight(300)
66
63
 
67
64
  # Hunspell Dictionaries
68
65
  loUrl = "https://extensions.libreoffice.org"
@@ -78,13 +75,13 @@ class GuiDictionaries(NNonBlockingDialog):
78
75
  self.huBrowse = NIconToolButton(self, iSz, "browse")
79
76
  self.huBrowse.clicked.connect(self._doBrowseHunspell)
80
77
  self.huImport = QPushButton(self.tr("Add Dictionary"), self)
81
- self.huImport.setIcon(SHARED.theme.getIcon("add"))
78
+ self.huImport.setIcon(SHARED.theme.getIcon("add", "green"))
82
79
  self.huImport.clicked.connect(self._doImportHunspell)
83
80
 
84
81
  self.huPathBox = QHBoxLayout()
85
82
  self.huPathBox.addWidget(self.huInput)
86
83
  self.huPathBox.addWidget(self.huBrowse)
87
- self.huPathBox.setSpacing(iPx)
84
+ self.huPathBox.setSpacing(4)
88
85
  self.huAddBox = QHBoxLayout()
89
86
  self.huAddBox.addStretch(1)
90
87
  self.huAddBox.addWidget(self.huImport)
@@ -99,12 +96,11 @@ class GuiDictionaries(NNonBlockingDialog):
99
96
  self.inBox = QHBoxLayout()
100
97
  self.inBox.addWidget(self.inPath)
101
98
  self.inBox.addWidget(self.inBrowse)
102
- self.inBox.setSpacing(iPx)
99
+ self.inBox.setSpacing(4)
103
100
 
104
101
  # Info Box
105
102
  self.infoBox = QPlainTextEdit(self)
106
103
  self.infoBox.setReadOnly(True)
107
- self.infoBox.setFixedHeight(4*SHARED.theme.fontPixelSize)
108
104
  self.infoBox.setFrameStyle(QFrame.Shape.NoFrame)
109
105
 
110
106
  # Buttons
@@ -112,21 +108,16 @@ class GuiDictionaries(NNonBlockingDialog):
112
108
  self.buttonBox.rejected.connect(self.reject)
113
109
 
114
110
  # Assemble
115
- self.innerBox = QVBoxLayout()
116
- self.innerBox.addWidget(self.huInfo)
117
- self.innerBox.addLayout(self.huPathBox)
118
- self.innerBox.addLayout(self.huAddBox)
119
- self.innerBox.addSpacing(mPx)
120
- self.innerBox.addWidget(self.inInfo)
121
- self.innerBox.addLayout(self.inBox)
122
- self.innerBox.addWidget(self.infoBox)
123
- self.innerBox.setSpacing(iPx)
124
-
125
111
  self.outerBox = QVBoxLayout()
126
- self.outerBox.addLayout(self.innerBox, 0)
127
- self.outerBox.addStretch(1)
112
+ self.outerBox.addWidget(self.huInfo, 0)
113
+ self.outerBox.addLayout(self.huPathBox, 0)
114
+ self.outerBox.addLayout(self.huAddBox, 0)
115
+ self.outerBox.addSpacing(8)
116
+ self.outerBox.addWidget(self.inInfo, 0)
117
+ self.outerBox.addLayout(self.inBox, 0)
118
+ self.outerBox.addWidget(self.infoBox, 1)
119
+ self.outerBox.addSpacing(8)
128
120
  self.outerBox.addWidget(self.buttonBox, 0)
129
- self.outerBox.setSpacing(sPx)
130
121
 
131
122
  self.setLayout(self.outerBox)
132
123
 
@@ -251,8 +242,8 @@ class GuiDictionaries(NNonBlockingDialog):
251
242
  cursor.movePosition(QTextCursor.MoveOperation.End)
252
243
  if cursor.position() > 0:
253
244
  cursor.insertText("\n")
254
- textCol = cssCol(SHARED.theme.errorText if err else self.palette().text().color())
255
- cursor.insertHtml(f"<font style='color: {textCol}'>{text}</font>")
245
+ textCol = SHARED.theme.errorText if err else self.palette().text().color()
246
+ cursor.insertHtml(f"<font style='color: {textCol.name(QtHexArgb)}'>{text}</font>")
256
247
  cursor.movePosition(QTextCursor.MoveOperation.End)
257
248
  cursor.deleteChar()
258
249
  self.infoBox.setTextCursor(cursor)
@@ -26,8 +26,8 @@ from __future__ import annotations
26
26
  import logging
27
27
  import random
28
28
 
29
- from PyQt5.QtCore import pyqtSlot
30
- from PyQt5.QtWidgets import (
29
+ from PyQt6.QtCore import pyqtSlot
30
+ from PyQt6.QtWidgets import (
31
31
  QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel, QSpinBox, QVBoxLayout,
32
32
  QWidget
33
33
  )
@@ -52,18 +52,15 @@ class GuiLipsum(NDialog):
52
52
 
53
53
  self._lipsumText = ""
54
54
 
55
- vSp = CONFIG.pxInt(4)
56
- nPx = CONFIG.pxInt(64)
57
-
58
55
  self.innerBox = QHBoxLayout()
59
- self.innerBox.setSpacing(CONFIG.pxInt(16))
56
+ self.innerBox.setSpacing(16)
60
57
 
61
58
  # Icon
62
59
  self.docIcon = QLabel(self)
63
- self.docIcon.setPixmap(SHARED.theme.getPixmap("proj_document", (nPx, nPx)))
60
+ self.docIcon.setPixmap(SHARED.theme.getPixmap("text", (64, 64), "blue"))
64
61
 
65
62
  self.leftBox = QVBoxLayout()
66
- self.leftBox.setSpacing(vSp)
63
+ self.leftBox.setSpacing(4)
67
64
  self.leftBox.addWidget(self.docIcon)
68
65
  self.leftBox.addStretch(1)
69
66
  self.innerBox.addLayout(self.leftBox)
@@ -78,8 +75,9 @@ class GuiLipsum(NDialog):
78
75
  self.paraCount.setMaximum(100)
79
76
  self.paraCount.setValue(5)
80
77
 
81
- self.randLabel = QLabel(self.tr("Randomise order"), self)
82
78
  self.randSwitch = NSwitch(self)
79
+ self.randLabel = QLabel(self.tr("Randomise order"), self)
80
+ self.randLabel.setBuddy(self.randSwitch)
83
81
 
84
82
  self.formBox = QGridLayout()
85
83
  self.formBox.addWidget(self.headLabel, 0, 0, 1, 2, QtAlignLeft)
@@ -87,7 +85,7 @@ class GuiLipsum(NDialog):
87
85
  self.formBox.addWidget(self.paraCount, 1, 1, 1, 1, QtAlignRight)
88
86
  self.formBox.addWidget(self.randLabel, 2, 0, 1, 1, QtAlignLeft)
89
87
  self.formBox.addWidget(self.randSwitch, 2, 1, 1, 1, QtAlignRight)
90
- self.formBox.setVerticalSpacing(vSp)
88
+ self.formBox.setVerticalSpacing(4)
91
89
  self.formBox.setRowStretch(3, 1)
92
90
  self.innerBox.addLayout(self.formBox)
93
91
 
@@ -96,17 +94,19 @@ class GuiLipsum(NDialog):
96
94
  self.buttonBox.rejected.connect(self.reject)
97
95
 
98
96
  self.btnClose = self.buttonBox.addButton(QtDialogClose)
99
- self.btnClose.setAutoDefault(False)
97
+ if self.btnClose:
98
+ self.btnClose.setAutoDefault(False)
100
99
 
101
100
  self.btnInsert = self.buttonBox.addButton(self.tr("Insert"), QtRoleAction)
102
- self.btnInsert.clicked.connect(self._doInsert)
103
- self.btnInsert.setAutoDefault(False)
101
+ if self.btnInsert:
102
+ self.btnInsert.clicked.connect(self._doInsert)
103
+ self.btnInsert.setAutoDefault(False)
104
104
 
105
105
  # Assemble
106
106
  self.outerBox = QVBoxLayout()
107
107
  self.outerBox.addLayout(self.innerBox)
108
108
  self.outerBox.addWidget(self.buttonBox)
109
- self.outerBox.setSpacing(CONFIG.pxInt(16))
109
+ self.outerBox.setSpacing(16)
110
110
  self.setLayout(self.outerBox)
111
111
 
112
112
  logger.debug("Ready: GuiLipsum")
@@ -125,10 +125,10 @@ class GuiLipsum(NDialog):
125
125
  @classmethod
126
126
  def getLipsum(cls, parent: QWidget) -> str:
127
127
  """Pop the dialog and return the lipsum text."""
128
- cls = GuiLipsum(parent)
129
- cls.exec()
130
- text = cls.lipsumText
131
- cls.softDelete()
128
+ dialog = cls(parent)
129
+ dialog.exec()
130
+ text = dialog.lipsumText
131
+ dialog.softDelete()
132
132
  return text
133
133
 
134
134
  ##
@@ -26,19 +26,18 @@ from __future__ import annotations
26
26
  import logging
27
27
 
28
28
  from pathlib import Path
29
+ from typing import TYPE_CHECKING
29
30
 
30
- from PyQt5.QtCore import QTimer, pyqtSlot
31
- from PyQt5.QtGui import QCloseEvent
32
- from PyQt5.QtWidgets import (
31
+ from PyQt6.QtCore import QTimer, pyqtSlot
32
+ from PyQt6.QtWidgets import (
33
33
  QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog,
34
34
  QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem,
35
35
  QPushButton, QSplitter, QVBoxLayout, QWidget
36
36
  )
37
37
 
38
- from novelwriter import CONFIG, SHARED
38
+ from novelwriter import SHARED
39
39
  from novelwriter.common import makeFileNameSafe, openExternalPath
40
40
  from novelwriter.constants import nwLabels
41
- from novelwriter.core.buildsettings import BuildSettings
42
41
  from novelwriter.core.docbuild import NWBuildDocument
43
42
  from novelwriter.core.item import NWItem
44
43
  from novelwriter.enum import nwBuildFmt
@@ -46,6 +45,11 @@ from novelwriter.extensions.modified import NDialog, NIconToolButton
46
45
  from novelwriter.extensions.progressbars import NProgressSimple
47
46
  from novelwriter.types import QtAlignCenter, QtDialogClose, QtRoleAction, QtRoleReject, QtUserRole
48
47
 
48
+ if TYPE_CHECKING:
49
+ from PyQt6.QtGui import QCloseEvent
50
+
51
+ from novelwriter.core.buildsettings import BuildSettings
52
+
49
53
  logger = logging.getLogger(__name__)
50
54
 
51
55
 
@@ -68,21 +72,16 @@ class GuiManuscriptBuild(NDialog):
68
72
  self._build = build
69
73
 
70
74
  self.setWindowTitle(self.tr("Build Manuscript"))
71
- self.setMinimumWidth(CONFIG.pxInt(500))
72
- self.setMinimumHeight(CONFIG.pxInt(300))
75
+ self.setMinimumWidth(500)
76
+ self.setMinimumHeight(300)
73
77
 
74
78
  iSz = SHARED.theme.baseIconSize
75
79
  bSz = SHARED.theme.buttonIconSize
76
- sp4 = CONFIG.pxInt(4)
77
- sp8 = CONFIG.pxInt(8)
78
- sp16 = CONFIG.pxInt(16)
79
- wWin = CONFIG.pxInt(620)
80
- hWin = CONFIG.pxInt(360)
81
80
 
82
81
  pOptions = SHARED.project.options
83
82
  self.resize(
84
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "winWidth", wWin)),
85
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "winHeight", hWin))
83
+ pOptions.getInt("GuiManuscriptBuild", "winWidth", 620),
84
+ pOptions.getInt("GuiManuscriptBuild", "winHeight", 360),
86
85
  )
87
86
 
88
87
  # Output Format
@@ -149,25 +148,25 @@ class GuiManuscriptBuild(NDialog):
149
148
  self.pathBox = QHBoxLayout()
150
149
  self.pathBox.addWidget(self.buildPath)
151
150
  self.pathBox.addWidget(self.btnBrowse)
152
- self.pathBox.setSpacing(sp8)
151
+ self.pathBox.setSpacing(8)
153
152
 
154
153
  # Build Name
155
154
  self.lblName = QLabel(self.tr("File Name"), self)
156
155
  self.buildName = QLineEdit(self)
157
- self.btnReset = NIconToolButton(self, iSz, "revert")
156
+ self.btnReset = NIconToolButton(self, iSz, "revert", "green")
158
157
  self.btnReset.setToolTip(self.tr("Reset file name to default"))
159
158
 
160
159
  self.nameBox = QHBoxLayout()
161
160
  self.nameBox.addWidget(self.buildName)
162
161
  self.nameBox.addWidget(self.btnReset)
163
- self.nameBox.setSpacing(sp8)
162
+ self.nameBox.setSpacing(8)
164
163
 
165
164
  # Build Progress
166
165
  self.buildProgress = NProgressSimple(self)
167
166
  self.buildProgress.setMinimum(0)
168
167
  self.buildProgress.setValue(0)
169
168
  self.buildProgress.setTextVisible(False)
170
- self.buildProgress.setFixedHeight(sp8)
169
+ self.buildProgress.setFixedHeight(8)
171
170
 
172
171
  # Build Box
173
172
  self.buildBox = QGridLayout()
@@ -175,24 +174,29 @@ class GuiManuscriptBuild(NDialog):
175
174
  self.buildBox.addLayout(self.pathBox, 0, 1)
176
175
  self.buildBox.addWidget(self.lblName, 1, 0)
177
176
  self.buildBox.addLayout(self.nameBox, 1, 1)
178
- self.buildBox.setHorizontalSpacing(sp8)
179
- self.buildBox.setVerticalSpacing(sp4)
177
+ self.buildBox.setHorizontalSpacing(8)
178
+ self.buildBox.setVerticalSpacing(4)
180
179
 
181
180
  # Dialog Buttons
182
181
  self.buttonBox = QDialogButtonBox(self)
183
182
 
184
- self.btnOpen = QPushButton(SHARED.theme.getIcon("browse"), self.tr("Open Folder"), self)
183
+ self.btnOpen = QPushButton(
184
+ SHARED.theme.getIcon("browse", "yellow"), self.tr("Open Folder"), self
185
+ )
185
186
  self.btnOpen.setIconSize(bSz)
186
187
  self.btnOpen.setAutoDefault(False)
187
188
  self.buttonBox.addButton(self.btnOpen, QtRoleAction)
188
189
 
189
- self.btnBuild = QPushButton(SHARED.theme.getIcon("export"), self.tr("&Build"), self)
190
+ self.btnBuild = QPushButton(
191
+ SHARED.theme.getIcon("sb_build", "blue"), self.tr("&Build"), self
192
+ )
190
193
  self.btnBuild.setIconSize(bSz)
191
194
  self.btnBuild.setAutoDefault(True)
192
195
  self.buttonBox.addButton(self.btnBuild, QtRoleAction)
193
196
 
194
197
  self.btnClose = self.buttonBox.addButton(QtDialogClose)
195
- self.btnClose.setAutoDefault(False)
198
+ if self.btnClose:
199
+ self.btnClose.setAutoDefault(False)
196
200
 
197
201
  # Assemble GUI
198
202
  # ============
@@ -200,25 +204,25 @@ class GuiManuscriptBuild(NDialog):
200
204
  self.mainSplit = QSplitter(self)
201
205
  self.mainSplit.addWidget(self.formatWidget)
202
206
  self.mainSplit.addWidget(self.contentWidget)
203
- self.mainSplit.setHandleWidth(sp16)
207
+ self.mainSplit.setHandleWidth(16)
204
208
  self.mainSplit.setCollapsible(0, False)
205
209
  self.mainSplit.setCollapsible(1, False)
206
210
  self.mainSplit.setStretchFactor(0, 0)
207
211
  self.mainSplit.setStretchFactor(1, 1)
208
212
  self.mainSplit.setSizes([
209
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "fmtWidth", wWin//2)),
210
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "sumWidth", wWin//2)),
213
+ pOptions.getInt("GuiManuscriptBuild", "fmtWidth", 360),
214
+ pOptions.getInt("GuiManuscriptBuild", "sumWidth", 360),
211
215
  ])
212
216
 
213
217
  self.outerBox = QVBoxLayout()
214
218
  self.outerBox.addWidget(self.lblMain, 0, QtAlignCenter)
215
- self.outerBox.addSpacing(sp16)
219
+ self.outerBox.addSpacing(16)
216
220
  self.outerBox.addWidget(self.mainSplit, 1)
217
- self.outerBox.addSpacing(sp4)
221
+ self.outerBox.addSpacing(4)
218
222
  self.outerBox.addWidget(self.buildProgress, 0)
219
- self.outerBox.addSpacing(sp4)
223
+ self.outerBox.addSpacing(4)
220
224
  self.outerBox.addLayout(self.buildBox, 0)
221
- self.outerBox.addSpacing(sp16)
225
+ self.outerBox.addSpacing(16)
222
226
  self.outerBox.addWidget(self.buttonBox, 0)
223
227
  self.outerBox.setSpacing(0)
224
228
 
@@ -359,21 +363,14 @@ class GuiManuscriptBuild(NDialog):
359
363
 
360
364
  def _saveSettings(self) -> None:
361
365
  """Save the user GUI settings."""
362
- winWidth = CONFIG.rpxInt(self.width())
363
- winHeight = CONFIG.rpxInt(self.height())
364
-
365
- mainSplit = self.mainSplit.sizes()
366
- fmtWidth = CONFIG.rpxInt(mainSplit[0])
367
- sumWidth = CONFIG.rpxInt(mainSplit[1])
368
-
369
366
  logger.debug("Saving State: GuiManuscriptBuild")
367
+ mainSplit = self.mainSplit.sizes()
370
368
  pOptions = SHARED.project.options
371
- pOptions.setValue("GuiManuscriptBuild", "winWidth", winWidth)
372
- pOptions.setValue("GuiManuscriptBuild", "winHeight", winHeight)
373
- pOptions.setValue("GuiManuscriptBuild", "fmtWidth", fmtWidth)
374
- pOptions.setValue("GuiManuscriptBuild", "sumWidth", sumWidth)
369
+ pOptions.setValue("GuiManuscriptBuild", "winWidth", self.width())
370
+ pOptions.setValue("GuiManuscriptBuild", "winHeight", self.height())
371
+ pOptions.setValue("GuiManuscriptBuild", "fmtWidth", mainSplit[0])
372
+ pOptions.setValue("GuiManuscriptBuild", "sumWidth", mainSplit[1])
375
373
  pOptions.saveSettings()
376
-
377
374
  return
378
375
 
379
376
  def _populateContentList(self) -> None: