changeset 867 | dffd33233237 |
parent 845 | 4960e265d25b |
child 869 | 0f8d9efae2e8 |
866:d242235e6485 | 867:dffd33233237 |
---|---|
86 int i; |
86 int i; |
87 |
87 |
88 if (!(vl->flags & VL_REBUILD)) return; |
88 if (!(vl->flags & VL_REBUILD)) return; |
89 |
89 |
90 DEBUG(misc, 1) ("Building vehicle list for player %d station %d...", |
90 DEBUG(misc, 1) ("Building vehicle list for player %d station %d...", |
91 owner, station); |
91 owner, station); |
92 |
92 |
93 if (station != -1) { |
93 if (station != -1) { |
94 const Vehicle *v; |
94 const Vehicle *v; |
95 FOR_ALL_VEHICLES(v) { |
95 FOR_ALL_VEHICLES(v) { |
96 if (v->type == type && v->subtype <= subtype) { |
96 if (v->type == type && v->subtype <= subtype) { |
309 // this define is to match engine.c, but engine.c keeps it to itself |
309 // this define is to match engine.c, but engine.c keeps it to itself |
310 // ENGINE_AVAILABLE is used in ReplaceVehicleWndProc |
310 // ENGINE_AVAILABLE is used in ReplaceVehicleWndProc |
311 #define ENGINE_AVAILABLE ((e->flags & 1 && HASBIT(info->railtype_climates, _opt.landscape)) || HASBIT(e->player_avail, _local_player)) |
311 #define ENGINE_AVAILABLE ((e->flags & 1 && HASBIT(info->railtype_climates, _opt.landscape)) || HASBIT(e->player_avail, _local_player)) |
312 |
312 |
313 /* if show_outdated is selected, it do not sort psudo engines properly but it draws all engines |
313 /* if show_outdated is selected, it do not sort psudo engines properly but it draws all engines |
314 * if used compined with show_cars set to false, it will work as intended. Replace window do it like that |
314 * if used compined with show_cars set to false, it will work as intended. Replace window do it like that |
315 * this was a big hack even before show_outdated was added. Stupid newgrf :p */ |
315 * this was a big hack even before show_outdated was added. Stupid newgrf :p */ |
316 static void train_engine_drawing_loop(int *x, int *y, int *pos, int *sel, int *selected_id, byte railtype, |
316 static void train_engine_drawing_loop(int *x, int *y, int *pos, int *sel, int *selected_id, byte railtype, |
317 uint8 lines_drawn, bool is_engine, bool show_cars, bool show_outdated) |
317 uint8 lines_drawn, bool is_engine, bool show_cars, bool show_outdated) |
318 { |
318 { |
319 int i; |
319 int i; |
320 byte colour; |
320 byte colour; |
321 |
321 |
322 for (i = 0; i < NUM_TRAIN_ENGINES; i++) { |
322 for (i = 0; i < NUM_TRAIN_ENGINES; i++) { |
323 const Engine *e = DEREF_ENGINE(i); |
323 const Engine *e = DEREF_ENGINE(i); |
324 const RailVehicleInfo *rvi = RailVehInfo(i); |
324 const RailVehicleInfo *rvi = RailVehInfo(i); |
325 const EngineInfo *info = &_engine_info[i]; |
325 const EngineInfo *info = &_engine_info[i]; |
326 |
326 |
327 if ( rvi->power == 0 && !(show_cars) ) // disables display of cars (works since they do not have power) |
327 if ( rvi->power == 0 && !(show_cars) ) // disables display of cars (works since they do not have power) |
328 continue; |
328 continue; |
329 |
329 |
330 if (*sel == 0) *selected_id = i; |
330 if (*sel == 0) *selected_id = i; |
331 |
331 |
332 |
332 |
333 colour = *sel == 0 ? 0xC : 0x10; |
333 colour = *sel == 0 ? 0xC : 0x10; |
334 if (!(ENGINE_AVAILABLE && show_outdated && RailVehInfo(i)->power && e->railtype == railtype)) { |
334 if (!(ENGINE_AVAILABLE && show_outdated && RailVehInfo(i)->power && e->railtype == railtype)) { |
335 if (e->railtype != railtype || !(rvi->flags & RVI_WAGON) != is_engine || |
335 if (e->railtype != railtype || !(rvi->flags & RVI_WAGON) != is_engine || |
336 !HASBIT(e->player_avail, _local_player)) |
336 !HASBIT(e->player_avail, _local_player)) |
337 continue; |
337 continue; |
338 } /*else { |
338 } /*else { |
339 // TODO find a nice red colour for vehicles being replaced |
339 // TODO find a nice red colour for vehicles being replaced |
340 if ( _autoreplace_array[i] != i ) |
340 if ( _autoreplace_array[i] != i ) |
341 colour = *sel == 0 ? 0x44 : 0x45; |
341 colour = *sel == 0 ? 0x44 : 0x45; |
342 } */ |
342 } */ |
343 |
343 |
344 if (IS_INT_INSIDE(--*pos, -lines_drawn, 0)) { |
344 if (IS_INT_INSIDE(--*pos, -lines_drawn, 0)) { |
345 DrawString(*x + 59, *y + 2, GetCustomEngineName(i), |
345 DrawString(*x + 59, *y + 2, GetCustomEngineName(i), |
346 colour); |
346 colour); |
347 DrawTrainEngine(*x + 29, *y + 6, i, |
347 DrawTrainEngine(*x + 29, *y + 6, i, |
348 SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player))); |
348 SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player))); |
359 int selected_id[2] = {-1,-1}; |
359 int selected_id[2] = {-1,-1}; |
360 int sel[2] = { WP(w,replaceveh_d).sel_index[0], WP(w,replaceveh_d).sel_index[1]}; |
360 int sel[2] = { WP(w,replaceveh_d).sel_index[0], WP(w,replaceveh_d).sel_index[1]}; |
361 int count = 0; |
361 int count = 0; |
362 int count2 = 0; |
362 int count2 = 0; |
363 int engine_id; |
363 int engine_id; |
364 |
364 |
365 switch (WP(w,replaceveh_d).vehicletype) { |
365 switch (WP(w,replaceveh_d).vehicletype) { |
366 case VEH_Train: { |
366 case VEH_Train: { |
367 railtype = WP(w,replaceveh_d).railtype; |
367 railtype = WP(w,replaceveh_d).railtype; |
368 for (engine_id = 0; engine_id < NUM_TRAIN_ENGINES; engine_id++) { |
368 for (engine_id = 0; engine_id < NUM_TRAIN_ENGINES; engine_id++) { |
369 const Engine *e = DEREF_ENGINE(engine_id); |
369 const Engine *e = DEREF_ENGINE(engine_id); |
370 const EngineInfo *info = &_engine_info[engine_id]; |
370 const EngineInfo *info = &_engine_info[engine_id]; |
371 |
371 |
372 if (ENGINE_AVAILABLE && RailVehInfo(engine_id)->power && e->railtype == railtype) { |
372 if (ENGINE_AVAILABLE && RailVehInfo(engine_id)->power && e->railtype == railtype) { |
373 count++; |
373 count++; |
374 if (sel[0]==0) selected_id[0] = engine_id; |
374 if (sel[0]==0) selected_id[0] = engine_id; |
375 sel[0]--; |
375 sel[0]--; |
376 if (HASBIT(e->player_avail, _local_player)) { |
376 if (HASBIT(e->player_avail, _local_player)) { |
392 do { |
392 do { |
393 info = &_engine_info[engine_id]; |
393 info = &_engine_info[engine_id]; |
394 if (ENGINE_AVAILABLE) { |
394 if (ENGINE_AVAILABLE) { |
395 if (sel[0]==0) selected_id[0] = engine_id; |
395 if (sel[0]==0) selected_id[0] = engine_id; |
396 count++; |
396 count++; |
397 sel[0]--; |
397 sel[0]--; |
398 } |
398 } |
399 } while (++engine_id,++e,--num); |
399 } while (++engine_id,++e,--num); |
400 |
400 |
401 if ( selected_id[0] != -1 ) { // only draw right array if we have anything in the left one |
401 if ( selected_id[0] != -1 ) { // only draw right array if we have anything in the left one |
402 num = NUM_ROAD_ENGINES; |
402 num = NUM_ROAD_ENGINES; |
403 engine_id = ROAD_ENGINES_INDEX; |
403 engine_id = ROAD_ENGINES_INDEX; |
404 e = &_engines[ROAD_ENGINES_INDEX]; |
404 e = &_engines[ROAD_ENGINES_INDEX]; |
405 cargo = RoadVehInfo(selected_id[0])->cargo_type; |
405 cargo = RoadVehInfo(selected_id[0])->cargo_type; |
406 |
406 |
407 do { |
407 do { |
408 if ( cargo == RoadVehInfo(engine_id)->cargo_type && HASBIT(e->player_avail, _local_player)) { |
408 if ( cargo == RoadVehInfo(engine_id)->cargo_type && HASBIT(e->player_avail, _local_player)) { |
409 count2++; |
409 count2++; |
410 if (sel[1]==0) selected_id[1] = engine_id; |
410 if (sel[1]==0) selected_id[1] = engine_id; |
411 sel[1]--; |
411 sel[1]--; |
412 } |
412 } |
413 } while (++engine_id,++e,--num); |
413 } while (++engine_id,++e,--num); |
414 } |
414 } |
415 break; |
415 break; |
416 } |
416 } |
417 |
417 |
418 case VEH_Ship: { |
418 case VEH_Ship: { |
419 int num = NUM_SHIP_ENGINES; |
419 int num = NUM_SHIP_ENGINES; |
420 Engine *e = &_engines[SHIP_ENGINES_INDEX]; |
420 Engine *e = &_engines[SHIP_ENGINES_INDEX]; |
421 byte cargo, refittable; |
421 byte cargo, refittable; |
422 EngineInfo *info; |
422 EngineInfo *info; |
423 engine_id = SHIP_ENGINES_INDEX; |
423 engine_id = SHIP_ENGINES_INDEX; |
424 |
424 |
425 do { |
425 do { |
426 info = &_engine_info[engine_id]; |
426 info = &_engine_info[engine_id]; |
427 if (ENGINE_AVAILABLE) { |
427 if (ENGINE_AVAILABLE) { |
428 if ( sel[0] == 0 ) selected_id[0] = engine_id; |
428 if ( sel[0] == 0 ) selected_id[0] = engine_id; |
429 count++; |
429 count++; |
430 sel[0]--; |
430 sel[0]--; |
431 } |
431 } |
432 } while (++engine_id,++e,--num); |
432 } while (++engine_id,++e,--num); |
433 |
433 |
434 if ( selected_id[0] != -1 ) { |
434 if ( selected_id[0] != -1 ) { |
435 num = NUM_SHIP_ENGINES; |
435 num = NUM_SHIP_ENGINES; |
436 e = &_engines[SHIP_ENGINES_INDEX]; |
436 e = &_engines[SHIP_ENGINES_INDEX]; |
437 engine_id = SHIP_ENGINES_INDEX; |
437 engine_id = SHIP_ENGINES_INDEX; |
438 cargo = ShipVehInfo(selected_id[0])->cargo_type; |
438 cargo = ShipVehInfo(selected_id[0])->cargo_type; |
439 refittable = ShipVehInfo(selected_id[0])->refittable; |
439 refittable = ShipVehInfo(selected_id[0])->refittable; |
440 |
440 |
441 do { |
441 do { |
442 if (HASBIT(e->player_avail, _local_player) |
442 if (HASBIT(e->player_avail, _local_player) |
443 && ( cargo == ShipVehInfo(engine_id)->cargo_type || refittable & ShipVehInfo(engine_id)->refittable)) { |
443 && ( cargo == ShipVehInfo(engine_id)->cargo_type || refittable & ShipVehInfo(engine_id)->refittable)) { |
444 |
444 |
445 if ( sel[1]==0) selected_id[1] = engine_id; |
445 if ( sel[1]==0) selected_id[1] = engine_id; |
446 sel[1]--; |
446 sel[1]--; |
447 count2++; |
447 count2++; |
448 } |
448 } |
449 } while (++engine_id,++e,--num); |
449 } while (++engine_id,++e,--num); |
450 } |
450 } |
451 break; |
451 break; |
452 } //end of ship |
452 } //end of ship |
453 |
453 |
454 case VEH_Aircraft:{ |
454 case VEH_Aircraft:{ |
455 int num = NUM_AIRCRAFT_ENGINES; |
455 int num = NUM_AIRCRAFT_ENGINES; |
456 byte subtype; |
456 byte subtype; |
457 Engine *e = &_engines[AIRCRAFT_ENGINES_INDEX]; |
457 Engine *e = &_engines[AIRCRAFT_ENGINES_INDEX]; |
458 EngineInfo *info; |
458 EngineInfo *info; |
464 count++; |
464 count++; |
465 if (sel[0]==0) selected_id[0] = engine_id; |
465 if (sel[0]==0) selected_id[0] = engine_id; |
466 sel[0]--; |
466 sel[0]--; |
467 } |
467 } |
468 } while (++engine_id,++e,--num); |
468 } while (++engine_id,++e,--num); |
469 |
469 |
470 if ( selected_id[0] != -1 ) { |
470 if ( selected_id[0] != -1 ) { |
471 num = NUM_AIRCRAFT_ENGINES; |
471 num = NUM_AIRCRAFT_ENGINES; |
472 e = &_engines[AIRCRAFT_ENGINES_INDEX]; |
472 e = &_engines[AIRCRAFT_ENGINES_INDEX]; |
473 subtype = AircraftVehInfo(selected_id[0])->subtype; |
473 subtype = AircraftVehInfo(selected_id[0])->subtype; |
474 engine_id = AIRCRAFT_ENGINES_INDEX; |
474 engine_id = AIRCRAFT_ENGINES_INDEX; |
488 // sets up the number of items in each list |
488 // sets up the number of items in each list |
489 SetVScrollCount(w, count); |
489 SetVScrollCount(w, count); |
490 SetVScroll2Count(w, count2); |
490 SetVScroll2Count(w, count2); |
491 WP(w,replaceveh_d).sel_engine[0] = selected_id[0]; |
491 WP(w,replaceveh_d).sel_engine[0] = selected_id[0]; |
492 WP(w,replaceveh_d).sel_engine[1] = selected_id[1]; |
492 WP(w,replaceveh_d).sel_engine[1] = selected_id[1]; |
493 |
493 |
494 WP(w,replaceveh_d).count[0] = count; |
494 WP(w,replaceveh_d).count[0] = count; |
495 WP(w,replaceveh_d).count[1] = count2; |
495 WP(w,replaceveh_d).count[1] = count2; |
496 return; |
496 return; |
497 } |
497 } |
498 |
498 |
499 |
499 |
500 static void DrawEngineArrayInReplaceWindow(Window *w, int x, int y, int x2, int y2, int pos, int pos2, |
500 static void DrawEngineArrayInReplaceWindow(Window *w, int x, int y, int x2, int y2, int pos, int pos2, |
501 int sel1, int sel2, int selected_id1, int selected_id2) |
501 int sel1, int sel2, int selected_id1, int selected_id2) |
502 { |
502 { |
503 int sel[2] = {sel1, sel2}; |
503 int sel[2] = {sel1, sel2}; |
504 int selected_id[2] = {selected_id1, selected_id2}; |
504 int selected_id[2] = {selected_id1, selected_id2}; |
505 switch (WP(w,replaceveh_d).vehicletype) { |
505 switch (WP(w,replaceveh_d).vehicletype) { |
506 case VEH_Train: { |
506 case VEH_Train: { |
516 train_engine_drawing_loop(&x, &y, &pos, &sel[0], &selected_id[0], railtype, w->vscroll.cap, true, false, true); // True engines |
516 train_engine_drawing_loop(&x, &y, &pos, &sel[0], &selected_id[0], railtype, w->vscroll.cap, true, false, true); // True engines |
517 train_engine_drawing_loop(&x2, &y2, &pos2, &sel[1], &selected_id[1], railtype, w->vscroll.cap, true, false, false); // True engines |
517 train_engine_drawing_loop(&x2, &y2, &pos2, &sel[1], &selected_id[1], railtype, w->vscroll.cap, true, false, false); // True engines |
518 train_engine_drawing_loop(&x2, &y2, &pos2, &sel[1], &selected_id[1], railtype, w->vscroll.cap, false, false, false); // Feeble wagons |
518 train_engine_drawing_loop(&x2, &y2, &pos2, &sel[1], &selected_id[1], railtype, w->vscroll.cap, false, false, false); // Feeble wagons |
519 break; |
519 break; |
520 } |
520 } |
521 |
521 |
522 case VEH_Road: { |
522 case VEH_Road: { |
523 int num = NUM_ROAD_ENGINES; |
523 int num = NUM_ROAD_ENGINES; |
524 Engine *e = &_engines[ROAD_ENGINES_INDEX]; |
524 Engine *e = &_engines[ROAD_ENGINES_INDEX]; |
525 int engine_id = ROAD_ENGINES_INDEX; |
525 int engine_id = ROAD_ENGINES_INDEX; |
526 byte cargo; |
526 byte cargo; |
527 EngineInfo *info; |
527 EngineInfo *info; |
528 |
528 |
529 if ( selected_id[0] >= ROAD_ENGINES_INDEX && selected_id[0] <= SHIP_ENGINES_INDEX ) { |
529 if ( selected_id[0] >= ROAD_ENGINES_INDEX && selected_id[0] <= SHIP_ENGINES_INDEX ) { |
530 cargo = RoadVehInfo(selected_id[0])->cargo_type; |
530 cargo = RoadVehInfo(selected_id[0])->cargo_type; |
531 |
531 |
532 do { |
532 do { |
533 info = &_engine_info[engine_id]; |
533 info = &_engine_info[engine_id]; |
534 if (ENGINE_AVAILABLE) { |
534 if (ENGINE_AVAILABLE) { |
535 if (IS_INT_INSIDE(--pos, -w->vscroll.cap, 0)) { |
535 if (IS_INT_INSIDE(--pos, -w->vscroll.cap, 0)) { |
536 DrawString(x+59, y+2, GetCustomEngineName(engine_id), sel[0]==0 ? 0xC : 0x10); |
536 DrawString(x+59, y+2, GetCustomEngineName(engine_id), sel[0]==0 ? 0xC : 0x10); |
537 DrawRoadVehEngine(x+29, y+6, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player))); |
537 DrawRoadVehEngine(x+29, y+6, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player))); |
538 y += 14; |
538 y += 14; |
539 } |
539 } |
540 |
540 |
541 if ( RoadVehInfo(engine_id)->cargo_type == cargo && HASBIT(e->player_avail, _local_player) ) { |
541 if ( RoadVehInfo(engine_id)->cargo_type == cargo && HASBIT(e->player_avail, _local_player) ) { |
542 if (IS_INT_INSIDE(--pos2, -w->vscroll.cap, 0) && RoadVehInfo(engine_id)->cargo_type == cargo) { |
542 if (IS_INT_INSIDE(--pos2, -w->vscroll.cap, 0) && RoadVehInfo(engine_id)->cargo_type == cargo) { |
543 DrawString(x2+59, y2+2, GetCustomEngineName(engine_id), sel[1]==0 ? 0xC : 0x10); |
543 DrawString(x2+59, y2+2, GetCustomEngineName(engine_id), sel[1]==0 ? 0xC : 0x10); |
544 DrawRoadVehEngine(x2+29, y2+6, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player))); |
544 DrawRoadVehEngine(x2+29, y2+6, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player))); |
545 y2 += 14; |
545 y2 += 14; |
550 } |
550 } |
551 } while (++engine_id, ++e,--num); |
551 } while (++engine_id, ++e,--num); |
552 } |
552 } |
553 break; |
553 break; |
554 } |
554 } |
555 |
555 |
556 case VEH_Ship: { |
556 case VEH_Ship: { |
557 int num = NUM_SHIP_ENGINES; |
557 int num = NUM_SHIP_ENGINES; |
558 Engine *e = &_engines[SHIP_ENGINES_INDEX]; |
558 Engine *e = &_engines[SHIP_ENGINES_INDEX]; |
559 int engine_id = SHIP_ENGINES_INDEX; |
559 int engine_id = SHIP_ENGINES_INDEX; |
560 byte cargo, refittable; |
560 byte cargo, refittable; |
561 EngineInfo *info; |
561 EngineInfo *info; |
562 |
562 |
563 if ( selected_id[0] != -1 ) { |
563 if ( selected_id[0] != -1 ) { |
564 cargo = ShipVehInfo(selected_id[0])->cargo_type; |
564 cargo = ShipVehInfo(selected_id[0])->cargo_type; |
565 refittable = ShipVehInfo(selected_id[0])->refittable; |
565 refittable = ShipVehInfo(selected_id[0])->refittable; |
566 |
566 |
567 do { |
567 do { |
568 info = &_engine_info[engine_id]; |
568 info = &_engine_info[engine_id]; |
569 if (ENGINE_AVAILABLE) { |
569 if (ENGINE_AVAILABLE) { |
570 if (IS_INT_INSIDE(--pos, -w->vscroll.cap, 0)) { |
570 if (IS_INT_INSIDE(--pos, -w->vscroll.cap, 0)) { |
571 DrawString(x+75, y+7, GetCustomEngineName(engine_id), sel[0]==0 ? 0xC : 0x10); |
571 DrawString(x+75, y+7, GetCustomEngineName(engine_id), sel[0]==0 ? 0xC : 0x10); |
586 } |
586 } |
587 } while (++engine_id, ++e,--num); |
587 } while (++engine_id, ++e,--num); |
588 } |
588 } |
589 break; |
589 break; |
590 } //end of ship |
590 } //end of ship |
591 |
591 |
592 case VEH_Aircraft: { |
592 case VEH_Aircraft: { |
593 if ( selected_id[0] != -1 ) { |
593 if ( selected_id[0] != -1 ) { |
594 int num = NUM_AIRCRAFT_ENGINES; |
594 int num = NUM_AIRCRAFT_ENGINES; |
595 Engine *e = &_engines[AIRCRAFT_ENGINES_INDEX]; |
595 Engine *e = &_engines[AIRCRAFT_ENGINES_INDEX]; |
596 int engine_id = AIRCRAFT_ENGINES_INDEX; |
596 int engine_id = AIRCRAFT_ENGINES_INDEX; |
631 uint16 click_scroll_pos = w->vscroll2.pos; |
631 uint16 click_scroll_pos = w->vscroll2.pos; |
632 uint16 click_scroll_cap = w->vscroll2.cap; |
632 uint16 click_scroll_cap = w->vscroll2.cap; |
633 byte click_side = 1; |
633 byte click_side = 1; |
634 |
634 |
635 switch(e->event) { |
635 switch(e->event) { |
636 case WE_PAINT: |
636 case WE_PAINT: |
637 { |
637 { |
638 int pos = w->vscroll.pos; |
638 int pos = w->vscroll.pos; |
639 int selected_id[2] = {-1,-1}; |
639 int selected_id[2] = {-1,-1}; |
640 int x = 1; |
640 int x = 1; |
641 int y = 15; |
641 int y = 15; |
642 int pos2 = w->vscroll2.pos; |
642 int pos2 = w->vscroll2.pos; |
643 int x2 = 1 + 228; |
643 int x2 = 1 + 228; |
644 int y2 = 15; |
644 int y2 = 15; |
645 int sel[2] = { WP(w,replaceveh_d).sel_index[0], WP(w,replaceveh_d).sel_index[1]}; |
645 int sel[2] = { WP(w,replaceveh_d).sel_index[0], WP(w,replaceveh_d).sel_index[1]}; |
646 |
646 |
647 SetupScrollStuffForReplaceWindow(w); |
647 SetupScrollStuffForReplaceWindow(w); |
648 |
648 |
649 selected_id[0] = WP(w,replaceveh_d).sel_engine[0]; |
649 selected_id[0] = WP(w,replaceveh_d).sel_engine[0]; |
650 selected_id[1] = WP(w,replaceveh_d).sel_engine[1]; |
650 selected_id[1] = WP(w,replaceveh_d).sel_engine[1]; |
651 |
651 |
652 // sets the selected left item to the top one if it's greater than the number of vehicles in the left side |
652 // sets the selected left item to the top one if it's greater than the number of vehicles in the left side |
653 |
653 |
654 if ( WP(w,replaceveh_d).count[0] <= sel[0] ) { |
654 if ( WP(w,replaceveh_d).count[0] <= sel[0] ) { |
655 if (WP(w,replaceveh_d).count[0]) { |
655 if (WP(w,replaceveh_d).count[0]) { |
656 sel[0] = 0; |
656 sel[0] = 0; |
674 return; |
674 return; |
675 } else { //there are no vehicles in the right window |
675 } else { //there are no vehicles in the right window |
676 selected_id[1] = -1; |
676 selected_id[1] = -1; |
677 } |
677 } |
678 } |
678 } |
679 |
679 |
680 if ( selected_id[0] == selected_id[1] || _autoreplace_array[selected_id[0]] == selected_id[1] |
680 if ( selected_id[0] == selected_id[1] || _autoreplace_array[selected_id[0]] == selected_id[1] |
681 || selected_id[0] == -1 || selected_id[1] == -1 ) |
681 || selected_id[0] == -1 || selected_id[1] == -1 ) |
682 SETBIT(w->disabled_state, 4); |
682 SETBIT(w->disabled_state, 4); |
683 else |
683 else |
684 CLRBIT(w->disabled_state, 4); |
684 CLRBIT(w->disabled_state, 4); |
685 |
685 |
686 if ( _autoreplace_array[selected_id[0]] == selected_id[0] || selected_id[0] == -1 ) |
686 if ( _autoreplace_array[selected_id[0]] == selected_id[0] || selected_id[0] == -1 ) |
687 SETBIT(w->disabled_state, 6); |
687 SETBIT(w->disabled_state, 6); |
688 else |
688 else |
689 CLRBIT(w->disabled_state, 6); |
689 CLRBIT(w->disabled_state, 6); |
690 |
690 |
691 // now the actual drawing of the window itself takes place |
691 // now the actual drawing of the window itself takes place |
692 DrawWindowWidgets(w); |
692 DrawWindowWidgets(w); |
693 |
693 |
694 |
694 |
695 |
695 |
696 // sets up the string for the vehicle that is being replaced to |
696 // sets up the string for the vehicle that is being replaced to |
697 if ( selected_id[0] != -1 ) { |
697 if ( selected_id[0] != -1 ) { |
698 if ( selected_id[0] == _autoreplace_array[selected_id[0]] ) |
698 if ( selected_id[0] == _autoreplace_array[selected_id[0]] ) |
699 SetDParam(0, STR_NOT_REPLACING); |
699 SetDParam(0, STR_NOT_REPLACING); |
700 else |
700 else |
701 SetDParam(0, GetCustomEngineName(_autoreplace_array[selected_id[0]])); |
701 SetDParam(0, GetCustomEngineName(_autoreplace_array[selected_id[0]])); |
702 } else { |
702 } else { |
703 SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED); |
703 SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED); |
704 } |
704 } |
705 |
705 |
706 |
706 |
707 DrawString(145, (WP(w,replaceveh_d).line_height == 24 ? 67 : 77 ) + ( WP(w,replaceveh_d).line_height * w->vscroll.cap), STR_02BD, 0x10); |
707 DrawString(145, (WP(w,replaceveh_d).line_height == 24 ? 67 : 77 ) + ( WP(w,replaceveh_d).line_height * w->vscroll.cap), STR_02BD, 0x10); |
708 |
708 |
709 |
709 |
710 /* now we draw the two arrays according to what we just counted */ |
710 /* now we draw the two arrays according to what we just counted */ |
711 DrawEngineArrayInReplaceWindow(w, x, y, x2, y2, pos, pos2, sel[0], sel[1], selected_id[0], selected_id[1]); |
711 DrawEngineArrayInReplaceWindow(w, x, y, x2, y2, pos, pos2, sel[0], sel[1], selected_id[0], selected_id[1]); |
712 |
712 |
713 WP(w,replaceveh_d).sel_engine[0] = selected_id[0]; |
713 WP(w,replaceveh_d).sel_engine[0] = selected_id[0]; |
714 WP(w,replaceveh_d).sel_engine[1] = selected_id[1]; |
714 WP(w,replaceveh_d).sel_engine[1] = selected_id[1]; |
715 /* now we draw the info about the vehicles we selected */ |
715 /* now we draw the info about the vehicles we selected */ |
716 switch (WP(w,replaceveh_d).vehicletype) { |
716 switch (WP(w,replaceveh_d).vehicletype) { |
717 case VEH_Train: { |
717 case VEH_Train: { |
718 byte i = 0; |
718 byte i = 0; |
719 int offset = 0; |
719 int offset = 0; |
720 |
720 |
721 for ( i = 0 ; i < 2 ; i++) { |
721 for ( i = 0 ; i < 2 ; i++) { |
722 if ( i ) |
722 if ( i ) |
723 offset = 228; |
723 offset = 228; |
724 if (selected_id[i] != -1) { |
724 if (selected_id[i] != -1) { |
725 if (!(RailVehInfo(selected_id[i])->flags & RVI_WAGON)) { |
725 if (!(RailVehInfo(selected_id[i])->flags & RVI_WAGON)) { |
733 } |
733 } |
734 } |
734 } |
735 } |
735 } |
736 break; |
736 break; |
737 } //end if case VEH_Train |
737 } //end if case VEH_Train |
738 |
738 |
739 case VEH_Road: { |
739 case VEH_Road: { |
740 if (selected_id[0] != -1) { |
740 if (selected_id[0] != -1) { |
741 Set_DPARAM_Road_Veh_Build_Window(selected_id[0]); |
741 Set_DPARAM_Road_Veh_Build_Window(selected_id[0]); |
742 DrawString(2, 15 + (14 * w->vscroll.cap), STR_9008_COST_SPEED_RUNNING_COST, 0); |
742 DrawString(2, 15 + (14 * w->vscroll.cap), STR_9008_COST_SPEED_RUNNING_COST, 0); |
743 if (selected_id[1] != -1) { |
743 if (selected_id[1] != -1) { |
745 DrawString(2 + 228, 15 + (14 * w->vscroll.cap), STR_9008_COST_SPEED_RUNNING_COST, 0); |
745 DrawString(2 + 228, 15 + (14 * w->vscroll.cap), STR_9008_COST_SPEED_RUNNING_COST, 0); |
746 } |
746 } |
747 } |
747 } |
748 break; |
748 break; |
749 } // end of VEH_Road |
749 } // end of VEH_Road |
750 |
750 |
751 case VEH_Ship: { |
751 case VEH_Ship: { |
752 if (selected_id[0] != -1) { |
752 if (selected_id[0] != -1) { |
753 Set_DPARAM_Ship_Build_Window(selected_id[0]); |
753 Set_DPARAM_Ship_Build_Window(selected_id[0]); |
754 DrawString(2, 15 + (24 * w->vscroll.cap), STR_980A_COST_SPEED_CAPACITY_RUNNING, 0); |
754 DrawString(2, 15 + (24 * w->vscroll.cap), STR_980A_COST_SPEED_CAPACITY_RUNNING, 0); |
755 if (selected_id[1] != -1) { |
755 if (selected_id[1] != -1) { |
756 Set_DPARAM_Ship_Build_Window(selected_id[1]); |
756 Set_DPARAM_Ship_Build_Window(selected_id[1]); |
757 DrawString(2 + 228, 15 + (24 * w->vscroll.cap), STR_980A_COST_SPEED_CAPACITY_RUNNING, 0); |
757 DrawString(2 + 228, 15 + (24 * w->vscroll.cap), STR_980A_COST_SPEED_CAPACITY_RUNNING, 0); |
758 } |
758 } |
759 } |
759 } |
760 break; |
760 break; |
761 } // end of VEH_Ship |
761 } // end of VEH_Ship |
762 |
762 |
763 case VEH_Aircraft: { |
763 case VEH_Aircraft: { |
764 if (selected_id[0] != -1) { |
764 if (selected_id[0] != -1) { |
765 Set_DPARAM_Aircraft_Build_Window(selected_id[0]); |
765 Set_DPARAM_Aircraft_Build_Window(selected_id[0]); |
766 DrawString(2, 15 + (24 * w->vscroll.cap), STR_A007_COST_SPEED_CAPACITY_PASSENGERS, 0); |
766 DrawString(2, 15 + (24 * w->vscroll.cap), STR_A007_COST_SPEED_CAPACITY_PASSENGERS, 0); |
767 if (selected_id[1] != -1) { |
767 if (selected_id[1] != -1) { |
777 case WE_CLICK: { |
777 case WE_CLICK: { |
778 switch(e->click.widget) { |
778 switch(e->click.widget) { |
779 /*case 0: |
779 /*case 0: |
780 DeleteWindowById(WC_REPLACE_VEHICLE, WP(w,replaceveh_d).vehicletype ); |
780 DeleteWindowById(WC_REPLACE_VEHICLE, WP(w,replaceveh_d).vehicletype ); |
781 break;*/ |
781 break;*/ |
782 |
782 |
783 case 14: case 15:/* Select sorting criteria dropdown menu */ |
783 case 14: case 15:/* Select sorting criteria dropdown menu */ |
784 // finds mask for available engines |
784 // finds mask for available engines |
785 { |
785 { |
786 int engine_avail = 0; |
786 int engine_avail = 0; |
787 if ( !(HASBIT(_engines[NUM_NORMAL_RAIL_ENGINES + NUM_MONORAIL_ENGINES].player_avail, _local_player))) { |
787 if ( !(HASBIT(_engines[NUM_NORMAL_RAIL_ENGINES + NUM_MONORAIL_ENGINES].player_avail, _local_player))) { |
795 case 4: { |
795 case 4: { |
796 _autoreplace_array[WP(w,replaceveh_d).sel_engine[0]] = WP(w,replaceveh_d).sel_engine[1]; |
796 _autoreplace_array[WP(w,replaceveh_d).sel_engine[0]] = WP(w,replaceveh_d).sel_engine[1]; |
797 SetWindowDirty(w); |
797 SetWindowDirty(w); |
798 break; |
798 break; |
799 } |
799 } |
800 |
800 |
801 case 6: { |
801 case 6: { |
802 _autoreplace_array[WP(w,replaceveh_d).sel_engine[0]] = WP(w,replaceveh_d).sel_engine[0]; |
802 _autoreplace_array[WP(w,replaceveh_d).sel_engine[0]] = WP(w,replaceveh_d).sel_engine[0]; |
803 SetWindowDirty(w); |
803 SetWindowDirty(w); |
804 break; |
804 break; |
805 } |
805 } |
806 |
806 |
807 case 7: |
807 case 7: |
808 // sets up that the left one was clicked. The default values are for the right one (9) |
808 // sets up that the left one was clicked. The default values are for the right one (9) |
809 // this way, the code for 9 handles both sides |
809 // this way, the code for 9 handles both sides |
810 click_scroll_pos = w->vscroll.pos; |
810 click_scroll_pos = w->vscroll.pos; |
811 click_scroll_cap = w->vscroll.cap; |
811 click_scroll_cap = w->vscroll.cap; |
812 click_side = 0; |
812 click_side = 0; |
816 WP(w,replaceveh_d).sel_index[click_side] = i + click_scroll_pos; |
816 WP(w,replaceveh_d).sel_index[click_side] = i + click_scroll_pos; |
817 SetWindowDirty(w); |
817 SetWindowDirty(w); |
818 } |
818 } |
819 } break; |
819 } break; |
820 } |
820 } |
821 |
821 |
822 } break; |
822 } break; |
823 |
823 |
824 case WE_DROPDOWN_SELECT: { /* we have selected a dropdown item in the list */ |
824 case WE_DROPDOWN_SELECT: { /* we have selected a dropdown item in the list */ |
825 //potiential bug: railtypes needs to be activated 0, 1, 2... If one is skipped, it messes up |
825 //potiential bug: railtypes needs to be activated 0, 1, 2... If one is skipped, it messes up |
826 WP(w,replaceveh_d).railtype = e->dropdown.index; |
826 WP(w,replaceveh_d).railtype = e->dropdown.index; |
827 SetWindowDirty(w); |
827 SetWindowDirty(w); |
828 break; |
828 } break; |
829 } |
829 |
830 case WE_RESIZE: { |
|
831 w->vscroll.cap += e->sizing.diff.y / (int)w->resize.step_height; |
|
832 w->vscroll2.cap += e->sizing.diff.y / (int)w->resize.step_height; |
|
833 |
|
834 w->widget[7].unkA = (w->vscroll.cap << 8) + 1; |
|
835 w->widget[9].unkA = (w->vscroll2.cap << 8) + 1; |
|
836 } break; |
|
830 } |
837 } |
831 } |
838 } |
832 |
839 |
833 static const Widget _replace_rail_vehicle_widgets[] = { |
840 static const Widget _replace_rail_vehicle_widgets[] = { |
834 { WWT_CLOSEBOX, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
841 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
835 { WWT_CAPTION, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
842 { WWT_CAPTION, RESIZE_NONE, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
836 { WWT_STICKYBOX, 14, 444, 455, 0, 13, 0x0, STR_STICKY_BUTTON}, |
843 { WWT_STICKYBOX, RESIZE_NONE, 14, 444, 455, 0, 13, 0x0, STR_STICKY_BUTTON}, |
837 { WWT_PANEL, 14, 0, 227, 126, 187, 0x0, STR_NULL}, |
844 { WWT_PANEL, RESIZE_TB, 14, 0, 227, 126, 187, 0x0, STR_NULL}, |
838 { WWT_PUSHTXTBTN, 14, 0, 138, 200, 211, STR_REPLACE_VEHICLES_START,STR_REPLACE_HELP_START_BUTTON}, |
845 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 138, 200, 211, STR_REPLACE_VEHICLES_START,STR_REPLACE_HELP_START_BUTTON}, |
839 { WWT_PANEL, 14, 139, 316, 188, 199, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
846 { WWT_PANEL, RESIZE_TB, 14, 139, 316, 188, 199, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
840 { WWT_PUSHTXTBTN, 14, 317, 455, 200, 211, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
847 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 306, 444, 200, 211, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
841 { WWT_MATRIX, 14, 0, 216, 14, 125, 0x801, STR_REPLACE_HELP_LEFT_ARRAY}, |
848 { WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 216, 14, 125, 0x801, STR_REPLACE_HELP_LEFT_ARRAY}, |
842 { WWT_SCROLLBAR, 14, 217, 227, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
849 { WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 217, 227, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
843 { WWT_MATRIX, 14, 228, 455, 14, 125, 0x801, STR_REPLACE_HELP_RIGHT_ARRAY}, |
850 { WWT_MATRIX, RESIZE_BOTTOM, 14, 228, 455, 14, 125, 0x801, STR_REPLACE_HELP_RIGHT_ARRAY}, |
844 { WWT_SCROLL2BAR, 14, 445, 455, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
851 { WWT_SCROLL2BAR, RESIZE_BOTTOM, 14, 445, 455, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
845 { WWT_PANEL, 14, 228, 455, 126, 187, 0x0, STR_NULL}, |
852 { WWT_PANEL, RESIZE_TB, 14, 228, 455, 126, 187, 0x0, STR_NULL}, |
846 // the rest are train specific stuff |
853 // the rest are train specific stuff |
847 { WWT_PANEL, 14, 0, 138, 188, 199, 0x0, STR_NULL}, |
854 { WWT_PANEL, RESIZE_TB, 14, 0, 138, 188, 199, 0x0, STR_NULL}, |
848 { WWT_PANEL, 3, 139, 153, 200, 211, 0x0, STR_NULL}, |
855 { WWT_PANEL, RESIZE_TB, 3, 139, 153, 200, 211, 0x0, STR_NULL}, |
849 { WWT_PANEL, 14, 154, 290, 200, 211, 0x0, STR_REPLACE_HELP_RAILTYPE}, |
856 { WWT_PANEL, RESIZE_TB, 14, 154, 289, 200, 211, 0x0, STR_REPLACE_HELP_RAILTYPE}, |
850 { WWT_CLOSEBOX, 14, 291, 301, 200, 210, STR_0225, STR_REPLACE_HELP_RAILTYPE}, |
857 { WWT_CLOSEBOX, RESIZE_TB, 14, 279, 287, 201, 210, STR_0225, STR_REPLACE_HELP_RAILTYPE}, |
851 { WWT_PANEL, 3, 301, 316, 200, 211, 0x0, STR_NULL}, |
858 { WWT_PANEL, RESIZE_TB, 3, 290, 305, 200, 211, 0x0, STR_NULL}, |
852 { WWT_PANEL, 14, 317, 455, 188, 199, 0x0, STR_NULL}, |
859 { WWT_PANEL, RESIZE_TB, 14, 317, 455, 188, 199, 0x0, STR_NULL}, |
853 |
860 { WWT_RESIZEBOX, RESIZE_TB, 14, 445, 455, 200, 211, 0x0, STR_RESIZE_BUTTON}, |
854 { WIDGETS_END}, |
861 { WIDGETS_END}, |
855 }; |
862 }; |
856 |
863 |
857 static const Widget _replace_road_vehicle_widgets[] = { |
864 static const Widget _replace_road_vehicle_widgets[] = { |
858 { WWT_CLOSEBOX, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
865 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
859 { WWT_CAPTION, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
866 { WWT_CAPTION, RESIZE_NONE, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
860 { WWT_STICKYBOX, 14, 444, 455, 0, 13, 0x0, STR_STICKY_BUTTON}, |
867 { WWT_STICKYBOX, RESIZE_NONE, 14, 444, 455, 0, 13, 0x0, STR_STICKY_BUTTON}, |
861 { WWT_PANEL, 14, 0, 227, 126, 187, 0x0, STR_NULL}, |
868 { WWT_PANEL, RESIZE_TB, 14, 0, 227, 126, 187, 0x0, STR_NULL}, |
862 { WWT_PUSHTXTBTN, 14, 0, 138, 188, 199, STR_REPLACE_VEHICLES_START,STR_REPLACE_HELP_START_BUTTON}, |
869 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 138, 188, 199, STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON}, |
863 { WWT_PANEL, 14, 139, 316, 188, 199, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
870 { WWT_PANEL, RESIZE_TB, 14, 139, 305, 188, 199, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
864 { WWT_PUSHTXTBTN, 14, 317, 455, 188, 199, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
871 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 306, 444, 188, 199, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
865 { WWT_MATRIX, 14, 0, 216, 14, 125, 0x801, STR_REPLACE_HELP_LEFT_ARRAY}, |
872 { WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 216, 14, 125, 0x801, STR_REPLACE_HELP_LEFT_ARRAY}, |
866 { WWT_SCROLLBAR, 14, 217, 227, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
873 { WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 217, 227, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
867 { WWT_MATRIX, 14, 228, 455, 14, 125, 0x801, STR_REPLACE_HELP_RIGHT_ARRAY}, |
874 { WWT_MATRIX, RESIZE_BOTTOM, 14, 228, 455, 14, 125, 0x801, STR_REPLACE_HELP_RIGHT_ARRAY}, |
868 { WWT_SCROLL2BAR, 14, 445, 455, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
875 { WWT_SCROLL2BAR, RESIZE_BOTTOM, 14, 445, 455, 14, 125, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
869 { WWT_PANEL, 14, 228, 455, 126, 187, 0x0, STR_NULL}, |
876 { WWT_PANEL, RESIZE_TB, 14, 228, 455, 126, 187, 0x0, STR_NULL}, |
877 { WWT_RESIZEBOX, RESIZE_TB, 14, 445, 455, 188, 199, 0x0, STR_RESIZE_BUTTON}, |
|
870 { WIDGETS_END}, |
878 { WIDGETS_END}, |
871 }; |
879 }; |
872 |
880 |
873 static const Widget _replace_ship_aircraft_vehicle_widgets[] = { |
881 static const Widget _replace_ship_aircraft_vehicle_widgets[] = { |
874 { WWT_CLOSEBOX, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
882 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
875 { WWT_CAPTION, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
883 { WWT_CAPTION, RESIZE_NONE, 14, 11, 443, 0, 13, STR_REPLACE_VEHICLES, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
876 { WWT_STICKYBOX, 14, 444, 455, 0, 13, 0x0, STR_STICKY_BUTTON}, |
884 { WWT_STICKYBOX, RESIZE_NONE, 14, 444, 455, 0, 13, 0x0, STR_STICKY_BUTTON}, |
877 { WWT_PANEL, 14, 0, 227, 110, 161, 0x0, STR_NULL}, |
885 { WWT_PANEL, RESIZE_TB, 14, 0, 227, 110, 161, 0x0, STR_NULL}, |
878 { WWT_PUSHTXTBTN, 14, 0, 138, 162, 173, STR_REPLACE_VEHICLES_START,STR_REPLACE_HELP_START_BUTTON}, |
886 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 138, 162, 173, STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON}, |
879 { WWT_PANEL, 14, 139, 316, 162, 173, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
887 { WWT_PANEL, RESIZE_TB, 14, 139, 305, 162, 173, 0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB}, |
880 { WWT_PUSHTXTBTN, 14, 317, 455, 162, 173, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
888 { WWT_PUSHTXTBTN, RESIZE_TB, 14, 306, 444, 162, 173, STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON}, |
881 { WWT_MATRIX, 14, 0, 216, 14, 109, 0x401, STR_REPLACE_HELP_LEFT_ARRAY}, |
889 { WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 216, 14, 109, 0x401, STR_REPLACE_HELP_LEFT_ARRAY}, |
882 { WWT_SCROLLBAR, 14, 217, 227, 14, 109, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
890 { WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 217, 227, 14, 109, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
883 { WWT_MATRIX, 14, 228, 455, 14, 109, 0x401, STR_REPLACE_HELP_RIGHT_ARRAY}, |
891 { WWT_MATRIX, RESIZE_BOTTOM, 14, 228, 455, 14, 109, 0x401, STR_REPLACE_HELP_RIGHT_ARRAY}, |
884 { WWT_SCROLL2BAR, 14, 445, 455, 14, 109, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
892 { WWT_SCROLL2BAR, RESIZE_BOTTOM, 14, 445, 455, 14, 109, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
885 { WWT_PANEL, 14, 228, 455, 110, 161, 0x0, STR_NULL}, |
893 { WWT_PANEL, RESIZE_TB, 14, 228, 455, 110, 161, 0x0, STR_NULL}, |
894 { WWT_RESIZEBOX, RESIZE_TB, 14, 445, 455, 162, 173, 0x0, STR_RESIZE_BUTTON}, |
|
886 { WIDGETS_END}, |
895 { WIDGETS_END}, |
887 }; |
896 }; |
888 |
897 |
889 static const WindowDesc _replace_rail_vehicle_desc = { |
898 static const WindowDesc _replace_rail_vehicle_desc = { |
890 -1, -1, 456, 212, |
899 -1, -1, 456, 212, |
891 WC_REPLACE_VEHICLE,0, |
900 WC_REPLACE_VEHICLE,0, |
892 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, |
901 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, |
893 _replace_rail_vehicle_widgets, |
902 _replace_rail_vehicle_widgets, |
894 ReplaceVehicleWndProc |
903 ReplaceVehicleWndProc |
895 }; |
904 }; |
896 |
905 |
897 static const WindowDesc _replace_road_vehicle_desc = { |
906 static const WindowDesc _replace_road_vehicle_desc = { |
898 -1, -1, 456, 200, |
907 -1, -1, 456, 200, |
899 WC_REPLACE_VEHICLE,0, |
908 WC_REPLACE_VEHICLE,0, |
900 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, |
909 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, |
901 _replace_road_vehicle_widgets, |
910 _replace_road_vehicle_widgets, |
902 ReplaceVehicleWndProc |
911 ReplaceVehicleWndProc |
903 }; |
912 }; |
904 |
913 |
905 static const WindowDesc _replace_ship_aircraft_vehicle_desc = { |
914 static const WindowDesc _replace_ship_aircraft_vehicle_desc = { |
906 -1, -1, 456, 174, |
915 -1, -1, 456, 174, |
907 WC_REPLACE_VEHICLE,0, |
916 WC_REPLACE_VEHICLE,0, |
908 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, |
917 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, |
909 _replace_ship_aircraft_vehicle_widgets, |
918 _replace_ship_aircraft_vehicle_widgets, |
910 ReplaceVehicleWndProc |
919 ReplaceVehicleWndProc |
911 }; |
920 }; |
912 |
921 |
913 |
922 |
914 void ShowReplaceVehicleWindow(byte vehicletype) |
923 void ShowReplaceVehicleWindow(byte vehicletype) |
915 { |
924 { |
916 Window *w; |
925 Window *w; |
917 |
926 |
918 DeleteWindowById(WC_REPLACE_VEHICLE, vehicletype ); |
927 DeleteWindowById(WC_REPLACE_VEHICLE, vehicletype ); |
919 |
928 |
920 switch (vehicletype) { |
929 switch (vehicletype) { |
921 case VEH_Train: |
930 case VEH_Train: |
922 w = AllocateWindowDescFront(&_replace_rail_vehicle_desc, vehicletype); |
931 w = AllocateWindowDescFront(&_replace_rail_vehicle_desc, vehicletype); |
923 w->vscroll.cap = 8; |
932 w->vscroll.cap = 8; |
933 w->resize.step_height = 14; |
|
924 WP(w,replaceveh_d).line_height = 14; |
934 WP(w,replaceveh_d).line_height = 14; |
925 break; |
935 break; |
926 case VEH_Road: |
936 case VEH_Road: |
927 w = AllocateWindowDescFront(&_replace_road_vehicle_desc, vehicletype); |
937 w = AllocateWindowDescFront(&_replace_road_vehicle_desc, vehicletype); |
928 w->vscroll.cap = 8; |
938 w->vscroll.cap = 8; |
939 w->resize.step_height = 14; |
|
929 WP(w,replaceveh_d).line_height = 14; |
940 WP(w,replaceveh_d).line_height = 14; |
930 break; |
941 break; |
931 case VEH_Ship: case VEH_Aircraft: |
942 case VEH_Ship: case VEH_Aircraft: |
932 w = AllocateWindowDescFront(&_replace_ship_aircraft_vehicle_desc, vehicletype); |
943 w = AllocateWindowDescFront(&_replace_ship_aircraft_vehicle_desc, vehicletype); |
933 w->vscroll.cap = 4; |
944 w->vscroll.cap = 4; |
945 w->resize.step_height = 24; |
|
934 WP(w,replaceveh_d).line_height = 24; |
946 WP(w,replaceveh_d).line_height = 24; |
935 break; |
947 break; |
936 default: return; |
948 default: return; |
937 } |
949 } |
938 WP(w,replaceveh_d).vehicletype = vehicletype; |
950 WP(w,replaceveh_d).vehicletype = vehicletype; |