mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-11 08:49:50 +00:00
Change: move string validation (and assignment) to textbuf
This commit is contained in:
parent
4e39a58c59
commit
a4bf45729a
@ -959,17 +959,7 @@ struct QueryStringWindow : public Window
|
|||||||
QueryStringWindow(StringID str, StringID caption, uint max_bytes, uint max_chars, WindowDesc *desc, Window *parent, CharSetFilter afilter, QueryStringFlags flags) :
|
QueryStringWindow(StringID str, StringID caption, uint max_bytes, uint max_chars, WindowDesc *desc, Window *parent, CharSetFilter afilter, QueryStringFlags flags) :
|
||||||
Window(desc), editbox(max_bytes, max_chars)
|
Window(desc), editbox(max_bytes, max_chars)
|
||||||
{
|
{
|
||||||
char *last_of = &this->editbox.text.buf[this->editbox.text.max_bytes - 1];
|
this->editbox.text.Assign(str);
|
||||||
GetString(this->editbox.text.buf, str, last_of);
|
|
||||||
StrMakeValidInPlace(this->editbox.text.buf, last_of, SVS_NONE);
|
|
||||||
|
|
||||||
/* Make sure the name isn't too long for the text buffer in the number of
|
|
||||||
* characters (not bytes). max_chars also counts the '\0' characters. */
|
|
||||||
while (Utf8StringLength(this->editbox.text.buf) + 1 > this->editbox.text.max_chars) {
|
|
||||||
*Utf8PrevChar(this->editbox.text.buf + strlen(this->editbox.text.buf)) = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
this->editbox.text.UpdateSize();
|
|
||||||
|
|
||||||
if ((flags & QSF_ACCEPT_UNCHANGED) == 0) this->editbox.orig = this->editbox.text.buf;
|
if ((flags & QSF_ACCEPT_UNCHANGED) == 0) this->editbox.orig = this->editbox.text.buf;
|
||||||
|
|
||||||
|
@ -388,8 +388,7 @@ Textbuf::~Textbuf()
|
|||||||
*/
|
*/
|
||||||
void Textbuf::Assign(StringID string)
|
void Textbuf::Assign(StringID string)
|
||||||
{
|
{
|
||||||
GetString(this->buf, string, &this->buf[this->max_bytes - 1]);
|
this->Assign(GetString(string));
|
||||||
this->UpdateSize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -398,7 +397,16 @@ void Textbuf::Assign(StringID string)
|
|||||||
*/
|
*/
|
||||||
void Textbuf::Assign(const std::string_view text)
|
void Textbuf::Assign(const std::string_view text)
|
||||||
{
|
{
|
||||||
strecpy(this->buf, text.data(), &this->buf[this->max_bytes - 1]);
|
const char *last_of = &this->buf[this->max_bytes - 1];
|
||||||
|
strecpy(this->buf, text.data(), last_of);
|
||||||
|
StrMakeValidInPlace(this->buf, last_of, SVS_NONE);
|
||||||
|
|
||||||
|
/* Make sure the name isn't too long for the text buffer in the number of
|
||||||
|
* characters (not bytes). max_chars also counts the '\0' characters. */
|
||||||
|
while (Utf8StringLength(this->buf) + 1 > this->max_chars) {
|
||||||
|
*Utf8PrevChar(this->buf + strlen(this->buf)) = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
this->UpdateSize();
|
this->UpdateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user