1
2struct Gallery {
3 docking_state: pierro::DockingState<GalleryTab>
4}
5
6struct Basic {
7 text_edit_text: String,
8 checkbox_state: bool,
9 dropdown_state: String
10}
11
12impl Basic {
13
14 fn new() -> Self {
15 Self {
16 text_edit_text: "A text edit box".to_owned(),
17 checkbox_state: true,
18 dropdown_state: "Option A".to_owned()
19 }
20 }
21
22 fn ui(&mut self, ui: &mut pierro::UI) {
23 pierro::scroll_area(ui, |ui| {
24 pierro::margin(ui, |ui| {
25 pierro::label(ui, "A label");
26 pierro::v_spacing(ui, 10.0);
27
28 pierro::button(ui, "A button");
29 pierro::v_spacing(ui, 10.0);
30
31 pierro::text_edit(ui, &mut self.text_edit_text);
32 pierro::v_spacing(ui, 10.0);
33
34 pierro::checkbox_labeled(ui, "A checkbox", &mut self.checkbox_state);
35 pierro::v_spacing(ui, 10.0);
36
37 let context_menu_response = pierro::label(ui, "Context menu (right click me!)");
38 pierro::context_menu(ui, &context_menu_response, |ui| {
39 pierro::label(ui, "Inside the context menu");
40 });
41 pierro::v_spacing(ui, 10.0);
42
43 pierro::collapsing_header(ui, "A collapsing header", |ui| {
44 for i in 0..50 {
45 pierro::label(ui, i.to_string());
46 }
47 });
48 pierro::v_spacing(ui, 10.0);
49
50 pierro::dropdown(ui, self.dropdown_state.clone(), |ui| {
51 for option in ["Option A", "Option B", "Option C"] {
52 if pierro::menu_button(ui, option).mouse_clicked() {
53 self.dropdown_state = option.to_owned();
54 }
55 }
56 });
57
58 });
59 });
60 }
61
62}
63
64struct Layout {
65 axis: pierro::Axis,
66 justify: pierro::Justify,
67 align: pierro::Align
68}
69
70impl Layout {
71
72 fn new() -> Self {
73 Self {
74 axis: pierro::Axis::X,
75 justify: pierro::Justify::Center,
76 align: pierro::Align::Center
77 }
78 }
79
80 fn node(&self, ui: &mut pierro::UI, color: pierro::Color) {
81 ui.node(
82 pierro::UINodeParams::new(pierro::Size::px(100.0), pierro::Size::px(100.0))
83 .with_fill(color)
84 );
85 }
86
87 fn ui(&mut self, ui: &mut pierro::UI) {
88
89 pierro::margin(ui, |ui| {
90 pierro::dropdown_labeled(ui, "Axis: ", match self.axis {
91 pierro::Axis::X => "X",
92 pierro::Axis::Y => "Y",
93 }, |ui| {
94 if pierro::menu_button(ui, "X").mouse_clicked() {
95 self.axis = pierro::Axis::X;
96 }
97 if pierro::menu_button(ui, "Y").mouse_clicked() {
98 self.axis = pierro::Axis::Y;
99 }
100 });
101 pierro::v_spacing(ui, 5.0);
102
103 pierro::dropdown_labeled(ui, "Justify: ", match self.justify {
104 pierro::Justify::Min => "Min",
105 pierro::Justify::Center => "Center",
106 pierro::Justify::Max => "Max",
107 }, |ui| {
108 if pierro::menu_button(ui, "Min").mouse_clicked() {
109 self.justify = pierro::Justify::Min;
110 }
111 if pierro::menu_button(ui, "Center").mouse_clicked() {
112 self.justify = pierro::Justify::Center;
113 }
114 if pierro::menu_button(ui, "Max").mouse_clicked() {
115 self.justify = pierro::Justify::Max;
116 }
117 });
118 pierro::v_spacing(ui, 5.0);
119
120 pierro::dropdown_labeled(ui, "Align: ", match self.align {
121 pierro::Align::Min => "Min",
122 pierro::Align::Center => "Center",
123 pierro::Align::Max => "Max",
124 }, |ui| {
125 if pierro::menu_button(ui, "Min").mouse_clicked() {
126 self.align = pierro::Align::Min;
127 }
128 if pierro::menu_button(ui, "Center").mouse_clicked() {
129 self.align = pierro::Align::Center;
130 }
131 if pierro::menu_button(ui, "Max").mouse_clicked() {
132 self.align = pierro::Align::Max;
133 }
134 });
135 });
136
137 pierro::h_divider(ui);
138 pierro::container(ui,
139 pierro::Size::fr(1.0),
140 pierro::Size::fr(1.0),
141 pierro::Layout::new(self.axis).with_justify(self.justify).with_align(self.align),
142 |ui| {
143 self.node(ui, pierro::Color::RED);
144 self.node(ui, pierro::Color::GREEN);
145 self.node(ui, pierro::Color::BLUE);
146 });
147 }
148
149}
150
151enum GalleryTab {
152 Basic(Basic),
153 Layout(Layout)
154}
155
156impl pierro::DockingTab for GalleryTab {
157
158 type Context = ();
159
160 fn title(&self) -> String {
161 match self {
162 GalleryTab::Basic(..) => "Basic Widgets".to_owned(),
163 GalleryTab::Layout(..) => "Layout".to_owned()
164 }
165 }
166
167 fn render(&mut self, ui: &mut pierro::UI, _context: &mut ()) {
168 match self {
169 GalleryTab::Basic(basic) => basic.ui(ui),
170 GalleryTab::Layout(layout) => layout.ui(ui)
171 }
172 }
173
174 fn add_tab_dropdown<F: FnMut(Self)>(ui: &mut pierro::UI, mut add_tab: F, _context: &mut ()) {
175 if pierro::menu_button(ui, "Basic Widgets").mouse_clicked() {
176 add_tab(Self::Basic(Basic::new()));
177 }
178 if pierro::menu_button(ui, "Layout").mouse_clicked() {
179 add_tab(Self::Layout(Layout::new()));
180 }
181 }
182
183}
184
185impl pierro::App for Gallery {
186
187 fn window_config() -> pierro::WindowConfig {
188 pierro::WindowConfig::default()
189 .with_title("Pierro Widget Gallery")
190 }
191
192 fn tick(&mut self, ui: &mut pierro::UI) {
193 pierro::menu_bar(ui, |ui| {
194 pierro::menu_bar_item(ui, "Menubar", |ui| {
195 pierro::menu_button(ui, "Button A");
196 pierro::menu_button(ui, "Button B");
197 pierro::menu_button(ui, "Button C");
198 pierro::menu_category(ui, "Category", |ui| {
199 pierro::menu_button(ui, "Button X");
200 pierro::menu_button(ui, "Button Y");
201 });
202 });
203 });
204 self.docking_state.render(ui, &mut ());
205 }
206
207}
208
209fn main() {
210 pierro::run(Gallery {
211 docking_state: pierro::DockingState::new(vec![
212 GalleryTab::Basic(Basic::new())
213 ])
214 });
215}