Update tests other than tree-related

This commit is contained in:
Veronica Berglyd Olsen
2024-11-23 19:30:29 +01:00
parent ca8bd8d271
commit 1bf42ceb55
29 changed files with 229 additions and 205 deletions
+6 -1
View File
@@ -91,6 +91,10 @@ class ProjectNode:
f"children={len(self._children)}>" f"children={len(self._children)}>"
) )
def __bool__(self) -> bool:
"""A node should always evaluate to True."""
return True
## ##
# Properties # Properties
## ##
@@ -190,10 +194,10 @@ class ProjectNode:
self._updateRelationships(child) self._updateRelationships(child)
if 0 <= pos < len(self._children): if 0 <= pos < len(self._children):
self._children.insert(pos, child) self._children.insert(pos, child)
self._refreshChildrenPos()
else: else:
child._row = len(self._children) child._row = len(self._children)
self._children.append(child) self._children.append(child)
self._refreshChildrenPos()
return return
def takeChild(self, pos: int) -> ProjectNode | None: def takeChild(self, pos: int) -> ProjectNode | None:
@@ -229,6 +233,7 @@ class ProjectNode:
"""Update the row value on all children.""" """Update the row value on all children."""
for n, child in enumerate(self._children): for n, child in enumerate(self._children):
child._row = n child._row = n
child.item.setOrder(n)
return return
def _updateRelationships(self, child: ProjectNode) -> None: def _updateRelationships(self, child: ProjectNode) -> None:
+13
View File
@@ -44,6 +44,7 @@ from novelwriter.core.options import OptionState
from novelwriter.core.projectdata import NWProjectData from novelwriter.core.projectdata import NWProjectData
from novelwriter.core.projectxml import ProjectXMLReader, ProjectXMLWriter, XMLReadState from novelwriter.core.projectxml import ProjectXMLReader, ProjectXMLWriter, XMLReadState
from novelwriter.core.sessions import NWSessionLog from novelwriter.core.sessions import NWSessionLog
from novelwriter.core.status import T_StatusKinds, T_UpdateEntry
from novelwriter.core.storage import NWStorage, NWStorageOpen from novelwriter.core.storage import NWStorage, NWStorageOpen
from novelwriter.core.tree import NWTree from novelwriter.core.tree import NWTree
from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType
@@ -531,6 +532,18 @@ class NWProject:
self._data.itemImport.increment(nwItem.itemImport) self._data.itemImport.increment(nwItem.itemImport)
return return
def updateStatus(self, kind: T_StatusKinds, update: T_UpdateEntry) -> None:
"""Update status or import entries."""
if kind == "s":
self._data.itemStatus.update(update)
SHARED.projectSignalProxy({"event": "statusLabels", "kind": kind})
self._tree.refreshAllItems()
elif kind == "i":
self._data.itemImport.update(update)
SHARED.projectSignalProxy({"event": "statusLabels", "kind": kind})
self._tree.refreshAllItems()
return
def localLookup(self, word: str | int) -> str: def localLookup(self, word: str | int) -> str:
"""Look up a word or number in the translation map for the """Look up a word or number in the translation map for the
project and return it. The variable is cast to a string before project and return it. The variable is cast to a string before
+5 -6
View File
@@ -65,6 +65,9 @@ class StatusEntry:
NO_ENTRY = StatusEntry("", QColor(0, 0, 0), nwStatusShape.SQUARE, QIcon(), 0) NO_ENTRY = StatusEntry("", QColor(0, 0, 0), nwStatusShape.SQUARE, QIcon(), 0)
T_UpdateEntry = list[tuple[str | None, StatusEntry]]
T_StatusKinds = Literal["s", "i"]
class NWStatus: class NWStatus:
@@ -73,7 +76,7 @@ class NWStatus:
__slots__ = ("_store", "_default", "_prefix", "_height") __slots__ = ("_store", "_default", "_prefix", "_height")
def __init__(self, prefix: Literal["s", "i"]) -> None: def __init__(self, prefix: T_StatusKinds) -> None:
self._store: dict[str, StatusEntry] = {} self._store: dict[str, StatusEntry] = {}
self._default = None self._default = None
self._prefix = prefix[:1] self._prefix = prefix[:1]
@@ -120,7 +123,7 @@ class NWStatus:
return key return key
def update(self, update: list[tuple[str | None, StatusEntry]]) -> None: def update(self, update: T_UpdateEntry) -> None:
"""Update the list of statuses.""" """Update the list of statuses."""
self._store.clear() self._store.clear()
for key, entry in update: for key, entry in update:
@@ -130,10 +133,6 @@ class NWStatus:
if self._default not in self._store: if self._default not in self._store:
self._default = next(iter(self._store)) if self._store else None self._default = next(iter(self._store)) if self._store else None
# Emit the change signal and refresh tree
SHARED.projectSignalProxy({"event": "statusLabels", "kind": self._prefix})
SHARED.project.tree.refreshAllItems()
return return
def check(self, value: str) -> str: def check(self, value: str) -> str:
+13 -6
View File
@@ -128,7 +128,7 @@ class NWTree:
self._model.insertChild(node, index, pos) self._model.insertChild(node, index, pos)
self._nodes[item.itemHandle] = node self._nodes[item.itemHandle] = node
self._items[item.itemHandle] = item self._items[item.itemHandle] = item
self._itemChange(item.itemHandle, nwChange.CREATE) self._itemChange(item, nwChange.CREATE)
else: else:
logger.error("Could not locate parent of '%s'", item.itemHandle) logger.error("Could not locate parent of '%s'", item.itemHandle)
return False return False
@@ -137,7 +137,7 @@ class NWTree:
self._model.insertChild(node, QModelIndex(), pos) self._model.insertChild(node, QModelIndex(), pos)
self._nodes[item.itemHandle] = node self._nodes[item.itemHandle] = node
self._items[item.itemHandle] = item self._items[item.itemHandle] = item
self._itemChange(item.itemHandle, nwChange.CREATE) self._itemChange(item, nwChange.CREATE)
else: else:
logger.error("Invalid project item '%s'", item.itemHandle) logger.error("Invalid project item '%s'", item.itemHandle)
return False return False
@@ -148,7 +148,7 @@ class NWTree:
if (node := self._nodes.get(tHandle)) and tHandle in self._items: if (node := self._nodes.get(tHandle)) and tHandle in self._items:
index = self._model.indexFromNode(node) index = self._model.indexFromNode(node)
if index.isValid() and self._model.removeChild(index.parent(), index.row()): if index.isValid() and self._model.removeChild(index.parent(), index.row()):
self._itemChange(tHandle, nwChange.DELETE) self._itemChange(node.item, nwChange.DELETE)
del self._nodes[tHandle] del self._nodes[tHandle]
del self._items[tHandle] del self._items[tHandle]
return True return True
@@ -246,7 +246,7 @@ class NWTree:
indexS = self._model.indexFromNode(node, 0) indexS = self._model.indexFromNode(node, 0)
indexE = self._model.indexFromNode(node, 3) indexE = self._model.indexFromNode(node, 3)
self._model.dataChanged.emit(indexS, indexE) self._model.dataChanged.emit(indexS, indexE)
self._itemChange(tHandle, nwChange.UPDATE) self._itemChange(node.item, nwChange.UPDATE)
return return
def refreshAllItems(self) -> None: def refreshAllItems(self) -> None:
@@ -464,11 +464,18 @@ class NWTree:
# Internal Functions # Internal Functions
## ##
def _itemChange(self, tHandle: str, change: nwChange) -> None: def _itemChange(self, item: NWItem, change: nwChange) -> None:
"""Signal item change and notify project.""" """Signal item change and notify project."""
tHandle = item.itemHandle
logger.debug("Item change: %s -> %s", tHandle, change.name) logger.debug("Item change: %s -> %s", tHandle, change.name)
self._project.setProjectChanged(True) self._project.setProjectChanged(True)
SHARED.projectSignalProxy({"event": "itemChanged", "handle": tHandle, "change": change}) SHARED.projectSignalProxy(
{"event": "itemChanged", "handle": tHandle, "change": change}
)
if item.isRootType():
SHARED.projectSignalProxy(
{"event": "rootChanged", "handle": tHandle, "change": change}
)
return return
def _getTrashNode(self) -> ProjectNode | None: def _getTrashNode(self) -> ProjectNode | None:
+2 -2
View File
@@ -185,11 +185,11 @@ class GuiProjectSettings(NDialog):
if self.statusPage.changed: if self.statusPage.changed:
logger.debug("Updating status labels") logger.debug("Updating status labels")
project.data.itemStatus.update(self.statusPage.getNewList()) project.updateStatus("s", self.statusPage.getNewList())
if self.importPage.changed: if self.importPage.changed:
logger.debug("Updating importance labels") logger.debug("Updating importance labels")
project.data.itemImport.update(self.importPage.getNewList()) project.updateStatus("i", self.importPage.getNewList())
if self.replacePage.changed: if self.replacePage.changed:
logger.debug("Updating auto-replace settings") logger.debug("Updating auto-replace settings")
+3 -3
View File
@@ -41,7 +41,7 @@ from novelwriter import CONFIG, SHARED
from novelwriter.common import minmax, qtLambda from novelwriter.common import minmax, qtLambda
from novelwriter.constants import nwKeyWords, nwLabels, nwStyles, trConst from novelwriter.constants import nwKeyWords, nwLabels, nwStyles, trConst
from novelwriter.core.index import IndexHeading from novelwriter.core.index import IndexHeading
from novelwriter.enum import nwDocMode, nwItemClass, nwOutline from novelwriter.enum import nwChange, nwDocMode, nwItemClass, nwOutline
from novelwriter.extensions.modified import NIconToolButton from novelwriter.extensions.modified import NIconToolButton
from novelwriter.extensions.novelselector import NovelSelector from novelwriter.extensions.novelselector import NovelSelector
from novelwriter.gui.theme import STYLES_MIN_TOOLBUTTON from novelwriter.gui.theme import STYLES_MIN_TOOLBUTTON
@@ -174,8 +174,8 @@ class GuiNovelView(QWidget):
self.novelTree.refreshTree(rootHandle=SHARED.project.data.getLastHandle("novelTree")) self.novelTree.refreshTree(rootHandle=SHARED.project.data.getLastHandle("novelTree"))
return return
@pyqtSlot(str) @pyqtSlot(str, Enum)
def updateRootItem(self, tHandle: str) -> None: def updateRootItem(self, tHandle: str, change: nwChange) -> None:
"""If any root item changes, rebuild the novel root menu.""" """If any root item changes, rebuild the novel root menu."""
self.novelBar.buildNovelRootMenu() self.novelBar.buildNovelRootMenu()
return return
+10 -11
View File
@@ -43,7 +43,7 @@ from PyQt5.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import checkInt, formatFileFilter, makeFileNameSafe from novelwriter.common import checkInt, formatFileFilter, makeFileNameSafe
from novelwriter.constants import nwKeyWords, nwLabels, nwStats, nwStyles, trConst from novelwriter.constants import nwKeyWords, nwLabels, nwStats, nwStyles, trConst
from novelwriter.enum import nwDocMode, nwItemClass, nwItemLayout, nwItemType, nwOutline from novelwriter.enum import nwChange, nwDocMode, nwItemClass, nwItemLayout, nwItemType, nwOutline
from novelwriter.error import logException from novelwriter.error import logException
from novelwriter.extensions.configlayout import NColourLabel from novelwriter.extensions.configlayout import NColourLabel
from novelwriter.extensions.novelselector import NovelSelector from novelwriter.extensions.novelselector import NovelSelector
@@ -165,8 +165,8 @@ class GuiOutlineView(QWidget):
# Public Slots # Public Slots
## ##
@pyqtSlot(str) @pyqtSlot(str, Enum)
def updateRootItem(self, tHandle: str) -> None: def updateRootItem(self, tHandle: str, change: nwChange) -> None:
"""Handle tasks whenever a root folders changes.""" """Handle tasks whenever a root folders changes."""
self.outlineBar.populateNovelList() self.outlineBar.populateNovelList()
self.outlineData.updateClasses() self.outlineData.updateClasses()
@@ -380,8 +380,8 @@ class GuiOutlineTree(QTreeWidget):
self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.setExpandsOnDoubleClick(False) self.setExpandsOnDoubleClick(False)
self.setDragEnabled(False) self.setDragEnabled(False)
self.itemDoubleClicked.connect(self._treeDoubleClick) self.itemDoubleClicked.connect(self._onItemDoubleClicked)
self.itemSelectionChanged.connect(self._itemSelected) self.itemSelectionChanged.connect(self._onItemSelectionChanged)
self.setIconSize(SHARED.theme.baseIconSize) self.setIconSize(SHARED.theme.baseIconSize)
self.setIndentation(0) self.setIndentation(0)
@@ -563,7 +563,7 @@ class GuiOutlineTree(QTreeWidget):
## ##
@pyqtSlot("QTreeWidgetItem*", int) @pyqtSlot("QTreeWidgetItem*", int)
def _treeDoubleClick(self, tItem: QTreeWidgetItem, tCol: int) -> None: def _onItemDoubleClicked(self, tItem: QTreeWidgetItem, tCol: int) -> None:
"""Extract the handle and line number of the title double- """Extract the handle and line number of the title double-
clicked, and send it to the main gui class for opening in the clicked, and send it to the main gui class for opening in the
document editor. document editor.
@@ -574,14 +574,13 @@ class GuiOutlineTree(QTreeWidget):
return return
@pyqtSlot() @pyqtSlot()
def _itemSelected(self) -> None: def _onItemSelectionChanged(self) -> None:
"""Extract the handle and line number of the currently selected """Extract the handle and line number of the currently selected
title, and send it to the details panel. title, and send it to the details panel.
""" """
selItems = self.selectedItems() if items := self.selectedItems():
if selItems: tHandle = items[0].data(self._colIdx[nwOutline.TITLE], self.D_HANDLE)
tHandle = selItems[0].data(self._colIdx[nwOutline.TITLE], self.D_HANDLE) sTitle = items[0].data(self._colIdx[nwOutline.TITLE], self.D_TITLE)
sTitle = selItems[0].data(self._colIdx[nwOutline.TITLE], self.D_TITLE)
self.activeItemChanged.emit(tHandle, sTitle) self.activeItemChanged.emit(tHandle, sTitle)
return return
+8 -12
View File
@@ -66,15 +66,9 @@ class GuiProjectView(QWidget):
available are mapped through to the project tree class. available are mapped through to the project tree class.
""" """
# Signals triggered when the meta data values of items change
rootFolderChanged = pyqtSignal(str)
# Signals for user interaction with the project tree
selectedItemChanged = pyqtSignal(str)
openDocumentRequest = pyqtSignal(str, Enum, str, bool) openDocumentRequest = pyqtSignal(str, Enum, str, bool)
# Requests for the main GUI
projectSettingsRequest = pyqtSignal(int) projectSettingsRequest = pyqtSignal(int)
selectedItemChanged = pyqtSignal(str)
def __init__(self, parent: QWidget) -> None: def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
@@ -229,8 +223,8 @@ class GuiProjectView(QWidget):
self.projTree.newTreeItem(nwItemType.FILE, copyDoc=tHandle) self.projTree.newTreeItem(nwItemType.FILE, copyDoc=tHandle)
return return
@pyqtSlot(str) @pyqtSlot(str, Enum)
def updateRootItem(self, tHandle: str) -> None: def updateRootItem(self, tHandle: str, change: nwChange) -> None:
"""Process root item changes.""" """Process root item changes."""
self.projBar.buildQuickLinksMenu() self.projBar.buildQuickLinksMenu()
return return
@@ -625,9 +619,8 @@ class GuiProjectTree(QTreeView):
if root := SHARED.project.tree.nodes.get(itemRoot): if root := SHARED.project.tree.nodes.get(itemRoot):
pos = root.row() + 1 pos = root.row() + 1
SHARED.project.newRoot(itemClass, pos) tHandle = SHARED.project.newRoot(itemClass, pos)
self.restoreExpandedState() self.restoreExpandedState()
self.projView.rootFolderChanged.emit(tHandle)
elif itemType in (nwItemType.FILE, nwItemType.FOLDER): elif itemType in (nwItemType.FILE, nwItemType.FOLDER):
@@ -684,7 +677,10 @@ class GuiProjectTree(QTreeView):
SHARED.project.index.reIndexHandle(tHandle) SHARED.project.index.reIndexHandle(tHandle)
SHARED.project.tree.refreshItems([tHandle]) SHARED.project.tree.refreshItems([tHandle])
else: else:
SHARED.project.newFolder(newLabel, sHandle, pos) tHandle = SHARED.project.newFolder(newLabel, sHandle, pos)
# Select the new item automatically
self.setSelectedHandle(tHandle)
return return
+6 -3
View File
@@ -221,6 +221,9 @@ class GuiMain(QMainWindow):
SHARED.projectItemChanged.connect(self.projView.onProjectItemChanged) SHARED.projectItemChanged.connect(self.projView.onProjectItemChanged)
SHARED.projectStatusChanged.connect(self.mainStatus.updateProjectStatus) SHARED.projectStatusChanged.connect(self.mainStatus.updateProjectStatus)
SHARED.projectStatusMessage.connect(self.mainStatus.setStatusMessage) SHARED.projectStatusMessage.connect(self.mainStatus.setStatusMessage)
SHARED.rootFolderChanged.connect(self.novelView.updateRootItem)
SHARED.rootFolderChanged.connect(self.outlineView.updateRootItem)
SHARED.rootFolderChanged.connect(self.projView.updateRootItem)
SHARED.spellLanguageChanged.connect(self.mainStatus.setLanguage) SHARED.spellLanguageChanged.connect(self.mainStatus.setLanguage)
SHARED.statusLabelsChanged.connect(self.docViewerPanel.updateStatusLabels) SHARED.statusLabelsChanged.connect(self.docViewerPanel.updateStatusLabels)
@@ -235,9 +238,6 @@ class GuiMain(QMainWindow):
self.projView.openDocumentRequest.connect(self._openDocument) self.projView.openDocumentRequest.connect(self._openDocument)
self.projView.projectSettingsRequest.connect(self.showProjectSettingsDialog) self.projView.projectSettingsRequest.connect(self.showProjectSettingsDialog)
self.projView.rootFolderChanged.connect(self.novelView.updateRootItem)
self.projView.rootFolderChanged.connect(self.outlineView.updateRootItem)
self.projView.rootFolderChanged.connect(self.projView.updateRootItem)
self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox)
self.novelView.openDocumentRequest.connect(self._openDocument) self.novelView.openDocumentRequest.connect(self._openDocument)
@@ -1083,6 +1083,9 @@ class GuiMain(QMainWindow):
self.projView.initSettings() self.projView.initSettings()
self.novelView.initSettings() self.novelView.initSettings()
self.outlineView.initSettings() self.outlineView.initSettings()
# Force update of word count
self._lastTotalCount = 0
self._updateStatusWordCount() self._updateStatusWordCount()
return return
+5
View File
@@ -63,6 +63,7 @@ class SharedData(QObject):
indexCleared = pyqtSignal() indexCleared = pyqtSignal()
mainClockTick = pyqtSignal() mainClockTick = pyqtSignal()
projectItemChanged = pyqtSignal(str, Enum) projectItemChanged = pyqtSignal(str, Enum)
rootFolderChanged = pyqtSignal(str, Enum)
projectStatusChanged = pyqtSignal(bool) projectStatusChanged = pyqtSignal(bool)
projectStatusMessage = pyqtSignal(str) projectStatusMessage = pyqtSignal(str)
spellLanguageChanged = pyqtSignal(str, str) spellLanguageChanged = pyqtSignal(str, str)
@@ -338,6 +339,10 @@ class SharedData(QObject):
self.projectItemChanged.emit( self.projectItemChanged.emit(
data.get("handle", ""), data.get("change", nwChange.UPDATE) data.get("handle", ""), data.get("change", nwChange.UPDATE)
) )
elif event == "rootChanged":
self.rootFolderChanged.emit(
data.get("handle", ""), data.get("change", nwChange.UPDATE)
)
return return
## ##
+5 -13
View File
@@ -20,6 +20,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from unittest.mock import MagicMock
from PyQt5.QtGui import QFont, QIcon, QPixmap from PyQt5.QtGui import QFont, QIcon, QPixmap
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget
@@ -28,7 +30,9 @@ class MockGuiMain(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.mainStatus = MockStatusBar() self.mainStatus = MagicMock()
self.docEditor = MagicMock()
self.docViewer = MagicMock()
self.projPath = "" self.projPath = ""
return return
@@ -52,18 +56,6 @@ class MockGuiMain(QWidget):
return "close" return "close"
class MockStatusBar:
def __init__(self):
return
def setStatus(self, text):
return
def updateProjectStatus(self, status):
return
class MockTheme: class MockTheme:
def __init__(self): def __init__(self):
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.4rc1" hexVersion="0x020400c1" fileVersion="1.5" fileRevision="4" timeStamp="2024-04-09 22:34:16"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 18:40:02">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="1" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="1" editTime="0">
<name>New Project</name> <name>New Project</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -37,7 +37,7 @@
<meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" /> <meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="000000000000d" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL"> <item handle="000000000000d" parent="0000000000008" root="0000000000008" order="1" type="FOLDER" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">New Chapter</name> <name status="s000000" import="i000004">New Chapter</name>
</item> </item>
@@ -45,11 +45,11 @@
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="000000000000f" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="000000000000d" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000010" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL"> <item handle="0000000000010" parent="0000000000008" root="0000000000008" order="2" type="FOLDER" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Stuff</name> <name status="s000000" import="i000004">Stuff</name>
</item> </item>
@@ -57,11 +57,11 @@
<meta expanded="no" heading="H2" charCount="5" wordCount="1" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="5" wordCount="1" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Hello</name> <name status="s000000" import="i000004" active="yes">Hello</name>
</item> </item>
<item handle="0000000000009" parent="None" root="0000000000009" order="0" type="ROOT" class="PLOT"> <item handle="0000000000009" parent="None" root="0000000000009" order="1" type="ROOT" class="PLOT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="000000000000a" parent="None" root="000000000000a" order="0" type="ROOT" class="CHARACTER"> <item handle="000000000000a" parent="None" root="000000000000a" order="2" type="ROOT" class="CHARACTER">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
@@ -69,11 +69,11 @@
<meta expanded="no" heading="H1" charCount="11" wordCount="3" paraCount="1" cursorPos="0" /> <meta expanded="no" heading="H1" charCount="11" wordCount="3" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Jane</name> <name status="s000000" import="i000004" active="yes">Jane</name>
</item> </item>
<item handle="0000000000013" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE"> <item handle="0000000000013" parent="000000000000a" root="000000000000a" order="1" type="FILE" class="CHARACTER" layout="NOTE">
<meta expanded="no" heading="H1" charCount="11" wordCount="3" paraCount="1" cursorPos="0" /> <meta expanded="no" heading="H1" charCount="11" wordCount="3" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">John</name> <name status="s000000" import="i000004" active="yes">John</name>
</item> </item>
<item handle="000000000000b" parent="None" root="000000000000b" order="0" type="ROOT" class="WORLD"> <item handle="000000000000b" parent="None" root="000000000000b" order="3" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.4rc1" hexVersion="0x020400c1" fileVersion="1.5" fileRevision="4" timeStamp="2024-04-09 22:34:16"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 18:44:06">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="1" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="1" editTime="0">
<name>New Project</name> <name>New Project</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -37,7 +37,7 @@
<meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" /> <meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="000000000000d" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL"> <item handle="000000000000d" parent="0000000000008" root="0000000000008" order="1" type="FOLDER" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">New Chapter</name> <name status="s000000" import="i000004">New Chapter</name>
</item> </item>
@@ -45,51 +45,51 @@
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="000000000000f" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="000000000000d" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000009" parent="None" root="0000000000009" order="0" type="ROOT" class="PLOT"> <item handle="0000000000009" parent="None" root="0000000000009" order="1" type="ROOT" class="PLOT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="000000000000a" parent="None" root="000000000000a" order="0" type="ROOT" class="CHARACTER"> <item handle="000000000000a" parent="None" root="000000000000a" order="2" type="ROOT" class="CHARACTER">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="000000000000b" parent="None" root="000000000000b" order="0" type="ROOT" class="WORLD"> <item handle="000000000000b" parent="None" root="000000000000b" order="3" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000010" parent="None" root="0000000000010" order="4" type="ROOT" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
<item handle="0000000000011" parent="None" root="0000000000011" order="0" type="ROOT" class="PLOT"> <item handle="0000000000011" parent="None" root="0000000000011" order="5" type="ROOT" class="PLOT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="0000000000012" parent="None" root="0000000000012" order="0" type="ROOT" class="CHARACTER"> <item handle="0000000000012" parent="None" root="0000000000012" order="6" type="ROOT" class="CHARACTER">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="0000000000013" parent="None" root="0000000000013" order="0" type="ROOT" class="WORLD"> <item handle="0000000000013" parent="None" root="0000000000013" order="7" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="0000000000014" parent="None" root="0000000000014" order="0" type="ROOT" class="TIMELINE"> <item handle="0000000000014" parent="None" root="0000000000014" order="8" type="ROOT" class="TIMELINE">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Timeline</name> <name status="s000000" import="i000004">Timeline</name>
</item> </item>
<item handle="0000000000015" parent="None" root="0000000000015" order="0" type="ROOT" class="OBJECT"> <item handle="0000000000015" parent="None" root="0000000000015" order="9" type="ROOT" class="OBJECT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Objects</name> <name status="s000000" import="i000004">Objects</name>
</item> </item>
<item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="CUSTOM"> <item handle="0000000000016" parent="None" root="0000000000016" order="10" type="ROOT" class="CUSTOM">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Custom</name> <name status="s000000" import="i000004">Custom</name>
</item> </item>
<item handle="0000000000017" parent="None" root="0000000000017" order="0" type="ROOT" class="CUSTOM"> <item handle="0000000000017" parent="None" root="0000000000017" order="11" type="ROOT" class="CUSTOM">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Custom</name> <name status="s000000" import="i000004">Custom</name>
</item> </item>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-20 18:44:37"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 19:08:29">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="1" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="1" editTime="0">
<name>New Project</name> <name>New Project</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -37,7 +37,7 @@
<meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" /> <meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="000000000000d" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL"> <item handle="000000000000d" parent="0000000000008" root="0000000000008" order="1" type="FOLDER" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">New Chapter</name> <name status="s000000" import="i000004">New Chapter</name>
</item> </item>
@@ -45,23 +45,23 @@
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="0000000000019" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000019" parent="000000000000d" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="000000000000f" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="000000000000d" root="0000000000008" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000010" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000010" parent="000000000000d" root="0000000000008" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="000000000001a" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000001a" parent="000000000000d" root="0000000000008" order="4" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000011" parent="0000000000008" root="0000000000008" order="0" type="FOLDER" class="NOVEL"> <item handle="0000000000011" parent="0000000000008" root="0000000000008" order="2" type="FOLDER" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">New Chapter</name> <name status="s000000" import="i000004">New Chapter</name>
</item> </item>
@@ -69,11 +69,11 @@
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="0000000000013" parent="0000000000011" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000013" parent="0000000000011" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000014" parent="None" root="0000000000014" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000014" parent="None" root="0000000000014" order="1" type="ROOT" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
@@ -81,7 +81,7 @@
<meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" /> <meta expanded="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="0000000000016" parent="0000000000014" root="0000000000014" order="0" type="FOLDER" class="NOVEL"> <item handle="0000000000016" parent="0000000000014" root="0000000000014" order="1" type="FOLDER" class="NOVEL">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">New Chapter</name> <name status="s000000" import="i000004">New Chapter</name>
</item> </item>
@@ -89,19 +89,19 @@
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="0000000000018" parent="0000000000016" root="0000000000014" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000018" parent="0000000000016" root="0000000000014" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H3" charCount="9" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000009" parent="None" root="0000000000009" order="0" type="ROOT" class="PLOT"> <item handle="0000000000009" parent="None" root="0000000000009" order="2" type="ROOT" class="PLOT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="000000000000a" parent="None" root="000000000000a" order="0" type="ROOT" class="CHARACTER"> <item handle="000000000000a" parent="None" root="000000000000a" order="3" type="ROOT" class="CHARACTER">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="000000000000b" parent="None" root="000000000000b" order="0" type="ROOT" class="WORLD"> <item handle="000000000000b" parent="None" root="000000000000b" order="4" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.4rc1" hexVersion="0x020400c1" fileVersion="1.5" fileRevision="4" timeStamp="2024-04-09 22:34:16"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 19:07:52">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="0" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="0" editTime="0">
<name>Test Project A</name> <name>Test Project A</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -37,7 +37,7 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="000000000000a" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000a" parent="0000000000008" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Chapter 1</name> <name status="s000000" import="i000004" active="yes">Chapter 1</name>
</item> </item>
@@ -45,15 +45,15 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 1.1</name> <name status="s000000" import="i000004" active="yes">Scene 1.1</name>
</item> </item>
<item handle="000000000000c" parent="000000000000a" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000c" parent="000000000000a" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 1.2</name> <name status="s000000" import="i000004" active="yes">Scene 1.2</name>
</item> </item>
<item handle="000000000000d" parent="000000000000a" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000d" parent="000000000000a" root="0000000000008" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 1.3</name> <name status="s000000" import="i000004" active="yes">Scene 1.3</name>
</item> </item>
<item handle="000000000000e" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000e" parent="0000000000008" root="0000000000008" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Chapter 2</name> <name status="s000000" import="i000004" active="yes">Chapter 2</name>
</item> </item>
@@ -61,15 +61,15 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 2.1</name> <name status="s000000" import="i000004" active="yes">Scene 2.1</name>
</item> </item>
<item handle="0000000000010" parent="000000000000e" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000010" parent="000000000000e" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 2.2</name> <name status="s000000" import="i000004" active="yes">Scene 2.2</name>
</item> </item>
<item handle="0000000000011" parent="000000000000e" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000011" parent="000000000000e" root="0000000000008" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 2.3</name> <name status="s000000" import="i000004" active="yes">Scene 2.3</name>
</item> </item>
<item handle="0000000000012" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000012" parent="0000000000008" root="0000000000008" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Chapter 3</name> <name status="s000000" import="i000004" active="yes">Chapter 3</name>
</item> </item>
@@ -77,15 +77,15 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 3.1</name> <name status="s000000" import="i000004" active="yes">Scene 3.1</name>
</item> </item>
<item handle="0000000000014" parent="0000000000012" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000014" parent="0000000000012" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 3.2</name> <name status="s000000" import="i000004" active="yes">Scene 3.2</name>
</item> </item>
<item handle="0000000000015" parent="0000000000012" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="0000000000015" parent="0000000000012" root="0000000000008" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 3.3</name> <name status="s000000" import="i000004" active="yes">Scene 3.3</name>
</item> </item>
<item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="PLOT"> <item handle="0000000000016" parent="None" root="0000000000016" order="1" type="ROOT" class="PLOT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
@@ -93,7 +93,7 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Main Plot</name> <name status="s000000" import="i000004" active="yes">Main Plot</name>
</item> </item>
<item handle="0000000000018" parent="None" root="0000000000018" order="0" type="ROOT" class="CHARACTER"> <item handle="0000000000018" parent="None" root="0000000000018" order="2" type="ROOT" class="CHARACTER">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
@@ -101,7 +101,7 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Protagonist</name> <name status="s000000" import="i000004" active="yes">Protagonist</name>
</item> </item>
<item handle="000000000001a" parent="None" root="000000000001a" order="0" type="ROOT" class="WORLD"> <item handle="000000000001a" parent="None" root="000000000001a" order="3" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
@@ -109,11 +109,11 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Main Location</name> <name status="s000000" import="i000004" active="yes">Main Location</name>
</item> </item>
<item handle="000000000001c" parent="None" root="000000000001c" order="0" type="ROOT" class="ARCHIVE"> <item handle="000000000001c" parent="None" root="000000000001c" order="4" type="ROOT" class="ARCHIVE">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Archive</name> <name status="s000000" import="i000004">Archive</name>
</item> </item>
<item handle="000000000001d" parent="None" root="000000000001d" order="0" type="ROOT" class="TRASH"> <item handle="000000000001d" parent="None" root="000000000001d" order="5" type="ROOT" class="TRASH">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Trash</name> <name status="s000000" import="i000004">Trash</name>
</item> </item>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.4rc1" hexVersion="0x020400c1" fileVersion="1.5" fileRevision="4" timeStamp="2024-04-09 22:34:16"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 19:07:13">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="0" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="1" autoCount="0" editTime="0">
<name>Test Project B</name> <name>Test Project B</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -37,31 +37,31 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="000000000000a" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000a" parent="0000000000008" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 1</name> <name status="s000000" import="i000004" active="yes">Scene 1</name>
</item> </item>
<item handle="000000000000b" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000b" parent="0000000000008" root="0000000000008" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 2</name> <name status="s000000" import="i000004" active="yes">Scene 2</name>
</item> </item>
<item handle="000000000000c" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000c" parent="0000000000008" root="0000000000008" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 3</name> <name status="s000000" import="i000004" active="yes">Scene 3</name>
</item> </item>
<item handle="000000000000d" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000d" parent="0000000000008" root="0000000000008" order="4" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 4</name> <name status="s000000" import="i000004" active="yes">Scene 4</name>
</item> </item>
<item handle="000000000000e" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000e" parent="0000000000008" root="0000000000008" order="5" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 5</name> <name status="s000000" import="i000004" active="yes">Scene 5</name>
</item> </item>
<item handle="000000000000f" parent="0000000000008" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="0000000000008" root="0000000000008" order="6" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Scene 6</name> <name status="s000000" import="i000004" active="yes">Scene 6</name>
</item> </item>
<item handle="0000000000010" parent="None" root="0000000000010" order="0" type="ROOT" class="PLOT"> <item handle="0000000000010" parent="None" root="0000000000010" order="1" type="ROOT" class="PLOT">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
@@ -69,7 +69,7 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Main Plot</name> <name status="s000000" import="i000004" active="yes">Main Plot</name>
</item> </item>
<item handle="0000000000012" parent="None" root="0000000000012" order="0" type="ROOT" class="CHARACTER"> <item handle="0000000000012" parent="None" root="0000000000012" order="2" type="ROOT" class="CHARACTER">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
@@ -77,7 +77,7 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Protagonist</name> <name status="s000000" import="i000004" active="yes">Protagonist</name>
</item> </item>
<item handle="0000000000014" parent="None" root="0000000000014" order="0" type="ROOT" class="WORLD"> <item handle="0000000000014" parent="None" root="0000000000014" order="3" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Locations</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
@@ -85,11 +85,11 @@
<meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" /> <meta expanded="no" heading="H0" charCount="0" wordCount="0" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Main Location</name> <name status="s000000" import="i000004" active="yes">Main Location</name>
</item> </item>
<item handle="0000000000016" parent="None" root="0000000000016" order="0" type="ROOT" class="ARCHIVE"> <item handle="0000000000016" parent="None" root="0000000000016" order="4" type="ROOT" class="ARCHIVE">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Archive</name> <name status="s000000" import="i000004">Archive</name>
</item> </item>
<item handle="0000000000017" parent="None" root="0000000000017" order="0" type="ROOT" class="TRASH"> <item handle="0000000000017" parent="None" root="0000000000017" order="5" type="ROOT" class="TRASH">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">Trash</name> <name status="s000000" import="i000004">Trash</name>
</item> </item>
@@ -1,10 +0,0 @@
%%~name: New Note
%%~path: 000000000000a/0000000000010
%%~kind: CHARACTER/NOTE
%%~hash: 9fae6dfdd3d1c0822d3a3cf90c0142e65ad8e557
%%~date: 2023-08-25 18:14:24/2023-08-25 18:14:24
# Jane Doe
@tag: Jane
This is a file about Jane.
@@ -1,10 +1,10 @@
%%~name: New Note %%~name: New Note
%%~path: 0000000000009/0000000000011 %%~path: 000000000000a/0000000000011
%%~kind: PLOT/NOTE %%~kind: CHARACTER/NOTE
%%~hash: 3d3697638a70fc86cc023df6d42202a262d93905 %%~hash: 9fae6dfdd3d1c0822d3a3cf90c0142e65ad8e557
%%~date: 2024-04-14 23:46:49/2024-04-14 23:46:49 %%~date: 2024-11-23 18:26:00/2024-11-23 18:26:00
# Main Plot # Jane Doe
@tag: MainPlot @tag: Jane
This is a file [i]detailing[/i] the main plot. This is a file about Jane.
@@ -1,10 +1,10 @@
%%~name: New Note %%~name: New Note
%%~path: 000000000000b/0000000000012 %%~path: 0000000000009/0000000000012
%%~kind: WORLD/NOTE %%~kind: PLOT/NOTE
%%~hash: 3f5c3c6c3ba1c27c30b8ac9e59c222fb9a1bd775 %%~hash: 3d3697638a70fc86cc023df6d42202a262d93905
%%~date: 2023-08-25 18:17:45/2023-08-25 18:17:45 %%~date: 2024-11-23 18:26:31/2024-11-23 18:26:31
# Main Location # Main Plot
@tag: Home @tag: MainPlot
This is a file describing Janes home. This is a file [i]detailing[/i] the main plot.
@@ -0,0 +1,10 @@
%%~name: New Note
%%~path: 000000000000b/0000000000013
%%~kind: WORLD/NOTE
%%~hash: 3f5c3c6c3ba1c27c30b8ac9e59c222fb9a1bd775
%%~date: 2024-11-23 18:28:00/2024-11-23 18:28:00
# Main Location
@tag: Home
This is a file describing Janes home.
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.6a3" hexVersion="0x020600a3" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-01 21:15:11"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 18:27:11">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="3" autoCount="2" editTime="5"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="3" autoCount="2" editTime="5">
<name>New Project</name> <name>New Project</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -22,19 +22,19 @@
<entry key="s000003" count="0" red="50" green="200" blue="0" shape="SQUARE">Finished</entry> <entry key="s000003" count="0" red="50" green="200" blue="0" shape="SQUARE">Finished</entry>
</status> </status>
<importance> <importance>
<entry key="i000004" count="6" red="100" green="100" blue="100" shape="SQUARE">New</entry> <entry key="i000004" count="7" red="100" green="100" blue="100" shape="SQUARE">New</entry>
<entry key="i000005" count="0" red="200" green="50" blue="0" shape="SQUARE">Minor</entry> <entry key="i000005" count="0" red="200" green="50" blue="0" shape="SQUARE">Minor</entry>
<entry key="i000006" count="0" red="200" green="150" blue="0" shape="SQUARE">Major</entry> <entry key="i000006" count="0" red="200" green="150" blue="0" shape="SQUARE">Major</entry>
<entry key="i000007" count="0" red="50" green="200" blue="0" shape="SQUARE">Main</entry> <entry key="i000007" count="0" red="50" green="200" blue="0" shape="SQUARE">Main</entry>
</importance> </importance>
</settings> </settings>
<content items="11" novelWords="179" notesWords="27"> <content items="12" novelWords="179" notesWords="27">
<item handle="0000000000008" parent="None" root="0000000000008" order="0" type="ROOT" class="NOVEL"> <item handle="0000000000008" parent="None" root="0000000000008" order="0" type="ROOT" class="NOVEL">
<meta expanded="yes" /> <meta expanded="yes" />
<name status="s000000" import="i000004">Novel</name> <name status="s000000" import="i000004">Novel</name>
</item> </item>
<item handle="000000000000c" parent="0000000000008" root="0000000000008" 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="no" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" /> <meta expanded="yes" heading="H1" charCount="20" wordCount="5" paraCount="1" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">Title Page</name> <name status="s000000" import="i000004" active="yes">Title Page</name>
</item> </item>
<item handle="000000000000d" parent="0000000000008" root="0000000000008" order="1" type="FOLDER" class="NOVEL"> <item handle="000000000000d" parent="0000000000008" root="0000000000008" order="1" type="FOLDER" class="NOVEL">
@@ -42,36 +42,40 @@
<name status="s000000" import="i000004">New Chapter</name> <name status="s000000" import="i000004">New Chapter</name>
</item> </item>
<item handle="000000000000e" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000e" parent="000000000000d" root="0000000000008" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" /> <meta expanded="yes" heading="H2" charCount="11" wordCount="2" paraCount="0" cursorPos="0" />
<name status="s000000" import="i000004" active="yes">New Chapter</name> <name status="s000000" import="i000004" active="yes">New Chapter</name>
</item> </item>
<item handle="000000000000f" parent="000000000000d" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="000000000000f" parent="000000000000d" root="0000000000008" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H1" charCount="1003" wordCount="172" paraCount="17" cursorPos="1259" /> <meta expanded="yes" heading="H1" charCount="1003" wordCount="172" paraCount="17" cursorPos="1259" />
<name status="s000000" import="i000004" active="yes">New Scene</name> <name status="s000000" import="i000004" active="yes">New Scene</name>
</item> </item>
<item handle="0000000000009" parent="None" root="0000000000009" order="1" type="ROOT" class="PLOT"> <item handle="0000000000009" parent="None" root="0000000000009" order="1" type="ROOT" class="PLOT">
<meta expanded="yes" /> <meta expanded="yes" />
<name status="s000000" import="i000004">Plot</name> <name status="s000000" import="i000004">Plot</name>
</item> </item>
<item handle="0000000000011" parent="0000000000009" root="0000000000009" order="0" type="FILE" class="PLOT" layout="NOTE"> <item handle="0000000000012" parent="0000000000009" root="0000000000009" order="0" type="FILE" class="PLOT" layout="NOTE">
<meta expanded="no" heading="H1" charCount="48" wordCount="10" paraCount="1" cursorPos="76" /> <meta expanded="yes" heading="H1" charCount="48" wordCount="10" paraCount="1" cursorPos="76" />
<name status="s000000" import="i000004" active="yes">New Note</name> <name status="s000000" import="i000004" active="yes">New Note</name>
</item> </item>
<item handle="000000000000a" parent="None" root="000000000000a" order="2" type="ROOT" class="CHARACTER"> <item handle="000000000000a" parent="None" root="000000000000a" order="2" type="ROOT" class="CHARACTER">
<meta expanded="yes" /> <meta expanded="yes" />
<name status="s000000" import="i000004">Characters</name> <name status="s000000" import="i000004">Characters</name>
</item> </item>
<item handle="0000000000010" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE"> <item handle="0000000000011" parent="000000000000a" root="000000000000a" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<meta expanded="no" heading="H1" charCount="34" wordCount="8" paraCount="1" cursorPos="51" /> <meta expanded="yes" heading="H1" charCount="34" wordCount="8" paraCount="1" cursorPos="51" />
<name status="s000000" import="i000004" active="yes">New Note</name> <name status="s000000" import="i000004" active="yes">New Note</name>
</item> </item>
<item handle="000000000000b" parent="None" root="000000000000b" order="3" type="ROOT" class="WORLD"> <item handle="000000000000b" parent="None" root="000000000000b" order="3" type="ROOT" class="WORLD">
<meta expanded="yes" /> <meta expanded="yes" />
<name status="s000000" import="i000004">World</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
<item handle="0000000000012" parent="000000000000b" root="000000000000b" order="0" type="FILE" class="WORLD" layout="NOTE"> <item handle="0000000000013" parent="000000000000b" root="000000000000b" order="0" type="FILE" class="WORLD" layout="NOTE">
<meta expanded="no" heading="H1" charCount="51" wordCount="9" paraCount="1" cursorPos="68" /> <meta expanded="yes" heading="H1" charCount="51" wordCount="9" paraCount="1" cursorPos="68" />
<name status="s000000" import="i000004" active="yes">New Note</name> <name status="s000000" import="i000004" active="yes">New Note</name>
</item> </item>
<item handle="0000000000010" parent="None" root="0000000000010" order="4" type="ROOT" class="TRASH">
<meta expanded="yes" />
<name status="s000000" import="i000004">Trash</name>
</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.4rc1" hexVersion="0x020400c1" fileVersion="1.5" fileRevision="4" timeStamp="2024-04-09 22:31:14"> <novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 17:46:20">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="2" autoCount="1" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="2" autoCount="1" editTime="0">
<name>New Project</name> <name>New Project</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -59,7 +59,7 @@
</item> </item>
<item handle="000000000000b" parent="None" root="000000000000b" order="3" type="ROOT" class="WORLD"> <item handle="000000000000b" parent="None" root="000000000000b" order="3" type="ROOT" class="WORLD">
<meta expanded="no" /> <meta expanded="no" />
<name status="s000000" import="i000004">World</name> <name status="s000000" import="i000004">Locations</name>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
+1 -1
View File
@@ -275,7 +275,7 @@ def testCoreItem_Methods(mockGUI, mockRnd, fncPath):
"handle": "000000000000f", "handle": "000000000000f",
"parent": "000000000000d", "parent": "000000000000d",
"root": "0000000000008", "root": "0000000000008",
"order": "0", "order": "1",
"type": "FILE", "type": "FILE",
"class": "NOVEL", "class": "NOVEL",
"layout": "DOCUMENT" "layout": "DOCUMENT"
@@ -161,7 +161,7 @@ def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, projPath, mockRn
project.tree[hCharNote].setImport(C.iMajor) # type: ignore project.tree[hCharNote].setImport(C.iMajor) # type: ignore
project.tree[hWorldNote].setImport(C.iMain) # type: ignore project.tree[hWorldNote].setImport(C.iMain) # type: ignore
nwGUI.projView.populateTree() project.tree.refreshAllItems()
project.countStatus() project.countStatus()
assert [e.count for _, e in project.data.itemStatus.iterItems()] == [2, 0, 2, 1] assert [e.count for _, e in project.data.itemStatus.iterItems()] == [2, 0, 2, 1]
+3 -3
View File
@@ -29,7 +29,7 @@ from PyQt5.QtGui import QDesktopServices, QMouseEvent, QTextCursor
from PyQt5.QtWidgets import QAction, QApplication, QMenu from PyQt5.QtWidgets import QAction, QApplication, QMenu
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.enum import nwDocAction from novelwriter.enum import nwChange, nwDocAction
from novelwriter.formats.toqdoc import ToQTextDocument from novelwriter.formats.toqdoc import ToQTextDocument
from novelwriter.types import QtModNone, QtMouseLeft from novelwriter.types import QtModNone, QtMouseLeft
@@ -206,12 +206,12 @@ def testGuiViewer_Main(qtbot, monkeypatch, nwGUI, prjLipsum):
nwItem = SHARED.project.tree["4c4f28287af27"] nwItem = SHARED.project.tree["4c4f28287af27"]
nwItem.setName("Test Title") # type: ignore nwItem.setName("Test Title") # type: ignore
assert nwItem.itemName == "Test Title" # type: ignore assert nwItem.itemName == "Test Title" # type: ignore
docViewer.updateDocInfo("4c4f28287af27") docViewer.onProjectItemChanged("4c4f28287af27", nwChange.UPDATE)
assert docViewer.docHeader.itemTitle.text() == "Characters \u203a Test Title" assert docViewer.docHeader.itemTitle.text() == "Characters \u203a Test Title"
# Title without full path # Title without full path
CONFIG.showFullPath = False CONFIG.showFullPath = False
docViewer.updateDocInfo("4c4f28287af27") docViewer.onProjectItemChanged("4c4f28287af27", nwChange.UPDATE)
assert docViewer.docHeader.itemTitle.text() == "Test Title" assert docViewer.docHeader.itemTitle.text() == "Test Title"
CONFIG.showFullPath = True CONFIG.showFullPath = True
+5 -8
View File
@@ -38,8 +38,7 @@ def testGuiViewerPanel_BackRefs(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True)) monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
buildTestProject(nwGUI, projPath) buildTestProject(nwGUI, projPath)
projTree = nwGUI.projView.projTree nwGUI.projView.projTree.expandAll()
projTree.expandAll()
viewPanel = nwGUI.docViewerPanel viewPanel = nwGUI.docViewerPanel
tabBackRefs = viewPanel.tabBackRefs tabBackRefs = viewPanel.tabBackRefs
@@ -81,7 +80,7 @@ def testGuiViewerPanel_BackRefs(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
# Update Label # Update Label
SHARED.project.tree[C.hSceneDoc].setName("First Scene") # type: ignore SHARED.project.tree[C.hSceneDoc].setName("First Scene") # type: ignore
projTree.renameTreeItem(C.hSceneDoc) nwGUI.projView.renameTreeItem(C.hSceneDoc)
item = tabBackRefs.topLevelItem(0) item = tabBackRefs.topLevelItem(0)
assert item.text(tabBackRefs.C_DOC) == "First Scene" assert item.text(tabBackRefs.C_DOC) == "First Scene"
assert item.text(tabBackRefs.C_TITLE) == "Scene One" assert item.text(tabBackRefs.C_TITLE) == "Scene One"
@@ -127,8 +126,7 @@ def testGuiViewerPanel_Tags(qtbot, monkeypatch, caplog, nwGUI, projPath, mockRnd
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True)) monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
buildTestProject(nwGUI, projPath) buildTestProject(nwGUI, projPath)
projTree = nwGUI.projView.projTree nwGUI.projView.projTree.expandAll()
projTree.expandAll()
viewPanel = nwGUI.docViewerPanel viewPanel = nwGUI.docViewerPanel
nwGUI.openDocument(C.hSceneDoc) nwGUI.openDocument(C.hSceneDoc)
@@ -175,7 +173,7 @@ def testGuiViewerPanel_Tags(qtbot, monkeypatch, caplog, nwGUI, projPath, mockRnd
nwGUI.docEditor.setPlainText("# Jane Smith\n\n@tag: Janey\n\n") nwGUI.docEditor.setPlainText("# Jane Smith\n\n@tag: Janey\n\n")
nwGUI.saveDocument() nwGUI.saveDocument()
SHARED.project.tree[hJane].setName("Awesome Jane") # type: ignore SHARED.project.tree[hJane].setName("Awesome Jane") # type: ignore
projTree.renameTreeItem(hJane) nwGUI.projView.renameTreeItem(hJane)
item = charTab.topLevelItem(0) item = charTab.topLevelItem(0)
assert item.text(charTab.C_NAME) == "Janey" assert item.text(charTab.C_NAME) == "Janey"
assert item.text(charTab.C_DOC) == "Awesome Jane" assert item.text(charTab.C_DOC) == "Awesome Jane"
@@ -221,8 +219,7 @@ def testGuiViewerPanel_Tags(qtbot, monkeypatch, caplog, nwGUI, projPath, mockRnd
nwJohn = SHARED.project.tree[hJohn] nwJohn = SHARED.project.tree[hJohn]
assert isinstance(nwJohn, NWItem) assert isinstance(nwJohn, NWItem)
nwJohn.setActive(False) nwJohn.setActive(False)
projTree.setTreeItemValues(nwJohn) nwJohn.notifyToRefresh()
projTree._alertTreeChange(hJohn, flush=False)
assert charTab.topLevelItemCount() == 1 assert charTab.topLevelItemCount() == 1
# Update Labels # Update Labels
+32 -31
View File
@@ -210,9 +210,8 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
assert nwGUI.closeProject() assert nwGUI.closeProject()
assert len(SHARED.project.tree) == 0 assert len(SHARED.project.tree) == 0
assert len(SHARED.project.tree._order) == 0 assert len(SHARED.project.tree._items) == 0
assert len(SHARED.project.tree._roots) == 0 assert len(SHARED.project.tree._nodes) == 0
assert SHARED.project.tree.trashRoot is None
assert SHARED.project.data.name == "" assert SHARED.project.data.name == ""
assert SHARED.project.data.author == "" assert SHARED.project.data.author == ""
assert SHARED.project.data.spellCheck is False assert SHARED.project.data.spellCheck is False
@@ -228,23 +227,22 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
assert nwGUI.openProject(projPath) assert nwGUI.openProject(projPath)
# Check that we loaded the data # Check that we loaded the data
assert len(SHARED.project.tree) == 8 assert len(SHARED.project.tree) == 9
assert len(SHARED.project.tree._order) == 8 assert SHARED.project.tree.model.root.childCount() == 5
assert len(SHARED.project.tree._roots) == 4 assert SHARED.project.tree.trash is not None # Created automatically
assert SHARED.project.tree.trashRoot is None
assert SHARED.project.data.name == "New Project" assert SHARED.project.data.name == "New Project"
assert SHARED.project.data.author == "Jane Doe" assert SHARED.project.data.author == "Jane Doe"
assert SHARED.project.data.spellCheck is False assert SHARED.project.data.spellCheck is False
# Check that tree items have been created # Check that tree items have been created
assert nwGUI.projView.projTree._getTreeItem(C.hNovelRoot) is not None assert SHARED.project.tree[C.hNovelRoot] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hPlotRoot) is not None assert SHARED.project.tree[C.hPlotRoot] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hCharRoot) is not None assert SHARED.project.tree[C.hCharRoot] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hWorldRoot) is not None assert SHARED.project.tree[C.hWorldRoot] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hTitlePage) is not None assert SHARED.project.tree[C.hTitlePage] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hChapterDir) is not None assert SHARED.project.tree[C.hChapterDir] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hChapterDoc) is not None assert SHARED.project.tree[C.hChapterDoc] is not None
assert nwGUI.projView.projTree._getTreeItem(C.hSceneDoc) is not None assert SHARED.project.tree[C.hSceneDoc] is not None
nwGUI.mainMenu.aSpellCheck.setChecked(True) nwGUI.mainMenu.aSpellCheck.setChecked(True)
nwGUI.mainMenu._toggleSpellCheck() nwGUI.mainMenu._toggleSpellCheck()
@@ -256,10 +254,12 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
CONFIG.autoScroll = True CONFIG.autoScroll = True
# Add a Character File # Add a Character File
nwGUI._switchFocus(nwFocus.TREE) nwGUI._changeView(nwView.PROJECT)
nwGUI.projView.projTree.expandAll()
nwGUI.projView.projTree.clearSelection() nwGUI.projView.projTree.clearSelection()
nwGUI.projView.projTree._getTreeItem(C.hCharRoot).setSelected(True) nwGUI.projView.projTree.setSelectedHandle(C.hCharRoot)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True)
nwGUI.projView.projTree.expandAll()
nwGUI.openSelectedItem() nwGUI.openSelectedItem()
# Text Editor # Text Editor
@@ -290,10 +290,11 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY)
# Add a Plot File # Add a Plot File
nwGUI._switchFocus(nwFocus.TREE) nwGUI.projView.projTree.expandAll()
nwGUI.projView.projTree.clearSelection() nwGUI.projView.projTree.clearSelection()
nwGUI.projView.projTree._getTreeItem(C.hPlotRoot).setSelected(True) nwGUI.projView.projTree.setSelectedHandle(C.hPlotRoot)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True)
nwGUI.projView.projTree.expandAll()
nwGUI.openSelectedItem() nwGUI.openSelectedItem()
# Type something into the document # Type something into the document
@@ -312,10 +313,11 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY)
# Add a World File # Add a World File
nwGUI._switchFocus(nwFocus.TREE) nwGUI.projView.projTree.expandAll()
nwGUI.projView.projTree.clearSelection() nwGUI.projView.projTree.clearSelection()
nwGUI.projView.projTree._getTreeItem(C.hWorldRoot).setSelected(True) nwGUI.projView.projTree.setSelectedHandle(C.hWorldRoot)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True)
nwGUI.projView.projTree.expandAll()
nwGUI.openSelectedItem() nwGUI.openSelectedItem()
# Add Some Text # Add Some Text
@@ -343,11 +345,9 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
nwGUI._autoSaveProject() nwGUI._autoSaveProject()
# Select the 'New Scene' file # Select the 'New Scene' file
nwGUI._switchFocus(nwFocus.TREE) nwGUI.projView.projTree.expandAll()
nwGUI.projView.projTree.clearSelection() nwGUI.projView.projTree.clearSelection()
nwGUI.projView.projTree._getTreeItem(C.hNovelRoot).setExpanded(True) nwGUI.projView.projTree.setSelectedHandle(C.hSceneDoc)
nwGUI.projView.projTree._getTreeItem(C.hChapterDir).setExpanded(True)
nwGUI.projView.projTree._getTreeItem(C.hSceneDoc).setSelected(True)
nwGUI.openSelectedItem() nwGUI.openSelectedItem()
# Type something into the document # Type something into the document
@@ -533,6 +533,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
# Indent and Align # Indent and Align
# ================ # ================
nwGUI._switchFocus(nwView.EDITOR)
for c in "\t\"Tab-indented text\"": for c in "\t\"Tab-indented text\"":
qtbot.keyClick(docEditor, c, delay=KEY_DELAY) qtbot.keyClick(docEditor, c, delay=KEY_DELAY)
qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY)
@@ -622,12 +623,6 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
copyfile(projFile, testFile) copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile, ignoreStart=NWD_IGNORE) assert cmpFiles(testFile, compFile, ignoreStart=NWD_IGNORE)
projFile = projPath / "content" / "0000000000010.nwd"
testFile = tstPaths.outDir / "guiEditor_Main_Final_0000000000010.nwd"
compFile = tstPaths.refDir / "guiEditor_Main_Final_0000000000010.nwd"
copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile, ignoreStart=NWD_IGNORE)
projFile = projPath / "content" / "0000000000011.nwd" projFile = projPath / "content" / "0000000000011.nwd"
testFile = tstPaths.outDir / "guiEditor_Main_Final_0000000000011.nwd" testFile = tstPaths.outDir / "guiEditor_Main_Final_0000000000011.nwd"
compFile = tstPaths.refDir / "guiEditor_Main_Final_0000000000011.nwd" compFile = tstPaths.refDir / "guiEditor_Main_Final_0000000000011.nwd"
@@ -640,6 +635,12 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd):
copyfile(projFile, testFile) copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile, ignoreStart=NWD_IGNORE) assert cmpFiles(testFile, compFile, ignoreStart=NWD_IGNORE)
projFile = projPath / "content" / "0000000000013.nwd"
testFile = tstPaths.outDir / "guiEditor_Main_Final_0000000000013.nwd"
compFile = tstPaths.refDir / "guiEditor_Main_Final_0000000000013.nwd"
copyfile(projFile, testFile)
assert cmpFiles(testFile, compFile, ignoreStart=NWD_IGNORE)
# qtbot.stop() # qtbot.stop()
+3 -2
View File
@@ -197,7 +197,8 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, prjLipsum, fncPath, tstPat
assert outlineBar.novelValue.itemData(2) == "" # All novels assert outlineBar.novelValue.itemData(2) == "" # All novels
# Add a second novel folder # Add a second novel folder
newHandle = SHARED.project.newRoot(nwItemClass.NOVEL) with qtbot.waitSignal(SHARED.rootFolderChanged):
newHandle = SHARED.project.newRoot(nwItemClass.NOVEL)
# Check new values in dropdown list # Check new values in dropdown list
assert outlineBar.novelValue.itemData(0) == lipHandle assert outlineBar.novelValue.itemData(0) == lipHandle
@@ -277,7 +278,7 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, prjLipsum, fncPath, tstPat
assert outlineData.fileValue.text() == "Scene One" assert outlineData.fileValue.text() == "Scene One"
assert outlineData.itemValue.text() == "Finished" assert outlineData.itemValue.text() == "Finished"
outlineTree._treeDoubleClick(selItem, 0) outlineTree._onItemDoubleClicked(selItem, 0)
assert nwGUI.docEditor.docHandle == "88243afbe5ed8" assert nwGUI.docEditor.docHandle == "88243afbe5ed8"
# Dump to CSV # Dump to CSV
+2
View File
@@ -86,9 +86,11 @@ def testGuiStatusBar_Main(qtbot, nwGUI, projPath, mockRnd):
# Project Stats # Project Stats
CONFIG.incNotesWCount = False CONFIG.incNotesWCount = False
nwGUI._lastTotalCount = 0
nwGUI._updateStatusWordCount() nwGUI._updateStatusWordCount()
assert nwGUI.mainStatus.statsText.text() == "Words: 9 (+9)" assert nwGUI.mainStatus.statsText.text() == "Words: 9 (+9)"
CONFIG.incNotesWCount = True CONFIG.incNotesWCount = True
nwGUI._lastTotalCount = 0
nwGUI._updateStatusWordCount() nwGUI._updateStatusWordCount()
assert nwGUI.mainStatus.statsText.text() == "Words: 11 (+11)" assert nwGUI.mainStatus.statsText.text() == "Words: 11 (+11)"