pub struct Menu {
pub rect: Cell<Rect>,
/* private fields */
}
Fields§
§rect: Cell<Rect>
Implementations§
Source§impl Menu
impl Menu
Sourcepub fn new<S: Into<String>>(name: S) -> Arc<Self>
pub fn new<S: Into<String>>(name: S) -> Arc<Self>
Examples found in repository?
examples/widget_tree.rs (line 15)
9fn main() {
10 let mut window = Window::new(Rect::new(100, 100, 420, 768), "OrbTK");
11
12 let stack_layout = StackLayout::new(Orientation::Vertical);
13 stack_layout.position(10, 0).size(400, 768).spacing(10);
14
15 let menu = Menu::new("Menu");
16 menu.size(32, 16);
17 stack_layout.add(menu.clone());
18
19 let label = Label::new();
20 label.size(400, 16).text("Test Label");
21 stack_layout.add(label);
22
23 let horizontal_stack_layout = StackLayout::new(Orientation::Horizontal);
24 horizontal_stack_layout.size(400, 28).spacing(10);
25 stack_layout.add(horizontal_stack_layout.clone());
26
27 let text_box = TextBox::new();
28 text_box.size(332, 28).text_offset(6, 6);
29 horizontal_stack_layout.add(text_box.clone());
30
31 let button = Button::new();
32 button
33 .text("Update")
34 .on_click(move |_button: &Button, _point: Point| {
35 text_box.emit_enter();
36 });
37 horizontal_stack_layout.add(button);
38
39 let progress_label = Label::new();
40 progress_label.text("Progress: 0%");
41 stack_layout.add(progress_label.clone());
42
43 let progress_bar = ProgressBar::new();
44 progress_bar.size(400, 16).value(50).on_click(
45 move |progress_bar: &ProgressBar, point: Point| {
46 let progress = point.x * 100 / progress_bar.rect.get().width as i32;
47 progress_label.text.set(format!("Progress: {}%", progress));
48 progress_bar.value.set(progress);
49 },
50 );
51 stack_layout.add(progress_bar);
52
53 let combo_box = ComboBox::new();
54 stack_layout.add(combo_box.clone());
55
56 for i in 1..11 {
57 combo_box.push(&format!("Entry {}", i));
58 }
59
60 let multi_line_label = Label::new();
61 multi_line_label.text("Multi-Line Text").size(400, 16);
62 stack_layout.add(multi_line_label);
63
64 let multi_line_text_box = TextBox::new();
65 multi_line_text_box.size(400, 130).text_offset(1, 1);
66 stack_layout.add(multi_line_text_box);
67
68 let offset_label = Label::new();
69 offset_label
70 .size(400, 120)
71 .text("Test Offset")
72 .text_offset(50, 50)
73 .on_click(|label: &Label, _point: Point| {
74 label.text("Clicked");
75 });
76 stack_layout.add(offset_label.clone());
77
78 match Image::from_path("res/icon_small.png") {
79 Ok(image) => {
80 stack_layout.add(image.clone());
81 }
82 Err(err) => {
83 let label = Label::new();
84 label.size(400, 16).text(err);
85 stack_layout.add(label.clone());
86 }
87 }
88
89 {
90 let action = Action::new("Label One");
91 let offset_label_clone = offset_label.clone();
92 action.on_click(move |_action: &Action, _point: Point| {
93 offset_label_clone.text.set("One".to_owned());
94 });
95 menu.add(&action);
96 }
97
98 {
99 let action = Action::new("Label Two");
100 let offset_label_clone = offset_label.clone();
101 action.on_click(move |_action: &Action, _point: Point| {
102 offset_label_clone.text.set("Two".to_owned());
103 });
104 menu.add(&action);
105 }
106
107 menu.add(&Separator::new());
108
109 {
110 let action = Action::new("Reset Label");
111 let offset_label_clone = offset_label.clone();
112 action.on_click(move |_action: &Action, _point: Point| {
113 offset_label_clone.text.set("Text Offset".to_owned());
114 });
115 menu.add(&action);
116 }
117
118 let grid = Grid::new();
119 grid.spacing(8, 8);
120
121 let label = Label::new();
122 label.size(32, 16).text("Grid");
123 grid.insert(0, 0, &label);
124
125 let label = Label::new();
126 label.size(32, 16).text("Test");
127 grid.insert(1, 0, &label);
128
129 let label = Label::new();
130 label.size(32, 16).text("With");
131 grid.insert(2, 0, &label);
132
133 let label = Label::new();
134 label.size(48, 16).text("Resize");
135 grid.insert(3, 0, &label);
136
137 let mut i = 0;
138 for row in 1..6 {
139 for col in 0..5 {
140 let cell = TextBox::new();
141 let text = format!("{}: {}, {}", i, col, row);
142 cell.size(text.len() as u32 * 8 + 2, 18)
143 .text(text)
144 .text_offset(1, 1);
145 grid.insert(col, row, &cell);
146 i += 1;
147 }
148 }
149
150 stack_layout.add(grid.clone());
151 grid.arrange(true);
152
153 window.add(&stack_layout);
154
155 window.exec();
156}
More examples
examples/widgets.rs (line 12)
6fn main() {
7 let mut window = Window::new(Rect::new(100, 100, 420, 768), "OrbTK");
8
9 let x = 10;
10 let mut y = 0;
11
12 let menu = Menu::new("Menu");
13 menu.position(x, y)
14 .size(32, 16);
15
16 y += menu.rect.get().height as i32 + 10;
17
18 let label = Label::new();
19 label.position(x, y)
20 .size(400, 16)
21 .text("Test Label");
22 window.add(&label);
23
24 y += label.rect.get().height as i32 + 10;
25
26 let text_box = TextBox::new();
27 text_box.position(x, y)
28 .size(332, 28)
29 .text_offset(6, 6);
30 window.add(&text_box);
31
32 let button = Button::new();
33 button.position(x + text_box.rect.get().width as i32 + 8, y)
34 .size(48 + 12, text_box.rect.get().height)
35 .text("Update")
36 .text_offset(6, 6)
37 .on_click(move |_button: &Button, _point: Point| {
38 text_box.emit_enter();
39 });
40 window.add(&button);
41
42 y += button.rect.get().height as i32 + 10;
43
44 let progress_label = Label::new();
45 progress_label.text("Progress: 0%").position(x, y);
46 window.add(&progress_label);
47
48 y += progress_label.rect.get().height as i32 + 10;
49
50 let progress_bar = ProgressBar::new();
51 progress_bar.position(x, y)
52 .size(400, 16)
53 .value(100)
54 .on_click(move |progress_bar: &ProgressBar, point: Point| {
55 let progress = point.x * 100 / progress_bar.rect.get().width as i32;
56 progress_label.text.set(format!("Progress: {}%", progress));
57 progress_bar.value.set(progress);
58 });
59 window.add(&progress_bar);
60
61 y += progress_bar.rect.get().height as i32 + 10;
62
63 let combo_box = ComboBox::new();
64 combo_box.position(x, y);
65
66 for i in 1..11 {
67 combo_box.push(&format!("Entry {}", i));
68 }
69
70 y += combo_box.rect.get().height as i32 + 10;
71
72 let multi_line_label = Label::new();
73 multi_line_label.text("Multi-Line Text")
74 .position(x, y)
75 .size(400, 16);
76 window.add(&multi_line_label);
77
78 y += multi_line_label.rect.get().height as i32 + 10;
79
80 let multi_line_text_box = TextBox::new();
81 multi_line_text_box.position(x, y)
82 .size(400, 130)
83 .text_offset(1, 1);
84 window.add(&multi_line_text_box);
85
86 y += multi_line_text_box.rect.get().height as i32 + 10;
87
88 let offset_label = Label::new();
89 offset_label.position(x, y)
90 .size(400, 120)
91 .text("Test Offset")
92 .text_offset(50, 50)
93 .on_click(|label: &Label, _point: Point| {
94 label.text("Clicked");
95 });
96 window.add(&offset_label);
97
98 y += offset_label.rect.get().height as i32 + 10;
99
100 match Image::from_path("res/icon_small.png") {
101 Ok(image) => {
102 image.position(x, y);
103 window.add(&image);
104
105 y += image.rect.get().height as i32 + 10;
106 },
107 Err(err) => {
108 let label = Label::new();
109 label.position(x, y)
110 .size(400, 16)
111 .text(err);
112 window.add(&label);
113
114 y += label.rect.get().height as i32 + 10;
115 }
116 }
117
118 {
119 let action = Action::new("Label One");
120 let offset_label_clone = offset_label.clone();
121 action.on_click(move |_action: &Action, _point: Point| {
122 offset_label_clone.text.set("One".to_owned());
123 });
124 menu.add(&action);
125 }
126
127 {
128 let action = Action::new("Label Two");
129 let offset_label_clone = offset_label.clone();
130 action.on_click(move |_action: &Action, _point: Point| {
131 offset_label_clone.text.set("Two".to_owned());
132 });
133 menu.add(&action);
134 }
135
136 menu.add(&Separator::new());
137
138 {
139 let action = Action::new("Reset Label");
140 let offset_label_clone = offset_label.clone();
141 action.on_click(move |_action: &Action, _point: Point| {
142 offset_label_clone.text.set("Text Offset".to_owned());
143 });
144 menu.add(&action);
145 }
146
147 let grid = Grid::new();
148 grid.position(x, y)
149 .spacing(8, 8);
150
151 let label = Label::new();
152 label.size(32, 16).text("Grid");
153 grid.insert(0, 0, &label);
154
155 let label = Label::new();
156 label.size(32, 16).text("Test");
157 grid.insert(1, 0, &label);
158
159 let label = Label::new();
160 label.size(32, 16).text("With");
161 grid.insert(2, 0, &label);
162
163 let label = Label::new();
164 label.size(48, 16).text("Resize");
165 grid.insert(3, 0, &label);
166
167 let mut i = 0;
168 for row in 1..6 {
169 for col in 0..5 {
170 let cell = TextBox::new();
171 let text = format!("{}: {}, {}", i, col, row);
172 cell.size(text.len() as u32 * 8 + 2, 18).text(text).text_offset(1, 1);
173 grid.insert(col, row, &cell);
174 i += 1;
175 }
176 }
177 grid.arrange(true);
178
179 window.add(&grid);
180
181 window.add(&combo_box);
182 // Add this last to put it on top
183 window.add(&menu);
184
185 window.exec();
186}
examples/themed.rs (line 15)
6fn main() {
7 let theme = Theme::from_path("examples/exampletheme.css").unwrap();
8 let mut window_builder = WindowBuilder::new(Rect::new(100, 100, 420, 730), "Orbtk - Themed");
9 window_builder = window_builder.theme(theme);
10 let mut window = window_builder.build();
11
12 let x = 10;
13 let mut y = 0;
14
15 let menu = Menu::new("Menu");
16 menu.position(x, y)
17 .size(32, 16);
18
19 y += menu.rect.get().height as i32 + 10;
20
21 let label = Label::new();
22 label.position(x, y)
23 .size(400, 16)
24 .text("Test Label");
25 window.add(&label);
26
27 y += label.rect.get().height as i32 + 10;
28
29 let text_box = TextBox::new();
30 text_box.position(x, y)
31 .size(332, 28)
32 .text_offset(6, 6)
33 .on_enter(move |text_box: &TextBox| {
34 label.text.set(text_box.text.get());
35 });
36 window.add(&text_box);
37
38 let button = Button::new();
39 button.position(x + text_box.rect.get().width as i32 + 8, y)
40 .size(48 + 12, text_box.rect.get().height)
41 .text("Update")
42 .text_offset(6, 6)
43 .on_click(move |_button: &Button, _point: Point| {
44 text_box.emit_enter();
45 });
46 window.add(&button);
47
48 y += button.rect.get().height as i32 + 10;
49
50 let progress_label = Label::new();
51 progress_label.text("Progress: 0%")
52 .position(x, y)
53 .size(400, 16);
54 window.add(&progress_label);
55
56 y += progress_label.rect.get().height as i32 + 10;
57
58 let progress_bar = ProgressBar::new();
59 progress_bar.position(x, y)
60 .size(400, 16)
61 .value(100)
62 .on_click(move |progress_bar: &ProgressBar, point: Point| {
63 let progress = point.x * 100 / progress_bar.rect.get().width as i32;
64 progress_label.text.set(format!("Progress: {}%", progress));
65 progress_bar.value.set(progress);
66 });
67 window.add(&progress_bar);
68
69 y += progress_bar.rect.get().height as i32 + 10;
70
71 let multi_line_label = Label::new();
72 multi_line_label.text("Multi-Line Text")
73 .position(x, y)
74 .size(400, 16);
75 window.add(&multi_line_label);
76
77 y += multi_line_label.rect.get().height as i32 + 10;
78
79 let multi_line_text_box = TextBox::new();
80 multi_line_text_box.position(x, y)
81 .size(400, 130)
82 .text_offset(1, 1);
83 window.add(&multi_line_text_box);
84
85 y += multi_line_text_box.rect.get().height as i32 + 10;
86
87 let offset_label = Label::new();
88 offset_label.position(x, y)
89 .size(400, 120)
90 .text("Test Offset")
91 .text_offset(50, 50)
92 .with_class("padded")
93 .on_click(|label: &Label, _point: Point| {
94 label
95 .text("Clicked")
96 .with_pseudo_class("clicked");
97 });
98 window.add(&offset_label);
99
100 y += offset_label.rect.get().height as i32 + 10;
101
102 match Image::from_path("res/icon_small.png") {
103 Ok(image) => {
104 image.position(x, y);
105 window.add(&image);
106
107 y += image.rect.get().height as i32 + 10;
108 },
109 Err(err) => {
110 let label = Label::new();
111 label.position(x, y)
112 .size(400, 16)
113 .text(err);
114 window.add(&label);
115
116 y += label.rect.get().height as i32 + 10;
117 }
118 }
119
120 {
121 let action = Action::new("Label One");
122 let offset_label_clone = offset_label.clone();
123 action.on_click(move |_action: &Action, _point: Point| {
124 offset_label_clone.text.set("One".to_owned());
125 });
126 menu.add(&action);
127 }
128
129 {
130 let action = Action::new("Label Two");
131 action.with_class("critical");
132 let offset_label_clone = offset_label.clone();
133 action.on_click(move |_action: &Action, _point: Point| {
134 offset_label_clone.text.set("Two".to_owned());
135 });
136 menu.add(&action);
137 }
138
139 menu.add(&Separator::new());
140
141 {
142 let action = Action::new("Reset Label");
143 let offset_label_clone = offset_label.clone();
144 action.on_click(move |_action: &Action, _point: Point| {
145 offset_label_clone.text.set("Text Offset".to_owned());
146 offset_label_clone.without_pseudo_class("clicked");
147 });
148 menu.add(&action);
149 }
150
151 let grid = Grid::new();
152 grid.position(x, y)
153 .spacing(8, 8);
154
155 let label = Label::new();
156 label.size(32, 16).text("Grid");
157 grid.insert(0, 0, &label);
158
159 let label = Label::new();
160 label.size(32, 16).text("Test");
161 grid.insert(1, 0, &label);
162
163 let label = Label::new();
164 label.size(32, 16).text("With");
165 grid.insert(2, 0, &label);
166
167 let label = Label::new();
168 label.size(48, 16).text("Resize");
169 grid.insert(3, 0, &label);
170
171 let mut i = 0;
172 for row in 1..6 {
173 for col in 0..5 {
174 let cell = TextBox::new();
175 let text = format!("{}: {}, {}", i, col, row);
176 cell.size(text.len() as u32 * 8 + 2, 18).text(text).text_offset(1, 1);
177 grid.insert(col, row, &cell);
178 i += 1;
179 }
180 }
181 grid.arrange(true);
182
183 window.add(&grid);
184
185 // Add this last to put it on top
186 window.add(&menu);
187
188 window.exec();
189}
Sourcepub fn add<T: Entry>(&self, new_entry: &Arc<T>)
pub fn add<T: Entry>(&self, new_entry: &Arc<T>)
Examples found in repository?
examples/widget_tree.rs (line 95)
9fn main() {
10 let mut window = Window::new(Rect::new(100, 100, 420, 768), "OrbTK");
11
12 let stack_layout = StackLayout::new(Orientation::Vertical);
13 stack_layout.position(10, 0).size(400, 768).spacing(10);
14
15 let menu = Menu::new("Menu");
16 menu.size(32, 16);
17 stack_layout.add(menu.clone());
18
19 let label = Label::new();
20 label.size(400, 16).text("Test Label");
21 stack_layout.add(label);
22
23 let horizontal_stack_layout = StackLayout::new(Orientation::Horizontal);
24 horizontal_stack_layout.size(400, 28).spacing(10);
25 stack_layout.add(horizontal_stack_layout.clone());
26
27 let text_box = TextBox::new();
28 text_box.size(332, 28).text_offset(6, 6);
29 horizontal_stack_layout.add(text_box.clone());
30
31 let button = Button::new();
32 button
33 .text("Update")
34 .on_click(move |_button: &Button, _point: Point| {
35 text_box.emit_enter();
36 });
37 horizontal_stack_layout.add(button);
38
39 let progress_label = Label::new();
40 progress_label.text("Progress: 0%");
41 stack_layout.add(progress_label.clone());
42
43 let progress_bar = ProgressBar::new();
44 progress_bar.size(400, 16).value(50).on_click(
45 move |progress_bar: &ProgressBar, point: Point| {
46 let progress = point.x * 100 / progress_bar.rect.get().width as i32;
47 progress_label.text.set(format!("Progress: {}%", progress));
48 progress_bar.value.set(progress);
49 },
50 );
51 stack_layout.add(progress_bar);
52
53 let combo_box = ComboBox::new();
54 stack_layout.add(combo_box.clone());
55
56 for i in 1..11 {
57 combo_box.push(&format!("Entry {}", i));
58 }
59
60 let multi_line_label = Label::new();
61 multi_line_label.text("Multi-Line Text").size(400, 16);
62 stack_layout.add(multi_line_label);
63
64 let multi_line_text_box = TextBox::new();
65 multi_line_text_box.size(400, 130).text_offset(1, 1);
66 stack_layout.add(multi_line_text_box);
67
68 let offset_label = Label::new();
69 offset_label
70 .size(400, 120)
71 .text("Test Offset")
72 .text_offset(50, 50)
73 .on_click(|label: &Label, _point: Point| {
74 label.text("Clicked");
75 });
76 stack_layout.add(offset_label.clone());
77
78 match Image::from_path("res/icon_small.png") {
79 Ok(image) => {
80 stack_layout.add(image.clone());
81 }
82 Err(err) => {
83 let label = Label::new();
84 label.size(400, 16).text(err);
85 stack_layout.add(label.clone());
86 }
87 }
88
89 {
90 let action = Action::new("Label One");
91 let offset_label_clone = offset_label.clone();
92 action.on_click(move |_action: &Action, _point: Point| {
93 offset_label_clone.text.set("One".to_owned());
94 });
95 menu.add(&action);
96 }
97
98 {
99 let action = Action::new("Label Two");
100 let offset_label_clone = offset_label.clone();
101 action.on_click(move |_action: &Action, _point: Point| {
102 offset_label_clone.text.set("Two".to_owned());
103 });
104 menu.add(&action);
105 }
106
107 menu.add(&Separator::new());
108
109 {
110 let action = Action::new("Reset Label");
111 let offset_label_clone = offset_label.clone();
112 action.on_click(move |_action: &Action, _point: Point| {
113 offset_label_clone.text.set("Text Offset".to_owned());
114 });
115 menu.add(&action);
116 }
117
118 let grid = Grid::new();
119 grid.spacing(8, 8);
120
121 let label = Label::new();
122 label.size(32, 16).text("Grid");
123 grid.insert(0, 0, &label);
124
125 let label = Label::new();
126 label.size(32, 16).text("Test");
127 grid.insert(1, 0, &label);
128
129 let label = Label::new();
130 label.size(32, 16).text("With");
131 grid.insert(2, 0, &label);
132
133 let label = Label::new();
134 label.size(48, 16).text("Resize");
135 grid.insert(3, 0, &label);
136
137 let mut i = 0;
138 for row in 1..6 {
139 for col in 0..5 {
140 let cell = TextBox::new();
141 let text = format!("{}: {}, {}", i, col, row);
142 cell.size(text.len() as u32 * 8 + 2, 18)
143 .text(text)
144 .text_offset(1, 1);
145 grid.insert(col, row, &cell);
146 i += 1;
147 }
148 }
149
150 stack_layout.add(grid.clone());
151 grid.arrange(true);
152
153 window.add(&stack_layout);
154
155 window.exec();
156}
More examples
examples/widgets.rs (line 124)
6fn main() {
7 let mut window = Window::new(Rect::new(100, 100, 420, 768), "OrbTK");
8
9 let x = 10;
10 let mut y = 0;
11
12 let menu = Menu::new("Menu");
13 menu.position(x, y)
14 .size(32, 16);
15
16 y += menu.rect.get().height as i32 + 10;
17
18 let label = Label::new();
19 label.position(x, y)
20 .size(400, 16)
21 .text("Test Label");
22 window.add(&label);
23
24 y += label.rect.get().height as i32 + 10;
25
26 let text_box = TextBox::new();
27 text_box.position(x, y)
28 .size(332, 28)
29 .text_offset(6, 6);
30 window.add(&text_box);
31
32 let button = Button::new();
33 button.position(x + text_box.rect.get().width as i32 + 8, y)
34 .size(48 + 12, text_box.rect.get().height)
35 .text("Update")
36 .text_offset(6, 6)
37 .on_click(move |_button: &Button, _point: Point| {
38 text_box.emit_enter();
39 });
40 window.add(&button);
41
42 y += button.rect.get().height as i32 + 10;
43
44 let progress_label = Label::new();
45 progress_label.text("Progress: 0%").position(x, y);
46 window.add(&progress_label);
47
48 y += progress_label.rect.get().height as i32 + 10;
49
50 let progress_bar = ProgressBar::new();
51 progress_bar.position(x, y)
52 .size(400, 16)
53 .value(100)
54 .on_click(move |progress_bar: &ProgressBar, point: Point| {
55 let progress = point.x * 100 / progress_bar.rect.get().width as i32;
56 progress_label.text.set(format!("Progress: {}%", progress));
57 progress_bar.value.set(progress);
58 });
59 window.add(&progress_bar);
60
61 y += progress_bar.rect.get().height as i32 + 10;
62
63 let combo_box = ComboBox::new();
64 combo_box.position(x, y);
65
66 for i in 1..11 {
67 combo_box.push(&format!("Entry {}", i));
68 }
69
70 y += combo_box.rect.get().height as i32 + 10;
71
72 let multi_line_label = Label::new();
73 multi_line_label.text("Multi-Line Text")
74 .position(x, y)
75 .size(400, 16);
76 window.add(&multi_line_label);
77
78 y += multi_line_label.rect.get().height as i32 + 10;
79
80 let multi_line_text_box = TextBox::new();
81 multi_line_text_box.position(x, y)
82 .size(400, 130)
83 .text_offset(1, 1);
84 window.add(&multi_line_text_box);
85
86 y += multi_line_text_box.rect.get().height as i32 + 10;
87
88 let offset_label = Label::new();
89 offset_label.position(x, y)
90 .size(400, 120)
91 .text("Test Offset")
92 .text_offset(50, 50)
93 .on_click(|label: &Label, _point: Point| {
94 label.text("Clicked");
95 });
96 window.add(&offset_label);
97
98 y += offset_label.rect.get().height as i32 + 10;
99
100 match Image::from_path("res/icon_small.png") {
101 Ok(image) => {
102 image.position(x, y);
103 window.add(&image);
104
105 y += image.rect.get().height as i32 + 10;
106 },
107 Err(err) => {
108 let label = Label::new();
109 label.position(x, y)
110 .size(400, 16)
111 .text(err);
112 window.add(&label);
113
114 y += label.rect.get().height as i32 + 10;
115 }
116 }
117
118 {
119 let action = Action::new("Label One");
120 let offset_label_clone = offset_label.clone();
121 action.on_click(move |_action: &Action, _point: Point| {
122 offset_label_clone.text.set("One".to_owned());
123 });
124 menu.add(&action);
125 }
126
127 {
128 let action = Action::new("Label Two");
129 let offset_label_clone = offset_label.clone();
130 action.on_click(move |_action: &Action, _point: Point| {
131 offset_label_clone.text.set("Two".to_owned());
132 });
133 menu.add(&action);
134 }
135
136 menu.add(&Separator::new());
137
138 {
139 let action = Action::new("Reset Label");
140 let offset_label_clone = offset_label.clone();
141 action.on_click(move |_action: &Action, _point: Point| {
142 offset_label_clone.text.set("Text Offset".to_owned());
143 });
144 menu.add(&action);
145 }
146
147 let grid = Grid::new();
148 grid.position(x, y)
149 .spacing(8, 8);
150
151 let label = Label::new();
152 label.size(32, 16).text("Grid");
153 grid.insert(0, 0, &label);
154
155 let label = Label::new();
156 label.size(32, 16).text("Test");
157 grid.insert(1, 0, &label);
158
159 let label = Label::new();
160 label.size(32, 16).text("With");
161 grid.insert(2, 0, &label);
162
163 let label = Label::new();
164 label.size(48, 16).text("Resize");
165 grid.insert(3, 0, &label);
166
167 let mut i = 0;
168 for row in 1..6 {
169 for col in 0..5 {
170 let cell = TextBox::new();
171 let text = format!("{}: {}, {}", i, col, row);
172 cell.size(text.len() as u32 * 8 + 2, 18).text(text).text_offset(1, 1);
173 grid.insert(col, row, &cell);
174 i += 1;
175 }
176 }
177 grid.arrange(true);
178
179 window.add(&grid);
180
181 window.add(&combo_box);
182 // Add this last to put it on top
183 window.add(&menu);
184
185 window.exec();
186}
examples/themed.rs (line 126)
6fn main() {
7 let theme = Theme::from_path("examples/exampletheme.css").unwrap();
8 let mut window_builder = WindowBuilder::new(Rect::new(100, 100, 420, 730), "Orbtk - Themed");
9 window_builder = window_builder.theme(theme);
10 let mut window = window_builder.build();
11
12 let x = 10;
13 let mut y = 0;
14
15 let menu = Menu::new("Menu");
16 menu.position(x, y)
17 .size(32, 16);
18
19 y += menu.rect.get().height as i32 + 10;
20
21 let label = Label::new();
22 label.position(x, y)
23 .size(400, 16)
24 .text("Test Label");
25 window.add(&label);
26
27 y += label.rect.get().height as i32 + 10;
28
29 let text_box = TextBox::new();
30 text_box.position(x, y)
31 .size(332, 28)
32 .text_offset(6, 6)
33 .on_enter(move |text_box: &TextBox| {
34 label.text.set(text_box.text.get());
35 });
36 window.add(&text_box);
37
38 let button = Button::new();
39 button.position(x + text_box.rect.get().width as i32 + 8, y)
40 .size(48 + 12, text_box.rect.get().height)
41 .text("Update")
42 .text_offset(6, 6)
43 .on_click(move |_button: &Button, _point: Point| {
44 text_box.emit_enter();
45 });
46 window.add(&button);
47
48 y += button.rect.get().height as i32 + 10;
49
50 let progress_label = Label::new();
51 progress_label.text("Progress: 0%")
52 .position(x, y)
53 .size(400, 16);
54 window.add(&progress_label);
55
56 y += progress_label.rect.get().height as i32 + 10;
57
58 let progress_bar = ProgressBar::new();
59 progress_bar.position(x, y)
60 .size(400, 16)
61 .value(100)
62 .on_click(move |progress_bar: &ProgressBar, point: Point| {
63 let progress = point.x * 100 / progress_bar.rect.get().width as i32;
64 progress_label.text.set(format!("Progress: {}%", progress));
65 progress_bar.value.set(progress);
66 });
67 window.add(&progress_bar);
68
69 y += progress_bar.rect.get().height as i32 + 10;
70
71 let multi_line_label = Label::new();
72 multi_line_label.text("Multi-Line Text")
73 .position(x, y)
74 .size(400, 16);
75 window.add(&multi_line_label);
76
77 y += multi_line_label.rect.get().height as i32 + 10;
78
79 let multi_line_text_box = TextBox::new();
80 multi_line_text_box.position(x, y)
81 .size(400, 130)
82 .text_offset(1, 1);
83 window.add(&multi_line_text_box);
84
85 y += multi_line_text_box.rect.get().height as i32 + 10;
86
87 let offset_label = Label::new();
88 offset_label.position(x, y)
89 .size(400, 120)
90 .text("Test Offset")
91 .text_offset(50, 50)
92 .with_class("padded")
93 .on_click(|label: &Label, _point: Point| {
94 label
95 .text("Clicked")
96 .with_pseudo_class("clicked");
97 });
98 window.add(&offset_label);
99
100 y += offset_label.rect.get().height as i32 + 10;
101
102 match Image::from_path("res/icon_small.png") {
103 Ok(image) => {
104 image.position(x, y);
105 window.add(&image);
106
107 y += image.rect.get().height as i32 + 10;
108 },
109 Err(err) => {
110 let label = Label::new();
111 label.position(x, y)
112 .size(400, 16)
113 .text(err);
114 window.add(&label);
115
116 y += label.rect.get().height as i32 + 10;
117 }
118 }
119
120 {
121 let action = Action::new("Label One");
122 let offset_label_clone = offset_label.clone();
123 action.on_click(move |_action: &Action, _point: Point| {
124 offset_label_clone.text.set("One".to_owned());
125 });
126 menu.add(&action);
127 }
128
129 {
130 let action = Action::new("Label Two");
131 action.with_class("critical");
132 let offset_label_clone = offset_label.clone();
133 action.on_click(move |_action: &Action, _point: Point| {
134 offset_label_clone.text.set("Two".to_owned());
135 });
136 menu.add(&action);
137 }
138
139 menu.add(&Separator::new());
140
141 {
142 let action = Action::new("Reset Label");
143 let offset_label_clone = offset_label.clone();
144 action.on_click(move |_action: &Action, _point: Point| {
145 offset_label_clone.text.set("Text Offset".to_owned());
146 offset_label_clone.without_pseudo_class("clicked");
147 });
148 menu.add(&action);
149 }
150
151 let grid = Grid::new();
152 grid.position(x, y)
153 .spacing(8, 8);
154
155 let label = Label::new();
156 label.size(32, 16).text("Grid");
157 grid.insert(0, 0, &label);
158
159 let label = Label::new();
160 label.size(32, 16).text("Test");
161 grid.insert(1, 0, &label);
162
163 let label = Label::new();
164 label.size(32, 16).text("With");
165 grid.insert(2, 0, &label);
166
167 let label = Label::new();
168 label.size(48, 16).text("Resize");
169 grid.insert(3, 0, &label);
170
171 let mut i = 0;
172 for row in 1..6 {
173 for col in 0..5 {
174 let cell = TextBox::new();
175 let text = format!("{}: {}, {}", i, col, row);
176 cell.size(text.len() as u32 * 8 + 2, 18).text(text).text_offset(1, 1);
177 grid.insert(col, row, &cell);
178 i += 1;
179 }
180 }
181 grid.arrange(true);
182
183 window.add(&grid);
184
185 // Add this last to put it on top
186 window.add(&menu);
187
188 window.exec();
189}
Trait Implementations§
Source§impl Style for Menu
impl Style for Menu
fn selector(&self) -> &CloneCell<Selector>
fn with_class<S: Into<String>>(&self, class: S) -> &Self
fn without_class<S: Into<String>>(&self, class: S) -> &Self
fn with_pseudo_class<S: Into<String>>(&self, pseudo_class: S) -> &Self
fn without_pseudo_class<S: Into<String>>(&self, pseudo_class: S) -> &Self
Source§impl Widget for Menu
impl Widget for Menu
Source§fn local_position(&self) -> &Cell<Point>
fn local_position(&self) -> &Cell<Point>
Borrow the local position of the widget. The local position describes position of the widget relative to it’s parent.
Source§fn vertical_placement(&self) -> &Cell<VerticalPlacement>
fn vertical_placement(&self) -> &Cell<VerticalPlacement>
Borrow the vertical placement of the widget.
Source§fn horizontal_placement(&self) -> &Cell<HorizontalPlacement>
fn horizontal_placement(&self) -> &Cell<HorizontalPlacement>
Borrow the horizontal placement of the widget.
Source§fn draw(&self, renderer: &mut dyn Renderer, _focused: bool, theme: &Theme)
fn draw(&self, renderer: &mut dyn Renderer, _focused: bool, theme: &Theme)
Used to draw the widget by render code.
Source§fn event(
&self,
event: Event,
focused: bool,
redraw: &mut bool,
caught: &mut bool,
) -> bool
fn event( &self, event: Event, focused: bool, redraw: &mut bool, caught: &mut bool, ) -> bool
Handle the incoming events by bubbling from child to parent.
Must have overwritten to create a custom bubbling event handling.
Source§fn preview_event(
&self,
_event: Event,
_focused: bool,
_redraw: &mut bool,
_handled: bool,
) -> bool
fn preview_event( &self, _event: Event, _focused: bool, _redraw: &mut bool, _handled: bool, ) -> bool
Handle the incoming events by tunneling from parent to child.
Must have overwritten to create a custom tunneling event handling.
Auto Trait Implementations§
impl !Freeze for Menu
impl !RefUnwindSafe for Menu
impl !Send for Menu
impl !Sync for Menu
impl Unpin for Menu
impl !UnwindSafe for Menu
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more