Skip to content

Commit 688f615

Browse files
authored
Merge pull request #27 from compio-rs/dev/enable
feat: enable & disable
2 parents aa133b1 + 8fb5bde commit 688f615

45 files changed

Lines changed: 524 additions & 39 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ windows-sys = { version = "0.59", features = [
4343
"Win32_UI_Accessibility",
4444
"Win32_UI_Controls",
4545
"Win32_UI_HiDpi",
46+
"Win32_UI_Input_KeyboardAndMouse",
4647
"Win32_UI_Shell",
4748
"Win32_UI_WindowsAndMessaging",
4849
] }

examples/widgets.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
use winio::{
22
App, BrushPen, Button, ButtonEvent, Canvas, CanvasEvent, CheckBox, CheckBoxEvent, Child, Color,
33
ColorTheme, ComboBox, ComboBoxEvent, ComboBoxMessage, Component, ComponentSender,
4-
DrawingFontBuilder, Edit, GradientStop, Grid, HAlign, Label, Layoutable, LinearGradientBrush,
5-
Margin, MessageBox, MessageBoxButton, ObservableVec, ObservableVecEvent, Orient, Point,
6-
Progress, RadialGradientBrush, RadioButton, RadioButtonGroup, Rect, RelativePoint,
7-
RelativeSize, Size, SolidColorBrush, StackPanel, TextBox, VAlign, Visible, Window, WindowEvent,
4+
DrawingFontBuilder, Edit, Enable, GradientStop, Grid, HAlign, Label, Layoutable,
5+
LinearGradientBrush, Margin, MessageBox, MessageBoxButton, ObservableVec, ObservableVecEvent,
6+
Orient, Point, Progress, RadialGradientBrush, RadioButton, RadioButtonGroup, Rect,
7+
RelativePoint, RelativeSize, Size, SolidColorBrush, StackPanel, TextBox, VAlign, Visible,
8+
Window, WindowEvent,
89
};
910

1011
fn main() {
@@ -219,6 +220,7 @@ impl Component for MainModel {
219220
true
220221
}
221222
MainMessage::List(e) => {
223+
self.pop_button.set_enabled(!self.list.is_empty());
222224
self.combo
223225
.emit(ComboBoxMessage::from_observable_vec_event(e))
224226
.await
@@ -250,11 +252,12 @@ impl Component for MainModel {
250252
MainMessage::Show => {
251253
MessageBox::new()
252254
.title("Show selected item")
253-
.message(if let Some(index) = self.index {
254-
self.list[index].as_str()
255-
} else {
256-
"No selection."
257-
})
255+
.message(
256+
self.index
257+
.and_then(|index| self.list.get(index))
258+
.map(|s| s.as_str())
259+
.unwrap_or("No selection."),
260+
)
258261
.buttons(MessageBoxButton::Ok)
259262
.show(Some(&*self.window))
260263
.await;

src/elm/button.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use crate::{BorrowedWindow, Component, ComponentSender, Layoutable, Point, Size, Visible, ui};
1+
use crate::{
2+
BorrowedWindow, Component, ComponentSender, Enable, Layoutable, Point, Size, Visible, ui,
3+
};
24

35
/// A simple button.
46
#[derive(Debug)]
@@ -28,6 +30,16 @@ impl Visible for Button {
2830
}
2931
}
3032

33+
impl Enable for Button {
34+
fn is_enabled(&self) -> bool {
35+
self.widget.is_enabled()
36+
}
37+
38+
fn set_enabled(&mut self, v: bool) {
39+
self.widget.set_enabled(v);
40+
}
41+
}
42+
3143
impl Layoutable for Button {
3244
fn loc(&self) -> Point {
3345
self.widget.loc()

src/elm/canvas.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
2-
BorrowedWindow, Component, ComponentSender, DrawingContext, Layoutable, MouseButton, Point,
3-
Size, Visible, ui,
2+
BorrowedWindow, Component, ComponentSender, DrawingContext, Enable, Layoutable, MouseButton,
3+
Point, Size, Visible, ui,
44
};
55

66
/// A simple drawing canvas.
@@ -26,6 +26,16 @@ impl Visible for Canvas {
2626
}
2727
}
2828

29+
impl Enable for Canvas {
30+
fn is_enabled(&self) -> bool {
31+
self.widget.is_enabled()
32+
}
33+
34+
fn set_enabled(&mut self, v: bool) {
35+
self.widget.set_enabled(v);
36+
}
37+
}
38+
2939
impl Layoutable for Canvas {
3040
fn loc(&self) -> Point {
3141
self.widget.loc()

src/elm/check_box.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use crate::{BorrowedWindow, Component, ComponentSender, Layoutable, Point, Size, Visible, ui};
1+
use crate::{
2+
BorrowedWindow, Component, ComponentSender, Enable, Layoutable, Point, Size, Visible, ui,
3+
};
24

35
/// A simple check box.
46
#[derive(Debug)]
@@ -38,6 +40,16 @@ impl Visible for CheckBox {
3840
}
3941
}
4042

43+
impl Enable for CheckBox {
44+
fn is_enabled(&self) -> bool {
45+
self.widget.is_enabled()
46+
}
47+
48+
fn set_enabled(&mut self, v: bool) {
49+
self.widget.set_enabled(v);
50+
}
51+
}
52+
4153
impl Layoutable for CheckBox {
4254
fn loc(&self) -> Point {
4355
self.widget.loc()

src/elm/combo_box.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use super::ObservableVecEvent;
2-
use crate::{BorrowedWindow, Component, ComponentSender, Layoutable, Point, Size, Visible, ui};
2+
use crate::{
3+
BorrowedWindow, Component, ComponentSender, Enable, Layoutable, Point, Size, Visible, ui,
4+
};
35

46
/// A simple combo box.
57
#[derive(Debug)]
@@ -64,6 +66,16 @@ impl Visible for ComboBox {
6466
}
6567
}
6668

69+
impl Enable for ComboBox {
70+
fn is_enabled(&self) -> bool {
71+
self.widget.is_enabled()
72+
}
73+
74+
fn set_enabled(&mut self, v: bool) {
75+
self.widget.set_enabled(v);
76+
}
77+
}
78+
6779
impl Layoutable for ComboBox {
6880
fn loc(&self) -> Point {
6981
self.widget.loc()
@@ -236,6 +248,26 @@ impl ComboEntry {
236248
}
237249
}
238250

251+
impl Visible for ComboEntry {
252+
fn is_visible(&self) -> bool {
253+
self.widget.is_visible()
254+
}
255+
256+
fn set_visible(&mut self, v: bool) {
257+
self.widget.set_visible(v);
258+
}
259+
}
260+
261+
impl Enable for ComboEntry {
262+
fn is_enabled(&self) -> bool {
263+
self.widget.is_enabled()
264+
}
265+
266+
fn set_enabled(&mut self, v: bool) {
267+
self.widget.set_enabled(v);
268+
}
269+
}
270+
239271
impl Layoutable for ComboEntry {
240272
fn loc(&self) -> Point {
241273
self.widget.loc()

src/elm/edit.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{
2-
BorrowedWindow, Component, ComponentSender, HAlign, Layoutable, Point, Size, Visible, ui,
2+
BorrowedWindow, Component, ComponentSender, Enable, HAlign, Layoutable, Point, Size, Visible,
3+
ui,
34
};
45

56
/// A simple single-line text input box.
@@ -50,6 +51,16 @@ impl Visible for Edit {
5051
}
5152
}
5253

54+
impl Enable for Edit {
55+
fn is_enabled(&self) -> bool {
56+
self.widget.is_enabled()
57+
}
58+
59+
fn set_enabled(&mut self, v: bool) {
60+
self.widget.set_enabled(v);
61+
}
62+
}
63+
5364
impl Layoutable for Edit {
5465
fn loc(&self) -> Point {
5566
self.widget.loc()

src/elm/label.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{
2-
BorrowedWindow, Component, ComponentSender, HAlign, Layoutable, Point, Size, Visible, ui,
2+
BorrowedWindow, Component, ComponentSender, Enable, HAlign, Layoutable, Point, Size, Visible,
3+
ui,
34
};
45

56
/// A simple single-line label.
@@ -40,6 +41,16 @@ impl Visible for Label {
4041
}
4142
}
4243

44+
impl Enable for Label {
45+
fn is_enabled(&self) -> bool {
46+
self.widget.is_enabled()
47+
}
48+
49+
fn set_enabled(&mut self, v: bool) {
50+
self.widget.set_enabled(v);
51+
}
52+
}
53+
4354
impl Layoutable for Label {
4455
fn loc(&self) -> Point {
4556
self.widget.loc()

src/elm/layout.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,25 @@ pub trait Visible {
2626
}
2727
}
2828

29+
/// Trait for a widget to enable or disable.
30+
pub trait Enable {
31+
/// If the widget is enabled.
32+
fn is_enabled(&self) -> bool;
33+
34+
/// Set if the widget is enabled.
35+
fn set_enabled(&mut self, v: bool);
36+
37+
/// Enable the widget.
38+
fn enable(&mut self) {
39+
self.set_enabled(true);
40+
}
41+
42+
/// Disable the widget.
43+
fn disable(&mut self) {
44+
self.set_enabled(false);
45+
}
46+
}
47+
2948
/// Trait for a layoutable widget.
3049
pub trait Layoutable {
3150
/// The left top location.

src/elm/progress.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use crate::{BorrowedWindow, Component, ComponentSender, Layoutable, Point, Size, Visible, ui};
1+
use crate::{
2+
BorrowedWindow, Component, ComponentSender, Enable, Layoutable, Point, Size, Visible, ui,
3+
};
24

35
/// A progress bar.
46
#[derive(Debug)]
@@ -48,6 +50,16 @@ impl Visible for Progress {
4850
}
4951
}
5052

53+
impl Enable for Progress {
54+
fn is_enabled(&self) -> bool {
55+
self.widget.is_enabled()
56+
}
57+
58+
fn set_enabled(&mut self, v: bool) {
59+
self.widget.set_enabled(v);
60+
}
61+
}
62+
5163
impl Layoutable for Progress {
5264
fn loc(&self) -> Point {
5365
self.widget.loc()

0 commit comments

Comments
 (0)