Tree: Reorder... for a component's children
Right-click a component (or the app) with two or more children to move them up and down; OK applies the new order, which is the order they run in. On a device the order goes there first via Sox reorder, checked against the device's children, and the file is left alone if it is refused. Undoable. Also: device host in editor.properties. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+37
@@ -483,6 +483,43 @@ def rename_component(comp_element, new_name):
|
||||
return True
|
||||
|
||||
|
||||
def reorder_children(parent, new_order):
|
||||
"""Gives `parent`'s child components a new order, which is the order they run in.
|
||||
|
||||
Returns True when the order changed. On a device the new order goes there first,
|
||||
and the file is left alone if it does not.
|
||||
"""
|
||||
root = app_state.xml_root_element
|
||||
if root is None:
|
||||
return False
|
||||
old_order = [child for child in parent if child.tag == "comp"]
|
||||
new_order = list(new_order)
|
||||
if new_order == old_order:
|
||||
return False
|
||||
if (len(new_order) != len(old_order)
|
||||
or {id(c) for c in new_order} != {id(c) for c in old_order}):
|
||||
return False
|
||||
|
||||
name = parent.get("name", "app")
|
||||
if app_state.live_mode:
|
||||
if not live_hooks.live_reorder_children(parent, new_order):
|
||||
live_hooks.warn_failure("Reorder", f"{name} was not reordered on the device")
|
||||
return False
|
||||
|
||||
undo.apply_child_order(parent, new_order)
|
||||
command_class = (undo.LiveReorderChildrenCommand if app_state.live_mode
|
||||
else undo.ReorderChildrenCommand)
|
||||
undo.push(command_class(parent, old_order, new_order, label=f"reorder {name}"))
|
||||
|
||||
app_state.mark_dirty()
|
||||
refresh_treeview_from_dom(root)
|
||||
wiresheet.render_current_sheet()
|
||||
|
||||
where = " on the device" if app_state.live_mode else ""
|
||||
app_state.set_status(f"{name} reordered{where}.")
|
||||
return True
|
||||
|
||||
|
||||
def allocate_component_id():
|
||||
"""Lowest unused id, matching how this app's ids are dense with no gaps."""
|
||||
used = set()
|
||||
|
||||
Reference in New Issue
Block a user