diff options
author | stormcone <48624099+stormcone@users.noreply.github.com> | 2019-05-10 19:49:50 +0200 |
---|---|---|
committer | Charles Pigott <charlespigott@googlemail.com> | 2019-12-23 18:04:10 +0000 |
commit | cc1d72c3a370f3c9a13e8722f8d69f5735b95285 (patch) | |
tree | a0ed6ff8fbd7f8d4e537d1f20dc7409a2336b483 | |
parent | a363933d0899f6e79bf04eb38097ce1170f02bee (diff) | |
download | openttd-cc1d72c3a370f3c9a13e8722f8d69f5735b95285.tar.xz |
Feature: Control + click on the vehicle details button in the vehicle view window opens the vehicle group window, then selects and scrolls to the vehicle's group.
-rw-r--r-- | src/group_gui.cpp | 21 | ||||
-rw-r--r-- | src/group_gui.h | 3 | ||||
-rw-r--r-- | src/vehicle_gui.cpp | 6 |
3 files changed, 24 insertions, 6 deletions
diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 8d7c042d2..842e3fbb0 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1046,18 +1046,31 @@ static WindowDesc _train_group_desc( * Show the group window for the given company and vehicle type. * @param company The company to show the window for. * @param vehicle_type The type of vehicle to show it for. + * @param group The group to be selected. Defaults to INVALID_GROUP. + * @param need_existing_window Whether the existing window is needed. Defaults to false. */ -void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type) +void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group = INVALID_GROUP, bool need_existing_window = false) { if (!Company::IsValidID(company)) return; - WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack(); + const WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack(); + VehicleGroupWindow *w; if (vehicle_type == VEH_TRAIN) { - AllocateWindowDescFront<VehicleGroupWindow>(&_train_group_desc, num); + w = AllocateWindowDescFront<VehicleGroupWindow>(&_train_group_desc, num, need_existing_window); } else { _other_group_desc.cls = GetWindowClassForVehicleType(vehicle_type); - AllocateWindowDescFront<VehicleGroupWindow>(&_other_group_desc, num); + w = AllocateWindowDescFront<VehicleGroupWindow>(&_other_group_desc, num, need_existing_window); } + if (w != nullptr) w->SelectGroup(group); +} + +/** + * Show the group window for the given vehicle. + * @param v The vehicle to show the window for. + */ +void ShowCompanyGroupForVehicle(const Vehicle *v) +{ + ShowCompanyGroup(v->owner, v->type, v->group_id, true); } /** diff --git a/src/group_gui.h b/src/group_gui.h index 6a0ddfb7a..d42704663 100644 --- a/src/group_gui.h +++ b/src/group_gui.h @@ -13,7 +13,8 @@ #include "company_type.h" #include "vehicle_type.h" -void ShowCompanyGroup(CompanyID company, VehicleType veh); +void ShowCompanyGroup(CompanyID company, VehicleType veh, GroupID group = INVALID_GROUP, bool need_existing_window = false); +void ShowCompanyGroupForVehicle(const Vehicle *v); void DeleteGroupHighlightOfVehicle(const Vehicle *v); #endif /* GROUP_GUI_H */ diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 04d240b04..6272459bc 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2698,7 +2698,11 @@ public: } break; case WID_VV_SHOW_DETAILS: // show details - ShowVehicleDetailsWindow(v); + if (_ctrl_pressed) { + ShowCompanyGroupForVehicle(v); + } else { + ShowVehicleDetailsWindow(v); + } break; case WID_VV_CLONE: // clone vehicle /* Suppress the vehicle GUI when share-cloning. |