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 # 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] ## Version 2.0.2 [2022-12-01]
### Release Notes ### Release Notes
+22 -11
View File
@@ -4,14 +4,18 @@
* Veronica Berglyd Olsen (@vkbo) * Veronica Berglyd Olsen (@vkbo)
## Main Contributors ## Contributors
* Concept: Marian Lückhof (@Number042) * Concept: Marian Lückhof (@Number042)
* Internationalisation: Bruno Meneguello (@bkmeneguello) * 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 ## 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) * Dutch: Martijn van der Kleijn (@mvdkleijn)
* French: Jan Lüdke (@jyhelle) * 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) * Portuguese: Bruno Meneguello (@bkmeneguello)
* Simplified Chinese: Qianzhi Long (@longqzh) * 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 ## Libraries
The following libraries are dependencies of novelWriter: The following libraries are dependencies of novelWriter:
* Qt5 by [Qt Company](https://www.qt.io/) * [Qt5](https://www.qt.io) by Qt Company
* PyQt5 by [Riverbank Computing](https://www.riverbankcomputing.com/software/pyqt/) * [PyQt5](https://www.riverbankcomputing.com/software/pyqt) by Riverbank Computing
* lxml by [Martijn Faassen](https://lxml.de/) * [lxml](https://lxml.de) by Martijn Faassen
* Enchant by [Dom Lachowicz](https://abiword.github.io/enchant/) * [Enchant](https://abiword.github.io/enchant) by Dom Lachowicz
* PyEnchant by [Dimitri Merejkowsky](https://pyenchant.github.io/pyenchant/) * [PyEnchant](https://pyenchant.github.io/pyenchant) by Dimitri Merejkowsky
## Assets ## Assets
Some of the assets bundled with novelWriter were adapted from the following sources: 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) * [Typicons](https://github.com/stephenhutchings/typicons.font) icons by Stephen Hutchings (CC BY-SA 4.0)
* Tomorrow syntax themes by Chris Kempson (MIT License) * [Tomorrow](https://github.com/chriskempson/base16) syntax themes by Chris Kempson (MIT License)
* Owl syntax themes by Sarah Drasner (MIT License) * [Owl](https://github.com/sdras/night-owl-vscode-theme) syntax themes by Sarah Drasner (MIT License)
* Solarized themes by Ethan Schoonover, added by @nullbasis (MIT License) * [Solarized](https://github.com/altercation/solarized) themes by Ethan Schoonover (MIT License)
## Special Mentions ## 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>`_. `novelwriter/assets/syntax <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/syntax>`_.
* The existing GUI themes are stored in * The existing GUI themes are stored in
`novelwriter/assets/themes <https://github.com/vkbo/novelWriter/tree/main/novelwriter/assets/themes>`_. `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 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`. 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 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 :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 ``syntax`` for syntax themes, just ``themes`` for GUI themes, and ``icons`` for icon themes. These
first time you start novelWriter. 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 Once the files are copied there, they should show up in :guilabel:`Preferences` with the label you
set as ``name`` inside the file. set as ``name`` inside the file.
@@ -70,8 +72,8 @@ set as ``name`` inside the file.
theme colour scheme. theme colour scheme.
Gustom GUI Theme Gustom GUI and Icons Theme
---------------- --------------------------
A GUI theme conf file consists of the follwing settings: 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 statusunsaved = 100, 100, 100
In the Main section you must at least define the ``name`` and ``icontheme`` settings. The 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 ``icontheme`` settings should correspond to one of the internal icon themes, either
``typicons_light`` or ``typicons_dark``. ``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 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 `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> <context>
<name>GuiAbout</name> <name>GuiAbout</name>
<message> <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" /> <location filename="../novelwriter/dialogs/about.py" line="59" />
<source>About novelWriter</source> <source>About novelWriter</source>
<translation>À propos de novelWriter</translation> <translation>À propos de novelWriter</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/about.py" line="94" /> <location filename="../novelwriter/dialogs/about.py" line="98" />
<source>About</source> <source>About</source>
<translation>À propos</translation> <translation>À propos</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/about.py" line="95" /> <location filename="../novelwriter/dialogs/about.py" line="99" />
<source>Release</source> <source>Release</source>
<translation>Version</translation> <translation>Version</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/about.py" line="225" /> <location filename="../novelwriter/dialogs/about.py" line="100" />
<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" />
<source>Credits</source> <source>Credits</source>
<translation>Crédits</translation> <translation>Crédits</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/about.py" line="153" /> <location filename="../novelwriter/dialogs/about.py" line="101" />
<source>Developer</source> <source>Licence</source>
<translation>Développeur</translation> <translation>Licence</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/about.py" line="154" /> <location filename="../novelwriter/dialogs/about.py" line="152" />
<source>Concept</source> <source>Website: {0}</source>
<translation>Concept</translation> <translation>Site Web : {0}</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/about.py" line="155" /> <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> <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> <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>
<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> <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> <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>
<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> <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> <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>
<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> <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> <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>
<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>
<context> <context>
<name>GuiBuildNovel</name> <name>GuiBuildNovel</name>
@@ -2288,103 +2236,103 @@
<context> <context>
<name>GuiPreferencesAutomation</name> <name>GuiPreferencesAutomation</name>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="940" /> <location filename="../novelwriter/dialogs/preferences.py" line="946" />
<source>Automatic Features</source> <source>Automatic Features</source>
<translation>Automatismes</translation> <translation>Automatismes</translation>
</message> </message>
<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> <source>Auto-select word under cursor</source>
<translation>Auto-sélection du mot sous le curseur</translation> <translation>Auto-sélection du mot sous le curseur</translation>
</message> </message>
<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> <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> <translation>En l'absence de texte sélectionné la mise en forme s'applique au mot sous le curseur.</translation>
</message> </message>
<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> <source>Auto-replace text as you type</source>
<translation>Auto-remplacement par la frappe</translation> <translation>Auto-remplacement par la frappe</translation>
</message> </message>
<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> <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> <translation>Permet à léditeur de remplacer les symboles au fur et à mesure de la frappe.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="963" /> <location filename="../novelwriter/dialogs/preferences.py" line="969" />
<source>Replace as You Type</source> <source>Replace as You Type</source>
<translation>Remplacement par la frappe</translation> <translation>Remplacement par la frappe</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="970" /> <location filename="../novelwriter/dialogs/preferences.py" line="976" />
<source>Auto-replace single quotes</source> <source>Auto-replace single quotes</source>
<translation>Auto-remplacement des guillemets simples</translation> <translation>Auto-remplacement des guillemets simples</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="982" /> <location filename="../novelwriter/dialogs/preferences.py" line="988" />
<location filename="../novelwriter/dialogs/preferences.py" line="972" /> <location filename="../novelwriter/dialogs/preferences.py" line="978" />
<source>Try to guess which is an opening or a closing quote.</source> <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> <translation>Tenter de deviner si un guillemet est ouvrant ou fermant.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="980" /> <location filename="../novelwriter/dialogs/preferences.py" line="986" />
<source>Auto-replace double quotes</source> <source>Auto-replace double quotes</source>
<translation>Auto-remplacement des guillemets doubles</translation> <translation>Auto-remplacement des guillemets doubles</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="990" /> <location filename="../novelwriter/dialogs/preferences.py" line="996" />
<source>Auto-replace dashes</source> <source>Auto-replace dashes</source>
<translation>Auto-remplacement des tirets</translation> <translation>Auto-remplacement des tirets</translation>
</message> </message>
<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> <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> <translation>Deux ou trois tirets successifs deviennent des tirets moyens (semi-cadratins) ou longs (cadratins).</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1000" /> <location filename="../novelwriter/dialogs/preferences.py" line="1006" />
<source>Auto-replace dots</source> <source>Auto-replace dots</source>
<translation>Auto-remplacement des points</translation> <translation>Auto-remplacement des points</translation>
</message> </message>
<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> <source>Three consecutive dots become ellipsis.</source>
<translation>Trois points consécutifs deviennent des points de suspension.</translation> <translation>Trois points consécutifs deviennent des points de suspension.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1007" /> <location filename="../novelwriter/dialogs/preferences.py" line="1013" />
<source>Automatic Padding</source> <source>Automatic Padding</source>
<translation>Insertion automatique</translation> <translation>Insertion automatique</translation>
</message> </message>
<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> <source>Insert non-breaking space before</source>
<translation>Espace insécable avant</translation> <translation>Espace insécable avant</translation>
</message> </message>
<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> <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> <translation>Ajouter lors de la frappe une espace avant chacun de ces caractères.</translation>
</message> </message>
<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> <source>Insert non-breaking space after</source>
<translation>Espace insécable après</translation> <translation>Espace insécable après</translation>
</message> </message>
<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> <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> <translation>Ajouter lors de la frappe une espace après chacun de ces caractères.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1034" /> <location filename="../novelwriter/dialogs/preferences.py" line="1040" />
<source>Use thin space instead</source> <source>Use thin space instead</source>
<translation>Utiliser des espaces fines</translation> <translation>Utiliser des espaces fines</translation>
</message> </message>
<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> <source>Inserts a thin space instead of a regular space.</source>
<translation>Insérer une espace fine au lieu d'une espace-mot.</translation> <translation>Insérer une espace fine au lieu d'une espace-mot.</translation>
</message> </message>
@@ -2810,47 +2758,47 @@
<context> <context>
<name>GuiPreferencesQuotes</name> <name>GuiPreferencesQuotes</name>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1095" /> <location filename="../novelwriter/dialogs/preferences.py" line="1101" />
<source>Quotation Style</source> <source>Quotation Style</source>
<translation>Style de guillemets</translation> <translation>Style de guillemets</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1112" /> <location filename="../novelwriter/dialogs/preferences.py" line="1118" />
<source>Single quote open style</source> <source>Single quote open style</source>
<translation>Guillemets simples ouvrants</translation> <translation>Guillemets simples ouvrants</translation>
</message> </message>
<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> <source>The symbol to use for a leading single quote.</source>
<translation>Symbole à utiliser pour un guillemet simple ouvrant.</translation> <translation>Symbole à utiliser pour un guillemet simple ouvrant.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1128" /> <location filename="../novelwriter/dialogs/preferences.py" line="1134" />
<source>Single quote close style</source> <source>Single quote close style</source>
<translation>Guillemets simples fermants</translation> <translation>Guillemets simples fermants</translation>
</message> </message>
<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> <source>The symbol to use for a trailing single quote.</source>
<translation>Symbole à utiliser pour un guillemet simple fermant.</translation> <translation>Symbole à utiliser pour un guillemet simple fermant.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1145" /> <location filename="../novelwriter/dialogs/preferences.py" line="1151" />
<source>Double quote open style</source> <source>Double quote open style</source>
<translation>Guillemets doubles ouvrants</translation> <translation>Guillemets doubles ouvrants</translation>
</message> </message>
<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> <source>The symbol to use for a leading double quote.</source>
<translation>Symbole à utiliser pour un guillemet double ouvrant.</translation> <translation>Symbole à utiliser pour un guillemet double ouvrant.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="1161" /> <location filename="../novelwriter/dialogs/preferences.py" line="1167" />
<source>Double quote close style</source> <source>Double quote close style</source>
<translation>Guillemets doubles fermants</translation> <translation>Guillemets doubles fermants</translation>
</message> </message>
<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> <source>The symbol to use for a trailing double quote.</source>
<translation>Symbole à utiliser pour un guillemet double fermant.</translation> <translation>Symbole à utiliser pour un guillemet double fermant.</translation>
</message> </message>
@@ -2858,59 +2806,59 @@
<context> <context>
<name>GuiPreferencesSyntax</name> <name>GuiPreferencesSyntax</name>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="839" /> <location filename="../novelwriter/dialogs/preferences.py" line="840" />
<source>Quotes &amp; Dialogue</source> <source>Quotes &amp; Dialogue</source>
<translation>Dialogues et citations</translation> <translation>Dialogues et citations</translation>
</message> </message>
<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> <source>Highlight text wrapped in quotes</source>
<translation>Mettre en évidence le texte situé entre des guillemets</translation> <translation>Mettre en évidence le texte situé entre des guillemets</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="888" /> <location filename="../novelwriter/dialogs/preferences.py" line="889" />
<location filename="../novelwriter/dialogs/preferences.py" line="875" /> <location filename="../novelwriter/dialogs/preferences.py" line="876" />
<location filename="../novelwriter/dialogs/preferences.py" line="847" /> <location filename="../novelwriter/dialogs/preferences.py" line="848" />
<source>Applies to the document editor only.</source> <source>Applies to the document editor only.</source>
<translation>Ne s'applique qu'à l'éditeur de document.</translation> <translation>Ne s'applique qu'à l'éditeur de document.</translation>
</message> </message>
<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> <source>Allow open-ended single quotes</source>
<translation>Autoriser les guillemets simples non fermés</translation> <translation>Autoriser les guillemets simples non fermés</translation>
</message> </message>
<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> <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> <translation>Mettre en évidence les lignes avec guillemet simple ouvrant et non fermées.</translation>
</message> </message>
<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> <source>Allow open-ended double quotes</source>
<translation>Autoriser les guillemets doubles non fermés</translation> <translation>Autoriser les guillemets doubles non fermés</translation>
</message> </message>
<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> <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> <translation>Mettre en évidence les lignes avec guillemet double ouvrant et non fermées.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="868" /> <location filename="../novelwriter/dialogs/preferences.py" line="869" />
<source>Text Emphasis</source> <source>Text Emphasis</source>
<translation>Texte appuyé</translation> <translation>Texte appuyé</translation>
</message> </message>
<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> <source>Add highlight colour to emphasised text</source>
<translation>Mettre en évidence le texte appuyé</translation> <translation>Mettre en évidence le texte appuyé</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/preferences.py" line="881" /> <location filename="../novelwriter/dialogs/preferences.py" line="882" />
<source>Text Errors</source> <source>Text Errors</source>
<translation>Erreurs de texte</translation> <translation>Erreurs de texte</translation>
</message> </message>
<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> <source>Highlight multiple or trailing spaces</source>
<translation>Surligner les espaces multiples ou terminaux</translation> <translation>Surligner les espaces multiples ou terminaux</translation>
</message> </message>
@@ -3107,27 +3055,27 @@
<context> <context>
<name>GuiProjectEditReplace</name> <name>GuiProjectEditReplace</name>
<message> <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> <source>Text Replace List for Preview and Export</source>
<translation>Remplacements dans le texte pour les aperçus et exportations</translation> <translation>Remplacements dans le texte pour les aperçus et exportations</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="572" /> <location filename="../novelwriter/dialogs/projsettings.py" line="588" />
<source>Keyword</source> <source>Keyword</source>
<translation>Mot-clé</translation> <translation>Mot-clé</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="573" /> <location filename="../novelwriter/dialogs/projsettings.py" line="589" />
<source>Replace With</source> <source>Replace With</source>
<translation>Remplacer par</translation> <translation>Remplacer par</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="599" /> <location filename="../novelwriter/dialogs/projsettings.py" line="615" />
<source>Select item to edit</source> <source>Select item to edit</source>
<translation>Choisir l'élément à éditer</translation> <translation>Choisir l'élément à éditer</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="607" /> <location filename="../novelwriter/dialogs/projsettings.py" line="623" />
<source>Save</source> <source>Save</source>
<translation>Enregistrer</translation> <translation>Enregistrer</translation>
</message> </message>
@@ -3155,7 +3103,7 @@
<translation>Utilisation</translation> <translation>Utilisation</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="342" /> <location filename="../novelwriter/dialogs/projsettings.py" line="341" />
<source>Select item to edit</source> <source>Select item to edit</source>
<translation>Choisir l'élément à éditer</translation> <translation>Choisir l'élément à éditer</translation>
</message> </message>
@@ -3165,37 +3113,37 @@
<translation>Couleur</translation> <translation>Couleur</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="350" /> <location filename="../novelwriter/dialogs/projsettings.py" line="351" />
<source>Save</source> <source>Save</source>
<translation>Enregistrer</translation> <translation>Enregistrer</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="410" /> <location filename="../novelwriter/dialogs/projsettings.py" line="413" />
<source>Select Colour</source> <source>Select Colour</source>
<translation>Choisir la couleur</translation> <translation>Choisir la couleur</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="423" /> <location filename="../novelwriter/dialogs/projsettings.py" line="427" />
<source>New Item</source> <source>New Item</source>
<translation>Nouvel élément</translation> <translation>Nouvel élément</translation>
</message> </message>
<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> <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> <translation>On ne peut pas retirer un élément tant qu'il est utilisé.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="539" /> <location filename="../novelwriter/dialogs/projsettings.py" line="555" />
<source>Not in use</source> <source>Not in use</source>
<translation>Inutilisé</translation> <translation>Inutilisé</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="541" /> <location filename="../novelwriter/dialogs/projsettings.py" line="557" />
<source>Used once</source> <source>Used once</source>
<translation>Utilisé une fois</translation> <translation>Utilisé une fois</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/dialogs/projsettings.py" line="543" /> <location filename="../novelwriter/dialogs/projsettings.py" line="559" />
<source>Used by {0} items</source> <source>Used by {0} items</source>
<translation>Utilisé {0} fois</translation> <translation>Utilisé {0} fois</translation>
</message> </message>
@@ -3470,79 +3418,82 @@
<translation>Transformer</translation> <translation>Transformer</translation>
</message> </message>
<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="1261" />
<location filename="../novelwriter/gui/projtree.py" line="1255" /> <location filename="../novelwriter/gui/projtree.py" line="1255" />
<source>Convert to {0}</source> <source>Convert to {0}</source>
<translation>Convertir en {0}</translation> <translation>Convertir en {0}</translation>
</message> </message>
<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> <source>Merge Child Items into Self</source>
<translation>Intégrer les éléments enfants</translation> <translation>Intégrer les éléments enfants</translation>
</message> </message>
<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> <source>Merge Child Items into New</source>
<translation>Créer une fusion des éléments enfants</translation> <translation>Créer une fusion des éléments enfants</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1273" /> <location filename="../novelwriter/gui/projtree.py" line="1285" />
<source>Merge Documents in Folder</source> <source>Merge Documents in Folder</source>
<translation>Fusionner des documents du dossier</translation> <translation>Fusionner des documents du dossier</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1277" /> <location filename="../novelwriter/gui/projtree.py" line="1289" />
<source>Split Document by Headers</source> <source>Split Document by Headers</source>
<translation>Diviser le document selon les en-têtes</translation> <translation>Diviser le document selon les en-têtes</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1286" /> <location filename="../novelwriter/gui/projtree.py" line="1298" />
<source>Expand All</source> <source>Expand All</source>
<translation>Tout développer</translation> <translation>Tout développer</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1288" /> <location filename="../novelwriter/gui/projtree.py" line="1300" />
<source>Collapse All</source> <source>Collapse All</source>
<translation>Tout refermer</translation> <translation>Tout refermer</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1292" /> <location filename="../novelwriter/gui/projtree.py" line="1304" />
<source>Delete Permanently</source> <source>Delete Permanently</source>
<translation>Supprimer définitivement</translation> <translation>Supprimer définitivement</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1295" /> <location filename="../novelwriter/gui/projtree.py" line="1307" />
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Déplacer vers la corbeille</translation> <translation>Déplacer vers la corbeille</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1483" /> <location filename="../novelwriter/gui/projtree.py" line="1495" />
<source>Convert Folder</source> <source>Convert Folder</source>
<translation>Convertir le dossier</translation> <translation>Convertir le dossier</translation>
</message> </message>
<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> <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> <translation>Voulez-vous convertir le dossier en {0}? Cette action est irréversible.</translation>
</message> </message>
<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> <source>No documents selected for merging.</source>
<translation>Aucun document n'a é sélectionné pour la fusion.</translation> <translation>Aucun document n'a é sélectionné pour la fusion.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1538" /> <location filename="../novelwriter/gui/projtree.py" line="1550" />
<source>Merged</source> <source>Merged</source>
<translation>Fusionné</translation> <translation>Fusionné</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/gui/projtree.py" line="1618" /> <location filename="../novelwriter/gui/projtree.py" line="1630" />
<location filename="../novelwriter/gui/projtree.py" line="1554" /> <location filename="../novelwriter/gui/projtree.py" line="1566" />
<source>Could not write document content.</source> <source>Could not write document content.</source>
<translation>Impossible d'écrire le contenu du document.</translation> <translation>Impossible d'écrire le contenu du document.</translation>
</message> </message>
<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> <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> <translation>Il n'y a pas d'emplacement pour ajouter l'item nommé '{0}'.</translation>
</message> </message>
@@ -3829,163 +3780,168 @@
<translation>Impossible de supprimer le fichier du document.</translation> <translation>Impossible de supprimer le fichier du document.</translation>
</message> </message>
<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> <source>Unknown</source>
<translation>Inconnu</translation> <translation>Inconnu</translation>
</message> </message>
<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> <source>Project file does not appear to be a novelWriterXML file.</source>
<translation>Ce fichier projet ne semble pas être un fichier novelWriterXML.</translation> <translation>Ce fichier projet ne semble pas être un fichier novelWriterXML.</translation>
</message> </message>
<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> <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 é enregistré avec novelWriter version {0}.</translation> <translation>Format de projet novelWriter inconnu ou non supporté. Ce projet ne peut pas être ouvert avec cette version de novelWriter, il a é enregistré avec novelWriter version {0}.</translation>
</message> </message>
<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> <source>Failed to parse project xml.</source>
<translation>Impossible de décoder le xml du projet.</translation> <translation>Impossible de décoder le xml du projet.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="314" /> <location filename="../novelwriter/core/project.py" line="317" />
<source>File Version</source> <source>File Version</source>
<translation>Version du fichier</translation> <translation>Version du fichier</translation>
</message> </message>
<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> <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> <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>
<message> <message>
<location filename="../novelwriter/core/project.py" line="330" /> <location filename="../novelwriter/core/project.py" line="333" />
<source>Version Conflict</source> <source>Version Conflict</source>
<translation>Conflit de version</translation> <translation>Conflit de version</translation>
</message> </message>
<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> <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> <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>
<message> <message>
<location filename="../novelwriter/core/project.py" line="375" /> <location filename="../novelwriter/core/project.py" line="378" />
<source>Opened Project: {0}</source> <source>Opened Project: {0}</source>
<translation>Projet ouvert : {0}</translation> <translation>Projet ouvert : {0}</translation>
</message> </message>
<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> <source>There is no project open.</source>
<translation>Aucun projet n'est ouvert.</translation> <translation>Aucun projet n'est ouvert.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="411" /> <location filename="../novelwriter/core/project.py" line="414" />
<source>Failed to save project.</source> <source>Failed to save project.</source>
<translation>Impossible d'enregistrer le projet.</translation> <translation>Impossible d'enregistrer le projet.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="427" /> <location filename="../novelwriter/core/project.py" line="430" />
<source>Saved Project: {0}</source> <source>Saved Project: {0}</source>
<translation>Projet enregistré : {0}</translation> <translation>Projet enregistré : {0}</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="453" /> <location filename="../novelwriter/core/project.py" line="456" />
<source>Backing up project ...</source> <source>Backing up project ...</source>
<translation>Sauvegarde du projet en cours ...</translation> <translation>Sauvegarde du projet en cours ...</translation>
</message> </message>
<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> <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> <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>
<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> <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> <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>
<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> <source>Could not create backup folder.</source>
<translation>Il n'a pas é possible de créer le répertoire de sauvegarde.</translation> <translation>Il n'a pas é possible de créer le répertoire de sauvegarde.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="480" /> <location filename="../novelwriter/core/project.py" line="483" />
<source>Backup from {0}</source> <source>Backup from {0}</source>
<translation>Sauvegarde depuis {0}</translation> <translation>Sauvegarde depuis {0}</translation>
</message> </message>
<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> <source>Backup archive file written to: {0}</source>
<translation>Archivage du fichier de sauvegarde effectué en : {0}</translation> <translation>Archivage du fichier de sauvegarde effectué en : {0}</translation>
</message> </message>
<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> <source>Could not write backup archive.</source>
<translation>Il n'a pas été possible d'écrire l'archive de sauvegarde.</translation> <translation>Il n'a pas été possible d'écrire l'archive de sauvegarde.</translation>
</message> </message>
<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> <source>Project backed up to '{0}'</source>
<translation>Projet sauvegardé dans {0}</translation> <translation>Projet sauvegardé dans {0}</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="511" /> <location filename="../novelwriter/core/project.py" line="514" />
<location filename="../novelwriter/core/project.py" line="507" /> <location filename="../novelwriter/core/project.py" line="510" />
<source>New</source> <source>New</source>
<translation>Nouveau</translation> <translation>Nouveau</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="508" /> <location filename="../novelwriter/core/project.py" line="511" />
<source>Note</source> <source>Note</source>
<translation>Note</translation> <translation>Note</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="509" /> <location filename="../novelwriter/core/project.py" line="512" />
<source>Draft</source> <source>Draft</source>
<translation>Brouillon</translation> <translation>Brouillon</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="510" /> <location filename="../novelwriter/core/project.py" line="513" />
<source>Finished</source> <source>Finished</source>
<translation>Terminé</translation> <translation>Terminé</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="512" /> <location filename="../novelwriter/core/project.py" line="515" />
<source>Minor</source> <source>Minor</source>
<translation>Mineur</translation> <translation>Mineur</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="513" /> <location filename="../novelwriter/core/project.py" line="516" />
<source>Major</source> <source>Major</source>
<translation>Majeur</translation> <translation>Majeur</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="514" /> <location filename="../novelwriter/core/project.py" line="517" />
<source>Main</source> <source>Main</source>
<translation>Principal</translation> <translation>Principal</translation>
</message> </message>
<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> <source>Found {0} orphaned file(s) in project folder.</source>
<translation>Trouvé {0} fichier(s) orphelin(s) dans le dossier du projet.</translation> <translation>Trouvé {0} fichier(s) orphelin(s) dans le dossier du projet.</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="745" /> <location filename="../novelwriter/core/project.py" line="748" />
<source>Recovered</source> <source>Recovered</source>
<translation>Récupéré</translation> <translation>Récupéré</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="759" /> <location filename="../novelwriter/core/project.py" line="762" />
<source>[{0}] {1}</source> <source>[{0}] {1}</source>
<translation>[{0}] {1}</translation> <translation>[{0}] {1}</translation>
</message> </message>
<message> <message>
<location filename="../novelwriter/core/project.py" line="764" /> <location filename="../novelwriter/core/project.py" line="767" />
<source>Recovered File {0}</source> <source>Recovered File {0}</source>
<translation>Fichier récupéré {0}</translation> <translation>Fichier récupéré {0}</translation>
</message> </message>
<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> <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> <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> </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] Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter 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 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 it under the terms of the GNU General Public License as published by
@@ -54,14 +54,14 @@ from novelwriter.config import Config
## ##
__package__ = "novelwriter" __package__ = "novelwriter"
__copyright__ = "Copyright 20182022, Veronica Berglyd Olsen" __copyright__ = "Copyright 20182023, Veronica Berglyd Olsen"
__license__ = "GPLv3" __license__ = "GPLv3"
__author__ = "Veronica Berglyd Olsen" __author__ = "Veronica Berglyd Olsen"
__maintainer__ = "Veronica Berglyd Olsen" __maintainer__ = "Veronica Berglyd Olsen"
__email__ = "code@vkbo.net" __email__ = "code@vkbo.net"
__version__ = "2.0.2" __version__ = "2.0.3"
__hexversion__ = "0x020002f0" __hexversion__ = "0x020003f0"
__date__ = "2022-12-01" __date__ = "2023-01-08"
__status__ = "Stable" __status__ = "Stable"
__domain__ = "novelwriter.io" __domain__ = "novelwriter.io"
__url__ = "https://novelwriter.io" __url__ = "https://novelwriter.io"
@@ -1,37 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg <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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg7536" 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" />
<metadata <metadata
id="metadata7542"> id="metadata7542">
<rdf:RDF> <rdf:RDF>
@@ -40,6 +18,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -25,10 +25,9 @@
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<path <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" id="path2927"
fill="#848484" style="fill:#848484;fill-opacity:1"
stroke-width="1.4286" 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" />
id="path2927" />
<rect <rect
x="7" x="7"
y="10.1" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" id="svg7486"
viewBox="0 0 24 24" viewBox="0 0 24 24"
height="24" height="24"
@@ -28,26 +24,6 @@
</metadata> </metadata>
<defs <defs
id="defs7490" /> 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 <path
style="stroke-width:1.25;fill:#6699cc;fill-opacity:1" style="stroke-width:1.25;fill:#6699cc;fill-opacity:1"
id="path7484" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" id="svg8816"
viewBox="0 0 24 24" viewBox="0 0 24 24"
height="24" height="24"
@@ -28,26 +24,6 @@
</metadata> </metadata>
<defs <defs
id="defs8820" /> 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 <path
style="fill:#6699cc;fill-opacity:1;stroke-width:1.24999" style="fill:#6699cc;fill-opacity:1;stroke-width:1.24999"
id="path8814" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" id="svg6649"
viewBox="0 0 24 24" viewBox="0 0 24 24"
height="24" height="24"
@@ -28,26 +24,6 @@
</metadata> </metadata>
<defs <defs
id="defs6653" /> 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 <path
style="fill:#99cc99;fill-opacity:1;stroke-width:1.33321" style="fill:#99cc99;fill-opacity:1;stroke-width:1.33321"
id="path6647" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg5291" 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" />
<metadata <metadata
id="metadata5297"> id="metadata5297">
<rdf:RDF> <rdf:RDF>
@@ -42,7 +18,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title /> <dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </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"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg <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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg7536" 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" />
<metadata <metadata
id="metadata7542"> id="metadata7542">
<rdf:RDF> <rdf:RDF>
@@ -40,6 +18,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -25,10 +25,9 @@
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<path <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" id="path969"
fill="#333" style="fill:#333333;fill-opacity:1"
stroke-width="1.4286" 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" />
id="path969" />
<rect <rect
x="7" x="7"
y="10.1" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg7486" id="svg7486">
sodipodi:docname="arrow-maximise.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata <metadata
id="metadata7492"> id="metadata7492">
<rdf:RDF> <rdf:RDF>
@@ -28,27 +24,6 @@
</metadata> </metadata>
<defs <defs
id="defs7490" /> 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 <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" 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" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" id="svg8816"
viewBox="0 0 24 24" viewBox="0 0 24 24"
height="24" height="24"
@@ -28,26 +24,6 @@
</metadata> </metadata>
<defs <defs
id="defs8820" /> 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 <path
style="fill:#4271ae;fill-opacity:1;stroke-width:1.24999" style="fill:#4271ae;fill-opacity:1;stroke-width:1.24999"
id="path8814" 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"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg <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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg1169" id="svg1169">
sodipodi:docname="typ_export.svg" <metadata
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" id="metadata13645">
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" <rdf:RDF>
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" <cc:Work
xmlns="http://www.w3.org/2000/svg" rdf:about="">
xmlns:svg="http://www.w3.org/2000/svg"> <dc:format>image/svg+xml</dc:format>
<sodipodi:namedview <dc:type
id="namedview2676" rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
pagecolor="#505050" <dc:title></dc:title>
bordercolor="#eeeeee" </cc:Work>
borderopacity="1" </rdf:RDF>
inkscape:pageshadow="0" </metadata>
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" />
<defs <defs
id="defs1173" /> id="defs1173" />
<path <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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg6649" id="svg6649">
sodipodi:docname="refresh.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata <metadata
id="metadata6655"> id="metadata6655">
<rdf:RDF> <rdf:RDF>
@@ -28,27 +24,6 @@
</metadata> </metadata>
<defs <defs
id="defs6653" /> 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 <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" 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" 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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="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" version="1.2"
width="24" width="24"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
id="svg5291" 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" />
<metadata <metadata
id="metadata5297"> id="metadata5297">
<rdf:RDF> <rdf:RDF>
@@ -42,7 +18,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title /> <dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </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 <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> 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> </body>
</html> </html>
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2019-05-12 [0.1] Created: 2019-05-12 [0.1]
This file is a part of novelWriter 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 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 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] Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter 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 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 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._confPath.mkdir(exist_ok=True)
self._dataPath.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(): if self._dataPath.is_dir():
(self._dataPath / "syntax").mkdir(exist_ok=True) (self._dataPath / "syntax").mkdir(exist_ok=True)
(self._dataPath / "themes").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 # Check if config file exists, and load it. If not, we save defaults
if (self._confPath / nwFiles.CONF_FILE).is_file(): 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] Created: 2019-04-28 [0.0.1]
This file is a part of novelWriter 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 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 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 Created: 2022-10-11 [2.0rc1] DocSplitter
This file is a part of novelWriter 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 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 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] Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter 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 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 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 Created: 2022-05-29 [2.0rc1] ItemIndex
This file is a part of novelWriter 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 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 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] Created: 2018-10-27 [0.0.1]
This file is a part of novelWriter 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 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 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] Rewritten: 2020-02-19 [0.4.5]
This file is a part of novelWriter 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 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 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] Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter 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 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 it under the terms of the GNU General Public License as published by
@@ -251,6 +251,9 @@ class NWProject(QObject):
""" """
self.clearProject() self.clearProject()
if not self._storage.openProjectInPlace(projPath): if not self._storage.openProjectInPlace(projPath):
self.mainGui.makeAlert(self.tr(
"Could not open project with path: {0}"
).format(projPath), nwAlert.ERROR)
return False return False
logger.info("Opening project: %s", projPath) logger.info("Opening project: %s", projPath)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-10-30 [2.0rc2] Created: 2022-10-30 [2.0rc2]
This file is a part of novelWriter 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 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 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 Created: 2022-10-31 [2.0rc2] ProjectXMLWriter
This file is a part of novelWriter 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 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 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] Created: 2019-06-11 [0.1.5]
This file is a part of novelWriter 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 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 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] Rewritten: 2022-04-05 [2.0b1]
This file is a part of novelWriter 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 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 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 Created: 2022-11-01 [2.0rc2] NWStorage
This file is a part of novelWriter 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 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 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 # but it can point to a folder containing files
inPath = inPath.parent 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._storagePath = inPath
self._runtimePath = inPath self._runtimePath = inPath
self._lockFilePath = inPath / nwFiles.PROJ_LOCK self._lockFilePath = inPath / nwFiles.PROJ_LOCK
@@ -114,7 +118,9 @@ class NWStorage:
return True return True
def openProjectArchive(self, path): # pragma: no cover def openProjectArchive(self, path): # pragma: no cover
pass """Placeholder for later implementation. See #977.
"""
return False
def runPostSaveTasks(self, autoSave=False): # pragma: no cover def runPostSaveTasks(self, autoSave=False): # pragma: no cover
"""Run tasks after the project has been saved. """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] Created: 2019-05-07 [0.0.1]
This file is a part of novelWriter 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 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 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] Created: 2019-05-05 [0.0.1]
This file is a part of novelWriter 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 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 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] Created: 2021-02-06 [1.2b1]
This file is a part of novelWriter 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 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 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] Created: 2021-01-26 [1.2b1]
This file is a part of novelWriter 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 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 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] Created: 2020-05-07 [0.4.5]
This file is a part of novelWriter 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 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 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 Created: 2020-05-17 [0.5.1] PagedDialog
This file is a part of novelWriter 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 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 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] Created: 2020-05-21 [0.5.2]
This file is a part of novelWriter 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 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 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.setOpenExternalLinks(True)
self.pageNotes.document().setDocumentMargin(self.mainConf.pxInt(16)) 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 = QTextBrowser()
self.pageLicense.setOpenExternalLinks(True) self.pageLicense.setOpenExternalLinks(True)
self.pageLicense.document().setDocumentMargin(self.mainConf.pxInt(16)) self.pageLicense.document().setDocumentMargin(self.mainConf.pxInt(16))
@@ -93,6 +97,7 @@ class GuiAbout(QDialog):
self.tabBox = QTabWidget() self.tabBox = QTabWidget()
self.tabBox.addTab(self.pageAbout, self.tr("About")) self.tabBox.addTab(self.pageAbout, self.tr("About"))
self.tabBox.addTab(self.pageNotes, self.tr("Release")) 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.tabBox.addTab(self.pageLicense, self.tr("Licence"))
self.innerBox.addWidget(self.tabBox) self.innerBox.addWidget(self.tabBox)
@@ -115,6 +120,7 @@ class GuiAbout(QDialog):
self._setStyleSheet() self._setStyleSheet()
self._fillAboutPage() self._fillAboutPage()
self._fillNotesPage() self._fillNotesPage()
self._fillCreditsPage()
self._fillLicensePage() self._fillLicensePage()
qApp.restoreOverrideCursor() qApp.restoreOverrideCursor()
return return
@@ -140,20 +146,12 @@ class GuiAbout(QDialog):
"<p>{license1}</p>" "<p>{license1}</p>"
"<p>{license2}</p>" "<p>{license2}</p>"
"<p>{license3}</p>" "<p>{license3}</p>"
"<h3>{title2}</h3>"
"<p>{credits}</p>"
).format( ).format(
title1=self.tr("About novelWriter"), title1=self.tr("About novelWriter"),
copy=novelwriter.__copyright__, copy=novelwriter.__copyright__,
link=self.tr("Website: {0}").format( link=self.tr("Website: {0}").format(
f"<a href='{novelwriter.__url__}'>{novelwriter.__domain__}</a>" 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( intro=self.tr(
"novelWriter is a markdown-like text editor designed for organising and " "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." "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) self.pageAbout.setHtml(aboutMsg)
return return
@@ -241,6 +190,17 @@ class GuiAbout(QDialog):
self.pageNotes.setHtml("Error loading release notes text ...") self.pageNotes.setHtml("Error loading release notes text ...")
return 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): def _fillLicensePage(self):
"""Load the content for the Licence page. """Load the content for the Licence page.
""" """
@@ -252,16 +212,6 @@ class GuiAbout(QDialog):
self.pageLicense.setHtml("Error loading licence text ...") self.pageLicense.setHtml("Error loading licence text ...")
return 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): def _setStyleSheet(self):
"""Set stylesheet for all browser tabs """Set stylesheet for all browser tabs
""" """
@@ -275,9 +225,6 @@ class GuiAbout(QDialog):
".alt {{" ".alt {{"
" color: rgb({kColR},{kColG},{kColB});" " color: rgb({kColR},{kColG},{kColB});"
"}}\n" "}}\n"
"td {{"
" padding-right: 0.8em;"
"}}\n"
).format( ).format(
hColR=self.mainGui.mainTheme.colHead[0], hColR=self.mainGui.mainTheme.colHead[0],
hColG=self.mainGui.mainTheme.colHead[1], hColG=self.mainGui.mainTheme.colHead[1],
@@ -288,6 +235,7 @@ class GuiAbout(QDialog):
) )
self.pageAbout.document().setDefaultStyleSheet(styleSheet) self.pageAbout.document().setDefaultStyleSheet(styleSheet)
self.pageNotes.document().setDefaultStyleSheet(styleSheet) self.pageNotes.document().setDefaultStyleSheet(styleSheet)
self.pageCredits.document().setDefaultStyleSheet(styleSheet)
self.pageLicense.document().setDefaultStyleSheet(styleSheet) self.pageLicense.document().setDefaultStyleSheet(styleSheet)
return return
+1 -1
View File
@@ -8,7 +8,7 @@ Created: 2020-01-23 [0.4.3]
Rewritten: 2022-10-06 [2.0rc1] Rewritten: 2022-10-06 [2.0rc1]
This file is a part of novelWriter 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 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 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] Rewritten: 2022-10-12 [2.0rc1]
This file is a part of novelWriter 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 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 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] Created: 2022-06-11 [2.0rc1]
This file is a part of novelWriter 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 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 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] Created: 2019-06-10 [0.1.5]
This file is a part of novelWriter 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 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 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] Created: 2021-01-03 [1.1rc1]
This file is a part of novelWriter 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 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 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] Created: 2020-02-26 [0.4.5]
This file is a part of novelWriter 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 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 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] Created: 2018-09-29 [0.0.1]
This file is a part of novelWriter 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 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 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 logging
import novelwriter import novelwriter
from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush from PyQt5.QtGui import QIcon, QPixmap, QColor
from PyQt5.QtCore import Qt, QLocale from PyQt5.QtCore import Qt, QLocale, pyqtSlot
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QColorDialog, QComboBox, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QColorDialog, QComboBox, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit,
QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
@@ -300,7 +300,7 @@ class GuiProjectEditStatus(QWidget):
self.colDeleted = [] self.colDeleted = []
self.colChanged = False self.colChanged = False
self.selColour = QColor(100, 100, 100) self.selColour = QColor(100, 100, 100)
self.iPx = self.mainTheme.baseIconSize self.iPx = self.mainTheme.baseIconSize
@@ -338,16 +338,18 @@ class GuiProjectEditStatus(QWidget):
self.editName = QLineEdit() self.editName = QLineEdit()
self.editName.setMaxLength(40) self.editName.setMaxLength(40)
self.editName.setEnabled(False)
self.editName.setPlaceholderText(self.tr("Select item to edit")) self.editName.setPlaceholderText(self.tr("Select item to edit"))
self.editName.setEnabled(False)
self.colPixmap = QPixmap(self.iPx, self.iPx) self.colPixmap = QPixmap(self.iPx, self.iPx)
self.colPixmap.fill(QColor(100, 100, 100)) self.colPixmap.fill(QColor(100, 100, 100))
self.colButton = QPushButton(QIcon(self.colPixmap), self.tr("Colour")) self.colButton = QPushButton(QIcon(self.colPixmap), self.tr("Colour"))
self.colButton.setIconSize(self.colPixmap.rect().size()) self.colButton.setIconSize(self.colPixmap.rect().size())
self.colButton.setEnabled(False)
self.colButton.clicked.connect(self._selectColour) self.colButton.clicked.connect(self._selectColour)
self.saveButton = QPushButton(self.tr("Save")) self.saveButton = QPushButton(self.tr("Save"))
self.saveButton.setEnabled(False)
self.saveButton.clicked.connect(self._saveItem) self.saveButton.clicked.connect(self._saveItem)
# Assemble # Assemble
@@ -399,9 +401,10 @@ class GuiProjectEditStatus(QWidget):
return [], [] return [], []
## ##
# User Actions # Private Slots
## ##
@pyqtSlot()
def _selectColour(self): def _selectColour(self):
"""Open a dialog to select the status icon colour. """Open a dialog to select the status icon colour.
""" """
@@ -417,20 +420,20 @@ class GuiProjectEditStatus(QWidget):
self.colButton.setIconSize(pixmap.rect().size()) self.colButton.setIconSize(pixmap.rect().size())
return return
@pyqtSlot()
def _newItem(self): def _newItem(self):
"""Create a new status item. """Create a new status item.
""" """
newItem = self._addItem(None, self.tr("New Item"), (100, 100, 100), 0) 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.colChanged = True self.colChanged = True
return return
@pyqtSlot()
def _delItem(self): def _delItem(self):
"""Delete a status item. """Delete a status item.
""" """
selItem = self._getSelectedItem() selItem = self._getSelectedItem()
if selItem is not None: if isinstance(selItem, QTreeWidgetItem):
iRow = self.listBox.indexOfTopLevelItem(selItem) iRow = self.listBox.indexOfTopLevelItem(selItem)
if selItem.data(self.COL_LABEL, self.NUM_ROLE) > 0: if selItem.data(self.COL_LABEL, self.NUM_ROLE) > 0:
self.mainGui.makeAlert(self.tr( self.mainGui.makeAlert(self.tr(
@@ -442,21 +445,60 @@ class GuiProjectEditStatus(QWidget):
self.colChanged = True self.colChanged = True
return return
@pyqtSlot()
def _saveItem(self): def _saveItem(self):
"""Save changes made to a status item. """Save changes made to a status item.
""" """
selItem = self._getSelectedItem() selItem = self._getSelectedItem()
if selItem is not None: if isinstance(selItem, QTreeWidgetItem):
selItem.setText(self.COL_LABEL, simplified(self.editName.text())) selItem.setText(self.COL_LABEL, simplified(self.editName.text()))
selItem.setIcon(self.COL_LABEL, self.colButton.icon()) selItem.setIcon(self.COL_LABEL, self.colButton.icon())
selItem.setData(self.COL_LABEL, self.COL_ROLE, ( selItem.setData(self.COL_LABEL, self.COL_ROLE, (
self.selColour.red(), self.selColour.green(), self.selColour.blue() self.selColour.red(), self.selColour.green(), self.selColour.blue()
)) ))
self.editName.setEnabled(False)
self.colChanged = True self.colChanged = True
return 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): def _addItem(self, key, name, cols, count):
"""Add a status item to the list. """Add a status item to the list.
""" """
@@ -473,7 +515,7 @@ class GuiProjectEditStatus(QWidget):
self.listBox.addTopLevelItem(item) self.listBox.addTopLevelItem(item)
return item return
def _moveItem(self, step): def _moveItem(self, step):
"""Move and item up or down step. """Move and item up or down step.
@@ -498,32 +540,6 @@ class GuiProjectEditStatus(QWidget):
return 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): def _getSelectedItem(self):
"""Get the currently selected item. """Get the currently selected item.
""" """
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-06-18 [0.9] Created: 2020-06-18 [0.9]
This file is a part of novelWriter 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 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 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] Created: 2021-08-21 [1.5b1]
This file is a part of novelWriter 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 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 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] Created: 2021-02-12 [1.2rc1]
This file is a part of novelWriter 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 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 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] Created: 2018-11-02 [0.0.1]
This file is a part of novelWriter 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 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 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] Created: 2020-08-02 [0.10.2]
This file is a part of novelWriter 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 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 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 Created: 2022-11-17 [2.0] NovelSelector
This file is a part of novelWriter 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 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 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 Rewritten: 2020-10-07 [1.0b3] BackgroundWordCounter
This file is a part of novelWriter 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 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 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] Created: 2019-04-06 [0.0.1]
This file is a part of novelWriter 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 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 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 Created: 2020-09-08 [1.0b1] GuiDocViewHistory
This file is a part of novelWriter 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 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 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] Created: 2019-04-24 [0.0.1]
This file is a part of novelWriter 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 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 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] Created: 2019-04-27 [0.0.1]
This file is a part of novelWriter 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 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 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 Created: 2020-06-02 [0.7] GuiOutlineDetails
This file is a part of novelWriter 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 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 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 Created: 2022-06-06 [2.0rc1] GuiProjectToolBar
This file is a part of novelWriter 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 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 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() isDocFile = isFile and tItem.isDocumentLayout()
isNoteFile = isFile and tItem.isNoteLayout() 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 = mTrans.addAction(self.tr("Convert to {0}").format(trDoc))
aConvert1.triggered.connect( aConvert1.triggered.connect(
lambda: self._changeItemLayout(tHandle, nwItemLayout.DOCUMENT) lambda: self._changeItemLayout(tHandle, nwItemLayout.DOCUMENT)
) )
if isDocFile or isFolder: if isDocFile:
aConvert2 = mTrans.addAction(self.tr("Convert to {0}").format(trNote)) aConvert2 = mTrans.addAction(self.tr("Convert to {0}").format(trNote))
aConvert2.triggered.connect( aConvert2.triggered.connect(
lambda: self._changeItemLayout(tHandle, nwItemLayout.NOTE) 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: if hasChild and isFile:
aMerge1 = mTrans.addAction(self.tr("Merge Child Items into Self")) aMerge1 = mTrans.addAction(self.tr("Merge Child Items into Self"))
aMerge1.triggered.connect(lambda: self._mergeDocuments(tHandle, False)) aMerge1.triggered.connect(lambda: self._mergeDocuments(tHandle, False))
@@ -1681,19 +1693,23 @@ class GuiProjectTree(QTreeWidget):
del self._treeMap[tHandle] del self._treeMap[tHandle]
return None return None
else: elif pHandle in self._treeMap:
byIndex = -1 byIndex = -1
if nHandle is not None and nHandle in self._treeMap: if nHandle is not None and nHandle in self._treeMap:
try: byIndex = self._treeMap[pHandle].indexOfChild(self._treeMap[nHandle])
byIndex = self._treeMap[pHandle].indexOfChild(self._treeMap[nHandle])
except Exception:
logger.error("Failed to get index of item with handle '%s'", nHandle)
if byIndex >= 0: if byIndex >= 0:
self._treeMap[pHandle].insertChild(byIndex + 1, newItem) self._treeMap[pHandle].insertChild(byIndex + 1, newItem)
else: else:
self._treeMap[pHandle].addChild(newItem) self._treeMap[pHandle].addChild(newItem)
self.propagateCount(tHandle, nwItem.wordCount, countChildren=True) 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) self.setTreeItemValues(tHandle)
newItem.setExpanded(nwItem.isExpanded) newItem.setExpanded(nwItem.isExpanded)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2022-05-10 [2.0rc1] Created: 2022-05-10 [2.0rc1]
This file is a part of novelWriter 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 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 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 Created: 2020-05-17 [0.5.1] StatusLED
This file is a part of novelWriter 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 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 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 Created: 2019-11-08 [0.4] GuiIcons
This file is a part of novelWriter 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 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 it under the terms of the GNU General Public License as published by
@@ -507,8 +507,10 @@ class GuiIcons:
self._themeMap = {} self._themeMap = {}
themePath = self._iconPath / iconTheme themePath = self._iconPath / iconTheme
if not themePath.is_dir(): if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme) themePath = self.mainConf.dataPath("icons") / iconTheme
return False if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme)
return False
themeConf = themePath / self._confName themeConf = themePath / self._confName
logger.info("Loading icon theme '%s'", iconTheme) logger.info("Loading icon theme '%s'", iconTheme)
+2 -2
View File
@@ -7,7 +7,7 @@ File History:
Created: 2018-09-22 [0.0.1] Created: 2018-09-22 [0.0.1]
This file is a part of novelWriter 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 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 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) logger.debug("Requested item '%s' is not a document", tHandle)
return False return False
self._changeView(nwView.EDITOR)
cHandle = self.docEditor.docHandle() cHandle = self.docEditor.docHandle()
if cHandle == tHandle: if cHandle == tHandle:
self.docEditor.setCursorLine(tLine) self.docEditor.setCursorLine(tLine)
@@ -618,7 +619,6 @@ class GuiMain(QMainWindow):
return True return True
self.closeDocument(beforeOpen=True) self.closeDocument(beforeOpen=True)
self._changeView(nwView.EDITOR)
if self.docEditor.loadText(tHandle, tLine): if self.docEditor.loadText(tHandle, tLine):
self.theProject.data.setLastHandle(tHandle, "editor") self.theProject.data.setLastHandle(tHandle, "editor")
self.projView.setSelectedHandle(tHandle, doScroll=doScroll) self.projView.setSelectedHandle(tHandle, doScroll=doScroll)
+1 -1
View File
@@ -7,7 +7,7 @@ File History:
Created: 2020-05-09 [0.5] Created: 2020-05-09 [0.5]
This file is a part of novelWriter 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 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 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] Created: 2022-04-02 [2.0rc1]
This file is a part of novelWriter 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 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 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] Created: 2020-07-11 [0.10.1]
This file is a part of novelWriter 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 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 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] Created: 2019-10-20 [0.3]
This file is a part of novelWriter 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 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 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'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0.2" hexVersion="0x020002f0" fileVersion="1.5" timeStamp="2022-12-01 23:33:10"> <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="1463" autoCount="237" editTime="74319"> <project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="1467" autoCount="237" editTime="74387">
<name>Sample Project</name> <name>Sample Project</name>
<title>Sample Project</title> <title>Sample Project</title>
<author>Jane Smith</author> <author>Jane Smith</author>
+3 -2
View File
@@ -8,7 +8,7 @@ File History:
Created: 2019-05-16 [0.5.1] Created: 2019-05-16 [0.5.1]
This file is a part of novelWriter 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 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 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): def makeForLaunchpad(doSign=False, isFirst=False, isSnapshot=False):
"""Wrapper for building debian packages for launcpad. """Wrapper for building debian packages for launchpad.
""" """
print("") print("")
print("Launchpad Packages") print("Launchpad Packages")
@@ -853,6 +853,7 @@ def makeForLaunchpad(doSign=False, isFirst=False, isSnapshot=False):
("20.04", "focal"), ("20.04", "focal"),
("22.04", "jammy"), ("22.04", "jammy"),
("22.10", "kinetic"), ("22.10", "kinetic"),
("23.04", "lunar"),
] ]
tStamp = datetime.datetime.now().strftime("%Y%m%d~%H%M%S") 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 # Open project as a new project should fail
assert storage.openProjectInPlace(fncPath, newProject=True) is False 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 assert storage.openProjectInPlace(fncPath, newProject=False) is True
# Opening the project file is also fine # Opening the project file is also fine
assert storage.openProjectInPlace(fncPath / nwFiles.PROJ_FILE, newProject=False) is True 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 # Check settings
assert storage.storagePath == fncPath assert storage.storagePath == fncPath
assert storage.runtimePath == fncPath assert storage.runtimePath == fncPath
+1 -1
View File
@@ -3,7 +3,7 @@ novelWriter ToHtml Class Tester
================================= =================================
This file is a part of novelWriter 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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