From 442d2d75d71bbc057e667edc301a79fa1cc813be Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sat, 27 Mar 2021 23:01:07 -0700 Subject: Initial setup --- core/src/Utils/Dialog/Dialog_win32.cpp | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 core/src/Utils/Dialog/Dialog_win32.cpp (limited to 'core/src/Utils/Dialog/Dialog_win32.cpp') diff --git a/core/src/Utils/Dialog/Dialog_win32.cpp b/core/src/Utils/Dialog/Dialog_win32.cpp new file mode 100644 index 0000000..b82f382 --- /dev/null +++ b/core/src/Utils/Dialog/Dialog_win32.cpp @@ -0,0 +1,64 @@ +// Adapted from https://github.com/aaronmjacobs/Boxer/blob/master/src/boxer_win.cpp +#include "Dialog.hpp" + +#define WIN32_LEAN_AND_MEAN +#include + +namespace Dialog { +namespace { + + UINT GetIcon(Style style) { + switch (style) { + case Style::Info: + return MB_ICONINFORMATION; + case Style::Warning: + return MB_ICONWARNING; + case Style::Error: + return MB_ICONERROR; + case Style::Question: + return MB_ICONQUESTION; + default: + return MB_ICONINFORMATION; + } + } + + UINT GetButtons(Buttons buttons) { + switch (buttons) { + case Buttons::OK: + case Buttons::Quit: // There is no 'Quit' button on Windows :( + return MB_OK; + case Buttons::OKCancel: + return MB_OKCANCEL; + case Buttons::YesNo: + return MB_YESNO; + default: + return MB_OK; + } + } + + Selection GetSelection(int response, Buttons buttons) { + switch (response) { + case IDOK: + return buttons == Buttons::Quit ? Selection::Quit : Selection::OK; + case IDCANCEL: + return Selection::Cancel; + case IDYES: + return Selection::Yes; + case IDNO: + return Selection::No; + default: + return Selection::None; + } + } + +} // namespace + +Selection Show(const char* message, const char* title, Style style, Buttons buttons) { + UINT flags = MB_TASKMODAL; + + flags |= GetIcon(style); + flags |= GetButtons(buttons); + + return GetSelection(MessageBox(nullptr, message, title, flags), buttons); +} +} // namespace Dialog -- cgit v1.2.3-70-g09d2