|
OpenTTD Source
14.0-beta3
|
Go to the documentation of this file.
41 static constexpr
NWidgetPart _nested_group_widgets[] = {
62 SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP),
64 SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP),
66 SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP),
68 SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_GROUP_LIVERY_TOOLTIP),
71 SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP),
94 NWidget(
WWT_MATRIX, COLOUR_GREY,
WID_GL_LIST_VEHICLE),
SetMinimalSize(248, 0),
SetMatrixDataTip(1, 0, STR_NULL),
SetResize(1, 1),
SetFill(1, 0),
SetScrollbar(
WID_GL_LIST_VEHICLE_SCROLLBAR),
100 SetDataTip(STR_JUST_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP),
103 SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP),
105 SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP),
107 SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP),
142 for (
const Group *g : source) {
143 if (g->parent !=
parent)
continue;
144 this->groups.push_back(g);
145 this->indents.push_back(indent);
148 bool has_children = std::any_of(source.begin(), source.end(), [g](
const Group *child){ return child->parent == g->index; });
151 AddChildren(source, g->index, indent + 1);
165 this->groups.clear();
166 this->indents.clear();
171 if (g->owner ==
owner && g->vehicle_type == this->vli.vtype) {
179 const Group *last_group[2] = {
nullptr,
nullptr };
180 std::string last_name[2] = { {}, {} };
182 if (a != last_group[0]) {
185 last_name[0] =
GetString(STR_GROUP_NAME);
188 if (b != last_group[1]) {
191 last_name[1] =
GetString(STR_GROUP_NAME);
201 this->groups.shrink_to_fit();
212 this->tiny_step_height = this->column_size[
VGC_FOLD].height;
216 this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[
VGC_NAME].
height);
219 this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[
VGC_PROTECT].
height);
222 this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[
VGC_AUTOREPLACE].
height);
226 static const SpriteID profit_sprites[] = {SPR_PROFIT_NA, SPR_PROFIT_NEGATIVE, SPR_PROFIT_SOME, SPR_PROFIT_LOT};
227 for (uint i = 0; i <
lengthof(profit_sprites); i++) {
231 this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[
VGC_PROFIT].
height);
237 this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[
VGC_NUMBER].
height);
261 void DrawGroupInfo(
int y,
int left,
int right,
GroupID g_id,
int indent = 0,
bool protection =
false,
bool has_children =
false)
const
264 if (g_id == this->group_over) {
278 DrawSprite(
Group::Get(g_id)->folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, rtl ? x - indent : x + indent, y + (this->tiny_step_height - this->column_size[
VGC_FOLD].
height) / 2);
284 str = STR_GROUP_ALL_TRAINS + this->
vli.
vtype;
285 }
else if (IsDefaultGroupID(g_id)) {
286 str = STR_GROUP_DEFAULT_TRAINS + this->
vli.
vtype;
289 str = STR_GROUP_NAME;
292 DrawString(x + (rtl ? 0 : indent), x + this->column_size[
VGC_NAME].
width - 1 - (rtl ? indent : 0), y + (this->tiny_step_height - this->column_size[
VGC_NAME].
height) / 2, str, colour);
296 if (protection)
DrawSprite(SPR_GROUP_REPLACE_PROTECT, PAL_NONE, x, y + (this->tiny_step_height - this->column_size[
VGC_PROTECT].
height) / 2);
307 if (num_vehicle_min_age == 0) {
309 }
else if (profit_last_year_min_age < 0) {
310 spr = SPR_PROFIT_NEGATIVE;
312 spr = SPR_PROFIT_SOME;
314 spr = SPR_PROFIT_LOT;
322 if (
IsAllGroupID(g_id) || IsDefaultGroupID(g_id) || num_vehicle_with_subgroups == num_vehicle) {
327 SetDParam(1, num_vehicle_with_subgroups - num_vehicle);
341 }
else if (IsDefaultGroupID(this->group_over)) {
364 this->group_sb->
SetCount(this->groups.size());
366 this->GetWidget<NWidgetCore>(
WID_GL_CAPTION)->widget_data = STR_VEHICLE_LIST_TRAIN_CAPTION + this->
vli.
vtype;
378 this->BuildVehicleList();
379 this->SortVehicleList();
405 d.height += padding.height;
413 size->height = 4 *
resize->height;
422 size->width = std::max(size->width,
GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock));
423 size->width = std::max(size->width,
GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar));
424 size->width = std::max(size->width,
GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock));
425 size->width += padding.width;
434 d.height += padding.height;
435 d.width += padding.width;
447 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
471 void SetStringParameters(
WidgetID widget)
const override
506 this->BuildVehicleList();
507 this->SortVehicleList();
511 this->group_sb->
SetCount(this->groups.size());
544 uint16_t protect_sprite = SPR_GROUP_REPLACE_OFF_TRAIN;
557 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
571 uint64_t occupancy = 0;
574 assert(v->owner == this->owner);
576 this_year += v->GetDisplayProfitThisYear();
577 last_year += v->GetDisplayProfitLastYear();
578 occupancy += v->trip_occupancy;
593 DrawString(tr, STR_GROUP_OCCUPANCY, TC_BLACK);
594 const size_t vehicle_count = this->vehicles.size();
595 if (vehicle_count > 0) {
605 size_t max = std::min<size_t>(this->group_sb->
GetPosition() + this->group_sb->GetCapacity(), this->groups.size());
606 for (
size_t i = this->group_sb->
GetPosition(); i < max; ++i) {
607 const Group *g = this->groups[i];
609 assert(g->
owner == this->owner);
615 if ((uint)this->group_sb->
GetPosition() + this->group_sb->GetCapacity() > this->groups.size()) {
629 size_t max = std::min<size_t>(this->vscroll->
GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size());
630 for (
size_t i = this->vscroll->
GetPosition(); i < max; ++i) {
632 if (v->
group_id != this->vli.index) {
635 mr = mr.
Translate(0, this->resize.step_height);
644 static void DeleteGroupCallback(
Window *win,
bool confirmed)
653 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
682 if (!IsDefaultGroupID(this->
vli.
index)) {
691 if (it == this->groups.end())
return;
693 size_t id_g = it - this->groups.begin();
694 if ((*it)->folded || (id_g + 1 < this->groups.size() && this->indents[id_g + 1] > this->indents[id_g])) {
696 NWidgetCore *group_display = this->GetWidget<NWidgetCore>(widget);
700 if (click_count > 1 || (pt.x >= x && pt.x < (
int)(x + this->column_size[
VGC_FOLD].width))) {
706 if (g ==
groups[id_g]->index) {
721 this->group_sel = this->
vli.
index = this->groups[id_g]->index;
740 const Vehicle *v2 = vehgroup.GetSingleVehicle();
746 case GB_SHARED_ORDERS: {
747 assert(vehgroup.NumVehicles() > 0);
790 this->group_confirm = this->
vli.
index;
791 ShowQuery(STR_QUERY_GROUP_DELETE_CAPTION, STR_GROUP_DELETE_QUERY_TEXT,
this, DeleteGroupCallback);
796 this->ShowRenameGroupWindow(this->
vli.
index,
false);
848 if (this->group_sel != new_g && g->
parent != new_g) {
897 const Vehicle *v = vehgroup.GetSingleVehicle();
904 case GB_SHARED_ORDERS: {
907 if (vindex == v->
index) {
908 if (vehgroup.NumVehicles() == 1) {
911 ShowVehicleListWindow(v);
928 if (this->vehicle_sel !=
INVALID_VEHICLE) OnDragDrop_Vehicle(pt, widget);
929 if (this->group_sel !=
INVALID_GROUP) OnDragDrop_Group(pt, widget);
934 void OnQueryTextFinished(
char *str)
override
946 void OnDropdownSelect(
WidgetID widget,
int index)
override
950 this->UpdateVehicleGroupBy(
static_cast<GroupBy
>(index));
962 assert(!this->vehicles.empty());
974 case ADI_CREATE_GROUP:
988 default: NOT_REACHED();
992 default: NOT_REACHED();
1000 if (this->groups.
NeedResort() || this->vehgroups.NeedResort()) {
1028 new_group_over = it == this->groups.end() ?
NEW_GROUP : (*it)->index;
1041 if (new_group_over != this->group_over) {
1043 this->group_over = new_group_over;
1048 void ShowRenameGroupWindow(
GroupID group,
bool empty)
1051 this->group_rename = group;
1056 str = STR_GROUP_NAME;
1091 this->group_sb->
SetCount(this->groups.size());
1103 static WindowDesc _other_group_desc(__FILE__, __LINE__,
1107 std::begin(_nested_group_widgets), std::end(_nested_group_widgets)
1110 static WindowDesc _train_group_desc(__FILE__, __LINE__,
1111 WDP_AUTO,
"list_groups_train", 525, 246,
1114 std::begin(_nested_group_widgets), std::end(_nested_group_widgets)
1131 w = AllocateWindowDescFront<VehicleGroupWindow>(&_train_group_desc, num, need_existing_window);
1134 w = AllocateWindowDescFront<VehicleGroupWindow>(&_other_group_desc, num, need_existing_window);
1166 if (w !=
nullptr) w->ShowRenameGroupWindow(gid,
true);
1178 if (result.
Failed())
return;
1191 if (result.
Failed())
return;
@ VEH_AIRCRAFT
Aircraft vehicle type.
void SelectGroup(const GroupID g_id)
Selects the specified group in the list.
void CloseWindowByClass(WindowClass cls, int data)
Close all windows of a given class.
@ WC_INVALID
Invalid window.
void SetCargoFilter(byte index)
Set cargo filter for the vehicle group list.
static Titem * Get(size_t index)
Returns Titem with given index.
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...
CompanyID company
The company associated with this list.
Dimensions (a width and height) of a rectangle in 2D.
DropDownList BuildActionDropdownList(bool show_autoreplace, bool show_group, bool show_create)
Display the Action dropdown window.
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
Rect Shrink(int s) const
Copy and shrink Rect by s pixels.
GroupBy grouping
How we want to group the list.
The information about a vehicle list.
SpecialMouseMode _special_mouse_mode
Mode of the mouse.
GroupID group_confirm
Group awaiting delete confirmation.
uint tiny_step_height
Step height for the group list.
@ VGC_AUTOREPLACE
Autoreplace active icon.
bool vehchain
vehicle chain is dragged
void SetWidgetDirty(WidgetID widget_index) const
Invalidate a widget, i.e.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
GroupID group_rename
Group being renamed, INVALID_GROUP if none.
GroupID parent
Parent group.
Tindex index
Index of this pool item.
void DirtyHighlightedGroupWidget()
Mark the widget containing the currently highlighted group as dirty.
GroupID group_id
Index of group Pool array.
Dimension maxdim(const Dimension &d1, const Dimension &d2)
Compute bounding box of both dimensions.
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
Listing * sorting
Pointer to the vehicle type related sorting.
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group=INVALID_GROUP, bool need_existing_window=false)
Show the group window for the given company and vehicle type.
bool _ctrl_pressed
Is Ctrl pressed?
@ FILLRECT_CHECKER
Draw only every second pixel, used for greying-out.
bool autoreplace_finished
Have all autoreplacement finished?
uint GetStringListWidth(const StringID *list, FontSize fontsize)
Get maximum width of a list of strings.
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
void SetSortType(uint8_t n_type)
Set the sorttype of the list.
int StrNaturalCompare(std::string_view s1, std::string_view s2, bool ignore_garbage_at_front)
Compares two strings using case insensitive natural sort.
void OnPaint() override
The window must be repainted.
void UnselectVehicle(VehicleID vehicle)
Tests whether a given vehicle is selected in the window, and unselects it if necessary.
VehicleList::const_iterator vehicles_begin
Pointer to beginning element of this vehicle group.
WindowClass cls
Class of the window,.
static const uint MAX_LENGTH_GROUP_NAME_CHARS
The maximum length of a group name in characters including '\0'.
static bool UsingWallclockUnits(bool newgame=false)
Check if we are using wallclock units.
Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type)
Get last year's profit of vehicles above minimum age for the group with GroupID id_g and its sub-grou...
constexpr uint Vertical() const
Get total vertical padding of RectPadding.
Owner owner
The owner of the content shown in this window. Company colour is acquired from this variable.
void OnGameTick() override
Called once per (game) tick.
@ SA_RIGHT
Right align the text (must be a single bit).
@ VGC_FOLD
Fold / Unfold button.
@ VEH_ROAD
Road vehicle type.
Owner owner
Which company owns the vehicle?
Owner
Enum for all companies/owners.
const Scrollbar * GetScrollbar(WidgetID widnum) const
Return the Scrollbar to a widget index.
Dimension column_size[VGC_END]
Size of the columns in the group list.
VehicleType vehicle_type
Vehicle type of the group.
static const GroupID NEW_GROUP
Sentinel for a to-be-created group.
Rect WithHeight(int height, bool end=false) const
Copy Rect and set its height.
std::vector< int > indents
Indentation levels.
bool NeedRebuild() const
Check if a rebuild is needed.
byte _colour_gradient[COLOUR_END][8]
All 16 colour gradients 8 colours per gradient from darkest (0) to lightest (7)
@ QSF_LEN_IN_CHARS
the length of the string is counted in characters
int find_index(Container const &container, typename Container::const_reference item)
Helper function to get the index of an item Consider using std::set, std::unordered_set or std::flat_...
@ Service
The vehicle will leave the depot right after arrival (service only)
static const GroupID ALL_GROUP
All vehicles are in this group.
High level window description.
@ Rename
Change group name.
Statistics and caches on the vehicles in a group.
VehicleListIdentifier vli
Identifier of the vehicle list we want to currently show.
@ WC_QUERY_STRING
Query string window; Window numbers:
bool NeedResort()
Check if a resort is needed next loop If used the resort timer will decrease every call till 0.
@ WDP_AUTO
Find a place automatically.
static const GroupID INVALID_GROUP
Sentinel for invalid groups.
ResizeInfo resize
Resize information.
Common return value for all commands.
int32_t WindowNumber
Number to differentiate different windows of the same class.
uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type)
Get the number of vehicles above profit minimum age in the group with GroupID id_g and its sub-groups...
@ FS_NORMAL
Index of the normal font in the font tables.
Rect Translate(int x, int y) const
Copy and translate Rect by x,y pixels.
void ShowCompanyGroupForVehicle(const Vehicle *v)
Show the group window for the given vehicle.
int height
Height of the window (number of pixels down in y direction)
bool VehicleClicked(const Vehicle *v)
Dispatch a "vehicle selected" event if any window waits for it.
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
@ MassSend
Tells that it's a mass send to depot command (type in VLW flag)
void ForceResort()
Force a resort next Sort call Reset the resort timer if used too.
@ FS_SMALL
Index of the small font in the font tables.
uint32_t index
A vehicle list type specific index.
uint ComputeGroupInfoSize()
Compute tiny_step_height and column_size.
bool Failed() const
Did this command fail?
void ToggleSortOrder()
Toggle the sort order Since that is the worst condition for the sort function reverse the list here.
uint GetVehicleListHeight(VehicleType type, uint divisor)
Get the height of a vehicle in the vehicle list GUIs.
@ VGC_NUMBER
Number of vehicles in the group.
@ SA_FORCE
Force the alignment, i.e. don't swap for RTL languages.
uint32_t Pack() const
Pack a VehicleListIdentifier in a single uint32.
Window * parent
Parent window.
bool IsDescSortOrder() const
Check if the sort order is descending.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
DropDownList BuildCargoDropDownList(bool full) const
Build drop down list for cargo filter selection.
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
int left
x position of left edge of the window
static GroupStatistics & Get(CompanyID company, GroupID id_g, VehicleType type)
Returns the GroupStatistics for a specific group.
static const GroupID DEFAULT_GROUP
Ungrouped vehicles are in this group.
void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type)
Set the mouse cursor to look like a vehicle.
uint32_t VehicleID
The type all our vehicle IDs have.
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
Draw a sprite, not in a viewport.
Coordinates of a point in 2D.
@ WC_TRAINS_LIST
Trains list; Window numbers:
@ WSM_DRAGDROP
Drag&drop an object.
Dimension GetActionDropdownSize(bool show_autoreplace, bool show_group, bool show_create)
Compute the size for the Action dropdown.
void ShowDropDownMenu(Window *w, 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.
WindowNumber window_number
Window number within the window class.
VehicleType
Available vehicle types.
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode)
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
uint16_t num_vehicle
Number of vehicles.
@ CS_ALPHANUMERAL
Both numeric and alphabetic and spaces and stuff.
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
@ VGC_PROTECT
Autoreplace protect icon.
CargoID cargo_filter_criteria
Selected cargo filter index.
bool autoreplace_defined
Are any autoreplace rules set?
@ HT_DRAG
dragging items in the depot windows
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
void DrawVehicleListItems(VehicleID selected_vehicle, int line_height, const Rect &r) const
Draw all the vehicle list items.
void ForceRebuild()
Force that a rebuild is needed.
bool IsAllGroupID(GroupID id_g)
Checks if a GroupID stands for all vehicles of a company.
@ SBS_DOWN
Sort ascending.
@ EIT_IN_LIST
Vehicle drawn in vehicle list, group list, ...
CompanyID _current_company
Company currently doing an action.
void DrawSortButtonState(WidgetID widget, SortButtonState state) const
Draw a sort button's up or down arrow symbol.
void DeleteGroupHighlightOfVehicle(const Vehicle *v)
Removes the highlight of a vehicle in a group window.
static const PaletteID PALETTE_CRASH
Recolour sprite greying of crashed vehicles.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
void ShowDropDownList(Window *w, DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close)
Show a drop down list.
uint8_t flags
Group flags.
GUIGroupList groups
List of groups.
Listing GetListing() const
Export current sort conditions.
void OnResize() override
Called after the window got resized.
GUIVehicleGroupList vehgroups
List of (groups of) vehicles. This stores iterators of vehicles, and should be rebuilt if vehicles is...
void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype)
Show the autoreplace configuration window for a particular group.
void CloseChildWindows(WindowClass wc=WC_INVALID) const
Close all children a window might have in a head-recursive manner.
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.
VehicleType vtype
The vehicle type associated with this list.
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
VehicleID vehicle_sel
Selected vehicle.
void CcAddVehicleNewGroup(Commands, const CommandCost &result, GroupID new_group, GroupID, VehicleID, bool, const VehicleListIdentifier &)
Open rename window after adding a vehicle to a new group via drag and drop.
GroupID group_over
Group over which a vehicle is dragged, INVALID_GROUP if none.
std::string GetString(StringID string)
Resolve the given StringID into a std::string with all the associated DParam lookups and formatting.
void DrawGroupInfo(int y, int left, int right, GroupID g_id, int indent=0, bool protection=false, bool has_children=false) const
Draw a row in the group list.
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
uint16_t GroupID
Type for all group identifiers.
static void CcCreateGroup(GroupID gid, VehicleType veh_type)
Opens a 'Rename group' window for newly created group.
static VehicleGroupWindow * FindVehicleGroupWindow(VehicleType vt, Owner owner)
Finds a group list window determined by vehicle type and owner.
void RaiseWidget(WidgetID widget_index)
Marks a widget as raised.
void BuildGroupList(Owner owner)
(Re)Build the group list.
uint8_t SortType() const
Get the sorttype of the list.
void ShowVehicleViewWindow(const Vehicle *v)
Shows the vehicle view window of the given vehicle.
@ SetParent
Change group parent.
VehicleList vehicles
List of vehicles. This is the buffer for vehgroups to point into; if this is structurally modified,...
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
#define lengthof(x)
Return the length of an fixed size array.
int width
width of the window (number of pixels to the right in x direction)
static int SortButtonWidth()
Get width of up/down arrow of sort button state.
void RebuildDone()
Notify the sortlist that the rebuild is done.
@ GF_REPLACE_PROTECTION
If set to true, the global autoreplace has no effect on the group.
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
Get the number of vehicles in the group with GroupID id_g and its sub-groups.
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.
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...
bool folded
NOSAVE: Is this group folded in the group view?
static const CursorID SPR_CURSOR_MOUSE
Cursor sprite numbers.
void OnPlaceObjectAbort() override
The user cancelled a tile highlight mode that has been set.
Data structure for an opened window.
Commands
List of commands.
@ VEH_TRAIN
Train vehicle type.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
VehicleType type
Type of vehicle.
void DrawWidgets() const
Paint all widgets of a window.
Dimension GetDropDownListDimension(const DropDownList &list)
Determine width and height required to fully display a DropDownList.
Specification of a rectangle with absolute coordinates of all edges.
@ WC_DROPDOWN_MENU
Drop down menu; Window numbers:
bool Sort(Comp compare)
Sort the list.
void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
Sets the enabled/disabled status of a list of widgets.
@ QSF_ENABLE_DEFAULT
enable the 'Default' button ("\0" is returned)
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
GroupID group_sel
Selected group (for drag/drop)
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
@ TD_RTL
Text is written right-to-left by default.
TextDirection _current_text_dir
Text direction of the currently selected language.
Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize)
Return the string dimension in pixels.
WindowClass GetWindowClassForVehicleType(VehicleType vt)
Get WindowClass for vehicle list of given vehicle type.
static const Money VEHICLE_PROFIT_THRESHOLD
Threshold for a vehicle to be considered making good profit.
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.