Scheduled dispatch: Add clear schedule GUI function
Add management dropdown box to window
This commit is contained in:
@@ -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(),
|
||||
|
Reference in New Issue
Block a user