36#include "table/strings.h"
74static const StringID _start_replace_dropdown[] = {
75 STR_REPLACE_VEHICLES_NOW,
76 STR_REPLACE_VEHICLES_WHEN_OLD,
95 std::array<Scrollbar *, 2> vscroll{};
110 if ((rvi->railveh_type ==
RAILVEH_WAGON) == show_engines)
return false;
114 if (rvi->
railtype != this->sel_railtype)
return false;
126 EngineID selected_engine = EngineID::Invalid();
128 uint8_t side = draw_left ? 0 : 1;
133 if (!draw_left && !this->show_hidden_engines && e->IsVariantHidden(
_local_company))
continue;
143 if (e->u.road.roadtype != this->sel_roadtype)
continue;
160 list.emplace_back(eid, e->info.variant_id, (side == 0) ?
EngineDisplayFlags{} : e->display_flags, 0);
168 if (eid == this->
sel_engine[side]) selected_engine = eid;
173 for (
const auto &variant : variants) {
193 this->
engines[side].swap(list);
202 if (this->
engines[0].NeedRebuild()) {
205 this->vscroll[0]->SetCount(this->
engines[0].size());
206 if (this->reset_sel_engine && this->
sel_engine[0] == EngineID::Invalid() && !this->
engines[0].empty()) {
213 if (this->
sel_engine[0] == EngineID::Invalid()) {
217 this->vscroll[1]->SetCount(this->
engines[1].size());
219 if (this->reset_sel_engine && this->
sel_engine[0] != EngineID::Invalid()) {
226 this->vscroll[1]->SetCount(this->
engines[1].size());
227 if (this->reset_sel_engine && this->
sel_engine[1] != EngineID::Invalid()) {
229 for (
const auto &item : this->
engines[1]) {
230 if (item.engine_id == this->sel_engine[1])
break;
233 this->vscroll[1]->ScrollTowards(position);
238 this->
engines[0].RebuildDone();
239 this->
engines[1].RebuildDone();
240 this->reset_sel_engine =
false;
260 this->vscroll[0]->SetPosition(0);
261 this->vscroll[1]->SetPosition(0);
263 this->
engines[0].ForceRebuild();
264 this->
engines[1].ForceRebuild();
265 this->reset_sel_engine =
true;
272 this->vehicle_type = vehicletype;
273 this->
engines[0].ForceRebuild();
274 this->
engines[1].ForceRebuild();
275 this->details_height = ((vehicletype ==
VEH_TRAIN) ? 10 : 9);
285 widget->
SetStringTip(STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN + vehicletype, STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP + vehicletype);
286 widget->
SetLowered(this->show_hidden_engines);
292 this->sel_group = id_g;
306 d.height += padding.height;
323 StringID str = this->GetWidget<NWidgetCore>(widget)->GetString();
327 d.width += padding.width;
328 d.height += padding.height;
336 d.width += padding.width;
337 d.height += padding.height;
345 d.width += padding.width;
346 d.height += padding.height;
356 d.width += padding.width;
357 d.height += padding.height;
367 d.width += padding.width;
368 d.height += padding.height;
376 d.width += padding.width;
377 d.height += padding.height;
388 switch (this->sel_group.base()) {
408 return GetString(STR_REPLACE_REMOVE_WAGON, STR_GROUP_NAME,
sel_group, remove_wagon ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF);
412 return GetString(STR_REPLACE_REMOVE_WAGON, STR_GROUP_DEFAULT_TRAINS + this->window_number, std::monostate{}, remove_wagon ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF);
417 return GetString(this->replace_engines ? STR_REPLACE_ENGINES : STR_REPLACE_WAGONS);
440 if (this->
sel_engine[0] != EngineID::Invalid()) {
442 str =
GetString(STR_REPLACE_NOT_REPLACING);
444 bool when_old =
false;
449 str =
GetString(STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED);
489 for (
int side = 0; side < 2; side++) {
490 if (this->
sel_engine[side] != EngineID::Invalid()) {
495 ted.FillDefaultCapacities(e);
503 if (needed_height != this->details_height) {
504 this->details_height = needed_height;
515 this->descending_sort_order ^=
true;
517 this->
engines[1].ForceRebuild();
522 this->show_hidden_engines ^=
true;
524 this->
engines[1].ForceRebuild();
535 list.push_back(MakeDropDownListStringItem(STR_REPLACE_ENGINES, 1));
536 list.push_back(MakeDropDownListStringItem(STR_REPLACE_WAGONS, 0));
546 ShowDropDownList(
this, GetRoadTypeDropDownList(RTTB_ROAD | RTTB_TRAM,
true,
true), this->sel_roadtype, widget);
561 if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) {
587 const auto it = this->vscroll[click_side]->GetScrolledItemFromWidget(this->
engines[click_side], pt.y,
this, widget);
588 if (it != this->
engines[click_side].end()) {
589 const auto &item = *it;
593 assert(item.variant_id != EngineID::Invalid());
606 if (click_side == 0 &&
_ctrl_pressed && e != EngineID::Invalid() &&
615 if (click_side == 0) {
616 this->
engines[1].ForceRebuild();
617 this->reset_sel_engine =
true;
629 if (this->sort_criteria != index) {
630 this->sort_criteria = index;
632 this->
engines[1].ForceRebuild();
639 if (temp == this->sel_railtype)
return;
640 this->sel_railtype = temp;
647 if (temp == this->sel_roadtype)
return;
648 this->sel_roadtype = temp;
654 this->replace_engines = index != 0;
655 this->
engines[0].ForceRebuild();
656 this->reset_sel_engine =
true;
690 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
694 this->
engines[0].ForceRebuild();
696 this->
engines[1].ForceRebuild();
690 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override {
…}
701static constexpr NWidgetPart _nested_replace_rail_vehicle_widgets[] = {
711 NWidget(
WWT_LABEL, INVALID_COLOUR),
SetStringTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP),
SetFill(1, 1),
SetMinimalTextLines(1,
WidgetDimensions::unscaled.framerect.Vertical()),
SetResize(1, 0),
714 NWidget(
WWT_LABEL, INVALID_COLOUR),
SetStringTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP),
SetFill(1, 1),
SetMinimalTextLines(1,
WidgetDimensions::unscaled.framerect.Vertical()),
SetResize(1, 0),
720 NWidget(
WWT_DROPDOWN, COLOUR_GREY,
WID_RV_RAIL_TYPE_DROPDOWN),
SetMinimalSize(136, 12),
SetToolTip(STR_REPLACE_RAILTYPE_TOOLTIP),
SetFill(1, 0),
SetResize(1, 0),
737 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_RV_LEFT_MATRIX),
SetMinimalSize(216, 0),
SetFill(1, 1),
SetMatrixDataTip(1, 0, STR_REPLACE_LEFT_ARRAY_TOOLTIP),
SetResize(1, 1),
SetScrollbar(
WID_RV_LEFT_SCROLLBAR),
739 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_RV_RIGHT_MATRIX),
SetMinimalSize(216, 0),
SetFill(1, 1),
SetMatrixDataTip(1, 0, STR_REPLACE_RIGHT_ARRAY_TOOLTIP),
SetResize(1, 1),
SetScrollbar(
WID_RV_RIGHT_SCROLLBAR),
746 NWidget(
WWT_PUSHTXTBTN, COLOUR_GREY,
WID_RV_TRAIN_WAGONREMOVE_TOGGLE),
SetMinimalSize(138, 12),
SetToolTip(STR_REPLACE_REMOVE_WAGON_TOOLTIP),
SetFill(1, 0),
SetResize(1, 0),
759 WDP_AUTO,
"replace_vehicle_train", 500, 140,
762 _nested_replace_rail_vehicle_widgets
765static constexpr NWidgetPart _nested_replace_road_vehicle_widgets[] = {
775 NWidget(
WWT_LABEL, INVALID_COLOUR),
SetStringTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP),
SetFill(1, 1),
SetMinimalTextLines(1,
WidgetDimensions::unscaled.framerect.Vertical()),
SetResize(1, 0),
778 NWidget(
WWT_LABEL, INVALID_COLOUR),
SetStringTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP),
SetFill(1, 1),
SetMinimalTextLines(1,
WidgetDimensions::unscaled.framerect.Vertical()),
SetResize(1, 0),
783 NWidget(
WWT_DROPDOWN, COLOUR_GREY,
WID_RV_ROAD_TYPE_DROPDOWN),
SetMinimalSize(136, 12),
SetToolTip(STR_REPLACE_ROADTYPE_TOOLTIP),
SetFill(1, 0),
SetResize(1, 0),
798 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_RV_LEFT_MATRIX),
SetMinimalSize(216, 0),
SetFill(1, 1),
SetMatrixDataTip(1, 0, STR_REPLACE_LEFT_ARRAY_TOOLTIP),
SetResize(1, 1),
SetScrollbar(
WID_RV_LEFT_SCROLLBAR),
800 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_RV_RIGHT_MATRIX),
SetMinimalSize(216, 0),
SetFill(1, 1),
SetMatrixDataTip(1, 0, STR_REPLACE_RIGHT_ARRAY_TOOLTIP),
SetResize(1, 1),
SetScrollbar(
WID_RV_RIGHT_SCROLLBAR),
817 WDP_AUTO,
"replace_vehicle_road", 500, 140,
820 _nested_replace_road_vehicle_widgets
823static constexpr NWidgetPart _nested_replace_vehicle_widgets[] = {
833 NWidget(
WWT_LABEL, INVALID_COLOUR),
SetStringTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP),
SetFill(1, 1),
SetMinimalTextLines(1,
WidgetDimensions::unscaled.framerect.Vertical()),
SetResize(1, 0),
836 NWidget(
WWT_LABEL, INVALID_COLOUR),
SetStringTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP),
SetFill(1, 1),
SetMinimalTextLines(1,
WidgetDimensions::unscaled.framerect.Vertical()),
SetResize(1, 0),
853 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_RV_LEFT_MATRIX),
SetMinimalSize(216, 0),
SetFill(1, 1),
SetMatrixDataTip(1, 0, STR_REPLACE_LEFT_ARRAY_TOOLTIP),
SetResize(1, 1),
SetScrollbar(
WID_RV_LEFT_SCROLLBAR),
855 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_RV_RIGHT_MATRIX),
SetMinimalSize(216, 0),
SetFill(1, 1),
SetMatrixDataTip(1, 0, STR_REPLACE_RIGHT_ARRAY_TOOLTIP),
SetResize(1, 1),
SetScrollbar(
WID_RV_RIGHT_SCROLLBAR),
871 WDP_AUTO,
"replace_vehicle", 456, 118,
874 _nested_replace_vehicle_widgets
885 switch (vehicletype) {
bool CheckAutoreplaceValidity(EngineID from, EngineID to, CompanyID company)
Checks some basic properties whether autoreplace is allowed.
Command definitions related to autoreplace.
Functions related to autoreplacing.
bool EngineHasReplacementWhenOldForCompany(const Company *c, EngineID engine, GroupID group)
Check if a company has a replacement set up for the given engine when it gets old.
EngineID EngineReplacementForCompany(const Company *c, EngineID engine, GroupID group, bool *replace_when_old=nullptr)
Retrieve the engine replacement for the given company and original engine type.
bool EngineHasReplacementForCompany(const Company *c, EngineID engine, GroupID group)
Check if a company has a replacement set up for the given engine.
void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype)
Show the autoreplace configuration window for a particular group.
void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g)
Rebuild the left autoreplace list if an engine is removed or added.
void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type)
When an engine is made buildable or is removed from being buildable, add/remove it from the build/aut...
void GUIEngineListAddChildren(GUIEngineList &dst, const GUIEngineList &src, EngineID parent, uint8_t indent)
Add children to GUI engine list to build a hierarchical tree.
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group, const GUIBadgeClasses &badge_classes)
Engine drawing loop.
bool _engine_sort_last_order[]
Last set direction of the sort order, for each vehicle type.
uint GetEngineListHeight(VehicleType type)
Get the height of a single 'entry' in the engine lists.
const std::initializer_list< const StringID > _engine_sort_listing[]
Dropdown menu strings for the vehicle sort criteria.
uint8_t _engine_sort_last_criteria[]
Last set sort criteria, for each vehicle type.
int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number, TestedEngineDetails &te)
Draw the purchase info details of a vehicle at a given location.
EngList_SortTypeFunction *const _engine_sort_functions[][11]
Sort functions for the vehicle sort criteria, for each vehicle type.
void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selected, WidgetID button)
Display the dropdown for the vehicle sort criteria.
bool _engine_sort_direction
false = descending, true = ascending.
bool _engine_sort_show_hidden_engines[]
Last set 'show hidden engines' setting for each vehicle type.
constexpr bool Test(Tvalue_type value) const
Test if the value-th bit is set.
constexpr Timpl & Flip(Tvalue_type value)
Flip the value-th bit.
Flat set implementation that uses a sorted vector for storage.
std::pair< const_iterator, bool > insert(const Tkey &key)
Insert a key into the set, if it does not already exist.
StringID replace_text
Text used in the autoreplace GUI.
struct RailTypeInfo::@23 strings
Strings associated with the rail type.
Window for the autoreplacing of vehicles.
void OnInit() override
Notification that the nested widget tree gets initialized.
void OnResize() override
Called after the window got resized.
bool GenerateReplaceRailList(EngineID e, bool draw_left, bool show_engines)
Figure out if an engine should be added to a list.
void DrawWidget(const Rect &r, WidgetID widget) const override
Draw the contents of a nested widget.
void ReplaceClick_StartReplace(bool replace_when_old)
Handle click on the start replace button.
void OnDropdownSelect(WidgetID widget, int index, int) override
A dropdown option associated to this window has been selected.
bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
Event to display a custom tooltip.
void OnClick(Point pt, WidgetID widget, int click_count) override
A click with the left mouse button has been made on the window.
uint8_t sort_criteria
Criteria of sorting vehicles.
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
RailType sel_railtype
Type of rail tracks selected. INVALID_RAILTYPE to show all.
void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) override
Update size and resize step of a widget in the window.
std::string GetWidgetString(WidgetID widget, StringID stringid) const override
Get the raw string for a widget.
bool replace_engines
If true, engines are replaced, if false, wagons are replaced (only for trains).
bool reset_sel_engine
Also reset sel_engine while updating left and/or right and no valid engine selected.
void OnPaint() override
The window must be repainted.
bool show_hidden_engines
Whether to show the hidden engines.
void GenerateLists()
Generate the lists.
RoadType sel_roadtype
Type of road selected. INVALID_ROADTYPE to show all.
std::array< GUIEngineList, 2 > engines
Left and right list of engines.
VehicleType vehicle_type
Type of vehicle in this window.
int details_height
Minimal needed height of the details panels, in text lines (found so far).
void GenerateReplaceVehList(bool draw_left)
Generate an engines list.
GroupID sel_group
Group selected to replace.
std::array< EngineID, 2 > sel_engine
Selected engine left and right.
bool descending_sort_order
Order of sorting vehicles.
void OnRailRoadTypeChange()
Perform tasks after rail or road type is changed.
StringID replace_text
Text used in the autoreplace GUI.
struct RoadTypeInfo::@26 strings
Strings associated with the rail type.
Functions related to commands.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Functions related to companies.
void ShowDropDownMenu(Window *w, std::span< const StringID > strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width)
Show a dropdown menu window near a widget of the parent window.
void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close, bool persist)
Show a drop down list.
Functions related to the drop down widget.
Types related to the drop down widget.
std::vector< std::unique_ptr< const DropDownListItem > > DropDownList
A drop down list is a collection of drop down list items.
@ HasVariants
Set if engine has variants.
@ IsFolded
Set if display of variants should be folded (hidden).
@ Shaded
Set if engine should be masked.
void EngList_Sort(GUIEngineList &el, EngList_SortTypeFunction compare)
Sort all items using quick sort and given 'CompareItems' function.
Engine GUI functions, used by build_vehicle_gui and autoreplace_gui
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.
@ PurchaseList
Name is shown in the purchase list (including autoreplace window 'Available vehicles' panel).
@ RAILVEH_WAGON
simple wagon, not motorized
fluid_settings_t * settings
FluidSynth settings handle.
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
Dimension maxdim(const Dimension &d1, const Dimension &d2)
Compute bounding box of both dimensions.
Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize)
Return the string dimension in pixels.
Dimension GetStringListBoundingBox(std::span< const StringID > list, FontSize fontsize)
Get maximum dimension of a list of strings.
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.
bool _ctrl_pressed
Is Ctrl pressed?
@ FS_NORMAL
Index of the normal font in the font tables.
@ SA_HOR_CENTER
Horizontally center the text.
@ ReplaceWagonRemoval
If set, autoreplace will perform wagon removal on vehicles in this group.
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e)
Get the number of engines with EngineID id_e in the group with GroupID id_g and its sub-groups.
Command definitions related to engine groups.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
static constexpr GroupID DEFAULT_GROUP
Ungrouped vehicles are in this group.
static constexpr GroupID ALL_GROUP
All vehicles are in this group.
constexpr bool IsInsideMM(const size_t x, const size_t min, const size_t max) noexcept
Checks if a value is in an interval.
void GuiShowTooltips(Window *parent, EncodedString &&text, TooltipCloseCondition close_tooltip)
Shows a tooltip.
Functions related to NewGRF badges.
Functions for NewGRF engines.
std::vector< RailType > _sorted_railtypes
Sorted list of rail types.
const RailTypeInfo * GetRailTypeInfo(RailType railtype)
Returns a pointer to the Railtype information for a given railtype.
DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option)
Create a drop down list for all the rail types of the local company.
RailType
Enumeration for all possible railtypes.
@ INVALID_RAILTYPE
Flag for invalid railtype.
const RoadTypeInfo * GetRoadTypeInfo(RoadType roadtype)
Returns a pointer to the Roadtype information for a given roadtype.
std::vector< RoadType > _sorted_roadtypes
Sorted list of road types.
Functions/types related to the road GUIs.
RoadType
The different roadtypes we support.
@ INVALID_ROADTYPE
flag for invalid roadtype
A number of safeguards to prevent using unsafe methods.
Command definitions related to settings.
Functions related to setting/changing the settings.
Definition of base types and functions in a cross-platform compatible way.
EncodedString GetEncodedString(StringID str)
Encode a string with no parameters into an encoded string.
std::string GetString(StringID string)
Resolve the given StringID into a std::string with formatting but no parameters.
TextDirection _current_text_dir
Text direction of the currently selected language.
Functions related to OTTD's strings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
@ TD_RTL
Text is written right-to-left by default.
CompanySettings settings
settings specific for each company
bool renew_keep_length
sell some wagons if after autoreplace the train is longer than before
Dimensions (a width and height) of a rectangle in 2D.
EngineID variant_id
Engine variant ID. If set, will be treated specially in purchase lists.
static Pool::IterateWrapperFiltered< Engine, EngineTypeFilter > IterateType(VehicleType vt, size_t from=0)
Returns an iterable ensemble of all valid engines of the given type.
EngineDisplayFlags display_flags
NOSAVE client-side-only display flags for build engine list.
EngineID engine_id
Engine to display in build purchase list.
GroupFlags flags
Group flags.
Coordinates of a point in 2D.
static Titem * Get(auto index)
Returns Titem with given index.
static bool IsValidID(auto index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
static Titem * GetIfValid(auto index)
Returns Titem with given index.
Information about a rail vehicle.
RailType railtype
Railtype, mangled if elrail is disabled.
Specification of a rectangle with absolute coordinates of all edges.
Rect WithWidth(int width, bool end) const
Copy Rect and set its width.
Rect Shrink(int s) const
Copy and shrink Rect by s pixels.
Extra information about refitted cargo and capacity.
High level window description.
Data structure for an opened window.
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
static int SortButtonWidth()
Get width of up/down arrow of sort button state.
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
void DrawWidgets() const
Paint all widgets of a window.
Window * parent
Parent window.
virtual std::string GetWidgetString(WidgetID widget, StringID stringid) const
Get the raw string for a widget.
void DrawSortButtonState(WidgetID widget, SortButtonState state) const
Draw a sort button's up or down arrow symbol.
ResizeInfo resize
Resize information.
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
Owner owner
The owner of the content shown in this window. Company colour is acquired from this variable.
void SetWidgetLoweredState(WidgetID widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
bool IsShaded() const
Is window shaded currently?
void HandleButtonClick(WidgetID widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
const Scrollbar * GetScrollbar(WidgetID widnum) const
Return the Scrollbar to a widget index.
void SetWidgetDisabledState(WidgetID widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
WindowNumber window_number
Window number within the window class.
Functions related to the vehicle's GUIs.
VehicleType
Available vehicle types.
@ VEH_INVALID
Non-existing type of vehicle.
@ VEH_ROAD
Road vehicle type.
@ VEH_TRAIN
Train vehicle type.
void CloseWindowById(WindowClass cls, WindowNumber number, bool force, int data)
Close a window by its class and window number (if it is open).
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data, bool gui_scope)
Mark window data of the window of a given class and specific window number as invalid (in need of re-...
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
Window functions not directly related to making/drawing windows.
Functions, definitions and such used only by the GUI.
@ Construction
This window is used for construction; close it whenever changing company.
@ SBS_DOWN
Sort ascending.
@ WDP_AUTO
Find a place automatically.
@ WC_REPLACE_VEHICLE
Replace vehicle window; Window numbers:
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
@ WC_BUILD_VEHICLE
Build vehicle; Window numbers: