File diff r18694:5425816ac38e → r18695:49da03765dcb
src/timetable_gui.cpp
Show inline comments
 
@@ -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(),