Skip to content

Commit 7790264

Browse files
authored
Fix auto-complete bug and outline export bug (#2343)
2 parents ab328d0 + bbcd115 commit 7790264

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

novelwriter/core/index.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ def setNovelModelExtraColumn(self, extra: nwNovelExtra) -> None:
131131
self._novelExtra = extra
132132
return
133133

134+
def setItemClass(self, tHandle: str, itemClass: nwItemClass) -> None:
135+
"""Update the class for all tags of a handle."""
136+
logger.info("Updating class for '%s'", tHandle)
137+
self._tagsIndex.updateClass(tHandle, itemClass.name)
138+
return
139+
134140
##
135141
# Public Methods
136142
##
@@ -854,6 +860,15 @@ def filterTagNames(self, className: str | None) -> list[str]:
854860
x.get("name", "") for x in self._tags.values() if x.get("class", "") == className
855861
]
856862

863+
def updateClass(self, tHandle: str, className: str) -> None:
864+
"""Update the class name of an item. This must be called when a
865+
document moves to another class.
866+
"""
867+
for entry in self._tags.values():
868+
if entry.get("handle") == tHandle:
869+
entry["class"] = className
870+
return
871+
857872
##
858873
# Pack/Unpack
859874
##

novelwriter/core/item.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,11 @@ def setClassDefaults(self, itemClass: nwItemClass) -> None:
435435
"""
436436
if self._parent is not None:
437437
# Only update for child items
438-
self.setClass(itemClass)
438+
if itemClass != self._class:
439+
self.setClass(itemClass)
440+
if self._type == nwItemType.FILE:
441+
# Notify the index of the class change
442+
self._project.index.setItemClass(self._handle, itemClass)
439443

440444
if self._layout == nwItemLayout.NO_LAYOUT:
441445
# If no layout is set, pick one

novelwriter/gui/outline.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,8 @@ def _dumpNovelData(self, rootHandle: str | None) -> list[list[str | int]]:
784784
):
785785
if novIdx.level != "H0" and (nwItem := SHARED.project.tree[tHandle]):
786786
refs = SHARED.project.index.getReferences(tHandle, sTitle)
787-
story = {k: v for k, v in novIdx.comments.items() if k in sMatch}.values()
787+
comments = dict(novIdx.comments.items())
788+
story = [comments.get(k, "") for k in sMatch]
788789
data.append([
789790
novIdx.level,
790791
novIdx.title,

tests/test_core/test_core_index.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,12 @@ def testCoreIndex_TagsIndex():
10491049
assert tagsIndex.tagClass("Tag3") == nwItemClass.PLOT.name
10501050
assert tagsIndex.tagClass("Tag4") is None
10511051

1052+
# Change class of item
1053+
tagsIndex.updateClass("0000000000003", nwItemClass.WORLD.name)
1054+
assert tagsIndex.tagClass("Tag3") == nwItemClass.WORLD.name
1055+
tagsIndex.updateClass("0000000000003", nwItemClass.PLOT.name)
1056+
assert tagsIndex.tagClass("Tag3") == nwItemClass.PLOT.name
1057+
10521058
# Pack Data
10531059
assert tagsIndex.packData() == content
10541060

0 commit comments

Comments
 (0)