|
@@ -170,7 +170,7 @@ struct TimetableWindow : Window {
|
|
|
show_expected(true)
|
|
|
{
|
|
|
this->CreateNestedTree(desc);
|
|
|
this->vscroll = this->GetScrollbar(WID_TV_SCROLLBAR);
|
|
|
this->vscroll = this->GetScrollbar(WID_VT_SCROLLBAR);
|
|
|
this->UpdateSelectionStates();
|
|
|
this->FinishInitNested(desc, window_number);
|
|
|
|
|
@@ -198,19 +198,19 @@ struct TimetableWindow : Window {
|
|
|
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
|
|
{
|
|
|
switch (widget) {
|
|
|
case WID_TV_ARRIVAL_DEPARTURE_PANEL:
|
|
|
case WID_VT_ARRIVAL_DEPARTURE_PANEL:
|
|
|
SetDParam(0, MAX_YEAR * DAYS_IN_YEAR);
|
|
|
this->deparr_time_width = GetStringBoundingBox(STR_JUST_DATE_TINY).width;
|
|
|
this->deparr_abbr_width = max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_ABBREVIATION).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_ABBREVIATION).width);
|
|
|
size->width = WD_FRAMERECT_LEFT + this->deparr_abbr_width + 10 + this->deparr_time_width + WD_FRAMERECT_RIGHT;
|
|
|
/* FALL THROUGH */
|
|
|
case WID_TV_ARRIVAL_DEPARTURE_SELECTION:
|
|
|
case WID_TV_TIMETABLE_PANEL:
|
|
|
case WID_VT_ARRIVAL_DEPARTURE_SELECTION:
|
|
|
case WID_VT_TIMETABLE_PANEL:
|
|
|
resize->height = FONT_HEIGHT_NORMAL;
|
|
|
size->height = WD_FRAMERECT_TOP + 8 * resize->height + WD_FRAMERECT_BOTTOM;
|
|
|
break;
|
|
|
|
|
|
case WID_TV_SUMMARY_PANEL:
|
|
|
case WID_VT_SUMMARY_PANEL:
|
|
|
size->height = WD_FRAMERECT_TOP + 2 * FONT_HEIGHT_NORMAL + WD_FRAMERECT_BOTTOM;
|
|
|
break;
|
|
|
}
|
|
@@ -218,7 +218,7 @@ struct TimetableWindow : Window {
|
|
|
|
|
|
int GetOrderFromTimetableWndPt(int y, const Vehicle *v)
|
|
|
{
|
|
|
int sel = (y - this->GetWidget<NWidgetBase>(WID_TV_TIMETABLE_PANEL)->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL;
|
|
|
int sel = (y - this->GetWidget<NWidgetBase>(WID_VT_TIMETABLE_PANEL)->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL;
|
|
|
|
|
|
if ((uint)sel >= this->vscroll->GetCapacity()) return INVALID_ORDER;
|
|
|
|
|
@@ -320,23 +320,23 @@ struct TimetableWindow : Window {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
this->SetWidgetDisabledState(WID_TV_CHANGE_TIME, disable);
|
|
|
this->SetWidgetDisabledState(WID_TV_CLEAR_TIME, disable);
|
|
|
this->SetWidgetDisabledState(WID_TV_SHARED_ORDER_LIST, !v->IsOrderListShared());
|
|
|
this->SetWidgetDisabledState(WID_VT_CHANGE_TIME, disable);
|
|
|
this->SetWidgetDisabledState(WID_VT_CLEAR_TIME, disable);
|
|
|
this->SetWidgetDisabledState(WID_VT_SHARED_ORDER_LIST, !v->IsOrderListShared());
|
|
|
|
|
|
this->EnableWidget(WID_TV_START_DATE);
|
|
|
this->EnableWidget(WID_TV_RESET_LATENESS);
|
|
|
this->EnableWidget(WID_TV_AUTOFILL);
|
|
|
this->EnableWidget(WID_VT_START_DATE);
|
|
|
this->EnableWidget(WID_VT_RESET_LATENESS);
|
|
|
this->EnableWidget(WID_VT_AUTOFILL);
|
|
|
} else {
|
|
|
this->DisableWidget(WID_TV_START_DATE);
|
|
|
this->DisableWidget(WID_TV_CHANGE_TIME);
|
|
|
this->DisableWidget(WID_TV_CLEAR_TIME);
|
|
|
this->DisableWidget(WID_TV_RESET_LATENESS);
|
|
|
this->DisableWidget(WID_TV_AUTOFILL);
|
|
|
this->DisableWidget(WID_TV_SHARED_ORDER_LIST);
|
|
|
this->DisableWidget(WID_VT_START_DATE);
|
|
|
this->DisableWidget(WID_VT_CHANGE_TIME);
|
|
|
this->DisableWidget(WID_VT_CLEAR_TIME);
|
|
|
this->DisableWidget(WID_VT_RESET_LATENESS);
|
|
|
this->DisableWidget(WID_VT_AUTOFILL);
|
|
|
this->DisableWidget(WID_VT_SHARED_ORDER_LIST);
|
|
|
}
|
|
|
|
|
|
this->SetWidgetLoweredState(WID_TV_AUTOFILL, HasBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE));
|
|
|
this->SetWidgetLoweredState(WID_VT_AUTOFILL, HasBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE));
|
|
|
|
|
|
this->DrawWidgets();
|
|
|
}
|
|
@@ -344,8 +344,8 @@ struct TimetableWindow : Window {
|
|
|
virtual void SetStringParameters(int widget) const
|
|
|
{
|
|
|
switch (widget) {
|
|
|
case WID_TV_CAPTION: SetDParam(0, this->vehicle->index); break;
|
|
|
case WID_TV_EXPECTED: SetDParam(0, this->show_expected ? STR_TIMETABLE_EXPECTED : STR_TIMETABLE_SCHEDULED); break;
|
|
|
case WID_VT_CAPTION: SetDParam(0, this->vehicle->index); break;
|
|
|
case WID_VT_EXPECTED: SetDParam(0, this->show_expected ? STR_TIMETABLE_EXPECTED : STR_TIMETABLE_SCHEDULED); break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -355,7 +355,7 @@ struct TimetableWindow : Window {
|
|
|
int selected = this->sel_index;
|
|
|
|
|
|
switch (widget) {
|
|
|
case WID_TV_TIMETABLE_PANEL: {
|
|
|
case WID_VT_TIMETABLE_PANEL: {
|
|
|
int y = r.top + WD_FRAMERECT_TOP;
|
|
|
int i = this->vscroll->GetPosition();
|
|
|
VehicleOrderID order_id = (i + 1) / 2;
|
|
@@ -408,7 +408,7 @@ struct TimetableWindow : Window {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case WID_TV_ARRIVAL_DEPARTURE_PANEL: {
|
|
|
case WID_VT_ARRIVAL_DEPARTURE_PANEL: {
|
|
|
/* Arrival and departure times are handled in an all-or-nothing approach,
|
|
|
* i.e. are only shown if we can calculate all times.
|
|
|
* Excluding order lists with only one order makes some things easier.
|
|
@@ -459,7 +459,7 @@ struct TimetableWindow : Window {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case WID_TV_SUMMARY_PANEL: {
|
|
|
case WID_VT_SUMMARY_PANEL: {
|
|
|
int y = r.top + WD_FRAMERECT_TOP;
|
|
|
|
|
|
Ticks total_time = v->orders.list != NULL ? v->orders.list->GetTimetableDurationIncomplete() : 0;
|
|
@@ -505,11 +505,11 @@ struct TimetableWindow : Window {
|
|
|
const Vehicle *v = this->vehicle;
|
|
|
|
|
|
switch (widget) {
|
|
|
case WID_TV_ORDER_VIEW: // Order view button
|
|
|
case WID_VT_ORDER_VIEW: // Order view button
|
|
|
ShowOrdersWindow(v);
|
|
|
break;
|
|
|
|
|
|
case WID_TV_TIMETABLE_PANEL: { // Main panel.
|
|
|
case WID_VT_TIMETABLE_PANEL: { // Main panel.
|
|
|
int selected = GetOrderFromTimetableWndPt(pt.y, v);
|
|
|
|
|
|
this->DeleteChildWindows();
|
|
@@ -517,11 +517,11 @@ struct TimetableWindow : Window {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case WID_TV_START_DATE: // Change the date that the timetable starts.
|
|
|
case WID_VT_START_DATE: // Change the date that the timetable starts.
|
|
|
ShowSetDateWindow(this, v->index, _date, _cur_year, _cur_year + 15, ChangeTimetableStartCallback);
|
|
|
break;
|
|
|
|
|
|
case WID_TV_CHANGE_TIME: { // "Wait For" button.
|
|
|
case WID_VT_CHANGE_TIME: { // "Wait For" button.
|
|
|
int selected = this->sel_index;
|
|
|
VehicleOrderID real = (selected + 1) / 2;
|
|
|
|
|
@@ -544,17 +544,17 @@ struct TimetableWindow : Window {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case WID_TV_CLEAR_TIME: { // Clear waiting time button.
|
|
|
case WID_VT_CLEAR_TIME: { // Clear waiting time button.
|
|
|
uint32 p1 = PackTimetableArgs(v, this->sel_index);
|
|
|
DoCommandP(0, p1, 0, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case WID_TV_RESET_LATENESS: // Reset the vehicle's late counter.
|
|
|
case WID_VT_RESET_LATENESS: // Reset the vehicle's late counter.
|
|
|
DoCommandP(0, v->index, 0, CMD_SET_VEHICLE_ON_TIME | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
|
|
|
break;
|
|
|
|
|
|
case WID_TV_AUTOFILL: { // Autofill the timetable.
|
|
|
case WID_VT_AUTOFILL: { // Autofill the timetable.
|
|
|
uint32 p2 = 0;
|
|
|
if (!HasBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE)) SetBit(p2, 0);
|
|
|
if (_ctrl_pressed) SetBit(p2, 1);
|
|
@@ -562,11 +562,11 @@ struct TimetableWindow : Window {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case WID_TV_EXPECTED:
|
|
|
case WID_VT_EXPECTED:
|
|
|
this->show_expected = !this->show_expected;
|
|
|
break;
|
|
|
|
|
|
case WID_TV_SHARED_ORDER_LIST:
|
|
|
case WID_VT_SHARED_ORDER_LIST:
|
|
|
ShowVehicleListWindow(v);
|
|
|
break;
|
|
|
}
|
|
@@ -593,7 +593,7 @@ struct TimetableWindow : Window {
|
|
|
virtual void OnResize()
|
|
|
{
|
|
|
/* Update the scroll bar */
|
|
|
this->vscroll->SetCapacityFromWidget(this, WID_TV_TIMETABLE_PANEL, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM);
|
|
|
this->vscroll->SetCapacityFromWidget(this, WID_VT_TIMETABLE_PANEL, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -601,47 +601,47 @@ struct TimetableWindow : Window {
|
|
|
*/
|
|
|
void UpdateSelectionStates()
|
|
|
{
|
|
|
this->GetWidget<NWidgetStacked>(WID_TV_ARRIVAL_DEPARTURE_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : SZSP_NONE);
|
|
|
this->GetWidget<NWidgetStacked>(WID_TV_EXPECTED_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : 1);
|
|
|
this->GetWidget<NWidgetStacked>(WID_VT_ARRIVAL_DEPARTURE_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : SZSP_NONE);
|
|
|
this->GetWidget<NWidgetStacked>(WID_VT_EXPECTED_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : 1);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
static const NWidgetPart _nested_timetable_widgets[] = {
|
|
|
NWidget(NWID_HORIZONTAL),
|
|
|
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
|
|
|
NWidget(WWT_CAPTION, COLOUR_GREY, WID_TV_CAPTION), SetDataTip(STR_TIMETABLE_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_ORDER_VIEW), SetMinimalSize(61, 14), SetDataTip( STR_TIMETABLE_ORDER_VIEW, STR_TIMETABLE_ORDER_VIEW_TOOLTIP),
|
|
|
NWidget(WWT_CAPTION, COLOUR_GREY, WID_VT_CAPTION), SetDataTip(STR_TIMETABLE_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_ORDER_VIEW), SetMinimalSize(61, 14), SetDataTip( STR_TIMETABLE_ORDER_VIEW, STR_TIMETABLE_ORDER_VIEW_TOOLTIP),
|
|
|
NWidget(WWT_SHADEBOX, COLOUR_GREY),
|
|
|
NWidget(WWT_STICKYBOX, COLOUR_GREY),
|
|
|
EndContainer(),
|
|
|
NWidget(NWID_HORIZONTAL),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY, WID_TV_TIMETABLE_PANEL), SetMinimalSize(388, 82), SetResize(1, 10), SetDataTip(STR_NULL, STR_TIMETABLE_TOOLTIP), SetScrollbar(WID_TV_SCROLLBAR), EndContainer(),
|
|
|
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_TV_ARRIVAL_DEPARTURE_SELECTION),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY, WID_TV_ARRIVAL_DEPARTURE_PANEL), SetMinimalSize(110, 0), SetFill(0, 1), SetDataTip(STR_NULL, STR_TIMETABLE_TOOLTIP), SetScrollbar(WID_TV_SCROLLBAR), EndContainer(),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY, WID_VT_TIMETABLE_PANEL), SetMinimalSize(388, 82), SetResize(1, 10), SetDataTip(STR_NULL, STR_TIMETABLE_TOOLTIP), SetScrollbar(WID_VT_SCROLLBAR), EndContainer(),
|
|
|
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_ARRIVAL_DEPARTURE_SELECTION),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY, WID_VT_ARRIVAL_DEPARTURE_PANEL), SetMinimalSize(110, 0), SetFill(0, 1), SetDataTip(STR_NULL, STR_TIMETABLE_TOOLTIP), SetScrollbar(WID_VT_SCROLLBAR), EndContainer(),
|
|
|
EndContainer(),
|
|
|
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_TV_SCROLLBAR),
|
|
|
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_VT_SCROLLBAR),
|
|
|
EndContainer(),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY, WID_TV_SUMMARY_PANEL), SetMinimalSize(400, 22), SetResize(1, 0), EndContainer(),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY, WID_VT_SUMMARY_PANEL), SetMinimalSize(400, 22), SetResize(1, 0), EndContainer(),
|
|
|
NWidget(NWID_HORIZONTAL),
|
|
|
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
|
|
NWidget(NWID_VERTICAL, NC_EQUALSIZE),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_CHANGE_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CHANGE_TIME, STR_TIMETABLE_WAIT_TIME_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_CLEAR_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CLEAR_TIME, STR_TIMETABLE_CLEAR_TIME_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CHANGE_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CHANGE_TIME, STR_TIMETABLE_WAIT_TIME_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CLEAR_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CLEAR_TIME, STR_TIMETABLE_CLEAR_TIME_TOOLTIP),
|
|
|
EndContainer(),
|
|
|
NWidget(NWID_VERTICAL, NC_EQUALSIZE),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_START_DATE), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_STARTING_DATE, STR_TIMETABLE_STARTING_DATE_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_RESET_LATENESS), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_RESET_LATENESS, STR_TIMETABLE_RESET_LATENESS_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_START_DATE), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_STARTING_DATE, STR_TIMETABLE_STARTING_DATE_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_RESET_LATENESS), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_RESET_LATENESS, STR_TIMETABLE_RESET_LATENESS_TOOLTIP),
|
|
|
EndContainer(),
|
|
|
NWidget(NWID_VERTICAL, NC_EQUALSIZE),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_AUTOFILL), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_AUTOFILL, STR_TIMETABLE_AUTOFILL_TOOLTIP),
|
|
|
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_TV_EXPECTED_SELECTION),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TV_EXPECTED), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_BLACK_STRING, STR_TIMETABLE_EXPECTED_TOOLTIP),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_AUTOFILL), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_AUTOFILL, STR_TIMETABLE_AUTOFILL_TOOLTIP),
|
|
|
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_EXPECTED_SELECTION),
|
|
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_EXPECTED), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_BLACK_STRING, STR_TIMETABLE_EXPECTED_TOOLTIP),
|
|
|
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(),
|
|
|
EndContainer(),
|
|
|
EndContainer(),
|
|
|
EndContainer(),
|
|
|
NWidget(NWID_VERTICAL, NC_EQUALSIZE),
|
|
|
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TV_SHARED_ORDER_LIST), SetFill(0, 1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
|
|
|
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VT_SHARED_ORDER_LIST), SetFill(0, 1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP),
|
|
|
NWidget(WWT_RESIZEBOX, COLOUR_GREY), SetFill(0, 1),
|
|
|
EndContainer(),
|
|
|
EndContainer(),
|