diff --git a/src/apps.rs b/src/apps.rs index 12c35a2..ab157ed 100644 --- a/src/apps.rs +++ b/src/apps.rs @@ -1,3 +1,5 @@ +use std::thread::current; + pub struct BeoApps { pub apps: Vec>, } @@ -11,6 +13,24 @@ impl AppBase { pub fn name(&self) -> &str { &self.name } + + pub fn enter_submenu(&mut self, submenu_id: usize) { + let mut current_menu = &mut self.main_menu; + while let Some(ref mut selected_submenu) = current_menu.selected_submenu { + current_menu = selected_submenu + } + current_menu.set_submenu_id(submenu_id) + } + + pub fn exit_submenu(&mut self) { + let current_menu = &mut self.main_menu; + while let Some(ref mut selected_submenu) = current_menu.selected_submenu { + if selected_submenu.selected_submenu.is_none() { + current_menu.selected_submenu = None; + return; + } + } + } } #[derive(Debug, Clone)] diff --git a/src/ui.rs b/src/ui.rs index 5960380..9b1e9a1 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -126,9 +126,7 @@ impl BeoUi { self.current_app_mut() .unwrap() .base_mut() - .main_menu - .get_deepest_selected_submenu_mut() - .set_submenu_id(submenu_id); + .enter_submenu(submenu_id); self.angle_shift = 0.0; } None => { @@ -137,6 +135,8 @@ impl BeoUi { } } Beo5Event::RightButtonPressed => { + // That means that we get out of a submenu + self.current_app_mut().unwrap().base_mut().exit_submenu(); println!("Right button pressed"); } Beo5Event::SelectionWheelRel(rel_angle_eps) => {