80 /* |
99 /* |
81 * Calculation description: |
100 * Calculation description: |
82 * 15 = 14 (w->widget[ORDER_WIDGET_ORDER_LIST].top) + 1 (frame-line) |
101 * 15 = 14 (w->widget[ORDER_WIDGET_ORDER_LIST].top) + 1 (frame-line) |
83 * 10 = order text hight |
102 * 10 = order text hight |
84 */ |
103 */ |
85 int sel = (y - 15) / 10; |
104 int sel = (y - w->widget[ORDER_WIDGET_ORDER_LIST].top - 1) / 10; |
86 |
105 |
87 if ((uint)sel >= w->vscroll.cap) return INVALID_ORDER; |
106 if ((uint)sel >= w->vscroll.cap) return INVALID_ORDER; |
88 |
107 |
89 sel += w->vscroll.pos; |
108 sel += w->vscroll.pos; |
90 |
109 |
91 return (sel <= v->num_orders && sel >= 0) ? sel : INVALID_ORDER; |
110 return (sel <= v->num_orders && sel >= 0) ? sel : INVALID_ORDER; |
92 } |
111 } |
93 |
112 |
94 static StringID _station_order_strings[][7] = { |
113 /** Order load types that could be given to station orders. */ |
|
114 static const StringID _station_load_types[][5] = { |
95 { |
115 { |
96 STR_8806_GO_TO, |
116 STR_EMPTY, |
97 STR_GO_TO_TRANSFER, |
117 INVALID_STRING_ID, |
98 STR_8807_GO_TO_UNLOAD, |
118 STR_ORDER_FULL_LOAD, |
99 STR_GO_TO_TRANSFER_UNLOAD, |
119 STR_ORDER_FULL_LOAD_ANY, |
100 STR_8808_GO_TO_LOAD, |
120 STR_ORDER_NO_LOAD, |
101 STR_GO_TO_TRANSFER_LOAD |
|
102 }, { |
121 }, { |
103 STR_880A_GO_NON_STOP_TO, |
122 STR_ORDER_UNLOAD, |
104 STR_GO_TO_NON_STOP_TRANSFER, |
123 INVALID_STRING_ID, |
105 STR_880B_GO_NON_STOP_TO_UNLOAD, |
124 STR_ORDER_UNLOAD_FULL_LOAD, |
106 STR_GO_TO_NON_STOP_TRANSFER_UNLOAD, |
125 STR_ORDER_UNLOAD_FULL_LOAD_ANY, |
107 STR_880C_GO_NON_STOP_TO_LOAD, |
126 STR_ORDER_UNLOAD_NO_LOAD, |
108 STR_GO_TO_NON_STOP_TRANSFER_LOAD |
127 }, { |
109 } |
128 STR_ORDER_TRANSFER, |
110 }; |
129 INVALID_STRING_ID, |
|
130 STR_ORDER_TRANSFER_FULL_LOAD, |
|
131 STR_ORDER_TRANSFER_FULL_LOAD_ANY, |
|
132 STR_ORDER_TRANSFER_NO_LOAD, |
|
133 }, { |
|
134 /* Unload and transfer do not work together. */ |
|
135 INVALID_STRING_ID, |
|
136 INVALID_STRING_ID, |
|
137 INVALID_STRING_ID, |
|
138 INVALID_STRING_ID, |
|
139 }, { |
|
140 STR_ORDER_NO_UNLOAD, |
|
141 INVALID_STRING_ID, |
|
142 STR_ORDER_NO_UNLOAD_FULL_LOAD, |
|
143 STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY, |
|
144 INVALID_STRING_ID, |
|
145 } |
|
146 }; |
|
147 |
|
148 static const StringID _order_non_stop_drowdown[] = { |
|
149 STR_ORDER_GO_TO, |
|
150 STR_ORDER_GO_NON_STOP_TO, |
|
151 STR_ORDER_GO_VIA, |
|
152 STR_ORDER_GO_NON_STOP_VIA, |
|
153 INVALID_STRING_ID |
|
154 }; |
|
155 |
|
156 static const StringID _order_full_load_drowdown[] = { |
|
157 STR_ORDER_DROP_LOAD_IF_POSSIBLE, |
|
158 STR_EMPTY, |
|
159 STR_ORDER_DROP_FULL_LOAD_ALL, |
|
160 STR_ORDER_DROP_FULL_LOAD_ANY, |
|
161 STR_ORDER_DROP_NO_LOADING, |
|
162 INVALID_STRING_ID |
|
163 }; |
|
164 |
|
165 static const StringID _order_unload_drowdown[] = { |
|
166 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED, |
|
167 STR_ORDER_DROP_UNLOAD, |
|
168 STR_ORDER_DROP_TRANSFER, |
|
169 STR_EMPTY, |
|
170 STR_ORDER_DROP_NO_UNLOADING, |
|
171 INVALID_STRING_ID |
|
172 }; |
|
173 |
|
174 static const StringID _order_goto_dropdown[] = { |
|
175 STR_ORDER_GO_TO, |
|
176 STR_ORDER_GO_TO_NEAREST_DEPOT, |
|
177 STR_ORDER_CONDITIONAL, |
|
178 INVALID_STRING_ID |
|
179 }; |
|
180 |
|
181 static const StringID _order_goto_dropdown_aircraft[] = { |
|
182 STR_ORDER_GO_TO, |
|
183 STR_ORDER_GO_TO_NEAREST_HANGAR, |
|
184 STR_ORDER_CONDITIONAL, |
|
185 INVALID_STRING_ID |
|
186 }; |
|
187 |
|
188 static const StringID _order_conditional_variable[] = { |
|
189 STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE, |
|
190 STR_ORDER_CONDITIONAL_RELIABILITY, |
|
191 STR_ORDER_CONDITIONAL_MAX_SPEED, |
|
192 STR_ORDER_CONDITIONAL_AGE, |
|
193 STR_ORDER_CONDITIONAL_REQUIRES_SERVICE, |
|
194 STR_ORDER_CONDITIONAL_UNCONDITIONALLY, |
|
195 INVALID_STRING_ID, |
|
196 }; |
|
197 |
|
198 static const StringID _order_conditional_condition[] = { |
|
199 STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS, |
|
200 STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS, |
|
201 STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN, |
|
202 STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS, |
|
203 STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN, |
|
204 STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS, |
|
205 STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE, |
|
206 STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE, |
|
207 INVALID_STRING_ID, |
|
208 }; |
|
209 |
|
210 extern uint ConvertSpeedToDisplaySpeed(uint speed); |
|
211 extern uint ConvertDisplaySpeedToSpeed(uint speed); |
|
212 |
111 |
213 |
112 static void DrawOrdersWindow(Window *w) |
214 static void DrawOrdersWindow(Window *w) |
113 { |
215 { |
114 const Vehicle *v; |
216 const Vehicle *v = GetVehicle(w->window_number); |
115 const Order *order; |
217 bool shared_orders = v->IsOrderListShared(); |
116 StringID str; |
|
117 int sel; |
|
118 int y, i; |
|
119 bool shared_orders; |
|
120 |
|
121 v = GetVehicle(w->window_number); |
|
122 |
|
123 shared_orders = v->IsOrderListShared(); |
|
124 |
218 |
125 SetVScrollCount(w, v->num_orders + 1); |
219 SetVScrollCount(w, v->num_orders + 1); |
126 |
220 |
127 sel = OrderGetSel(w); |
221 int sel = OrderGetSel(w); |
128 SetDParam(2, STR_8827_FULL_LOAD); |
222 const Order *order = GetVehicleOrder(v, sel); |
129 |
|
130 order = GetVehicleOrder(v, sel); |
|
131 |
223 |
132 if (v->owner == _local_player) { |
224 if (v->owner == _local_player) { |
|
225 /* Set the strings for the dropdown boxes. */ |
|
226 w->widget[ORDER_WIDGET_NON_STOP].data = _order_non_stop_drowdown[order == NULL ? 0 : order->GetNonStopType()]; |
|
227 w->widget[ORDER_WIDGET_FULL_LOAD].data = _order_full_load_drowdown[order == NULL ? 0 : order->GetLoadType()]; |
|
228 w->widget[ORDER_WIDGET_UNLOAD].data = _order_unload_drowdown[order == NULL ? 0 : order->GetUnloadType()]; |
|
229 w->widget[ORDER_WIDGET_COND_VARIABLE].data = _order_conditional_variable[order == NULL ? 0 : order->GetConditionVariable()]; |
|
230 w->widget[ORDER_WIDGET_COND_COMPARATOR].data = _order_conditional_condition[order == NULL ? 0 : order->GetConditionComparator()]; |
|
231 |
133 /* skip */ |
232 /* skip */ |
134 w->SetWidgetDisabledState(ORDER_WIDGET_SKIP, v->num_orders <= 1); |
233 w->SetWidgetDisabledState(ORDER_WIDGET_SKIP, v->num_orders <= 1); |
135 |
234 |
136 /* delete */ |
235 /* delete */ |
137 w->SetWidgetDisabledState(ORDER_WIDGET_DELETE, |
236 w->SetWidgetDisabledState(ORDER_WIDGET_DELETE, |
138 (uint)v->num_orders + ((shared_orders || v->num_orders != 0) ? 1 : 0) <= (uint)WP(w, order_d).sel); |
237 (uint)v->num_orders + ((shared_orders || v->num_orders != 0) ? 1 : 0) <= (uint)WP(w, order_d).sel); |
139 |
238 |
140 /* non-stop only for trains */ |
239 /* non-stop only for trains */ |
141 w->SetWidgetDisabledState(ORDER_WIDGET_NON_STOP, v->type != VEH_TRAIN || order == NULL); |
240 w->SetWidgetDisabledState(ORDER_WIDGET_NON_STOP, v->type != VEH_TRAIN || order == NULL); |
142 w->SetWidgetDisabledState(ORDER_WIDGET_FULL_LOAD, order == NULL); // full load |
241 w->SetWidgetDisabledState(ORDER_WIDGET_FULL_LOAD, order == NULL || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) != 0); // full load |
143 w->SetWidgetDisabledState(ORDER_WIDGET_UNLOAD, order == NULL); // unload |
242 w->SetWidgetDisabledState(ORDER_WIDGET_UNLOAD, order == NULL || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) != 0); // unload |
144 w->SetWidgetDisabledState(ORDER_WIDGET_TRANSFER, order == NULL); // transfer |
|
145 /* Disable list of vehicles with the same shared orders if there is no list */ |
243 /* Disable list of vehicles with the same shared orders if there is no list */ |
146 w->SetWidgetDisabledState(ORDER_WIDGET_SHARED_ORDER_LIST, !shared_orders || v->orders == NULL); |
244 w->SetWidgetDisabledState(ORDER_WIDGET_SHARED_ORDER_LIST, !shared_orders || v->orders == NULL); |
147 w->SetWidgetDisabledState(ORDER_WIDGET_REFIT, order == NULL); // Refit |
245 w->SetWidgetDisabledState(ORDER_WIDGET_REFIT, order == NULL); // Refit |
|
246 w->SetWidgetDisabledState(ORDER_WIDGET_SERVICE, order == NULL); // Refit |
148 w->HideWidget(ORDER_WIDGET_REFIT); // Refit |
247 w->HideWidget(ORDER_WIDGET_REFIT); // Refit |
149 } else { |
248 w->HideWidget(ORDER_WIDGET_SERVICE); // Service |
150 w->DisableWidget(ORDER_WIDGET_TRANSFER); |
249 |
151 } |
250 w->HideWidget(ORDER_WIDGET_COND_VARIABLE); |
152 |
251 w->HideWidget(ORDER_WIDGET_COND_COMPARATOR); |
153 w->ShowWidget(ORDER_WIDGET_UNLOAD); // Unload |
252 w->HideWidget(ORDER_WIDGET_COND_VALUE); |
|
253 } |
|
254 |
|
255 w->ShowWidget(ORDER_WIDGET_NON_STOP); |
|
256 w->ShowWidget(ORDER_WIDGET_UNLOAD); |
|
257 w->ShowWidget(ORDER_WIDGET_FULL_LOAD); |
154 |
258 |
155 if (order != NULL) { |
259 if (order != NULL) { |
156 switch (order->GetType()) { |
260 switch (order->GetType()) { |
157 case OT_GOTO_STATION: |
261 case OT_GOTO_STATION: |
158 if (!GetStation(order->GetDestination())->IsBuoy()) break; |
262 if (!GetStation(order->GetDestination())->IsBuoy()) break; |
159 /* Fall-through */ |
263 /* Fall-through */ |
160 |
264 |
161 case OT_GOTO_WAYPOINT: |
265 case OT_GOTO_WAYPOINT: |
162 w->DisableWidget(ORDER_WIDGET_FULL_LOAD); |
266 w->DisableWidget(ORDER_WIDGET_FULL_LOAD); |
163 w->DisableWidget(ORDER_WIDGET_UNLOAD); |
267 w->DisableWidget(ORDER_WIDGET_UNLOAD); |
164 w->DisableWidget(ORDER_WIDGET_TRANSFER); |
|
165 break; |
268 break; |
166 |
269 |
167 case OT_GOTO_DEPOT: |
270 case OT_GOTO_DEPOT: |
168 w->DisableWidget(ORDER_WIDGET_TRANSFER); |
271 w->DisableWidget(ORDER_WIDGET_FULL_LOAD); |
169 |
272 |
170 /* Remove unload and replace it with refit */ |
273 /* Remove unload and replace it with refit */ |
171 w->HideWidget(ORDER_WIDGET_UNLOAD); |
274 w->HideWidget(ORDER_WIDGET_UNLOAD); |
172 w->ShowWidget(ORDER_WIDGET_REFIT); |
275 w->ShowWidget(ORDER_WIDGET_REFIT); |
173 SetDParam(2,STR_SERVICE); |
276 w->HideWidget(ORDER_WIDGET_FULL_LOAD); |
|
277 w->ShowWidget(ORDER_WIDGET_SERVICE); |
174 break; |
278 break; |
|
279 |
|
280 case OT_CONDITIONAL: { |
|
281 w->HideWidget(ORDER_WIDGET_NON_STOP); |
|
282 w->HideWidget(ORDER_WIDGET_UNLOAD); |
|
283 w->HideWidget(ORDER_WIDGET_FULL_LOAD); |
|
284 w->ShowWidget(ORDER_WIDGET_COND_VARIABLE); |
|
285 w->ShowWidget(ORDER_WIDGET_COND_COMPARATOR); |
|
286 w->ShowWidget(ORDER_WIDGET_COND_VALUE); |
|
287 |
|
288 OrderConditionVariable ocv = order->GetConditionVariable(); |
|
289 w->SetWidgetDisabledState(ORDER_WIDGET_COND_COMPARATOR, ocv == OCV_UNCONDITIONALLY); |
|
290 w->SetWidgetDisabledState(ORDER_WIDGET_COND_VALUE, ocv == OCV_REQUIRES_SERVICE || ocv == OCV_UNCONDITIONALLY); |
|
291 |
|
292 uint value = order->GetConditionValue(); |
|
293 if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); |
|
294 SetDParam(1, value); |
|
295 } break; |
175 |
296 |
176 default: // every other orders |
297 default: // every other orders |
177 w->DisableWidget(ORDER_WIDGET_NON_STOP); |
298 w->DisableWidget(ORDER_WIDGET_NON_STOP); |
178 w->DisableWidget(ORDER_WIDGET_FULL_LOAD); |
299 w->DisableWidget(ORDER_WIDGET_FULL_LOAD); |
179 w->DisableWidget(ORDER_WIDGET_UNLOAD); |
300 w->DisableWidget(ORDER_WIDGET_UNLOAD); |
181 } |
302 } |
182 |
303 |
183 SetDParam(0, v->index); |
304 SetDParam(0, v->index); |
184 DrawWindowWidgets(w); |
305 DrawWindowWidgets(w); |
185 |
306 |
186 y = 15; |
307 int y = 15; |
187 |
308 |
188 i = w->vscroll.pos; |
309 int i = w->vscroll.pos; |
189 order = GetVehicleOrder(v, i); |
310 order = GetVehicleOrder(v, i); |
|
311 StringID str; |
190 while (order != NULL) { |
312 while (order != NULL) { |
191 str = (v->cur_order_index == i) ? STR_8805 : STR_8804; |
313 str = (v->cur_order_index == i) ? STR_8805 : STR_8804; |
192 SetDParam(3, STR_EMPTY); |
314 SetDParam(6, STR_EMPTY); |
193 |
315 |
194 if (i - w->vscroll.pos < w->vscroll.cap) { |
316 if (i - w->vscroll.pos < w->vscroll.cap) { |
195 SetDParam(1, 6); |
|
196 |
|
197 switch (order->GetType()) { |
317 switch (order->GetType()) { |
198 case OT_DUMMY: |
318 case OT_DUMMY: |
199 SetDParam(1, STR_INVALID_ORDER); |
319 SetDParam(1, STR_INVALID_ORDER); |
200 SetDParam(2, order->GetDestination()); |
320 SetDParam(2, order->GetDestination()); |
201 break; |
321 break; |
202 |
322 |
203 case OT_GOTO_STATION: |
323 case OT_GOTO_STATION: { |
204 SetDParam(1, _station_order_strings[!!order->GetNonStopType()][order->GetLoadType() | order->GetUnloadType()]); |
324 OrderLoadFlags load = order->GetLoadType(); |
205 SetDParam(2, order->GetDestination()); |
325 OrderUnloadFlags unload = order->GetUnloadType(); |
206 break; |
326 |
207 |
327 SetDParam(1, STR_GO_TO_STATION); |
208 case OT_GOTO_DEPOT: { |
328 SetDParam(2, STR_ORDER_GO_TO + (v->type == VEH_TRAIN ? order->GetNonStopType() : 0)); |
209 StringID s = STR_NULL; |
329 SetDParam(3, order->GetDestination()); |
210 |
330 SetDParam(4, (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) ? STR_EMPTY : _station_load_types[unload][load]); |
|
331 } break; |
|
332 |
|
333 case OT_GOTO_DEPOT: |
211 if (v->type == VEH_AIRCRAFT) { |
334 if (v->type == VEH_AIRCRAFT) { |
212 s = STR_GO_TO_AIRPORT_HANGAR; |
335 if (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) { |
213 SetDParam(2, order->GetDestination()); |
336 SetDParam(1, STR_GO_TO_NEAREST_DEPOT); |
|
337 SetDParam(3, STR_ORDER_NEAREST_HANGAR); |
|
338 } else { |
|
339 SetDParam(1, STR_GO_TO_HANGAR); |
|
340 SetDParam(3, order->GetDestination()); |
|
341 } |
|
342 SetDParam(4, STR_EMPTY); |
214 } else { |
343 } else { |
215 SetDParam(2, GetDepot(order->GetDestination())->town_index); |
344 if (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) { |
|
345 SetDParam(1, STR_GO_TO_NEAREST_DEPOT); |
|
346 SetDParam(3, STR_ORDER_NEAREST_DEPOT); |
|
347 } else { |
|
348 SetDParam(1, STR_GO_TO_DEPOT); |
|
349 SetDParam(3, GetDepot(order->GetDestination())->town_index); |
|
350 } |
216 |
351 |
217 switch (v->type) { |
352 switch (v->type) { |
218 case VEH_TRAIN: s = (order->GetNonStopType() & OFB_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break; |
353 case VEH_TRAIN: SetDParam(4, STR_ORDER_TRAIN_DEPOT); break; |
219 case VEH_ROAD: s = STR_GO_TO_ROADVEH_DEPOT; break; |
354 case VEH_ROAD: SetDParam(4, STR_ORDER_ROAD_DEPOT); break; |
220 case VEH_SHIP: s = STR_GO_TO_SHIP_DEPOT; break; |
355 case VEH_SHIP: SetDParam(4, STR_ORDER_SHIP_DEPOT); break; |
221 default: break; |
356 default: NOT_REACHED(); |
222 } |
357 } |
223 } |
358 } |
224 |
359 |
225 if (order->GetDepotOrderType() & OFB_SERVICE_IF_NEEDED) s++; /* service at */ |
360 if (order->GetDepotOrderType() & ODTFB_SERVICE) { |
226 |
361 SetDParam(2, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_ORDER_SERVICE_NON_STOP_AT : STR_ORDER_SERVICE_AT); |
227 SetDParam(1, s); |
362 } else { |
|
363 SetDParam(2, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_ORDER_GO_NON_STOP_TO : STR_ORDER_GO_TO); |
|
364 } |
|
365 |
228 if (order->IsRefit()) { |
366 if (order->IsRefit()) { |
229 SetDParam(3, STR_REFIT_ORDER); |
367 SetDParam(6, STR_REFIT_ORDER); |
230 SetDParam(4, GetCargo(order->GetRefitCargo())->name); |
368 SetDParam(7, GetCargo(order->GetRefitCargo())->name); |
|
369 } |
|
370 break; |
|
371 |
|
372 case OT_GOTO_WAYPOINT: |
|
373 SetDParam(1, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT); |
|
374 SetDParam(2, order->GetDestination()); |
|
375 break; |
|
376 |
|
377 case OT_CONDITIONAL: |
|
378 SetDParam(2, order->GetConditionSkipToOrder() + 1); |
|
379 if (order->GetConditionVariable() == OCV_UNCONDITIONALLY) { |
|
380 SetDParam(1, STR_CONDITIONAL_UNCONDITIONAL); |
231 } else { |
381 } else { |
232 SetDParam(3, STR_EMPTY); |
382 OrderConditionComparator occ = order->GetConditionComparator(); |
|
383 SetDParam(1, (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) ? STR_CONDITIONAL_TRUE_FALSE : STR_CONDITIONAL_NUM); |
|
384 SetDParam(3, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + order->GetConditionVariable()); |
|
385 SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ); |
|
386 |
|
387 uint value = order->GetConditionValue(); |
|
388 if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); |
|
389 SetDParam(5, value); |
233 } |
390 } |
234 break; |
391 break; |
235 } |
392 |
236 |
393 default: NOT_REACHED(); |
237 case OT_GOTO_WAYPOINT: |
|
238 SetDParam(1, (order->GetNonStopType() & OFB_NON_STOP) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT); |
|
239 SetDParam(2, order->GetDestination()); |
|
240 break; |
|
241 |
|
242 default: break; |
|
243 } |
394 } |
244 |
395 |
245 SetDParam(0, i + 1); |
396 SetDParam(0, i + 1); |
246 DrawString(2, y, str, (i == WP(w, order_d).sel) ? TC_WHITE : TC_BLACK); |
397 DrawString(2, y, str, (i == WP(w, order_d).sel) ? TC_WHITE : TC_BLACK); |
247 |
398 |
382 * Handle the click on the goto button. |
531 * Handle the click on the goto button. |
383 * |
532 * |
384 * @param w current window |
533 * @param w current window |
385 * @param v current vehicle |
534 * @param v current vehicle |
386 */ |
535 */ |
387 static void OrderClick_Goto(Window *w, const Vehicle *v) |
536 static void OrderClick_Goto(Window *w, const Vehicle *v, int i) |
388 { |
537 { |
389 w->InvalidateWidget(ORDER_WIDGET_GOTO); |
538 w->InvalidateWidget(ORDER_WIDGET_GOTO); |
390 w->ToggleWidgetLoweredState(ORDER_WIDGET_GOTO); |
539 w->ToggleWidgetLoweredState(ORDER_WIDGET_GOTO); |
391 if (w->IsWidgetLowered(ORDER_WIDGET_GOTO)) { |
540 if (w->IsWidgetLowered(ORDER_WIDGET_GOTO)) { |
392 _place_clicked_vehicle = NULL; |
541 _place_clicked_vehicle = NULL; |
393 SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, PAL_NONE, VHM_RECT, w); |
542 SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, PAL_NONE, VHM_RECT, w); |
|
543 WP(w, order_d).goto_type = OPOS_GOTO; |
394 } else { |
544 } else { |
395 ResetObjectToPlace(); |
545 ResetObjectToPlace(); |
396 } |
546 } |
397 } |
547 } |
398 |
548 |
399 /** |
549 /** |
400 * Handle the click on the full load button. |
550 * Handle the click on the full load button. |
401 * |
551 * |
402 * @param w current window |
552 * @param w current window |
403 * @param v current vehicle |
553 * @param v current vehicle |
404 */ |
554 * @param load_type the way to load. |
405 static void OrderClick_FullLoad(Window *w, const Vehicle *v) |
555 */ |
406 { |
556 static void OrderClick_FullLoad(Window *w, const Vehicle *v, int load_type) |
407 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OF_FULL_LOAD, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
557 { |
|
558 VehicleOrderID sel_ord = OrderGetSel(w); |
|
559 const Order *order = GetVehicleOrder(v, sel_ord); |
|
560 |
|
561 if (order->GetLoadType() == load_type) return; |
|
562 |
|
563 if (load_type < 0) { |
|
564 switch (order->GetLoadType()) { |
|
565 case OLF_LOAD_IF_POSSIBLE: load_type = OLFB_FULL_LOAD; break; |
|
566 case OLFB_FULL_LOAD: load_type = OLF_FULL_LOAD_ANY; break; |
|
567 case OLF_FULL_LOAD_ANY: load_type = OLFB_NO_LOAD; break; |
|
568 case OLFB_NO_LOAD: load_type = OLF_LOAD_IF_POSSIBLE; break; |
|
569 default: NOT_REACHED(); |
|
570 } |
|
571 } |
|
572 DoCommandP(v->tile, v->index + (sel_ord << 16), MOF_LOAD | (load_type << 4), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
|
573 } |
|
574 |
|
575 /** |
|
576 * Handle the click on the service. |
|
577 * |
|
578 * @param w current window |
|
579 * @param v current vehicle |
|
580 */ |
|
581 static void OrderClick_Service(Window *w, const Vehicle *v, int i) |
|
582 { |
|
583 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), MOF_DEPOT_ACTION, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
|
584 } |
|
585 |
|
586 /** |
|
587 * Handle the click on the service in nearest depot button. |
|
588 * |
|
589 * @param w current window |
|
590 * @param v current vehicle |
|
591 */ |
|
592 static void OrderClick_NearestDepot(Window *w, const Vehicle *v, int i) |
|
593 { |
|
594 Order order; |
|
595 order.next = NULL; |
|
596 order.index = 0; |
|
597 order.MakeGoToDepot(0, ODTFB_PART_OF_ORDERS); |
|
598 order.SetDepotActionType(ODATFB_NEAREST_DEPOT); |
|
599 |
|
600 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), order.Pack(), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER)); |
|
601 } |
|
602 |
|
603 /** |
|
604 * Handle the click on the conditional order button. |
|
605 * |
|
606 * @param w current window |
|
607 * @param v current vehicle |
|
608 */ |
|
609 static void OrderClick_Conditional(Window *w, const Vehicle *v, int i) |
|
610 { |
|
611 w->InvalidateWidget(ORDER_WIDGET_GOTO); |
|
612 w->LowerWidget(ORDER_WIDGET_GOTO); |
|
613 SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, PAL_NONE, VHM_RECT, w); |
|
614 WP(w, order_d).goto_type = OPOS_CONDITIONAL; |
408 } |
615 } |
409 |
616 |
410 /** |
617 /** |
411 * Handle the click on the unload button. |
618 * Handle the click on the unload button. |
412 * |
619 * |
413 * @param w current window |
620 * @param w current window |
414 * @param v current vehicle |
621 * @param v current vehicle |
415 */ |
622 */ |
416 static void OrderClick_Unload(Window *w, const Vehicle *v) |
623 static void OrderClick_Unload(Window *w, const Vehicle *v, int unload_type) |
417 { |
624 { |
418 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OF_UNLOAD, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
625 VehicleOrderID sel_ord = OrderGetSel(w); |
|
626 const Order *order = GetVehicleOrder(v, sel_ord); |
|
627 |
|
628 if (order->GetUnloadType() == unload_type) return; |
|
629 |
|
630 if (unload_type < 0) { |
|
631 switch (order->GetUnloadType()) { |
|
632 case OUF_UNLOAD_IF_POSSIBLE: unload_type = OUFB_UNLOAD; break; |
|
633 case OUFB_UNLOAD: unload_type = OUFB_TRANSFER; break; |
|
634 case OUFB_TRANSFER: unload_type = OUFB_NO_UNLOAD; break; |
|
635 case OUFB_NO_UNLOAD: unload_type = OUF_UNLOAD_IF_POSSIBLE; break; |
|
636 default: NOT_REACHED(); |
|
637 } |
|
638 } |
|
639 |
|
640 DoCommandP(v->tile, v->index + (sel_ord << 16), MOF_UNLOAD | (unload_type << 4), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
419 } |
641 } |
420 |
642 |
421 /** |
643 /** |
422 * Handle the click on the nonstop button. |
644 * Handle the click on the nonstop button. |
423 * |
645 * |
424 * @param w current window |
646 * @param w current window |
425 * @param v current vehicle |
647 * @param v current vehicle |
426 */ |
648 * @param non_stop what non-stop type to use; -1 to use the 'next' one. |
427 static void OrderClick_Nonstop(Window *w, const Vehicle *v) |
649 */ |
428 { |
650 static void OrderClick_Nonstop(Window *w, const Vehicle *v, int non_stop) |
429 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OF_NON_STOP, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
651 { |
|
652 VehicleOrderID sel_ord = OrderGetSel(w); |
|
653 const Order *order = GetVehicleOrder(v, sel_ord); |
|
654 |
|
655 if (order->GetNonStopType() == non_stop) return; |
|
656 |
|
657 /* Keypress if negative, so 'toggle' to the next */ |
|
658 if (non_stop < 0) { |
|
659 non_stop = (order->GetNonStopType() + 1) % ONSF_END; |
|
660 } |
|
661 |
|
662 DoCommandP(v->tile, v->index + (sel_ord << 16), MOF_NON_STOP | non_stop << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
430 } |
663 } |
431 |
664 |
432 /** |
665 /** |
433 * Handle the click on the transfer button. |
666 * Handle the click on the transfer button. |
434 * |
667 * |
435 * @param w current window |
668 * @param w current window |
436 * @param v current vehicle |
669 * @param v current vehicle |
437 */ |
670 */ |
438 static void OrderClick_Transfer(Window* w, const Vehicle* v) |
671 static void OrderClick_Transfer(Window *w, const Vehicle *v, int i) |
439 { |
672 { |
440 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OF_TRANSFER, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
673 VehicleOrderID sel_ord = OrderGetSel(w); |
|
674 const Order *order = GetVehicleOrder(v, sel_ord); |
|
675 |
|
676 DoCommandP(v->tile, v->index + (sel_ord << 16), MOF_UNLOAD | ((order->GetUnloadType() & ~OUFB_NO_UNLOAD) ^ OUFB_TRANSFER) << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
441 } |
677 } |
442 |
678 |
443 /** |
679 /** |
444 * Handle the click on the skip button. |
680 * Handle the click on the skip button. |
445 * If ctrl is pressed skip to selected order. |
681 * If ctrl is pressed skip to selected order. |
446 * Else skip to current order + 1 |
682 * Else skip to current order + 1 |
447 * |
683 * |
448 * @param w current window |
684 * @param w current window |
449 * @param v current vehicle |
685 * @param v current vehicle |
450 */ |
686 */ |
451 static void OrderClick_Skip(Window *w, const Vehicle *v) |
687 static void OrderClick_Skip(Window *w, const Vehicle *v, int i) |
452 { |
688 { |
453 /* Don't skip when there's nothing to skip */ |
689 /* Don't skip when there's nothing to skip */ |
454 if (_ctrl_pressed && v->cur_order_index == OrderGetSel(w)) return; |
690 if (_ctrl_pressed && v->cur_order_index == OrderGetSel(w)) return; |
455 |
691 |
456 DoCommandP(v->tile, v->index, _ctrl_pressed ? OrderGetSel(w) : ((v->cur_order_index + 1) % v->num_orders), |
692 DoCommandP(v->tile, v->index, _ctrl_pressed ? OrderGetSel(w) : ((v->cur_order_index + 1) % v->num_orders), |
513 'K' //unload |
750 'K' //unload |
514 }; |
751 }; |
515 |
752 |
516 static void OrdersWndProc(Window *w, WindowEvent *e) |
753 static void OrdersWndProc(Window *w, WindowEvent *e) |
517 { |
754 { |
|
755 const Vehicle *v = GetVehicle(w->window_number); |
|
756 |
518 switch (e->event) { |
757 switch (e->event) { |
519 case WE_CREATE: |
758 case WE_CREATE: |
520 /* Ensure that the refit and unload buttons always remain at the same location. |
|
521 * Only one of them can be active at any one time and takes turns on being disabled. |
|
522 * To ensure that they stay at the same location, we also verify that they behave the same |
|
523 * when resizing. */ |
|
524 if (GetVehicle(w->window_number)->owner == _local_player) { // only the vehicle owner got these buttons |
|
525 assert(w->widget[ORDER_WIDGET_REFIT].left == w->widget[ORDER_WIDGET_UNLOAD].left); |
|
526 assert(w->widget[ORDER_WIDGET_REFIT].right == w->widget[ORDER_WIDGET_UNLOAD].right); |
|
527 assert(w->widget[ORDER_WIDGET_REFIT].top == w->widget[ORDER_WIDGET_UNLOAD].top); |
|
528 assert(w->widget[ORDER_WIDGET_REFIT].bottom == w->widget[ORDER_WIDGET_UNLOAD].bottom); |
|
529 assert(w->widget[ORDER_WIDGET_REFIT].display_flags == w->widget[ORDER_WIDGET_UNLOAD].display_flags); |
|
530 } |
|
531 |
|
532 if (_patches.timetabling) { |
759 if (_patches.timetabling) { |
533 w->widget[ORDER_WIDGET_CAPTION].right -= 61; |
760 w->widget[ORDER_WIDGET_CAPTION].right -= 61; |
534 } else { |
761 } else { |
535 w->HideWidget(ORDER_WIDGET_TIMETABLE_VIEW); |
762 w->HideWidget(ORDER_WIDGET_TIMETABLE_VIEW); |
536 } |
763 } |
537 |
764 |
538 break; |
765 break; |
539 |
766 |
540 case WE_PAINT: |
767 case WE_PAINT: |
541 DrawOrdersWindow(w); |
768 DrawOrdersWindow(w); |
542 break; |
769 break; |
543 |
770 |
544 case WE_CLICK: { |
771 case WE_CLICK: |
545 const Vehicle *v = GetVehicle(w->window_number); |
772 if (w->widget[e->we.click.widget].type != WWT_DROPDOWN) HideDropDownMenu(w); |
546 switch (e->we.click.widget) { |
773 switch (e->we.click.widget) { |
547 case ORDER_WIDGET_ORDER_LIST: { |
774 case ORDER_WIDGET_ORDER_LIST: { |
|
775 ResetObjectToPlace(); |
|
776 |
|
777 int sel = GetOrderFromOrderWndPt(w, e->we.click.pt.y, v); |
|
778 |
|
779 if (sel == INVALID_ORDER) { |
|
780 /* This was a click on an empty part of the orders window, so |
|
781 * deselect the currently selected order. */ |
|
782 WP(w, order_d).sel = -1; |
|
783 SetWindowDirty(w); |
|
784 return; |
|
785 } |
|
786 |
|
787 if (_ctrl_pressed && sel < v->num_orders) { |
|
788 const Order *ord = GetVehicleOrder(v, sel); |
|
789 TileIndex xy; |
|
790 |
|
791 switch (ord->GetType()) { |
|
792 case OT_GOTO_STATION: xy = GetStation(ord->GetDestination())->xy ; break; |
|
793 case OT_GOTO_DEPOT: xy = (v->type == VEH_AIRCRAFT) ? GetStation(ord->GetDestination())->xy : GetDepot(ord->GetDestination())->xy; break; |
|
794 case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->GetDestination())->xy; break; |
|
795 default: xy = 0; break; |
|
796 } |
|
797 |
|
798 if (xy != 0) ScrollMainWindowToTile(xy); |
|
799 return; |
|
800 } else { |
|
801 if (sel == WP(w, order_d).sel) { |
|
802 /* Deselect clicked order */ |
|
803 WP(w, order_d).sel = -1; |
|
804 } else { |
|
805 /* Select clicked order */ |
|
806 WP(w, order_d).sel = sel; |
|
807 |
|
808 if (v->owner == _local_player) { |
|
809 /* Activate drag and drop */ |
|
810 SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, VHM_DRAG, w); |
|
811 } |
|
812 } |
|
813 } |
|
814 |
|
815 SetWindowDirty(w); |
|
816 } break; |
|
817 |
|
818 case ORDER_WIDGET_SKIP: |
|
819 OrderClick_Skip(w, v, 0); |
|
820 break; |
|
821 |
|
822 case ORDER_WIDGET_DELETE: |
|
823 OrderClick_Delete(w, v, 0); |
|
824 break; |
|
825 |
|
826 case ORDER_WIDGET_NON_STOP: { |
|
827 const Order *o = GetVehicleOrder(v, OrderGetSel(w)); |
|
828 ShowDropDownMenu(w, _order_non_stop_drowdown, o->GetNonStopType(), ORDER_WIDGET_NON_STOP, 0, o->IsType(OT_GOTO_STATION) ? 0 : (o->IsType(OT_GOTO_WAYPOINT) ? 3 : 12)); |
|
829 } break; |
|
830 |
|
831 case ORDER_WIDGET_GOTO: |
|
832 OrderClick_Goto(w, v, 0); |
|
833 break; |
|
834 |
|
835 case ORDER_WIDGET_GOTO_DROPDOWN: |
|
836 ShowDropDownMenu(w, v->type == VEH_AIRCRAFT ? _order_goto_dropdown_aircraft : _order_goto_dropdown, 0, ORDER_WIDGET_GOTO, 0, 0, w->widget[ORDER_WIDGET_GOTO_DROPDOWN].right - w->widget[ORDER_WIDGET_GOTO].left); |
|
837 break; |
|
838 |
|
839 case ORDER_WIDGET_FULL_LOAD: |
|
840 ShowDropDownMenu(w, _order_full_load_drowdown, GetVehicleOrder(v, OrderGetSel(w))->GetLoadType(), ORDER_WIDGET_FULL_LOAD, 0, 2); |
|
841 break; |
|
842 |
|
843 case ORDER_WIDGET_UNLOAD: |
|
844 ShowDropDownMenu(w, _order_unload_drowdown, GetVehicleOrder(v, OrderGetSel(w))->GetUnloadType(), ORDER_WIDGET_UNLOAD, 0, 8); |
|
845 break; |
|
846 |
|
847 case ORDER_WIDGET_REFIT: |
|
848 OrderClick_Refit(w, v, 0); |
|
849 break; |
|
850 |
|
851 case ORDER_WIDGET_SERVICE: |
|
852 OrderClick_Service(w, v, 0); |
|
853 break; |
|
854 |
|
855 case ORDER_WIDGET_TIMETABLE_VIEW: |
|
856 ShowTimetableWindow(v); |
|
857 break; |
|
858 |
|
859 case ORDER_WIDGET_COND_VARIABLE: |
|
860 ShowDropDownMenu(w, _order_conditional_variable, GetVehicleOrder(v, OrderGetSel(w))->GetConditionVariable(), ORDER_WIDGET_COND_VARIABLE, 0, 0); |
|
861 break; |
|
862 |
|
863 case ORDER_WIDGET_COND_COMPARATOR: { |
|
864 const Order *o = GetVehicleOrder(v, OrderGetSel(w)); |
|
865 ShowDropDownMenu(w, _order_conditional_condition, o->GetConditionComparator(), ORDER_WIDGET_COND_COMPARATOR, 0, (o->GetConditionVariable() == OCV_REQUIRES_SERVICE) ? 0x3F : 0xC0); |
|
866 } break; |
|
867 |
|
868 case ORDER_WIDGET_COND_VALUE: { |
|
869 const Order *order = GetVehicleOrder(v, OrderGetSel(w)); |
|
870 uint value = order->GetConditionValue(); |
|
871 if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); |
|
872 SetDParam(0, value); |
|
873 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_ORDER_CONDITIONAL_VALUE_CAPT, 5, 100, w, CS_NUMERAL); |
|
874 } break; |
|
875 |
|
876 case ORDER_WIDGET_SHARED_ORDER_LIST: |
|
877 ShowVehicleListWindow(v); |
|
878 break; |
|
879 } |
|
880 break; |
|
881 |
|
882 case WE_ON_EDIT_TEXT: |
|
883 if (!StrEmpty(e->we.edittext.str)) { |
|
884 VehicleOrderID sel = OrderGetSel(w); |
|
885 uint value = atoi(e->we.edittext.str); |
|
886 |
|
887 switch (GetVehicleOrder(v, sel)->GetConditionVariable()) { |
|
888 case OCV_MAX_SPEED: |
|
889 value = ConvertDisplaySpeedToSpeed(value); |
|
890 break; |
|
891 |
|
892 case OCV_RELIABILITY: |
|
893 case OCV_LOAD_PERCENTAGE: |
|
894 value = Clamp(value, 0, 100); |
|
895 |
|
896 default: |
|
897 break; |
|
898 } |
|
899 DoCommandP(v->tile, v->index + (sel << 16), MOF_COND_VALUE | Clamp(value, 0, 2047) << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
|
900 } |
|
901 break; |
|
902 |
|
903 case WE_DROPDOWN_SELECT: // we have selected a dropdown item in the list |
|
904 switch (e->we.dropdown.button) { |
|
905 case ORDER_WIDGET_NON_STOP: |
|
906 OrderClick_Nonstop(w, v, e->we.dropdown.index); |
|
907 break; |
|
908 |
|
909 case ORDER_WIDGET_FULL_LOAD: |
|
910 OrderClick_FullLoad(w, v, e->we.dropdown.index); |
|
911 break; |
|
912 |
|
913 case ORDER_WIDGET_UNLOAD: |
|
914 OrderClick_Unload(w, v, e->we.dropdown.index); |
|
915 break; |
|
916 |
|
917 case ORDER_WIDGET_GOTO: |
|
918 switch (e->we.dropdown.index) { |
|
919 case 0: |
|
920 w->ToggleWidgetLoweredState(ORDER_WIDGET_GOTO); |
|
921 OrderClick_Goto(w, v, 0); |
|
922 break; |
|
923 |
|
924 case 1: OrderClick_NearestDepot(w, v, 0); break; |
|
925 case 2: OrderClick_Conditional(w, v, 0); break; |
|
926 default: NOT_REACHED(); |
|
927 } |
|
928 break; |
|
929 |
|
930 case ORDER_WIDGET_COND_VARIABLE: |
|
931 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), MOF_COND_VARIABLE | e->we.dropdown.index << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
|
932 break; |
|
933 |
|
934 case ORDER_WIDGET_COND_COMPARATOR: |
|
935 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), MOF_COND_COMPARATOR | e->we.dropdown.index << 4, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER)); |
|
936 break; |
|
937 } |
|
938 break; |
|
939 |
|
940 case WE_DRAGDROP: |
|
941 switch (e->we.click.widget) { |
|
942 case ORDER_WIDGET_ORDER_LIST: { |
|
943 int from_order = OrderGetSel(w); |
|
944 int to_order = GetOrderFromOrderWndPt(w, e->we.dragdrop.pt.y, v); |
|
945 |
|
946 if (!(from_order == to_order || from_order == INVALID_ORDER || from_order > v->num_orders || to_order == INVALID_ORDER || to_order > v->num_orders) && |
|
947 DoCommandP(v->tile, v->index, from_order | (to_order << 16), NULL, CMD_MOVE_ORDER | CMD_MSG(STR_CAN_T_MOVE_THIS_ORDER))) { |
|
948 WP(w, order_d).sel = -1; |
|
949 } |
|
950 |
|
951 } break; |
|
952 |
|
953 case ORDER_WIDGET_DELETE: |
|
954 OrderClick_Delete(w, v, 0); |
|
955 break; |
|
956 } |
|
957 |
548 ResetObjectToPlace(); |
958 ResetObjectToPlace(); |
549 |
959 break; |
550 int sel = GetOrderFromOrderWndPt(w, e->we.click.pt.y, v); |
960 |
551 |
961 case WE_KEYPRESS: |
552 if (sel == INVALID_ORDER) { |
962 if (v->owner != _local_player) break; |
553 /* This was a click on an empty part of the orders window, so |
963 |
554 * deselect the currently selected order. */ |
964 for (uint i = 0; i < lengthof(_order_keycodes); i++) { |
555 WP(w, order_d).sel = -1; |
965 if (e->we.keypress.keycode == _order_keycodes[i]) { |
556 SetWindowDirty(w); |
966 e->we.keypress.cont = false; |
557 return; |
967 /* see if the button is disabled */ |
|
968 if (!w->IsWidgetDisabled(i + ORDER_WIDGET_SKIP)) _order_button_proc[i](w, v, -1); |
|
969 break; |
|
970 } |
558 } |
971 } |
559 |
972 break; |
560 if (_ctrl_pressed && sel < v->num_orders) { |
973 |
561 const Order *ord = GetVehicleOrder(v, sel); |
974 case WE_PLACE_OBJ: |
562 TileIndex xy; |
975 if (WP(w, order_d).goto_type == OPOS_GOTO) { |
563 |
976 OrdersPlaceObj(GetVehicle(w->window_number), e->we.place.tile, w); |
564 switch (ord->GetType()) { |
977 } |
565 case OT_GOTO_STATION: xy = GetStation(ord->GetDestination())->xy ; break; |
978 break; |
566 case OT_GOTO_DEPOT: xy = (v->type == VEH_AIRCRAFT) ? GetStation(ord->GetDestination())->xy : GetDepot(ord->GetDestination())->xy; break; |
979 |
567 case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->GetDestination())->xy; break; |
980 case WE_ABORT_PLACE_OBJ: |
568 default: xy = 0; break; |
981 if (WP(w, order_d).goto_type == OPOS_CONDITIONAL) { |
569 } |
982 WP(w, order_d).goto_type = OPOS_GOTO; |
570 |
983 if (_cursor.pos.x >= (w->left + w->widget[ORDER_WIDGET_ORDER_LIST].left) && |
571 if (xy != 0) ScrollMainWindowToTile(xy); |
984 _cursor.pos.y >= (w->top + w->widget[ORDER_WIDGET_ORDER_LIST].top) && |
572 return; |
985 _cursor.pos.x <= (w->left + w->widget[ORDER_WIDGET_ORDER_LIST].right) && |
573 } else { |
986 _cursor.pos.y <= (w->top + w->widget[ORDER_WIDGET_ORDER_LIST].bottom)) { |
574 if (sel == WP(w, order_d).sel) { |
987 int order_id = GetOrderFromOrderWndPt(w, _cursor.pos.y - w->top, v); |
575 /* Deselect clicked order */ |
988 if (order_id != INVALID_ORDER) { |
576 WP(w, order_d).sel = -1; |
989 Order order; |
577 } else { |
990 order.next = NULL; |
578 /* Select clicked order */ |
991 order.index = 0; |
579 WP(w, order_d).sel = sel; |
992 order.MakeConditional(order_id); |
580 |
993 |
581 if (v->owner == _local_player) { |
994 DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), order.Pack(), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER)); |
582 /* Activate drag and drop */ |
|
583 SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, VHM_DRAG, w); |
|
584 } |
995 } |
585 } |
996 } |
586 } |
997 } |
587 |
998 w->RaiseWidget(ORDER_WIDGET_GOTO); |
588 SetWindowDirty(w); |
999 w->InvalidateWidget(ORDER_WIDGET_GOTO); |
589 } break; |
|
590 |
|
591 case ORDER_WIDGET_SKIP: |
|
592 OrderClick_Skip(w, v); |
|
593 break; |
1000 break; |
594 |
1001 |
595 case ORDER_WIDGET_DELETE: |
1002 /* check if a vehicle in a depot was clicked.. */ |
596 OrderClick_Delete(w, v); |
1003 case WE_MOUSELOOP: |
|
1004 v = _place_clicked_vehicle; |
|
1005 /* |
|
1006 * Check if we clicked on a vehicle |
|
1007 * and if the GOTO button of this window is pressed |
|
1008 * This is because of all open order windows WE_MOUSELOOP is called |
|
1009 * and if you have 3 windows open, and this check is not done |
|
1010 * the order is copied to the last open window instead of the |
|
1011 * one where GOTO is enabled |
|
1012 */ |
|
1013 if (v != NULL && w->IsWidgetLowered(ORDER_WIDGET_GOTO)) { |
|
1014 _place_clicked_vehicle = NULL; |
|
1015 HandleOrderVehClick(GetVehicle(w->window_number), v, w); |
|
1016 } |
597 break; |
1017 break; |
598 |
1018 |
599 case ORDER_WIDGET_NON_STOP: |
1019 case WE_RESIZE: |
600 OrderClick_Nonstop(w, v); |
1020 /* Update the scroll + matrix */ |
|
1021 w->vscroll.cap = (w->widget[ORDER_WIDGET_ORDER_LIST].bottom - w->widget[ORDER_WIDGET_ORDER_LIST].top) / 10; |
601 break; |
1022 break; |
602 |
1023 |
603 case ORDER_WIDGET_GOTO: |
1024 case WE_TIMEOUT: // handle button unclick ourselves... |
604 OrderClick_Goto(w, v); |
1025 /* unclick all buttons except for the 'goto' button (ORDER_WIDGET_GOTO), which is 'persistent' */ |
|
1026 for (uint i = 0; i < w->widget_count; i++) { |
|
1027 if (w->IsWidgetLowered(i) && i != ORDER_WIDGET_GOTO) { |
|
1028 w->RaiseWidget(i); |
|
1029 w->InvalidateWidget(i); |
|
1030 } |
|
1031 } |
605 break; |
1032 break; |
606 |
|
607 case ORDER_WIDGET_FULL_LOAD: |
|
608 OrderClick_FullLoad(w, v); |
|
609 break; |
|
610 |
|
611 case ORDER_WIDGET_UNLOAD: |
|
612 OrderClick_Unload(w, v); |
|
613 break; |
|
614 case ORDER_WIDGET_REFIT: |
|
615 OrderClick_Refit(w, v); |
|
616 break; |
|
617 |
|
618 case ORDER_WIDGET_TRANSFER: |
|
619 OrderClick_Transfer(w, v); |
|
620 break; |
|
621 |
|
622 case ORDER_WIDGET_TIMETABLE_VIEW: |
|
623 ShowTimetableWindow(v); |
|
624 break; |
|
625 |
|
626 case ORDER_WIDGET_SHARED_ORDER_LIST: |
|
627 ShowVehicleListWindow(v); |
|
628 break; |
|
629 } |
|
630 } break; |
|
631 |
|
632 case WE_DRAGDROP: { |
|
633 const Vehicle *v = GetVehicle(w->window_number); |
|
634 |
|
635 switch (e->we.click.widget) { |
|
636 case ORDER_WIDGET_ORDER_LIST: { |
|
637 int from_order = OrderGetSel(w); |
|
638 int to_order = GetOrderFromOrderWndPt(w, e->we.dragdrop.pt.y, v); |
|
639 |
|
640 if (!(from_order == to_order || from_order == INVALID_ORDER || from_order > v->num_orders || to_order == INVALID_ORDER || to_order > v->num_orders) && |
|
641 DoCommandP(v->tile, v->index, from_order | (to_order << 16), NULL, CMD_MOVE_ORDER | CMD_MSG(STR_CAN_T_MOVE_THIS_ORDER))) { |
|
642 WP(w, order_d).sel = -1; |
|
643 } |
|
644 |
|
645 break; |
|
646 } |
|
647 |
|
648 case ORDER_WIDGET_DELETE: |
|
649 OrderClick_Delete(w, v); |
|
650 break; |
|
651 } |
|
652 |
|
653 ResetObjectToPlace(); |
|
654 break; |
|
655 } |
|
656 |
|
657 case WE_KEYPRESS: { |
|
658 Vehicle *v = GetVehicle(w->window_number); |
|
659 uint i; |
|
660 |
|
661 if (v->owner != _local_player) break; |
|
662 |
|
663 for (i = 0; i < lengthof(_order_keycodes); i++) { |
|
664 if (e->we.keypress.keycode == _order_keycodes[i]) { |
|
665 e->we.keypress.cont = false; |
|
666 //see if the button is disabled |
|
667 if (!w->IsWidgetDisabled(i + ORDER_WIDGET_SKIP)) _order_button_proc[i](w, v); |
|
668 break; |
|
669 } |
|
670 } |
|
671 break; |
|
672 } |
|
673 |
|
674 case WE_RCLICK: { |
|
675 const Vehicle *v = GetVehicle(w->window_number); |
|
676 int s = OrderGetSel(w); |
|
677 |
|
678 if (e->we.click.widget != ORDER_WIDGET_FULL_LOAD) break; |
|
679 if (s == v->num_orders || !GetVehicleOrder(v, s)->IsType(OT_GOTO_DEPOT)) { |
|
680 GuiShowTooltips(STR_8857_MAKE_THE_HIGHLIGHTED_ORDER); |
|
681 } else { |
|
682 GuiShowTooltips(STR_SERVICE_HINT); |
|
683 } |
|
684 } break; |
|
685 |
|
686 case WE_PLACE_OBJ: { |
|
687 OrdersPlaceObj(GetVehicle(w->window_number), e->we.place.tile, w); |
|
688 } break; |
|
689 |
|
690 case WE_ABORT_PLACE_OBJ: { |
|
691 w->RaiseWidget(ORDER_WIDGET_GOTO); |
|
692 w->InvalidateWidget(ORDER_WIDGET_GOTO); |
|
693 } break; |
|
694 |
|
695 // check if a vehicle in a depot was clicked.. |
|
696 case WE_MOUSELOOP: { |
|
697 const Vehicle *v = _place_clicked_vehicle; |
|
698 /* |
|
699 * Check if we clicked on a vehicle |
|
700 * and if the GOTO button of this window is pressed |
|
701 * This is because of all open order windows WE_MOUSELOOP is called |
|
702 * and if you have 3 windows open, and this check is not done |
|
703 * the order is copied to the last open window instead of the |
|
704 * one where GOTO is enabled |
|
705 */ |
|
706 if (v != NULL && w->IsWidgetLowered(ORDER_WIDGET_GOTO)) { |
|
707 _place_clicked_vehicle = NULL; |
|
708 HandleOrderVehClick(GetVehicle(w->window_number), v, w); |
|
709 } |
|
710 } break; |
|
711 |
|
712 case WE_RESIZE: |
|
713 /* Update the scroll + matrix */ |
|
714 w->vscroll.cap = (w->widget[ORDER_WIDGET_ORDER_LIST].bottom - w->widget[ORDER_WIDGET_ORDER_LIST].top) / 10; |
|
715 break; |
|
716 |
|
717 case WE_TIMEOUT: { // handle button unclick ourselves... |
|
718 // unclick all buttons except for the 'goto' button (ORDER_WIDGET_GOTO), which is 'persistent' |
|
719 uint i; |
|
720 for (i = 0; i < w->widget_count; i++) { |
|
721 if (w->IsWidgetLowered(i) && i != ORDER_WIDGET_GOTO) { |
|
722 w->RaiseWidget(i); |
|
723 w->InvalidateWidget(i); |
|
724 } |
|
725 } |
|
726 } break; |
|
727 } |
1033 } |
728 } |
1034 } |
729 |
1035 |
730 /** |
1036 /** |
731 * Widget definition for player train orders |
1037 * Widget definition for player train orders |
732 */ |
1038 */ |
733 static const Widget _orders_train_widgets[] = { |
1039 static const Widget _orders_train_widgets[] = { |
734 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX |
1040 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX |
735 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 398, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION |
1041 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 385, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION |
736 { WWT_PUSHTXTBTN, RESIZE_LR, 14, 338, 398, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW |
1042 { WWT_PUSHTXTBTN, RESIZE_LR, 14, 325, 385, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW |
737 |
1043 |
738 { WWT_PANEL, RESIZE_RB, 14, 0, 386, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST |
1044 { WWT_PANEL, RESIZE_RB, 14, 0, 373, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST |
739 |
1045 |
740 { WWT_SCROLLBAR, RESIZE_LRB, 14, 387, 398, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR |
1046 { WWT_SCROLLBAR, RESIZE_LRB, 14, 374, 385, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR |
741 |
1047 |
742 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 52, 76, 87, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, // ORDER_WIDGET_SKIP |
1048 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 123, 88, 99, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, // ORDER_WIDGET_SKIP |
743 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 53, 105, 76, 87, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, // ORDER_WIDGET_DELETE |
1049 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 124, 247, 88, 99, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, // ORDER_WIDGET_DELETE |
744 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 106, 158, 76, 87, STR_8825_NON_STOP, STR_8855_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_NON_STOP |
1050 { WWT_DROPDOWN, RESIZE_TB, 14, 0, 123, 76, 87, STR_NULL, STR_ORDER_TOOLTIP_NON_STOP}, // ORDER_WIDGET_NON_STOP |
745 { WWT_TEXTBTN, RESIZE_TB, 14, 159, 211, 76, 87, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, // ORDER_WIDGET_GOTO |
1051 { WWT_TEXTBTN, RESIZE_TB, 14, 248, 359, 88, 99, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, // ORDER_WIDGET_GOTO |
746 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 212, 264, 76, 87, STR_FULLLOAD_OR_SERVICE, STR_NULL}, // ORDER_WIDGET_FULL_LOAD |
1052 { WWT_DROPDOWN, RESIZE_TB, 14, 360, 371, 88, 99, STR_EMPTY, STR_ORDER_GO_TO_DROPDOWN_TOOLTIP}, // ORDER_WIDGET_GOTO_DROPDOWN |
747 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 265, 319, 76, 87, STR_8828_UNLOAD, STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_UNLOAD |
1053 { WWT_DROPDOWN, RESIZE_TB, 14, 124, 247, 76, 87, STR_NULL, STR_ORDER_TOOLTIP_FULL_LOAD}, // ORDER_WIDGET_FULL_LOAD |
748 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 265, 319, 76, 87, STR_REFIT, STR_REFIT_TIP}, // ORDER_WIDGET_REFIT |
1054 { WWT_DROPDOWN, RESIZE_TB, 14, 248, 371, 76, 87, STR_NULL, STR_ORDER_TOOLTIP_UNLOAD}, // ORDER_WIDGET_UNLOAD |
749 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 320, 372, 76, 87, STR_TRANSFER, STR_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_TRANSFER |
1055 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 124, 247, 76, 87, STR_REFIT, STR_REFIT_TIP}, // ORDER_WIDGET_REFIT |
750 |
1056 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 248, 371, 76, 87, STR_SERVICE, STR_SERVICE_HINT}, // ORDER_WIDGET_SERVICE |
751 { WWT_PUSHIMGBTN, RESIZE_TB, 14, 373, 386, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST |
1057 |
752 |
1058 { WWT_DROPDOWN, RESIZE_TB, 14, 0, 123, 76, 87, STR_NULL, STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP}, // ORDER_WIDGET_COND_VARIABLE |
753 { WWT_PANEL, RESIZE_RTB, 14, 387, 386, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR |
1059 { WWT_DROPDOWN, RESIZE_TB, 14, 124, 247, 76, 87, STR_NULL, STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP}, // ORDER_WIDGET_COND_COMPARATOR |
754 |
1060 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 248, 371, 76, 87, STR_CONDITIONAL_VALUE, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP}, // ORDER_WIDGET_COND_VALUE |
755 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 387, 398, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE |
1061 |
|
1062 { WWT_PANEL, RESIZE_RTB, 14, 372, 373, 76, 99, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR |
|
1063 { WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 372, 385, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST |
|
1064 |
|
1065 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 374, 385, 88, 99, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE |
756 { WIDGETS_END}, |
1066 { WIDGETS_END}, |
757 }; |
1067 }; |
758 |
1068 |
759 static const WindowDesc _orders_train_desc = { |
1069 static const WindowDesc _orders_train_desc = { |
760 WDP_AUTO, WDP_AUTO, 399, 88, 399, 88, |
1070 WDP_AUTO, WDP_AUTO, 386, 100, 386, 100, |
761 WC_VEHICLE_ORDERS,WC_VEHICLE_VIEW, |
1071 WC_VEHICLE_ORDERS,WC_VEHICLE_VIEW, |
762 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
1072 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
763 _orders_train_widgets, |
1073 _orders_train_widgets, |
764 OrdersWndProc |
1074 OrdersWndProc |
765 }; |
1075 }; |
767 /** |
1077 /** |
768 * Widget definition for player orders (!train) |
1078 * Widget definition for player orders (!train) |
769 */ |
1079 */ |
770 static const Widget _orders_widgets[] = { |
1080 static const Widget _orders_widgets[] = { |
771 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX |
1081 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX |
772 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 409, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION |
1082 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 385, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION |
773 { WWT_PUSHTXTBTN, RESIZE_LR, 14, 349, 409, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW |
1083 { WWT_PUSHTXTBTN, RESIZE_LR, 14, 325, 385, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW |
774 |
1084 |
775 { WWT_PANEL, RESIZE_RB, 14, 0, 397, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST |
1085 { WWT_PANEL, RESIZE_RB, 14, 0, 373, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST |
776 |
1086 |
777 { WWT_SCROLLBAR, RESIZE_LRB, 14, 398, 409, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR |
1087 { WWT_SCROLLBAR, RESIZE_LRB, 14, 374, 385, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR |
778 |
1088 |
779 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 63, 76, 87, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, // ORDER_WIDGET_SKIP |
1089 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 123, 88, 99, STR_8823_SKIP, STR_8853_SKIP_THE_CURRENT_ORDER}, // ORDER_WIDGET_SKIP |
780 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 64, 128, 76, 87, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, // ORDER_WIDGET_DELETE |
1090 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 124, 247, 88, 99, STR_8824_DELETE, STR_8854_DELETE_THE_HIGHLIGHTED}, // ORDER_WIDGET_DELETE |
781 { WWT_EMPTY, RESIZE_TB, 14, 0, 0, 76, 87, 0x0, 0x0}, // ORDER_WIDGET_NON_STOP |
1091 { WWT_EMPTY, RESIZE_TB, 14, 0, 0, 76, 87, 0x0, 0x0}, // ORDER_WIDGET_NON_STOP |
782 { WWT_TEXTBTN, RESIZE_TB, 14, 129, 192, 76, 87, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, // ORDER_WIDGET_GOTO |
1092 { WWT_TEXTBTN, RESIZE_TB, 14, 248, 359, 88, 99, STR_8826_GO_TO, STR_8856_INSERT_A_NEW_ORDER_BEFORE}, // ORDER_WIDGET_GOTO |
783 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 193, 256, 76, 87, STR_FULLLOAD_OR_SERVICE, STR_NULL}, // ORDER_WIDGET_FULL_LOAD |
1093 { WWT_DROPDOWN, RESIZE_TB, 14, 360, 371, 88, 99, STR_EMPTY, STR_ORDER_GO_TO_DROPDOWN_TOOLTIP}, // ORDER_WIDGET_GOTO_DROPDOWN |
784 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 257, 319, 76, 87, STR_8828_UNLOAD, STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_UNLOAD |
1094 { WWT_DROPDOWN, RESIZE_TB, 14, 0, 185, 76, 87, STR_NULL, STR_ORDER_TOOLTIP_FULL_LOAD}, // ORDER_WIDGET_FULL_LOAD |
785 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 257, 319, 76, 87, STR_REFIT, STR_REFIT_TIP}, // ORDER_WIDGET_REFIT |
1095 { WWT_DROPDOWN, RESIZE_TB, 14, 186, 371, 76, 87, STR_NULL, STR_ORDER_TOOLTIP_UNLOAD}, // ORDER_WIDGET_UNLOAD |
786 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 320, 383, 76, 87, STR_TRANSFER, STR_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_TRANSFER |
1096 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 185, 76, 87, STR_REFIT, STR_REFIT_TIP}, // ORDER_WIDGET_REFIT |
787 |
1097 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 186, 371, 76, 87, STR_SERVICE, STR_SERVICE_HINT}, // ORDER_WIDGET_SERVICE |
788 { WWT_PUSHIMGBTN, RESIZE_TB, 14, 384, 397, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST |
1098 |
789 |
1099 { WWT_DROPDOWN, RESIZE_TB, 14, 0, 123, 76, 87, STR_NULL, STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP}, // ORDER_WIDGET_COND_VARIABLE |
790 { WWT_PANEL, RESIZE_RTB, 14, 397, 396, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR |
1100 { WWT_DROPDOWN, RESIZE_TB, 14, 124, 247, 76, 87, STR_NULL, STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP}, // ORDER_WIDGET_COND_COMPARATOR |
791 |
1101 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 248, 371, 76, 87, STR_CONDITIONAL_VALUE, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP}, // ORDER_WIDGET_COND_VALUE |
792 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 398, 409, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE |
1102 |
|
1103 { WWT_PANEL, RESIZE_RTB, 14, 372, 373, 76, 99, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR |
|
1104 { WWT_PUSHIMGBTN, RESIZE_LRTB, 14, 372, 385, 76, 87, SPR_SHARED_ORDERS_ICON, STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST |
|
1105 |
|
1106 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 374, 385, 88, 99, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE |
793 { WIDGETS_END}, |
1107 { WIDGETS_END}, |
794 }; |
1108 }; |
795 |
1109 |
796 static const WindowDesc _orders_desc = { |
1110 static const WindowDesc _orders_desc = { |
797 WDP_AUTO, WDP_AUTO, 410, 88, 410, 88, |
1111 WDP_AUTO, WDP_AUTO, 386, 100, 386, 100, |
798 WC_VEHICLE_ORDERS,WC_VEHICLE_VIEW, |
1112 WC_VEHICLE_ORDERS,WC_VEHICLE_VIEW, |
799 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
1113 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
800 _orders_widgets, |
1114 _orders_widgets, |
801 OrdersWndProc |
1115 OrdersWndProc |
802 }; |
1116 }; |
804 /** |
1118 /** |
805 * Widget definition for competitor orders |
1119 * Widget definition for competitor orders |
806 */ |
1120 */ |
807 static const Widget _other_orders_widgets[] = { |
1121 static const Widget _other_orders_widgets[] = { |
808 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX |
1122 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX |
809 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 331, 0, 13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION |
1123 { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 385, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION |
810 { WWT_PUSHTXTBTN, RESIZE_LR, 14, 271, 331, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW |
1124 { WWT_PUSHTXTBTN, RESIZE_LR, 14, 325, 385, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW |
811 |
1125 |
812 { WWT_PANEL, RESIZE_RB, 14, 0, 319, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST |
1126 { WWT_PANEL, RESIZE_RB, 14, 0, 373, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST |
813 |
1127 |
814 { WWT_SCROLLBAR, RESIZE_LRB, 14, 320, 331, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR |
1128 { WWT_SCROLLBAR, RESIZE_LRB, 14, 374, 385, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR |
815 |
1129 |
816 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SKIP |
1130 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SKIP |
817 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_DELETE |
1131 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_DELETE |
818 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_NON_STOP |
1132 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_NON_STOP |
819 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_GOTO |
1133 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_GOTO |
820 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_FULL_LOAD |
1134 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_GOTO_DROPDOWN |
821 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_UNLOAD |
1135 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_FULL_LOAD |
822 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_REFIT |
1136 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_UNLOAD |
823 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_TRANSFER |
1137 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_REFIT |
824 |
1138 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SERVICE |
825 { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SHARED_ORDER_LIST |
1139 |
826 |
1140 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_COND_VARIABLE |
827 { WWT_PANEL, RESIZE_RTB, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR |
1141 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_COND_COMPARATOR |
828 |
1142 { WWT_EMPTY, RESIZE_NONE, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_COND_VALUE |
829 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 320, 331, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE |
1143 |
|
1144 { WWT_PANEL, RESIZE_RTB, 14, 0, 373, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR |
|
1145 { WWT_EMPTY, RESIZE_TB, 14, 0, 0, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SHARED_ORDER_LIST |
|
1146 |
|
1147 { WWT_RESIZEBOX, RESIZE_LRTB, 14, 374, 385, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE |
830 { WIDGETS_END}, |
1148 { WIDGETS_END}, |
831 }; |
1149 }; |
832 |
1150 |
833 static const WindowDesc _other_orders_desc = { |
1151 static const WindowDesc _other_orders_desc = { |
834 WDP_AUTO, WDP_AUTO, 332, 88, 332, 88, |
1152 WDP_AUTO, WDP_AUTO, 386, 88, 386, 88, |
835 WC_VEHICLE_ORDERS,WC_VEHICLE_VIEW, |
1153 WC_VEHICLE_ORDERS,WC_VEHICLE_VIEW, |
836 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE, |
1154 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE, |
837 _other_orders_widgets, |
1155 _other_orders_widgets, |
838 OrdersWndProc |
1156 OrdersWndProc |
839 }; |
1157 }; |