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 e937bfb0ea..886992130c 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -43,6 +43,8 @@ struct ContentTextfileWindow : public TextfileWindow { ContentTextfileWindow(TextfileType file_type, const ContentInfo *ci) : TextfileWindow(file_type), ci(ci) { + this->ConstructWindow(); + auto textfile = this->ci->GetTextfile(file_type); this->LoadTextfile(textfile.value(), GetContentInfoSubDir(this->ci->type)); } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 0ad96c7b4a..d3d7ad4fe0 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -560,6 +560,8 @@ struct NewGRFTextfileWindow : public TextfileWindow { NewGRFTextfileWindow(TextfileType file_type, const GRFConfig *c) : TextfileWindow(file_type), grf_config(c) { + this->ConstructWindow(); + auto textfile = this->grf_config->GetTextfile(file_type); this->LoadTextfile(textfile.value(), NEWGRF_DIR); } diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 6808d443c6..6f2d15da49 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -631,6 +631,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 b70d2b6b6e..7e4302d990 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -97,6 +97,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(); + auto textfile = this->baseset->GetTextfile(file_type); this->LoadTextfile(textfile.value(), BASESET_DIR); } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 1eff6f5fb6..0e840b01a6 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -82,13 +82,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 f5445025c1..6376bd64c1 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -23,8 +23,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; @@ -42,6 +40,9 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { virtual void LoadTextfile(const std::string &textfile, Subdirectory dir); 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.