diff options
Diffstat (limited to 'core/src/Utils/Dialog/Dialog_win32.cpp')
-rw-r--r-- | core/src/Utils/Dialog/Dialog_win32.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
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 <Windows.h>
+
+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
|