Scheduled dispatch: Add clear schedule GUI function

Add management dropdown box to window
pull/348/head
Jonathan G Rennison 3 years ago
parent 7b0c083c11
commit 66ce6c5090

@ -272,6 +272,7 @@ CommandProc CmdScheduledDispatchSetDuration;
CommandProc CmdScheduledDispatchSetStartDate;
CommandProc CmdScheduledDispatchSetDelay;
CommandProc CmdScheduledDispatchResetLastDispatch;
CommandProc CmdScheduledDispatchClear;
CommandProc CmdAddPlan;
CommandProcEx CmdAddPlanLine;
@ -507,6 +508,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdScheduledDispatchSetStartDate, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SCHEDULED_DISPATCH_SET_START_DATE
DEF_CMD(CmdScheduledDispatchSetDelay, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SCHEDULED_DISPATCH_SET_DELAY
DEF_CMD(CmdScheduledDispatchResetLastDispatch, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SCHEDULED_DISPATCH_RESET_LAST_DISPATCH
DEF_CMD(CmdScheduledDispatchClear, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SCHEDULED_DISPATCH_CLEAR
DEF_CMD(CmdAddPlan, CMD_NO_TEST, CMDT_OTHER_MANAGEMENT ), // CMD_ADD_PLAN
DEF_CMD(CmdAddPlanLine, CMD_NO_TEST, CMDT_OTHER_MANAGEMENT ), // CMD_ADD_PLAN_LINE

@ -449,6 +449,7 @@ enum Commands {
CMD_SCHEDULED_DISPATCH_SET_START_DATE, ///< scheduled dispatch set start date
CMD_SCHEDULED_DISPATCH_SET_DELAY, ///< scheduled dispatch set maximum allow delay
CMD_SCHEDULED_DISPATCH_RESET_LAST_DISPATCH, ///< scheduled dispatch reset last dispatch date
CMD_SCHEDULED_DISPATCH_CLEAR, ///< scheduled dispatch clear schedule
CMD_ADD_PLAN,
CMD_ADD_PLAN_LINE,

@ -7098,6 +7098,10 @@ STR_SCHDISPATCH_DELAY_CAPTION_DAY :{BLACK}Delay (d
STR_SCHDISPATCH_DELAY_CAPTION_TICKS :{BLACK}Delay (ticks)
STR_SCHDISPATCH_RESET_LAST_DISPATCH :{BLACK}Reset Last Dispatched
STR_SCHDISPATCH_RESET_LAST_DISPATCH_TOOLTIP :{BLACK}Reset when a vehicle was last dispatched from the schedule.
STR_SCHDISPATCH_CLEAR :{BLACK}Clear Departure Slots
STR_SCHDISPATCH_CLEAR_TOOLTIP :{BLACK}Clear all departure slots from the schedule.
STR_SCHDISPATCH_MANAGE :{BLACK}Manage Schedule
STR_SCHDISPATCH_MANAGE_TOOLTIP :{STRING}{}{}{STRING}
STR_SCHDISPATCH_SUMMARY_LAST_DEPARTURE_PAST :{BLACK}Last departure at {DATE_WALLCLOCK_TINY}.
STR_SCHDISPATCH_SUMMARY_LAST_DEPARTURE_FUTURE :{BLACK}Last departure has not left yet, it will depart at {DATE_WALLCLOCK_TINY}.

@ -761,6 +761,7 @@ public:
void SetScheduledDispatch(std::vector<uint32> dispatch_list);
void AddScheduledDispatch(uint32 offset);
void RemoveScheduledDispatch(uint32 offset);
void ClearScheduledDispatch() { this->scheduled_dispatch.clear(); }
void UpdateScheduledDispatch();
void ResetScheduledDispatch();

@ -276,6 +276,36 @@ CommandCost CmdScheduledDispatchResetLastDispatch(TileIndex tile, DoCommandFlag
return CommandCost();
}
/**
* Clear scheduled dispatch schedule
*
* @param tile Not used.
* @param flags Operation to perform.
* @param p1 Vehicle index
* @param p2 Not used
* @param text unused
* @return the cost of this operation or an error
*/
CommandCost CmdScheduledDispatchClear(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
VehicleID veh = GB(p1, 0, 20);
Vehicle *v = Vehicle::GetIfValid(veh);
if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR;
CommandCost ret = CheckOwnership(v->owner);
if (ret.Failed()) return ret;
if (v->orders.list == nullptr) return CMD_ERROR;
if (flags & DC_EXEC) {
v->orders.list->ClearScheduledDispatch();
SetWindowDirty(WC_SCHDISPATCH_SLOTS, v->index);
}
return CommandCost();
}
/**
* Set scheduled dispatch slot list.
* @param dispatch_list The offset time list, must be correctly sorted.

@ -47,7 +47,7 @@ enum SchdispatchWidgets {
WID_SCHDISPATCH_SET_DURATION, ///< Duration button
WID_SCHDISPATCH_SET_START_DATE, ///< Start Date button
WID_SCHDISPATCH_SET_DELAY, ///< Delat button
WID_SCHDISPATCH_RESET_DISPATCH, ///< Reset dispatch button
WID_SCHDISPATCH_MANAGEMENT, ///< Management button
};
/**
@ -185,6 +185,11 @@ struct SchdispatchWindow : Window {
uint flag_width;
uint flag_height;
enum ManagementDropdown {
SCH_MD_RESET_LAST_DISPATCHED,
SCH_MD_CLEAR_SCHEDULE,
};
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{
switch (widget) {
@ -259,7 +264,7 @@ struct SchdispatchWindow : Window {
this->SetWidgetDisabledState(WID_SCHDISPATCH_SET_DURATION, disabled);
this->SetWidgetDisabledState(WID_SCHDISPATCH_SET_START_DATE, disabled);
this->SetWidgetDisabledState(WID_SCHDISPATCH_SET_DELAY, disabled);
this->SetWidgetDisabledState(WID_SCHDISPATCH_RESET_DISPATCH, disabled);
this->SetWidgetDisabledState(WID_SCHDISPATCH_MANAGEMENT, disabled);
this->vscroll->SetCount(CeilDiv(this->item_count, this->num_columns));
@ -287,6 +292,14 @@ struct SchdispatchWindow : Window {
break;
}
case WID_SCHDISPATCH_MANAGEMENT: {
uint64 params[2];
params[0] = STR_SCHDISPATCH_RESET_LAST_DISPATCH_TOOLTIP;
params[1] = STR_SCHDISPATCH_CLEAR_TOOLTIP;
GuiShowTooltips(this, STR_SCHDISPATCH_MANAGE_TOOLTIP, 2, params, close_cond);
return true;
}
default:
break;
}
@ -553,8 +566,11 @@ struct SchdispatchWindow : Window {
break;
}
case WID_SCHDISPATCH_RESET_DISPATCH: {
DoCommandP(0, v->index, 0, CMD_SCHEDULED_DISPATCH_RESET_LAST_DISPATCH | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
case WID_SCHDISPATCH_MANAGEMENT: {
DropDownList list;
list.emplace_back(new DropDownListStringItem(STR_SCHDISPATCH_RESET_LAST_DISPATCH, SCH_MD_RESET_LAST_DISPATCHED, false));
list.emplace_back(new DropDownListStringItem(STR_SCHDISPATCH_CLEAR, SCH_MD_CLEAR_SCHEDULE, false));
ShowDropDownList(this, std::move(list), -1, WID_SCHDISPATCH_MANAGEMENT);
break;
}
}
@ -562,6 +578,26 @@ struct SchdispatchWindow : Window {
this->SetDirty();
}
void OnDropdownSelect(int widget, int index) override
{
switch (widget) {
case WID_SCHDISPATCH_MANAGEMENT: {
switch((ManagementDropdown)index) {
case SCH_MD_RESET_LAST_DISPATCHED:
DoCommandP(0, this->vehicle->index, 0, CMD_SCHEDULED_DISPATCH_RESET_LAST_DISPATCH | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
break;
case SCH_MD_CLEAR_SCHEDULE:
DoCommandP(0, this->vehicle->index, 0, CMD_SCHEDULED_DISPATCH_CLEAR | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
break;
}
}
default:
break;
}
}
virtual void OnQueryTextFinished(char *str) override
{
if (str == nullptr) return;
@ -682,7 +718,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_PUSHTXTBTN, COLOUR_GREY, WID_SCHDISPATCH_RESET_DISPATCH), SetDataTip(STR_SCHDISPATCH_RESET_LAST_DISPATCH, STR_SCHDISPATCH_RESET_LAST_DISPATCH_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),
EndContainer(),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(),

Loading…
Cancel
Save