Skip to main content

azul_layout/managers/
file_drop.rs

1//! **File** drag & drop management
2//!
3//! Manages hovered files (drag-and-drop).
4
5use azul_css::AzString;
6
7/// Manager for cursor state and hovered file tracking
8#[derive(Debug, Clone, PartialEq)]
9pub struct FileDropManager {
10    /// File being hovered during drag-and-drop operation
11    pub hovered_file: Option<AzString>,
12    /// File that was dropped (cleared after one frame)
13    pub dropped_file: Option<AzString>,
14}
15
16impl Default for FileDropManager {
17    fn default() -> Self {
18        Self::new()
19    }
20}
21
22impl FileDropManager {
23    /// Create a new cursor manager
24    pub fn new() -> Self {
25        Self {
26            hovered_file: None,
27            dropped_file: None,
28        }
29    }
30
31    /// Set the currently hovered file during drag operation
32    pub fn set_hovered_file(&mut self, file: Option<AzString>) {
33        self.hovered_file = file;
34    }
35
36    /// Get the currently hovered file
37    pub fn get_hovered_file(&self) -> Option<&AzString> {
38        self.hovered_file.as_ref()
39    }
40
41    /// Set the dropped file (should be cleared after one frame)
42    pub fn set_dropped_file(&mut self, file: Option<AzString>) {
43        self.dropped_file = file;
44    }
45
46    /// Get and clear the dropped file (one-shot event)
47    pub fn take_dropped_file(&mut self) -> Option<AzString> {
48        self.dropped_file.take()
49    }
50
51    /// Clear all state
52    pub fn clear(&mut self) {
53        self.hovered_file = None;
54        self.dropped_file = None;
55    }
56}