novelWriter 2.6.2__py3-none-any.whl → 2.7b1__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 (334) hide show
  1. novelwriter/__init__.py +84 -74
  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_en_GB.json +1 -0
  16. novelwriter/assets/icons/font_awesome.icons +109 -0
  17. novelwriter/assets/icons/material_filled_bold.icons +109 -0
  18. novelwriter/assets/icons/material_filled_normal.icons +109 -0
  19. novelwriter/assets/icons/material_filled_thin.icons +109 -0
  20. novelwriter/assets/icons/material_rounded_bold.icons +109 -0
  21. novelwriter/assets/icons/material_rounded_normal.icons +109 -0
  22. novelwriter/assets/icons/material_rounded_thin.icons +109 -0
  23. novelwriter/assets/icons/remix_filled.icons +108 -0
  24. novelwriter/assets/icons/remix_outline.icons +108 -0
  25. novelwriter/assets/manual.pdf +0 -0
  26. novelwriter/assets/{manual_fr_FR.pdf → manual_fr.pdf} +0 -0
  27. novelwriter/assets/sample.zip +0 -0
  28. novelwriter/assets/syntax/cyberpunk_night.conf +1 -1
  29. novelwriter/assets/text/credits_en.htm +6 -6
  30. novelwriter/assets/themes/cyberpunk_night.conf +23 -7
  31. novelwriter/assets/themes/default_dark.conf +20 -4
  32. novelwriter/assets/themes/default_light.conf +21 -5
  33. novelwriter/assets/themes/dracula.conf +20 -4
  34. novelwriter/assets/themes/solarized_dark.conf +24 -8
  35. novelwriter/assets/themes/solarized_light.conf +22 -6
  36. novelwriter/common.py +33 -26
  37. novelwriter/config.py +118 -127
  38. novelwriter/constants.py +75 -56
  39. novelwriter/core/buildsettings.py +23 -16
  40. novelwriter/core/coretools.py +11 -7
  41. novelwriter/core/docbuild.py +19 -13
  42. novelwriter/core/document.py +2 -2
  43. novelwriter/core/index.py +142 -432
  44. novelwriter/core/indexdata.py +403 -0
  45. novelwriter/core/item.py +35 -28
  46. novelwriter/core/itemmodel.py +27 -26
  47. novelwriter/core/novelmodel.py +223 -0
  48. novelwriter/core/options.py +1 -1
  49. novelwriter/core/project.py +10 -11
  50. novelwriter/core/projectdata.py +5 -5
  51. novelwriter/core/projectxml.py +1 -1
  52. novelwriter/core/sessions.py +3 -2
  53. novelwriter/core/spellcheck.py +4 -3
  54. novelwriter/core/status.py +12 -15
  55. novelwriter/core/storage.py +1 -1
  56. novelwriter/core/tree.py +46 -8
  57. novelwriter/dialogs/about.py +19 -22
  58. novelwriter/dialogs/docmerge.py +21 -23
  59. novelwriter/dialogs/docsplit.py +20 -23
  60. novelwriter/dialogs/editlabel.py +9 -13
  61. novelwriter/dialogs/preferences.py +111 -48
  62. novelwriter/dialogs/projectsettings.py +48 -54
  63. novelwriter/dialogs/quotes.py +14 -19
  64. novelwriter/dialogs/wordlist.py +25 -30
  65. novelwriter/enum.py +8 -0
  66. novelwriter/error.py +16 -16
  67. novelwriter/extensions/configlayout.py +18 -18
  68. novelwriter/extensions/eventfilters.py +9 -5
  69. novelwriter/extensions/modified.py +34 -15
  70. novelwriter/extensions/novelselector.py +18 -5
  71. novelwriter/extensions/pagedsidebar.py +39 -49
  72. novelwriter/extensions/progressbars.py +10 -8
  73. novelwriter/extensions/statusled.py +6 -13
  74. novelwriter/extensions/switch.py +19 -30
  75. novelwriter/extensions/switchbox.py +7 -3
  76. novelwriter/extensions/versioninfo.py +4 -4
  77. novelwriter/formats/shared.py +1 -1
  78. novelwriter/formats/todocx.py +14 -10
  79. novelwriter/formats/tohtml.py +7 -5
  80. novelwriter/formats/tokenizer.py +36 -33
  81. novelwriter/formats/tomarkdown.py +6 -2
  82. novelwriter/formats/toodt.py +27 -22
  83. novelwriter/formats/toqdoc.py +19 -14
  84. novelwriter/formats/toraw.py +6 -2
  85. novelwriter/gui/doceditor.py +216 -265
  86. novelwriter/gui/dochighlight.py +46 -45
  87. novelwriter/gui/docviewer.py +102 -104
  88. novelwriter/gui/docviewerpanel.py +47 -51
  89. novelwriter/gui/editordocument.py +8 -5
  90. novelwriter/gui/itemdetails.py +15 -18
  91. novelwriter/gui/mainmenu.py +147 -146
  92. novelwriter/gui/noveltree.py +239 -405
  93. novelwriter/gui/outline.py +137 -76
  94. novelwriter/gui/projtree.py +138 -132
  95. novelwriter/gui/search.py +33 -31
  96. novelwriter/gui/sidebar.py +13 -18
  97. novelwriter/gui/statusbar.py +13 -15
  98. novelwriter/gui/theme.py +533 -430
  99. novelwriter/guimain.py +27 -29
  100. novelwriter/shared.py +32 -23
  101. novelwriter/text/comments.py +70 -0
  102. novelwriter/text/patterns.py +4 -4
  103. novelwriter/tools/dictionaries.py +20 -29
  104. novelwriter/tools/lipsum.py +16 -17
  105. novelwriter/tools/manusbuild.py +39 -42
  106. novelwriter/tools/manuscript.py +113 -126
  107. novelwriter/tools/manussettings.py +78 -83
  108. novelwriter/tools/noveldetails.py +51 -64
  109. novelwriter/tools/welcome.py +56 -75
  110. novelwriter/tools/writingstats.py +44 -57
  111. novelwriter/types.py +5 -7
  112. {novelWriter-2.6.2.dist-info → novelwriter-2.7b1.dist-info}/METADATA +6 -6
  113. novelwriter-2.7b1.dist-info/RECORD +159 -0
  114. {novelWriter-2.6.2.dist-info → novelwriter-2.7b1.dist-info}/WHEEL +1 -1
  115. novelWriter-2.6.2.dist-info/RECORD +0 -363
  116. novelwriter/assets/icons/typicons_dark/README.md +0 -29
  117. novelwriter/assets/icons/typicons_dark/icons.conf +0 -134
  118. novelwriter/assets/icons/typicons_dark/mixed_copy.svg +0 -4
  119. novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -12
  120. novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -6
  121. novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -12
  122. novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -12
  123. novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -12
  124. novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -12
  125. novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -4
  126. novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -5
  127. novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -5
  128. novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -5
  129. novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -5
  130. novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +0 -6
  131. novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +0 -6
  132. novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +0 -6
  133. novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +0 -6
  134. novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -6
  135. novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +0 -6
  136. novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +0 -6
  137. novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -4
  138. novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -4
  139. novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -4
  140. novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -4
  141. novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -4
  142. novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -4
  143. novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -4
  144. novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -4
  145. novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -4
  146. novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -4
  147. novelwriter/assets/icons/typicons_dark/nw_font.svg +0 -4
  148. novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -4
  149. novelwriter/assets/icons/typicons_dark/nw_quote.svg +0 -4
  150. novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -4
  151. novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -4
  152. novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -4
  153. novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -4
  154. novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -4
  155. novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -6
  156. novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -4
  157. novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -6
  158. novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -7
  159. novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -4
  160. novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -6
  161. novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -7
  162. novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -7
  163. novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -7
  164. novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +0 -5
  165. novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -4
  166. novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -4
  167. novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -4
  168. novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -4
  169. novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -4
  170. novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -4
  171. novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -6
  172. novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -4
  173. novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -4
  174. novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -4
  175. novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -4
  176. novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -4
  177. novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -4
  178. novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -4
  179. novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -4
  180. novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -4
  181. novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -4
  182. novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -4
  183. novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -4
  184. novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -4
  185. novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -4
  186. novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -8
  187. novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -4
  188. novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -4
  189. novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -4
  190. novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -4
  191. novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -4
  192. novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -4
  193. novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -5
  194. novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -4
  195. novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -4
  196. novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -4
  197. novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -4
  198. novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -4
  199. novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -4
  200. novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -4
  201. novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -4
  202. novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -5
  203. novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -4
  204. novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -4
  205. novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -4
  206. novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -4
  207. novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -4
  208. novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -4
  209. novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -4
  210. novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -4
  211. novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -4
  212. novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -4
  213. novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -4
  214. novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -4
  215. novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -4
  216. novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -4
  217. novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -9
  218. novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -4
  219. novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -5
  220. novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -4
  221. novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -4
  222. novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -5
  223. novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -4
  224. novelwriter/assets/icons/typicons_light/README.md +0 -29
  225. novelwriter/assets/icons/typicons_light/icons.conf +0 -134
  226. novelwriter/assets/icons/typicons_light/mixed_copy.svg +0 -4
  227. novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -12
  228. novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -6
  229. novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -12
  230. novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -12
  231. novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -12
  232. novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -12
  233. novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -4
  234. novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -5
  235. novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -5
  236. novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -5
  237. novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -5
  238. novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +0 -6
  239. novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +0 -6
  240. novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +0 -6
  241. novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +0 -6
  242. novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -6
  243. novelwriter/assets/icons/typicons_light/mixed_size-height.svg +0 -6
  244. novelwriter/assets/icons/typicons_light/mixed_size-width.svg +0 -6
  245. novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -4
  246. novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -4
  247. novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -4
  248. novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -4
  249. novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -4
  250. novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -4
  251. novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -4
  252. novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -4
  253. novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -4
  254. novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -4
  255. novelwriter/assets/icons/typicons_light/nw_font.svg +0 -4
  256. novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -4
  257. novelwriter/assets/icons/typicons_light/nw_quote.svg +0 -4
  258. novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -4
  259. novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -4
  260. novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -4
  261. novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -4
  262. novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -4
  263. novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -6
  264. novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -4
  265. novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -6
  266. novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -7
  267. novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -4
  268. novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -6
  269. novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -7
  270. novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -7
  271. novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -7
  272. novelwriter/assets/icons/typicons_light/nw_toolbar.svg +0 -5
  273. novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -4
  274. novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -4
  275. novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -4
  276. novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -4
  277. novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -4
  278. novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -4
  279. novelwriter/assets/icons/typicons_light/typ_book.svg +0 -6
  280. novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -4
  281. novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -4
  282. novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -4
  283. novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -4
  284. novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -4
  285. novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -4
  286. novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -4
  287. novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -4
  288. novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -4
  289. novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -4
  290. novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -4
  291. novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -4
  292. novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -4
  293. novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -4
  294. novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -5
  295. novelwriter/assets/icons/typicons_light/typ_document.svg +0 -4
  296. novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -4
  297. novelwriter/assets/icons/typicons_light/typ_export.svg +0 -4
  298. novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -4
  299. novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -4
  300. novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -4
  301. novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -5
  302. novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -4
  303. novelwriter/assets/icons/typicons_light/typ_key.svg +0 -4
  304. novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -4
  305. novelwriter/assets/icons/typicons_light/typ_location.svg +0 -4
  306. novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -4
  307. novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -4
  308. novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -4
  309. novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -4
  310. novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -5
  311. novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -4
  312. novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -4
  313. novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -4
  314. novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -4
  315. novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -4
  316. novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -4
  317. novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -4
  318. novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -4
  319. novelwriter/assets/icons/typicons_light/typ_search.svg +0 -4
  320. novelwriter/assets/icons/typicons_light/typ_star.svg +0 -4
  321. novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -4
  322. novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -4
  323. novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -4
  324. novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -4
  325. novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -9
  326. novelwriter/assets/icons/typicons_light/typ_times.svg +0 -4
  327. novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -5
  328. novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -4
  329. novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -4
  330. novelwriter/assets/icons/typicons_light/typ_user.svg +0 -5
  331. novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -4
  332. {novelWriter-2.6.2.dist-info → novelwriter-2.7b1.dist-info}/entry_points.txt +0 -0
  333. {novelWriter-2.6.2.dist-info → novelwriter-2.7b1.dist-info/licenses}/LICENSE.md +0 -0
  334. {novelWriter-2.6.2.dist-info → novelwriter-2.7b1.dist-info}/top_level.txt +0 -0
novelwriter/gui/search.py CHANGED
@@ -26,23 +26,26 @@ from __future__ import annotations
26
26
  import logging
27
27
 
28
28
  from time import time
29
+ from typing import TYPE_CHECKING
29
30
 
30
- from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot
31
- from PyQt5.QtGui import QCursor, QKeyEvent
32
- from PyQt5.QtWidgets import (
31
+ from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
32
+ from PyQt6.QtGui import QAction, QCursor, QKeyEvent, QPalette
33
+ from PyQt6.QtWidgets import (
33
34
  QApplication, QFrame, QHBoxLayout, QLabel, QLineEdit, QToolBar,
34
35
  QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
35
36
  )
36
37
 
37
38
  from novelwriter import CONFIG, SHARED
38
- from novelwriter.common import checkInt, cssCol
39
+ from novelwriter.common import checkInt, qtAddAction
39
40
  from novelwriter.core.coretools import DocSearch
40
- from novelwriter.core.item import NWItem
41
41
  from novelwriter.types import (
42
42
  QtAlignMiddle, QtAlignRight, QtHeaderStretch, QtHeaderToContents,
43
- QtUserRole
43
+ QtHexArgb, QtUserRole
44
44
  )
45
45
 
46
+ if TYPE_CHECKING:
47
+ from novelwriter.core.item import NWItem
48
+
46
49
  logger = logging.getLogger(__name__)
47
50
 
48
51
 
@@ -65,18 +68,20 @@ class GuiProjectSearch(QWidget):
65
68
 
66
69
  iPx = SHARED.theme.baseIconHeight
67
70
  iSz = SHARED.theme.baseIconSize
68
- mPx = CONFIG.pxInt(2)
69
- tPx = CONFIG.pxInt(4)
70
71
 
71
72
  self._time = time()
72
73
  self._search = DocSearch()
73
74
  self._blocked = False
74
75
  self._map: dict[str, tuple[int, float]] = {}
75
76
 
77
+ self.setContentsMargins(0, 0, 0, 0)
78
+ self.setBackgroundRole(QPalette.ColorRole.Base)
79
+ self.setAutoFillBackground(True)
80
+
76
81
  # Header
77
82
  self.viewLabel = QLabel(self.tr("Project Search"), self)
78
83
  self.viewLabel.setFont(SHARED.theme.guiFontB)
79
- self.viewLabel.setContentsMargins(mPx, tPx, 0, mPx)
84
+ self.viewLabel.setContentsMargins(4, 4, 0, 2)
80
85
 
81
86
  # Options
82
87
  self.searchOpt = QToolBar(self)
@@ -84,30 +89,30 @@ class GuiProjectSearch(QWidget):
84
89
  self.searchOpt.setIconSize(iSz)
85
90
  self.searchOpt.setContentsMargins(0, 0, 0, 0)
86
91
 
87
- self.toggleCase = self.searchOpt.addAction(self.tr("Case Sensitive"))
92
+ self.toggleCase = qtAddAction(self.searchOpt, self.tr("Case Sensitive"))
88
93
  self.toggleCase.setCheckable(True)
89
94
  self.toggleCase.setChecked(CONFIG.searchProjCase)
90
95
  self.toggleCase.toggled.connect(self._toggleCase)
91
96
 
92
- self.toggleWord = self.searchOpt.addAction(self.tr("Whole Words Only"))
97
+ self.toggleWord = qtAddAction(self.searchOpt, self.tr("Whole Words Only"))
93
98
  self.toggleWord.setCheckable(True)
94
99
  self.toggleWord.setChecked(CONFIG.searchProjWord)
95
100
  self.toggleWord.toggled.connect(self._toggleWord)
96
101
 
97
- self.toggleRegEx = self.searchOpt.addAction(self.tr("RegEx Mode"))
102
+ self.toggleRegEx = qtAddAction(self.searchOpt, self.tr("RegEx Mode"))
98
103
  self.toggleRegEx.setCheckable(True)
99
104
  self.toggleRegEx.setChecked(CONFIG.searchProjRegEx)
100
105
  self.toggleRegEx.toggled.connect(self._toggleRegEx)
101
106
 
102
107
  # Search Box
108
+ self.searchAction = QAction("", self)
109
+ self.searchAction.setIcon(SHARED.theme.getIcon("search", "blue"))
110
+ self.searchAction.triggered.connect(self._processSearch)
111
+
103
112
  self.searchText = QLineEdit(self)
104
113
  self.searchText.setPlaceholderText(self.tr("Search for"))
105
114
  self.searchText.setClearButtonEnabled(True)
106
-
107
- self.searchAction = self.searchText.addAction(
108
- SHARED.theme.getIcon("search"), QLineEdit.ActionPosition.TrailingPosition
109
- )
110
- self.searchAction.triggered.connect(self._processSearch)
115
+ self.searchText.addAction(self.searchAction, QLineEdit.ActionPosition.TrailingPosition)
111
116
 
112
117
  # Search Result
113
118
  self.searchResult = QTreeWidget(self)
@@ -121,10 +126,10 @@ class GuiProjectSearch(QWidget):
121
126
  self.searchResult.itemDoubleClicked.connect(self._searchResultDoubleClicked)
122
127
  self.searchResult.itemSelectionChanged.connect(self._searchResultSelected)
123
128
 
124
- treeHeader = self.searchResult.header()
125
- treeHeader.setStretchLastSection(False)
126
- treeHeader.setSectionResizeMode(self.C_NAME, QtHeaderStretch)
127
- treeHeader.setSectionResizeMode(self.C_COUNT, QtHeaderToContents)
129
+ if header := self.searchResult.header():
130
+ header.setStretchLastSection(False)
131
+ header.setSectionResizeMode(self.C_NAME, QtHeaderStretch)
132
+ header.setSectionResizeMode(self.C_COUNT, QtHeaderToContents)
128
133
 
129
134
  # Assemble
130
135
  self.headerBox = QHBoxLayout()
@@ -138,7 +143,7 @@ class GuiProjectSearch(QWidget):
138
143
  self.outerBox.addWidget(self.searchText, 0)
139
144
  self.outerBox.addWidget(self.searchResult, 1)
140
145
  self.outerBox.setContentsMargins(0, 0, 0, 0)
141
- self.outerBox.setSpacing(mPx)
146
+ self.outerBox.setSpacing(2)
142
147
 
143
148
  self.setLayout(self.outerBox)
144
149
  self.updateTheme()
@@ -153,20 +158,17 @@ class GuiProjectSearch(QWidget):
153
158
 
154
159
  def updateTheme(self) -> None:
155
160
  """Update theme elements."""
156
- bPx = CONFIG.pxInt(1)
157
- mPx = CONFIG.pxInt(2)
158
-
159
- qPalette = self.palette()
160
- colBase = cssCol(qPalette.base().color())
161
- colFocus = cssCol(qPalette.highlight().color())
161
+ palette = QApplication.palette()
162
+ colBase = palette.base().color().name(QtHexArgb)
163
+ colFocus = palette.highlight().color().name(QtHexArgb)
162
164
 
163
165
  self.setStyleSheet(
164
166
  "QToolBar {padding: 0; background: none;} "
165
- f"QLineEdit {{border: {bPx}px solid {colBase}; padding: {mPx}px;}} "
166
- f"QLineEdit:focus {{border: {bPx}px solid {colFocus};}} "
167
+ f"QLineEdit {{border: 1px solid {colBase}; padding: 2px;}} "
168
+ f"QLineEdit:focus {{border: 1px solid {colFocus};}} "
167
169
  )
168
170
 
169
- self.searchAction.setIcon(SHARED.theme.getIcon("search"))
171
+ self.searchAction.setIcon(SHARED.theme.getIcon("search", "blue"))
170
172
  self.toggleCase.setIcon(SHARED.theme.getIcon("search_case"))
171
173
  self.toggleWord.setIcon(SHARED.theme.getIcon("search_word"))
172
174
  self.toggleRegEx.setIcon(SHARED.theme.getIcon("search_regex"))
@@ -27,18 +27,17 @@ import logging
27
27
 
28
28
  from typing import TYPE_CHECKING
29
29
 
30
- from PyQt5.QtCore import QEvent, QPoint, QSize, pyqtSignal
31
- from PyQt5.QtGui import QPalette
32
- from PyQt5.QtWidgets import QMenu, QVBoxLayout, QWidget
30
+ from PyQt6.QtCore import QEvent, QPoint, QSize, pyqtSignal
31
+ from PyQt6.QtWidgets import QMenu, QVBoxLayout, QWidget
33
32
 
34
- from novelwriter import CONFIG, SHARED
33
+ from novelwriter import SHARED
35
34
  from novelwriter.common import qtLambda
36
35
  from novelwriter.enum import nwView
37
36
  from novelwriter.extensions.eventfilters import StatusTipFilter
38
37
  from novelwriter.extensions.modified import NIconToolButton
39
38
  from novelwriter.gui.theme import STYLES_BIG_TOOLBUTTON
40
39
 
41
- if TYPE_CHECKING: # pragma: no cover
40
+ if TYPE_CHECKING:
42
41
  from novelwriter.guimain import GuiMain
43
42
 
44
43
  logger = logging.getLogger(__name__)
@@ -114,7 +113,7 @@ class GuiSideBar(QWidget):
114
113
  self.outerBox.addWidget(self.tbStats)
115
114
  self.outerBox.addWidget(self.tbSettings)
116
115
  self.outerBox.setContentsMargins(0, 0, 0, 0)
117
- self.outerBox.setSpacing(CONFIG.pxInt(6))
116
+ self.outerBox.setSpacing(6)
118
117
 
119
118
  self.setLayout(self.outerBox)
120
119
  self.updateTheme()
@@ -125,10 +124,6 @@ class GuiSideBar(QWidget):
125
124
 
126
125
  def updateTheme(self) -> None:
127
126
  """Initialise GUI elements that depend on specific settings."""
128
- qPalette = self.palette()
129
- qPalette.setBrush(QPalette.ColorRole.Window, qPalette.base())
130
- self.setPalette(qPalette)
131
-
132
127
  buttonStyle = SHARED.theme.getStyleSheet(STYLES_BIG_TOOLBUTTON)
133
128
 
134
129
  self.tbProject.setStyleSheet(buttonStyle)
@@ -140,13 +135,13 @@ class GuiSideBar(QWidget):
140
135
  self.tbStats.setStyleSheet(buttonStyle)
141
136
  self.tbSettings.setStyleSheet(buttonStyle)
142
137
 
143
- self.tbProject.setThemeIcon("view_editor")
144
- self.tbNovel.setThemeIcon("view_novel")
145
- self.tbSearch.setThemeIcon("view_search")
146
- self.tbOutline.setThemeIcon("view_outline")
147
- self.tbBuild.setThemeIcon("view_build")
148
- self.tbDetails.setThemeIcon("proj_details")
149
- self.tbStats.setThemeIcon("proj_stats")
138
+ self.tbProject.setThemeIcon("sb_project")
139
+ self.tbNovel.setThemeIcon("sb_novel")
140
+ self.tbSearch.setThemeIcon("sb_search")
141
+ self.tbOutline.setThemeIcon("sb_outline")
142
+ self.tbBuild.setThemeIcon("sb_build")
143
+ self.tbDetails.setThemeIcon("sb_details")
144
+ self.tbStats.setThemeIcon("sb_stats")
150
145
  self.tbSettings.setThemeIcon("settings")
151
146
 
152
147
  return
@@ -160,4 +155,4 @@ class _PopRightMenu(QMenu):
160
155
  if isinstance(parent := self.parent(), QWidget):
161
156
  offset = QPoint(parent.width(), parent.height() - self.height())
162
157
  self.move(parent.mapToGlobal(offset))
163
- return super(_PopRightMenu, self).event(event)
158
+ return super().event(event)
@@ -28,8 +28,8 @@ import logging
28
28
  from datetime import datetime
29
29
  from time import time
30
30
 
31
- from PyQt5.QtCore import QLocale, pyqtSlot
32
- from PyQt5.QtWidgets import QApplication, QLabel, QStatusBar, QWidget
31
+ from PyQt6.QtCore import QLocale, pyqtSlot
32
+ from PyQt6.QtWidgets import QApplication, QLabel, QStatusBar, QWidget
33
33
 
34
34
  from novelwriter import CONFIG, SHARED
35
35
  from novelwriter.common import formatTime
@@ -56,13 +56,11 @@ class GuiMainStatus(QStatusBar):
56
56
  # Permanent Widgets
57
57
  # =================
58
58
 
59
- xM = CONFIG.pxInt(8)
60
-
61
59
  # The Spell Checker Language
62
60
  self.langIcon = QLabel("", self)
63
61
  self.langText = QLabel(self.tr("None"), self)
64
62
  self.langIcon.setContentsMargins(0, 0, 0, 0)
65
- self.langText.setContentsMargins(0, 0, xM, 0)
63
+ self.langText.setContentsMargins(0, 0, 8, 0)
66
64
  self.addPermanentWidget(self.langIcon)
67
65
  self.addPermanentWidget(self.langText)
68
66
 
@@ -70,7 +68,7 @@ class GuiMainStatus(QStatusBar):
70
68
  self.docIcon = StatusLED(iPx, iPx, self)
71
69
  self.docText = QLabel(self.tr("Editor"), self)
72
70
  self.docIcon.setContentsMargins(0, 0, 0, 0)
73
- self.docText.setContentsMargins(0, 0, xM, 0)
71
+ self.docText.setContentsMargins(0, 0, 8, 0)
74
72
  self.addPermanentWidget(self.docIcon)
75
73
  self.addPermanentWidget(self.docText)
76
74
 
@@ -78,7 +76,7 @@ class GuiMainStatus(QStatusBar):
78
76
  self.projIcon = StatusLED(iPx, iPx, self)
79
77
  self.projText = QLabel(self.tr("Project"), self)
80
78
  self.projIcon.setContentsMargins(0, 0, 0, 0)
81
- self.projText.setContentsMargins(0, 0, xM, 0)
79
+ self.projText.setContentsMargins(0, 0, 8, 0)
82
80
  self.addPermanentWidget(self.projIcon)
83
81
  self.addPermanentWidget(self.projText)
84
82
 
@@ -86,7 +84,7 @@ class GuiMainStatus(QStatusBar):
86
84
  self.statsIcon = QLabel(self)
87
85
  self.statsText = QLabel("", self)
88
86
  self.statsIcon.setContentsMargins(0, 0, 0, 0)
89
- self.statsText.setContentsMargins(0, 0, xM, 0)
87
+ self.statsText.setContentsMargins(0, 0, 8, 0)
90
88
  self.addPermanentWidget(self.statsIcon)
91
89
  self.addPermanentWidget(self.statsText)
92
90
 
@@ -128,15 +126,15 @@ class GuiMainStatus(QStatusBar):
128
126
  def updateTheme(self) -> None:
129
127
  """Update theme elements."""
130
128
  iPx = SHARED.theme.baseIconHeight
131
- self.langIcon.setPixmap(SHARED.theme.getPixmap("status_lang", (iPx, iPx)))
132
- self.statsIcon.setPixmap(SHARED.theme.getPixmap("status_stats", (iPx, iPx)))
133
- self.timePixmap = SHARED.theme.getPixmap("status_time", (iPx, iPx))
134
- self.idlePixmap = SHARED.theme.getPixmap("status_idle", (iPx, iPx))
129
+ self.langIcon.setPixmap(SHARED.theme.getPixmap("language", (iPx, iPx)))
130
+ self.statsIcon.setPixmap(SHARED.theme.getPixmap("stats", (iPx, iPx)))
131
+ self.timePixmap = SHARED.theme.getPixmap("timer", (iPx, iPx))
132
+ self.idlePixmap = SHARED.theme.getPixmap("timer_off", (iPx, iPx))
135
133
  self.timeIcon.setPixmap(self.timePixmap)
136
134
 
137
- colNone = SHARED.theme.statNone
138
- colSaved = SHARED.theme.statSaved
139
- colUnsaved = SHARED.theme.statUnsaved
135
+ colNone = SHARED.theme.getIconColor("default").darker(150)
136
+ colSaved = SHARED.theme.getIconColor("green").darker(150)
137
+ colUnsaved = SHARED.theme.getIconColor("red").darker(150)
140
138
  self.docIcon.setColors(colNone, colSaved, colUnsaved)
141
139
  self.projIcon.setColors(colNone, colSaved, colUnsaved)
142
140