From 822ce5661d636261dbf5358c4325c8e54340d86b Mon Sep 17 00:00:00 2001 From: maedhros Date: Mon, 26 Mar 2007 11:41:14 +0000 Subject: (svn r9475) -Codechange: Allow the purchase details widget to expand dynamically if there's still not enough room for the text. --- src/build_vehicle_gui.cpp | 27 +++++++++++++++++++++++++-- src/vehicle_gui.h | 2 +- 2 files changed, 26 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index b576d4d63..c5341fa72 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -41,6 +41,7 @@ enum BuildVehicleWidgets { BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME, BUILD_VEHICLE_WIDGET_RESIZE, + BUILD_VEHICLE_WIDGET_END }; static const Widget _build_vehicle_widgets[] = { @@ -527,8 +528,9 @@ static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const * @param x,y location where to draw the info * @param w how wide are the text allowed to be (size of widget/window to Draw in) * @param engine_number the engine of which to draw the info of + * @return y after drawing all the text */ -void DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number) +int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number) { const Engine *e = GetEngine(engine_number); YearMonthDay ymd; @@ -594,6 +596,8 @@ void DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number) /* Additional text from NewGRF */ y += ShowAdditionalText(x, y, w, engine_number); if (refitable) y += ShowRefitOptionsList(x, y, w, engine_number); + + return y; } /* Figure out what train EngineIDs to put in the list */ @@ -793,6 +797,23 @@ void DrawEngineList(byte type, int x, int y, const EngineList eng_list, uint16 m } } +static void ExpandPurchaseInfoWidget(Window *w, int expand_by) +{ + Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL]; + + SetWindowDirty(w); + wi->bottom += expand_by; + + for (uint i = BUILD_VEHICLE_WIDGET_BUILD; i < BUILD_VEHICLE_WIDGET_END; i++) { + wi = &w->widget[i]; + wi->top += expand_by; + wi->bottom += expand_by; + } + + w->height += expand_by; + SetWindowDirty(w); +} + static void DrawBuildVehicleWindow(Window *w) { const buildvehicle_d *bv = &WP(w, buildvehicle_d); @@ -808,7 +829,9 @@ static void DrawBuildVehicleWindow(Window *w) if (bv->sel_engine != INVALID_ENGINE) { const Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL]; - DrawVehiclePurchaseInfo(2, wi->top + 1, wi->right - wi->left - 2, bv->sel_engine); + int text_end = DrawVehiclePurchaseInfo(2, wi->top + 1, wi->right - wi->left - 2, bv->sel_engine); + + if (text_end > wi->bottom) ExpandPurchaseInfoWidget(w, text_end - wi->bottom); } DrawString(85, 15, _sort_listing[bv->vehicle_type][bv->sort_criteria], 0x10); diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index e104f8307..052bcf110 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -32,7 +32,7 @@ static inline bool ValidVLWFlags(uint16 flags) void PlayerVehWndProc(Window *w, WindowEvent *e); -void DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number); +int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number); void DrawTrainImage(const Vehicle *v, int x, int y, int count, int skip, VehicleID selection); void DrawRoadVehImage(const Vehicle *v, int x, int y, VehicleID selection); -- cgit v1.2.3-70-g09d2