@@ -148,6 +148,10 @@ def __init__(self, parent=None, update_title=None):
148148 # Choices rename undo state: captured on itemDoubleClicked, consumed by itemChanged.
149149 self ._choices_rename_old_state = None
150150
151+ # Hierarchy item rename undo state: captured on itemDoubleClicked, consumed by itemChanged.
152+ self ._hierarchy_rename_old_label = None
153+ self ._hierarchy_rename_item = None
154+
151155 # Choices widget-edit debounce (ComboboxTreeChild, VariableWidget, etc.)
152156 self ._choices_widget_old_state = None
153157 self ._choices_widget_debounce_desc = "Edit Choices"
@@ -187,6 +191,8 @@ def __init__(self, parent=None, update_title=None):
187191 self .ui .tree_hierarchy_widget .setAcceptDrops (True )
188192 self .ui .tree_hierarchy_widget .setDropIndicatorShown (True )
189193 self .ui .tree_hierarchy_widget .setDragDropMode (QTreeWidget .InternalMove )
194+ self .ui .tree_hierarchy_widget .itemDoubleClicked .connect (self ._on_hierarchy_item_about_to_edit )
195+ self .ui .tree_hierarchy_widget .itemChanged .connect (self ._on_hierarchy_item_changed )
190196
191197 # Content version
192198 self .content_version_spinbox = QSpinBox ()
@@ -2321,6 +2327,28 @@ def _flush_choices_widget_if_pending(self):
23212327 self ._choices_widget_debounce .stop ()
23222328 self ._push_choices_widget_edit ()
23232329
2330+ def _on_hierarchy_item_about_to_edit (self , item , column ):
2331+ """Capture the 'before' label when the user starts an inline rename in the hierarchy tree."""
2332+ if column == 0 :
2333+ self ._hierarchy_rename_old_label = item .text (0 )
2334+ self ._hierarchy_rename_item = item
2335+
2336+ def _on_hierarchy_item_changed (self , item , column ):
2337+ """Push rename undo command once the inline edit is committed in the hierarchy tree."""
2338+ if (
2339+ column == 0
2340+ and self ._hierarchy_rename_item is item
2341+ and self ._hierarchy_rename_old_label is not None
2342+ ):
2343+ new_label = item .text (0 )
2344+ if new_label != self ._hierarchy_rename_old_label :
2345+ from src .editors .smartprop_editor .commands import HierarchyItemRenameCommand
2346+ self .undo_stack .push (
2347+ HierarchyItemRenameCommand (item , self ._hierarchy_rename_old_label , new_label )
2348+ )
2349+ self ._hierarchy_rename_old_label = None
2350+ self ._hierarchy_rename_item = None
2351+
23242352 def _setup_history_dock (self ):
23252353 self ._history_dock = QDockWidget ("History" , self )
23262354 self ._history_dock .setObjectName ("SPE_history_dock" )
0 commit comments