1 /*****************************************************************************
2  * Copyright (c) 2014-2020 OpenRCT2 developers
3  *
4  * For a complete list of all authors, please refer to contributors.md
5  * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
6  *
7  * OpenRCT2 is licensed under the GNU General Public License version 3.
8  *****************************************************************************/
9 
10 #pragma once
11 
12 #include <openrct2-ui/interface/Window.h>
13 #include <openrct2/common.h>
14 #include <openrct2/ride/Ride.h>
15 #include <openrct2/windows/tile_inspector.h>
16 #include <string_view>
17 
18 using loadsave_callback = void (*)(int32_t result, const utf8* path);
19 using scenarioselect_callback = void (*)(const utf8* path);
20 struct Peep;
21 struct TileElement;
22 struct Vehicle;
23 enum class GuestListFilterType : int32_t;
24 enum class ScatterToolDensity : uint8_t;
25 
26 extern std::vector<ScenerySelection> gWindowSceneryTabSelections;
27 extern size_t gWindowSceneryActiveTabIndex;
28 extern bool gWindowSceneryScatterEnabled;
29 extern uint16_t gWindowSceneryScatterSize;
30 extern ScatterToolDensity gWindowSceneryScatterDensity;
31 extern uint8_t gWindowSceneryPaintEnabled;
32 extern uint8_t gWindowSceneryRotation;
33 extern colour_t gWindowSceneryPrimaryColour;
34 extern colour_t gWindowScenerySecondaryColour;
35 extern colour_t gWindowSceneryTertiaryColour;
36 extern bool gWindowSceneryEyedropperEnabled;
37 
38 rct_window* window_about_open();
39 void WindowCampaignRefreshRides();
40 rct_window* window_changelog_open(int personality);
41 rct_window* window_cheats_open();
42 rct_window* window_clear_scenery_open();
43 rct_window* custom_currency_window_open();
44 rct_window* window_debug_paint_open();
45 rct_window* window_editor_inventions_list_open();
46 rct_window* window_editor_main_open();
47 rct_window* window_editor_objective_options_open();
48 rct_window* window_editor_scenario_options_open();
49 rct_window* window_footpath_open();
50 void WindowFootpathResetSelectedPath();
51 rct_window* window_guest_open(Peep* peep);
52 rct_window* window_land_open();
53 rct_window* window_land_rights_open();
54 rct_window* window_main_open();
55 rct_window* window_mapgen_open();
56 rct_window* window_multiplayer_open();
57 rct_window* window_news_open();
58 rct_window* window_news_options_open();
59 rct_window* window_options_open();
60 rct_window* window_save_prompt_open();
61 #ifndef DISABLE_NETWORK
62 rct_window* window_server_list_open();
63 rct_window* window_server_start_open();
64 #endif
65 rct_window* window_shortcut_keys_open();
66 rct_window* window_staff_list_open();
67 rct_window* window_staff_open(Peep* peep);
68 void WindowStaffListRefresh();
69 rct_window* window_themes_open();
70 rct_window* window_title_exit_open();
71 rct_window* window_title_logo_open();
72 rct_window* window_title_menu_open();
73 rct_window* window_title_options_open();
74 rct_window* window_viewport_open();
75 rct_window* window_water_open();
76 rct_window* window_view_clipping_open();
77 
78 // WC_FINANCES
79 rct_window* window_finances_open();
80 rct_window* window_finances_research_open();
81 
82 // WC_PARK_INFORMATION
83 rct_window* window_park_awards_open();
84 rct_window* window_park_entrance_open();
85 rct_window* window_park_guests_open();
86 rct_window* window_park_objective_open();
87 rct_window* window_park_rating_open();
88 
89 rct_window* window_banner_open(rct_windownumber number);
90 rct_window* window_ride_demolish_prompt_open(Ride* ride);
91 rct_window* window_ride_refurbish_prompt_open(Ride* ride);
92 rct_window* window_sign_open(rct_windownumber number);
93 rct_window* window_sign_small_open(rct_windownumber number);
94 rct_window* window_player_open(uint8_t id);
95 rct_window* window_new_campaign_open(int16_t campaignType);
96 
97 rct_window* window_install_track_open(const utf8* path);
98 void window_guest_list_refresh_list();
99 rct_window* window_guest_list_open();
100 rct_window* window_guest_list_open_with_filter(GuestListFilterType type, int32_t index);
101 rct_window* window_staff_fire_prompt_open(Peep* peep);
102 void window_title_editor_open(int32_t tab);
103 void window_title_command_editor_open(struct TitleSequence* sequence, int32_t command, bool insert);
104 rct_window* window_scenarioselect_open(scenarioselect_callback callback, bool titleEditor);
105 rct_window* window_scenarioselect_open(std::function<void(std::string_view)> callback, bool titleEditor, bool disableLocking);
106 
107 rct_window* window_error_open(rct_string_id title, rct_string_id message, const class Formatter& formatter);
108 rct_window* window_error_open(std::string_view title, std::string_view message);
109 struct TrackDesign;
110 rct_window* window_loadsave_open(
111     int32_t type, std::string_view defaultPath, std::function<void(int32_t result, std::string_view)> callback,
112     TrackDesign* trackDesign);
113 rct_window* window_track_place_open(const struct track_design_file_ref* tdFileRef);
114 rct_window* window_track_manage_open(struct track_design_file_ref* tdFileRef);
115 
116 void TrackPlaceClearProvisionalTemporarily();
117 void TrackPlaceRestoreProvisional();
118 
119 rct_window* window_map_open();
120 void window_map_reset();
121 
122 rct_window* window_research_open();
123 void window_research_development_page_paint(rct_window* w, rct_drawpixelinfo* dpi, rct_widgetindex baseWidgetIndex);
124 void window_research_funding_page_paint(rct_window* w, rct_drawpixelinfo* dpi, rct_widgetindex baseWidgetIndex);
125 
126 rct_window* window_new_ride_open();
127 rct_window* window_new_ride_open_research();
128 void window_new_ride_init_vars();
129 void window_new_ride_focus(RideSelection rideItem);
130 
131 rct_window* window_ride_list_open();
132 void window_ride_list_refresh_list(rct_window* w);
133 
134 rct_window* window_ride_main_open(Ride* ride);
135 rct_window* window_ride_open_track(TileElement* tileElement);
136 rct_window* window_ride_open_vehicle(Vehicle* vehicle);
137 void window_ride_measurements_design_cancel();
138 
139 // rct2: 0x00F635EE
140 extern RideSelection _window_track_list_item;
141 rct_window* window_track_list_open(RideSelection item);
142 
143 void SetMapTooltip(Formatter& ft);
144 const Formatter& GetMapTooltip();
145 void window_map_tooltip_update_visibility();
146 
147 rct_window* window_maze_construction_open();
148 void window_maze_construction_update_pressed_widgets();
149 
150 rct_window* window_network_status_open(const char* text, close_callback onClose);
151 rct_window* window_network_status_open_password();
152 void window_network_status_close();
153 
154 void window_text_input_key(rct_window* w, char keychar);
155 void window_text_input_open(
156     rct_window* call_w, rct_widgetindex call_widget, rct_string_id title, rct_string_id description,
157     const Formatter& descriptionArgs, rct_string_id existing_text, uintptr_t existing_args, int32_t maxLength);
158 void window_text_input_raw_open(
159     rct_window* call_w, rct_widgetindex call_widget, rct_string_id title, rct_string_id description,
160     const Formatter& descriptionArgs, const_utf8string existing_text, int32_t maxLength);
161 
162 void window_text_input_open(
163     std::string_view title, std::string_view description, std::string_view initialValue, size_t maxLength,
164     std::function<void(std::string_view)> okCallback, std::function<void()> cancelCallback);
165 
166 rct_window* window_object_load_error_open(utf8* path, size_t numMissingObjects, const ObjectEntryDescriptor* missingObjects);
167 
168 rct_window* window_ride_construction_open();
169 void window_ride_construction_update_active_elements_impl();
170 void window_ride_construction_update_enabled_track_pieces();
171 
172 rct_window* window_top_toolbar_open();
173 bool land_tool_is_active();
174 bool clear_scenery_tool_is_active();
175 bool water_tool_is_active();
176 
177 rct_window* window_scenery_open();
178 bool window_scenery_set_selected_item(const ScenerySelection& scenery);
179 void window_scenery_set_default_placement_configuration();
180 void window_scenery_init();
181 void window_scenery_reset_selected_scenery_items();
182 
183 extern uint8_t gToolbarDirtyFlags;
184 rct_window* window_game_bottom_toolbar_open();
185 void window_game_bottom_toolbar_invalidate_news_item();
186 
187 rct_window* window_editor_bottom_toolbar_open();
188 
189 rct_window* window_tile_inspector_open();
190 void window_tile_inspector_clear_clipboard();
191 
192 rct_window* window_editor_object_selection_open();
193 
194 void window_tooltip_reset(const ScreenCoordsXY& screenCoords);
195 void window_tooltip_show(const OpenRCT2String& message, ScreenCoordsXY screenCoords);
196 void window_tooltip_open(rct_window* widgetWindow, rct_widgetindex widgetIndex, const ScreenCoordsXY& screenCoords);
197 void window_tooltip_close();
198 
199 rct_window* window_scenery_scatter_open();
200 
201 // clang-format off
202 #define WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, CLOSE_STR) \
203     { WindowWidgetType::Frame,    0,  0,          WIDTH - 1, 0, HEIGHT - 1, 0xFFFFFFFF,  STR_NONE }, \
204     { WindowWidgetType::Caption,  0,  1,          WIDTH - 2, 1, 14,         TITLE,       STR_WINDOW_TITLE_TIP }, \
205     { WindowWidgetType::CloseBox, 0,  WIDTH - 13, WIDTH - 3, 2, 13,         CLOSE_STR, STR_CLOSE_WINDOW_TIP }
206 
207 #define WINDOW_SHIM(TITLE, WIDTH, HEIGHT) WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, STR_CLOSE_X)
208 #define WINDOW_SHIM_WHITE(TITLE, WIDTH, HEIGHT) WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, STR_CLOSE_X_WHITE)
209 
210 // clang-format on
211