use freya_core::{
integration::ScopeId,
prelude::*,
};
use torin::prelude::CursorPoint;
use crate::menu::Menu;
#[derive(Clone, Copy, PartialEq)]
pub struct ContextMenu {
pub(crate) location: State<CursorPoint>,
pub(crate) menu: State<Option<(CursorPoint, Menu)>>,
}
impl ContextMenu {
pub fn get() -> Self {
match try_consume_root_context() {
Some(rt) => rt,
None => {
let context_menu_state = ContextMenu {
location: State::create_in_scope(CursorPoint::default(), ScopeId::ROOT),
menu: State::create_in_scope(None, ScopeId::ROOT),
};
provide_context_for_scope_id(context_menu_state, ScopeId::ROOT);
context_menu_state
}
}
}
pub fn is_open() -> bool {
Self::get().menu.read().is_some()
}
pub fn open(menu: Menu) {
let mut this = Self::get();
this.menu.set(Some(((this.location)(), menu)));
}
pub fn close() {
Self::get().menu.set(None);
}
}