forked from iced-rs/iced
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.rs
110 lines (95 loc) · 2.97 KB
/
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
use iced::widget::{
button, center, checkbox, column, horizontal_rule, pick_list, progress_bar,
row, scrollable, slider, text, text_input, toggler, vertical_rule,
vertical_space,
};
use iced::{Center, Element, Fill, Theme};
pub fn main() -> iced::Result {
iced::application("Styling - Iced", Styling::update, Styling::view)
.theme(Styling::theme)
.run()
}
#[derive(Default)]
struct Styling {
theme: Theme,
input_value: String,
slider_value: f32,
checkbox_value: bool,
toggler_value: bool,
}
#[derive(Debug, Clone)]
enum Message {
ThemeChanged(Theme),
InputChanged(String),
ButtonPressed,
SliderChanged(f32),
CheckboxToggled(bool),
TogglerToggled(bool),
}
impl Styling {
fn update(&mut self, message: Message) {
match message {
Message::ThemeChanged(theme) => {
self.theme = theme;
}
Message::InputChanged(value) => self.input_value = value,
Message::ButtonPressed => {}
Message::SliderChanged(value) => self.slider_value = value,
Message::CheckboxToggled(value) => self.checkbox_value = value,
Message::TogglerToggled(value) => self.toggler_value = value,
}
}
fn view(&self) -> Element<Message> {
let choose_theme = column![
text("Theme:"),
pick_list(Theme::ALL, Some(&self.theme), Message::ThemeChanged)
.width(Fill),
]
.spacing(10);
let text_input = text_input("Type something...", &self.input_value)
.on_input(Message::InputChanged)
.padding(10)
.size(20);
let button = button("Submit")
.padding(10)
.on_press(Message::ButtonPressed);
let slider =
slider(0.0..=100.0, self.slider_value, Message::SliderChanged);
let progress_bar = progress_bar(0.0..=100.0, self.slider_value);
let scrollable = scrollable(column![
"Scroll me!",
vertical_space().height(800),
"You did it!"
])
.width(Fill)
.height(100);
let checkbox = checkbox("Check me!", self.checkbox_value)
.on_toggle(Message::CheckboxToggled);
let toggler = toggler(self.toggler_value)
.label("Toggle me!")
.on_toggle(Message::TogglerToggled)
.spacing(10);
let content = column![
choose_theme,
horizontal_rule(38),
row![text_input, button].spacing(10).align_y(Center),
slider,
progress_bar,
row![
scrollable,
vertical_rule(38),
column![checkbox, toggler].spacing(20)
]
.spacing(10)
.height(100)
.align_y(Center),
]
.spacing(20)
.padding(20)
.max_width(600);
center(content).into()
}
fn theme(&self) -> Theme {
self.theme.clone()
}
}