fltk/macros/
input.rs

1#[doc(hidden)]
2#[macro_export]
3/// Implements InputExt
4macro_rules! impl_input_ext {
5    ($name: ident, $flname: ident) => {
6        paste::paste! {
7            unsafe impl InputExt for $name {
8                fn value(&self) -> String {
9                    unsafe {
10                        let value_ptr = [<$flname _value>](self.inner.widget() as _);
11                        assert!(!value_ptr.is_null());
12                        CStr::from_ptr(value_ptr as *mut std::os::raw::c_char)
13                            .to_string_lossy()
14                            .to_string()
15                    }
16                }
17
18                fn set_value(&mut self, val: &str) {
19                    let temp = CString::safe_new(val);
20                    unsafe {
21                        [<$flname _set_value>](self.inner.widget() as _, temp.as_ptr());
22                    }
23                }
24
25                fn maximum_size(&self) -> i32 {
26                    unsafe {
27                        [<$flname _maximum_size>](self.inner.widget() as _) as i32
28                    }
29                }
30
31                fn set_maximum_size(&mut self, val: i32) {
32                    unsafe {
33                        [<$flname _set_maximum_size>](self.inner.widget() as _, val as i32)
34                    }
35                }
36
37                fn insert_position(&self) -> i32 {
38                    unsafe {
39                        [<$flname _position>](self.inner.widget() as _) as i32
40                    }
41                }
42
43                fn set_position(&mut self, val: i32) -> Result<(), FltkError> {
44                    unsafe {
45                        let x = [<$flname _set_position>](self.inner.widget() as _, val as i32);
46                        if x == 0 {
47                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
48                        }
49                        Ok(())
50                    }
51                }
52
53                fn mark(&self) -> i32 {
54                    unsafe {
55                        [<$flname _mark>](self.inner.widget() as _) as i32
56                    }
57                }
58
59                fn set_mark(&mut self, val: i32) -> Result<(), FltkError> {
60                    unsafe {
61                        let x = [<$flname _set_mark>](self.inner.widget() as _, val as i32);
62                        if x == 0 {
63                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
64                        }
65                        Ok(())
66                    }
67                }
68
69                fn replace(&mut self, beg: i32, end: i32, val: &str) -> Result<(), FltkError> {
70                    let val = CString::safe_new(val);
71                    unsafe {
72                        let x = [<$flname _replace>](
73                            self.inner.widget() as _,
74                            beg as i32,
75                            end as i32,
76                            val.as_ptr(),
77                            0,
78                        );
79                        if x == 0 {
80                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
81                        }
82                        Ok(())
83                    }
84                }
85
86                fn insert(&mut self, txt: &str) -> Result<(), FltkError> {
87                    let txt = CString::safe_new(txt);
88                    unsafe {
89                        let x = [<$flname _insert>](self.inner.widget() as _, txt.as_ptr(), 0);
90                        if x == 0 {
91                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
92                        }
93                        Ok(())
94                    }
95                }
96
97                fn append(&mut self, txt: &str) -> Result<(), FltkError> {
98                    let txt = CString::safe_new(txt);
99                    unsafe {
100                        let x = [<$flname _append>](self.inner.widget() as _, txt.as_ptr(), 0, 0);
101                        if x == 0 {
102                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
103                        }
104                        Ok(())
105                    }
106                }
107
108                fn copy(&mut self) -> Result<(), FltkError> {
109                    unsafe {
110                        let x = [<$flname _copy>](self.inner.widget() as _, 1);
111                        if x == 0 {
112                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
113                        }
114                        Ok(())
115                    }
116                }
117
118                fn undo(&mut self) -> Result<(), FltkError> {
119                    unsafe {
120                        let x = [<$flname _undo>](self.inner.widget() as _);
121                        if x == 0 {
122                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
123                        }
124                        Ok(())
125                    }
126                }
127
128                fn cut(&mut self) -> Result<(), FltkError> {
129                    unsafe {
130                        let x = [<$flname _copy_cuts>](self.inner.widget() as _);
131                        if x == 0 {
132                            return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
133                        }
134                        Ok(())
135                    }
136                }
137
138                fn text_font(&self) -> $crate::enums::Font {
139                    unsafe {
140                        std::mem::transmute([<$flname _text_font>](self.inner.widget() as _))
141                    }
142                }
143
144                fn set_text_font(&mut self, font: $crate::enums::Font) {
145                    unsafe {
146                        [<$flname _set_text_font>](self.inner.widget() as _, font.bits() as i32)
147                    }
148                }
149
150                fn cursor_color(&self) -> $crate::enums::Color {
151                    unsafe {
152                        std::mem::transmute([<$flname _cursor_color>](self.inner.widget() as _))
153                    }
154                }
155
156                fn set_cursor_color(&mut self, color: $crate::enums::Color) {
157                    unsafe {
158                        [<$flname _set_cursor_color>](self.inner.widget() as _, color.bits() as u32)
159                    }
160                }
161
162                fn text_color(&self) -> $crate::enums::Color {
163                    unsafe {
164                        std::mem::transmute([<$flname _text_color>](self.inner.widget() as _))
165                    }
166                }
167
168                fn set_text_color(&mut self, color: $crate::enums::Color) {
169                    unsafe {
170                        [<$flname _set_text_color>](self.inner.widget() as _, color.bits() as u32)
171                    }
172                }
173
174                fn text_size(&self) -> i32 {
175                    unsafe {
176                        [<$flname _text_size>](self.inner.widget() as _) as i32
177                    }
178                }
179
180                fn set_text_size(&mut self, sz: i32) {
181                    unsafe {
182                        [<$flname _set_text_size>](self.inner.widget() as _, sz as i32)
183                    }
184                }
185
186                fn readonly(&self) -> bool {
187                    unsafe {
188                        [<$flname _readonly>](self.inner.widget() as _) != 0
189                    }
190                }
191
192                fn set_readonly(&mut self, val: bool) {
193                    unsafe {
194                        [<$flname _set_readonly>](self.inner.widget() as _, val as i32)
195                    }
196                }
197
198                fn wrap(&self) -> bool {
199                    unsafe {
200                        [<$flname _wrap>](self.inner.widget() as _) != 0
201                    }
202                }
203
204                fn set_wrap(&mut self, val: bool) {
205                    unsafe {
206                        [<$flname _set_wrap>](self.inner.widget() as _, val as i32)
207                    }
208                }
209
210                fn set_tab_nav(&mut self, val: bool) {
211                    unsafe {
212                        [<$flname _set_tab_nav>](self.inner.widget() as _, val as i32)
213                    }
214                }
215
216                fn tab_nav(&self) -> bool {
217                    unsafe {
218                        [<$flname _tab_nav>](self.inner.widget() as _) != 0
219                    }
220                }
221            }
222        }
223    };
224}
225
226pub use impl_input_ext;