82 int selected = this->sel_index; |
82 int selected = this->sel_index; |
83 |
83 |
84 SetVScrollCount(this, v->num_orders * 2); |
84 SetVScrollCount(this, v->num_orders * 2); |
85 |
85 |
86 if (v->owner == _local_player) { |
86 if (v->owner == _local_player) { |
87 if (selected == -1) { |
87 bool disable = true; |
88 this->DisableWidget(TTV_CHANGE_TIME); |
88 if (selected != -1) { |
89 this->DisableWidget(TTV_CLEAR_TIME); |
|
90 } else if (selected % 2 == 1) { |
|
91 this->EnableWidget(TTV_CHANGE_TIME); |
|
92 this->EnableWidget(TTV_CLEAR_TIME); |
|
93 } else { |
|
94 const Order *order = GetVehicleOrder(v, (selected + 1) / 2); |
89 const Order *order = GetVehicleOrder(v, (selected + 1) / 2); |
95 bool disable = order == NULL || !order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION); |
90 if (selected % 2 == 1) { |
96 |
91 disable = order != NULL && order->IsType(OT_CONDITIONAL); |
97 this->SetWidgetDisabledState(TTV_CHANGE_TIME, disable); |
92 } else { |
98 this->SetWidgetDisabledState(TTV_CLEAR_TIME, disable); |
93 disable = order == NULL || ((!order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) && !order->IsType(OT_CONDITIONAL)); |
|
94 } |
99 } |
95 } |
|
96 |
|
97 this->SetWidgetDisabledState(TTV_CHANGE_TIME, disable); |
|
98 this->SetWidgetDisabledState(TTV_CLEAR_TIME, disable); |
100 |
99 |
101 this->EnableWidget(TTV_RESET_LATENESS); |
100 this->EnableWidget(TTV_RESET_LATENESS); |
102 this->EnableWidget(TTV_AUTOFILL); |
101 this->EnableWidget(TTV_AUTOFILL); |
103 } else { |
102 } else { |
104 this->DisableWidget(TTV_CHANGE_TIME); |
103 this->DisableWidget(TTV_CHANGE_TIME); |
135 order = order->next; |
134 order = order->next; |
136 } |
135 } |
137 } else { |
136 } else { |
138 StringID string; |
137 StringID string; |
139 |
138 |
140 if (order->travel_time == 0) { |
139 if (order->IsType(OT_CONDITIONAL)) { |
|
140 string = STR_TIMETABLE_NO_TRAVEL; |
|
141 } else if (order->travel_time == 0) { |
141 string = STR_TIMETABLE_TRAVEL_NOT_TIMETABLED; |
142 string = STR_TIMETABLE_TRAVEL_NOT_TIMETABLED; |
142 } else { |
143 } else { |
143 SetTimetableParams(0, 1, order->travel_time); |
144 SetTimetableParams(0, 1, order->travel_time); |
144 string = STR_TIMETABLE_TRAVEL_FOR; |
145 string = STR_TIMETABLE_TRAVEL_FOR; |
145 } |
146 } |
159 uint total_time = 0; |
160 uint total_time = 0; |
160 bool complete = true; |
161 bool complete = true; |
161 |
162 |
162 for (const Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) { |
163 for (const Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) { |
163 total_time += order->travel_time + order->wait_time; |
164 total_time += order->travel_time + order->wait_time; |
164 if (order->travel_time == 0) complete = false; |
165 if (order->travel_time == 0 && !order->IsType(OT_CONDITIONAL)) complete = false; |
165 if (order->wait_time == 0 && order->IsType(OT_GOTO_STATION) && !(order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) complete = false; |
166 if (order->wait_time == 0 && order->IsType(OT_GOTO_STATION) && !(order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) complete = false; |
166 } |
167 } |
167 |
168 |
168 if (total_time != 0) { |
169 if (total_time != 0) { |
169 SetTimetableParams(0, 1, total_time); |
170 SetTimetableParams(0, 1, total_time); |