Remove pre-generatiopn of status and importance items

This commit is contained in:
Veronica Berglyd Olsen
2022-10-31 23:18:16 +01:00
parent a88a2f5b40
commit 6fd7107675
15 changed files with 242 additions and 285 deletions
+18 -14
View File
@@ -254,14 +254,6 @@ class NWProject(QObject):
self.projContent = None self.projContent = None
self.projDict = None self.projDict = None
self.projFiles = [] self.projFiles = []
self._data.itemStatus.write(None, self.tr("New"), (100, 100, 100))
self._data.itemStatus.write(None, self.tr("Note"), (200, 50, 0))
self._data.itemStatus.write(None, self.tr("Draft"), (200, 150, 0))
self._data.itemStatus.write(None, self.tr("Finished"), (50, 200, 0))
self._data.itemImport.write(None, self.tr("New"), (100, 100, 100))
self._data.itemImport.write(None, self.tr("Minor"), (200, 50, 0))
self._data.itemImport.write(None, self.tr("Major"), (200, 150, 0))
self._data.itemImport.write(None, self.tr("Main"), (50, 200, 0))
return return
@@ -294,6 +286,17 @@ class NWProject(QObject):
return False return False
self.clearProject() self.clearProject()
self._data.itemStatus.write(None, self.tr("New"), (100, 100, 100))
self._data.itemStatus.write(None, self.tr("Note"), (200, 50, 0))
self._data.itemStatus.write(None, self.tr("Draft"), (200, 150, 0))
self._data.itemStatus.write(None, self.tr("Finished"), (50, 200, 0))
self._data.itemImport.write(None, self.tr("New"), (100, 100, 100))
self._data.itemImport.write(None, self.tr("Minor"), (200, 50, 0))
self._data.itemImport.write(None, self.tr("Major"), (200, 150, 0))
self._data.itemImport.write(None, self.tr("Main"), (50, 200, 0))
if not self.setProjectPath(projPath, newProject=True): if not self.setProjectPath(projPath, newProject=True):
return False return False
@@ -859,15 +862,16 @@ class NWProject(QObject):
""" """
return self._setStatusImport(newCols, delCols, self._data.itemImport) return self._setStatusImport(newCols, delCols, self._data.itemImport)
def setProjectChanged(self, bValue): def setProjectChanged(self, value):
"""Toggle the project changed flag, and propagate the """Toggle the project changed flag, and propagate the
information to the GUI statusbar. information to the GUI statusbar.
""" """
self._projChanged = bValue if isinstance(value, bool):
self.projectStatusChanged.emit(self._projChanged) self._projChanged = value
if bValue is True: self.projectStatusChanged.emit(self._projChanged)
# If we've changed the project at all, this should be True if value:
self._projAltered = True # If we've changed the project at all, this should be True
self._projAltered = True
return self._projChanged return self._projChanged
## ##
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:20:45"> <novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 23:08:06">
<project> <project>
<name>Test Custom</name> <name>Test Custom</name>
<title>Test Novel</title> <title>Test Novel</title>
@@ -32,106 +32,106 @@
<entry key="section"></entry> <entry key="section"></entry>
</titleFormat> </titleFormat>
<status> <status>
<entry key="s000008" count="15" red="100" green="100" blue="100">New</entry> <entry key="s000000" count="15" red="100" green="100" blue="100">New</entry>
<entry key="s000009" count="0" red="200" green="50" blue="0">Note</entry> <entry key="s000001" count="0" red="200" green="50" blue="0">Note</entry>
<entry key="s00000a" count="0" red="200" green="150" blue="0">Draft</entry> <entry key="s000002" count="0" red="200" green="150" blue="0">Draft</entry>
<entry key="s00000b" count="0" red="50" green="200" blue="0">Finished</entry> <entry key="s000003" count="0" red="50" green="200" blue="0">Finished</entry>
</status> </status>
<importance> <importance>
<entry key="i00000c" count="7" red="100" green="100" blue="100">New</entry> <entry key="i000004" count="7" red="100" green="100" blue="100">New</entry>
<entry key="i00000d" count="0" red="200" green="50" blue="0">Minor</entry> <entry key="i000005" count="0" red="200" green="50" blue="0">Minor</entry>
<entry key="i00000e" count="0" red="200" green="150" blue="0">Major</entry> <entry key="i000006" count="0" red="200" green="150" blue="0">Major</entry>
<entry key="i00000f" count="0" red="50" green="200" blue="0">Main</entry> <entry key="i000007" count="0" red="50" green="200" blue="0">Main</entry>
</importance> </importance>
</settings> </settings>
<content count="22"> <content count="22">
<item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000008" parent="None" root="0000000000008" order="0" type="ROOT" class="NOVEL">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
<item handle="0000000000011" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000009" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Title Page</name> <name status="s000000" import="i000004" active="True">Title Page</name>
</item> </item>
<item handle="0000000000012" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000a" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Chapter 1</name> <name status="s000000" import="i000004" active="True">Chapter 1</name>
</item> </item>
<item handle="0000000000013" parent="0000000000012" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000b" parent="000000000000a" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 1.1</name> <name status="s000000" import="i000004" active="True">Scene 1.1</name>
</item> </item>
<item handle="0000000000014" parent="0000000000012" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000c" parent="000000000000a" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 1.2</name> <name status="s000000" import="i000004" active="True">Scene 1.2</name>
</item> </item>
<item handle="0000000000015" parent="0000000000012" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000d" parent="000000000000a" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 1.3</name> <name status="s000000" import="i000004" active="True">Scene 1.3</name>
</item> </item>
<item handle="0000000000016" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000e" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Chapter 2</name> <name status="s000000" import="i000004" active="True">Chapter 2</name>
</item> </item>
<item handle="0000000000017" parent="0000000000016" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="000000000000e" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 2.1</name> <name status="s000000" import="i000004" active="True">Scene 2.1</name>
</item> </item>
<item handle="0000000000018" parent="0000000000016" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000010" parent="000000000000e" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 2.2</name> <name status="s000000" import="i000004" active="True">Scene 2.2</name>
</item> </item>
<item handle="0000000000019" parent="0000000000016" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000011" parent="000000000000e" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 2.3</name> <name status="s000000" import="i000004" active="True">Scene 2.3</name>
</item> </item>
<item handle="000000000001a" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000012" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Chapter 3</name> <name status="s000000" import="i000004" active="True">Chapter 3</name>
</item> </item>
<item handle="000000000001b" parent="000000000001a" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000013" parent="0000000000012" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 3.1</name> <name status="s000000" import="i000004" active="True">Scene 3.1</name>
</item> </item>
<item handle="000000000001c" parent="000000000001a" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000014" parent="0000000000012" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 3.2</name> <name status="s000000" import="i000004" active="True">Scene 3.2</name>
</item> </item>
<item handle="000000000001d" parent="000000000001a" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000015" parent="0000000000012" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 3.3</name> <name status="s000000" import="i000004" active="True">Scene 3.3</name>
</item> </item>
<item handle="000000000001e" parent="None" root="000000000001e" order="0" type="ROOT" class="PLOT"> <item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="PLOT">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="000000000001f" parent="000000000001e" root="000000000001e" order="0" type="FILE" class="PLOT" layout="NOTE"> <item handle="0000000000017" parent="0000000000016" root="0000000000016" order="0" type="FILE" class="PLOT" layout="NOTE">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Main Plot</name> <name status="s000000" import="i000004" active="True">Main Plot</name>
</item> </item>
<item handle="0000000000020" parent="None" root="0000000000020" order="0" type="ROOT" class="CHARACTER"> <item handle="0000000000018" parent="None" root="0000000000018" order="0" type="ROOT" class="CHARACTER">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="0000000000021" parent="0000000000020" root="0000000000020" order="0" type="FILE" class="CHARACTER" layout="NOTE"> <item handle="0000000000019" parent="0000000000018" root="0000000000018" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Protagonist</name> <name status="s000000" import="i000004" active="True">Protagonist</name>
</item> </item>
<item handle="0000000000022" parent="None" root="0000000000022" order="0" type="ROOT" class="WORLD"> <item handle="000000000001a" parent="None" root="000000000001a" order="0" type="ROOT" class="WORLD">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="0000000000023" parent="0000000000022" root="0000000000022" order="0" type="FILE" class="WORLD" layout="NOTE"> <item handle="000000000001b" parent="000000000001a" root="000000000001a" order="0" type="FILE" class="WORLD" layout="NOTE">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Main Location</name> <name status="s000000" import="i000004" active="True">Main Location</name>
</item> </item>
<item handle="0000000000024" parent="None" root="0000000000024" order="0" type="ROOT" class="ARCHIVE"> <item handle="000000000001c" parent="None" root="000000000001c" order="0" type="ROOT" class="ARCHIVE">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Archive</name> <name status="s000000" import="i000004">Archive</name>
</item> </item>
<item handle="0000000000025" parent="None" root="0000000000025" order="0" type="ROOT" class="TRASH"> <item handle="000000000001d" parent="None" root="000000000001d" order="0" type="ROOT" class="TRASH">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Trash</name> <name status="s000000" import="i000004">Trash</name>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:20:45"> <novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 23:08:06">
<project> <project>
<name>Test Custom</name> <name>Test Custom</name>
<title>Test Novel</title> <title>Test Novel</title>
@@ -32,82 +32,82 @@
<entry key="section"></entry> <entry key="section"></entry>
</titleFormat> </titleFormat>
<status> <status>
<entry key="s000008" count="9" red="100" green="100" blue="100">New</entry> <entry key="s000000" count="9" red="100" green="100" blue="100">New</entry>
<entry key="s000009" count="0" red="200" green="50" blue="0">Note</entry> <entry key="s000001" count="0" red="200" green="50" blue="0">Note</entry>
<entry key="s00000a" count="0" red="200" green="150" blue="0">Draft</entry> <entry key="s000002" count="0" red="200" green="150" blue="0">Draft</entry>
<entry key="s00000b" count="0" red="50" green="200" blue="0">Finished</entry> <entry key="s000003" count="0" red="50" green="200" blue="0">Finished</entry>
</status> </status>
<importance> <importance>
<entry key="i00000c" count="7" red="100" green="100" blue="100">New</entry> <entry key="i000004" count="7" red="100" green="100" blue="100">New</entry>
<entry key="i00000d" count="0" red="200" green="50" blue="0">Minor</entry> <entry key="i000005" count="0" red="200" green="50" blue="0">Minor</entry>
<entry key="i00000e" count="0" red="200" green="150" blue="0">Major</entry> <entry key="i000006" count="0" red="200" green="150" blue="0">Major</entry>
<entry key="i00000f" count="0" red="50" green="200" blue="0">Main</entry> <entry key="i000007" count="0" red="50" green="200" blue="0">Main</entry>
</importance> </importance>
</settings> </settings>
<content count="16"> <content count="16">
<item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000008" parent="None" root="0000000000008" order="0" type="ROOT" class="NOVEL">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
<item handle="0000000000011" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000009" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Title Page</name> <name status="s000000" import="i000004" active="True">Title Page</name>
</item> </item>
<item handle="0000000000012" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000a" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 1</name> <name status="s000000" import="i000004" active="True">Scene 1</name>
</item> </item>
<item handle="0000000000013" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000b" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 2</name> <name status="s000000" import="i000004" active="True">Scene 2</name>
</item> </item>
<item handle="0000000000014" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000c" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 3</name> <name status="s000000" import="i000004" active="True">Scene 3</name>
</item> </item>
<item handle="0000000000015" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000d" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 4</name> <name status="s000000" import="i000004" active="True">Scene 4</name>
</item> </item>
<item handle="0000000000016" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000e" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 5</name> <name status="s000000" import="i000004" active="True">Scene 5</name>
</item> </item>
<item handle="0000000000017" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Scene 6</name> <name status="s000000" import="i000004" active="True">Scene 6</name>
</item> </item>
<item handle="0000000000018" parent="None" root="0000000000018" order="0" type="ROOT" class="PLOT"> <item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="PLOT">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="0000000000019" parent="0000000000018" root="0000000000018" order="0" type="FILE" class="PLOT" layout="NOTE"> <item handle="0000000000011" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="PLOT" layout="NOTE">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Main Plot</name> <name status="s000000" import="i000004" active="True">Main Plot</name>
</item> </item>
<item handle="000000000001a" parent="None" root="000000000001a" order="0" type="ROOT" class="CHARACTER"> <item handle="0000000000012" parent="None" root="0000000000012" order="0" type="ROOT" class="CHARACTER">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="000000000001b" parent="000000000001a" root="000000000001a" order="0" type="FILE" class="CHARACTER" layout="NOTE"> <item handle="0000000000013" parent="0000000000012" root="0000000000012" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Protagonist</name> <name status="s000000" import="i000004" active="True">Protagonist</name>
</item> </item>
<item handle="000000000001c" parent="None" root="000000000001c" order="0" type="ROOT" class="WORLD"> <item handle="0000000000014" parent="None" root="0000000000014" order="0" type="ROOT" class="WORLD">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="000000000001d" parent="000000000001c" root="000000000001c" order="0" type="FILE" class="WORLD" layout="NOTE"> <item handle="0000000000015" parent="0000000000014" root="0000000000014" order="0" type="FILE" class="WORLD" layout="NOTE">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Main Location</name> <name status="s000000" import="i000004" active="True">Main Location</name>
</item> </item>
<item handle="000000000001e" parent="None" root="000000000001e" order="0" type="ROOT" class="ARCHIVE"> <item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="ARCHIVE">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Archive</name> <name status="s000000" import="i000004">Archive</name>
</item> </item>
<item handle="000000000001f" parent="None" root="000000000001f" order="0" type="ROOT" class="TRASH"> <item handle="0000000000017" parent="None" root="0000000000017" order="0" type="ROOT" class="TRASH">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Trash</name> <name status="s000000" import="i000004">Trash</name>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:20:45"> <novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 23:06:52">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -76,15 +76,15 @@
<meta expanded="False" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0"/>
<name status="s000000" import="i000004" active="True">New Scene</name> <name status="s000000" import="i000004" active="True">New Scene</name>
</item> </item>
<item handle="0000000000020" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL"> <item handle="0000000000010" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Stuff</name> <name status="s000000" import="i000004">Stuff</name>
</item> </item>
<item handle="0000000000021" parent="0000000000020" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000011" parent="0000000000010" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H2" charCount="5" wordCount="1" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H2" charCount="5" wordCount="1" paraCount="0" cursorPos="0"/>
<name status="s000000" import="i000004" active="True">Hello</name> <name status="s000000" import="i000004" active="True">Hello</name>
</item> </item>
<item handle="0000000000022" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE"> <item handle="0000000000012" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<meta expanded="False" heading="H1" charCount="11" wordCount="3" paraCount="1" cursorPos="0"/> <meta expanded="False" heading="H1" charCount="11" wordCount="3" paraCount="1" cursorPos="0"/>
<name status="s000000" import="i000004" active="True">Jane</name> <name status="s000000" import="i000004" active="True">Jane</name>
</item> </item>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:20:45"> <novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 23:08:06">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>None</title> <title>None</title>
@@ -30,50 +30,50 @@
<entry key="section"></entry> <entry key="section"></entry>
</titleFormat> </titleFormat>
<status> <status>
<entry key="s000008" count="5" red="100" green="100" blue="100">New</entry> <entry key="s000000" count="5" red="100" green="100" blue="100">New</entry>
<entry key="s000009" count="0" red="200" green="50" blue="0">Note</entry> <entry key="s000001" count="0" red="200" green="50" blue="0">Note</entry>
<entry key="s00000a" count="0" red="200" green="150" blue="0">Draft</entry> <entry key="s000002" count="0" red="200" green="150" blue="0">Draft</entry>
<entry key="s00000b" count="0" red="50" green="200" blue="0">Finished</entry> <entry key="s000003" count="0" red="50" green="200" blue="0">Finished</entry>
</status> </status>
<importance> <importance>
<entry key="i00000c" count="3" red="100" green="100" blue="100">New</entry> <entry key="i000004" count="3" red="100" green="100" blue="100">New</entry>
<entry key="i00000d" count="0" red="200" green="50" blue="0">Minor</entry> <entry key="i000005" count="0" red="200" green="50" blue="0">Minor</entry>
<entry key="i00000e" count="0" red="200" green="150" blue="0">Major</entry> <entry key="i000006" count="0" red="200" green="150" blue="0">Major</entry>
<entry key="i00000f" count="0" red="50" green="200" blue="0">Main</entry> <entry key="i000007" count="0" red="50" green="200" blue="0">Main</entry>
</importance> </importance>
</settings> </settings>
<content count="8"> <content count="8">
<item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000008" parent="None" root="0000000000008" order="0" type="ROOT" class="NOVEL">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
<item handle="0000000000011" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000009" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">Title Page</name> <name status="s000000" import="i000004" active="True">Title Page</name>
</item> </item>
<item handle="0000000000012" parent="0000000000010" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000a" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">New Chapter</name> <name status="s000000" import="i000004" active="True">New Chapter</name>
</item> </item>
<item handle="0000000000013" parent="0000000000012" root="0000000000010" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000b" parent="000000000000a" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<name status="s000008" import="i00000c" active="True">New Scene</name> <name status="s000000" import="i000004" active="True">New Scene</name>
</item> </item>
<item handle="0000000000014" parent="None" root="0000000000014" order="0" type="ROOT" class="PLOT"> <item handle="000000000000c" parent="None" root="000000000000c" order="0" type="ROOT" class="PLOT">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="0000000000015" parent="None" root="0000000000015" order="0" type="ROOT" class="CHARACTER"> <item handle="000000000000d" parent="None" root="000000000000d" order="0" type="ROOT" class="CHARACTER">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="WORLD"> <item handle="000000000000e" parent="None" root="000000000000e" order="0" type="ROOT" class="WORLD">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="0000000000017" parent="None" root="0000000000017" order="0" type="ROOT" class="ARCHIVE"> <item handle="000000000000f" parent="None" root="000000000000f" order="0" type="ROOT" class="ARCHIVE">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000008" import="i00000c">Archive</name> <name status="s000000" import="i000004">Archive</name>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:23:18"> <novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 23:08:06">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -76,35 +76,35 @@
<meta expanded="False" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0"/> <meta expanded="False" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0"/>
<name status="s000000" import="i000004" active="True">New Scene</name> <name status="s000000" import="i000004" active="True">New Scene</name>
</item> </item>
<item handle="0000000000020" parent="None" root="0000000000020" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="NOVEL">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
<item handle="0000000000021" parent="None" root="0000000000021" order="0" type="ROOT" class="PLOT"> <item handle="0000000000011" parent="None" root="0000000000011" order="0" type="ROOT" class="PLOT">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="0000000000022" parent="None" root="0000000000022" order="0" type="ROOT" class="CHARACTER"> <item handle="0000000000012" parent="None" root="0000000000012" order="0" type="ROOT" class="CHARACTER">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="0000000000023" parent="None" root="0000000000023" order="0" type="ROOT" class="WORLD"> <item handle="0000000000013" parent="None" root="0000000000013" order="0" type="ROOT" class="WORLD">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="0000000000024" parent="None" root="0000000000024" order="0" type="ROOT" class="TIMELINE"> <item handle="0000000000014" parent="None" root="0000000000014" order="0" type="ROOT" class="TIMELINE">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Timeline</name> <name status="s000000" import="i000004">Timeline</name>
</item> </item>
<item handle="0000000000025" parent="None" root="0000000000025" order="0" type="ROOT" class="OBJECT"> <item handle="0000000000015" parent="None" root="0000000000015" order="0" type="ROOT" class="OBJECT">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Objects</name> <name status="s000000" import="i000004">Objects</name>
</item> </item>
<item handle="0000000000026" parent="None" root="0000000000026" order="0" type="ROOT" class="CUSTOM"> <item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="CUSTOM">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Custom</name> <name status="s000000" import="i000004">Custom</name>
</item> </item>
<item handle="0000000000027" parent="None" root="0000000000027" order="0" type="ROOT" class="CUSTOM"> <item handle="0000000000017" parent="None" root="0000000000017" order="0" type="ROOT" class="CUSTOM">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Custom</name> <name status="s000000" import="i000004">Custom</name>
</item> </item>
@@ -1,5 +1,5 @@
%%~name: New Note %%~name: New Note
%%~path: 000000000000a/0000000000020 %%~path: 000000000000a/0000000000010
%%~kind: CHARACTER/NOTE %%~kind: CHARACTER/NOTE
# Jane Doe # Jane Doe
@@ -1,5 +1,5 @@
%%~name: New Note %%~name: New Note
%%~path: 0000000000009/0000000000021 %%~path: 0000000000009/0000000000011
%%~kind: PLOT/NOTE %%~kind: PLOT/NOTE
# Main Plot # Main Plot
@@ -1,5 +1,5 @@
%%~name: New Note %%~name: New Note
%%~path: 000000000000b/0000000000022 %%~path: 000000000000b/0000000000012
%%~kind: WORLD/NOTE %%~kind: WORLD/NOTE
# Main Location # Main Location
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:31:39"> <novelWriterXML appVersion="2.0-rc1" hexVersion="0x020000c1" fileVersion="1.4" timeStamp="2022-10-31 22:53:34">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -68,7 +68,7 @@
<meta expanded="True"/> <meta expanded="True"/>
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="0000000000021" parent="0000000000009" root="0000000000009" order="0" type="FILE" class="PLOT" layout="NOTE"> <item handle="0000000000011" parent="0000000000009" root="0000000000009" order="0" type="FILE" class="PLOT" layout="NOTE">
<meta expanded="False" heading="H1" charCount="48" wordCount="10" paraCount="1" cursorPos="69"/> <meta expanded="False" heading="H1" charCount="48" wordCount="10" paraCount="1" cursorPos="69"/>
<name status="s000000" import="i000004" active="True">New Note</name> <name status="s000000" import="i000004" active="True">New Note</name>
</item> </item>
@@ -76,7 +76,7 @@
<meta expanded="True"/> <meta expanded="True"/>
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="0000000000020" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE"> <item handle="0000000000010" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<meta expanded="False" heading="H1" charCount="34" wordCount="8" paraCount="1" cursorPos="51"/> <meta expanded="False" heading="H1" charCount="34" wordCount="8" paraCount="1" cursorPos="51"/>
<name status="s000000" import="i000004" active="True">New Note</name> <name status="s000000" import="i000004" active="True">New Note</name>
</item> </item>
@@ -84,11 +84,11 @@
<meta expanded="True"/> <meta expanded="True"/>
<name status="s000000" import="i000004">World</name> <name status="s000000" import="i000004">World</name>
</item> </item>
<item handle="0000000000022" parent="000000000000b" root="000000000000b" order="0" type="FILE" class="WORLD" layout="NOTE"> <item handle="0000000000012" parent="000000000000b" root="000000000000b" order="0" type="FILE" class="WORLD" layout="NOTE">
<meta expanded="False" heading="H1" charCount="51" wordCount="9" paraCount="1" cursorPos="68"/> <meta expanded="False" heading="H1" charCount="51" wordCount="9" paraCount="1" cursorPos="68"/>
<name status="s000000" import="i000004" active="True">New Note</name> <name status="s000000" import="i000004" active="True">New Note</name>
</item> </item>
<item handle="0000000000024" parent="None" root="0000000000024" order="4" type="ROOT" class="TRASH"> <item handle="0000000000014" parent="None" root="0000000000014" order="4" type="ROOT" class="TRASH">
<meta expanded="False"/> <meta expanded="False"/>
<name status="s000000" import="i000004">Trash</name> <name status="s000000" import="i000004">Trash</name>
</item> </item>
+7 -4
View File
@@ -25,7 +25,7 @@ from lxml import etree
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from tools import C from tools import C, buildTestProject
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.core.project import NWProject from novelwriter.core.project import NWProject
@@ -33,10 +33,12 @@ from novelwriter.enum import nwItemClass, nwItemType, nwItemLayout
@pytest.mark.core @pytest.mark.core
def testCoreItem_Setters(mockGUI, mockRnd): def testCoreItem_Setters(mockGUI, mockRnd, fncDir):
"""Test all the simple setters for the NWItem class. """Test all the simple setters for the NWItem class.
""" """
theProject = NWProject(mockGUI) theProject = NWProject(mockGUI)
mockRnd.reset()
buildTestProject(theProject, fncDir)
theItem = NWItem(theProject) theItem = NWItem(theProject)
statusKeys = ["s000000", "s000001", "s000002", "s000003"] statusKeys = ["s000000", "s000001", "s000002", "s000003"]
@@ -192,11 +194,12 @@ def testCoreItem_Setters(mockGUI, mockRnd):
@pytest.mark.core @pytest.mark.core
def testCoreItem_Methods(mockGUI, mockRnd): def testCoreItem_Methods(mockGUI, mockRnd, fncDir):
"""Test the simple methods of the NWItem class. """Test the simple methods of the NWItem class.
""" """
mockRnd.reset()
theProject = NWProject(mockGUI) theProject = NWProject(mockGUI)
mockRnd.reset()
buildTestProject(theProject, fncDir)
theItem = NWItem(theProject) theItem = NWItem(theProject)
# Describe Me # Describe Me
+54 -54
View File
@@ -263,14 +263,14 @@ def testCoreProject_NewRoot(fncDir, outDir, refDir, mockGUI, mockRnd):
assert theProject.closeProject() is True assert theProject.closeProject() is True
assert theProject.openProject(projFile) is True assert theProject.openProject(projFile) is True
assert theProject.newRoot(nwItemClass.NOVEL) == "0000000000020" assert theProject.newRoot(nwItemClass.NOVEL) == "0000000000010"
assert theProject.newRoot(nwItemClass.PLOT) == "0000000000021" assert theProject.newRoot(nwItemClass.PLOT) == "0000000000011"
assert theProject.newRoot(nwItemClass.CHARACTER) == "0000000000022" assert theProject.newRoot(nwItemClass.CHARACTER) == "0000000000012"
assert theProject.newRoot(nwItemClass.WORLD) == "0000000000023" assert theProject.newRoot(nwItemClass.WORLD) == "0000000000013"
assert theProject.newRoot(nwItemClass.TIMELINE) == "0000000000024" assert theProject.newRoot(nwItemClass.TIMELINE) == "0000000000014"
assert theProject.newRoot(nwItemClass.OBJECT) == "0000000000025" assert theProject.newRoot(nwItemClass.OBJECT) == "0000000000015"
assert theProject.newRoot(nwItemClass.CUSTOM) == "0000000000026" assert theProject.newRoot(nwItemClass.CUSTOM) == "0000000000016"
assert theProject.newRoot(nwItemClass.CUSTOM) == "0000000000027" assert theProject.newRoot(nwItemClass.CUSTOM) == "0000000000017"
assert theProject.projChanged is True assert theProject.projChanged is True
assert theProject.saveProject() is True assert theProject.saveProject() is True
@@ -281,23 +281,23 @@ def testCoreProject_NewRoot(fncDir, outDir, refDir, mockGUI, mockRnd):
assert theProject.projChanged is False assert theProject.projChanged is False
# Delete the new items # Delete the new items
assert theProject.removeItem("0000000000020") is True assert theProject.removeItem("0000000000010") is True
assert theProject.removeItem("0000000000021") is True assert theProject.removeItem("0000000000011") is True
assert theProject.removeItem("0000000000022") is True assert theProject.removeItem("0000000000012") is True
assert theProject.removeItem("0000000000023") is True assert theProject.removeItem("0000000000013") is True
assert theProject.removeItem("0000000000024") is True assert theProject.removeItem("0000000000014") is True
assert theProject.removeItem("0000000000025") is True assert theProject.removeItem("0000000000015") is True
assert theProject.removeItem("0000000000026") is True assert theProject.removeItem("0000000000016") is True
assert theProject.removeItem("0000000000027") is True assert theProject.removeItem("0000000000017") is True
assert "0000000000020" not in theProject.tree assert "0000000000010" not in theProject.tree
assert "0000000000021" not in theProject.tree assert "0000000000011" not in theProject.tree
assert "0000000000022" not in theProject.tree assert "0000000000012" not in theProject.tree
assert "0000000000023" not in theProject.tree assert "0000000000013" not in theProject.tree
assert "0000000000024" not in theProject.tree assert "0000000000014" not in theProject.tree
assert "0000000000025" not in theProject.tree assert "0000000000015" not in theProject.tree
assert "0000000000026" not in theProject.tree assert "0000000000016" not in theProject.tree
assert "0000000000027" not in theProject.tree assert "0000000000017" not in theProject.tree
# END Test testCoreProject_NewRoot # END Test testCoreProject_NewRoot
@@ -324,26 +324,26 @@ def testCoreProject_NewFileFolder(monkeypatch, fncDir, outDir, refDir, mockGUI,
assert theProject.newFile("New File", "1234567890abc") is None assert theProject.newFile("New File", "1234567890abc") is None
# Add files properly # Add files properly
assert theProject.newFolder("Stuff", C.hNovelRoot) == "0000000000020" assert theProject.newFolder("Stuff", C.hNovelRoot) == "0000000000010"
assert theProject.newFile("Hello", "0000000000020") == "0000000000021" assert theProject.newFile("Hello", "0000000000010") == "0000000000011"
assert theProject.newFile("Jane", C.hCharRoot) == "0000000000022" assert theProject.newFile("Jane", C.hCharRoot) == "0000000000012"
assert "0000000000020" in theProject.tree assert "0000000000010" in theProject.tree
assert "0000000000021" in theProject.tree assert "0000000000011" in theProject.tree
assert "0000000000022" in theProject.tree assert "0000000000012" in theProject.tree
# Write to file, failed # Write to file, failed
assert theProject.writeNewFile("blabla", 1, True) is False # Not a handle assert theProject.writeNewFile("blabla", 1, True) is False # Not a handle
assert theProject.writeNewFile("0000000000020", 1, True) is False # Not a file assert theProject.writeNewFile("0000000000010", 1, True) is False # Not a file
assert theProject.writeNewFile(C.hTitlePage, 1, True) is False # Already has content assert theProject.writeNewFile(C.hTitlePage, 1, True) is False # Already has content
# Write to file, success # Write to file, success
assert theProject.writeNewFile("0000000000021", 2, True) is True assert theProject.writeNewFile("0000000000011", 2, True) is True
assert NWDoc(theProject, "0000000000021").readDocument() == "## Hello\n\n" assert NWDoc(theProject, "0000000000011").readDocument() == "## Hello\n\n"
# Write to file with additional text, success # Write to file with additional text, success
assert theProject.writeNewFile("0000000000022", 1, False, "Hi Jane\n\n") is True assert theProject.writeNewFile("0000000000012", 1, False, "Hi Jane\n\n") is True
assert NWDoc(theProject, "0000000000022").readDocument() == "# Jane\n\nHi Jane\n\n" assert NWDoc(theProject, "0000000000012").readDocument() == "# Jane\n\nHi Jane\n\n"
# Save, close and check # Save, close and check
assert theProject.projChanged is True assert theProject.projChanged is True
@@ -356,23 +356,23 @@ def testCoreProject_NewFileFolder(monkeypatch, fncDir, outDir, refDir, mockGUI,
# Delete new file, but block access # Delete new file, but block access
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr("os.unlink", causeOSError) mp.setattr("os.unlink", causeOSError)
assert theProject.removeItem("0000000000021") is False assert theProject.removeItem("0000000000011") is False
assert "0000000000021" in theProject.tree assert "0000000000011" in theProject.tree
# Delete new files and folders # Delete new files and folders
assert os.path.isfile(os.path.join(fncDir, "content", "0000000000022.nwd")) assert os.path.isfile(os.path.join(fncDir, "content", "0000000000012.nwd"))
assert os.path.isfile(os.path.join(fncDir, "content", "0000000000021.nwd")) assert os.path.isfile(os.path.join(fncDir, "content", "0000000000011.nwd"))
assert theProject.removeItem("0000000000022") is True assert theProject.removeItem("0000000000012") is True
assert theProject.removeItem("0000000000021") is True assert theProject.removeItem("0000000000011") is True
assert theProject.removeItem("0000000000020") is True assert theProject.removeItem("0000000000010") is True
assert not os.path.isfile(os.path.join(fncDir, "content", "0000000000022.nwd")) assert not os.path.isfile(os.path.join(fncDir, "content", "0000000000012.nwd"))
assert not os.path.isfile(os.path.join(fncDir, "content", "0000000000021.nwd")) assert not os.path.isfile(os.path.join(fncDir, "content", "0000000000011.nwd"))
assert "0000000000020" not in theProject.tree assert "0000000000010" not in theProject.tree
assert "0000000000021" not in theProject.tree assert "0000000000011" not in theProject.tree
assert "0000000000022" not in theProject.tree assert "0000000000012" not in theProject.tree
assert theProject.closeProject() is True assert theProject.closeProject() is True
@@ -933,7 +933,7 @@ def testCoreProject_Methods(monkeypatch, mockGUI, tmpDir, fncDir, mockRnd):
# Trash folder # Trash folder
# Should create on first call, and just returned on later calls # Should create on first call, and just returned on later calls
hTrash = "0000000000018" hTrash = "0000000000010"
assert theProject.tree[hTrash] is None assert theProject.tree[hTrash] is None
assert theProject.trashFolder() == hTrash assert theProject.trashFolder() == hTrash
assert theProject.trashFolder() == hTrash assert theProject.trashFolder() == hTrash
@@ -987,14 +987,14 @@ def testCoreProject_Methods(monkeypatch, mockGUI, tmpDir, fncDir, mockRnd):
# Change project tree order # Change project tree order
oldOrder = [ oldOrder = [
"0000000000010", "0000000000011", "0000000000012", "0000000000008", "0000000000009", "000000000000a",
"0000000000013", "0000000000014", "0000000000015", "000000000000b", "000000000000c", "000000000000d",
"0000000000016", "0000000000017", "0000000000018", "000000000000e", "000000000000f", "0000000000010",
] ]
newOrder = [ newOrder = [
"0000000000013", "0000000000014", "0000000000015", "000000000000b", "000000000000c", "000000000000d",
"0000000000010", "0000000000011", "0000000000012", "0000000000008", "0000000000009", "000000000000a",
"0000000000016", "0000000000017", "000000000000e", "000000000000f",
] ]
assert theProject.tree.handles() == oldOrder assert theProject.tree.handles() == oldOrder
assert theProject.setTreeOrder(newOrder) assert theProject.setTreeOrder(newOrder)
+1 -62
View File
@@ -23,8 +23,6 @@ import os
import pytest import pytest
import random import random
from lxml import etree
from tools import readFile from tools import readFile
from novelwriter.enum import nwItemClass, nwItemType, nwItemLayout from novelwriter.enum import nwItemClass, nwItemType, nwItemLayout
@@ -198,7 +196,7 @@ def testCoreTree_BuildTree(mockGUI, mockItems):
assert len(theTree) == len(mockItems) + 1 assert len(theTree) == len(mockItems) + 1
theList = theTree.handles() theList = theTree.handles()
nHandle = "0000000000010" nHandle = "0000000000000"
assert theList[-1] == nHandle assert theList[-1] == nHandle
# Try to add existing handle # Try to add existing handle
@@ -395,65 +393,6 @@ def testCoreTree_Reorder(mockGUI, mockItems):
# END Test testCoreTree_Reorder # END Test testCoreTree_Reorder
@pytest.mark.core
@pytest.mark.skip
def testCoreTree_XMLPackUnpack(mockGUI, mockItems):
"""Test packing and unpacking the tree to and from XML.
"""
theProject = NWProject(mockGUI)
theTree = NWTree(theProject)
for tHandle, pHandle, nwItem in mockItems:
theTree.append(tHandle, pHandle, nwItem)
theTree.updateItemData(tHandle)
assert len(theTree) == len(mockItems)
nwXML = etree.Element("novelWriterXML")
theTree.packXML(nwXML)
assert etree.tostring(nwXML, pretty_print=False, encoding="utf-8") == (
b'<novelWriterXML>'
b'<content count="8">'
b'<item handle="a000000000001" parent="None" root="a000000000001" order="0" type="ROOT" '
b'class="NOVEL"><meta expanded="True"/><name status="s000000" '
b'import="i000004">Novel</name></item>'
b'<item handle="b000000000001" parent="a000000000001" root="a000000000001" order="0" '
b'type="FOLDER" class="NOVEL"><meta expanded="True"/><name status="s000000" '
b'import="i000004">Act One</name></item>'
b'<item handle="c000000000001" parent="b000000000001" root="a000000000001" order="0" '
b'type="FILE" class="NOVEL" layout="DOCUMENT"><meta expanded="False" mainHeading="H0" '
b'charCount="300" wordCount="50" paraCount="2" cursorPos="0"/><name status="s000000" '
b'import="i000004" active="True">Chapter One</name></item>'
b'<item handle="c000000000002" parent="b000000000001" root="a000000000001" order="0" '
b'type="FILE" class="NOVEL" layout="DOCUMENT"><meta expanded="False" mainHeading="H0" '
b'charCount="3000" wordCount="500" paraCount="20" cursorPos="0"/><name status="s000000" '
b'import="i000004" active="True">Scene One</name></item>'
b'<item handle="a000000000002" parent="None" root="a000000000002" order="0" type="ROOT" '
b'class="ARCHIVE"><meta expanded="False"/><name status="s000000" '
b'import="i000004">Outtakes</name></item>'
b'<item handle="a000000000003" parent="None" root="a000000000003" order="0" type="ROOT" '
b'class="TRASH"><meta expanded="False"/><name status="s000000" '
b'import="i000004">Trash</name></item>'
b'<item handle="a000000000004" parent="None" root="a000000000004" order="0" type="ROOT" '
b'class="CHARACTER"><meta expanded="True"/><name status="s000000" '
b'import="i000004">Characters</name></item>'
b'<item handle="b000000000002" parent="a000000000004" root="a000000000004" order="0" '
b'type="FILE" class="CHARACTER" layout="NOTE"><meta expanded="False" mainHeading="H0" '
b'charCount="2000" wordCount="400" paraCount="16" cursorPos="0"/><name status="s000000" '
b'import="i000004" active="True">Jane Doe</name></item>'
b'</content>'
b'</novelWriterXML>'
)
theTree.clear()
assert len(theTree) == 0
assert not theTree.unpackXML(nwXML)
assert theTree.unpackXML(nwXML[0])
assert len(theTree) == len(mockItems)
# END Test testCoreTree_XMLPackUnpack
@pytest.mark.core @pytest.mark.core
def testCoreTree_ToCFile(monkeypatch, mockGUI, mockItems, tmpDir): def testCoreTree_ToCFile(monkeypatch, mockGUI, mockItems, tmpDir):
"""Test writing the ToC.txt file. """Test writing the ToC.txt file.
+12 -11
View File
@@ -489,11 +489,12 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
# Check a Quick Create and Delete # Check a Quick Create and Delete
assert nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None) assert nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None)
newHandle = nwGUI.projView.getSelectedHandle() newHandle = nwGUI.projView.getSelectedHandle()
assert nwGUI.theProject.tree["0000000000020"] is not None assert newHandle == "0000000000013"
assert nwGUI.theProject.tree[newHandle] is not None
assert nwGUI.projView.requestDeleteItem() assert nwGUI.projView.requestDeleteItem()
assert nwGUI.projView.setSelectedHandle(newHandle) assert nwGUI.projView.setSelectedHandle(newHandle)
assert nwGUI.projView.requestDeleteItem() assert nwGUI.projView.requestDeleteItem()
assert nwGUI.theProject.tree["0000000000024"] is not None # Trash assert nwGUI.theProject.tree["0000000000014"] is not None # Trash
assert nwGUI.saveProject() assert nwGUI.saveProject()
# Check the files # Check the files
@@ -509,21 +510,21 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
copyfile(projFile, testFile) copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile) assert cmpFiles(testFile, compFile)
projFile = os.path.join(fncProj, "content", "0000000000020.nwd") projFile = os.path.join(fncProj, "content", "0000000000010.nwd")
testFile = os.path.join(outDir, "guiEditor_Main_Final_0000000000020.nwd") testFile = os.path.join(outDir, "guiEditor_Main_Final_0000000000010.nwd")
compFile = os.path.join(refDir, "guiEditor_Main_Final_0000000000020.nwd") compFile = os.path.join(refDir, "guiEditor_Main_Final_0000000000010.nwd")
copyfile(projFile, testFile) copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile) assert cmpFiles(testFile, compFile)
projFile = os.path.join(fncProj, "content", "0000000000021.nwd") projFile = os.path.join(fncProj, "content", "0000000000011.nwd")
testFile = os.path.join(outDir, "guiEditor_Main_Final_0000000000021.nwd") testFile = os.path.join(outDir, "guiEditor_Main_Final_0000000000011.nwd")
compFile = os.path.join(refDir, "guiEditor_Main_Final_0000000000021.nwd") compFile = os.path.join(refDir, "guiEditor_Main_Final_0000000000011.nwd")
copyfile(projFile, testFile) copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile) assert cmpFiles(testFile, compFile)
projFile = os.path.join(fncProj, "content", "0000000000022.nwd") projFile = os.path.join(fncProj, "content", "0000000000012.nwd")
testFile = os.path.join(outDir, "guiEditor_Main_Final_0000000000022.nwd") testFile = os.path.join(outDir, "guiEditor_Main_Final_0000000000012.nwd")
compFile = os.path.join(refDir, "guiEditor_Main_Final_0000000000022.nwd") compFile = os.path.join(refDir, "guiEditor_Main_Final_0000000000012.nwd")
copyfile(projFile, testFile) copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile) assert cmpFiles(testFile, compFile)
+10
View File
@@ -167,6 +167,16 @@ def buildTestProject(theObject, projPath):
theProject.clearProject() theProject.clearProject()
theProject.setProjectPath(projPath, newProject=True) theProject.setProjectPath(projPath, newProject=True)
theProject.data.itemStatus.write(None, "New", (100, 100, 100))
theProject.data.itemStatus.write(None, "Note", (200, 50, 0))
theProject.data.itemStatus.write(None, "Draft", (200, 150, 0))
theProject.data.itemStatus.write(None, "Finished", (50, 200, 0))
theProject.data.itemImport.write(None, "New", (100, 100, 100))
theProject.data.itemImport.write(None, "Minor", (200, 50, 0))
theProject.data.itemImport.write(None, "Major", (200, 150, 0))
theProject.data.itemImport.write(None, "Main", (50, 200, 0))
theProject.data.setName("New Project") theProject.data.setName("New Project")
theProject.data.setTitle("New Novel") theProject.data.setTitle("New Novel")
theProject.data.setAuthors("Jane Doe") theProject.data.setAuthors("Jane Doe")