use super::types::{
ConnectionChange, DeleteChange, EdgeConnection, NodeDragEnd, NodeDragStart, NodeDragUpdate,
NodeResizeEnd, NodeResizeStart, NodeResizeUpdate, SelectionChange, ViewportMove,
ViewportMoveEnd, ViewportMoveStart,
};
use crate::runtime::commit::NodeGraphPatch;
use crate::runtime::xyflow::changes::{EdgeChange, NodeChange, NodeGraphChanges};
use jellyflow_core::core::{CanvasPoint, EdgeId, GroupId, NodeId, StickyNoteId};
use jellyflow_core::ops::EdgeEndpoints;
pub trait NodeGraphCommitCallbacks: 'static {
fn on_graph_commit(&mut self, _patch: &NodeGraphPatch) {}
fn on_node_edge_changes(&mut self, _changes: &NodeGraphChanges) {}
fn on_nodes_change(&mut self, _changes: &[NodeChange]) {}
fn on_edges_change(&mut self, _changes: &[EdgeChange]) {}
fn on_connection_change(&mut self, _change: ConnectionChange) {}
fn on_connect(&mut self, _conn: EdgeConnection) {}
fn on_disconnect(&mut self, _conn: EdgeConnection) {}
fn on_reconnect(&mut self, _edge: EdgeId, _from: EdgeEndpoints, _to: EdgeEndpoints) {}
fn on_nodes_delete(&mut self, _nodes: &[NodeId]) {}
fn on_edges_delete(&mut self, _edges: &[EdgeId]) {}
fn on_groups_delete(&mut self, _groups: &[GroupId]) {}
fn on_sticky_notes_delete(&mut self, _notes: &[StickyNoteId]) {}
fn on_delete(&mut self, _change: DeleteChange) {}
}
pub trait NodeGraphViewCallbacks: 'static {
fn on_view_change(&mut self, _changes: &[crate::runtime::events::ViewChange]) {}
fn on_viewport_change(&mut self, _pan: CanvasPoint, _zoom: f32) {}
fn on_selection_change(&mut self, _sel: SelectionChange) {}
}
pub trait NodeGraphGestureCallbacks: 'static {
fn on_move_start(&mut self, _ev: ViewportMoveStart) {}
fn on_move(&mut self, _ev: ViewportMove) {}
fn on_move_end(&mut self, _ev: ViewportMoveEnd) {}
fn on_node_drag_start(&mut self, _ev: NodeDragStart) {}
fn on_node_drag_end(&mut self, _ev: NodeDragEnd) {}
fn on_node_drag(&mut self, _ev: NodeDragUpdate) {}
fn on_node_resize_start(&mut self, _ev: NodeResizeStart) {}
fn on_node_resize(&mut self, _ev: NodeResizeUpdate) {}
fn on_node_resize_end(&mut self, _ev: NodeResizeEnd) {}
fn on_connect_start(&mut self, _ev: crate::runtime::events::ConnectStart) {}
fn on_connect_end(&mut self, _ev: crate::runtime::events::ConnectEnd) {}
}
pub trait NodeGraphCallbacks:
NodeGraphCommitCallbacks + NodeGraphViewCallbacks + NodeGraphGestureCallbacks
{
}
impl<T> NodeGraphCallbacks for T where
T: NodeGraphCommitCallbacks + NodeGraphViewCallbacks + NodeGraphGestureCallbacks
{
}