novelWriter 2.6.3__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 +67 -36
  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 +11 -14
  104. novelwriter/gui/mainmenu.py +146 -145
  105. novelwriter/gui/noveltree.py +246 -406
  106. novelwriter/gui/outline.py +141 -72
  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 +102 -115
  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.3.dist-info → novelwriter-2.7.dist-info}/METADATA +6 -6
  127. novelwriter-2.7.dist-info/RECORD +162 -0
  128. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/WHEEL +1 -1
  129. novelWriter-2.6.3.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.3.dist-info → novelwriter-2.7.dist-info}/entry_points.txt +0 -0
  347. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info/licenses}/LICENSE.md +0 -0
  348. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/top_level.txt +0 -0
@@ -26,14 +26,14 @@ from __future__ import annotations
26
26
 
27
27
  import logging
28
28
 
29
- from PyQt5.QtCore import Qt, pyqtSlot
30
- from PyQt5.QtWidgets import (
29
+ from PyQt6.QtCore import Qt, pyqtSlot
30
+ from PyQt6.QtWidgets import (
31
31
  QAbstractItemView, QDialogButtonBox, QGridLayout, QLabel, QListWidget,
32
32
  QListWidgetItem, QVBoxLayout, QWidget
33
33
  )
34
34
 
35
- from novelwriter import CONFIG, SHARED
36
- from novelwriter.extensions.configlayout import NColourLabel
35
+ from novelwriter import SHARED
36
+ from novelwriter.extensions.configlayout import NColorLabel
37
37
  from novelwriter.extensions.modified import NDialog
38
38
  from novelwriter.extensions.switch import NSwitch
39
39
  from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtDialogReset, QtUserRole
@@ -56,33 +56,31 @@ class GuiDocMerge(NDialog):
56
56
 
57
57
  self.headLabel = QLabel(self.tr("Documents to Merge"), self)
58
58
  self.headLabel.setFont(SHARED.theme.guiFontB)
59
- self.helpLabel = NColourLabel(
59
+ self.helpLabel = NColorLabel(
60
60
  self.tr("Drag and drop items to change the order, or uncheck to exclude."),
61
61
  self, color=SHARED.theme.helpText, wrap=True
62
62
  )
63
63
 
64
64
  iPx = SHARED.theme.baseIconHeight
65
65
  iSz = SHARED.theme.baseIconSize
66
- hSp = CONFIG.pxInt(12)
67
- vSp = CONFIG.pxInt(8)
68
- bSp = CONFIG.pxInt(12)
69
66
 
70
67
  self.listBox = QListWidget(self)
71
68
  self.listBox.setIconSize(iSz)
72
- self.listBox.setMinimumWidth(CONFIG.pxInt(400))
73
- self.listBox.setMinimumHeight(CONFIG.pxInt(180))
69
+ self.listBox.setMinimumWidth(400)
70
+ self.listBox.setMinimumHeight(180)
74
71
  self.listBox.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
75
72
  self.listBox.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
76
73
  self.listBox.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove)
77
74
 
78
75
  # Merge Options
79
- self.trashLabel = QLabel(self.tr("Move merged items to Trash"), self)
80
76
  self.trashSwitch = NSwitch(self, height=iPx)
77
+ self.trashLabel = QLabel(self.tr("Move merged items to Trash"), self)
78
+ self.trashLabel.setBuddy(self.trashSwitch)
81
79
 
82
80
  self.optBox = QGridLayout()
83
81
  self.optBox.addWidget(self.trashLabel, 0, 0)
84
82
  self.optBox.addWidget(self.trashSwitch, 0, 1)
85
- self.optBox.setHorizontalSpacing(hSp)
83
+ self.optBox.setHorizontalSpacing(12)
86
84
  self.optBox.setColumnStretch(2, 1)
87
85
 
88
86
  # Buttons
@@ -91,18 +89,19 @@ class GuiDocMerge(NDialog):
91
89
  self.buttonBox.rejected.connect(self.reject)
92
90
 
93
91
  self.resetButton = self.buttonBox.addButton(QtDialogReset)
94
- self.resetButton.clicked.connect(self._resetList)
92
+ if self.resetButton:
93
+ self.resetButton.clicked.connect(self._resetList)
95
94
 
96
95
  # Assemble
97
96
  self.outerBox = QVBoxLayout()
98
97
  self.outerBox.setSpacing(0)
99
98
  self.outerBox.addWidget(self.headLabel)
100
99
  self.outerBox.addWidget(self.helpLabel)
101
- self.outerBox.addSpacing(vSp)
100
+ self.outerBox.addSpacing(8)
102
101
  self.outerBox.addWidget(self.listBox)
103
- self.outerBox.addSpacing(vSp)
102
+ self.outerBox.addSpacing(8)
104
103
  self.outerBox.addLayout(self.optBox)
105
- self.outerBox.addSpacing(bSp)
104
+ self.outerBox.addSpacing(12)
106
105
  self.outerBox.addWidget(self.buttonBox)
107
106
  self.setLayout(self.outerBox)
108
107
 
@@ -133,11 +132,11 @@ class GuiDocMerge(NDialog):
133
132
  @classmethod
134
133
  def getData(cls, parent: QWidget, handle: str, items: list[str]) -> tuple[dict, bool]:
135
134
  """Pop the dialog and return the result."""
136
- cls = GuiDocMerge(parent, handle, items)
137
- cls.exec()
138
- data = cls.data()
139
- accepted = cls.result() == QtAccepted
140
- cls.softDelete()
135
+ dialog = cls(parent, handle, items)
136
+ dialog.exec()
137
+ data = dialog.data()
138
+ accepted = dialog.result() == QtAccepted
139
+ dialog.softDelete()
141
140
  return data, accepted
142
141
 
143
142
  ##
@@ -148,9 +147,9 @@ class GuiDocMerge(NDialog):
148
147
  def _resetList(self) -> None:
149
148
  """Reset the content of the list box to its original state."""
150
149
  logger.debug("Resetting list box content")
151
- sHandle = self._data.get("sHandle", None)
152
- itemList = self._data.get("origItems", [])
153
- self._loadContent(sHandle, itemList)
150
+ if sHandle := self._data.get("sHandle"):
151
+ itemList = self._data.get("origItems", [])
152
+ self._loadContent(sHandle, itemList)
154
153
  return
155
154
 
156
155
  ##
@@ -26,14 +26,14 @@ from __future__ import annotations
26
26
 
27
27
  import logging
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
  QAbstractItemView, QComboBox, QDialogButtonBox, QGridLayout, QLabel,
32
32
  QListWidget, QListWidgetItem, QVBoxLayout, QWidget
33
33
  )
34
34
 
35
- from novelwriter import CONFIG, SHARED
36
- from novelwriter.extensions.configlayout import NColourLabel
35
+ from novelwriter import SHARED
36
+ from novelwriter.extensions.configlayout import NColorLabel
37
37
  from novelwriter.extensions.modified import NDialog
38
38
  from novelwriter.extensions.switch import NSwitch
39
39
  from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk, QtUserRole
@@ -60,16 +60,13 @@ class GuiDocSplit(NDialog):
60
60
 
61
61
  self.headLabel = QLabel(self.tr("Document Headings"), self)
62
62
  self.headLabel.setFont(SHARED.theme.guiFontB)
63
- self.helpLabel = NColourLabel(
63
+ self.helpLabel = NColorLabel(
64
64
  self.tr("Select the maximum level to split into files."),
65
65
  self, color=SHARED.theme.helpText, wrap=True
66
66
  )
67
67
 
68
68
  # Values
69
69
  iPx = SHARED.theme.baseIconHeight
70
- hSp = CONFIG.pxInt(12)
71
- vSp = CONFIG.pxInt(8)
72
- bSp = CONFIG.pxInt(12)
73
70
 
74
71
  options = SHARED.project.options
75
72
  spLevel = options.getInt("GuiDocSplit", "spLevel", 3)
@@ -79,11 +76,11 @@ class GuiDocSplit(NDialog):
79
76
  # Heading Selection
80
77
  self.listBox = QListWidget(self)
81
78
  self.listBox.setDragDropMode(QAbstractItemView.DragDropMode.NoDragDrop)
82
- self.listBox.setMinimumWidth(CONFIG.pxInt(400))
83
- self.listBox.setMinimumHeight(CONFIG.pxInt(180))
79
+ self.listBox.setMinimumWidth(400)
80
+ self.listBox.setMinimumHeight(180)
84
81
 
85
82
  self.splitLevel = QComboBox(self)
86
- self.splitLevel.addItem(self.tr("Split on Heading Level 1 (Partition)"), 1)
83
+ self.splitLevel.addItem(self.tr("Split on Heading Level 1 (Partition)"), 1)
87
84
  self.splitLevel.addItem(self.tr("Split up to Heading Level 2 (Chapter)"), 2)
88
85
  self.splitLevel.addItem(self.tr("Split up to Heading Level 3 (Scene)"), 3)
89
86
  self.splitLevel.addItem(self.tr("Split up to Heading Level 4 (Section)"), 4)
@@ -93,16 +90,19 @@ class GuiDocSplit(NDialog):
93
90
  self.splitLevel.currentIndexChanged.connect(self._reloadList)
94
91
 
95
92
  # Split Options
96
- self.folderLabel = QLabel(self.tr("Split into a new folder"), self)
97
93
  self.folderSwitch = NSwitch(self, height=iPx)
98
94
  self.folderSwitch.setChecked(intoFolder)
95
+ self.folderLabel = QLabel(self.tr("Split into a new folder"), self)
96
+ self.folderLabel.setBuddy(self.folderSwitch)
99
97
 
100
- self.hierarchyLabel = QLabel(self.tr("Create document hierarchy"), self)
101
98
  self.hierarchySwitch = NSwitch(self, height=iPx)
102
99
  self.hierarchySwitch.setChecked(docHierarchy)
100
+ self.hierarchyLabel = QLabel(self.tr("Create document hierarchy"), self)
101
+ self.hierarchyLabel.setBuddy(self.hierarchySwitch)
103
102
 
104
- self.trashLabel = QLabel(self.tr("Move split document to Trash"), self)
105
103
  self.trashSwitch = NSwitch(self, height=iPx)
104
+ self.trashLabel = QLabel(self.tr("Move split document to Trash"), self)
105
+ self.trashLabel.setBuddy(self.trashSwitch)
106
106
 
107
107
  self.optBox = QGridLayout()
108
108
  self.optBox.addWidget(self.folderLabel, 0, 0)
@@ -111,8 +111,8 @@ class GuiDocSplit(NDialog):
111
111
  self.optBox.addWidget(self.hierarchySwitch, 1, 1)
112
112
  self.optBox.addWidget(self.trashLabel, 2, 0)
113
113
  self.optBox.addWidget(self.trashSwitch, 2, 1)
114
- self.optBox.setVerticalSpacing(vSp)
115
- self.optBox.setHorizontalSpacing(hSp)
114
+ self.optBox.setVerticalSpacing(8)
115
+ self.optBox.setHorizontalSpacing(12)
116
116
  self.optBox.setColumnStretch(3, 1)
117
117
 
118
118
  # Buttons
@@ -125,12 +125,12 @@ class GuiDocSplit(NDialog):
125
125
  self.outerBox.setSpacing(0)
126
126
  self.outerBox.addWidget(self.headLabel)
127
127
  self.outerBox.addWidget(self.helpLabel)
128
- self.outerBox.addSpacing(vSp)
128
+ self.outerBox.addSpacing(8)
129
129
  self.outerBox.addWidget(self.listBox)
130
130
  self.outerBox.addWidget(self.splitLevel)
131
- self.outerBox.addSpacing(vSp)
131
+ self.outerBox.addSpacing(8)
132
132
  self.outerBox.addLayout(self.optBox)
133
- self.outerBox.addSpacing(bSp)
133
+ self.outerBox.addSpacing(12)
134
134
  self.outerBox.addWidget(self.buttonBox)
135
135
  self.setLayout(self.outerBox)
136
136
 
@@ -181,11 +181,11 @@ class GuiDocSplit(NDialog):
181
181
  @classmethod
182
182
  def getData(cls, parent: QWidget, handle: str) -> tuple[dict, list[str], bool]:
183
183
  """Pop the dialog and return the result."""
184
- cls = GuiDocSplit(parent, handle)
185
- cls.exec()
186
- data, text = cls.data()
187
- accepted = cls.result() == QtAccepted
188
- cls.softDelete()
184
+ dialog = cls(parent, handle)
185
+ dialog.exec()
186
+ data, text = dialog.data()
187
+ accepted = dialog.result() == QtAccepted
188
+ dialog.softDelete()
189
189
  return data, text, accepted
190
190
 
191
191
  ##
@@ -195,8 +195,8 @@ class GuiDocSplit(NDialog):
195
195
  @pyqtSlot()
196
196
  def _reloadList(self) -> None:
197
197
  """Reload the content of the list box."""
198
- sHandle = self._data.get("sHandle", None)
199
- self._loadContent(sHandle)
198
+ if sHandle := self._data.get("sHandle"):
199
+ self._loadContent(sHandle)
200
200
  return
201
201
 
202
202
  ##
@@ -25,9 +25,8 @@ from __future__ import annotations
25
25
 
26
26
  import logging
27
27
 
28
- from PyQt5.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget
28
+ from PyQt6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget
29
29
 
30
- from novelwriter import CONFIG
31
30
  from novelwriter.extensions.modified import NDialog
32
31
  from novelwriter.types import QtAccepted, QtDialogCancel, QtDialogOk
33
32
 
@@ -43,15 +42,15 @@ class GuiEditLabel(NDialog):
43
42
  self.setObjectName("GuiEditLabel")
44
43
  self.setWindowTitle(self.tr("Item Label"))
45
44
 
46
- mVd = CONFIG.pxInt(220)
47
- mSp = CONFIG.pxInt(12)
48
-
49
45
  # Item Label
50
- self.labelValue = QLineEdit(self)
51
- self.labelValue.setMinimumWidth(mVd)
52
- self.labelValue.setMaxLength(200)
53
- self.labelValue.setText(text)
54
- self.labelValue.selectAll()
46
+ self.edtValue = QLineEdit(self)
47
+ self.edtValue.setMinimumWidth(220)
48
+ self.edtValue.setMaxLength(200)
49
+ self.edtValue.setText(text)
50
+ self.edtValue.selectAll()
51
+
52
+ self.lblValue = QLabel(self.tr("Label"), self)
53
+ self.lblValue.setBuddy(self.lblValue)
55
54
 
56
55
  # Buttons
57
56
  self.buttonBox = QDialogButtonBox(QtDialogOk | QtDialogCancel, self)
@@ -60,12 +59,12 @@ class GuiEditLabel(NDialog):
60
59
 
61
60
  # Assemble
62
61
  self.innerBox = QHBoxLayout()
63
- self.innerBox.addWidget(QLabel(self.tr("Label"), self), 0)
64
- self.innerBox.addWidget(self.labelValue, 1)
65
- self.innerBox.setSpacing(mSp)
62
+ self.innerBox.addWidget(self.lblValue, 0)
63
+ self.innerBox.addWidget(self.edtValue, 1)
64
+ self.innerBox.setSpacing(12)
66
65
 
67
66
  self.outerBox = QVBoxLayout()
68
- self.outerBox.setSpacing(mSp)
67
+ self.outerBox.setSpacing(12)
69
68
  self.outerBox.addLayout(self.innerBox, 1)
70
69
  self.outerBox.addWidget(self.buttonBox, 0)
71
70
 
@@ -81,14 +80,14 @@ class GuiEditLabel(NDialog):
81
80
 
82
81
  @property
83
82
  def itemLabel(self) -> str:
84
- return self.labelValue.text()
83
+ return self.edtValue.text()
85
84
 
86
85
  @classmethod
87
86
  def getLabel(cls, parent: QWidget, text: str) -> tuple[str, bool]:
88
87
  """Pop the dialog and return the result."""
89
- cls = GuiEditLabel(parent, text=text)
90
- cls.exec()
91
- label = cls.itemLabel
92
- accepted = cls.result() == QtAccepted
93
- cls.softDelete()
88
+ dialog = cls(parent, text=text)
89
+ dialog.exec()
90
+ label = dialog.itemLabel
91
+ accepted = dialog.result() == QtAccepted
92
+ dialog.softDelete()
94
93
  return label, accepted