diff --git a/src/help_gui.cpp b/src/help_gui.cpp index ab41674aaf..8345430ed8 100644 --- a/src/help_gui.cpp +++ b/src/help_gui.cpp @@ -59,6 +59,8 @@ static std::optional FindGameManualFilePath(std::string_view filena struct GameManualTextfileWindow : public TextfileWindow { GameManualTextfileWindow(std::string_view filename) : TextfileWindow(TFT_GAME_MANUAL) { + this->ConstructWindow(); + /* Mark the content of these files as trusted. */ this->trusted = true; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 35831a2437..c73499bd30 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -44,6 +44,8 @@ struct ContentTextfileWindow : public TextfileWindow { ContentTextfileWindow(TextfileType file_type, const ContentInfo *ci) : TextfileWindow(file_type), ci(ci) { + this->ConstructWindow(); + const char *textfile = this->ci->GetTextfile(file_type); this->LoadTextfile(textfile, GetContentInfoSubDir(this->ci->type)); } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index b5258d05b5..f2f544742d 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2571,6 +2571,8 @@ struct SurveyResultTextfileWindow : public TextfileWindow { SurveyResultTextfileWindow(TextfileType file_type) : TextfileWindow(file_type) { + this->ConstructWindow(); + auto result = _survey.CreatePayload(NetworkSurveyHandler::Reason::PREVIEW, true); this->LoadText(result); this->InvalidateData(); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index be41129dd8..0bcb8f2de8 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -573,6 +573,8 @@ struct NewGRFTextfileWindow : public TextfileWindow { NewGRFTextfileWindow(TextfileType file_type, const GRFConfig *c) : TextfileWindow(file_type), grf_config(c) { + this->ConstructWindow(); + const char *textfile = this->grf_config->GetTextfile(file_type); this->LoadTextfile(textfile, NEWGRF_DIR); } diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 0912dae969..7a0f192cfb 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -649,6 +649,7 @@ struct ScriptTextfileWindow : public TextfileWindow { ScriptTextfileWindow(TextfileType file_type, CompanyID slot) : TextfileWindow(file_type), slot(slot) { + this->ConstructWindow(); this->OnInvalidateData(); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index b37e806415..1dc102b3b8 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -105,6 +105,8 @@ struct BaseSetTextfileWindow : public TextfileWindow { BaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) : TextfileWindow(file_type), baseset(baseset), content_type(content_type) { + this->ConstructWindow(); + const char *textfile = this->baseset->GetTextfile(file_type); this->LoadTextfile(textfile, BASESET_DIR); } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index b1280f0562..211f2dfa7d 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -84,13 +84,19 @@ static WindowDesc _textfile_desc(__FILE__, __LINE__, ); TextfileWindow::TextfileWindow(TextfileType file_type) : Window(&_textfile_desc), file_type(file_type) +{ + /* Init of nested tree is deferred. + * TextfileWindow::ConstructWindow must be called by the inheriting window. */ +} + +void TextfileWindow::ConstructWindow() { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_TF_VSCROLLBAR); this->hscroll = this->GetScrollbar(WID_TF_HSCROLLBAR); - this->GetWidget(WID_TF_CAPTION)->SetDataTip(STR_TEXTFILE_README_CAPTION + file_type, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); + this->GetWidget(WID_TF_CAPTION)->SetDataTip(STR_TEXTFILE_README_CAPTION + this->file_type, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); this->GetWidget(WID_TF_SEL_JUMPLIST)->SetDisplayedPlane(SZSP_HORIZONTAL); - this->FinishInitNested(file_type); + this->FinishInitNested(this->file_type); this->DisableWidget(WID_TF_NAVBACK); this->DisableWidget(WID_TF_NAVFORWARD); diff --git a/src/textfile_gui.h b/src/textfile_gui.h index 181c3eb99a..57cc16760e 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -30,8 +30,6 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { Scrollbar *vscroll; ///< Vertical scrollbar. Scrollbar *hscroll; ///< Horizontal scrollbar. - TextfileWindow(TextfileType file_type); - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override; void DrawWidget(const Rect &r, WidgetID widget) const override; @@ -54,6 +52,9 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { } protected: + TextfileWindow(TextfileType file_type); + void ConstructWindow(); + struct Line { int top{0}; ///< Top scroll position in visual lines. int bottom{0}; ///< Bottom scroll position in visual lines.