OpenTTD Source 20241224-master-gf74b0cf984
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 char * const buf;
33 uint16_t max_bytes;
34 uint16_t max_chars;
35 uint16_t bytes;
36 uint16_t chars;
37 uint16_t pixels;
38 bool caret;
39 uint16_t caretpos;
40 uint16_t caretxoffs;
41 uint16_t markpos;
42 uint16_t markend;
43 uint16_t markxoffs;
44 uint16_t marklength;
45
46 explicit Textbuf(uint16_t max_bytes, uint16_t max_chars = UINT16_MAX);
47 ~Textbuf();
48
49 void Assign(StringID string);
50 void Assign(const std::string_view text);
51
52 void DeleteAll();
53 bool InsertClipboard();
54
55 bool InsertChar(char32_t key);
56 bool InsertString(const char *str, bool marked, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr);
57
58 bool DeleteChar(uint16_t keycode);
59 bool MovePos(uint16_t keycode);
60
61 HandleKeyPressResult HandleKeyPress(char32_t key, uint16_t keycode);
62
63 bool HandleCaret();
64 void UpdateSize();
65
66 void DiscardMarkedText(bool update = true);
67
68 const char *GetText() const;
69
70private:
71 std::unique_ptr<StringIterator> char_iter;
72
73 bool CanDelChar(bool backspace);
74
77
78 void DeleteText(uint16_t from, uint16_t to, bool update);
79
80 void UpdateStringIter();
81 void UpdateWidth();
83 void UpdateMarkedText();
84};
85
86#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.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
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:463
bool MovePos(uint16_t keycode)
Handle text navigation with arrow keys left/right.
Definition textbuf.cpp:369
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:317
void UpdateWidth()
Update pixel width of the text.
Definition textbuf.cpp:304
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:114
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:160
bool MovePrev(StringIterator::IterType what)
Move to previous character position.
Definition textbuf.cpp:334
uint16_t max_chars
the maximum size of the buffer in characters (including terminating '\0')
void Assign(StringID string)
Render a string into the textbuffer.
Definition textbuf.cpp:431
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:351
bool InsertClipboard()
Insert a chunk of text from the clipboard onto the textbuffer.
Definition textbuf.cpp:223
uint16_t bytes
the current size of the string in bytes (including terminating '\0')
const char * GetText() const
Get the current text.
Definition textbuf.cpp:290
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 DiscardMarkedText(bool update=true)
Discard any marked text.
Definition textbuf.cpp:278
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:130
void UpdateStringIter()
Update the character iter after the text has changed.
Definition textbuf.cpp:296
char *const buf
buffer in which text is saved
bool HandleCaret()
Handle the flashing of the caret.
Definition textbuf.cpp:489
void UpdateCaretPosition()
Update pixel position of the caret.
Definition textbuf.cpp:310
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.