use azul_core::dom::{DomNodeId, OptionDomNodeId};
use azul_core::drag::{ActiveDragType, DragContext};
use azul_css::{impl_option, impl_option_inner, OptionString};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(C)]
pub enum DragType {
Node,
File,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[repr(C)]
pub struct DragState {
pub drag_type: DragType,
pub source_node: OptionDomNodeId,
pub current_drop_target: OptionDomNodeId,
pub file_path: OptionString,
}
impl DragState {
#[must_use] pub fn from_context(ctx: &DragContext) -> Option<Self> {
match &ctx.drag_type {
ActiveDragType::Node(node_drag) => Some(Self {
drag_type: DragType::Node,
source_node: OptionDomNodeId::Some(DomNodeId {
dom: node_drag.dom_id,
node: azul_core::styled_dom::NodeHierarchyItemId::from_crate_internal(Some(node_drag.node_id)),
}),
current_drop_target: node_drag.current_drop_target,
file_path: OptionString::None,
}),
ActiveDragType::FileDrop(file_drop) => Some(Self {
drag_type: DragType::File,
source_node: OptionDomNodeId::None,
current_drop_target: file_drop.drop_target,
file_path: file_drop.files.as_ref().first().cloned().into(),
}),
_ => None, }
}
}
impl_option!(
DragState,
OptionDragState,
copy = false,
[Debug, Clone, PartialEq, Eq]
);