mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-02-02 11:45:13 +01:00
Merge pull request #25858 from MichaelJBerk/macos-optionsWindow
Add support for native options dialog on macOS and add Quit button to onboarding
This commit is contained in:
@@ -3846,3 +3846,4 @@ STR_7013 :Drag areas of path
|
||||
STR_7014 :I own the game on Steam, but I haven’t installed it yet.
|
||||
STR_7015 :Please close Steam if it’s running, then click ‘OK’.
|
||||
STR_7016 :OpenRCT2 has tried to trigger a download in Steam. Please open Steam and let it download the game. When Steam is finished, click ‘OK’.
|
||||
STR_7017 :Quit
|
||||
@@ -2,7 +2,9 @@
|
||||
------------------------------------------------------------------------
|
||||
- Feature: [#25844] The sprite builder now also supports adding JSON-based palettes.
|
||||
- Improved: [#25765] The ‘View options’ and ‘Special track elements’ dropdowns no longer need click-and-hold.
|
||||
- Improved: [#25858] macOS now supports the onboarding menu.
|
||||
- Fix: [#4643, #25167] Many metal supports draw with a filled in top when they didn't in vanilla, causing some slight misalignment and glitching.
|
||||
- Fix: [#25221] When trying to cancel game file discovery, the prompt reappears.
|
||||
- Fix: [#25739] Game freezes when a tab in the New Ride window contains more than 384 items.
|
||||
- Fix: [#25745] Crash when a player connection is aborted early.
|
||||
- Fix: [#25799] The animated options tab icon of the news window does not always redraw.
|
||||
|
||||
@@ -337,7 +337,7 @@ namespace OpenRCT2::Ui
|
||||
|
||||
// zenity and kdialog don't support automatic scaling, this is an approximation
|
||||
int width = (longest_string + 1) * 8;
|
||||
int height = (options.size() + 1) * 8;
|
||||
int height = 350;
|
||||
|
||||
switch (dtype)
|
||||
{
|
||||
@@ -394,7 +394,7 @@ namespace OpenRCT2::Ui
|
||||
}
|
||||
}
|
||||
|
||||
return options.size();
|
||||
return -1;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -66,13 +66,29 @@ namespace OpenRCT2::Ui
|
||||
|
||||
bool HasMenuSupport() override
|
||||
{
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
int32_t ShowMenuDialog(
|
||||
const std::vector<std::string>& options, const std::string& title, const std::string& text) override
|
||||
{
|
||||
return -1;
|
||||
@autoreleasepool
|
||||
{
|
||||
NSAlert* alert = [[[NSAlert alloc] init] autorelease];
|
||||
for (const std::string& option : options)
|
||||
{
|
||||
[alert addButtonWithTitle:[NSString stringWithUTF8String:option.c_str()]];
|
||||
}
|
||||
|
||||
alert.messageText = [NSString stringWithUTF8String:title.c_str()];
|
||||
alert.informativeText = [NSString stringWithUTF8String:text.c_str()];
|
||||
NSModalResponse response = [alert runModal];
|
||||
if (response >= 1000)
|
||||
{
|
||||
return static_cast<int32_t>(response - 1000);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void OpenFolder(const std::string& path) override
|
||||
|
||||
@@ -929,6 +929,7 @@ namespace OpenRCT2::Config
|
||||
std::string gog = LanguageGetString(STR_OWN_ON_GOG);
|
||||
std::string steam = LanguageGetString(STR_OWN_ON_STEAM);
|
||||
std::string hdd = LanguageGetString(STR_INSTALLED_ON_HDD);
|
||||
std::string exit = LanguageGetString(STR_QUIT_ONBOARDING);
|
||||
|
||||
std::string chosenOption;
|
||||
|
||||
@@ -938,13 +939,19 @@ namespace OpenRCT2::Config
|
||||
options.push_back(hdd);
|
||||
options.push_back(gog);
|
||||
options.push_back(steam);
|
||||
options.push_back(exit);
|
||||
int optionIndex = uiContext.ShowMenuDialog(
|
||||
options, LanguageGetString(STR_OPENRCT2_SETUP), LanguageGetString(STR_WHICH_APPLIES_BEST));
|
||||
if (optionIndex < 0 || static_cast<uint32_t>(optionIndex) >= options.size())
|
||||
// Error while trying to show menu options, fall back.
|
||||
if (optionIndex < 0)
|
||||
{
|
||||
// graceful fallback if app errors or user exits out of window
|
||||
chosenOption = hdd;
|
||||
}
|
||||
// User clicked the Cancel or Close button
|
||||
else if (static_cast<uint32_t>(optionIndex) >= options.size())
|
||||
{
|
||||
chosenOption = exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
chosenOption = options[optionIndex];
|
||||
@@ -958,7 +965,9 @@ namespace OpenRCT2::Config
|
||||
std::vector<std::string> possibleInstallPaths{};
|
||||
if (chosenOption == hdd)
|
||||
{
|
||||
possibleInstallPaths.emplace_back(uiContext.ShowDirectoryDialog(LanguageGetString(STR_PICK_RCT2_DIR)));
|
||||
auto pickedPath = uiContext.ShowDirectoryDialog(LanguageGetString(STR_PICK_RCT2_DIR));
|
||||
if (!pickedPath.empty())
|
||||
possibleInstallPaths.emplace_back(pickedPath);
|
||||
}
|
||||
else if (chosenOption == gog)
|
||||
{
|
||||
@@ -1010,6 +1019,10 @@ namespace OpenRCT2::Config
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (chosenOption == exit)
|
||||
{
|
||||
ContextQuit();
|
||||
}
|
||||
if (possibleInstallPaths.empty())
|
||||
{
|
||||
return false;
|
||||
|
||||
@@ -1605,6 +1605,7 @@ enum : StringId
|
||||
STR_OWN_ON_STEAM = 7014,
|
||||
STR_PLEASE_CLOSE_STEAM = 7015,
|
||||
STR_WAIT_FOR_STEAM_DOWNLOAD = 7016,
|
||||
STR_QUIT_ONBOARDING = 7017,
|
||||
|
||||
STR_TILE_INSPECTOR_TOGGLE_INVISIBILITY_TIP = 6436,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user