Added undo functionalities for all commands

This commit is contained in:
2025-08-01 19:25:34 +02:00
parent 3ca23449e4
commit 14f079d5f9

View File

@@ -122,30 +122,36 @@ class WorkflowDesigner(BaseComponent):
) )
self._state.components[component_id] = component self._state.components[component_id] = component
undo_redo_attrs = UndoRedoAttrs(f"Add Component '{component_type}'", on_undo=lambda: self.refresh_state()) undo_redo_attrs = UndoRedoAttrs(f"Add Component '{component_type}'", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs) # update db self._db.save_state(self._key, self._state, undo_redo_attrs) # update db
return self.refresh_designer(), self._undo_redo.refresh() return self.refresh_designer(), self._undo_redo.refresh()
def move_component(self, component_id, x, y): def move_component(self, component_id, x, y):
if component_id in self._state.components: if component_id in self._state.components:
component = self._state.components[component_id]
self._state.selected_component_id = component_id self._state.selected_component_id = component_id
self._state.components[component_id].x = int(x) component.x = int(x)
self._state.components[component_id].y = int(y) component.y = int(y)
self._db.save_state(self._key, self._state, ) # update db
undo_redo_attrs = UndoRedoAttrs(f"Move Component '{component.title}'", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs) # update db
return self.refresh_designer(), self.refresh_properties(True) return self.refresh_designer(), self.refresh_properties(True)
def delete_component(self, component_id): def delete_component(self, component_id):
# Remove component # Remove component
if component_id in self._state.components: if component_id in self._state.components:
component = self._state.components[component_id]
del self._state.components[component_id] del self._state.components[component_id]
# Remove related connections # Remove related connections
self._state.connections = [connection for connection in self._state.connections self._state.connections = [connection for connection in self._state.connections
if connection.from_id != component_id and connection.to_id != component_id] if connection.from_id != component_id and connection.to_id != component_id]
# update db
self._db.save_state(self._key, self._state) # update db
undo_redo_attrs = UndoRedoAttrs(f"Remove Component '{component.title}'", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
return self.refresh_designer() return self.refresh_designer()
@@ -160,7 +166,8 @@ class WorkflowDesigner(BaseComponent):
self._state.connections.append(connection) self._state.connections.append(connection)
# update db # update db
self._db.save_state(self._key, self._state) undo_redo_attrs = UndoRedoAttrs(f"Add Connection", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
return self.refresh_designer() return self.refresh_designer()
@@ -170,19 +177,25 @@ class WorkflowDesigner(BaseComponent):
self._state.connections.remove(connection) self._state.connections.remove(connection)
# update db # update db
self._db.save_state(self._key, self._state) undo_redo_attrs = UndoRedoAttrs(f"Delete Connection", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
return self.refresh_designer() return self.refresh_designer()
def set_designer_height(self, height): def set_designer_height(self, height):
self._state.designer_height = height self._state.designer_height = height
self._db.save_state(self._key, self._state)
undo_redo_attrs = UndoRedoAttrs(f"Resize Designer", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
return self.__ft__() # refresh the whole component return self.__ft__() # refresh the whole component
def select_component(self, component_id): def select_component(self, component_id):
if component_id in self._state.components: if component_id in self._state.components:
self._state.selected_component_id = component_id self._state.selected_component_id = component_id
self._db.save_state(self._key, self._state)
component = self._state.components[component_id]
undo_redo_attrs = UndoRedoAttrs(f"Select Component {component.title}", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
return self.refresh_properties() return self.refresh_properties()
@@ -190,7 +203,9 @@ class WorkflowDesigner(BaseComponent):
if component_id in self._state.components: if component_id in self._state.components:
component = self._state.components[component_id] component = self._state.components[component_id]
component.properties = details component.properties = details
self._db.save_state(self._key, self._state)
undo_redo_attrs = UndoRedoAttrs(f"Set properties for {component.title}", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
logger.debug(f"Saved properties for component {component_id}: {details}") logger.debug(f"Saved properties for component {component_id}: {details}")
return self.refresh_properties() return self.refresh_properties()
@@ -205,8 +220,9 @@ class WorkflowDesigner(BaseComponent):
if component_id in self._state.components: if component_id in self._state.components:
component = self._state.components[component_id] component = self._state.components[component_id]
component.properties = {"processor_name": processor_name} component.properties = {"processor_name": processor_name}
self._db.save_state(self._key, self._state) undo_redo_attrs = UndoRedoAttrs(f"Set Processor for {component.title}", on_undo=self.refresh_state)
self._db.save_state(self._key, self._state, undo_redo_attrs)
return self.refresh_properties() return self.refresh_properties()
def play_workflow(self, boundaries: dict): def play_workflow(self, boundaries: dict):