flow_rs_core/selection/
visual_feedback.rs

1//! Visual feedback state management for nodes
2
3/// Visual feedback state for nodes
4#[derive(Debug, Clone, PartialEq, Default)]
5pub struct VisualFeedback {
6    /// Node is currently selected
7    selected: bool,
8    /// Node is currently hovered
9    hovered: bool,
10    /// Node is highlighted (e.g., during connection)
11    highlighted: bool,
12    /// Animation state for transitions
13    animation_progress: f64,
14}
15
16impl VisualFeedback {
17    /// Create new visual feedback with default state
18    pub fn new() -> Self {
19        Self::default()
20    }
21
22    /// Create visual feedback with selection state
23    pub fn selected() -> Self {
24        Self {
25            selected: true,
26            ..Default::default()
27        }
28    }
29
30    /// Check if node is selected
31    pub fn is_selected(&self) -> bool {
32        self.selected
33    }
34
35    /// Check if node is hovered
36    pub fn is_hovered(&self) -> bool {
37        self.hovered
38    }
39
40    /// Check if node is highlighted
41    pub fn is_highlighted(&self) -> bool {
42        self.highlighted
43    }
44
45    /// Get animation progress (0.0 to 1.0)
46    pub fn animation_progress(&self) -> f64 {
47        self.animation_progress
48    }
49
50    /// Set selection state
51    pub fn set_selected(&mut self, selected: bool) {
52        self.selected = selected;
53    }
54
55    /// Set hover state
56    pub fn set_hovered(&mut self, hovered: bool) {
57        self.hovered = hovered;
58    }
59
60    /// Set highlight state
61    pub fn set_highlighted(&mut self, highlighted: bool) {
62        self.highlighted = highlighted;
63    }
64
65    /// Set animation progress
66    pub fn set_animation_progress(&mut self, progress: f64) {
67        self.animation_progress = progress.clamp(0.0, 1.0);
68    }
69
70    /// Check if any visual state is active
71    pub fn has_any_state(&self) -> bool {
72        self.selected || self.hovered || self.highlighted
73    }
74}