diff --git a/src/ui/widgets/context_popover.rs b/src/ui/widgets/context_popover.rs new file mode 100644 index 0000000..a68737b --- /dev/null +++ b/src/ui/widgets/context_popover.rs @@ -0,0 +1,79 @@ +use cosmic::widget::{Column, button, column, container, mouse_area}; +use cosmic::{Element, theme}; + +#[derive(Default, Clone, Debug)] +pub struct Context { + entries: Vec>, + modal: bool, +} + +#[derive(Default, Clone, Debug)] +pub enum Entry { + Node((String, Msg)), + Tree((String, Vec>)), + #[default] + Empty, +} + +pub enum Message { + HoverTree, +} + +pub enum Action { + RunMsg(Msg), + None, +} + +impl Context +where + Msg: Clone, +{ + pub fn new() -> Self { + Self { + entries: vec![], + modal: false, + } + } + + pub fn with_entries(entries: impl Into>>) -> Self { + Self { + entries: entries.into(), + modal: false, + } + } + + pub fn view( + content: impl Into>, + ) -> Element { + todo!() + } + + pub fn update(&mut self, message: Message) -> Action { + match message { + Message::HoverTree => todo!(), + } + Action::None + } +} + +fn widget_trees(entries: Vec>) -> Column { + let mut column = column(vec![]); + for entry in entries { + match entry { + Entry::Node((name, message)) => { + let button = button::text(name) + .on_press(message) + .class(theme::Button::MenuItem); + column.push(button); + } + Entry::Tree((name, entries)) => { + let container = + container(name).class(theme::Container::List); + let mouse_area = + mouse_area(container).on_enter(Msg::HoverTree); + } + Entry::Empty => (), + } + } + column +}