From a6e84fab5c4c2c94ca8bcf6510f056ad8fe8dba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Tue, 2 Aug 2022 08:28:20 +0200 Subject: [PATCH] Add a message box with buttons to UiContext --- src/openrct2-ui/UiContext.cpp | 23 +++++++++++++++++++++++ src/openrct2/ui/DummyUiContext.cpp | 4 ++++ src/openrct2/ui/UiContext.h | 2 ++ 3 files changed, 29 insertions(+) diff --git a/src/openrct2-ui/UiContext.cpp b/src/openrct2-ui/UiContext.cpp index 4d02484f1e..17e84abfc8 100644 --- a/src/openrct2-ui/UiContext.cpp +++ b/src/openrct2-ui/UiContext.cpp @@ -640,6 +640,29 @@ public: _platformUiContext->ShowMessageBox(_window, message); } + int ShowMessageBox(const std::string& title, const std::string& message, const std::vector& options) override + { + auto message_box_button_data = std::make_unique(options.size()); + for (size_t i = 0; i < options.size(); i++) + { + message_box_button_data[i].buttonid = static_cast(i); + message_box_button_data[i].text = options[i].c_str(); + } + + SDL_MessageBoxData message_box_data{}; + message_box_data.window = _window; + message_box_data.title = title.c_str(); + message_box_data.message = message.c_str(); + message_box_data.numbuttons = static_cast(options.size()); + message_box_data.buttons = message_box_button_data.get(); + + int buttonid{}; + + SDL_ShowMessageBox(&message_box_data, &buttonid); + + return buttonid; + } + bool HasMenuSupport() override { return _platformUiContext->HasMenuSupport(); diff --git a/src/openrct2/ui/DummyUiContext.cpp b/src/openrct2/ui/DummyUiContext.cpp index aa573ae300..77aa929b4e 100644 --- a/src/openrct2/ui/DummyUiContext.cpp +++ b/src/openrct2/ui/DummyUiContext.cpp @@ -90,6 +90,10 @@ namespace OpenRCT2::Ui void ShowMessageBox(const std::string& /*message*/) override { } + int ShowMessageBox(const std::string&, const std::string&, const std::vector&) override + { + return 0; + } bool HasMenuSupport() override { return false; diff --git a/src/openrct2/ui/UiContext.h b/src/openrct2/ui/UiContext.h index 3660fc42f4..cac084e8da 100644 --- a/src/openrct2/ui/UiContext.h +++ b/src/openrct2/ui/UiContext.h @@ -120,6 +120,8 @@ namespace OpenRCT2 virtual void TriggerResize() abstract; virtual void ShowMessageBox(const std::string& message) abstract; + virtual int ShowMessageBox( + const std::string& title, const std::string& message, const std::vector& options) abstract; virtual bool HasMenuSupport() abstract; // Creates a menu with a series of options, returns the index of the selected option