diff options
author | stormcone <48624099+stormcone@users.noreply.github.com> | 2019-05-10 18:24:16 +0200 |
---|---|---|
committer | Charles Pigott <charlespigott@googlemail.com> | 2019-12-23 18:04:10 +0000 |
commit | 551bde77a49878a984c04c47c280c9681292c84f (patch) | |
tree | 39a0b0213ba7061c5fdfa51f776332001917fdb0 /src | |
parent | 42144ecd562ee05423e16452cc999929296b138c (diff) | |
download | openttd-551bde77a49878a984c04c47c280c9681292c84f.tar.xz |
Add: A function which selects and scrolls to a particular group in the vehicle group window.
Diffstat (limited to 'src')
-rw-r--r-- | src/group_gui.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 256c85ba4..a4c00c129 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -368,6 +368,7 @@ public: this->groups.ForceRebuild(); this->groups.NeedResort(); this->BuildGroupList(vli.company); + this->group_sb->SetCount((uint)this->groups.size()); this->GetWidget<NWidgetCore>(WID_GL_CAPTION)->widget_data = STR_VEHICLE_LIST_TRAIN_CAPTION + this->vli.vtype; this->GetWidget<NWidgetCore>(WID_GL_LIST_VEHICLE)->tool_tip = STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP + this->vli.vtype; @@ -991,6 +992,35 @@ public: { if (this->vehicle_sel == vehicle) ResetObjectToPlace(); } + + /** + * Selects the specified group in the list + * + * @param g_id The ID of the group to be selected + */ + void SelectGroup(const GroupID g_id) + { + if (g_id == INVALID_GROUP || g_id == this->vli.index) return; + + this->vli.index = g_id; + if (g_id != ALL_GROUP && g_id != DEFAULT_GROUP) { + const Group *g = Group::Get(g_id); + int id_g = find_index(this->groups, g); + // The group's branch is maybe collapsed, so try to expand it + if (id_g == -1) { + for (auto pg = Group::GetIfValid(g->parent); pg != nullptr; pg = Group::GetIfValid(pg->parent)) { + pg->folded = false; + } + this->groups.ForceRebuild(); + this->BuildGroupList(this->owner); + id_g = find_index(this->groups, g); + } + this->group_sb->ScrollTowards(id_g); + } + this->vehicles.ForceRebuild(); + this->SetDirty(); + } + }; |