Implement #7658: Add option to always use system file browsing window.

This commit is contained in:
Aaron van Geffen 2018-08-14 20:09:11 +02:00
parent 35ac24a4f3
commit 25170fda45
9 changed files with 44 additions and 20 deletions

View File

@ -3724,6 +3724,8 @@ STR_6260 :Show blocked tiles
STR_6261 :Show wide paths
STR_6262 :Master volume
STR_6263 :{SMALLFONT}{BLACK}Toggle all sound on/off
STR_6264 :Always use system file browser
STR_6265 :{SMALLFONT}{BLACK}When enabled, your operating system's file browser will be used instead of OpenRCT2's.
#############
# Scenarios #

View File

@ -2,6 +2,7 @@
------------------------------------------------------------------------
- Feature: [#5993] Ride window prices can now be set via text input.
- Feature: [#6998] Guests now wait for passing vehicles before crossing railway tracks.
- Feature: [#7658] Add option to always use system file browsing window.
- Feature: [#7694] Debug option to visualize paths that the game detects as wide.
- Feature: [#7713] The virtual floor now takes land ownership rights into account.
- Feature: [#7771] Danish translation.

View File

@ -218,8 +218,7 @@ public:
uint32_t type = intent->GetUIntExtra(INTENT_EXTRA_LOADSAVE_TYPE);
std::string defaultName = intent->GetStringExtra(INTENT_EXTRA_PATH);
loadsave_callback callback = (loadsave_callback)intent->GetPointerExtra(INTENT_EXTRA_CALLBACK);
rct_window* w = window_loadsave_open(type, defaultName.c_str());
window_loadsave_set_loadsave_callback(callback);
rct_window* w = window_loadsave_open(type, defaultName.c_str(), callback);
return w;
}

View File

@ -161,11 +161,6 @@ static void window_loadsave_sort_list();
static rct_window* window_overwrite_prompt_open(const char* name, const char* path);
void window_loadsave_set_loadsave_callback(loadsave_callback cb)
{
_loadSaveCallback = cb;
}
static int32_t window_loadsave_get_dir(utf8* last_save, char* path, const char* subdir, size_t pathSize)
{
if (last_save && platform_ensure_directory_exists(last_save))
@ -182,9 +177,11 @@ static int32_t window_loadsave_get_dir(utf8* last_save, char* path, const char*
return 1;
}
rct_window* window_loadsave_open(int32_t type, const char* defaultName)
static bool browse(bool isSave, char* path, size_t pathSize);
rct_window* window_loadsave_open(int32_t type, const char* defaultName, loadsave_callback callback)
{
_loadSaveCallback = nullptr;
_loadSaveCallback = callback;
_type = type;
_defaultName[0] = '\0';
@ -193,6 +190,20 @@ rct_window* window_loadsave_open(int32_t type, const char* defaultName)
safe_strcpy(_defaultName, defaultName, sizeof(_defaultName));
}
bool isSave = (type & 0x01) == LOADSAVETYPE_SAVE;
bool success = false;
char path[MAX_PATH];
// Bypass the lot?
if (gConfigGeneral.use_native_browse_dialog)
{
if (browse(isSave, path, sizeof(path)))
{
window_loadsave_select(nullptr, path);
}
return nullptr;
}
rct_window* w = window_bring_to_front_by_class(WC_LOADSAVE);
if (w == nullptr)
{
@ -210,10 +221,6 @@ rct_window* window_loadsave_open(int32_t type, const char* defaultName)
w->no_list_items = 0;
w->selected_list_item = -1;
bool isSave = (type & 0x01) == LOADSAVETYPE_SAVE;
bool success = false;
char path[MAX_PATH];
switch (type & 0x0E)
{
case LOADSAVETYPE_GAME:

View File

@ -175,6 +175,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM,
WIDX_SAVE_PLUGIN_DATA_CHECKBOX,
WIDX_STAY_CONNECTED_AFTER_DESYNC,
WIDX_ALWAYS_NATIVE_LOADSAVE,
WIDX_AUTOSAVE,
WIDX_AUTOSAVE_DROPDOWN,
WIDX_PATH_TO_RCT1_TEXT,
@ -355,11 +356,12 @@ static rct_widget window_options_advanced_widgets[] = {
{ WWT_CHECKBOX, 2, 10, 299, 84, 95, STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM_TIP }, // Allow loading with incorrect checksum
{ WWT_CHECKBOX, 2, 10, 299, 99, 110, STR_SAVE_PLUGIN_DATA, STR_SAVE_PLUGIN_DATA_TIP }, // Export plug-in objects with saved games
{ WWT_CHECKBOX, 2, 10, 299, 114, 125, STR_STAY_CONNECTED_AFTER_DESYNC, STR_STAY_CONNECTED_AFTER_DESYNC_TIP }, // Do not disconnect after the client desynchronises with the server
{ WWT_DROPDOWN, 1, 165, 299, 130, 141, STR_NONE, STR_NONE }, // Autosave dropdown
{ WWT_BUTTON, 1, 288, 298, 131, 140, STR_DROPDOWN_GLYPH, STR_AUTOSAVE_FREQUENCY_TIP }, // Autosave dropdown button
{ WWT_LABEL, 1, 23, 298, 148, 159, STR_PATH_TO_RCT1, STR_PATH_TO_RCT1_TIP }, // RCT 1 path text
{ WWT_BUTTON, 1, 24, 289, 163, 176, STR_NONE, STR_STRING_TOOLTIP }, // RCT 1 path button
{ WWT_BUTTON, 1, 289, 299, 163, 176, STR_CLOSE_X, STR_PATH_TO_RCT1_CLEAR_TIP }, // RCT 1 path clear button
{ WWT_CHECKBOX, 1, 10, 299, 129, 140, STR_ALWAYS_NATIVE_LOADSAVE, STR_ALWAYS_NATIVE_LOADSAVE_TIP }, // Use native load/save window
{ WWT_DROPDOWN, 1, 165, 299, 145, 157, STR_NONE, STR_NONE }, // Autosave dropdown
{ WWT_BUTTON, 1, 288, 298, 146, 156, STR_DROPDOWN_GLYPH, STR_AUTOSAVE_FREQUENCY_TIP }, // Autosave dropdown button
{ WWT_LABEL, 1, 23, 298, 165, 176, STR_PATH_TO_RCT1, STR_PATH_TO_RCT1_TIP }, // RCT 1 path text
{ WWT_BUTTON, 1, 24, 289, 180, 193, STR_NONE, STR_STRING_TOOLTIP }, // RCT 1 path button
{ WWT_BUTTON, 1, 289, 299, 180, 193, STR_CLOSE_X, STR_PATH_TO_RCT1_CLEAR_TIP }, // RCT 1 path clear button
{ WIDGETS_END },
};
@ -594,6 +596,7 @@ static uint64_t window_options_page_enabled_widgets[] = {
(1 << WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM) |
(1 << WIDX_SAVE_PLUGIN_DATA_CHECKBOX) |
(1 << WIDX_STAY_CONNECTED_AFTER_DESYNC) |
(1 << WIDX_ALWAYS_NATIVE_LOADSAVE) |
(1 << WIDX_AUTOSAVE) |
(1 << WIDX_AUTOSAVE_DROPDOWN) |
(1 << WIDX_PATH_TO_RCT1_TEXT) |
@ -929,6 +932,11 @@ static void window_options_mouseup(rct_window* w, rct_widgetindex widgetIndex)
config_save_default();
window_invalidate(w);
break;
case WIDX_ALWAYS_NATIVE_LOADSAVE:
gConfigGeneral.use_native_browse_dialog = !gConfigGeneral.use_native_browse_dialog;
config_save_default();
window_invalidate(w);
break;
case WIDX_PATH_TO_RCT1_BUTTON:
{
utf8string rct1path = platform_open_directory_browser(language_get_string(STR_PATH_TO_RCT1_BROWSER));
@ -1888,6 +1896,7 @@ static void window_options_invalidate(rct_window* w)
w, WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, gConfigGeneral.allow_loading_with_incorrect_checksum);
widget_set_checkbox_value(w, WIDX_SAVE_PLUGIN_DATA_CHECKBOX, gConfigGeneral.save_plugin_data);
widget_set_checkbox_value(w, WIDX_STAY_CONNECTED_AFTER_DESYNC, gConfigNetwork.stay_connected);
widget_set_checkbox_value(w, WIDX_ALWAYS_NATIVE_LOADSAVE, gConfigGeneral.use_native_browse_dialog);
break;
case WINDOW_OPTIONS_PAGE_TWITCH:

View File

@ -88,8 +88,7 @@ rct_window* window_scenarioselect_open(scenarioselect_callback callback, bool ti
rct_window* window_error_open(rct_string_id title, rct_string_id message);
rct_window* window_loadsave_open(int32_t type, const char* defaultName);
void window_loadsave_set_loadsave_callback(loadsave_callback cb);
rct_window* window_loadsave_open(int32_t type, const char* defaultName, loadsave_callback callback);
rct_window* window_track_place_open(const struct track_design_file_ref* tdFileRef);
rct_window* window_track_manage_open(struct track_design_file_ref* tdFileRef);

View File

@ -202,6 +202,7 @@ namespace Config
model->last_save_landscape_directory = reader->GetCString("last_landscape_directory", nullptr);
model->last_save_scenario_directory = reader->GetCString("last_scenario_directory", nullptr);
model->last_save_track_directory = reader->GetCString("last_track_directory", nullptr);
model->use_native_browse_dialog = reader->GetBoolean("use_native_browse_dialog", false);
model->window_limit = reader->GetInt32("window_limit", WINDOW_LIMIT_MAX);
model->zoom_to_cursor = reader->GetBoolean("zoom_to_cursor", true);
model->render_weather_effects = reader->GetBoolean("render_weather_effects", true);
@ -273,6 +274,7 @@ namespace Config
writer->WriteString("last_landscape_directory", model->last_save_landscape_directory);
writer->WriteString("last_scenario_directory", model->last_save_scenario_directory);
writer->WriteString("last_track_directory", model->last_save_track_directory);
writer->WriteBoolean("use_native_browse_dialog", model->use_native_browse_dialog);
writer->WriteInt32("window_limit", model->window_limit);
writer->WriteBoolean("zoom_to_cursor", model->zoom_to_cursor);
writer->WriteBoolean("render_weather_effects", model->render_weather_effects);

View File

@ -83,6 +83,7 @@ struct GeneralConfiguration
bool show_real_names_of_guests;
bool allow_early_completion;
// Loading and saving
bool confirmation_prompt;
int32_t load_save_sort;
utf8* last_save_game_directory;
@ -90,6 +91,7 @@ struct GeneralConfiguration
utf8* last_save_scenario_directory;
utf8* last_save_track_directory;
utf8* last_run_version;
bool use_native_browse_dialog;
};
struct InterfaceConfiguration

View File

@ -3888,6 +3888,9 @@ enum
STR_MASTER_VOLUME = 6262,
STR_MASTER_VOLUME_TIP = 6263,
STR_ALWAYS_NATIVE_LOADSAVE = 6264,
STR_ALWAYS_NATIVE_LOADSAVE_TIP = 6265,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};