diff options
Diffstat (limited to 'src/aircraft_gui.cpp')
-rw-r--r-- | src/aircraft_gui.cpp | 213 |
1 files changed, 44 insertions, 169 deletions
diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp index b161c84a7..fc94df771 100644 --- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -23,6 +23,50 @@ #include "vehicle_gui.h" #include "newgrf_engine.h" +/** +* Draw the details for the given vehicle at the position (x,y) +* +* @param v current vehicle +* @param x The x coordinate +* @param y The y coordinate +*/ +void DrawAircraftDetails(const Vehicle *v, int x, int y) +{ + int y_offset = (v->Next()->cargo_cap != 0) ? -11 : 0; + + for (const Vehicle *u = v ; u != NULL ; u = u->Next()) { + if (IsNormalAircraft(u)) { + SetDParam(0, u->engine_type); + SetDParam(1, u->build_year); + SetDParam(2, u->value); + DrawString(x, y, STR_A011_BUILT_VALUE, 0); + + SetDParam(0, u->cargo_type); + SetDParam(1, u->cargo_cap); + SetDParam(2, u->Next()->cargo_type); + SetDParam(3, u->Next()->cargo_cap); + DrawString(x, y + 10, (u->Next()->cargo_cap != 0) ? STR_A019_CAPACITY : STR_A01A_CAPACITY, 0); + } + + if (u->cargo_cap != 0) { + uint cargo_count = u->cargo.Count(); + + y_offset += 11; + if (cargo_count != 0) { + /* Cargo names (fix pluralness) */ + SetDParam(0, u->cargo_type); + SetDParam(1, cargo_count); + SetDParam(2, u->cargo.Source()); + DrawString(x, y + 21 + y_offset, STR_8813_FROM, 0); + } + } + } + + SetDParam(0, v->cargo.FeederShare()); + DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, 0); +} + + void DrawAircraftImage(const Vehicle *v, int x, int y, VehicleID selection) { SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); @@ -56,172 +100,3 @@ void CcBuildAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2) ShowVehicleViewWindow(v); } } - -static void AircraftDetailsWndProc(Window *w, WindowEvent *e) -{ - switch (e->event) { - case WE_PAINT: { - const Vehicle *v = GetVehicle(w->window_number); - - SetWindowWidgetDisabledState(w, 2, v->owner != _local_player); - - /* Disable service-scroller when interval is set to disabled */ - SetWindowWidgetDisabledState(w, 5, !_patches.servint_aircraft); - SetWindowWidgetDisabledState(w, 6, !_patches.servint_aircraft); - - SetDParam(0, v->index); - DrawWindowWidgets(w); - - /* Draw running cost */ - { - int year = v->age / 366; - - SetDParam(1, year); - - SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED); - SetDParam(2, v->max_age / 366); - SetDParam(3, v->GetDisplayRunningCost()); - DrawString(2, 15, STR_A00D_AGE_RUNNING_COST_YR, 0); - } - - /* Draw max speed */ - { - SetDParam(0, v->GetDisplayMaxSpeed()); - DrawString(2, 25, STR_A00E_MAX_SPEED, 0); - } - - /* Draw profit */ - { - SetDParam(0, v->profit_this_year); - SetDParam(1, v->profit_last_year); - DrawString(2, 35, STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR, 0); - } - - /* Draw breakdown & reliability */ - { - SetDParam(0, v->reliability * 100 >> 16); - SetDParam(1, v->breakdowns_since_last_service); - DrawString(2, 45, STR_A010_RELIABILITY_BREAKDOWNS, 0); - } - - /* Draw service interval text */ - { - SetDParam(0, v->service_interval); - SetDParam(1, v->date_of_last_service); - DrawString(13, 115, _patches.servint_ispercent?STR_SERVICING_INTERVAL_PERCENT:STR_883C_SERVICING_INTERVAL_DAYS, 0); - } - - /* Draw Transfer credits text */ - { - SetDParam(0, v->cargo.FeederShare()); - DrawString(60, 101, STR_FEEDER_CARGO_VALUE, 0); - } - - DrawAircraftImage(v, 3, 57, INVALID_VEHICLE); - - { - const Vehicle *u; - int y = 57; - - do { - if (IsNormalAircraft(v)) { - SetDParam(0, v->engine_type); - SetDParam(1, v->build_year); - SetDParam(2, v->value); - DrawString(60, y, STR_A011_BUILT_VALUE, 0); - y += 10; - - SetDParam(0, v->cargo_type); - SetDParam(1, v->cargo_cap); - u = v->Next(); - SetDParam(2, u->cargo_type); - SetDParam(3, u->cargo_cap); - DrawString(60, y, (u->cargo_cap != 0) ? STR_A019_CAPACITY : STR_A01A_CAPACITY, 0); - y += 14; - } - - uint cargo_count = v->cargo.Count(); - if (cargo_count != 0) { - - /* Cargo names (fix pluralness) */ - SetDParam(0, v->cargo_type); - SetDParam(1, cargo_count); - SetDParam(2, v->cargo.Source()); - DrawString(60, y, STR_8813_FROM, 0); - - y += 10; - } - } while ((v = v->Next()) != NULL); - } - } break; - - case WE_CLICK: { - int mod; - const Vehicle *v; - switch (e->we.click.widget) { - case 2: /* rename */ - v = GetVehicle(w->window_number); - SetDParam(0, v->index); - ShowQueryString(STR_VEHICLE_NAME, STR_A030_NAME_AIRCRAFT, 31, 150, w, CS_ALPHANUMERAL); - break; - case 5: /* increase int */ - mod = _ctrl_pressed? 5 : 10; - goto do_change_service_int; - case 6: /* decrease int */ - mod = _ctrl_pressed?- 5 : -10; -do_change_service_int: - v = GetVehicle(w->window_number); - - mod = GetServiceIntervalClamped(mod + v->service_interval); - if (mod == v->service_interval) return; - - DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING)); - break; - } - } break; - - case WE_ON_EDIT_TEXT: - if (e->we.edittext.str[0] != '\0') { - _cmd_text = e->we.edittext.str; - DoCommandP(0, w->window_number, 0, NULL, - CMD_NAME_VEHICLE | CMD_MSG(STR_A031_CAN_T_NAME_AIRCRAFT)); - } - break; - } -} - - -static const Widget _aircraft_details_widgets[] = { -{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, -{ WWT_CAPTION, RESIZE_NONE, 14, 11, 349, 0, 13, STR_A00C_DETAILS, STR_018C_WINDOW_TITLE_DRAG_THIS }, -{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 350, 389, 0, 13, STR_01AA_NAME, STR_A032_NAME_AIRCRAFT }, -{ WWT_PANEL, RESIZE_NONE, 14, 0, 389, 14, 55, 0x0, STR_NULL }, -{ WWT_PANEL, RESIZE_NONE, 14, 0, 389, 56, 113, 0x0, STR_NULL }, -{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 10, 114, 119, STR_0188, STR_884D_INCREASE_SERVICING_INTERVAL }, -{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 10, 120, 125, STR_0189, STR_884E_DECREASE_SERVICING_INTERVAL }, -{ WWT_PANEL, RESIZE_NONE, 14, 11, 389, 114, 125, 0x0, STR_NULL }, -{ WIDGETS_END}, -}; - -static const WindowDesc _aircraft_details_desc = { - WDP_AUTO, WDP_AUTO, 390, 126, 390, 126, - WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, - _aircraft_details_widgets, - AircraftDetailsWndProc -}; - - -void ShowAircraftDetailsWindow(const Vehicle *v) -{ - Window *w; - VehicleID veh = v->index; - - DeleteWindowById(WC_VEHICLE_ORDERS, veh); - DeleteWindowById(WC_VEHICLE_DETAILS, veh); - - w = AllocateWindowDescFront(&_aircraft_details_desc, veh); - w->caption_color = v->owner; -// w->vscroll.cap = 6; -// w->traindetails_d.tab = 0; -} |