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, &self.keybinds,
vec![
menu::Item::Folder(
"hi 41 extra root",
vec![menu::Item::Button("hi 3", None, Action::Hi)], vec![menu::Item::Button("hi 3", None, Action::Hi)],
), ),
)];
let mut items = menu::items(
&self.keybinds,
vec![
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(
&self.keybinds,
vec![ vec![
menu::Item::Button("hi 21", None, Action::Hi), menu::Item::Button("hi 2".into(), None, Action::Hi),
menu::Item::Button("hi 22", None, Action::Hi), menu::Item::Button("hi 22".into(), None, Action::Hi),
], ],
), ),
),
( (
menu::root("hi 3"), "hiiiiiiiiiiiiiiiiiii 3".into(),
menu::items(
&self.keybinds,
vec![menu::Item::Button("hi 33", 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,
vec![ vec![
menu::Item::Button("hi 42", None, Action::Hi), menu::Item::Button("hi 3".into(), None, Action::Hi),
menu::Item::Button("hi 43", None, Action::Hi), menu::Item::Button("hi 33".into(), None, Action::Hi),
menu::Item::Button("hi 44", None, Action::Hi), menu::Item::Button("hi 333".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 "hiiiiiiiiiiiiiiiiiii 4".into(),
},
)],
)];
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::Folder(
menu::Item::Button("hi 46", None, Action::Hi), "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 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 ),
}), ],
),
], ],
)] )]
} }

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),
), ),
menu::items(
&key_binds,
trees trees
.into_iter() .into_iter()
.map(|mt| { .map(|mt| menu::Item::Folder(mt.0, mt.1))
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(), .collect(),
),
)]), )]),
crate::widget::Id::new(format!("menu_bar_collapsed_{id}")), crate::widget::Id::new(format!("menu_bar_collapsed_{id}")),
), ),