Re-enable item rename

This commit is contained in:
Veronica Berglyd Olsen
2024-11-18 00:01:40 +01:00
parent 4f8e898440
commit 337f05f60e
6 changed files with 53 additions and 45 deletions
+16 -1
View File
@@ -55,7 +55,7 @@ class NWItem:
"_project", "_name", "_handle", "_parent", "_root", "_order",
"_type", "_class", "_layout", "_status", "_import", "_active",
"_expanded", "_heading", "_charCount", "_wordCount",
"_paraCount", "_cursorPos", "_initCount",
"_paraCount", "_cursorPos", "_initCount", "_blocked",
)
def __init__(self, project: NWProject, handle: str) -> None:
@@ -82,6 +82,8 @@ class NWItem:
self._cursorPos = 0 # Last cursor position
self._initCount = 0 # Initial word count
self._blocked = True
return
def __repr__(self) -> str:
@@ -257,6 +259,7 @@ class NWItem:
self._cursorPos = 0
self._initCount = self._wordCount
self._blocked = False
return True
@@ -281,6 +284,7 @@ class NWItem:
cls._paraCount = source._paraCount
cls._cursorPos = source._cursorPos
cls._initCount = source._initCount
cls._blocked = source._blocked
return cls
##
@@ -415,6 +419,7 @@ class NWItem:
self._name = simplified(name)
else:
self._name = ""
self._notifyChange()
return
def setParent(self, handle: Any) -> None:
@@ -560,3 +565,13 @@ class NWItem:
"""Save the initial word count."""
self._initCount = self._wordCount
return
##
# Internal Functions
##
def _notifyChange(self) -> None:
"""Notify project tree on user changes to the item."""
if not self._blocked:
self._project.tree.refreshNode(self._handle)
return
+1 -1
View File
@@ -131,7 +131,7 @@ class NWStatus:
self._default = next(iter(self._store)) if self._store else None
# Emit the change signal
SHARED.projectSingalProxy({"event": "statusLabels", "kind": self._prefix})
SHARED.projectSignalProxy({"event": "statusLabels", "kind": self._prefix})
return
+14 -17
View File
@@ -30,6 +30,7 @@ from collections.abc import Iterable, Iterator
from pathlib import Path
from typing import TYPE_CHECKING, Literal, overload
from novelwriter import SHARED
from novelwriter.constants import nwFiles
from novelwriter.core.item import NWItem
from novelwriter.core.itemmodel import ProjectModel, ProjectNode
@@ -68,20 +69,12 @@ class NWTree:
)
def __init__(self, project: NWProject) -> None:
self._project = project
# self._tree: dict[str, NWItem] = {} # Holds all the items of the project
# self._order: list[str] = [] # The order of the tree items in the tree view
# self._roots: dict[str, NWItem] = {} # The root items of the tree
self._model = ProjectModel(self)
self._items: dict[str, NWItem] = {}
self._nodes: dict[str, ProjectNode] = {}
self._trash = None # The handle of the trash root folder
self._changed = False # True if tree structure has changed
return
##
@@ -107,15 +100,10 @@ class NWTree:
def clear(self) -> None:
"""Clear the item tree entirely."""
# self._tree = {}
# self._order = []
# self._roots = {}
self._model = ProjectModel(self)
self._items = {}
self._nodes = {}
self._trash = None
self._model = ProjectModel(self)
self._items = {}
self._nodes = {}
self._trash = None
self._changed = False
return
@@ -237,6 +225,15 @@ class NWTree:
return
def refreshNode(self, tHandle: str) -> None:
"""Refresh node data on item change."""
if node := self._nodes.get(tHandle):
node.refresh()
index = self._model.indexFromNode(node)
SHARED.projectSignalProxy({"event": "projectItem", "handle": tHandle})
self._model.dataChanged.emit(index, index)
return
def _buildTree(self, items: dict[str, NWItem]) -> dict[str, NWItem]:
""""""
remains: dict[str, NWItem] = {}
+8 -15
View File
@@ -42,6 +42,7 @@ from novelwriter.common import qtLambda
from novelwriter.constants import nwLabels, nwUnicode, trConst
from novelwriter.core.item import NWItem
from novelwriter.core.itemmodel import ProjectModel, ProjectNode
from novelwriter.dialogs.editlabel import GuiEditLabel
from novelwriter.dialogs.projectsettings import GuiProjectSettings
from novelwriter.enum import nwDocMode, nwItemClass, nwItemLayout, nwItemType
from novelwriter.extensions.modified import NIconToolButton
@@ -58,7 +59,7 @@ class GuiProjectView(QWidget):
"""
# Signals triggered when the meta data values of items change
treeItemChanged = pyqtSignal(str)
# treeItemChanged = pyqtSignal(str)
rootFolderChanged = pyqtSignal(str)
wordCountsChanged = pyqtSignal()
@@ -193,8 +194,10 @@ class GuiProjectView(QWidget):
"""
if tHandle is None:
tHandle = self.projTree.getSelectedHandle()
if tHandle:
self.projTree.renameTreeItem(tHandle, name=name)
if nwItem := SHARED.project.tree[tHandle]:
newLabel, dlgOk = GuiEditLabel.getLabel(self, text=name or nwItem.itemName)
if dlgOk:
nwItem.setName(newLabel)
return
@pyqtSlot(str, bool)
@@ -893,16 +896,6 @@ class GuiProjectTree(QTreeView):
# self.setCurrentItem(tItem.child(0))
return
def renameTreeItem(self, tHandle: str, name: str = "") -> None:
"""Open a dialog to edit the label of an item."""
# if nwItem := SHARED.project.tree[tHandle]:
# newLabel, dlgOk = GuiEditLabel.getLabel(self, text=name or nwItem.itemName)
# if dlgOk:
# nwItem.setName(newLabel)
# self.setTreeItemValues(nwItem)
# self._alertTreeChange(tHandle, flush=False)
return
# def saveTreeOrder(self) -> None:
# """Build a list of the items in the project tree and send them
# to the project class. This syncs up the two versions of the
@@ -1848,7 +1841,7 @@ class _TreeContextMenu(QMenu):
# Edit Item Settings
action = self.addAction(self.tr("Rename"))
action.triggered.connect(qtLambda(self.projTree.renameTreeItem, self._handle))
action.triggered.connect(qtLambda(self.projView.renameTreeItem, self._handle))
if isFile:
self._itemHeader()
self._itemActive(False)
@@ -1911,7 +1904,7 @@ class _TreeContextMenu(QMenu):
if hItem := SHARED.project.index.getItemHeading(self._handle, "T0001"):
action = self.addAction(self.tr("Rename to Heading"))
action.triggered.connect(
qtLambda(self.projTree.renameTreeItem, self._handle, hItem.title)
qtLambda(self.projView.renameTreeItem, self._handle, hItem.title)
)
return
+4 -4
View File
@@ -216,6 +216,10 @@ class GuiMain(QMainWindow):
SHARED.indexScannedText.connect(self.itemDetails.updateViewBox)
SHARED.indexScannedText.connect(self.projView.updateItemValues)
SHARED.mainClockTick.connect(self._timeTick)
SHARED.projectItemChanged.connect(self.docEditor.updateDocInfo)
SHARED.projectItemChanged.connect(self.docViewer.updateDocInfo)
SHARED.projectItemChanged.connect(self.docViewerPanel.projectItemChanged)
SHARED.projectItemChanged.connect(self.itemDetails.updateViewBox)
SHARED.projectStatusChanged.connect(self.mainStatus.updateProjectStatus)
SHARED.projectStatusMessage.connect(self.mainStatus.setStatusMessage)
SHARED.spellLanguageChanged.connect(self.mainStatus.setLanguage)
@@ -237,10 +241,6 @@ class GuiMain(QMainWindow):
self.projView.rootFolderChanged.connect(self.outlineView.updateRootItem)
self.projView.rootFolderChanged.connect(self.projView.updateRootItem)
self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox)
self.projView.treeItemChanged.connect(self.docEditor.updateDocInfo)
self.projView.treeItemChanged.connect(self.docViewer.updateDocInfo)
self.projView.treeItemChanged.connect(self.docViewerPanel.projectItemChanged)
self.projView.treeItemChanged.connect(self.itemDetails.updateViewBox)
self.projView.wordCountsChanged.connect(self._updateStatusWordCount)
self.novelView.openDocumentRequest.connect(self._openDocument)
+10 -7
View File
@@ -55,15 +55,16 @@ class SharedData(QObject):
"_idleTime", "_idleRefTime",
)
focusModeChanged = pyqtSignal(bool)
indexAvailable = pyqtSignal()
indexChangedTags = pyqtSignal(list, list)
indexCleared = pyqtSignal()
indexScannedText = pyqtSignal(str)
mainClockTick = pyqtSignal()
projectItemChanged = pyqtSignal(str)
projectStatusChanged = pyqtSignal(bool)
projectStatusMessage = pyqtSignal(str)
spellLanguageChanged = pyqtSignal(str, str)
focusModeChanged = pyqtSignal(bool)
indexScannedText = pyqtSignal(str)
indexChangedTags = pyqtSignal(list, list)
indexCleared = pyqtSignal()
indexAvailable = pyqtSignal()
mainClockTick = pyqtSignal()
statusLabelsChanged = pyqtSignal(str)
def __init__(self) -> None:
@@ -320,12 +321,14 @@ class SharedData(QObject):
self.indexAvailable.emit()
return
def projectSingalProxy(self, data: dict) -> None:
def projectSignalProxy(self, data: dict) -> None:
"""Emit signals on project data change."""
event = data.get("event")
logger.debug("Received '%s' event from project data", event)
if event == "statusLabels":
self.statusLabelsChanged.emit(data.get("kind", ""))
elif event == "projectItem":
self.projectItemChanged.emit(data.get("handle", ""))
return
##