use egui::Vec2;
use petgraph::stable_graph::{EdgeIndex, NodeIndex};
use crate::SubGraph;
#[derive(Debug, Clone)]
pub enum ChangeNode {
Clicked { id: NodeIndex },
DoubleClicked { id: NodeIndex },
Location { id: NodeIndex, old: Vec2, new: Vec2 },
Selected { id: NodeIndex, old: bool, new: bool },
Folded { id: NodeIndex, old: bool, new: bool },
Dragged { id: NodeIndex, old: bool, new: bool },
}
impl ChangeNode {
pub(crate) fn clicked(id: NodeIndex) -> Self {
Self::Clicked { id }
}
pub(crate) fn double_clicked(id: NodeIndex) -> Self {
Self::DoubleClicked { id }
}
pub(crate) fn change_location(id: NodeIndex, old: Vec2, new: Vec2) -> Self {
Self::Location { id, old, new }
}
pub(crate) fn change_selected(id: NodeIndex, old: bool, new: bool) -> Self {
Self::Selected { id, old, new }
}
pub(crate) fn change_folded(id: NodeIndex, old: bool, new: bool) -> Self {
Self::Folded { id, old, new }
}
pub(crate) fn change_dragged(id: NodeIndex, old: bool, new: bool) -> Self {
Self::Dragged { id, old, new }
}
}
#[derive(Debug, Clone)]
pub enum ChangeSubgraph {
Folded { root: NodeIndex, subg: SubGraph },
Selected { root: NodeIndex, subg: SubGraph },
}
impl ChangeSubgraph {
pub(crate) fn change_folded(root: NodeIndex, subg: SubGraph) -> Self {
Self::Folded { root, subg }
}
pub(crate) fn change_selected(root: NodeIndex, subg: SubGraph) -> Self {
Self::Selected { root, subg }
}
}
#[derive(Debug, Clone)]
pub enum ChangeEdge {
Selected { id: EdgeIndex, old: bool, new: bool },
}
impl ChangeEdge {
pub(crate) fn change_selected(id: EdgeIndex, old: bool, new: bool) -> Self {
Self::Selected { id, old, new }
}
}
#[derive(Debug, Clone)]
pub enum Change {
Node(ChangeNode),
Edge(ChangeEdge),
SubGraph(ChangeSubgraph),
}
impl Change {
pub(crate) fn node(change: ChangeNode) -> Self {
Self::Node(change)
}
pub(crate) fn edge(change: ChangeEdge) -> Self {
Self::Edge(change)
}
}