novelWriter 2.6.3__py3-none-any.whl → 2.7rc1__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.
- novelwriter/__init__.py +98 -75
- novelwriter/assets/i18n/project_en_GB.json +2 -0
- novelwriter/assets/icons/font_awesome.icons +109 -0
- novelwriter/assets/icons/material_filled_bold.icons +109 -0
- novelwriter/assets/icons/material_filled_normal.icons +109 -0
- novelwriter/assets/icons/material_filled_thin.icons +109 -0
- novelwriter/assets/icons/material_rounded_bold.icons +109 -0
- novelwriter/assets/icons/material_rounded_normal.icons +109 -0
- novelwriter/assets/icons/material_rounded_thin.icons +109 -0
- novelwriter/assets/icons/remix_filled.icons +109 -0
- novelwriter/assets/icons/remix_outline.icons +109 -0
- novelwriter/assets/images/splash.png +0 -0
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/{manual_fr_FR.pdf → manual_fr.pdf} +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/syntax/cyberpunk_night.conf +1 -1
- novelwriter/assets/syntax/snazzy.conf +3 -3
- novelwriter/assets/text/credits_en.htm +6 -6
- novelwriter/assets/themes/cyberpunk_night.conf +23 -7
- novelwriter/assets/themes/default_dark.conf +20 -4
- novelwriter/assets/themes/default_light.conf +21 -5
- novelwriter/assets/themes/dracula.conf +20 -4
- novelwriter/assets/themes/snazzy.conf +48 -0
- novelwriter/assets/themes/solarized_dark.conf +24 -8
- novelwriter/assets/themes/solarized_light.conf +22 -6
- novelwriter/common.py +43 -27
- novelwriter/config.py +201 -139
- novelwriter/constants.py +67 -36
- novelwriter/core/buildsettings.py +25 -16
- novelwriter/core/coretools.py +52 -41
- novelwriter/core/docbuild.py +20 -13
- novelwriter/core/document.py +2 -2
- novelwriter/core/index.py +166 -432
- novelwriter/core/indexdata.py +406 -0
- novelwriter/core/item.py +50 -32
- novelwriter/core/itemmodel.py +43 -38
- novelwriter/core/novelmodel.py +225 -0
- novelwriter/core/options.py +1 -1
- novelwriter/core/project.py +24 -25
- novelwriter/core/projectdata.py +47 -29
- novelwriter/core/projectxml.py +18 -8
- novelwriter/core/sessions.py +32 -15
- novelwriter/core/spellcheck.py +4 -3
- novelwriter/core/status.py +12 -15
- novelwriter/core/storage.py +1 -1
- novelwriter/core/tree.py +55 -13
- novelwriter/dialogs/about.py +19 -22
- novelwriter/dialogs/docmerge.py +23 -24
- novelwriter/dialogs/docsplit.py +26 -26
- novelwriter/dialogs/editlabel.py +19 -20
- novelwriter/dialogs/preferences.py +143 -69
- novelwriter/dialogs/projectsettings.py +51 -54
- novelwriter/dialogs/quotes.py +14 -19
- novelwriter/dialogs/wordlist.py +25 -30
- novelwriter/enum.py +8 -0
- novelwriter/error.py +16 -16
- novelwriter/extensions/configlayout.py +24 -20
- novelwriter/extensions/eventfilters.py +9 -5
- novelwriter/extensions/modified.py +34 -15
- novelwriter/extensions/novelselector.py +18 -5
- novelwriter/extensions/pagedsidebar.py +39 -49
- novelwriter/extensions/progressbars.py +10 -8
- novelwriter/extensions/statusled.py +6 -13
- novelwriter/extensions/switch.py +31 -41
- novelwriter/extensions/switchbox.py +8 -3
- novelwriter/extensions/versioninfo.py +4 -4
- novelwriter/formats/shared.py +1 -1
- novelwriter/formats/todocx.py +14 -10
- novelwriter/formats/tohtml.py +7 -5
- novelwriter/formats/tokenizer.py +37 -33
- novelwriter/formats/tomarkdown.py +6 -2
- novelwriter/formats/toodt.py +27 -22
- novelwriter/formats/toqdoc.py +19 -14
- novelwriter/formats/toraw.py +6 -2
- novelwriter/gui/doceditor.py +314 -305
- novelwriter/gui/dochighlight.py +46 -45
- novelwriter/gui/docviewer.py +102 -104
- novelwriter/gui/docviewerpanel.py +47 -51
- novelwriter/gui/editordocument.py +8 -5
- novelwriter/gui/itemdetails.py +11 -14
- novelwriter/gui/mainmenu.py +146 -145
- novelwriter/gui/noveltree.py +246 -406
- novelwriter/gui/outline.py +141 -72
- novelwriter/gui/projtree.py +139 -132
- novelwriter/gui/search.py +34 -31
- novelwriter/gui/sidebar.py +13 -18
- novelwriter/gui/statusbar.py +27 -21
- novelwriter/gui/theme.py +554 -436
- novelwriter/guimain.py +56 -38
- novelwriter/shared.py +32 -23
- novelwriter/splash.py +74 -0
- novelwriter/text/comments.py +70 -0
- novelwriter/text/patterns.py +4 -4
- novelwriter/tools/dictionaries.py +20 -29
- novelwriter/tools/lipsum.py +18 -18
- novelwriter/tools/manusbuild.py +39 -42
- novelwriter/tools/manuscript.py +102 -115
- novelwriter/tools/manussettings.py +116 -96
- novelwriter/tools/noveldetails.py +60 -72
- novelwriter/tools/welcome.py +57 -75
- novelwriter/tools/writingstats.py +112 -102
- novelwriter/types.py +5 -7
- {novelWriter-2.6.3.dist-info → novelwriter-2.7rc1.dist-info}/METADATA +6 -6
- novelwriter-2.7rc1.dist-info/RECORD +162 -0
- {novelWriter-2.6.3.dist-info → novelwriter-2.7rc1.dist-info}/WHEEL +1 -1
- novelWriter-2.6.3.dist-info/RECORD +0 -363
- novelwriter/assets/icons/typicons_dark/README.md +0 -29
- novelwriter/assets/icons/typicons_dark/icons.conf +0 -134
- novelwriter/assets/icons/typicons_dark/mixed_copy.svg +0 -4
- novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -4
- novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_font.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_quote.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -6
- novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -8
- novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -9
- novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/README.md +0 -29
- novelwriter/assets/icons/typicons_light/icons.conf +0 -134
- novelwriter/assets/icons/typicons_light/mixed_copy.svg +0 -4
- novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -4
- novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_size-height.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_size-width.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_font.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_quote.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_toolbar.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_book.svg +0 -6
- novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_document.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_export.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_key.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_location.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_search.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_star.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -9
- novelwriter/assets/icons/typicons_light/typ_times.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_user.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -4
- {novelWriter-2.6.3.dist-info → novelwriter-2.7rc1.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.6.3.dist-info → novelwriter-2.7rc1.dist-info/licenses}/LICENSE.md +0 -0
- {novelWriter-2.6.3.dist-info → novelwriter-2.7rc1.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
|
32
|
-
from
|
33
|
-
from
|
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
|
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(
|
65
|
-
self.setMinimumHeight(
|
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(
|
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(
|
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.
|
127
|
-
self.outerBox.
|
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 =
|
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)
|
novelwriter/tools/lipsum.py
CHANGED
@@ -26,8 +26,8 @@ from __future__ import annotations
|
|
26
26
|
import logging
|
27
27
|
import random
|
28
28
|
|
29
|
-
from
|
30
|
-
from
|
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(
|
56
|
+
self.innerBox.setSpacing(16)
|
60
57
|
|
61
58
|
# Icon
|
62
59
|
self.docIcon = QLabel(self)
|
63
|
-
self.docIcon.setPixmap(SHARED.theme.getPixmap("
|
60
|
+
self.docIcon.setPixmap(SHARED.theme.getPixmap("text", (64, 64), "blue"))
|
64
61
|
|
65
62
|
self.leftBox = QVBoxLayout()
|
66
|
-
self.leftBox.setSpacing(
|
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(
|
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
|
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
|
103
|
-
|
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(
|
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
|
-
|
129
|
-
|
130
|
-
text =
|
131
|
-
|
128
|
+
dialog = cls(parent)
|
129
|
+
dialog.exec()
|
130
|
+
text = dialog.lipsumText
|
131
|
+
dialog.softDelete()
|
132
132
|
return text
|
133
133
|
|
134
134
|
##
|
novelwriter/tools/manusbuild.py
CHANGED
@@ -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
|
31
|
-
from
|
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
|
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(
|
72
|
-
self.setMinimumHeight(
|
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
|
-
|
85
|
-
|
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(
|
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(
|
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(
|
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(
|
179
|
-
self.buildBox.setVerticalSpacing(
|
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(
|
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(
|
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
|
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(
|
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
|
-
|
210
|
-
|
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(
|
219
|
+
self.outerBox.addSpacing(16)
|
216
220
|
self.outerBox.addWidget(self.mainSplit, 1)
|
217
|
-
self.outerBox.addSpacing(
|
221
|
+
self.outerBox.addSpacing(4)
|
218
222
|
self.outerBox.addWidget(self.buildProgress, 0)
|
219
|
-
self.outerBox.addSpacing(
|
223
|
+
self.outerBox.addSpacing(4)
|
220
224
|
self.outerBox.addLayout(self.buildBox, 0)
|
221
|
-
self.outerBox.addSpacing(
|
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",
|
372
|
-
pOptions.setValue("GuiManuscriptBuild", "winHeight",
|
373
|
-
pOptions.setValue("GuiManuscriptBuild", "fmtWidth",
|
374
|
-
pOptions.setValue("GuiManuscriptBuild", "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:
|