fltk/
input.rs

1use crate::enums::FrameType;
2use crate::prelude::*;
3use crate::utils::FlString;
4use fltk_sys::input::*;
5use std::ffi::{CStr, CString};
6
7/// Creates an input widget
8#[derive(Debug)]
9pub struct Input {
10    inner: crate::widget::WidgetTracker,
11    is_derived: bool,
12}
13
14crate::macros::widget::impl_widget_ext!(Input, Fl_Input);
15crate::macros::widget::impl_widget_base!(Input, Fl_Input);
16crate::macros::widget::impl_widget_default!(Input, Fl_Input);
17crate::macros::input::impl_input_ext!(Input, Fl_Input);
18
19/// Sets the input widget's type
20#[repr(i32)]
21#[derive(Debug, Copy, Clone, PartialEq, Eq)]
22pub enum InputType {
23    /// Normal input
24    Normal = 0,
25    /// Float input
26    Float = 1,
27    /// Int input
28    Int = 2,
29    /// Multiline input
30    Multiline = 4,
31    /// Secret input
32    Secret = 5,
33    /// Input!
34    Input = 7,
35    /// Readonly input
36    Readonly = 8,
37    /// Wrap input
38    Wrap = 16,
39}
40
41crate::macros::widget::impl_widget_type!(InputType);
42
43/// Creates an input widget which takes only integers
44#[derive(Debug)]
45pub struct IntInput {
46    inner: crate::widget::WidgetTracker,
47    is_derived: bool,
48}
49
50crate::macros::widget::impl_widget_ext!(IntInput, Fl_Int_Input);
51crate::macros::widget::impl_widget_base!(IntInput, Fl_Int_Input);
52crate::macros::widget::impl_widget_default!(IntInput, Fl_Int_Input);
53crate::macros::input::impl_input_ext!(IntInput, Fl_Int_Input);
54
55/// Creates an input widget which takes only floats
56#[derive(Debug)]
57pub struct FloatInput {
58    inner: crate::widget::WidgetTracker,
59    is_derived: bool,
60}
61
62crate::macros::widget::impl_widget_ext!(FloatInput, Fl_Float_Input);
63crate::macros::widget::impl_widget_base!(FloatInput, Fl_Float_Input);
64crate::macros::widget::impl_widget_default!(FloatInput, Fl_Float_Input);
65crate::macros::input::impl_input_ext!(FloatInput, Fl_Float_Input);
66
67/// Creates a multiline-input widget
68#[derive(Debug)]
69pub struct MultilineInput {
70    inner: crate::widget::WidgetTracker,
71    is_derived: bool,
72}
73
74crate::macros::widget::impl_widget_ext!(MultilineInput, Fl_Multiline_Input);
75crate::macros::widget::impl_widget_base!(MultilineInput, Fl_Multiline_Input);
76crate::macros::widget::impl_widget_default!(MultilineInput, Fl_Multiline_Input);
77crate::macros::input::impl_input_ext!(MultilineInput, Fl_Multiline_Input);
78
79/// Creates a File-input widget
80#[derive(Debug)]
81pub struct FileInput {
82    inner: crate::widget::WidgetTracker,
83    is_derived: bool,
84}
85
86crate::macros::widget::impl_widget_ext!(FileInput, Fl_File_Input);
87crate::macros::widget::impl_widget_base!(FileInput, Fl_File_Input);
88crate::macros::widget::impl_widget_default!(FileInput, Fl_File_Input);
89crate::macros::input::impl_input_ext!(FileInput, Fl_File_Input);
90
91impl FileInput {
92    /// Set the `down_box` of the widget
93    pub fn set_down_frame(&mut self, f: FrameType) {
94        unsafe { Fl_File_Input_set_down_box(self.inner.widget() as _, f.as_i32()) }
95    }
96
97    /// Get the `down_box` of the widget
98    pub fn down_frame(&self) -> FrameType {
99        unsafe { FrameType::from_i32(Fl_File_Input_down_box(self.inner.widget() as _)) }
100    }
101}
102
103/// Creates a secret input widget
104#[derive(Debug)]
105pub struct SecretInput {
106    inner: crate::widget::WidgetTracker,
107    is_derived: bool,
108}
109
110crate::macros::widget::impl_widget_ext!(SecretInput, Fl_Secret_Input);
111crate::macros::widget::impl_widget_base!(SecretInput, Fl_Secret_Input);
112crate::macros::widget::impl_widget_default!(SecretInput, Fl_Secret_Input);
113crate::macros::input::impl_input_ext!(SecretInput, Fl_Secret_Input);