refactor: better usage of menu::Item

This commit is contained in:
Ashley Wulber 2025-02-18 12:58:37 -05:00
parent ffa67981a8
commit 1fe79b727b
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820
2 changed files with 64 additions and 97 deletions

View file

@ -275,111 +275,75 @@ impl cosmic::Application for App {
], ],
), ),
), ),
Tree::with_children(Element::from(button::text("hi 4")), { Tree::with_children(
let mut root_items = vec![menu::Tree::with_children( Element::from(button::text("hi 4")),
menu::root("hi 41 extra root"), menu::items(
menu::items(
&self.keybinds,
vec![menu::Item::Button("hi 3", None, Action::Hi)],
),
)];
let mut items = menu::items(
&self.keybinds, &self.keybinds,
vec![ 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 42", None, Action::Hi),
menu::Item::Button("hi 43", None, Action::Hi), menu::Item::Button("hi 43", None, Action::Hi),
menu::Item::Button("hi 44", None, Action::Hi), menu::Item::Button("hi 44", None, Action::Hi),
menu::Item::Button("hi 45", None, Action::Hi), menu::Item::Button("hi 45", None, Action::Hi),
menu::Item::Button("hi 46", None, Action::Hi), menu::Item::Button("hi 46", None, Action::Hi),
], ],
); ),
root_items.append(&mut items); ),
root_items
}),
]) ])
.into()] .into()]
} }
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
{ {
vec![self.core.responsive_menu_bar( vec![self.core.responsive_menu_bar(
&self.keybinds,
MENU_ID.clone(), MENU_ID.clone(),
vec![ vec![
( (
menu::root("hiiiiiiiiiiiiiiiiiii 1"), "hiiiiiiiiiiiiiiiiiii 1".into(),
menu::items( vec![menu::Item::Button("hi 1".into(), None, Action::Hi)],
&self.keybinds,
vec![menu::Item::Button("hi", None, Action::Hi)],
),
), ),
( (
menu::root("hiiiiiiiiiiiiiiiiiiiii 2"), "hiiiiiiiiiiiiiiiiiii 2".into(),
menu::items( vec![
&self.keybinds, menu::Item::Button("hi 2".into(), None, Action::Hi),
vec![ menu::Item::Button("hi 22".into(), None, Action::Hi),
menu::Item::Button("hi 21", None, Action::Hi), ],
menu::Item::Button("hi 22", None, Action::Hi),
],
),
), ),
( (
menu::root("hi 3"), "hiiiiiiiiiiiiiiiiiii 3".into(),
menu::items( vec![
&self.keybinds, menu::Item::Button("hi 3".into(), None, Action::Hi),
vec![menu::Item::Button("hi 33", 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( "hiiiiiiiiiiiiiiiiiii 4".into(),
menu_button(vec![text("hi 41 extra root").into()]) vec![
.on_press(Message::Hi), menu::Item::Button("hi 4".into(), None, Action::Hi),
vec![menu::Tree::with_children( menu::Item::Button("hi 44".into(), None, Action::Hi),
menu_button(vec![text("hi 41 extra 2").into()]) menu::Item::Button("hi 444".into(), None, Action::Hi),
.on_press(Message::Hi), menu::Item::Folder(
{ "nest 4".into(),
let mut root_items = vec![menu::Tree::with_children( vec![
menu_button(vec![text("hi 41 extra root").into()]) menu::Item::Button("hi 4".into(), None, Action::Hi),
.on_press(Message::Hi), menu::Item::Button("hi 44".into(), None, Action::Hi),
vec![menu::Tree::with_children( menu::Item::Button("hi 444".into(), None, Action::Hi),
menu_button(vec![text("hi 41 extra 2").into()]) menu::Item::Folder(
.on_press(Message::Hi), "nest 2 4".into(),
menu::items(
&self.keybinds,
vec![menu::Item::Button(
"hi 41 extra root item",
None,
Action::Hi,
)],
),
)],
)];
let mut items = menu::items(
&self.keybinds,
vec![ vec![
menu::Item::Button("hi 42", None, Action::Hi), menu::Item::Button("hi 4".into(), None, Action::Hi),
menu::Item::Button("hi 43", None, Action::Hi), menu::Item::Button("hi 44".into(), None, Action::Hi),
menu::Item::Button("hi 44", None, Action::Hi), menu::Item::Button("hi 444".into(), 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 ),
}, ],
)], ),
)];
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
}),
], ],
)] )]
} }

View file

@ -398,14 +398,18 @@ impl Core {
+ From<crate::surface_message::SurfaceMessage> + From<crate::surface_message::SurfaceMessage>
+ crate::surface_message::SurfaceMessageHandler + crate::surface_message::SurfaceMessageHandler
+ 'static, + 'static,
A: menu::Action<Message = Message>,
>( >(
&self, &self,
key_binds: &HashMap<menu::KeyBind, A>,
id: crate::widget::Id, id: crate::widget::Id,
trees: Vec<( trees: Vec<(
crate::widget::Button<'a, Message>, std::borrow::Cow<'static, str>,
Vec<impl Into<Tree<'a, Message>>>, Vec<menu::Item<A, std::borrow::Cow<'static, str>>>,
)>, )>,
) -> crate::Element<'a, Message> { ) -> crate::Element<'a, Message> {
use std::borrow::Cow;
use iced::Length; use iced::Length;
use crate::widget::id_container; use crate::widget::id_container;
@ -421,7 +425,12 @@ impl Core {
menu::bar( menu::bar(
trees trees
.into_iter() .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(), .collect(),
), ),
crate::widget::Id::new(format!("menu_bar_expanded_{id}")), crate::widget::Id::new(format!("menu_bar_expanded_{id}")),
@ -438,19 +447,13 @@ impl Core {
.padding([4, 12]) .padding([4, 12])
.class(crate::theme::Button::MenuRoot), .class(crate::theme::Button::MenuRoot),
), ),
trees menu::items(
.into_iter() &key_binds,
.map(|mt| { trees
menu::Tree::<_>::with_children( .into_iter()
mt.0.width(Length::Fill) .map(|mt| menu::Item::Folder(mt.0, mt.1))
.height(Length::Fixed(36.0)) .collect(),
.padding([4, 16]) ),
.class(crate::theme::Button::MenuItem)
.force_enabled(true),
mt.1,
)
})
.collect(),
)]), )]),
crate::widget::Id::new(format!("menu_bar_collapsed_{id}")), crate::widget::Id::new(format!("menu_bar_collapsed_{id}")),
), ),