1
//! **File** drag & drop management
2
//!
3
//! Manages hovered files (drag-and-drop).
4

            
5
use azul_css::AzString;
6

            
7
/// Manager for file drop state and hovered file tracking
8
#[derive(Debug, Clone, PartialEq)]
9
pub 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

            
16
impl Default for FileDropManager {
17
    fn default() -> Self {
18
        Self::new()
19
    }
20
}
21

            
22
impl FileDropManager {
23
    /// Create a new file drop manager
24
2332
    pub fn new() -> Self {
25
2332
        Self {
26
2332
            hovered_file: None,
27
2332
            dropped_file: None,
28
2332
        }
29
2332
    }
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
11
    pub fn get_hovered_file(&self) -> Option<&AzString> {
38
11
        self.hovered_file.as_ref()
39
11
    }
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
}