OpenTTD Source 20250521-master-g82876c25e0
textbuf_type.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10#ifndef TEXTBUF_TYPE_H
11#define TEXTBUF_TYPE_H
12
13#include "string_type.h"
14#include "strings_type.h"
15#include "string_base.h"
16
28
30struct Textbuf {
32 uint16_t max_bytes;
33 uint16_t max_chars;
34 uint16_t chars;
35 uint16_t pixels;
36 bool caret;
37 uint16_t caretpos;
38 uint16_t caretxoffs;
39 uint16_t markpos;
40 uint16_t markend;
41 uint16_t markxoffs;
42 uint16_t marklength;
43
44 explicit Textbuf(uint16_t max_bytes, uint16_t max_chars = UINT16_MAX);
45
46 void Assign(std::string_view text);
47
48 void DeleteAll();
49 bool InsertClipboard();
50
51 bool InsertChar(char32_t key);
52 bool InsertString(std::string_view str, bool marked,
53 std::optional<size_t> caret = std::nullopt,
54 std::optional<size_t> insert_location = std::nullopt, std::optional<size_t> replacement_end = std::nullopt);
55
56 bool DeleteChar(uint16_t keycode);
57 bool MovePos(uint16_t keycode);
58
59 HandleKeyPressResult HandleKeyPress(char32_t key, uint16_t keycode);
60
61 bool HandleCaret();
62 void UpdateSize();
63
64 void DiscardMarkedText(bool update = true);
65
66 std::string_view GetText() const;
67
68private:
69 std::string buf;
70 std::unique_ptr<StringIterator> char_iter;
71
72 bool CanDelChar(bool backspace);
73
76
77 void DeleteText(uint16_t from, uint16_t to, bool update);
78
79 void UpdateStringIter();
80 void UpdateWidth();
82 void UpdateMarkedText();
83};
84
85#endif /* TEXTBUF_TYPE_H */
IterType
Type of the iterator.
Definition string_base.h:17
Types for strings.
CharSetFilter
Valid filter types for IsValidChar.
Definition string_type.h:24
Types related to strings.
Helper/buffer for input fields.
uint16_t pixels
the current size of the string in pixels
uint16_t caretpos
the current position of the caret in the buffer, in bytes
void UpdateSize()
Update Textbuf type with its actual physical character and screenlength Get the count of characters i...
Definition textbuf.cpp:445
bool MovePos(uint16_t keycode)
Handle text navigation with arrow keys left/right.
Definition textbuf.cpp:363
uint16_t markxoffs
the start position of the marked area in pixels
void UpdateMarkedText()
Update pixel positions of the marked text area.
Definition textbuf.cpp:311
void UpdateWidth()
Update pixel width of the text.
Definition textbuf.cpp:298
bool DeleteChar(uint16_t keycode)
Delete a character from a textbuffer, either with 'Delete' or 'Backspace' The character is delete fro...
Definition textbuf.cpp:51
void DeleteAll()
Delete every character in the textbuffer.
Definition textbuf.cpp:112
uint16_t max_bytes
the maximum size of the buffer in bytes (including terminating '\0')
std::string_view GetText() const
Get the current text.
Definition textbuf.cpp:284
uint16_t chars
the current size of the string in characters (including terminating '\0')
bool MovePrev(StringIterator::IterType what)
Move to previous character position.
Definition textbuf.cpp:328
uint16_t max_chars
the maximum size of the buffer in characters (including terminating '\0')
uint16_t markend
the end position of the marked area in the buffer, in bytes
void DeleteText(uint16_t from, uint16_t to, bool update)
Delete a part of the text.
Definition textbuf.cpp:237
bool MoveNext(StringIterator::IterType what)
Move to next character position.
Definition textbuf.cpp:345
bool InsertClipboard()
Insert a chunk of text from the clipboard onto the textbuffer.
Definition textbuf.cpp:223
bool InsertString(std::string_view str, bool marked, std::optional< size_t > caret=std::nullopt, std::optional< size_t > insert_location=std::nullopt, std::optional< size_t > replacement_end=std::nullopt)
Insert a string into the text buffer.
Definition textbuf.cpp:157
uint16_t caretxoffs
the current position of the caret in pixels
uint16_t marklength
the length of the marked area in pixels
uint16_t markpos
the start position of the marked area in the buffer, in bytes
bool CanDelChar(bool backspace)
Checks if it is possible to delete a character.
Definition textbuf.cpp:40
void Assign(std::string_view text)
Copy a string into the textbuffer.
Definition textbuf.cpp:420
void DiscardMarkedText(bool update=true)
Discard any marked text.
Definition textbuf.cpp:272
bool caret
is the caret ("_") visible or not
CharSetFilter afilter
Allowed characters.
bool InsertChar(char32_t key)
Insert a character to a textbuffer.
Definition textbuf.cpp:128
void UpdateStringIter()
Update the character iter after the text has changed.
Definition textbuf.cpp:290
bool HandleCaret()
Handle the flashing of the caret.
Definition textbuf.cpp:463
std::string buf
buffer in which text is saved
void UpdateCaretPosition()
Update pixel position of the caret.
Definition textbuf.cpp:304
HandleKeyPressResult
Return values for Textbuf::HandleKeypress.
@ HKPR_NOT_HANDLED
Key does not affect editboxes.
@ HKPR_CANCEL
Escape key pressed.
@ HKPR_EDITING
Textbuf content changed.
@ HKPR_CONFIRM
Return or enter key pressed.
@ HKPR_CURSOR
Non-text change, e.g. cursor position.