Skip to main content

dear_imgui_rs/input/
text_flags.rs

1use crate::sys;
2use bitflags::bitflags;
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6macro_rules! impl_input_flag_raw {
7    ($ty:ident) => {
8        impl $ty {
9            #[inline]
10            pub(crate) fn raw(self) -> sys::ImGuiInputTextFlags {
11                self.bits() as sys::ImGuiInputTextFlags
12            }
13        }
14
15        #[cfg(feature = "serde")]
16        impl Serialize for $ty {
17            fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
18            where
19                S: serde::Serializer,
20            {
21                serializer.serialize_i32(self.bits())
22            }
23        }
24
25        #[cfg(feature = "serde")]
26        impl<'de> Deserialize<'de> for $ty {
27            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
28            where
29                D: serde::Deserializer<'de>,
30            {
31                let bits = i32::deserialize(deserializer)?;
32                Ok(Self::from_bits_retain(bits))
33            }
34        }
35    };
36}
37
38bitflags! {
39    /// Independent flags accepted by single-line `InputText()` and
40    /// `InputTextWithHint()` widgets.
41    #[repr(transparent)]
42    #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
43    pub struct InputTextFlags: i32 {
44        /// No flags.
45        const NONE = sys::ImGuiInputTextFlags_None as i32;
46        /// Allow 0123456789.+-*/
47        const CHARS_DECIMAL = sys::ImGuiInputTextFlags_CharsDecimal as i32;
48        /// Allow 0123456789ABCDEFabcdef
49        const CHARS_HEXADECIMAL = sys::ImGuiInputTextFlags_CharsHexadecimal as i32;
50        /// Allow 0123456789.+-*/eE (Scientific notation input)
51        const CHARS_SCIENTIFIC = sys::ImGuiInputTextFlags_CharsScientific as i32;
52        /// Turn a..z into A..Z
53        const CHARS_UPPERCASE = sys::ImGuiInputTextFlags_CharsUppercase as i32;
54        /// Filter out spaces, tabs
55        const CHARS_NO_BLANK = sys::ImGuiInputTextFlags_CharsNoBlank as i32;
56
57        /// Pressing TAB input a '\t' character into the text field.
58        const ALLOW_TAB_INPUT = sys::ImGuiInputTextFlags_AllowTabInput as i32;
59        /// Return `true` when Enter is pressed.
60        const ENTER_RETURNS_TRUE = sys::ImGuiInputTextFlags_EnterReturnsTrue as i32;
61        /// Escape key clears content if not empty, and deactivates otherwise.
62        const ESCAPE_CLEARS_ALL = sys::ImGuiInputTextFlags_EscapeClearsAll as i32;
63
64        /// Read-only mode.
65        const READ_ONLY = sys::ImGuiInputTextFlags_ReadOnly as i32;
66        /// Password mode, display all characters as '*'.
67        const PASSWORD = sys::ImGuiInputTextFlags_Password as i32;
68        /// Overwrite mode.
69        const ALWAYS_OVERWRITE = sys::ImGuiInputTextFlags_AlwaysOverwrite as i32;
70        /// Select entire text when first taking mouse focus.
71        const AUTO_SELECT_ALL = sys::ImGuiInputTextFlags_AutoSelectAll as i32;
72        /// Disable following the cursor horizontally.
73        const NO_HORIZONTAL_SCROLL = sys::ImGuiInputTextFlags_NoHorizontalScroll as i32;
74        /// Disable undo/redo.
75        const NO_UNDO_REDO = sys::ImGuiInputTextFlags_NoUndoRedo as i32;
76        /// When text doesn't fit, elide the left side.
77        const ELIDE_LEFT = sys::ImGuiInputTextFlags_ElideLeft as i32;
78
79        /// Callback on pressing TAB (for completion handling).
80        const CALLBACK_COMPLETION = sys::ImGuiInputTextFlags_CallbackCompletion as i32;
81        /// Callback on pressing Up/Down arrows (for history handling).
82        const CALLBACK_HISTORY = sys::ImGuiInputTextFlags_CallbackHistory as i32;
83        /// Callback on each iteration.
84        const CALLBACK_ALWAYS = sys::ImGuiInputTextFlags_CallbackAlways as i32;
85        /// Callback on character inputs to replace or discard them.
86        const CALLBACK_CHAR_FILTER = sys::ImGuiInputTextFlags_CallbackCharFilter as i32;
87        /// Callback on any edit.
88        const CALLBACK_EDIT = sys::ImGuiInputTextFlags_CallbackEdit as i32;
89    }
90}
91
92bitflags! {
93    /// Independent flags accepted by `InputTextMultiline()` widgets.
94    #[repr(transparent)]
95    #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
96    pub struct InputTextMultilineFlags: i32 {
97        /// No flags.
98        const NONE = sys::ImGuiInputTextFlags_None as i32;
99        /// Allow 0123456789.+-*/
100        const CHARS_DECIMAL = sys::ImGuiInputTextFlags_CharsDecimal as i32;
101        /// Allow 0123456789ABCDEFabcdef
102        const CHARS_HEXADECIMAL = sys::ImGuiInputTextFlags_CharsHexadecimal as i32;
103        /// Allow 0123456789.+-*/eE (Scientific notation input)
104        const CHARS_SCIENTIFIC = sys::ImGuiInputTextFlags_CharsScientific as i32;
105        /// Turn a..z into A..Z
106        const CHARS_UPPERCASE = sys::ImGuiInputTextFlags_CharsUppercase as i32;
107        /// Filter out spaces, tabs
108        const CHARS_NO_BLANK = sys::ImGuiInputTextFlags_CharsNoBlank as i32;
109
110        /// Pressing TAB input a '\t' character into the text field.
111        const ALLOW_TAB_INPUT = sys::ImGuiInputTextFlags_AllowTabInput as i32;
112        /// Return `true` when Enter is pressed.
113        const ENTER_RETURNS_TRUE = sys::ImGuiInputTextFlags_EnterReturnsTrue as i32;
114        /// Escape key clears content if not empty, and deactivates otherwise.
115        const ESCAPE_CLEARS_ALL = sys::ImGuiInputTextFlags_EscapeClearsAll as i32;
116        /// In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter.
117        const CTRL_ENTER_FOR_NEW_LINE = sys::ImGuiInputTextFlags_CtrlEnterForNewLine as i32;
118
119        /// Read-only mode.
120        const READ_ONLY = sys::ImGuiInputTextFlags_ReadOnly as i32;
121        /// Overwrite mode.
122        const ALWAYS_OVERWRITE = sys::ImGuiInputTextFlags_AlwaysOverwrite as i32;
123        /// Select entire text when first taking mouse focus.
124        const AUTO_SELECT_ALL = sys::ImGuiInputTextFlags_AutoSelectAll as i32;
125        /// Disable following the cursor horizontally.
126        const NO_HORIZONTAL_SCROLL = sys::ImGuiInputTextFlags_NoHorizontalScroll as i32;
127        /// Disable undo/redo.
128        const NO_UNDO_REDO = sys::ImGuiInputTextFlags_NoUndoRedo as i32;
129        /// Word-wrap lines that are too long.
130        const WORD_WRAP = sys::ImGuiInputTextFlags_WordWrap as i32;
131
132        /// Callback on each iteration.
133        const CALLBACK_ALWAYS = sys::ImGuiInputTextFlags_CallbackAlways as i32;
134        /// Callback on character inputs to replace or discard them.
135        const CALLBACK_CHAR_FILTER = sys::ImGuiInputTextFlags_CallbackCharFilter as i32;
136        /// Callback on any edit.
137        const CALLBACK_EDIT = sys::ImGuiInputTextFlags_CallbackEdit as i32;
138    }
139}
140
141bitflags! {
142    /// Independent flags accepted by numeric `Input*()` and `InputScalar*()`
143    /// widgets.
144    #[repr(transparent)]
145    #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
146    pub struct InputScalarFlags: i32 {
147        /// No flags.
148        const NONE = sys::ImGuiInputTextFlags_None as i32;
149        /// Allow 0123456789.+-*/
150        const CHARS_DECIMAL = sys::ImGuiInputTextFlags_CharsDecimal as i32;
151        /// Allow 0123456789ABCDEFabcdef
152        const CHARS_HEXADECIMAL = sys::ImGuiInputTextFlags_CharsHexadecimal as i32;
153        /// Allow 0123456789.+-*/eE (Scientific notation input)
154        const CHARS_SCIENTIFIC = sys::ImGuiInputTextFlags_CharsScientific as i32;
155        /// Turn a..z into A..Z
156        const CHARS_UPPERCASE = sys::ImGuiInputTextFlags_CharsUppercase as i32;
157        /// Filter out spaces, tabs
158        const CHARS_NO_BLANK = sys::ImGuiInputTextFlags_CharsNoBlank as i32;
159
160        /// Escape key clears content if not empty, and deactivates otherwise.
161        const ESCAPE_CLEARS_ALL = sys::ImGuiInputTextFlags_EscapeClearsAll as i32;
162
163        /// Read-only mode.
164        const READ_ONLY = sys::ImGuiInputTextFlags_ReadOnly as i32;
165        /// Overwrite mode.
166        const ALWAYS_OVERWRITE = sys::ImGuiInputTextFlags_AlwaysOverwrite as i32;
167        /// Select entire text when first taking mouse focus.
168        const AUTO_SELECT_ALL = sys::ImGuiInputTextFlags_AutoSelectAll as i32;
169        /// Parse empty text as the reference value (usually zero).
170        const PARSE_EMPTY_REF_VAL = sys::ImGuiInputTextFlags_ParseEmptyRefVal as i32;
171        /// Display the reference value (usually zero) as empty text.
172        const DISPLAY_EMPTY_REF_VAL = sys::ImGuiInputTextFlags_DisplayEmptyRefVal as i32;
173        /// Disable following the cursor horizontally.
174        const NO_HORIZONTAL_SCROLL = sys::ImGuiInputTextFlags_NoHorizontalScroll as i32;
175        /// Disable undo/redo.
176        const NO_UNDO_REDO = sys::ImGuiInputTextFlags_NoUndoRedo as i32;
177    }
178}
179
180impl_input_flag_raw!(InputTextFlags);
181impl_input_flag_raw!(InputTextMultilineFlags);
182impl_input_flag_raw!(InputScalarFlags);