OpenTTD Source 20250312-master-gcdcc6b491d
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(const std::string_view text);
47
48 void DeleteAll();
49 bool InsertClipboard();
50
51 bool InsertChar(char32_t key);
52 bool InsertString(const char *str, bool marked, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr);
53
54 bool DeleteChar(uint16_t keycode);
55 bool MovePos(uint16_t keycode);
56
57 HandleKeyPressResult HandleKeyPress(char32_t key, uint16_t keycode);
58
59 bool HandleCaret();
60 void UpdateSize();
61
62 void DiscardMarkedText(bool update = true);
63
64 const char *GetText() const;
65
66private:
67 std::string buf;
68 std::unique_ptr<StringIterator> char_iter;
69
70 bool CanDelChar(bool backspace);
71
74
75 void DeleteText(uint16_t from, uint16_t to, bool update);
76
77 void UpdateStringIter();
78 void UpdateWidth();
80 void UpdateMarkedText();
81};
82
83#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:365
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:313
void UpdateWidth()
Update pixel width of the text.
Definition textbuf.cpp:300
bool DeleteChar(uint16_t keycode)
Delete a character from a textbuffer, either with 'Delete' or 'Backspace' The character is delete fro...
Definition textbuf.cpp:50
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')
uint16_t chars
the current size of the string in characters (including terminating '\0')
bool InsertString(const char *str, bool marked, const char *caret=nullptr, const char *insert_location=nullptr, const char *replacement_end=nullptr)
Insert a string into the text buffer.
Definition textbuf.cpp:159
bool MovePrev(StringIterator::IterType what)
Move to previous character position.
Definition textbuf.cpp:330
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:233
bool MoveNext(StringIterator::IterType what)
Move to next character position.
Definition textbuf.cpp:347
bool InsertClipboard()
Insert a chunk of text from the clipboard onto the textbuffer.
Definition textbuf.cpp:219
void Assign(const std::string_view text)
Copy a string into the textbuffer.
Definition textbuf.cpp:422
const char * GetText() const
Get the current text.
Definition textbuf.cpp:286
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:39
void DiscardMarkedText(bool update=true)
Discard any marked text.
Definition textbuf.cpp:274
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:292
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:306
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.