diff --git a/src/tbtr_template_gui_main.cpp b/src/tbtr_template_gui_main.cpp index dee412e0d7..47318e87ed 100644 --- a/src/tbtr_template_gui_main.cpp +++ b/src/tbtr_template_gui_main.cpp @@ -228,7 +228,7 @@ public: this->groups.ForceRebuild(); this->groups.NeedResort(); - this->BuildGroupList(_local_company); + this->BuildGroupList(); this->matrixContentLeftMargin = 40; this->selected_template_index = -1; @@ -240,7 +240,8 @@ public: this->templates.ForceRebuild(); - BuildTemplateGuiList(&this->templates, this->vscroll[1], this->owner, this->sel_railtype); + this->templates.ForceRebuild(); + this->BuildTemplateGuiList(); } ~TemplateReplaceWindow() { @@ -306,9 +307,8 @@ public: virtual void OnPaint() { - BuildTemplateGuiList(&this->templates, this->vscroll[1], this->owner, this->sel_railtype); - - this->BuildGroupList(_local_company); + this->BuildGroupList(); + this->BuildTemplateGuiList(); /* sets the colour of that art thing */ this->GetWidget(TRW_WIDGET_TRAIN_FLUFF_LEFT)->colour = _company_colours[_local_company]; @@ -352,6 +352,9 @@ public: { if (this->editInProgress) return; + this->BuildGroupList(); + this->BuildTemplateGuiList(); + switch (widget) { case TRW_WIDGET_TMPL_BUTTONS_CONFIGTMPL_REUSE: { if ((this->selected_template_index >= 0) && (this->selected_template_index < (short)this->templates.size())) { @@ -420,7 +423,7 @@ public: bool succeeded = DoCommandP(0, template_index, 0, CMD_DELETE_TEMPLATE_VEHICLE, nullptr); if (succeeded) { - BuildTemplateGuiList(&this->templates, this->vscroll[1], this->owner, this->sel_railtype); + this->templates.ForceRebuild(); selected_template_index = -1; } } @@ -479,7 +482,7 @@ public: if (!succeeded) return false; - BuildTemplateGuiList(&this->templates, vscroll[1], _local_company, this->sel_railtype); + this->templates.ForceRebuild(); this->ToggleWidgetLoweredState(TRW_WIDGET_TMPL_BUTTONS_CLONE); ResetObjectToPlace(); this->SetDirty(); @@ -500,7 +503,7 @@ public: /* Reset scrollbar positions */ this->vscroll[0]->SetPosition(0); this->vscroll[1]->SetPosition(0); - BuildTemplateGuiList(&this->templates, this->vscroll[1], this->owner, this->sel_railtype); + this->templates.ForceRebuild(); this->SetDirty(); } @@ -552,7 +555,7 @@ public: } } - void BuildGroupList(Owner owner) + void BuildGroupList() { if (!this->groups.NeedRebuild()) return; @@ -562,7 +565,7 @@ public: GUIGroupList list; for (const Group *g : Group::Iterate()) { - if (g->owner == owner && g->vehicle_type == VEH_TRAIN) { + if (g->owner == this->owner && g->vehicle_type == VEH_TRAIN) { list.push_back(g); } } @@ -578,6 +581,13 @@ public: this->vscroll[0]->SetCount(groups.size()); } + void BuildTemplateGuiList() + { + if (!this->templates.NeedRebuild()) return; + + ::BuildTemplateGuiList(&this->templates, this->vscroll[1], this->owner, this->sel_railtype); + } + void DrawAllGroupsFunction(const Rect &r) const { int left = r.left + WD_MATRIX_LEFT; @@ -632,6 +642,8 @@ public: void DrawTemplateList(const Rect &r) const { + const_cast(this)->BuildTemplateGuiList(); + int left = r.left; int right = r.right; int y = r.top; @@ -780,6 +792,9 @@ public: void UpdateButtonState() { + this->BuildGroupList(); + this->BuildTemplateGuiList(); + bool selected_ok = (this->selected_template_index >= 0) && (this->selected_template_index < (short)this->templates.size()); bool group_ok = (this->selected_group_index >= 0) && (this->selected_group_index < (short)this->groups.size());