From cd25d9c69ca85bc046576b39d7b56419a7b480d0 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 18 Feb 2025 12:58:37 -0500 Subject: [PATCH] refactor: better usage of menu::Item --- examples/application/src/main.rs | 126 +++++++++++-------------------- src/app/core.rs | 35 +++++---- 2 files changed, 64 insertions(+), 97 deletions(-) diff --git a/examples/application/src/main.rs b/examples/application/src/main.rs index de94b98052c..f101a295f67 100644 --- a/examples/application/src/main.rs +++ b/examples/application/src/main.rs @@ -275,111 +275,75 @@ impl cosmic::Application for App { ], ), ), - Tree::with_children(Element::from(button::text("hi 4")), { - let mut root_items = vec![menu::Tree::with_children( - menu::root("hi 41 extra root"), - menu::items( - &self.keybinds, - vec![menu::Item::Button("hi 3", None, Action::Hi)], - ), - )]; - let mut items = menu::items( + Tree::with_children( + Element::from(button::text("hi 4")), + menu::items( &self.keybinds, vec![ + menu::Item::Folder( + "hi 41 extra root", + vec![menu::Item::Button("hi 3", None, Action::Hi)], + ), menu::Item::Button("hi 42", None, Action::Hi), menu::Item::Button("hi 43", None, Action::Hi), menu::Item::Button("hi 44", None, Action::Hi), menu::Item::Button("hi 45", None, Action::Hi), menu::Item::Button("hi 46", None, Action::Hi), ], - ); - root_items.append(&mut items); - root_items - }), + ), + ), ]) .into()] } #[cfg(feature = "wayland")] { vec![self.core.responsive_menu_bar( + &self.keybinds, MENU_ID.clone(), vec![ ( - menu::root("hiiiiiiiiiiiiiiiiiii 1"), - menu::items( - &self.keybinds, - vec![menu::Item::Button("hi", None, Action::Hi)], - ), + "hiiiiiiiiiiiiiiiiiii 1".into(), + vec![menu::Item::Button("hi 1".into(), None, Action::Hi)], ), ( - menu::root("hiiiiiiiiiiiiiiiiiiiii 2"), - menu::items( - &self.keybinds, - vec![ - menu::Item::Button("hi 21", None, Action::Hi), - menu::Item::Button("hi 22", None, Action::Hi), - ], - ), + "hiiiiiiiiiiiiiiiiiii 2".into(), + vec![ + menu::Item::Button("hi 2".into(), None, Action::Hi), + menu::Item::Button("hi 22".into(), None, Action::Hi), + ], ), ( - menu::root("hi 3"), - menu::items( - &self.keybinds, - vec![menu::Item::Button("hi 33", None, Action::Hi)], - ), + "hiiiiiiiiiiiiiiiiiii 3".into(), + vec![ + menu::Item::Button("hi 3".into(), None, Action::Hi), + menu::Item::Button("hi 33".into(), None, Action::Hi), + menu::Item::Button("hi 333".into(), None, Action::Hi), + ], ), - (menu::root("hi 4"), { - let mut root_items = vec![menu::Tree::with_children( - menu_button(vec![text("hi 41 extra root").into()]) - .on_press(Message::Hi), - vec![menu::Tree::with_children( - menu_button(vec![text("hi 41 extra 2").into()]) - .on_press(Message::Hi), - { - let mut root_items = vec![menu::Tree::with_children( - menu_button(vec![text("hi 41 extra root").into()]) - .on_press(Message::Hi), - vec![menu::Tree::with_children( - menu_button(vec![text("hi 41 extra 2").into()]) - .on_press(Message::Hi), - menu::items( - &self.keybinds, - vec![menu::Item::Button( - "hi 41 extra root item", - None, - Action::Hi, - )], - ), - )], - )]; - let mut items = menu::items( - &self.keybinds, + ( + "hiiiiiiiiiiiiiiiiiii 4".into(), + vec![ + menu::Item::Button("hi 4".into(), None, Action::Hi), + menu::Item::Button("hi 44".into(), None, Action::Hi), + menu::Item::Button("hi 444".into(), None, Action::Hi), + menu::Item::Folder( + "nest 4".into(), + vec![ + menu::Item::Button("hi 4".into(), None, Action::Hi), + menu::Item::Button("hi 44".into(), None, Action::Hi), + menu::Item::Button("hi 444".into(), None, Action::Hi), + menu::Item::Folder( + "nest 2 4".into(), vec![ - menu::Item::Button("hi 42", None, Action::Hi), - menu::Item::Button("hi 43", None, Action::Hi), - menu::Item::Button("hi 44", None, Action::Hi), - menu::Item::Button("hi 45", None, Action::Hi), - menu::Item::Button("hi 46", None, Action::Hi), + menu::Item::Button("hi 4".into(), None, Action::Hi), + menu::Item::Button("hi 44".into(), None, Action::Hi), + menu::Item::Button("hi 444".into(), None, Action::Hi), ], - ); - root_items.append(&mut items); - root_items - }, - )], - )]; - let mut items = menu::items( - &self.keybinds, - vec![ - menu::Item::Button("hi 42", None, Action::Hi), - menu::Item::Button("hi 43", None, Action::Hi), - menu::Item::Button("hi 44", None, Action::Hi), - menu::Item::Button("hi 45", None, Action::Hi), - menu::Item::Button("hi 46", None, Action::Hi), - ], - ); - root_items.append(&mut items); - root_items - }), + ), + ], + ), + ], + ), ], )] } diff --git a/src/app/core.rs b/src/app/core.rs index ede0efc12eb..33b92a73dfb 100644 --- a/src/app/core.rs +++ b/src/app/core.rs @@ -398,14 +398,18 @@ impl Core { + From + crate::surface_message::SurfaceMessageHandler + 'static, + A: menu::Action, >( &self, + key_binds: &HashMap, id: crate::widget::Id, trees: Vec<( - crate::widget::Button<'a, Message>, - Vec>>, + std::borrow::Cow<'static, str>, + Vec>>, )>, ) -> crate::Element<'a, Message> { + use std::borrow::Cow; + use iced::Length; use crate::widget::id_container; @@ -421,7 +425,12 @@ impl Core { menu::bar( trees .into_iter() - .map(|mt| menu::Tree::<_>::with_children(mt.0, mt.1)) + .map(|mt| { + menu::Tree::<_>::with_children( + menu::root(mt.0), + menu::items(&key_binds, mt.1), + ) + }) .collect(), ), crate::widget::Id::new(format!("menu_bar_expanded_{id}")), @@ -438,19 +447,13 @@ impl Core { .padding([4, 12]) .class(crate::theme::Button::MenuRoot), ), - trees - .into_iter() - .map(|mt| { - menu::Tree::<_>::with_children( - mt.0.width(Length::Fill) - .height(Length::Fixed(36.0)) - .padding([4, 16]) - .class(crate::theme::Button::MenuItem) - .force_enabled(true), - mt.1, - ) - }) - .collect(), + menu::items( + &key_binds, + trees + .into_iter() + .map(|mt| menu::Item::Folder(mt.0, mt.1)) + .collect(), + ), )]), crate::widget::Id::new(format!("menu_bar_collapsed_{id}")), ),