diff --git a/src/group_gui.cpp b/src/group_gui.cpp index ce2812979a..16a87207bb 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -68,6 +68,10 @@ static const NWidgetPart _nested_group_widgets[] = { SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_GROUP_LIVERY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_COLLAPSE_ALL_GROUPS), SetFill(0, 1), + SetDataTip(STR_GROUP_COLLAPSE_ALL, STR_GROUP_COLLAPSE_ALL), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_EXPAND_ALL_GROUPS), SetFill(0, 1), + SetDataTip(STR_GROUP_EXPAND_ALL, STR_GROUP_EXPAND_ALL), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetFill(0, 1), SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP), @@ -185,13 +189,26 @@ private: GUIGroupList list; + bool enable_expand_all = false; + bool enable_collapse_all = false; + const Group *g; FOR_ALL_GROUPS(g) { if (g->owner == owner && g->vehicle_type == this->vli.vtype) { list.push_back(g); + if (g->parent != INVALID_GROUP) { + if (Group::Get(g->parent)->folded) { + enable_expand_all = true; + } else { + enable_collapse_all = true; + } + } } } + this->SetWidgetDisabledState(WID_GL_EXPAND_ALL_GROUPS, !enable_expand_all); + this->SetWidgetDisabledState(WID_GL_COLLAPSE_ALL_GROUPS, !enable_collapse_all); + list.ForceResort(); list.Sort(&GroupNameSorter); @@ -344,6 +361,20 @@ private: } } + void SetAllGroupsFoldState(bool folded) + { + const Group *g; + FOR_ALL_GROUPS(g) { + if (g->owner == this->owner && g->vehicle_type == this->vli.vtype) { + if (g->parent != INVALID_GROUP) { + Group::Get(g->parent)->folded = folded; + } + } + } + this->groups.ForceRebuild(); + this->SetDirty(); + } + public: VehicleGroupWindow(WindowDesc *desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) { @@ -780,6 +811,17 @@ public: this->ShowRenameGroupWindow(this->vli.index, false); break; + case WID_GL_COLLAPSE_ALL_GROUPS: { + this->SetAllGroupsFoldState(true); + break; + } + + case WID_GL_EXPAND_ALL_GROUPS: { + this->SetAllGroupsFoldState(false); + break; + } + + case WID_GL_LIVERY_GROUP: // Set group livery ShowCompanyLiveryWindow(this->owner, this->vli.index); break; diff --git a/src/lang/english.txt b/src/lang/english.txt index 47e50c9e90..82e26dca74 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4139,6 +4139,8 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group +STR_GROUP_EXPAND_ALL :{BLACK}Expand all +STR_GROUP_COLLAPSE_ALL :{BLACK}Collapse all STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group diff --git a/src/lang/german.txt b/src/lang/german.txt index 30d2448c7a..a2720eb0ef 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3986,6 +3986,8 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Neue Gru STR_GROUP_DELETE_TOOLTIP :{BLACK}Ausgewählte Gruppe löschen STR_GROUP_RENAME_TOOLTIP :{BLACK}Ausgewählte Gruppe umbenennen STR_GROUP_LIVERY_TOOLTIP :{BLACK}Farbschema der ausgewählten Gruppe ändern +STR_GROUP_EXPAND_ALL :{BLACK}Alles ausklappen +STR_GROUP_COLLAPSE_ALL :{BLACK}Alles einklappen STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Diese Gruppe von der automatischen Fahrzeugersetzung ausschließen STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Gruppe löschen diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 47a393191a..649bfd62c0 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4139,6 +4139,8 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}그룹 STR_GROUP_DELETE_TOOLTIP :{BLACK}선택한 그룹 삭제 STR_GROUP_RENAME_TOOLTIP :{BLACK}선택한 그룹 이름 바꾸기 STR_GROUP_LIVERY_TOOLTIP :{BLACK}선택한 그룹의 차량 색상을 변경합니다. +STR_GROUP_EXPAND_ALL :{BLACK}모두 펼치기 +STR_GROUP_COLLAPSE_ALL :{BLACK}모두 접기 STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}클릭하여 전체 자동 교체로부터 이 그룹을 보호합니다. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}그룹 삭제 diff --git a/src/widgets/group_widget.h b/src/widgets/group_widget.h index a9bba84a7d..b7960f6970 100644 --- a/src/widgets/group_widget.h +++ b/src/widgets/group_widget.h @@ -34,6 +34,8 @@ enum GroupListWidgets { WID_GL_DELETE_GROUP, ///< Delete group button. WID_GL_RENAME_GROUP, ///< Rename group button. WID_GL_LIVERY_GROUP, ///< Group livery button. + WID_GL_COLLAPSE_ALL_GROUPS, ///< Collapse all groups button. + WID_GL_EXPAND_ALL_GROUPS, ///< Expand all groups button. WID_GL_REPLACE_PROTECTION, ///< Replace protection button. WID_GL_INFO, ///< Group info. };