46 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) 47 #error "Only <final/final.h> can be included directly." 52 #include <unordered_map> 55 #include "final/fwidget.h" 71 using FWidget::setGeometry;
72 using FWidget::setVisibleCursor;
73 using FWidget::unsetVisibleCursor;
76 enum class LabelOrientation : uInt8
82 enum class InputType : uInt8
109 template <
typename typeT>
110 auto operator << (
const typeT&) ->
FLineEdit&;
111 auto operator << (UniChar) ->
FLineEdit&;
112 auto operator << (
const wchar_t) ->
FLineEdit&;
121 auto getClassName()
const ->
FString override;
122 auto getAlignment()
const noexcept -> Align;
123 auto getText()
const ->
FString;
124 auto getMaxLength()
const noexcept -> std::size_t;
125 auto getCursorPosition()
const noexcept -> std::size_t;
126 auto getLabelObject()
const ->
FLabel*;
127 auto getLabelOrientation()
const -> LabelOrientation;
130 void setAlignment (Align) noexcept;
132 void inputText (
const FString&);
133 void deletesCharacter();
134 void setInputFilter (
const FString&);
135 void clearInputFilter();
136 void setMaxLength (std::size_t);
137 void setCursorPosition (std::size_t);
138 void moveCursorToBegin();
139 void moveCursorToEnd();
140 void stepCursorForward (std::size_t = 1);
141 void stepCursorBackward (std::size_t = 1);
142 void setLabelText (
const FString&);
143 void setInputType (
const InputType);
144 void setOverwriteMode (
bool =
true);
145 void setLabelOrientation (
const LabelOrientation);
146 void setLabelAssociatedWidget (
FWidget*);
147 void resetColors()
override;
148 void setSize (
const FSize&,
bool =
true)
override;
150 ,
bool =
true )
override;
151 void setEnable (
bool =
true)
override;
152 void unsetEnable()
override;
153 void setDisable()
override;
154 void setShadow (
bool =
true);
156 void setReadOnly (
bool =
true);
157 void unsetReadOnly();
160 auto hasShadow()
const -> bool;
161 auto isReadOnly()
const noexcept -> bool;
164 void show()
override;
165 void hide()
override;
182 void adjustSize()
override;
186 using offsetPair = std::pair<std::size_t, std::size_t>;
187 using KeyMap = std::unordered_map<FKey, std::function<void()>,
EnumHash<FKey>>;
190 static constexpr
auto NOT_SET =
static_cast<std::size_t
>(-1);
191 static constexpr
auto NOT_FOUND =
static_cast<std::size_t
>(-1);
195 void mapKeyFunctions();
196 auto hasHotkey()
const -> bool;
197 auto getAlignOffset (
const std::size_t)
const -> std::size_t;
198 void draw()
override;
199 void drawInputField();
200 void initializeDrawing();
201 void finalizingDrawing()
const;
202 void printTrailingSpaces (std::size_t x_pos);
203 auto choosePrintMethod() -> std::tuple<std::size_t, std::size_t>;
204 auto printTextField() -> std::tuple<std::size_t, std::size_t>;
205 auto printPassword() -> std::tuple<std::size_t, std::size_t>;
207 auto getCursorColumnPos()
const -> std::size_t;
208 auto getPasswordText()
const ->
FString;
209 auto isPasswordField()
const -> bool;
210 auto isFullwidthChar (std::size_t)
const -> bool;
211 auto getColumnWidthWithErrorHandling ( FString::const_reference
212 , std::size_t = 0 )
const ->std::size_t;
213 auto endPosToOffset (std::size_t) -> offsetPair;
214 auto clickPosToCursorPos (std::size_t) -> std::size_t;
215 void setCursorPositionByMouseClick (
const FMouseEvent*);
217 void handleLeftDragScroll();
218 void handleRightDragScroll();
219 void adjustTextOffset();
220 auto isRightCursorOverflow (std::size_t, std::size_t)
const -> bool;
221 auto isRightFullWidthCursorOverflow (std::size_t, std::size_t, std::size_t)
const -> bool;
222 auto isLeftCursorUnderflow()
const -> bool;
227 void deleteCurrentCharacter();
228 void deletePreviousCharacter();
229 void switchInsertMode();
231 auto keyInput (FKey) -> bool;
232 auto characterFilter (
const wchar_t)
const -> wchar_t;
233 void processActivate();
234 void processChanged()
const;
241 FWidget* label_associated_widget{
this};
242 std::wstring input_filter{};
244 DragScrollMode drag_scroll{DragScrollMode::None};
245 LabelOrientation label_orientation{LabelOrientation::Left};
246 InputType input_type{InputType::Textfield};
247 int scroll_repeat{100};
248 bool scroll_timer{
false};
249 bool insert_mode{
true};
250 bool read_only{
false};
251 Align alignment{Align::Left};
252 std::size_t align_offset{0};
253 std::size_t cursor_pos{NOT_SET};
254 std::size_t text_offset{0};
255 std::size_t char_width_offset{0};
256 std::size_t max_length{std::numeric_limits<std::size_t>::max()};
262 template <
typename typeT>
263 inline auto FLineEdit::operator << (
const typeT& s) ->
FLineEdit&
272 inline auto FLineEdit::getClassName()
const ->
FString 273 {
return "FLineEdit"; }
276 inline auto FLineEdit::getAlignment()
const noexcept -> Align
277 {
return alignment; }
280 inline auto FLineEdit::getText()
const ->
FString 284 inline auto FLineEdit::getMaxLength()
const noexcept -> std::size_t
285 {
return max_length; }
288 inline auto FLineEdit::getCursorPosition()
const noexcept -> std::size_t
289 {
return cursor_pos; }
292 inline auto FLineEdit::getLabelObject()
const ->
FLabel*
296 inline auto FLineEdit::getLabelOrientation()
const -> LabelOrientation
297 {
return label_orientation; }
300 inline void FLineEdit::setInputFilter (
const FString& regex_string)
301 { input_filter = regex_string.toWString(); }
304 inline void FLineEdit::clearInputFilter()
305 { input_filter.clear(); }
308 inline void FLineEdit::setInputType (
const InputType type)
309 { input_type = type; }
312 inline void FLineEdit::setLabelAssociatedWidget (
FWidget* w)
313 { label_associated_widget = w; }
316 inline void FLineEdit::unsetEnable()
317 { setEnable(
false); }
320 inline void FLineEdit::setDisable()
321 { setEnable(
false); }
324 inline void FLineEdit::unsetShadow()
325 { setShadow(
false); }
328 inline void FLineEdit::unsetReadOnly()
329 { setReadOnly(
true); }
332 inline auto FLineEdit::hasShadow()
const ->
bool 333 {
return getFlags().shadow.shadow; }
336 inline auto FLineEdit::isReadOnly()
const noexcept ->
bool 337 {
return read_only; }
341 #endif // FLINEEDIT_H
Definition: class_template.cpp:25
Definition: flineedit.h:67