summaryrefslogtreecommitdiff
path: root/Source/Core/Common/MsgHandler.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@innovatetechnologi.es>2019-06-20 13:37:24 +0200
committerGitHub <noreply@github.com>2019-06-20 13:37:24 +0200
commit4885130799a357eee8e279ed68dac60d6bcd78ca (patch)
tree01260bc72811143b0153b747d0d8b860638325eb /Source/Core/Common/MsgHandler.cpp
parentbaf02194c1bf4a55620e3aee7d9c0a1658a61168 (diff)
parent4f1f55093fcf98aa1592b6b8b1ad0d33c4461b50 (diff)
Merge pull request #8194 from lioncash/common-msg
Common/MsgHandler: Tidy up interface and namespace code
Diffstat (limited to 'Source/Core/Common/MsgHandler.cpp')
-rw-r--r--Source/Core/Common/MsgHandler.cpp101
1 files changed, 55 insertions, 46 deletions
diff --git a/Source/Core/Common/MsgHandler.cpp b/Source/Core/Common/MsgHandler.cpp
index 43f24c9865..6b24991526 100644
--- a/Source/Core/Common/MsgHandler.cpp
+++ b/Source/Core/Common/MsgHandler.cpp
@@ -2,49 +2,80 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
+#include "Common/MsgHandler.h"
+
#include <cstdarg>
-#include <cstdio>
#include <string>
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <cstdio>
+#include <fmt/format.h>
+#endif
+
#include "Common/Common.h"
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"
-#include "Common/MsgHandler.h"
#include "Common/StringUtil.h"
+namespace Common
+{
+namespace
+{
+// Default non library dependent panic alert
+bool DefaultMsgHandler(const char* caption, const char* text, bool yes_no, MsgType style)
+{
#ifdef _WIN32
-#include <windows.h>
+ int window_style = MB_ICONINFORMATION;
+ if (style == MsgType::Question)
+ window_style = MB_ICONQUESTION;
+ if (style == MsgType::Warning)
+ window_style = MB_ICONWARNING;
+
+ return IDYES == MessageBox(0, UTF8ToTStr(text).c_str(), UTF8ToTStr(caption).c_str(),
+ window_style | (yes_no ? MB_YESNO : MB_OK));
+#else
+ fmt::print(stderr, "{}\n", text);
+
+ // Return no to any question (which will in general crash the emulator)
+ return false;
#endif
+}
-bool DefaultMsgHandler(const char* caption, const char* text, bool yes_no, MsgType style);
-static MsgAlertHandler msg_handler = DefaultMsgHandler;
-static bool AlertEnabled = true;
+// Default (non) translator
+std::string DefaultStringTranslator(const char* text)
+{
+ return text;
+}
-std::string DefaultStringTranslator(const char* text);
-static StringTranslator str_translator = DefaultStringTranslator;
+MsgAlertHandler s_msg_handler = DefaultMsgHandler;
+StringTranslator s_str_translator = DefaultStringTranslator;
+bool s_alert_enabled = true;
+} // Anonymous namespace
// Select which of these functions that are used for message boxes. If
// Qt is enabled we will use QtMsgAlertHandler() that is defined in Main.cpp
void RegisterMsgAlertHandler(MsgAlertHandler handler)
{
- msg_handler = handler;
+ s_msg_handler = handler;
}
// Select translation function.
void RegisterStringTranslator(StringTranslator translator)
{
- str_translator = translator;
+ s_str_translator = translator;
}
// enable/disable the alert handler
void SetEnableAlert(bool enable)
{
- AlertEnabled = enable;
+ s_alert_enabled = enable;
}
std::string GetStringT(const char* string)
{
- return str_translator(string);
+ return s_str_translator(string);
}
// This is the first stop for gui alerts where the log is updated and the
@@ -60,12 +91,12 @@ bool MsgAlert(bool yes_no, MsgType style, const char* format, ...)
static std::string ques_caption;
static std::string crit_caption;
- if (!info_caption.length())
+ if (info_caption.empty())
{
- info_caption = str_translator(_trans("Information"));
- ques_caption = str_translator(_trans("Question"));
- warn_caption = str_translator(_trans("Warning"));
- crit_caption = str_translator(_trans("Critical"));
+ info_caption = s_str_translator(_trans("Information"));
+ ques_caption = s_str_translator(_trans("Question"));
+ warn_caption = s_str_translator(_trans("Warning"));
+ crit_caption = s_str_translator(_trans("Critical"));
}
switch (style)
@@ -86,40 +117,18 @@ bool MsgAlert(bool yes_no, MsgType style, const char* format, ...)
va_list args;
va_start(args, format);
- CharArrayFromFormatV(buffer, sizeof(buffer) - 1, str_translator(format).c_str(), args);
+ CharArrayFromFormatV(buffer, sizeof(buffer) - 1, s_str_translator(format).c_str(), args);
va_end(args);
ERROR_LOG(MASTER_LOG, "%s: %s", caption.c_str(), buffer);
// Don't ignore questions, especially AskYesNo, PanicYesNo could be ignored
- if (msg_handler && (AlertEnabled || style == MsgType::Question || style == MsgType::Critical))
- return msg_handler(caption.c_str(), buffer, yes_no, style);
+ if (s_msg_handler != nullptr &&
+ (s_alert_enabled || style == MsgType::Question || style == MsgType::Critical))
+ {
+ return s_msg_handler(caption.c_str(), buffer, yes_no, style);
+ }
return true;
}
-
-// Default non library dependent panic alert
-bool DefaultMsgHandler(const char* caption, const char* text, bool yes_no, MsgType style)
-{
-#ifdef _WIN32
- int window_style = MB_ICONINFORMATION;
- if (style == MsgType::Question)
- window_style = MB_ICONQUESTION;
- if (style == MsgType::Warning)
- window_style = MB_ICONWARNING;
-
- return IDYES == MessageBox(0, UTF8ToTStr(text).c_str(), UTF8ToTStr(caption).c_str(),
- window_style | (yes_no ? MB_YESNO : MB_OK));
-#else
- fprintf(stderr, "%s\n", text);
-
- // Return no to any question (which will in general crash the emulator)
- return false;
-#endif
-}
-
-// Default (non) translator
-std::string DefaultStringTranslator(const char* text)
-{
- return text;
-}
+} // namespace Common