Scheduled dispatch: Add menu item to append schedules from another vehicle

This commit is contained in:
Jonathan G Rennison
2023-05-07 20:06:47 +01:00
parent d93a1a5804
commit 8f92668e22
9 changed files with 79 additions and 12 deletions

View File

@@ -26,6 +26,7 @@
#include "viewport_func.h"
#include "zoom_func.h"
#include "core/geometry_func.hpp"
#include "tilehighlight_func.h"
#include <vector>
#include <algorithm>
@@ -225,6 +226,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
SCH_MD_CLEAR_SCHEDULE,
SCH_MD_REMOVE_SCHEDULE,
SCH_MD_DUPLICATE_SCHEDULE,
SCH_MD_APPEND_VEHICLE_SCHEDULES,
};
bool IsScheduleSelected() const
@@ -384,12 +386,16 @@ struct SchdispatchWindow : GeneralVehicleWindow {
}
case WID_SCHDISPATCH_MANAGEMENT: {
uint64 params[4];
params[0] = STR_SCHDISPATCH_RESET_LAST_DISPATCH_TOOLTIP;
params[1] = STR_SCHDISPATCH_CLEAR_TOOLTIP;
params[2] = STR_SCHDISPATCH_REMOVE_SCHEDULE_TOOLTIP;
params[3] = STR_SCHDISPATCH_DUPLICATE_SCHEDULE_TOOLTIP;
GuiShowTooltips(this, STR_SCHDISPATCH_MANAGE_TOOLTIP, lengthof(params), params, close_cond);
_temp_special_strings[0] = GetString(STR_SCHDISPATCH_RESET_LAST_DISPATCH_TOOLTIP);
auto add_suffix = [&](StringID str) {
SetDParam(0, str);
_temp_special_strings[0] += GetString(STR_SCHDISPATCH_MANAGE_TOOLTIP_SUFFIX);
};
add_suffix(STR_SCHDISPATCH_CLEAR_TOOLTIP);
add_suffix(STR_SCHDISPATCH_REMOVE_SCHEDULE_TOOLTIP);
add_suffix(STR_SCHDISPATCH_DUPLICATE_SCHEDULE_TOOLTIP);
add_suffix(STR_SCHDISPATCH_APPEND_VEHICLE_SCHEDULES_TOOLTIP);
GuiShowTooltips(this, SPECSTR_TEMP_START, 0, nullptr, close_cond);
return true;
}
@@ -731,6 +737,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
add_item(STR_SCHDISPATCH_CLEAR, SCH_MD_CLEAR_SCHEDULE);
add_item(STR_SCHDISPATCH_REMOVE_SCHEDULE, SCH_MD_REMOVE_SCHEDULE);
add_item(STR_SCHDISPATCH_DUPLICATE_SCHEDULE, SCH_MD_DUPLICATE_SCHEDULE);
add_item(STR_SCHDISPATCH_APPEND_VEHICLE_SCHEDULES, SCH_MD_APPEND_VEHICLE_SCHEDULES);
ShowDropDownList(this, std::move(list), -1, WID_SCHDISPATCH_MANAGEMENT);
break;
}
@@ -807,6 +814,15 @@ struct SchdispatchWindow : GeneralVehicleWindow {
case SCH_MD_DUPLICATE_SCHEDULE:
DoCommandP(0, this->vehicle->index | (this->schedule_index << 20), 0, CMD_SCHEDULED_DISPATCH_DUPLICATE_SCHEDULE | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
break;
case SCH_MD_APPEND_VEHICLE_SCHEDULES: {
static const CursorID clone_icons[] = {
SPR_CURSOR_CLONE_TRAIN, SPR_CURSOR_CLONE_ROADVEH,
SPR_CURSOR_CLONE_SHIP, SPR_CURSOR_CLONE_AIRPLANE
};
SetObjectToPlaceWnd(clone_icons[this->vehicle->type], PAL_NONE, HT_VEHICLE, this);
break;
}
}
}
@@ -911,6 +927,15 @@ struct SchdispatchWindow : GeneralVehicleWindow {
}
}
bool OnVehicleSelect(const Vehicle *v) override
{
if (v->orders == nullptr || v->orders->GetScheduledDispatchScheduleCount() == 0) return false;
DoCommandP(0, this->vehicle->index, v->index, CMD_SCHEDULED_DISPATCH_APPEND_VEHICLE_SCHEDULE | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
ResetObjectToPlace();
return true;
}
const Vehicle *GetVehicle()
{
return this->vehicle;
@@ -981,7 +1006,7 @@ static const NWidgetPart _nested_schdispatch_widgets[] = {
EndContainer(),
NWidget(NWID_VERTICAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCHDISPATCH_SET_DELAY), SetDataTip(STR_SCHDISPATCH_DELAY, STR_SCHDISPATCH_DELAY_TOOLTIP), SetFill(1, 1), SetResize(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCHDISPATCH_MANAGEMENT), SetDataTip(STR_SCHDISPATCH_MANAGE, STR_SCHDISPATCH_MANAGE_TOOLTIP), SetFill(1, 1), SetResize(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCHDISPATCH_MANAGEMENT), SetDataTip(STR_SCHDISPATCH_MANAGE, STR_NULL), SetFill(1, 1), SetResize(1, 0),
EndContainer(),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(),