cosmic/widget/
nav_bar_toggle.rs1use crate::{Element, widget};
7use derive_setters::Setters;
8
9#[derive(Setters)]
10pub struct NavBarToggle<Message> {
11 active: bool,
12 #[setters(strip_option)]
13 on_toggle: Option<Message>,
14 class: crate::theme::Button,
15 selected: bool,
16}
17
18#[must_use]
19pub const fn nav_bar_toggle<Message>() -> NavBarToggle<Message> {
20 NavBarToggle {
21 active: false,
22 on_toggle: None,
23 class: crate::theme::Button::NavToggle,
24 selected: false,
25 }
26}
27
28impl<Message: 'static + Clone> From<NavBarToggle<Message>> for Element<'_, Message> {
29 fn from(nav_bar_toggle: NavBarToggle<Message>) -> Self {
30 let icon = if nav_bar_toggle.active {
31 "navbar-open-symbolic"
32 } else {
33 "navbar-closed-symbolic"
34 };
35
36 widget::button::icon(widget::icon::from_name(icon))
37 .padding([8, 16])
38 .on_press_maybe(nav_bar_toggle.on_toggle)
39 .selected(nav_bar_toggle.selected)
40 .class(nav_bar_toggle.class)
41 .into()
42 }
43}