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/>.
8 /** @file engine_gui.h %Engine GUI functions, used by build_vehicle_gui and autoreplace_gui */
13 #include "engine_type.h"
14 #include "group_type.h"
15 #include "sortlist_type.h"
17 #include "vehicle_type.h"
18 #include "engine_base.h"
20 struct GUIEngineListItem
{
21 EngineID engine_id
; ///< Engine to display in build purchase list
22 EngineID variant_id
; ///< Variant group of the engine.
23 EngineDisplayFlags flags
; ///< Flags for toggling/drawing (un)folded status and controlling indentation.
24 uint8_t indent
; ///< Display indentation level.
25 uint16_t level_mask
; ///< Mask of level continuations.
27 GUIEngineListItem(EngineID engine_id
, EngineID variant_id
, EngineDisplayFlags flags
, uint8_t indent
) : engine_id(engine_id
), variant_id(variant_id
), flags(flags
), indent(indent
), level_mask(0) {}
29 /* Used when searching list only by engine_id. */
30 bool operator == (const EngineID
&other
) const { return this->engine_id
== other
; }
33 typedef GUIList
<GUIEngineListItem
, std::nullptr_t
, CargoID
> GUIEngineList
;
35 typedef bool EngList_SortTypeFunction(const GUIEngineListItem
&, const GUIEngineListItem
&); ///< argument type for #EngList_Sort.
36 void EngList_Sort(GUIEngineList
&el
, EngList_SortTypeFunction compare
);
37 void EngList_SortPartial(GUIEngineList
&el
, EngList_SortTypeFunction compare
, size_t begin
, size_t num_items
);
39 StringID
GetEngineCategoryName(EngineID engine
);
40 StringID
GetEngineInfoString(EngineID engine
);
42 void DrawVehicleEngine(int left
, int right
, int preferred_x
, int y
, EngineID engine
, PaletteID pal
, EngineImageType image_type
);
43 void DrawTrainEngine(int left
, int right
, int preferred_x
, int y
, EngineID engine
, PaletteID pal
, EngineImageType image_type
);
44 void DrawRoadVehEngine(int left
, int right
, int preferred_x
, int y
, EngineID engine
, PaletteID pal
, EngineImageType image_type
);
45 void DrawShipEngine(int left
, int right
, int preferred_x
, int y
, EngineID engine
, PaletteID pal
, EngineImageType image_type
);
46 void DrawAircraftEngine(int left
, int right
, int preferred_x
, int y
, EngineID engine
, PaletteID pal
, EngineImageType image_type
);
48 extern bool _engine_sort_direction
;
49 extern uint8_t _engine_sort_last_criteria
[];
50 extern bool _engine_sort_last_order
[];
51 extern bool _engine_sort_show_hidden_engines
[];
52 extern const std::initializer_list
<const StringID
> _engine_sort_listing
[];
53 extern EngList_SortTypeFunction
* const _engine_sort_functions
[][11];
55 /* Functions in build_vehicle_gui.cpp */
56 uint
GetEngineListHeight(VehicleType type
);
57 void DisplayVehicleSortDropDown(Window
*w
, VehicleType vehicle_type
, int selected
, WidgetID button
);
58 void DrawEngineList(VehicleType type
, const Rect
&r
, const GUIEngineList
&eng_list
, const Scrollbar
&sb
, EngineID selected_id
, bool show_count
, GroupID selected_group
);
59 void GUIEngineListAddChildren(GUIEngineList
&dst
, const GUIEngineList
&src
, EngineID parent
= INVALID_ENGINE
, uint8_t indent
= 0);
61 #endif /* ENGINE_GUI_H */