OpenTTD Source  20241108-master-g80f628063a
engine_gui.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #include "stdafx.h"
11 #include "window_gui.h"
12 #include "engine_base.h"
13 #include "command_func.h"
14 #include "strings_func.h"
15 #include "engine_gui.h"
16 #include "articulated_vehicles.h"
17 #include "vehicle_func.h"
18 #include "company_func.h"
19 #include "rail.h"
20 #include "road.h"
21 #include "settings_type.h"
22 #include "train.h"
23 #include "roadveh.h"
24 #include "ship.h"
25 #include "aircraft.h"
26 #include "engine_cmd.h"
27 #include "zoom_func.h"
28 
29 #include "widgets/engine_widget.h"
30 
31 #include "table/strings.h"
32 
33 #include "safeguards.h"
34 
41 {
42  const Engine *e = Engine::Get(engine);
43  switch (e->type) {
44  default: NOT_REACHED();
45  case VEH_ROAD:
46  return GetRoadTypeInfo(e->u.road.roadtype)->strings.new_engine;
47  case VEH_AIRCRAFT: return STR_ENGINE_PREVIEW_AIRCRAFT;
48  case VEH_SHIP: return STR_ENGINE_PREVIEW_SHIP;
49  case VEH_TRAIN:
50  return GetRailTypeInfo(e->u.rail.railtype)->strings.new_loco;
51  }
52 }
53 
54 static constexpr NWidgetPart _nested_engine_preview_widgets[] = {
56  NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE),
57  NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE), SetDataTip(STR_ENGINE_PREVIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
58  EndContainer(),
59  NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE),
61  NWidget(WWT_EMPTY, INVALID_COLOUR, WID_EP_QUESTION), SetMinimalSize(300, 0), SetFill(1, 0),
63  NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_EP_NO), SetDataTip(STR_QUIT_NO, STR_NULL), SetFill(1, 0),
64  NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_EP_YES), SetDataTip(STR_QUIT_YES, STR_NULL), SetFill(1, 0),
65  EndContainer(),
66  EndContainer(),
67  EndContainer(),
68 };
69 
71  int vehicle_space; // The space to show the vehicle image
72 
74  {
75  this->InitNested(window_number);
76 
77  /* There is no way to recover the window; so disallow closure via DEL; unless SHIFT+DEL */
78  this->flags |= WF_STICKY;
79  }
80 
81  void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override
82  {
83  if (widget != WID_EP_QUESTION) return;
84 
85  /* Get size of engine sprite, on loan from depot_gui.cpp */
86  EngineID engine = this->window_number;
87  EngineImageType image_type = EIT_PURCHASE;
88  uint x, y;
89  int x_offs, y_offs;
90 
91  const Engine *e = Engine::Get(engine);
92  switch (e->type) {
93  default: NOT_REACHED();
94  case VEH_TRAIN: GetTrainSpriteSize( engine, x, y, x_offs, y_offs, image_type); break;
95  case VEH_ROAD: GetRoadVehSpriteSize( engine, x, y, x_offs, y_offs, image_type); break;
96  case VEH_SHIP: GetShipSpriteSize( engine, x, y, x_offs, y_offs, image_type); break;
97  case VEH_AIRCRAFT: GetAircraftSpriteSize(engine, x, y, x_offs, y_offs, image_type); break;
98  }
99  this->vehicle_space = std::max<int>(ScaleSpriteTrad(40), y - y_offs);
100 
101  size.width = std::max(size.width, x + std::abs(x_offs));
102  SetDParam(0, GetEngineCategoryName(engine));
103  size.height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size.width) + WidgetDimensions::scaled.vsep_wide + GetCharacterHeight(FS_NORMAL) + this->vehicle_space;
104  SetDParam(0, engine);
105  size.height += GetStringHeight(GetEngineInfoString(engine), size.width);
106  }
107 
108  void DrawWidget(const Rect &r, WidgetID widget) const override
109  {
110  if (widget != WID_EP_QUESTION) return;
111 
112  EngineID engine = this->window_number;
113  SetDParam(0, GetEngineCategoryName(engine));
114  int y = DrawStringMultiLine(r, STR_ENGINE_PREVIEW_MESSAGE, TC_FROMSTRING, SA_HOR_CENTER | SA_TOP) + WidgetDimensions::scaled.vsep_wide;
115 
117  DrawString(r.left, r.right, y, STR_ENGINE_NAME, TC_BLACK, SA_HOR_CENTER);
119 
120  DrawVehicleEngine(r.left, r.right, this->width >> 1, y + this->vehicle_space / 2, engine, GetEnginePalette(engine, _local_company), EIT_PREVIEW);
121 
122  y += this->vehicle_space;
123  DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER);
124  }
125 
126  void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
127  {
128  switch (widget) {
129  case WID_EP_YES:
130  Command<CMD_WANT_ENGINE_PREVIEW>::Post(this->window_number);
131  [[fallthrough]];
132  case WID_EP_NO:
133  if (!_shift_pressed) this->Close();
134  break;
135  }
136  }
137 
138  void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
139  {
140  if (!gui_scope) return;
141 
142  EngineID engine = this->window_number;
143  if (Engine::Get(engine)->preview_company != _local_company) this->Close();
144  }
145 };
146 
147 static WindowDesc _engine_preview_desc(
148  WDP_CENTER, nullptr, 0, 0,
151  _nested_engine_preview_widgets
152 );
153 
154 
155 void ShowEnginePreviewWindow(EngineID engine)
156 {
157  AllocateWindowDescFront<EnginePreviewWindow>(_engine_preview_desc, engine);
158 }
159 
166 {
168  return cap.GetSum<uint>();
169 }
170 
171 static StringID GetTrainEngineInfoString(const Engine *e)
172 {
173  SetDParam(0, STR_ENGINE_PREVIEW_COST_WEIGHT);
174  SetDParam(1, e->GetCost());
175  SetDParam(2, e->GetDisplayWeight());
176 
177  SetDParam(3, (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL && GetRailTypeInfo(e->u.rail.railtype)->acceleration_type != 2) ? STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE : STR_ENGINE_PREVIEW_SPEED_POWER);
179  SetDParam(5, e->GetPower());
181 
182  SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR);
183  SetDParam(8, e->GetRunningCost());
184 
185  SetDParam(9, STR_ENGINE_PREVIEW_CAPACITY);
186  uint capacity = GetTotalCapacityOfArticulatedParts(e->index);
187  SetDParam(10, capacity != 0 ? e->GetDefaultCargoType() : INVALID_CARGO);
188  SetDParam(11, capacity);
189 
190  return STR_ENGINE_PREVIEW_TEXT4;
191 }
192 
193 static StringID GetAircraftEngineInfoString(const Engine *e)
194 {
195  CargoID cargo = e->GetDefaultCargoType();
196  uint16_t mail_capacity;
197  uint capacity = e->GetDisplayDefaultCapacity(&mail_capacity);
198  uint16_t range = e->GetRange();
199 
200  SetDParam(0, STR_ENGINE_PREVIEW_COST_MAX_SPEED);
201  SetDParam(1, e->GetCost());
203 
204  SetDParam(3, range > 0 ? STR_ENGINE_PREVIEW_TYPE_RANGE : STR_ENGINE_PREVIEW_TYPE);
206  SetDParam(5, range);
207 
208  SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR);
209  SetDParam(8, e->GetRunningCost());
210 
211  SetDParam(9, mail_capacity > 0 ? STR_ENGINE_PREVIEW_CAPACITY_2 : STR_ENGINE_PREVIEW_CAPACITY);
212  SetDParam(10, cargo);
213  SetDParam(11, capacity);
214  SetDParam(12, GetCargoIDByLabel(CT_MAIL));
215  SetDParam(13, mail_capacity);
216 
217  return STR_ENGINE_PREVIEW_TEXT4;
218 }
219 
220 static StringID GetRoadVehEngineInfoString(const Engine *e)
221 {
222  SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR);
223  SetDParam(8, e->GetRunningCost());
224 
225  SetDParam(9, STR_ENGINE_PREVIEW_CAPACITY);
226  uint capacity = GetTotalCapacityOfArticulatedParts(e->index);
227  SetDParam(10, capacity != 0 ? e->GetDefaultCargoType() : INVALID_CARGO);
228  SetDParam(11, capacity);
229 
231  SetDParam(0, STR_ENGINE_PREVIEW_COST_MAX_SPEED);
232  SetDParam(1, e->GetCost());
234 
235  return STR_ENGINE_PREVIEW_TEXT3;
236  } else {
237  SetDParam(0, STR_ENGINE_PREVIEW_COST_WEIGHT);
238  SetDParam(1, e->GetCost());
239  SetDParam(2, e->GetDisplayWeight());
240 
241  SetDParam(3, STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE);
243  SetDParam(5, e->GetPower());
245 
246  return STR_ENGINE_PREVIEW_TEXT4;
247  }
248 }
249 
250 static StringID GetShipEngineInfoString(const Engine *e)
251 {
252  SetDParam(0, STR_ENGINE_PREVIEW_COST_MAX_SPEED);
253  SetDParam(1, e->GetCost());
255 
256  SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR);
257  SetDParam(8, e->GetRunningCost());
258 
259  SetDParam(9, STR_ENGINE_PREVIEW_CAPACITY);
260  SetDParam(10, e->GetDefaultCargoType());
262 
263  return STR_ENGINE_PREVIEW_TEXT3;
264 }
265 
266 
274 {
275  const Engine *e = Engine::Get(engine);
276 
277  switch (e->type) {
278  case VEH_TRAIN:
279  return GetTrainEngineInfoString(e);
280 
281  case VEH_ROAD:
282  return GetRoadVehEngineInfoString(e);
283 
284  case VEH_SHIP:
285  return GetShipEngineInfoString(e);
286 
287  case VEH_AIRCRAFT:
288  return GetAircraftEngineInfoString(e);
289 
290  default: NOT_REACHED();
291  }
292 }
293 
303 void DrawVehicleEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
304 {
305  const Engine *e = Engine::Get(engine);
306 
307  switch (e->type) {
308  case VEH_TRAIN:
309  DrawTrainEngine(left, right, preferred_x, y, engine, pal, image_type);
310  break;
311 
312  case VEH_ROAD:
313  DrawRoadVehEngine(left, right, preferred_x, y, engine, pal, image_type);
314  break;
315 
316  case VEH_SHIP:
317  DrawShipEngine(left, right, preferred_x, y, engine, pal, image_type);
318  break;
319 
320  case VEH_AIRCRAFT:
321  DrawAircraftEngine(left, right, preferred_x, y, engine, pal, image_type);
322  break;
323 
324  default: NOT_REACHED();
325  }
326 }
327 
334 {
335  if (el.size() < 2) return;
336  std::sort(el.begin(), el.end(), compare);
337 }
338 
346 void EngList_SortPartial(GUIEngineList &el, EngList_SortTypeFunction compare, size_t begin, size_t num_items)
347 {
348  if (num_items < 2) return;
349  assert(begin < el.size());
350  assert(begin + num_items <= el.size());
351  std::sort(el.begin() + begin, el.begin() + begin + num_items, compare);
352 }
353 
Base for aircraft.
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
Get the size of the sprite of an aircraft sprite heading west (used for lists).
CargoArray GetCapacityOfArticulatedParts(EngineID engine)
Get the capacity of the parts of a given engine.
Functions related to articulated vehicles.
uint8_t CargoID
Cargo slots to indicate a cargo type within a game.
Definition: cargo_type.h:22
struct RailTypeInfo::@26 strings
Strings associated with the rail type.
StringID new_loco
Name of an engine for this type of rail in the engine preview GUI.
Definition: rail.h:181
uint8_t acceleration_type
Acceleration type of this rail type.
Definition: rail.h:226
struct RoadTypeInfo::@29 strings
Strings associated with the rail type.
StringID new_engine
Name of an engine for this type of road in the engine preview GUI.
Definition: road.h:108
static bool UsingWallclockUnits(bool newgame=false)
Check if we are using wallclock units.
static WidgetDimensions scaled
Widget dimensions scaled for current zoom level.
Definition: window_gui.h:68
int vsep_wide
Wide vertical spacing.
Definition: window_gui.h:62
static const WidgetDimensions unscaled
Unscaled widget dimensions.
Definition: window_gui.h:67
Functions related to commands.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Definition: company_cmd.cpp:52
Functions related to companies.
Base class for engines.
Command definitions related to engines.
void EngList_Sort(GUIEngineList &el, EngList_SortTypeFunction compare)
Sort all items using quick sort and given 'CompareItems' function.
Definition: engine_gui.cpp:333
uint GetTotalCapacityOfArticulatedParts(EngineID engine)
Get the capacity of an engine with articulated parts.
Definition: engine_gui.cpp:165
StringID GetEngineCategoryName(EngineID engine)
Return the category of an engine.
Definition: engine_gui.cpp:40
void EngList_SortPartial(GUIEngineList &el, EngList_SortTypeFunction compare, size_t begin, size_t num_items)
Sort selected range of items (on indices @ <begin, begin+num_items-1>)
Definition: engine_gui.cpp:346
StringID GetEngineInfoString(EngineID engine)
Get a multi-line string with some technical data, describing the engine.
Definition: engine_gui.cpp:273
void DrawVehicleEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
Draw an engine.
Definition: engine_gui.cpp:303
Engine GUI functions, used by build_vehicle_gui and autoreplace_gui
bool EngList_SortTypeFunction(const GUIEngineListItem &, const GUIEngineListItem &)
argument type for EngList_Sort.
Definition: engine_gui.h:35
void DrawRoadVehEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
Draw a road vehicle engine.
uint16_t EngineID
Unique identification number of an engine.
Definition: engine_type.h:21
uint64_t PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32_t extra_data=0)
Combine an engine ID and a name context to an engine name dparam.
Definition: engine_type.h:199
@ PreviewNews
Name is shown in exclusive preview or newspaper.
Definition: engine_type.h:194
Types related to the engine widgets.
@ WID_EP_QUESTION
The container for the question.
Definition: engine_widget.h:15
@ WID_EP_NO
No button.
Definition: engine_widget.h:16
@ WID_EP_YES
Yes button.
Definition: engine_widget.h:17
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
Definition: fontcache.cpp:77
int GetStringHeight(std::string_view str, int maxw, FontSize fontsize)
Calculates height of string (in pixels).
Definition: gfx.cpp:704
bool _shift_pressed
Is Shift pressed?
Definition: gfx.cpp:39
int DrawString(int left, int right, int top, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
Definition: gfx.cpp:657
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly over multiple lines.
Definition: gfx.cpp:774
@ SA_TOP
Top align the text.
Definition: gfx_type.h:348
@ SA_HOR_CENTER
Horizontally center the text.
Definition: gfx_type.h:344
@ SA_CENTER
Center both horizontally and vertically.
Definition: gfx_type.h:353
@ FS_NORMAL
Index of the normal font in the font tables.
Definition: gfx_type.h:209
uint32_t PaletteID
The number of the palette.
Definition: gfx_type.h:19
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1181
constexpr NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1260
constexpr NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
Widget part function for setting additional space around a widget.
Definition: widget_type.h:1228
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1202
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
Definition: widget_type.h:1137
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1309
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1191
constexpr T abs(const T a)
Returns the absolute value of (scalar) variable.
Definition: math_func.hpp:23
Rail specific functions.
const RailTypeInfo * GetRailTypeInfo(RailType railtype)
Returns a pointer to the Railtype information for a given railtype.
Definition: rail.h:307
Road specific functions.
const RoadTypeInfo * GetRoadTypeInfo(RoadType roadtype)
Returns a pointer to the Roadtype information for a given roadtype.
Definition: road.h:227
Road vehicle states.
void GetRoadVehSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
Get the size of the sprite of a road vehicle sprite heading west (used for lists).
A number of safeguards to prevent using unsafe methods.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:57
Types related to global configuration settings.
Base for ships.
void GetShipSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
Get the size of the sprite of a ship sprite heading west (used for lists).
Definition: ship_cmd.cpp:120
Definition of base types and functions in a cross-platform compatible way.
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
Definition: strings.cpp:104
Functions related to OTTD's strings.
int64_t PackVelocity(uint speed, VehicleType type)
Pack velocity and vehicle type for use with SCC_VELOCITY string parameter.
Definition: strings_func.h:75
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
Class for storing amounts of cargo.
Definition: cargo_type.h:114
const T GetSum() const
Get the sum of all cargo amounts.
Definition: cargo_type.h:120
Dimensions (a width and height) of a rectangle in 2D.
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
Definition: engine_gui.cpp:138
StringID GetAircraftTypeText() const
Get the name of the aircraft type for display purposes.
Definition: engine.cpp:467
uint GetPower() const
Returns the power of the engine for display and sorting purposes.
Definition: engine.cpp:390
CargoID GetDefaultCargoType() const
Determines the default cargo type of an engine.
Definition: engine_base.h:96
uint16_t GetRange() const
Get the range of an aircraft type.
Definition: engine.cpp:453
Money GetCost() const
Return how much a new engine costs.
Definition: engine.cpp:318
uint GetDisplayMaxSpeed() const
Returns max speed of the engine for display purposes.
Definition: engine.cpp:358
uint GetDisplayWeight() const
Returns the weight of the engine for display purposes.
Definition: engine.cpp:408
VehicleType type
Vehicle type, ie VEH_ROAD, VEH_TRAIN, etc.
Definition: engine_base.h:56
uint GetDisplayDefaultCapacity(uint16_t *mail_capacity=nullptr) const
Determines the default cargo capacity of an engine for display purposes.
Definition: engine_base.h:116
Money GetRunningCost() const
Return how much the running costs of this engine are.
Definition: engine.cpp:281
uint GetDisplayMaxTractiveEffort() const
Returns the tractive effort of the engine for display purposes.
Definition: engine.cpp:426
VehicleSettings vehicle
options for vehicles
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:1075
Coordinates of a point in 2D.
Tindex index
Index of this pool item.
Definition: pool_type.hpp:238
static Titem * Get(size_t index)
Returns Titem with given index.
Definition: pool_type.hpp:339
RailType railtype
Railtype, mangled if elrail is disabled.
Definition: engine_type.h:46
Specification of a rectangle with absolute coordinates of all edges.
RoadType roadtype
Road type.
Definition: engine_type.h:128
uint8_t roadveh_acceleration_model
realistic acceleration for road vehicles
uint8_t train_acceleration_model
realistic acceleration for trains
High level window description.
Definition: window_gui.h:159
Data structure for an opened window.
Definition: window_gui.h:273
virtual void Close(int data=0)
Hide the window and all its child windows, and mark them for a later deletion.
Definition: window.cpp:1047
ResizeInfo resize
Resize information.
Definition: window_gui.h:314
Window(WindowDesc &desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition: window.cpp:1756
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1746
WindowFlags flags
Window flags.
Definition: window_gui.h:300
WindowNumber window_number
Window number within the window class.
Definition: window_gui.h:302
Base for the train class.
void GetTrainSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
Get the size of the sprite of a train sprite heading west, or both heads (used for lists).
Definition: train_cmd.cpp:581
PaletteID GetEnginePalette(EngineID engine_type, CompanyID company)
Get the colour map for an engine.
Definition: vehicle.cpp:2142
Functions related to vehicles.
EngineImageType
Visualisation contexts of vehicles and engines.
Definition: vehicle_type.h:78
@ EIT_PURCHASE
Vehicle drawn in purchase list, autoreplace gui, ...
Definition: vehicle_type.h:83
@ EIT_PREVIEW
Vehicle drawn in preview window, news, ...
Definition: vehicle_type.h:84
@ VEH_ROAD
Road vehicle type.
Definition: vehicle_type.h:25
@ VEH_AIRCRAFT
Aircraft vehicle type.
Definition: vehicle_type.h:27
@ VEH_SHIP
Ship vehicle type.
Definition: vehicle_type.h:26
@ VEH_TRAIN
Train vehicle type.
Definition: vehicle_type.h:24
@ NC_EQUALSIZE
Value of the NCB_EQUALSIZE flag.
Definition: widget_type.h:524
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.
Definition: widget_type.h:112
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:75
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:50
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:61
@ NWID_VERTICAL
Vertical container.
Definition: widget_type.h:77
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition: widget_type.h:69
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget tree.
Definition: widget_type.h:48
Functions, definitions and such used only by the GUI.
@ WF_STICKY
Window is made sticky by user.
Definition: window_gui.h:234
@ WDF_CONSTRUCTION
This window is used for construction; close it whenever changing company.
Definition: window_gui.h:203
@ WDP_CENTER
Center the window.
Definition: window_gui.h:148
int WidgetID
Widget ID.
Definition: window_type.h:18
int32_t WindowNumber
Number to differentiate different windows of the same class.
Definition: window_type.h:737
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:45
@ WC_ENGINE_PREVIEW
Engine preview window; Window numbers:
Definition: window_type.h:600
Functions related to zooming.
int ScaleSpriteTrad(int value)
Scale traditional pixel dimensions to GUI zoom level, for drawing sprites.
Definition: zoom_func.h:107