Merge 2.0.3 (#1312)

This commit is contained in:
Veronica Berglyd Olsen
2023-01-08 19:52:09 +01:00
committed by GitHub
124 changed files with 3160 additions and 3650 deletions
+56
View File
@@ -1,5 +1,61 @@
# novelWriter Changelog
## Version 2.0.3 [2023-01-08]
### Release Notes
This is a patch release that fixes a few bugs and usability issues. The editing of status and
importance labels in Project Settings should now be a bit more intuitive. Opening a document from
the Outline View that is already open in the editor should now switch to the editor view. The
convert folder to note or document feature in the project tree has also been fixed. Some icons have
been updated and a renderring issue with one of them fixed. Chinese, Norwegian, US English, German
and Spanish translations have been updated as well. A new credits tab has been added to the About
dialog box, replacing the Credits section on the main About tab.
### Detailed Changelog
**Bugfixes**
* Fix an issue with one of the active icons for the project tree. The SVG paths were not properly
joined. Issue #1297. PR #1299.
* Fix an issue where the new open project routine for 2.0 would not check that a project exists
before trying to open it. This resulted in the open process creating all the expected folders in
the designated location before realising there was no project there. Issue #1300. PR #1301.
* Fix an issue with the convert folder to document or note functionality was no longer working. The
context menu entries were actually just calling the function for converting a file. Issue #1305.
PR #1306.
* Fix an issue where the app may crash if an item is added as a child of an item that exists, but
has invalid settings such that it is rejected by the project tree builder function when the
project is opened. Now, only items with a parent item that has already been added will be allowed
into the project tree. The issue was caused by an invalid project file, and is not likely to
occur during normal use, but such events should still be handled rather than crash the app.
Issue #1283. PR #1309.
**User Interface**
* The CREDITS.md file has been updated, and its content is now also available in a "Credits" tab in
the About dialog in the app. The old credits section of the "About" tab has been removed.
PR #1298.
* Fix a usability issue where double-clicking an entry in the Outline that belongs to a document
that is already open in the editor does nothing. Now, the app switches view to the editor when
the heading is clicked. Issue #1291. PR #1306.
* Change how the editing of status and importance labels work in Project Settings. The form at the
bottom of the tabs is now always active when a label is selected, and always inactive when none
is selected. Issue #1290. PR #1308.
**Internationalisation**
* Update Chinese translation. PR #1298.
* Update Norwegian, US English, German and Spanish translations. PR #1311.
**Other CHanges**
* An icon theme can now be loaded from the user's data folder alongside a custom user theme.
Issue #1297. PR #1299.
* Some Inkscape format SVG files have been converted to Plain SVG. PR #1299.
----
## Version 2.0.2 [2022-12-01]
### Release Notes
+22 -11
View File
@@ -4,14 +4,18 @@
* Veronica Berglyd Olsen (@vkbo)
## Main Contributors
## Contributors
* Concept: Marian Lückhof (@Number042)
* Internationalisation: Bruno Meneguello (@bkmeneguello)
* Setup and Packaging: Rachel Powers (@Ryex)
For other contributions, see the project's [Contributors](https://github.com/vkbo/novelWriter/graphs/contributors) page.
## Translations
The default language is English (UK) with English (US) as an option.
The default language is English (UK) with English (US) as an option. These are the original
translators for the languages currently available:
* Dutch: Martijn van der Kleijn (@mvdkleijn)
* French: Jan Lüdke (@jyhelle)
@@ -21,24 +25,31 @@ The default language is English (UK) with English (US) as an option.
* Portuguese: Bruno Meneguello (@bkmeneguello)
* Simplified Chinese: Qianzhi Long (@longqzh)
Additional larger translation contributions:
* French: Albert Aribaud (@aaribaud)
Translations are managed on [Crowdin](https://crowdin.com/project/novelwriter), and more
contributions are listed on the project's [Members](https://crowdin.com/project/novelwriter/members) page.
## Libraries
The following libraries are dependencies of novelWriter:
* Qt5 by [Qt Company](https://www.qt.io/)
* PyQt5 by [Riverbank Computing](https://www.riverbankcomputing.com/software/pyqt/)
* lxml by [Martijn Faassen](https://lxml.de/)
* Enchant by [Dom Lachowicz](https://abiword.github.io/enchant/)
* PyEnchant by [Dimitri Merejkowsky](https://pyenchant.github.io/pyenchant/)
* [Qt5](https://www.qt.io) by Qt Company
* [PyQt5](https://www.riverbankcomputing.com/software/pyqt) by Riverbank Computing
* [lxml](https://lxml.de) by Martijn Faassen
* [Enchant](https://abiword.github.io/enchant) by Dom Lachowicz
* [PyEnchant](https://pyenchant.github.io/pyenchant) by Dimitri Merejkowsky
## Assets
Some of the assets bundled with novelWriter were adapted from the following sources:
* Typicons icons by [Stephen Hutchings](https://github.com/stephenhutchings/typicons.font) (CC BY-SA 4.0)
* Tomorrow syntax themes by Chris Kempson (MIT License)
* Owl syntax themes by Sarah Drasner (MIT License)
* Solarized themes by Ethan Schoonover, added by @nullbasis (MIT License)
* [Typicons](https://github.com/stephenhutchings/typicons.font) icons by Stephen Hutchings (CC BY-SA 4.0)
* [Tomorrow](https://github.com/chriskempson/base16) syntax themes by Chris Kempson (MIT License)
* [Owl](https://github.com/sdras/night-owl-vscode-theme) syntax themes by Sarah Drasner (MIT License)
* [Solarized](https://github.com/altercation/solarized) themes by Ethan Schoonover (MIT License)
## Special Mentions
+9 -6
View File
@@ -52,14 +52,16 @@ modify it as you like.
`novelwriter/assets/syntax <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/syntax>`_.
* The existing GUI themes are stored in
`novelwriter/assets/themes <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/themes>`_.
* The existing icon themes are stored in
`novelwriter/assets/icons <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/icons>`_.
Remember to also change the name of your theme by modifying the ``name`` setting at the top of the
file, otherwise you may not be able to distinguish them in :guilabel:`Preferences`.
For novelWriter to be able to locate the custom theme files, you must copy them to the
:ref:`a_locations_data` location in your home or user area. There should be a folder there named
``syntax`` for syntax themes and just ``themes`` for GUI themes. These folders are created the
first time you start novelWriter.
``syntax`` for syntax themes, just ``themes`` for GUI themes, and ``icons`` for icon themes. These
folders are created the first time you start novelWriter.
Once the files are copied there, they should show up in :guilabel:`Preferences` with the label you
set as ``name`` inside the file.
@@ -70,8 +72,8 @@ set as ``name`` inside the file.
theme colour scheme.
Gustom GUI Theme
----------------
Gustom GUI and Icons Theme
--------------------------
A GUI theme conf file consists of the follwing settings:
@@ -109,8 +111,9 @@ A GUI theme conf file consists of the follwing settings:
statusunsaved = 100, 100, 100
In the Main section you must at least define the ``name`` and ``icontheme`` settings. The
``icontheme`` settings should correspond to one of the internal icon themes. Either
``typicons_light`` or ``typicons_dark``.
``icontheme`` settings should correspond to one of the internal icon themes, either
``typicons_light`` or ``typicons_dark``, or to an icon theme in your custom icons directory. The
setting must match the icon theme's folder name.
The Palette values correspond the the Qt enum values for QPalette::ColorRole, see the
`Qt documentation <https://doc.qt.io/qt-5.15/qpalette.html#ColorRole-enum>`_ for more details. The
+312 -356
View File
File diff suppressed because it is too large Load Diff
+314 -358
View File
File diff suppressed because it is too large Load Diff
+314 -358
View File
File diff suppressed because it is too large Load Diff
+358 -402
View File
File diff suppressed because it is too large Load Diff
+125 -169
View File
@@ -342,108 +342,56 @@
<context>
<name>GuiAbout</name>
<message>
<location filename="../novelwriter/dialogs/about.py" line="146" />
<location filename="../novelwriter/dialogs/about.py" line="150" />
<location filename="../novelwriter/dialogs/about.py" line="59" />
<source>About novelWriter</source>
<translation>À propos de novelWriter</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="94" />
<location filename="../novelwriter/dialogs/about.py" line="98" />
<source>About</source>
<translation>À propos</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="95" />
<location filename="../novelwriter/dialogs/about.py" line="99" />
<source>Release</source>
<translation>Version</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="225" />
<location filename="../novelwriter/dialogs/about.py" line="214" />
<location filename="../novelwriter/dialogs/about.py" line="203" />
<location filename="../novelwriter/dialogs/about.py" line="96" />
<source>Licence</source>
<translation>Licence</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="148" />
<source>Website: {0}</source>
<translation>Site Web : {0}</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="151" />
<location filename="../novelwriter/dialogs/about.py" line="100" />
<source>Credits</source>
<translation>Crédits</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="153" />
<source>Developer</source>
<translation>Développeur</translation>
<location filename="../novelwriter/dialogs/about.py" line="101" />
<source>Licence</source>
<translation>Licence</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="154" />
<source>Concept</source>
<translation>Concept</translation>
<location filename="../novelwriter/dialogs/about.py" line="152" />
<source>Website: {0}</source>
<translation>Site Web : {0}</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="155" />
<source>i18n</source>
<translation>Internationalisation</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="157" />
<source>novelWriter is a markdown-like text editor designed for organising and writing novels. It is written in Python 3 with a Qt5 GUI, using PyQt5.</source>
<translation>novelWriter est un éditeur markdown pour organiser et écrire des romans. Il est écrit en Python 3 avec un interface utilisateur Qt5, basé sur PyQt5.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="161" />
<location filename="../novelwriter/dialogs/about.py" line="159" />
<source>novelWriter is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</source>
<translation>novelWriter est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par la Free Software Foundation, dans la version 3 de cette licence ou (à votre choix) dans une version plus récente.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="167" />
<location filename="../novelwriter/dialogs/about.py" line="165" />
<source>novelWriter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</source>
<translation>novelWriter est diffusé dans l'espoir qu'il sera utile, mais SANS GARANTIE D'AUCUNE SORTE, en particulier concernant sa QUALITÉ MARCHANDE ou son APTITUDE À UN USAGE SPÉCIFIQUE.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="172" />
<location filename="../novelwriter/dialogs/about.py" line="170" />
<source>See the Licence tab for the full licence text, or visit the GNU website at {0} for more details.</source>
<translation>Ouvrez l'onglet Licence pour voir le texte complet de la licence (en anglais), ou visitez le site de GNU à l'adresse {0} pour en lire une traduction ou pour obtenir plus de détails.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="181" />
<source>Translations</source>
<translation>Traducteurs</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="199" />
<source>Theme: {0}</source>
<translation>Thème : {0}</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="223" />
<location filename="../novelwriter/dialogs/about.py" line="212" />
<location filename="../novelwriter/dialogs/about.py" line="201" />
<source>Author</source>
<translation>Auteur</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="224" />
<location filename="../novelwriter/dialogs/about.py" line="213" />
<location filename="../novelwriter/dialogs/about.py" line="202" />
<source>Credit</source>
<translation>Crédits</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="210" />
<source>Icons: {0}</source>
<translation>Icônes : {0}</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/about.py" line="221" />
<source>Syntax: {0}</source>
<translation>Syntaxe : {0}</translation>
</message>
</context>
<context>
<name>GuiBuildNovel</name>
@@ -2288,103 +2236,103 @@
<context>
<name>GuiPreferencesAutomation</name>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="940" />
<location filename="../novelwriter/dialogs/preferences.py" line="946" />
<source>Automatic Features</source>
<translation>Automatismes</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="946" />
<location filename="../novelwriter/dialogs/preferences.py" line="952" />
<source>Auto-select word under cursor</source>
<translation>Auto-sélection du mot sous le curseur</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="948" />
<location filename="../novelwriter/dialogs/preferences.py" line="954" />
<source>Apply formatting to word under cursor if no selection is made.</source>
<translation>En l'absence de texte sélectionné la mise en forme s'applique au mot sous le curseur.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="956" />
<location filename="../novelwriter/dialogs/preferences.py" line="962" />
<source>Auto-replace text as you type</source>
<translation>Auto-remplacement par la frappe</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="958" />
<location filename="../novelwriter/dialogs/preferences.py" line="964" />
<source>Allow the editor to replace symbols as you type.</source>
<translation>Permet à léditeur de remplacer les symboles au fur et à mesure de la frappe.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="963" />
<location filename="../novelwriter/dialogs/preferences.py" line="969" />
<source>Replace as You Type</source>
<translation>Remplacement par la frappe</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="970" />
<location filename="../novelwriter/dialogs/preferences.py" line="976" />
<source>Auto-replace single quotes</source>
<translation>Auto-remplacement des guillemets simples</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="982" />
<location filename="../novelwriter/dialogs/preferences.py" line="972" />
<location filename="../novelwriter/dialogs/preferences.py" line="988" />
<location filename="../novelwriter/dialogs/preferences.py" line="978" />
<source>Try to guess which is an opening or a closing quote.</source>
<translation>Tenter de deviner si un guillemet est ouvrant ou fermant.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="980" />
<location filename="../novelwriter/dialogs/preferences.py" line="986" />
<source>Auto-replace double quotes</source>
<translation>Auto-remplacement des guillemets doubles</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="990" />
<location filename="../novelwriter/dialogs/preferences.py" line="996" />
<source>Auto-replace dashes</source>
<translation>Auto-remplacement des tirets</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="992" />
<location filename="../novelwriter/dialogs/preferences.py" line="998" />
<source>Double and triple hyphens become short and long dashes.</source>
<translation>Deux ou trois tirets successifs deviennent des tirets moyens (semi-cadratins) ou longs (cadratins).</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1000" />
<location filename="../novelwriter/dialogs/preferences.py" line="1006" />
<source>Auto-replace dots</source>
<translation>Auto-remplacement des points</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1002" />
<location filename="../novelwriter/dialogs/preferences.py" line="1008" />
<source>Three consecutive dots become ellipsis.</source>
<translation>Trois points consécutifs deviennent des points de suspension.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1007" />
<location filename="../novelwriter/dialogs/preferences.py" line="1013" />
<source>Automatic Padding</source>
<translation>Insertion automatique</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1014" />
<location filename="../novelwriter/dialogs/preferences.py" line="1020" />
<source>Insert non-breaking space before</source>
<translation>Espace insécable avant</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1016" />
<location filename="../novelwriter/dialogs/preferences.py" line="1022" />
<source>Automatically add space before any of these symbols.</source>
<translation>Ajouter lors de la frappe une espace avant chacun de ces caractères.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1024" />
<location filename="../novelwriter/dialogs/preferences.py" line="1030" />
<source>Insert non-breaking space after</source>
<translation>Espace insécable après</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1026" />
<location filename="../novelwriter/dialogs/preferences.py" line="1032" />
<source>Automatically add space after any of these symbols.</source>
<translation>Ajouter lors de la frappe une espace après chacun de ces caractères.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1034" />
<location filename="../novelwriter/dialogs/preferences.py" line="1040" />
<source>Use thin space instead</source>
<translation>Utiliser des espaces fines</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1036" />
<location filename="../novelwriter/dialogs/preferences.py" line="1042" />
<source>Inserts a thin space instead of a regular space.</source>
<translation>Insérer une espace fine au lieu d'une espace-mot.</translation>
</message>
@@ -2810,47 +2758,47 @@
<context>
<name>GuiPreferencesQuotes</name>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1095" />
<location filename="../novelwriter/dialogs/preferences.py" line="1101" />
<source>Quotation Style</source>
<translation>Style de guillemets</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1112" />
<location filename="../novelwriter/dialogs/preferences.py" line="1118" />
<source>Single quote open style</source>
<translation>Guillemets simples ouvrants</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1114" />
<location filename="../novelwriter/dialogs/preferences.py" line="1120" />
<source>The symbol to use for a leading single quote.</source>
<translation>Symbole à utiliser pour un guillemet simple ouvrant.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1128" />
<location filename="../novelwriter/dialogs/preferences.py" line="1134" />
<source>Single quote close style</source>
<translation>Guillemets simples fermants</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1130" />
<location filename="../novelwriter/dialogs/preferences.py" line="1136" />
<source>The symbol to use for a trailing single quote.</source>
<translation>Symbole à utiliser pour un guillemet simple fermant.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1145" />
<location filename="../novelwriter/dialogs/preferences.py" line="1151" />
<source>Double quote open style</source>
<translation>Guillemets doubles ouvrants</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1147" />
<location filename="../novelwriter/dialogs/preferences.py" line="1153" />
<source>The symbol to use for a leading double quote.</source>
<translation>Symbole à utiliser pour un guillemet double ouvrant.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1161" />
<location filename="../novelwriter/dialogs/preferences.py" line="1167" />
<source>Double quote close style</source>
<translation>Guillemets doubles fermants</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="1163" />
<location filename="../novelwriter/dialogs/preferences.py" line="1169" />
<source>The symbol to use for a trailing double quote.</source>
<translation>Symbole à utiliser pour un guillemet double fermant.</translation>
</message>
@@ -2858,59 +2806,59 @@
<context>
<name>GuiPreferencesSyntax</name>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="839" />
<location filename="../novelwriter/dialogs/preferences.py" line="840" />
<source>Quotes &amp; Dialogue</source>
<translation>Dialogues et citations</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="845" />
<location filename="../novelwriter/dialogs/preferences.py" line="846" />
<source>Highlight text wrapped in quotes</source>
<translation>Mettre en évidence le texte situé entre des guillemets</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="888" />
<location filename="../novelwriter/dialogs/preferences.py" line="875" />
<location filename="../novelwriter/dialogs/preferences.py" line="847" />
<location filename="../novelwriter/dialogs/preferences.py" line="889" />
<location filename="../novelwriter/dialogs/preferences.py" line="876" />
<location filename="../novelwriter/dialogs/preferences.py" line="848" />
<source>Applies to the document editor only.</source>
<translation>Ne s'applique qu'à l'éditeur de document.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="853" />
<location filename="../novelwriter/dialogs/preferences.py" line="854" />
<source>Allow open-ended single quotes</source>
<translation>Autoriser les guillemets simples non fermés</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="855" />
<location filename="../novelwriter/dialogs/preferences.py" line="856" />
<source>Highlight single-quoted line with no closing quote.</source>
<translation>Mettre en évidence les lignes avec guillemet simple ouvrant et non fermées.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="861" />
<location filename="../novelwriter/dialogs/preferences.py" line="862" />
<source>Allow open-ended double quotes</source>
<translation>Autoriser les guillemets doubles non fermés</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="863" />
<location filename="../novelwriter/dialogs/preferences.py" line="864" />
<source>Highlight double-quoted line with no closing quote.</source>
<translation>Mettre en évidence les lignes avec guillemet double ouvrant et non fermées.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="868" />
<location filename="../novelwriter/dialogs/preferences.py" line="869" />
<source>Text Emphasis</source>
<translation>Texte appuyé</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="873" />
<location filename="../novelwriter/dialogs/preferences.py" line="874" />
<source>Add highlight colour to emphasised text</source>
<translation>Mettre en évidence le texte appuyé</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="881" />
<location filename="../novelwriter/dialogs/preferences.py" line="882" />
<source>Text Errors</source>
<translation>Erreurs de texte</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/preferences.py" line="886" />
<location filename="../novelwriter/dialogs/preferences.py" line="887" />
<source>Highlight multiple or trailing spaces</source>
<translation>Surligner les espaces multiples ou terminaux</translation>
</message>
@@ -3107,27 +3055,27 @@
<context>
<name>GuiProjectEditReplace</name>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="565" />
<location filename="../novelwriter/dialogs/projsettings.py" line="581" />
<source>Text Replace List for Preview and Export</source>
<translation>Remplacements dans le texte pour les aperçus et exportations</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="572" />
<location filename="../novelwriter/dialogs/projsettings.py" line="588" />
<source>Keyword</source>
<translation>Mot-clé</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="573" />
<location filename="../novelwriter/dialogs/projsettings.py" line="589" />
<source>Replace With</source>
<translation>Remplacer par</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="599" />
<location filename="../novelwriter/dialogs/projsettings.py" line="615" />
<source>Select item to edit</source>
<translation>Choisir l'élément à éditer</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="607" />
<location filename="../novelwriter/dialogs/projsettings.py" line="623" />
<source>Save</source>
<translation>Enregistrer</translation>
</message>
@@ -3155,7 +3103,7 @@
<translation>Utilisation</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="342" />
<location filename="../novelwriter/dialogs/projsettings.py" line="341" />
<source>Select item to edit</source>
<translation>Choisir l'élément à éditer</translation>
</message>
@@ -3165,37 +3113,37 @@
<translation>Couleur</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="350" />
<location filename="../novelwriter/dialogs/projsettings.py" line="351" />
<source>Save</source>
<translation>Enregistrer</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="410" />
<location filename="../novelwriter/dialogs/projsettings.py" line="413" />
<source>Select Colour</source>
<translation>Choisir la couleur</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="423" />
<location filename="../novelwriter/dialogs/projsettings.py" line="427" />
<source>New Item</source>
<translation>Nouvel élément</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="436" />
<location filename="../novelwriter/dialogs/projsettings.py" line="439" />
<source>Cannot delete a status item that is in use.</source>
<translation>On ne peut pas retirer un élément tant qu'il est utilisé.</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="539" />
<location filename="../novelwriter/dialogs/projsettings.py" line="555" />
<source>Not in use</source>
<translation>Inutilisé</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="541" />
<location filename="../novelwriter/dialogs/projsettings.py" line="557" />
<source>Used once</source>
<translation>Utilisé une fois</translation>
</message>
<message>
<location filename="../novelwriter/dialogs/projsettings.py" line="543" />
<location filename="../novelwriter/dialogs/projsettings.py" line="559" />
<source>Used by {0} items</source>
<translation>Utilisé {0} fois</translation>
</message>
@@ -3470,79 +3418,82 @@
<translation>Transformer</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1273" />
<location filename="../novelwriter/gui/projtree.py" line="1267" />
<location filename="../novelwriter/gui/projtree.py" line="1261" />
<location filename="../novelwriter/gui/projtree.py" line="1255" />
<source>Convert to {0}</source>
<translation>Convertir en {0}</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1267" />
<location filename="../novelwriter/gui/projtree.py" line="1279" />
<source>Merge Child Items into Self</source>
<translation>Intégrer les éléments enfants</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1269" />
<location filename="../novelwriter/gui/projtree.py" line="1281" />
<source>Merge Child Items into New</source>
<translation>Créer une fusion des éléments enfants</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1273" />
<location filename="../novelwriter/gui/projtree.py" line="1285" />
<source>Merge Documents in Folder</source>
<translation>Fusionner des documents du dossier</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1277" />
<location filename="../novelwriter/gui/projtree.py" line="1289" />
<source>Split Document by Headers</source>
<translation>Diviser le document selon les en-têtes</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1286" />
<location filename="../novelwriter/gui/projtree.py" line="1298" />
<source>Expand All</source>
<translation>Tout développer</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1288" />
<location filename="../novelwriter/gui/projtree.py" line="1300" />
<source>Collapse All</source>
<translation>Tout refermer</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1292" />
<location filename="../novelwriter/gui/projtree.py" line="1304" />
<source>Delete Permanently</source>
<translation>Supprimer définitivement</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1295" />
<location filename="../novelwriter/gui/projtree.py" line="1307" />
<source>Move to Trash</source>
<translation>Déplacer vers la corbeille</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1483" />
<location filename="../novelwriter/gui/projtree.py" line="1495" />
<source>Convert Folder</source>
<translation>Convertir le dossier</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1484" />
<location filename="../novelwriter/gui/projtree.py" line="1496" />
<source>Do you want to convert the folder to a {0}? This action cannot be reversed.</source>
<translation>Voulez-vous convertir le dossier en {0}? Cette action est irréversible.</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1529" />
<location filename="../novelwriter/gui/projtree.py" line="1541" />
<source>No documents selected for merging.</source>
<translation>Aucun document n'a été sélectionné pour la fusion.</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1538" />
<location filename="../novelwriter/gui/projtree.py" line="1550" />
<source>Merged</source>
<translation>Fusionné</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1618" />
<location filename="../novelwriter/gui/projtree.py" line="1554" />
<location filename="../novelwriter/gui/projtree.py" line="1630" />
<location filename="../novelwriter/gui/projtree.py" line="1566" />
<source>Could not write document content.</source>
<translation>Impossible d'écrire le contenu du document.</translation>
</message>
<message>
<location filename="../novelwriter/gui/projtree.py" line="1678" />
<location filename="../novelwriter/gui/projtree.py" line="1707" />
<location filename="../novelwriter/gui/projtree.py" line="1690" />
<source>There is nowhere to add item with name '{0}'.</source>
<translation>Il n'y a pas d'emplacement pour ajouter l'item nommé '{0}'.</translation>
</message>
@@ -3829,163 +3780,168 @@
<translation>Impossible de supprimer le fichier du document.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="288" />
<location filename="../novelwriter/core/project.py" line="254" />
<source>Could not open project with path: {0}</source>
<translation type="unfinished" />
</message>
<message>
<location filename="../novelwriter/core/project.py" line="291" />
<source>Unknown</source>
<translation>Inconnu</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="292" />
<location filename="../novelwriter/core/project.py" line="295" />
<source>Project file does not appear to be a novelWriterXML file.</source>
<translation>Ce fichier projet ne semble pas être un fichier novelWriterXML.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="296" />
<location filename="../novelwriter/core/project.py" line="299" />
<source>Unknown or unsupported novelWriter project file format. The project cannot be opened by this version of novelWriter. The file was saved with novelWriter version {0}.</source>
<translation>Format de projet novelWriter inconnu ou non supporté. Ce projet ne peut pas être ouvert avec cette version de novelWriter, il a été enregistré avec novelWriter version {0}.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="302" />
<location filename="../novelwriter/core/project.py" line="305" />
<source>Failed to parse project xml.</source>
<translation>Impossible de décoder le xml du projet.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="314" />
<location filename="../novelwriter/core/project.py" line="317" />
<source>File Version</source>
<translation>Version du fichier</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="315" />
<location filename="../novelwriter/core/project.py" line="318" />
<source>The file format of your project is about to be updated. If you proceed, older versions of novelWriter will no longer be able to open this project. Continue?</source>
<translation>Le format de fichier de votre projet est sur le point d'être mis à jour. Si vous continuez, les anciennes versions de novelWriter ne pourront plus ouvrir ce projet. Continuer ?</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="330" />
<location filename="../novelwriter/core/project.py" line="333" />
<source>Version Conflict</source>
<translation>Conflit de version</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="331" />
<location filename="../novelwriter/core/project.py" line="334" />
<source>This project was saved by a newer version of novelWriter, version {0}. This is version {1}. If you continue to open the project, some attributes and settings may not be preserved, but the overall project should be fine. Continue opening the project?</source>
<translation>Ce projet a é enregistré par une version plus récente de novelWriter, la version {0}. Ceci est la version {1}. Si vous ouvrez quand même ce projet, certaines propriétés ou certains réglages risquent d'être perdus, toutefois le projet dans son ensemble devrait être intact. Voulez-vous quand même ouvrir ce projet ?</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="375" />
<location filename="../novelwriter/core/project.py" line="378" />
<source>Opened Project: {0}</source>
<translation>Projet ouvert : {0}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="386" />
<location filename="../novelwriter/core/project.py" line="389" />
<source>There is no project open.</source>
<translation>Aucun projet n'est ouvert.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="411" />
<location filename="../novelwriter/core/project.py" line="414" />
<source>Failed to save project.</source>
<translation>Impossible d'enregistrer le projet.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="427" />
<location filename="../novelwriter/core/project.py" line="430" />
<source>Saved Project: {0}</source>
<translation>Projet enregistré : {0}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="453" />
<location filename="../novelwriter/core/project.py" line="456" />
<source>Backing up project ...</source>
<translation>Sauvegarde du projet en cours ...</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="457" />
<location filename="../novelwriter/core/project.py" line="460" />
<source>Cannot backup project because no valid backup path is set. Please set a valid backup location in Preferences.</source>
<translation>Il est impossible de sauvegarder ce projet car aucun emplacement de sauvegarde n'a é défini. Veuillez en définir un dans Outils Préférences.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="464" />
<location filename="../novelwriter/core/project.py" line="467" />
<source>Cannot backup project because no project name is set. Please set a Project Name in Project Settings.</source>
<translation>Il est impossible de sauvegarder le projet car il n'a pas reçu de nom. Veuillez remplir le nom dans les paramètres du projet.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="475" />
<location filename="../novelwriter/core/project.py" line="478" />
<source>Could not create backup folder.</source>
<translation>Il n'a pas é possible de créer le répertoire de sauvegarde.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="480" />
<location filename="../novelwriter/core/project.py" line="483" />
<source>Backup from {0}</source>
<translation>Sauvegarde depuis {0}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="485" />
<location filename="../novelwriter/core/project.py" line="488" />
<source>Backup archive file written to: {0}</source>
<translation>Archivage du fichier de sauvegarde effectué en : {0}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="489" />
<location filename="../novelwriter/core/project.py" line="492" />
<source>Could not write backup archive.</source>
<translation>Il n'a pas été possible d'écrire l'archive de sauvegarde.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="494" />
<location filename="../novelwriter/core/project.py" line="497" />
<source>Project backed up to '{0}'</source>
<translation>Projet sauvegardé dans {0}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="511" />
<location filename="../novelwriter/core/project.py" line="507" />
<location filename="../novelwriter/core/project.py" line="514" />
<location filename="../novelwriter/core/project.py" line="510" />
<source>New</source>
<translation>Nouveau</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="508" />
<location filename="../novelwriter/core/project.py" line="511" />
<source>Note</source>
<translation>Note</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="509" />
<location filename="../novelwriter/core/project.py" line="512" />
<source>Draft</source>
<translation>Brouillon</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="510" />
<location filename="../novelwriter/core/project.py" line="513" />
<source>Finished</source>
<translation>Terminé</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="512" />
<location filename="../novelwriter/core/project.py" line="515" />
<source>Minor</source>
<translation>Mineur</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="513" />
<location filename="../novelwriter/core/project.py" line="516" />
<source>Major</source>
<translation>Majeur</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="514" />
<location filename="../novelwriter/core/project.py" line="517" />
<source>Main</source>
<translation>Principal</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="735" />
<location filename="../novelwriter/core/project.py" line="738" />
<source>Found {0} orphaned file(s) in project folder.</source>
<translation>Trouvé {0} fichier(s) orphelin(s) dans le dossier du projet.</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="745" />
<location filename="../novelwriter/core/project.py" line="748" />
<source>Recovered</source>
<translation>Récupéré</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="759" />
<location filename="../novelwriter/core/project.py" line="762" />
<source>[{0}] {1}</source>
<translation>[{0}] {1}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="764" />
<location filename="../novelwriter/core/project.py" line="767" />
<source>Recovered File {0}</source>
<translation>Fichier récupéré {0}</translation>
</message>
<message>
<location filename="../novelwriter/core/project.py" line="792" />
<location filename="../novelwriter/core/project.py" line="795" />
<source>One or more orphaned files could not be added back into the project. Make sure at least a Novel root folder exists.</source>
<translation>Un ou plusieurs fichiers orphelins n'ont pas pu être repris dans le projet. Vérifiez qu'il y a au moins un dossier racine Roman.</translation>
</message>
+314 -358
View File
File diff suppressed because it is too large Load Diff
+314 -358
View File
File diff suppressed because it is too large Load Diff
+314 -358
View File
File diff suppressed because it is too large Load Diff
+358 -402
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -54,14 +54,14 @@ from novelwriter.config import Config
##
__package__ = "novelwriter"
__copyright__ = "Copyright 20182022, Veronica Berglyd Olsen"
__copyright__ = "Copyright 20182023, Veronica Berglyd Olsen"
__license__ = "GPLv3"
__author__ = "Veronica Berglyd Olsen"
__maintainer__ = "Veronica Berglyd Olsen"
__email__ = "code@vkbo.net"
__version__ = "2.0.2"
__hexversion__ = "0x020002f0"
__date__ = "2022-12-01"
__version__ = "2.0.3"
__hexversion__ = "0x020003f0"
__date__ = "2023-01-08"
__status__ = "Stable"
__domain__ = "novelwriter.io"
__url__ = "https://novelwriter.io"
@@ -1,37 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg7536"
sodipodi:docname="mixed_edit.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview1259"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="34.625"
inkscape:cx="8.7364621"
inkscape:cy="11.98556"
inkscape:window-width="2560"
inkscape:window-height="1330"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg7536" />
id="svg7536">
<metadata
id="metadata7542">
<rdf:RDF>
@@ -40,6 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -25,10 +25,9 @@
</rdf:RDF>
</metadata>
<path
d="m2 17.714v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h11.429c2.3629 0 4.2857 1.9229 4.2857 4.2857v7.1429c0 0.79-0.64 1.4286-1.4286 1.4286-0.78857 0-1.4286-0.63857-1.4286-1.4286v-7.1429c0-0.78857-0.64143-1.4286-1.4286-1.4286h-11.429c-0.78714 0-1.4286 0.64-1.4286 1.4286v11.429c0 0.78857 0.64143 1.4286 1.4286 1.4286h4.2857c0.78857 0 1.4286 0.63857 1.4286 1.4286s-0.64 1.4286-1.4286 1.4286h-4.2857c-2.3629 0-4.2857-1.9229-4.2857-4.2857zm15.714 4.2857h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
fill="#848484"
stroke-width="1.4286"
id="path2927" />
id="path2927"
style="fill:#848484;fill-opacity:1"
d="M 6.2851562,2 C 3.9296438,1.9318024 1.8530839,4.1116184 2,6.4548618 2.0068983,10.304935 1.9861657,14.15563 2.0104329,18.005313 2.1401885,20.174302 4.0868901,22.059322 6.2851562,22 c 3.8832648,-0.0037 7.7667178,0.0074 11.6498648,-0.0056 C 20.253096,21.935675 22.190613,19.73469 22,17.432001 21.996299,13.643017 22.007418,9.8538453 21.994414,6.0649793 21.935675,3.7469037 19.734691,1.8093866 17.432001,2 13.716386,2 10.000771,2 6.2851562,2 Z m 7.1621098,2.8554688 c 1.517767,0.018193 3.040205,-0.037158 4.55493,0.029088 0.831903,0.1432784 1.247019,1.0200413 1.140382,1.796579 -0.0049,3.726426 0.0098,7.453347 -0.0074,11.179464 -0.06228,0.897202 -0.990183,1.406807 -1.816343,1.281978 -3.726391,-0.005 -7.4532932,0.0099 -11.1793638,-0.0075 -0.8893499,-0.06498 -1.4061831,-0.991209 -1.2820783,-1.81622 0.00424,-3.720679 -0.00847,-7.4417768 0.00635,-11.1621953 0.056947,-0.8627405 0.9413144,-1.4230927 1.7608001,-1.2992468 2.2741995,-0.00131 4.5486615,0.00261 6.8226985,-0.00195 z" />
<rect
x="7"
y="10.1"

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="arrow-maximise.svg"
id="svg7486"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs7490" />
<sodipodi:namedview
inkscape:current-layer="svg7486"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview7488"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="stroke-width:1.25;fill:#6699cc;fill-opacity:1"
id="path7484"

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="arrow-minimise.svg"
id="svg8816"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs8820" />
<sodipodi:namedview
inkscape:current-layer="svg8816"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview8818"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#6699cc;fill-opacity:1;stroke-width:1.24999"
id="path8814"

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="refresh.svg"
id="svg6649"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs6653" />
<sodipodi:namedview
inkscape:current-layer="svg6649"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview6651"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#99cc99;fill-opacity:1;stroke-width:1.33321"
id="path6647"

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -5,35 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg5291"
sodipodi:docname="status_lines-dark.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1344"
id="namedview6681"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12.065574"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg5291" />
id="svg5291">
<metadata
id="metadata5297">
<rdf:RDF>
@@ -42,7 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,37 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg7536"
sodipodi:docname="mixed_edit.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview1259"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="34.625"
inkscape:cx="3.1913357"
inkscape:cy="11.98556"
inkscape:window-width="2560"
inkscape:window-height="1330"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg7536" />
id="svg7536">
<metadata
id="metadata7542">
<rdf:RDF>
@@ -40,6 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -25,10 +25,9 @@
</rdf:RDF>
</metadata>
<path
d="m2 17.714v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h11.429c2.3629 0 4.2857 1.9229 4.2857 4.2857v7.1429c0 0.79-0.64 1.4286-1.4286 1.4286-0.78857 0-1.4286-0.63857-1.4286-1.4286v-7.1429c0-0.78857-0.64143-1.4286-1.4286-1.4286h-11.429c-0.78714 0-1.4286 0.64-1.4286 1.4286v11.429c0 0.78857 0.64143 1.4286 1.4286 1.4286h4.2857c0.78857 0 1.4286 0.63857 1.4286 1.4286s-0.64 1.4286-1.4286 1.4286h-4.2857c-2.3629 0-4.2857-1.9229-4.2857-4.2857zm15.714 4.2857h-11.429c-2.3629 0-4.2857-1.9229-4.2857-4.2857v-11.429c0-2.3629 1.9229-4.2857 4.2857-4.2857h7.1429c0.79 0 1.4286 0.64 1.4286 1.4286 0 0.78857-0.63857 1.4286-1.4286 1.4286h-7.1429c-0.78857 0-1.4286 0.64143-1.4286 1.4286v11.429c0 0.78714 0.64 1.4286 1.4286 1.4286h11.429c0.78857 0 1.4286-0.64143 1.4286-1.4286v-4.2857c0-0.78857 0.63857-1.4286 1.4286-1.4286s1.4286 0.64 1.4286 1.4286v4.2857c0 2.3629-1.9229 4.2857-4.2857 4.2857z"
fill="#333"
stroke-width="1.4286"
id="path969" />
id="path969"
style="fill:#333333;fill-opacity:1"
d="M 6.2851562,2 C 3.9296438,1.9318024 1.8530839,4.1116184 2,6.4548618 2.0068983,10.304935 1.9861657,14.15563 2.0104329,18.005313 2.1401885,20.174302 4.0868901,22.059322 6.2851562,22 c 3.8832648,-0.0037 7.7667178,0.0074 11.6498648,-0.0056 C 20.253096,21.935675 22.190613,19.73469 22,17.432001 21.996299,13.643017 22.007418,9.8538453 21.994414,6.0649793 21.935675,3.7469037 19.734691,1.8093866 17.432001,2 13.716386,2 10.000771,2 6.2851562,2 Z m 7.1621098,2.8554688 c 1.517767,0.018193 3.040205,-0.037158 4.55493,0.029088 0.831903,0.1432784 1.247019,1.0200413 1.140382,1.796579 -0.0049,3.726426 0.0098,7.453347 -0.0074,11.179464 -0.06228,0.897202 -0.990183,1.406807 -1.816343,1.281978 -3.726391,-0.005 -7.4532932,0.0099 -11.1793638,-0.0075 -0.8893499,-0.06498 -1.4061831,-0.991209 -1.2820783,-1.81622 0.00424,-3.720679 -0.00847,-7.4417768 0.00635,-11.1621953 0.056947,-0.8627405 0.9413144,-1.4230927 1.7608001,-1.2992468 2.2741995,-0.00131 4.5486615,0.00261 6.8226985,-0.00195 z" />
<rect
x="7"
y="10.1"

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -5,15 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg7486"
sodipodi:docname="arrow-maximise.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
id="svg7486">
<metadata
id="metadata7492">
<rdf:RDF>
@@ -28,27 +24,6 @@
</metadata>
<defs
id="defs7490" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1370"
id="namedview7488"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="1"
inkscape:window-maximized="1"
inkscape:current-layer="svg7486" />
<path
d="m 15.75,2 c -0.69125,0 -1.25,0.56 -1.25,1.25 0,0.69 0.55875,1.25 1.25,1.25 h 1.9825 l -4.11625,4.11625 c -0.48875,0.48875 -0.48875,1.27875 0,1.7675 C 13.86,10.6275 14.18,10.75 14.5,10.75 c 0.32,0 0.64,-0.1225 0.88375,-0.36625 L 19.5,6.2675 V 8.25 c 0,0.69 0.55875,1.25 1.25,1.25 C 21.44125,9.5 22,8.94 22,8.25 V 2 Z M 8.61625,13.61625 4.5,17.7325 V 15.75 C 4.5,15.06 3.94125,14.5 3.25,14.5 2.55875,14.5 2,15.06 2,15.75 v 6.24875 H 3.245 L 8.25,22 C 8.94,22 9.5,21.44 9.5,20.75 9.5,20.06 8.94125,19.5 8.25,19.5 H 6.2675 l 4.11625,-4.115 c 0.48875,-0.48875 0.48875,-1.27875 0,-1.7675 C 9.895,13.12875 9.105,13.1275 8.61625,13.6163 Z M 5.75,12 C 6.44,12 7,11.44 7,10.75 V 7 h 3.75 C 11.44125,7 12,6.44 12,5.75 12,5.06 11.44125,4.5 10.75,4.5 H 4.50125 L 4.5,10.75 C 4.5,11.44 5.05875,12 5.75,12 Z m 12.5,0 C 17.55875,12 17,12.56 17,13.25 V 17 H 13.25 C 12.55875,17 12,17.56 12,18.25 c 0,0.69 0.55875,1.25 1.25,1.25 H 19.5 V 13.25 C 19.5,12.56 18.94125,12 18.25,12 Z"
id="path7484"

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -5,10 +5,6 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="arrow-minimise.svg"
id="svg8816"
viewBox="0 0 24 24"
height="24"
@@ -28,26 +24,6 @@
</metadata>
<defs
id="defs8820" />
<sodipodi:namedview
inkscape:current-layer="svg8816"
inkscape:window-maximized="1"
inkscape:window-y="1"
inkscape:window-x="2560"
inkscape:cy="12"
inkscape:cx="12"
inkscape:zoom="38.125"
showgrid="false"
id="namedview8818"
inkscape:window-height="1370"
inkscape:window-width="2560"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#4271ae;fill-opacity:1;stroke-width:1.24999"
id="path8814"

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -1,34 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1169"
sodipodi:docname="typ_export.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview2676"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="34.625"
inkscape:cx="6.4259928"
inkscape:cy="11.98556"
inkscape:window-width="2560"
inkscape:window-height="1330"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1169" />
id="svg1169">
<metadata
id="metadata13645">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs1173" />
<path

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -5,15 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg6649"
sodipodi:docname="refresh.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
id="svg6649">
<metadata
id="metadata6655">
<rdf:RDF>
@@ -28,27 +24,6 @@
</metadata>
<defs
id="defs6653" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1370"
id="namedview6651"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="1"
inkscape:window-maximized="1"
inkscape:current-layer="svg6649" />
<path
d="M 13.162667,12.25611 H 20 V 5.4213831 C 19.989333,3.9083317 19.105333,3.5443996 18.036,4.6148668 L 16.497333,6.1585791 C 15.144,5.0987766 13.488,4.5188846 11.742667,4.5188846 9.676,4.5188846 7.7306667,5.3240679 6.2706667,6.7864621 4.8053333,8.242191 4,10.189828 4,12.25611 4,14.326391 4.8053333,16.271361 6.268,17.731089 7.7306667,19.193484 9.674667,20 11.742667,20 c 2.066666,0 4.012,-0.806516 5.474666,-2.270244 0.394667,-0.395926 0.744,-0.827845 1.04,-1.286427 C 18.72,15.72213 18.510667,14.763642 17.790667,14.303728 17.072,13.842481 16.113333,14.051775 15.652,14.770308 c -0.177333,0.275948 -0.389333,0.533234 -0.624,0.773189 -0.878667,0.87717 -2.045333,1.359747 -3.285333,1.359747 -1.24,0 -2.406667,-0.481244 -3.285334,-1.359747 -0.8759997,-0.87717 -1.3599997,-2.043619 -1.3599997,-3.286054 0,-1.239769 0.4826667,-2.406219 1.3599997,-3.280722 0.878667,-0.87717 2.045334,-1.36108 3.285334,-1.36108 0.917333,0 1.794666,0.26795 2.545333,0.762525 l -1.930667,1.934306 c -1.070666,1.069134 -0.706666,1.943638 0.805334,1.943638 z"
id="path6647"

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -5,35 +5,11 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg5291"
sodipodi:docname="status_lines.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1344"
id="namedview7270"
showgrid="false"
inkscape:zoom="38.125"
inkscape:cx="12.065574"
inkscape:cy="12"
inkscape:window-x="2560"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg5291" />
id="svg5291">
<metadata
id="metadata5297">
<rdf:RDF>
@@ -42,7 +18,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

+69
View File
@@ -0,0 +1,69 @@
<!DOCTYPE html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
<h2>Credits</h2>
<h3>Main Developer</h3>
<p>Veronica Berglyd Olsen (<a href="https://github.com/vkbo">@vkbo</a>)</p>
<h3>Contributors</h3>
<p>
<b>Concept:</b> Marian Lückhof (<a href="https://github.com/Number042">@Number042</a>)<br>
<b>Internationalisation:</b> Bruno Meneguello (<a href="https://github.com/bkmeneguello">@bkmeneguello</a>)<br>
<b>Setup and Packaging:</b> Rachel Powers (<a href="https://github.com/Ryex">@Ryex</a>)
</p>
<p>For other contributions, see the project's
<a href="https://github.com/vkbo/novelWriter/graphs/contributors">Contributors</a> page.</p>
<h3>Translations</h3>
<p>The default language is English (UK) with English (US) as an option. These are the original
translators for the languages currently available:</p>
<p>
<b>Dutch:</b> Martijn van der Kleijn (<a href="https://github.com/mvdkleijn">@mvdkleijn</a>)<br>
<b>French:</b> Jan Lüdke (<a href="https://github.com/jyhelle">@jyhelle</a>)<br>
<b>German:</b> Myian (<a href="https://github.com/heymyian">@heymyian</a>)<br>
<b>Latin American Spanish:</b> Tommy Marplatt (<a href="https://github.com/tmarplatt">@tmarplatt</a>)<br>
<b>Norwegian:</b> Veronica Berglyd Olsen (<a href="https://github.com/vkbo">@vkbo</a>)<br>
<b>Portuguese:</b> Bruno Meneguello (<a href="https://github.com/bkmeneguello">@bkmeneguello</a>)<br>
<b>Simplified Chinese:</b> Qianzhi Long (<a href="https://github.com/longqzh">@longqzh</a>)
</p>
<p>Additional larger translation contributions:</p>
<p>
<b>French:</b> Albert Aribaud (<a href="https://github.com/aaribaud">@aaribaud</a>)
</p>
<p>Translations are managed on <a href="https://crowdin.com/project/novelwriter">Crowdin</a>, and
more contributions are listed on the project's <a href="https://crowdin.com/project/novelwriter/members">Members</a> page.</p>
<h3>Libraries</h3>
<p>The following libraries are dependencies of novelWriter:</p>
<p>
<a href="https://www.qt.io">Qt5</a> by Qt Company<br>
<a href="https://www.riverbankcomputing.com/software/pyqt">PyQt5</a> by Riverbank Computing<br>
<a href="https://lxml.de">lxml</a> by Martijn Faassen<br>
<a href="https://abiword.github.io/enchant">Enchant</a> by Dom Lachowicz<br>
<a href="https://pyenchant.github.io/pyenchant">PyEnchant</a> by Dimitri Merejkowsky
</p>
<h3>Assets</h3>
<p>Some of the assets bundled with novelWriter were adapted from the following sources:</p>
<p>
<a href="https://github.com/stephenhutchings/typicons.font">Typicons</a> icons by Stephen Hutchings (CC BY-SA 4.0)<br>
<a href="https://github.com/chriskempson/base16">Tomorrow</a> syntax themes by Chris Kempson (MIT License)<br>
<a href="https://github.com/sdras/night-owl-vscode-theme">Owl</a> syntax themes by Sarah Drasner (MIT License)<br>
<a href="https://github.com/altercation/solarized">Solarized</a> themes by Ethan Schoonover (MIT License)
</p>
<h3>Special Mentions</h3>
<p>Additional thanks to <a href="https://github.com/johnblommers">@johnblommers</a> who was an early user and who has provided a lot
of very useful feedback over the years.</p>
</body>
</html>
+10
View File
@@ -99,5 +99,15 @@ been updated to include the icon theme setting. The patch also updates the Frenc
<p>This is a patch release that fixes a minor issues with syntax highlighting not updating when the
highlighting preferences were changed. It also fixes an issue that broke the FreeBSD release.</p>
<h3>Patch 2.0.3 &ndash; 8 January 2023</h3>
<p>This is a patch release that fixes a few bugs and usability issues. The editing of status and
importance labels in Project Settings should now be a bit more intuitive. Opening a document from
the Outline View that is already open in the editor should now switch to the editor view. The
convert folder to note or document feature in the project tree has also been fixed. Some icons have
been updated and a renderring issue with one of them fixed. Chinese, Norwegian, US English, German
and Spanish translations have been updated as well. A new credits tab has been added to the About
dialog box, replacing the Credits section on the main About tab.</p>
</body>
</html>
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-12 [0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+3 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -461,10 +461,11 @@ class Config:
self._confPath.mkdir(exist_ok=True)
self._dataPath.mkdir(exist_ok=True)
# Also create the syntax and themes folders if possible
# Also create the syntax, themes and icons folders if possible
if self._dataPath.is_dir():
(self._dataPath / "syntax").mkdir(exist_ok=True)
(self._dataPath / "themes").mkdir(exist_ok=True)
(self._dataPath / "icons").mkdir(exist_ok=True)
# Check if config file exists, and load it. If not, we save defaults
if (self._confPath / nwFiles.CONF_FILE).is_file():
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-28 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2022-10-02 [2.0rc1] DocMerger
Created: 2022-10-11 [2.0rc1] DocSplitter
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -12,7 +12,7 @@ Created: 2022-05-29 [2.0rc1] TagsIndex
Created: 2022-05-29 [2.0rc1] ItemIndex
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-10-27 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2019-10-21 [0.3.1]
Rewritten: 2020-02-19 [0.4.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+4 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -251,6 +251,9 @@ class NWProject(QObject):
"""
self.clearProject()
if not self._storage.openProjectInPlace(projPath):
self.mainGui.makeAlert(self.tr(
"Could not open project with path: {0}"
).format(projPath), nwAlert.ERROR)
return False
logger.info("Opening project: %s", projPath)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-10-30 [2.0rc2]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -9,7 +9,7 @@ Created: 2022-09-28 [2.0rc2] ProjectXMLReader
Created: 2022-10-31 [2.0rc2] ProjectXMLWriter
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-06-11 [0.1.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2019-05-19 [0.1.3]
Rewritten: 2022-04-05 [2.0b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+8 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-11-01 [2.0rc2] NWStorage
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -102,6 +102,10 @@ class NWStorage:
# but it can point to a folder containing files
inPath = inPath.parent
if not (inPath.is_dir() or newProject):
# If the project is not new, the folder must already exist.
return False
self._storagePath = inPath
self._runtimePath = inPath
self._lockFilePath = inPath / nwFiles.PROJ_LOCK
@@ -114,7 +118,9 @@ class NWStorage:
return True
def openProjectArchive(self, path): # pragma: no cover
pass
"""Placeholder for later implementation. See #977.
"""
return False
def runPostSaveTasks(self, autoSave=False): # pragma: no cover
"""Run tasks after the project has been saved.
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-07 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-05 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-02-06 [1.2b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-01-26 [1.2b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-07 [0.4.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -9,7 +9,7 @@ Created: 2020-05-03 [0.4.5] QSwitch
Created: 2020-05-17 [0.5.1] PagedDialog
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+19 -71
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-21 [0.5.2]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -85,6 +85,10 @@ class GuiAbout(QDialog):
self.pageNotes.setOpenExternalLinks(True)
self.pageNotes.document().setDocumentMargin(self.mainConf.pxInt(16))
self.pageCredits = QTextBrowser()
self.pageCredits.setOpenExternalLinks(True)
self.pageCredits.document().setDocumentMargin(self.mainConf.pxInt(16))
self.pageLicense = QTextBrowser()
self.pageLicense.setOpenExternalLinks(True)
self.pageLicense.document().setDocumentMargin(self.mainConf.pxInt(16))
@@ -93,6 +97,7 @@ class GuiAbout(QDialog):
self.tabBox = QTabWidget()
self.tabBox.addTab(self.pageAbout, self.tr("About"))
self.tabBox.addTab(self.pageNotes, self.tr("Release"))
self.tabBox.addTab(self.pageCredits, self.tr("Credits"))
self.tabBox.addTab(self.pageLicense, self.tr("Licence"))
self.innerBox.addWidget(self.tabBox)
@@ -115,6 +120,7 @@ class GuiAbout(QDialog):
self._setStyleSheet()
self._fillAboutPage()
self._fillNotesPage()
self._fillCreditsPage()
self._fillLicensePage()
qApp.restoreOverrideCursor()
return
@@ -140,20 +146,12 @@ class GuiAbout(QDialog):
"<p>{license1}</p>"
"<p>{license2}</p>"
"<p>{license3}</p>"
"<h3>{title2}</h3>"
"<p>{credits}</p>"
).format(
title1=self.tr("About novelWriter"),
copy=novelwriter.__copyright__,
link=self.tr("Website: {0}").format(
f"<a href='{novelwriter.__url__}'>{novelwriter.__domain__}</a>"
),
title2=self.tr("Credits"),
credits=self._wrapTable([
(self.tr("Developer"), "Veronica Berglyd Olsen"),
(self.tr("Concept"), "Veronica Berglyd Olsen, Marian Lückhof"),
(self.tr("i18n"), "Bruno Meneguello"),
]),
intro=self.tr(
"novelWriter is a markdown-like text editor designed for organising and "
"writing novels. It is written in Python 3 with a Qt5 GUI, using PyQt5."
@@ -177,55 +175,6 @@ class GuiAbout(QDialog):
),
)
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Translations"),
self._wrapTable([
("Deutsch", "Myian"),
("English", "Veronica Berglyd Olsen"),
("Español Latinoamericano", "Tommy Marplatt"),
("Français", "Jan Lüdke (jyhelle)"),
("Nederlands", "Martijn van der Kleijn"),
("Norsk Bokmål", "Veronica Berglyd Olsen"),
("Português", "Bruno Meneguello"),
("简体中文", "Qianzhi Long"),
])
)
mainTheme = self.mainGui.mainTheme
iconCache = self.mainGui.mainTheme.iconCache
if mainTheme.themeName and mainTheme.themeAuthor != "N/A":
licURL = f"<a href='{mainTheme.themeLicenseUrl}'>{mainTheme.themeLicense}</a>"
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Theme: {0}").format(mainTheme.themeName),
self._wrapTable([
(self.tr("Author"), mainTheme.themeAuthor),
(self.tr("Credit"), mainTheme.themeCredit),
(self.tr("Licence"), licURL),
])
)
if iconCache.themeName:
licURL = f"<a href='{iconCache.themeLicenseUrl}'>{iconCache.themeLicense}</a>"
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Icons: {0}").format(iconCache.themeName),
self._wrapTable([
(self.tr("Author"), iconCache.themeAuthor),
(self.tr("Credit"), iconCache.themeCredit),
(self.tr("Licence"), licURL),
])
)
if mainTheme.syntaxName:
licURL = f"<a href='{mainTheme.syntaxLicenseUrl}'>{mainTheme.syntaxLicense}</a>"
aboutMsg += "<h4>{0}</h4><p>{1}</p>".format(
self.tr("Syntax: {0}").format(mainTheme.syntaxName),
self._wrapTable([
(self.tr("Author"), mainTheme.syntaxAuthor),
(self.tr("Credit"), mainTheme.syntaxCredit),
(self.tr("Licence"), licURL),
])
)
self.pageAbout.setHtml(aboutMsg)
return
@@ -241,6 +190,17 @@ class GuiAbout(QDialog):
self.pageNotes.setHtml("Error loading release notes text ...")
return
def _fillCreditsPage(self):
"""Load the content for the Credits page.
"""
docPath = self.mainConf.assetPath("text") / "credits_en.htm"
docText = readTextFile(docPath)
if docText:
self.pageCredits.setHtml(docText)
else:
self.pageCredits.setHtml("Error loading credits text ...")
return
def _fillLicensePage(self):
"""Load the content for the Licence page.
"""
@@ -252,16 +212,6 @@ class GuiAbout(QDialog):
self.pageLicense.setHtml("Error loading licence text ...")
return
def _wrapTable(self, theData):
"""Wrap a list of label/value tuples in an html table.
"""
theTable = []
for aLabel, aValue in theData:
theTable.append(
f"<tr><td><b>{aLabel}:</b></td><td>{aValue}</td></tr>"
)
return "<table>{0}</table>".format("".join(theTable))
def _setStyleSheet(self):
"""Set stylesheet for all browser tabs
"""
@@ -275,9 +225,6 @@ class GuiAbout(QDialog):
".alt {{"
" color: rgb({kColR},{kColG},{kColB});"
"}}\n"
"td {{"
" padding-right: 0.8em;"
"}}\n"
).format(
hColR=self.mainGui.mainTheme.colHead[0],
hColG=self.mainGui.mainTheme.colHead[1],
@@ -288,6 +235,7 @@ class GuiAbout(QDialog):
)
self.pageAbout.document().setDefaultStyleSheet(styleSheet)
self.pageNotes.document().setDefaultStyleSheet(styleSheet)
self.pageCredits.document().setDefaultStyleSheet(styleSheet)
self.pageLicense.document().setDefaultStyleSheet(styleSheet)
return
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-01-23 [0.4.3]
Rewritten: 2022-10-06 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-02-01 [0.4.3]
Rewritten: 2022-10-12 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-06-11 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-06-10 [0.1.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-01-03 [1.1rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-02-26 [0.4.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+55 -39
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,8 +26,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
import logging
import novelwriter
from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush
from PyQt5.QtCore import Qt, QLocale
from PyQt5.QtGui import QIcon, QPixmap, QColor
from PyQt5.QtCore import Qt, QLocale, pyqtSlot
from PyQt5.QtWidgets import (
QColorDialog, QComboBox, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit,
QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
@@ -300,7 +300,7 @@ class GuiProjectEditStatus(QWidget):
self.colDeleted = []
self.colChanged = False
self.selColour = QColor(100, 100, 100)
self.selColour = QColor(100, 100, 100)
self.iPx = self.mainTheme.baseIconSize
@@ -338,16 +338,18 @@ class GuiProjectEditStatus(QWidget):
self.editName = QLineEdit()
self.editName.setMaxLength(40)
self.editName.setEnabled(False)
self.editName.setPlaceholderText(self.tr("Select item to edit"))
self.editName.setEnabled(False)
self.colPixmap = QPixmap(self.iPx, self.iPx)
self.colPixmap.fill(QColor(100, 100, 100))
self.colButton = QPushButton(QIcon(self.colPixmap), self.tr("Colour"))
self.colButton.setIconSize(self.colPixmap.rect().size())
self.colButton.setEnabled(False)
self.colButton.clicked.connect(self._selectColour)
self.saveButton = QPushButton(self.tr("Save"))
self.saveButton.setEnabled(False)
self.saveButton.clicked.connect(self._saveItem)
# Assemble
@@ -399,9 +401,10 @@ class GuiProjectEditStatus(QWidget):
return [], []
##
# User Actions
# Private Slots
##
@pyqtSlot()
def _selectColour(self):
"""Open a dialog to select the status icon colour.
"""
@@ -417,20 +420,20 @@ class GuiProjectEditStatus(QWidget):
self.colButton.setIconSize(pixmap.rect().size())
return
@pyqtSlot()
def _newItem(self):
"""Create a new status item.
"""
newItem = self._addItem(None, self.tr("New Item"), (100, 100, 100), 0)
newItem.setBackground(self.COL_LABEL, QBrush(QColor(0, 255, 0, 70)))
newItem.setBackground(self.COL_USAGE, QBrush(QColor(0, 255, 0, 70)))
self._addItem(None, self.tr("New Item"), (100, 100, 100), 0)
self.colChanged = True
return
@pyqtSlot()
def _delItem(self):
"""Delete a status item.
"""
selItem = self._getSelectedItem()
if selItem is not None:
if isinstance(selItem, QTreeWidgetItem):
iRow = self.listBox.indexOfTopLevelItem(selItem)
if selItem.data(self.COL_LABEL, self.NUM_ROLE) > 0:
self.mainGui.makeAlert(self.tr(
@@ -442,21 +445,60 @@ class GuiProjectEditStatus(QWidget):
self.colChanged = True
return
@pyqtSlot()
def _saveItem(self):
"""Save changes made to a status item.
"""
selItem = self._getSelectedItem()
if selItem is not None:
if isinstance(selItem, QTreeWidgetItem):
selItem.setText(self.COL_LABEL, simplified(self.editName.text()))
selItem.setIcon(self.COL_LABEL, self.colButton.icon())
selItem.setData(self.COL_LABEL, self.COL_ROLE, (
self.selColour.red(), self.selColour.green(), self.selColour.blue()
))
self.editName.setEnabled(False)
self.colChanged = True
return
@pyqtSlot()
def _selectedItem(self):
"""Extract the info of a selected item and populate the settings
boxes and button. If no item is selected, clear the form.
"""
selItem = self._getSelectedItem()
if isinstance(selItem, QTreeWidgetItem):
cols = selItem.data(self.COL_LABEL, self.COL_ROLE)
name = selItem.text(self.COL_LABEL)
pixmap = QPixmap(self.iPx, self.iPx)
pixmap.fill(QColor(*cols))
self.selColour = QColor(*cols)
self.editName.setText(name)
self.colButton.setIcon(QIcon(pixmap))
self.editName.selectAll()
self.editName.setFocus()
self.editName.setEnabled(True)
self.colButton.setEnabled(True)
self.saveButton.setEnabled(True)
else:
pixmap = QPixmap(self.iPx, self.iPx)
pixmap.fill(QColor(100, 100, 100))
self.selColour = QColor(100, 100, 100)
self.editName.setText("")
self.colButton.setIcon(QIcon(pixmap))
self.editName.setEnabled(False)
self.colButton.setEnabled(False)
self.saveButton.setEnabled(False)
return
##
# Internal Functions
##
def _addItem(self, key, name, cols, count):
"""Add a status item to the list.
"""
@@ -473,7 +515,7 @@ class GuiProjectEditStatus(QWidget):
self.listBox.addTopLevelItem(item)
return item
return
def _moveItem(self, step):
"""Move and item up or down step.
@@ -498,32 +540,6 @@ class GuiProjectEditStatus(QWidget):
return
def _selectedItem(self):
"""Extract the info of a selected item and populate the settings
boxes and button.
"""
selItem = self._getSelectedItem()
if selItem is None:
return
cols = selItem.data(self.COL_LABEL, self.COL_ROLE)
name = selItem.text(self.COL_LABEL)
pixmap = QPixmap(self.iPx, self.iPx)
pixmap.fill(QColor(*cols))
self.selColour = QColor(*cols)
self.editName.setText(name)
self.colButton.setIcon(QIcon(pixmap))
self.editName.setEnabled(True)
self.editName.selectAll()
self.editName.setFocus()
return
##
# Internal Functions
##
def _getSelectedItem(self):
"""Get the currently selected item.
"""
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-06-18 [0.9]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-08-21 [1.5b1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2021-02-12 [1.2rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-11-02 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-08-02 [0.10.2]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-05-17 [0.5.1] StatusLED
Created: 2022-11-17 [2.0] NovelSelector
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -13,7 +13,7 @@ Created: 2020-06-27 [0.10] GuiDocEditFooter
Rewritten: 2020-10-07 [1.0b3] BackgroundWordCounter
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-06 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -11,7 +11,7 @@ Created: 2020-06-09 [0.8] GuiDocViewFooter
Created: 2020-09-08 [1.0b1] GuiDocViewHistory
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-24 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-04-27 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -11,7 +11,7 @@ Created: 2019-11-16 [0.4.1] GuiOutlineHeaderMenu
Created: 2020-06-02 [0.7] GuiOutlineDetails
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+24 -8
View File
@@ -9,7 +9,7 @@ Created: 2022-06-06 [2.0rc1] GuiProjectView
Created: 2022-06-06 [2.0rc1] GuiProjectToolBar
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1251,18 +1251,30 @@ class GuiProjectTree(QTreeWidget):
isDocFile = isFile and tItem.isDocumentLayout()
isNoteFile = isFile and tItem.isNoteLayout()
if (isNoteFile or isFolder) and tItem.documentAllowed():
if isNoteFile and tItem.documentAllowed():
aConvert1 = mTrans.addAction(self.tr("Convert to {0}").format(trDoc))
aConvert1.triggered.connect(
lambda: self._changeItemLayout(tHandle, nwItemLayout.DOCUMENT)
)
if isDocFile or isFolder:
if isDocFile:
aConvert2 = mTrans.addAction(self.tr("Convert to {0}").format(trNote))
aConvert2.triggered.connect(
lambda: self._changeItemLayout(tHandle, nwItemLayout.NOTE)
)
if isFolder and tItem.documentAllowed():
aConvert3 = mTrans.addAction(self.tr("Convert to {0}").format(trDoc))
aConvert3.triggered.connect(
lambda: self._covertFolderToFile(tHandle, nwItemLayout.DOCUMENT)
)
if isFolder:
aConvert4 = mTrans.addAction(self.tr("Convert to {0}").format(trNote))
aConvert4.triggered.connect(
lambda: self._covertFolderToFile(tHandle, nwItemLayout.NOTE)
)
if hasChild and isFile:
aMerge1 = mTrans.addAction(self.tr("Merge Child Items into Self"))
aMerge1.triggered.connect(lambda: self._mergeDocuments(tHandle, False))
@@ -1681,19 +1693,23 @@ class GuiProjectTree(QTreeWidget):
del self._treeMap[tHandle]
return None
else:
elif pHandle in self._treeMap:
byIndex = -1
if nHandle is not None and nHandle in self._treeMap:
try:
byIndex = self._treeMap[pHandle].indexOfChild(self._treeMap[nHandle])
except Exception:
logger.error("Failed to get index of item with handle '%s'", nHandle)
byIndex = self._treeMap[pHandle].indexOfChild(self._treeMap[nHandle])
if byIndex >= 0:
self._treeMap[pHandle].insertChild(byIndex + 1, newItem)
else:
self._treeMap[pHandle].addChild(newItem)
self.propagateCount(tHandle, nwItem.wordCount, countChildren=True)
else:
self.mainGui.makeAlert(self.tr(
"There is nowhere to add item with name '{0}'."
).format(nwItem.itemName), nwAlert.ERROR)
del self._treeMap[tHandle]
return None
self.setTreeItemValues(tHandle)
newItem.setExpanded(nwItem.isExpanded)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-05-10 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2019-04-20 [0.0.1] GuiMainStatus
Created: 2020-05-17 [0.5.1] StatusLED
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+5 -3
View File
@@ -8,7 +8,7 @@ Created: 2019-05-18 [0.1.3] GuiTheme
Created: 2019-11-08 [0.4] GuiIcons
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -507,8 +507,10 @@ class GuiIcons:
self._themeMap = {}
themePath = self._iconPath / iconTheme
if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme)
return False
themePath = self.mainConf.dataPath("icons") / iconTheme
if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme)
return False
themeConf = themePath / self._confName
logger.info("Loading icon theme '%s'", iconTheme)
+2 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -610,6 +610,7 @@ class GuiMain(QMainWindow):
logger.debug("Requested item '%s' is not a document", tHandle)
return False
self._changeView(nwView.EDITOR)
cHandle = self.docEditor.docHandle()
if cHandle == tHandle:
self.docEditor.setCursorLine(tLine)
@@ -618,7 +619,6 @@ class GuiMain(QMainWindow):
return True
self.closeDocument(beforeOpen=True)
self._changeView(nwView.EDITOR)
if self.docEditor.loadText(tHandle, tLine):
self.theProject.data.setLastHandle(tHandle, "editor")
self.projView.setSelectedHandle(tHandle, doScroll=doScroll)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-09 [0.5]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-04-02 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-07-11 [0.10.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-10-20 [0.3]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+2 -2
View File
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0.2" hexVersion="0x020002f0" fileVersion="1.5" timeStamp="2022-12-01 23:33:10">
<project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="1463" autoCount="237" editTime="74319">
<novelWriterXML appVersion="2.0.3" hexVersion="0x020003f0" fileVersion="1.5" timeStamp="2023-01-08 19:10:50">
<project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="1467" autoCount="237" editTime="74387">
<name>Sample Project</name>
<title>Sample Project</title>
<author>Jane Smith</author>
+3 -2
View File
@@ -8,7 +8,7 @@ File History:
Created: 2019-05-16 [0.5.1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -835,7 +835,7 @@ def makeDebianPackage(signKey=None, sourceBuild=False, distName="unstable", buil
##
def makeForLaunchpad(doSign=False, isFirst=False, isSnapshot=False):
"""Wrapper for building debian packages for launcpad.
"""Wrapper for building debian packages for launchpad.
"""
print("")
print("Launchpad Packages")
@@ -853,6 +853,7 @@ def makeForLaunchpad(doSign=False, isFirst=False, isSnapshot=False):
("20.04", "focal"),
("22.04", "jammy"),
("22.10", "kinetic"),
("23.04", "lunar"),
]
tStamp = datetime.datetime.now().strftime("%Y%m%d~%H%M%S")
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Test Suite Configuration
======================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Test Suite Mocked Classes
=======================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Common Functions Tester
=====================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Config Class Tester
=================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Error Handler Tester
==================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Main Init Tester
==============================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Project Document Tools Tester
===========================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter NWDocument Class Tester
=====================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter NWIndex Class Tester
==================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter NWItem Class Tester
=================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter OptionState Class Tester
======================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter NWProject Class Tester
====================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter ProjectXMLReader/Writer Class Tester
==================================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Spell Check Classes Tester
========================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter NWStatus Class Tester
===================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+5 -2
View File
@@ -3,7 +3,7 @@ novelWriter NWStorage Class Tester
====================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -64,12 +64,15 @@ def testCoreStorage_OpenProjectInPlace(mockGUI, fncPath, mockRnd):
# Open project as a new project should fail
assert storage.openProjectInPlace(fncPath, newProject=True) is False
# Opening as a no-new project is fine
# Opening as a non-new project is fine
assert storage.openProjectInPlace(fncPath, newProject=False) is True
# Opening the project file is also fine
assert storage.openProjectInPlace(fncPath / nwFiles.PROJ_FILE, newProject=False) is True
# Opening as a non-new project on a non-existing folder should fail
assert storage.openProjectInPlace(fncPath / "foobar", newProject=False) is False
# Check settings
assert storage.storagePath == fncPath
assert storage.runtimePath == fncPath
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter ToHtml Class Tester
=================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter Tokenizer Class Tester
====================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter ToMd Class Tester
===============================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter ToOdt Class Tester
=================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter NWTree Class Tester
=================================
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
Copyright 20182023, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

Some files were not shown because too many files have changed in this diff Show More