Add flow view reordering via connection breaking
When a connection is broken in the flow view: 1. The node that lost its input moves to the end of the chain 2. The remaining nodes reconnect automatically 3. Tool model updates to reflect new order 4. Dependency validation warns about broken references Flow: Input → A → B → C → Output Break B's input: Input → A → C → B → Output Co-Authored-By: Claude Opus 4.5 <[email protected]>
This commit is contained in:
@@ -241,6 +241,7 @@ class ToolBuilderPage(QWidget):
|
||||
self._flow_widget = FlowGraphWidget()
|
||||
self._flow_widget.node_double_clicked.connect(self._on_flow_node_double_clicked)
|
||||
self._flow_widget.steps_deleted.connect(self._on_flow_steps_deleted)
|
||||
self._flow_widget.steps_reordered.connect(self._on_flow_steps_reordered)
|
||||
|
||||
# Replace placeholder
|
||||
old_widget = self.steps_stack.widget(1)
|
||||
@@ -282,6 +283,35 @@ class ToolBuilderPage(QWidget):
|
||||
# Refresh the list view (flow view will be refreshed by set_tool)
|
||||
self._refresh_steps()
|
||||
|
||||
def _on_flow_steps_reordered(self, new_order: list):
|
||||
"""Handle step reordering from flow view.
|
||||
|
||||
Args:
|
||||
new_order: List of old indices in new order.
|
||||
e.g., [0, 2, 1] means step 0 stays first,
|
||||
step 2 moves to second, step 1 moves to third.
|
||||
"""
|
||||
if not self._tool or not self._tool.steps:
|
||||
return
|
||||
|
||||
# Reorder steps according to new_order
|
||||
old_steps = self._tool.steps[:]
|
||||
new_steps = [old_steps[i] for i in new_order if i < len(old_steps)]
|
||||
|
||||
# Validate the new order
|
||||
warnings = self._validate_step_order(new_steps)
|
||||
|
||||
if warnings:
|
||||
# Show warning but allow the reorder
|
||||
warning_msg = "Variable dependency warnings:\n\n" + "\n".join(warnings)
|
||||
warning_msg += "\n\nThe reorder has been applied. You may need to fix these issues."
|
||||
QMessageBox.warning(self, "Dependency Warning", warning_msg)
|
||||
|
||||
self._tool.steps = new_steps
|
||||
|
||||
# Refresh both views
|
||||
self._refresh_steps()
|
||||
|
||||
def _load_tool(self, name: str):
|
||||
"""Load an existing tool for editing."""
|
||||
tool = load_tool(name)
|
||||
|
||||
Reference in New Issue
Block a user