38 #include "table/strings.h"
110 WDP_AUTO,
"depot_aircraft", 332, 99,
125 if (result.
Failed())
return;
136 if (v == wagon)
return;
138 if (wagon ==
nullptr) {
139 if (head !=
nullptr) wagon = head->
Last();
142 if (wagon ==
nullptr)
return;
145 if (wagon == v)
return;
163 switch (image_type) {
166 default: NOT_REACHED();
172 int max_extend_left = 0;
173 int max_extend_right = 0;
177 if (!e->IsEnabled())
continue;
184 default: NOT_REACHED();
190 if (y > max_height) max_height = y;
191 if (-x_offs > max_extend_left) max_extend_left = -x_offs;
192 if ((
int)x + x_offs > max_extend_right) max_extend_right = x + x_offs;
198 switch (image_type) {
210 default: NOT_REACHED();
228 if (!e->IsEnabled())
continue;
230 uint w = TRAININFO_DEFAULT_VEHICLE_WIDTH;
231 if (e->GetGRF() !=
nullptr && is_custom_sprite(e->u.rail.image_index)) {
232 w = e->GetGRF()->traininfo_vehicle_width;
233 if (w != VEHICLEINFO_FULL_VEHICLE_WIDTH) {
253 static void DepotSellAllConfirmationCallback(
Window *w,
bool confirmed);
261 bool check_unitnumber_digits;
265 uint unitnumber_digits;
276 this->generate_list =
true;
277 this->check_unitnumber_digits =
true;
278 this->hovered_widget = -1;
280 this->num_columns = 1;
281 this->unitnumber_digits = 2;
299 void Close([[maybe_unused]]
int data = 0)
override
314 bool free_wagon =
false;
325 uint x_space = free_wagon ?
342 default: NOT_REACHED();
368 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
391 int first_line = w + (-this->hscroll->
GetPosition()) % w;
393 for (
int x = image.right - first_line; x >= image.left; x -= w) {
397 for (
int x = image.left + first_line; x <= image.right; x += w) {
406 uint maxval =
static_cast<uint
>(std::min<size_t>(this->vehicle_list.size(), num + (rows_in_display * this->num_columns)));
409 for (uint i = 0; i < this->num_columns && num < maxval; i++, num++) {
411 const Vehicle *v = this->vehicle_list[num];
417 maxval =
static_cast<uint
>(std::min<size_t>(this->vehicle_list.size() + this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)));
421 const Vehicle *v = this->wagon_list[num - this->vehicle_list.size()];
426 void SetStringParameters(
WidgetID widget)
const override
439 enum DepotGUIAction {
446 DepotGUIAction GetVehicleFromDepotWndPt(
int x,
int y,
const Vehicle **veh, GetDepotVehiclePtData *d)
448 this->RefreshVehicleList();
452 x -= matrix_widget->
pos_x;
456 uint xt = 0, xm = 0, ym = 0;
462 if (xt >= this->num_columns)
return MODE_ERROR;
466 int32_t row = this->vscroll->GetScrolledRowFromWidget(y,
this,
WID_D_MATRIX);
469 if (row == INT32_MAX || this->vehicle_list.size() + this->wagon_list.size() <= pos) {
475 return MODE_DRAG_VEHICLE;
482 if (this->vehicle_list.size() > pos) {
483 *veh = this->vehicle_list[pos];
487 pos -= (uint)this->vehicle_list.size();
488 *veh = this->wagon_list[pos];
494 const Train *v =
nullptr;
497 d->head = d->wagon = v;
501 switch (this->type) {
503 if (wagon)
return MODE_ERROR;
507 if (xm <= this->
flag_size.width)
return MODE_START_STOP;
515 default: NOT_REACHED();
517 return MODE_SHOW_VEHICLE;
520 if (this->type !=
VEH_TRAIN)
return MODE_DRAG_VEHICLE;
523 if (xm >= matrix_widget->
current_x - this->count_width)
return wagon ? MODE_ERROR : MODE_SHOW_VEHICLE;
529 for (; v !=
nullptr; v = v->
Next()) {
536 return MODE_DRAG_VEHICLE;
548 DepotGUIAction mode = this->GetVehicleFromDepotWndPt(x, y, &v, &gdvp);
550 if (this->type ==
VEH_TRAIN) v = gdvp.wagon;
556 case MODE_DRAG_VEHICLE: {
563 TrainDepotMoveVehicle(v, sel, gdvp.head);
564 }
else if (v !=
nullptr) {
569 this->sel = v->
index;
575 case MODE_SHOW_VEHICLE:
579 case MODE_START_STOP:
583 default: NOT_REACHED();
595 this->GetWidget<NWidgetCore>(
WID_D_STOP_ALL)->tool_tip = STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP + type;
596 this->GetWidget<NWidgetCore>(
WID_D_START_ALL)->tool_tip = STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP + type;
597 this->GetWidget<NWidgetCore>(
WID_D_SELL)->tool_tip = STR_DEPOT_TRAIN_SELL_TOOLTIP + type;
598 this->GetWidget<NWidgetCore>(
WID_D_SELL_ALL)->tool_tip = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP + type;
600 this->GetWidget<NWidgetCore>(
WID_D_BUILD)->SetDataTip(STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON + type, STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP + type);
601 this->GetWidget<NWidgetCore>(
WID_D_CLONE)->SetDataTip(STR_DEPOT_CLONE_TRAIN + type, STR_DEPOT_CLONE_TRAIN_DEPOT_INFO + type);
603 this->GetWidget<NWidgetCore>(
WID_D_LOCATION)->tool_tip = STR_DEPOT_TRAIN_LOCATION_TOOLTIP + type;
604 this->GetWidget<NWidgetCore>(
WID_D_VEHICLE_LIST)->tool_tip = STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP + type;
605 this->GetWidget<NWidgetCore>(
WID_D_AUTOREPLACE)->tool_tip = STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP + type;
606 this->GetWidget<NWidgetCore>(
WID_D_MATRIX)->tool_tip = STR_DEPOT_TRAIN_LIST_TOOLTIP + this->type;
609 default: NOT_REACHED();
615 this->GetWidget<NWidgetCore>(
WID_D_SELL)->widget_data = SPR_SELL_TRAIN;
616 this->GetWidget<NWidgetCore>(
WID_D_SELL_ALL)->widget_data = SPR_SELL_ALL_TRAIN;
617 this->GetWidget<NWidgetCore>(
WID_D_AUTOREPLACE)->widget_data = SPR_REPLACE_TRAIN;
624 this->GetWidget<NWidgetCore>(
WID_D_SELL)->widget_data = SPR_SELL_ROADVEH;
625 this->GetWidget<NWidgetCore>(
WID_D_SELL_ALL)->widget_data = SPR_SELL_ALL_ROADVEH;
626 this->GetWidget<NWidgetCore>(
WID_D_AUTOREPLACE)->widget_data = SPR_REPLACE_ROADVEH;
633 this->GetWidget<NWidgetCore>(
WID_D_SELL)->widget_data = SPR_SELL_SHIP;
634 this->GetWidget<NWidgetCore>(
WID_D_SELL_ALL)->widget_data = SPR_SELL_ALL_SHIP;
642 this->GetWidget<NWidgetCore>(
WID_D_SELL)->widget_data = SPR_SELL_AIRCRAFT;
643 this->GetWidget<NWidgetCore>(
WID_D_SELL_ALL)->widget_data = SPR_SELL_ALL_AIRCRAFT;
644 this->GetWidget<NWidgetCore>(
WID_D_AUTOREPLACE)->widget_data = SPR_REPLACE_AIRCRAFT;
671 this->count_width = 0;
678 min_height = std::max<uint>(unumber.height, this->flag_size.height);
684 int base_width = this->count_width + this->header_width + padding.width;
686 resize.height = std::max<uint>(this->cell_size.
height, min_height + padding.height);
690 size.height =
resize.height * 6;
696 fill.width =
resize.width;
697 fill.height =
resize.height;
708 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
710 this->generate_list =
true;
713 void RefreshVehicleList()
715 if (this->generate_list) {
719 this->generate_list =
false;
720 DepotSortList(&this->vehicle_list);
722 this->check_unitnumber_digits =
true;
728 this->RefreshVehicleList();
730 if (this->check_unitnumber_digits) {
731 this->check_unitnumber_digits =
false;
734 if (this->unitnumber_digits < new_unitnumber_digits) {
735 this->unitnumber_digits = new_unitnumber_digits;
743 for (uint num = 0; num < this->vehicle_list.size(); num++) {
748 max_width = std::max(max_width,
width);
751 this->vscroll->
SetCount(this->vehicle_list.size() + this->wagon_list.size() + 1);
755 this->vscroll->
SetCount(
CeilDiv((uint)this->vehicle_list.size(), this->num_columns));
774 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
791 static const CursorID clone_icons[] = {
792 SPR_CURSOR_CLONE_TRAIN, SPR_CURSOR_CLONE_ROADVEH,
793 SPR_CURSOR_CLONE_SHIP, SPR_CURSOR_CLONE_AIRPLANE
825 if (!this->vehicle_list.empty() || !this->wagon_list.empty()) {
830 STR_DEPOT_SELL_CONFIRMATION_TEXT,
832 DepotSellAllConfirmationCallback
848 void OnQueryTextFinished(std::optional<std::string> str)
override
850 if (!str.has_value())
return;
856 bool OnRightClick([[maybe_unused]]
Point pt,
WidgetID widget)
override
860 GetDepotVehiclePtData gdvp = {
nullptr,
nullptr };
862 DepotGUIAction mode = this->GetVehicleFromDepotWndPt(pt.x, pt.y, &v, &gdvp);
864 if (this->type ==
VEH_TRAIN) v = gdvp.wagon;
866 if (v ==
nullptr || mode != MODE_DRAG_VEHICLE)
return false;
875 for (
const Vehicle *w = v; w !=
nullptr; w = w->
Next()) {
876 if (w->cargo_cap > 0 && w->cargo_type <
NUM_CARGO) {
877 capacity[w->cargo_type] += w->cargo_cap;
878 loaded [w->cargo_type] += w->cargo.StoredCount();
881 if (w->type ==
VEH_TRAIN && !w->HasArticulatedPart()) {
883 if (!whole_chain)
break;
888 static std::string details;
892 CargoID cargo_type = cs->Index();
893 if (capacity[cargo_type] == 0)
continue;
905 GuiShowTooltips(
this, whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, TCC_RIGHT_CLICK, 2);
936 bool OnVehicleSelect(VehicleList::const_iterator begin, VehicleList::const_iterator end)
override
948 ShowErrorMessage(STR_ERROR_CAN_T_BUY_TRAIN + (*begin)->type, STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST,
WL_INFO);
963 ShowErrorMessage(STR_ERROR_CAN_T_BUY_TRAIN + (*begin)->type, STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST,
WL_INFO);
984 if (this->hovered_widget != -1) {
987 this->hovered_widget = -1;
991 bool last_overlay_state;
1003 if (widget != this->hovered_widget) {
1008 this->hovered_widget = widget;
1026 GetDepotVehiclePtData gdvp = {
nullptr,
nullptr};
1028 if (this->GetVehicleFromDepotWndPt(pt.x, pt.y, &v, &gdvp) != MODE_DRAG_VEHICLE)
return;
1031 if (gdvp.head !=
nullptr) {
1032 if (gdvp.wagon ==
nullptr && gdvp.head->Last()->index != this->sel) {
1037 new_vehicle_over = gdvp.head->index;
1038 }
else if (gdvp.wagon !=
nullptr && gdvp.head != gdvp.wagon &&
1039 gdvp.wagon->index != this->sel &&
1040 gdvp.wagon->Previous()->index != this->sel) {
1041 new_vehicle_over = gdvp.wagon->index;
1045 if (this->vehicle_over == new_vehicle_over)
return;
1047 this->vehicle_over = new_vehicle_over;
1062 GetDepotVehiclePtData gdvp = {
nullptr,
nullptr };
1064 if (this->GetVehicleFromDepotWndPt(pt.x, pt.y, &v, &gdvp) == MODE_DRAG_VEHICLE && sel !=
INVALID_VEHICLE) {
1065 if (gdvp.wagon !=
nullptr && gdvp.wagon->index == sel &&
_ctrl_pressed) {
1067 }
else if (gdvp.wagon ==
nullptr || gdvp.wagon->index != sel) {
1069 TrainDepotMoveVehicle(gdvp.wagon, sel, gdvp.head);
1070 }
else if (gdvp.head !=
nullptr && gdvp.head->IsFrontEngine()) {
1074 }
else if (this->GetVehicleFromDepotWndPt(pt.x, pt.y, &v,
nullptr) == MODE_DRAG_VEHICLE && v !=
nullptr && sel == v->
index) {
1100 this->hovered_widget = -1;
1149 static void DepotSellAllConfirmationCallback(
Window *win,
bool confirmed)
1169 default: NOT_REACHED();
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).
void DrawAircraftImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineImageType image_type)
Draws an image of an aircraft.
uint8_t CargoID
Cargo slots to indicate a cargo type within a game.
static const CargoID NUM_CARGO
Maximum number of cargo types in a game.
std::vector< const CargoSpec * > _sorted_cargo_specs
Cargo specifications sorted alphabetically by name.
Common return value for all commands.
bool Failed() const
Did this command fail?
static constexpr int DAYS_IN_LEAP_YEAR
sometimes, you need one day more...
Functions related to commands.
Commands
List of commands.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Functions related to companies.
Base for all depots (except hangars)
Command definitions related to depots.
void InitDepotWindowBlockSizes()
Set the size of the blocks in the window so we can be sure that they are big enough for the vehicle s...
static constexpr NWidgetPart _nested_train_depot_widgets[]
Nested widget definition for train depots.
static uint _consistent_train_width
Whether trains of all lengths are consistently scaled. Either TRAININFO_DEFAULT_VEHICLE_WIDTH,...
void DeleteDepotHighlightOfVehicle(const Vehicle *v)
Removes the highlight of a vehicle in a depot window.
static VehicleCellSize _base_block_sizes_depot[VEH_COMPANY_END]
Cell size for vehicle images in the depot view.
void ShowDepotWindow(TileIndex tile, VehicleType type)
Opens a depot window.
VehicleCellSize GetVehicleImageCellSize(VehicleType type, EngineImageType image_type)
Get the GUI cell size for a vehicle image.
void CcCloneVehicle(Commands, const CommandCost &result, VehicleID veh_id)
This is the Callback method after the cloning attempt of a vehicle.
static VehicleCellSize _base_block_sizes_purchase[VEH_COMPANY_END]
Cell size for vehicle images in the purchase list.
static const uint MAX_LENGTH_DEPOT_NAME_CHARS
The maximum length of a depot name in characters including '\0'.
uint16_t EngineID
Unique identification number of an engine.
Functions related to errors.
void ShowErrorMessage(StringID summary_msg, int x, int y, CommandCost cc)
Display an error message in a window.
@ WL_INFO
Used for DoCommand-like (and some non-fatal AI GUI) errors/information.
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.
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?
Dimension GetScaledSpriteSize(SpriteID sprid)
Scale sprite size for GUI.
@ SA_RIGHT
Right align the text (must be a single bit).
@ SA_CENTER
Center both horizontally and vertically.
uint32_t CursorID
The number of the cursor (sprite)
@ FS_SMALL
Index of the small font in the font tables.
@ FS_NORMAL
Index of the normal font in the font tables.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
GUI functions that shouldn't be here.
void ShowExtraViewportWindow(TileIndex tile=INVALID_TILE)
Show a new Extra Viewport window.
constexpr uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
void GuiShowTooltips(Window *parent, StringID str, TooltipCloseCondition close_tooltip, uint paramcount)
Shows a tooltip.
void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback, bool focus)
Show a confirmation window with standard 'yes' and 'no' buttons The window is aligned to the centre o...
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
@ INVALID_CLIENT_ID
Client is not part of anything.
Functions related to order backups.
uint8_t GetColourGradient(Colours colour, ColourShade shade)
Get colour gradient palette index.
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).
void DrawRoadVehImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineImageType image_type, int skip)
Draws an image of a road vehicle chain.
A number of safeguards to prevent using unsafe methods.
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).
void DrawShipImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineImageType image_type)
Draws an image of a ship.
Functions to cache sprites in memory.
static const CursorID SPR_CURSOR_MOUSE
Cursor sprite numbers.
StationID GetStationIndex(Tile t)
Get StationID from a tile.
Definition of base types and functions in a cross-platform compatible way.
@ CS_ALPHANUMERAL
Both numeric and alphabetic and spaces and stuff.
void SetDParamMaxValue(size_t n, uint64_t max_value, uint min_count, FontSize size)
Set DParam n to some number that is suitable for string size computations.
void AppendStringInPlace(std::string &result, StringID string)
Resolve the given StringID and append in place into an existing std::string with all the associated D...
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
TextDirection _current_text_dir
Text direction of the currently selected language.
void SetDParamStr(size_t n, const char *str)
This function is used to "bind" a C string to a OpenTTD dparam slot.
void SetDParamMaxDigits(size_t n, uint count, FontSize size)
Set DParam n to some number that is suitable for string size computations.
Functions related to OTTD's strings.
@ TD_RTL
Text is written right-to-left by default.
VehicleType type
Type of vehicle.
Class for storing amounts of cargo.
Specification of a cargo type.
bool vehchain
vehicle chain is dragged
uint header_width
Width of unit number and flag, including separator.
void OnMouseLoop() override
Called for every mouse loop run, which is at least once per (game) tick.
VehicleID vehicle_over
Rail vehicle over which another one is dragged, INVALID_VEHICLE if none.
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
uint count_width
Width of length count, including separator.
void OnTimeout() override
Called when this window's timeout has been reached.
uint num_columns
Number of columns.
uint16_t GetDepotIndex() const
Gets the DepotID of the current window.
EventState OnCTRLStateChange() override
The state of the control key has changed.
void SetupWidgetData(VehicleType type)
Function to set up vehicle specific widgets (mainly sprites and strings).
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
bool OnVehicleSelect(const Vehicle *v) override
Clones a vehicle.
Dimension flag_size
Size of start/stop flag.
void DepotClick(int x, int y)
Handle click in the depot matrix.
Scrollbar * hscroll
Only for trains.
bool OnVehicleSelect(VehicleList::const_iterator begin, VehicleList::const_iterator end) override
Clones a vehicle from a vehicle list.
void OnResize() override
Called after the window got resized.
void OnPaint() override
The window must be repainted.
WidgetID hovered_widget
Index of the widget being hovered during drag/drop. -1 if no drag is in progress.
void OnInit() override
Notification that the nested widget tree gets initialized.
void DrawVehicleInDepot(const Vehicle *v, const Rect &r) const
Draw a vehicle in the depot window in the box with the top left corner at x,y.
VehicleCellSize cell_size
Vehicle sprite cell size.
Dimensions (a width and height) of a rectangle in 2D.
static Pool::IterateWrapperFiltered< Engine, EngineTypeFilter > IterateType(VehicleType vt, size_t from=0)
Returns an iterable ensemble of all valid engines of the given type.
uint16_t cached_total_length
Length of the whole vehicle (valid only for the first engine).
GroundVehicleCache gcache
Cache of often calculated values.
bool IsFreeWagon() const
Check if the vehicle is a free wagon (got no engine in front of it).
static void Reset(TileIndex tile=INVALID_TILE, bool from_gui=true)
Reset the OrderBackups from GUI/game logic.
Coordinates of a point in 2D.
Tindex index
Index of this pool item.
static Titem * Get(size_t index)
Returns Titem with given index.
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.
Rect WithHeight(int height, bool end=false) const
Copy Rect and set its height.
Rect Indent(int indent, bool end) const
Copy Rect and indent it from its position.
Rect Translate(int x, int y) const
Copy and translate Rect by x,y pixels.
uint step_height
Step-size of height resize changes.
uint step_width
Step-size of width resize changes.
static T * From(Vehicle *v)
Converts a Vehicle to SpecializedVehicle with type checking.
T * Next() const
Get next vehicle in the chain.
T * GetFirstEnginePart()
Get the first part of an articulated engine.
Data structure describing a sprite.
'Train' is either a loco or a wagon.
int GetDisplayImageWidth(Point *offset=nullptr) const
Get the width of a train vehicle image in the GUI.
Dimensions of a cell in the purchase/depot windows.
uint extend_left
Extend of the cell to the left.
uint height
Vehicle cell height.
uint extend_right
Extend of the cell to the right.
The information about a vehicle list.
EngineID engine_type
The type of engine used for this vehicle.
Vehicle * Previous() const
Get the previous vehicle of this vehicle.
Vehicle * Last()
Get the last vehicle of this vehicle chain.
Vehicle * Next() const
Get the next vehicle of this vehicle.
TimerGameCalendar::Date age
Age in calendar days.
Vehicle * FirstShared() const
Get the first vehicle of this vehicle chain.
TimerGameCalendar::Date max_age
Maximum age.
debug_inline bool IsGroundVehicle() const
Check if the vehicle is a ground vehicle.
TileIndex tile
Current tile index.
UnitID unitnumber
unit number, for display purposes only
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.
virtual void Close(int data=0)
Hide the window and all its child windows, and mark them for a later deletion.
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.
void RaiseWidget(WidgetID widget_index)
Marks a widget as raised.
void SetWidgetDirty(WidgetID widget_index) const
Invalidate a widget, i.e.
ResizeInfo resize
Resize information.
void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
Sets the enabled/disabled status of a list of widgets.
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
bool IsWidgetLowered(WidgetID widget_index) const
Gets the lowered state of a widget.
bool IsWidgetDisabled(WidgetID widget_index) const
Gets the enabled/disabled status of a widget.
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.
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.
int width
width of the window (number of pixels to the right in x direction)
void ToggleWidgetLoweredState(WidgetID widget_index)
Invert the lowered/raised status of a widget.
WindowNumber window_number
Window number within the window class.
Stuff related to the text buffer GUI.
@ QSF_ENABLE_DEFAULT
enable the 'Default' button ("\0" is returned)
@ QSF_LEN_IN_CHARS
the length of the string is counted in characters
bool IsTileOwner(Tile tile, Owner owner)
Checks if a tile belongs to the given owner.
Owner GetTileOwner(Tile tile)
Returns the owner of a tile.
static const uint TILE_SIZE
Tile size in world coordinates.
Functions related to tile highlights.
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
void SetObjectToPlaceWnd(CursorID icon, PaletteID pal, HighLightStyle mode, Window *w)
Change the cursor and mouse click/drag handling to a mode for performing special operations like tile...
@ HT_DRAG
dragging items in the depot windows
@ HT_VEHICLE
vehicle is accepted as target as well (bitmask)
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).
Command definitions related to trains.
void DrawTrainImage(const Train *v, const Rect &r, VehicleID selection, EngineImageType image_type, int skip, VehicleID drag_dest)
Draws an image of a whole train.
bool VehiclesHaveSameEngineList(const Vehicle *v1, const Vehicle *v2)
Checks if two vehicle chains have the same list of engines.
bool VehiclesHaveSameOrderList(const Vehicle *v1, const Vehicle *v2)
Checks if two vehicles have the same list of orders.
@ VS_STOPPED
Vehicle is stopped by the player.
Command definitions for vehicles.
Functions related to vehicles.
bool IsCompanyBuildableVehicleType(VehicleType type)
Is the given vehicle type buildable by a company?
uint GetUnitNumberDigits(VehicleList &vehicles)
Get the number of digits the biggest unit number of a set of vehicles has.
void ShowVehicleViewWindow(const Vehicle *v)
Shows the vehicle view window of the given vehicle.
bool VehicleClicked(const Vehicle *v)
Dispatch a "vehicle selected" event if any window waits for it.
void StartStopVehicle(const Vehicle *v, bool texteffect)
Executes CMD_START_STOP_VEHICLE for given vehicle.
void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type)
Set the mouse cursor to look like a vehicle.
bool ShowCargoIconOverlay()
Test if cargo icon overlays should be drawn.
uint GetVehicleHeight(VehicleType type)
Get the height of a single vehicle in the GUIs.
WindowClass GetWindowClassForVehicleType(VehicleType vt)
Get WindowClass for vehicle list of given vehicle type.
EngineImageType
Visualisation contexts of vehicles and engines.
@ EIT_PURCHASE
Vehicle drawn in purchase list, autoreplace gui, ...
@ EIT_IN_DEPOT
Vehicle drawn in depot.
VehicleType
Available vehicle types.
@ VEH_ROAD
Road vehicle type.
@ VEH_AIRCRAFT
Aircraft vehicle type.
@ VEH_SHIP
Ship vehicle type.
@ VEH_TRAIN
Train vehicle type.
@ VEH_COMPANY_END
Last company-ownable type.
uint32_t VehicleID
The type all our vehicle IDs have.
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons, bool individual_wagons)
Generate a list of vehicles inside a depot.
Functions and type for generating vehicle lists.
std::vector< const Vehicle * > VehicleList
A list of vehicles.
bool ScrollMainWindowToTile(TileIndex tile, bool instant)
Scrolls the viewport of the main window to a given location.
Functions related to (drawing on) viewports.
void CloseWindowById(WindowClass cls, WindowNumber number, bool force, int data)
Close a window by its class and window number (if it is open).
Window * BringWindowToFrontById(WindowClass cls, WindowNumber number)
Find a window and make it the relative top-window on the screen.
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
SpecialMouseMode _special_mouse_mode
Mode of the mouse.
Functions, definitions and such used only by the GUI.
@ WSM_DRAGDROP
Drag&drop an object.
bool AllEqual(It begin, It end, Pred pred)
Generic helper function that checks if all elements of the range are equal with respect to the given ...
@ WDP_AUTO
Find a place automatically.
EventState
State of handling an event.
@ ES_HANDLED
The passed event is handled.
@ ES_NOT_HANDLED
The passed event is not handled.
@ WC_VEHICLE_DEPOT
Depot view; Window numbers:
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
@ WC_BUILD_VEHICLE
Build vehicle; Window numbers:
Functions related to zooming.
int ScaleSpriteTrad(int value)
Scale traditional pixel dimensions to GUI zoom level, for drawing sprites.
int ScaleGUITrad(int value)
Scale traditional pixel dimensions to GUI zoom level.