Skip to content

Commit e173b69

Browse files
add no sidebar example
1 parent 286266b commit e173b69

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

examples/tabs_noshow.rs

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
use iced::{
2+
Element, Length, Task,
3+
widget::{button, column, container, stack, text},
4+
};
5+
use iced_aw::{
6+
sidebar::{SidebarPosition, TabLabel},
7+
widget::SidebarWithContent,
8+
};
9+
use std::fmt;
10+
11+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
12+
enum TabId {
13+
#[default]
14+
One,
15+
Two,
16+
}
17+
18+
impl TabId {
19+
const ALL: [Self; 2] = [Self::One, Self::Two];
20+
}
21+
22+
impl fmt::Display for TabId {
23+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24+
match self {
25+
Self::One => f.write_str("One"),
26+
Self::Two => f.write_str("Two"),
27+
}
28+
}
29+
}
30+
31+
#[derive(Debug, Clone)]
32+
enum Message {
33+
ToggleError,
34+
TabSelected(TabId),
35+
}
36+
37+
#[derive(Default)]
38+
struct App {
39+
active_tab: TabId,
40+
show_error: bool,
41+
}
42+
43+
impl App {
44+
fn update(&mut self, message: Message) -> Task<Message> {
45+
match message {
46+
Message::ToggleError => {
47+
self.show_error = !self.show_error;
48+
}
49+
Message::TabSelected(tab) => {
50+
self.active_tab = tab;
51+
}
52+
}
53+
Task::none()
54+
}
55+
56+
fn view(&self) -> Element<'_, Message> {
57+
let mut sidebar = SidebarWithContent::new(Message::TabSelected);
58+
for tab in TabId::ALL {
59+
let label = TabLabel::Text(tab.to_string());
60+
let view: Element<'_, Message> = column![
61+
text(format!("Tab: {tab}")),
62+
button("Toggle Error").on_press(Message::ToggleError)
63+
]
64+
.spacing(10)
65+
.padding(10)
66+
.into();
67+
sidebar = sidebar.push(tab, label, view);
68+
}
69+
70+
let content: Element<'_, Message> = sidebar
71+
.set_active_tab(&self.active_tab)
72+
.sidebar_position(SidebarPosition::Start)
73+
.into();
74+
75+
if self.show_error {
76+
let overlay = container(text("Error"))
77+
.width(Length::Fill)
78+
.height(Length::Fill)
79+
.center_x(Length::Fill)
80+
.center_y(Length::Fill);
81+
stack![content, overlay].into()
82+
} else {
83+
// This change in root widget type causes a panic in iced_aw::SidebarWithContent
84+
content
85+
}
86+
}
87+
}
88+
89+
fn main() -> iced::Result {
90+
iced::application(App::default, App::update, App::view).run()
91+
}

0 commit comments

Comments
 (0)