33
44extern crate iui;
55use iui:: prelude:: * ;
6- use iui:: controls:: { Label , Spinbox , Slider , Entry , MultilineEntry , LayoutGrid ,
6+ use iui:: controls:: { Label , Spinbox , Slider , PasswordEntry , Entry , MultilineEntry , LayoutGrid ,
77 GridAlignment , GridExpand , HorizontalSeparator , ProgressBar } ;
88use std:: rc:: Rc ;
99use std:: cell:: RefCell ;
@@ -13,6 +13,7 @@ struct State {
1313 slider_val : i32 ,
1414 spinner_val : i32 ,
1515 entry_val : String ,
16+ password_val : String ,
1617 multi_val : String ,
1718}
1819
@@ -21,7 +22,7 @@ fn main() {
2122 let ui = UI :: init ( ) . unwrap ( ) ;
2223
2324 // Initialize the state of the application.
24- let state = Rc :: new ( RefCell :: new ( State { slider_val : 0 , spinner_val : 0 , entry_val : "" . into ( ) , multi_val : "" . into ( ) } ) ) ;
25+ let state = Rc :: new ( RefCell :: new ( State { slider_val : 0 , spinner_val : 0 , entry_val : "" . into ( ) , password_val : "" . into ( ) , multi_val : "" . into ( ) } ) ) ;
2526
2627 // Create the grid which we'll use to lay out controls
2728 let mut grid = LayoutGrid :: new ( & ui) ;
@@ -31,12 +32,13 @@ fn main() {
3132 // While it's not necessary to create a block for this, it makes the code a lot easier
3233 // to read; the indentation presents a visual cue informing the reader that these
3334 // statements are related.
34- let ( mut slider, mut spinner, mut entry, mut multi) = {
35+ let ( mut slider, mut spinner, mut entry, mut password , mut multi) = {
3536 // Numerical inputs
3637 let slider = Slider :: new ( & ui, 1 , 100 ) ;
3738 let spinner = Spinbox :: new ( & ui, 1 , 100 ) ;
3839 // Text inputs
3940 let entry = Entry :: new ( & ui) ;
41+ let password = PasswordEntry :: new ( & ui) ;
4042 let multi = MultilineEntry :: new ( & ui) ;
4143 // Add everything into the grid
4244 grid. append ( & ui, slider. clone ( ) ,
@@ -51,33 +53,38 @@ fn main() {
5153 0 , 3 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
5254 grid. append ( & ui, entry. clone ( ) ,
5355 0 , 4 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
56+ grid. append ( & ui, password. clone ( ) ,
57+ 0 , 5 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
5458 grid. append ( & ui, multi. clone ( ) ,
5559 // The multiline entry is at column 0, row 1, and expands vertically.
56- 0 , 5 , 1 , 1 , GridExpand :: Vertical , GridAlignment :: Fill , GridAlignment :: Fill ) ;
57- ( slider, spinner, entry, multi)
60+ 0 , 6 , 1 , 1 , GridExpand :: Vertical , GridAlignment :: Fill , GridAlignment :: Fill ) ;
61+ ( slider, spinner, entry, password , multi)
5862 } ;
5963
6064 // Set up the outputs for the application. Organization is very similar to the
6165 // previous setup.
62- let ( add_label, sub_label, text_label, bigtext_label, progress_bar) = {
66+ let ( add_label, sub_label, text_label, password_label , bigtext_label, progress_bar) = {
6367 let add_label = Label :: new ( & ui, "" ) ;
6468 let sub_label = Label :: new ( & ui, "" ) ;
6569 let text_label = Label :: new ( & ui, "" ) ;
70+ let password_label = Label :: new ( & ui, "" ) ;
6671 let bigtext_label = Label :: new ( & ui, "" ) ;
6772 let progress_bar = ProgressBar :: indeterminate ( & ui) ;
68- grid. append ( & ui, add_label. clone ( ) ,
73+ grid. append ( & ui, add_label. clone ( ) ,
6974 1 , 0 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
7075 grid. append ( & ui, sub_label. clone ( ) ,
7176 1 , 1 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
7277 // We skip the #2 & 3 slots so that the text labels will align with their inputs.
7378 // This is important because the big text label can expand vertically.
7479 grid. append ( & ui, text_label. clone ( ) ,
7580 1 , 4 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
76- grid. append ( & ui, bigtext_label . clone ( ) ,
81+ grid. append ( & ui, password_label . clone ( ) ,
7782 1 , 5 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
83+ grid. append ( & ui, bigtext_label. clone ( ) ,
84+ 1 , 6 , 1 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
7885 grid. append ( & ui, progress_bar. clone ( ) ,
79- 0 , 6 , 2 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
80- ( add_label, sub_label, text_label, bigtext_label, progress_bar)
86+ 0 , 7 , 2 , 1 , GridExpand :: Neither , GridAlignment :: Fill , GridAlignment :: Fill ) ;
87+ ( add_label, sub_label, text_label, password_label , bigtext_label, progress_bar)
8188 } ;
8289
8390 // The window allows all constituent components to be displayed.
@@ -103,6 +110,11 @@ fn main() {
103110 move |val| { state. borrow_mut ( ) . entry_val = val; }
104111 } ) ;
105112
113+ password. on_changed ( & ui, {
114+ let state = state. clone ( ) ;
115+ move |val| { state. borrow_mut ( ) . password_val = val; }
116+ } ) ;
117+
106118 multi. on_changed ( & ui, {
107119 let state = state. clone ( ) ;
108120 move |val| { state. borrow_mut ( ) . multi_val = val; }
@@ -118,6 +130,7 @@ fn main() {
118130 let mut add_label = add_label. clone ( ) ;
119131 let mut sub_label = sub_label. clone ( ) ;
120132 let mut text_label = text_label. clone ( ) ;
133+ let mut password_label = password_label. clone ( ) ;
121134 let mut bigtext_label = bigtext_label. clone ( ) ;
122135 let mut progress_bar = progress_bar. clone ( ) ;
123136 move || {
@@ -127,6 +140,7 @@ fn main() {
127140 add_label. set_text ( & ui, & format ! ( "Added: {}" , state. slider_val + state. spinner_val) ) ;
128141 sub_label. set_text ( & ui, & format ! ( "Subtracted: {}" , state. slider_val - state. spinner_val) ) ;
129142 text_label. set_text ( & ui, & format ! ( "Text: {}" , state. entry_val) ) ;
143+ password_label. set_text ( & ui, & format ! ( "Secret Text: {}" , state. password_val) ) ;
130144 bigtext_label. set_text ( & ui, & format ! ( "Multiline Text: {}" , state. multi_val) ) ;
131145 progress_bar. set_value ( & ui, ( state. slider_val + state. spinner_val ) as u32 ) ;
132146 }
0 commit comments