mod new_navigation; mod update_navigation; mod view_navigation; mod view_navigation_button; use new_navigation::new_navigation; use update_navigation::update_navigation; use view_navigation::view_navigation; use view_navigation_button::view_navigation_button; use std::fmt::Debug; use iced::Element; use crate::traits::{Component, Viewable}; #[derive(Clone, Debug)] pub struct Navigation { options_before_active: Vec, active_option: Option, options_after_active: Vec, } #[derive(Clone, Debug)] pub enum Message { SelectNext, SelectOption(TOption), SelectPrev, SetOptions(Vec), } pub enum Action { SelectOption(TOption), None, } impl Navigation { pub fn new(active_option: Option, options: Vec) -> Self { new_navigation(active_option, options) } } impl<'a, TOption> Navigation where TOption: Clone + PartialEq + Into>>, { pub fn button(&'a self, option: &'a TOption) -> Element<'a, Message> { view_navigation_button(self, option) } } impl<'a, TOption> Viewable<'a, Message> for Navigation where TOption: Clone + PartialEq + Into>>, { fn view(&'a self) -> iced::Element<'a, Message> { view_navigation(self) } } impl<'a, TOption> Component<'a, Message, Action> for Navigation where TOption: Clone + PartialEq + Into>>, { fn update(&mut self, message: Message) -> Action { update_navigation(self, message) } }