Struct Menu

Source
pub struct Menu {
    pub rect: Cell<Rect>,
    /* private fields */
}

Fields§

§rect: Cell<Rect>

Implementations§

Source§

impl Menu

Source

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
Hide additional 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}
Source

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
Hide additional 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 Click for Menu

Source§

fn emit_click(&self, point: Point)

Source§

fn on_click<T: Fn(&Self, Point) + 'static>(&self, func: T) -> &Self

Source§

impl Place for Menu

Source§

fn position(&self, x: i32, y: i32) -> &Self

Source§

fn size(&self, width: u32, height: u32) -> &Self

Source§

fn placement( &self, vertical_placement: VerticalPlacement, horizontal_placement: HorizontalPlacement, ) -> &Self

Source§

impl Style for Menu

Source§

fn selector(&self) -> &CloneCell<Selector>

Source§

fn with_class<S: Into<String>>(&self, class: S) -> &Self

Source§

fn without_class<S: Into<String>>(&self, class: S) -> &Self

Source§

fn with_pseudo_class<S: Into<String>>(&self, pseudo_class: S) -> &Self

Source§

fn without_pseudo_class<S: Into<String>>(&self, pseudo_class: S) -> &Self

Source§

impl Text for Menu

Source§

fn text<S: Into<String>>(&self, text: S) -> &Self

Source§

fn text_offset(&self, x: i32, y: i32) -> &Self

Source§

impl Widget for Menu

Source§

fn name(&self) -> &str

Return the name of the widget.
Source§

fn rect(&self) -> &Cell<Rect>

Borrow the render rect of the widget.
Source§

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>

Borrow the vertical placement of the widget.
Source§

fn horizontal_placement(&self) -> &Cell<HorizontalPlacement>

Borrow the horizontal placement of the widget.
Source§

fn margin(&self) -> &Cell<Thickness>

Borrow the margin of the widget.
Source§

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

Handle the incoming events by bubbling from child to parent. Must have overwritten to create a custom bubbling event handling.
Source§

fn children(&self) -> &RefCell<Vec<Arc<dyn Widget>>>

Borrow the children of the widget.
Source§

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.
Source§

fn add(&self, widget: Arc<dyn Widget>)

Add a child to the widget.
Source§

fn update(&self)

Used to update the state of the widget. Could be used to update the selector.
Source§

fn arrange(&self)

Arrange the children of the widget. Could be override to create a custom layout.

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> SetParameter for T

Source§

fn set<T>(&mut self, value: T) -> <T as Parameter<Self>>::Result
where T: Parameter<Self>,

Sets value as a parameter of self.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.