From 352870b503bedcd86df31efa172ac63a1ef9f2fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 26 Jul 2020 21:57:56 +0200 Subject: [PATCH] Add OpenURL method, with implementation for Linux and Windows --- src/openrct2-ui/UiContext.Android.cpp | 5 +++++ src/openrct2-ui/UiContext.Linux.cpp | 6 ++++++ src/openrct2-ui/UiContext.Win32.cpp | 6 ++++++ src/openrct2-ui/UiContext.cpp | 5 +++++ src/openrct2-ui/UiContext.h | 1 + src/openrct2-ui/UiContext.macOS.mm | 4 ++++ src/openrct2/ui/DummyUiContext.cpp | 3 +++ src/openrct2/ui/UiContext.h | 1 + 8 files changed, 31 insertions(+) diff --git a/src/openrct2-ui/UiContext.Android.cpp b/src/openrct2-ui/UiContext.Android.cpp index a67ad05b69..3e80750f72 100644 --- a/src/openrct2-ui/UiContext.Android.cpp +++ b/src/openrct2-ui/UiContext.Android.cpp @@ -65,6 +65,11 @@ namespace OpenRCT2::Ui void OpenFolder(const std::string& path) override { } + + void OpenURL(const std::string& url) override + { + STUB(); + } }; IPlatformUiContext* CreatePlatformUiContext() diff --git a/src/openrct2-ui/UiContext.Linux.cpp b/src/openrct2-ui/UiContext.Linux.cpp index 13a2d038b4..0822d244b1 100644 --- a/src/openrct2-ui/UiContext.Linux.cpp +++ b/src/openrct2-ui/UiContext.Linux.cpp @@ -119,6 +119,12 @@ namespace OpenRCT2::Ui Execute(cmd); } + void OpenURL(const std::string& url) override + { + std::string cmd = String::Format("xdg-open %s", url.c_str()); + Execute(cmd); + } + std::string ShowFileDialog(SDL_Window* window, const FileDialogDesc& desc) override { std::string result; diff --git a/src/openrct2-ui/UiContext.Win32.cpp b/src/openrct2-ui/UiContext.Win32.cpp index 78e4b52e9b..22c9b932a1 100644 --- a/src/openrct2-ui/UiContext.Win32.cpp +++ b/src/openrct2-ui/UiContext.Win32.cpp @@ -97,6 +97,12 @@ namespace OpenRCT2::Ui ShellExecuteW(NULL, L"open", pathW.c_str(), NULL, NULL, SW_SHOWNORMAL); } + void OpenURL(const std::string& url) override + { + std::wstring urlW = String::ToWideChar(url); + ShellExecuteW(NULL, L"open", urlW.c_str(), NULL, NULL, SW_SHOWNORMAL); + } + std::string ShowFileDialog(SDL_Window* window, const FileDialogDesc& desc) override { std::wstring wcFilename = String::ToWideChar(desc.DefaultFilename); diff --git a/src/openrct2-ui/UiContext.cpp b/src/openrct2-ui/UiContext.cpp index 6afeaa49c0..20fe56f6a6 100644 --- a/src/openrct2-ui/UiContext.cpp +++ b/src/openrct2-ui/UiContext.cpp @@ -609,6 +609,11 @@ public: _platformUiContext->OpenFolder(path); } + void OpenURL(const std::string& url) override + { + _platformUiContext->OpenURL(url); + } + std::string ShowFileDialog(const FileDialogDesc& desc) override { return _platformUiContext->ShowFileDialog(_window, desc); diff --git a/src/openrct2-ui/UiContext.h b/src/openrct2-ui/UiContext.h index 0cc7df12cf..74d7fde2ec 100644 --- a/src/openrct2-ui/UiContext.h +++ b/src/openrct2-ui/UiContext.h @@ -34,6 +34,7 @@ namespace OpenRCT2 virtual void ShowMessageBox(SDL_Window * window, const std::string& message) abstract; virtual void OpenFolder(const std::string& path) abstract; + virtual void OpenURL(const std::string& url) abstract; virtual std::string ShowFileDialog(SDL_Window * window, const FileDialogDesc& desc) abstract; virtual std::string ShowDirectoryDialog(SDL_Window * window, const std::string& title) abstract; }; diff --git a/src/openrct2-ui/UiContext.macOS.mm b/src/openrct2-ui/UiContext.macOS.mm index e9e7036464..01b5e703f6 100644 --- a/src/openrct2-ui/UiContext.macOS.mm +++ b/src/openrct2-ui/UiContext.macOS.mm @@ -68,6 +68,10 @@ namespace OpenRCT2::Ui } } + void OpenURL(const std::string& url) override + { + } + std::string ShowFileDialog(SDL_Window* window, const FileDialogDesc& desc) override { @autoreleasepool { diff --git a/src/openrct2/ui/DummyUiContext.cpp b/src/openrct2/ui/DummyUiContext.cpp index ab2c6e254d..c24d2850d7 100644 --- a/src/openrct2/ui/DummyUiContext.cpp +++ b/src/openrct2/ui/DummyUiContext.cpp @@ -92,6 +92,9 @@ namespace OpenRCT2::Ui void OpenFolder(const std::string& /*path*/) override { } + void OpenURL(const std::string& /*url*/) override + { + } std::string ShowFileDialog(const FileDialogDesc& /*desc*/) override { return std::string(); diff --git a/src/openrct2/ui/UiContext.h b/src/openrct2/ui/UiContext.h index d2f0fa09ef..3c0bf90845 100644 --- a/src/openrct2/ui/UiContext.h +++ b/src/openrct2/ui/UiContext.h @@ -113,6 +113,7 @@ namespace OpenRCT2 virtual void ShowMessageBox(const std::string& message) abstract; virtual void OpenFolder(const std::string& path) abstract; + virtual void OpenURL(const std::string& url) abstract; virtual std::string ShowFileDialog(const FileDialogDesc& desc) abstract; virtual std::string ShowDirectoryDialog(const std::string& title) abstract;