diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp index e0f305693b..8dad714a84 100644 --- a/Source/Android/jni/MainAndroid.cpp +++ b/Source/Android/jni/MainAndroid.cpp @@ -151,7 +151,7 @@ void Host_TitleChanged() { } -static bool MsgAlert(const char* caption, const char* text, bool yes_no, MsgType /*style*/) +static bool MsgAlert(const char* caption, const char* text, bool yes_no, Common::MsgType /*style*/) { JNIEnv* env = IDCache::GetEnvForThread(); @@ -630,7 +630,7 @@ static void Run(JNIEnv* env, const std::vector& paths, bool first_o ASSERT(!paths.empty()); __android_log_print(ANDROID_LOG_INFO, DOLPHIN_TAG, "Running : %s", paths[0].c_str()); - RegisterMsgAlertHandler(&MsgAlert); + Common::RegisterMsgAlertHandler(&MsgAlert); Common::AndroidSetReportHandler(&ReportSend); DolphinAnalytics::AndroidSetGetValFunc(&GetAnalyticValue); 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 -#include #include +#ifdef _WIN32 +#include +#else +#include +#include +#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 + 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 diff --git a/Source/Core/Common/MsgHandler.h b/Source/Core/Common/MsgHandler.h index dcb79f4196..b5f7efbe01 100644 --- a/Source/Core/Common/MsgHandler.h +++ b/Source/Core/Common/MsgHandler.h @@ -6,6 +6,8 @@ #include +namespace Common +{ // Message alerts enum class MsgType { @@ -15,8 +17,8 @@ enum class MsgType Critical }; -typedef bool (*MsgAlertHandler)(const char* caption, const char* text, bool yes_no, MsgType style); -typedef std::string (*StringTranslator)(const char* text); +using MsgAlertHandler = bool (*)(const char* caption, const char* text, bool yes_no, MsgType style); +using StringTranslator = std::string (*)(const char* text); void RegisterMsgAlertHandler(MsgAlertHandler handler); void RegisterStringTranslator(StringTranslator translator); @@ -28,30 +30,69 @@ bool MsgAlert(bool yes_no, MsgType style, const char* format, ...) #endif ; void SetEnableAlert(bool enable); +} // namespace Common #ifdef _WIN32 -#define SuccessAlert(format, ...) MsgAlert(false, MsgType::Information, format, __VA_ARGS__) -#define PanicAlert(format, ...) MsgAlert(false, MsgType::Warning, format, __VA_ARGS__) -#define PanicYesNo(format, ...) MsgAlert(true, MsgType::Warning, format, __VA_ARGS__) -#define AskYesNo(format, ...) MsgAlert(true, MsgType::Question, format, __VA_ARGS__) -#define CriticalAlert(format, ...) MsgAlert(false, MsgType::Critical, format, __VA_ARGS__) +#define SuccessAlert(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Information, format, __VA_ARGS__) + +#define PanicAlert(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Warning, format, __VA_ARGS__) + +#define PanicYesNo(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Warning, format, __VA_ARGS__) + +#define AskYesNo(format, ...) Common::MsgAlert(true, Common::MsgType::Question, format, __VA_ARGS__) + +#define CriticalAlert(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Critical, format, __VA_ARGS__) + // Use these macros (that do the same thing) if the message should be translated. -#define SuccessAlertT(format, ...) MsgAlert(false, MsgType::Information, format, __VA_ARGS__) -#define PanicAlertT(format, ...) MsgAlert(false, MsgType::Warning, format, __VA_ARGS__) -#define PanicYesNoT(format, ...) MsgAlert(true, MsgType::Warning, format, __VA_ARGS__) -#define AskYesNoT(format, ...) MsgAlert(true, MsgType::Question, format, __VA_ARGS__) -#define CriticalAlertT(format, ...) MsgAlert(false, MsgType::Critical, format, __VA_ARGS__) + +#define SuccessAlertT(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Information, format, __VA_ARGS__) + +#define PanicAlertT(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Warning, format, __VA_ARGS__) + +#define PanicYesNoT(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Warning, format, __VA_ARGS__) + +#define AskYesNoT(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Question, format, __VA_ARGS__) + +#define CriticalAlertT(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Critical, format, __VA_ARGS__) #else -#define SuccessAlert(format, ...) MsgAlert(false, MsgType::Information, format, ##__VA_ARGS__) -#define PanicAlert(format, ...) MsgAlert(false, MsgType::Warning, format, ##__VA_ARGS__) -#define PanicYesNo(format, ...) MsgAlert(true, MsgType::Warning, format, ##__VA_ARGS__) -#define AskYesNo(format, ...) MsgAlert(true, MsgType::Question, format, ##__VA_ARGS__) -#define CriticalAlert(format, ...) MsgAlert(false, MsgType::Critical, format, ##__VA_ARGS__) +#define SuccessAlert(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Information, format, ##__VA_ARGS__) + +#define PanicAlert(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Warning, format, ##__VA_ARGS__) + +#define PanicYesNo(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Warning, format, ##__VA_ARGS__) + +#define AskYesNo(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Question, format, ##__VA_ARGS__) + +#define CriticalAlert(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Critical, format, ##__VA_ARGS__) + // Use these macros (that do the same thing) if the message should be translated. -#define SuccessAlertT(format, ...) MsgAlert(false, MsgType::Information, format, ##__VA_ARGS__) -#define PanicAlertT(format, ...) MsgAlert(false, MsgType::Warning, format, ##__VA_ARGS__) -#define PanicYesNoT(format, ...) MsgAlert(true, MsgType::Warning, format, ##__VA_ARGS__) -#define AskYesNoT(format, ...) MsgAlert(true, MsgType::Question, format, ##__VA_ARGS__) -#define CriticalAlertT(format, ...) MsgAlert(false, MsgType::Critical, format, ##__VA_ARGS__) +#define SuccessAlertT(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Information, format, ##__VA_ARGS__) + +#define PanicAlertT(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Warning, format, ##__VA_ARGS__) + +#define PanicYesNoT(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Warning, format, ##__VA_ARGS__) + +#define AskYesNoT(format, ...) \ + Common::MsgAlert(true, Common::MsgType::Question, format, ##__VA_ARGS__) + +#define CriticalAlertT(format, ...) \ + Common::MsgAlert(false, Common::MsgType::Critical, format, ##__VA_ARGS__) #endif diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index 010e1b559e..d157d892a3 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -805,7 +805,7 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) if (m_sync_save_data_count == 0) SyncSaveDataResponse(true); else - m_dialog->AppendChat(GetStringT("Synchronizing save data...")); + m_dialog->AppendChat(Common::GetStringT("Synchronizing save data...")); } break; @@ -1040,7 +1040,7 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) SyncCodeResponse(true); } else - m_dialog->AppendChat(GetStringT("Synchronizing Gecko codes...")); + m_dialog->AppendChat(Common::GetStringT("Synchronizing Gecko codes...")); } break; @@ -1109,7 +1109,7 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) SyncCodeResponse(true); } else - m_dialog->AppendChat(GetStringT("Synchronizing AR codes...")); + m_dialog->AppendChat(Common::GetStringT("Synchronizing AR codes...")); } break; @@ -1289,9 +1289,14 @@ void NetPlayClient::ThreadFunc() qos_session = Common::QoSSession(m_server); if (qos_session.Successful()) - m_dialog->AppendChat(GetStringT("Quality of Service (QoS) was successfully enabled.")); + { + m_dialog->AppendChat( + Common::GetStringT("Quality of Service (QoS) was successfully enabled.")); + } else - m_dialog->AppendChat(GetStringT("Quality of Service (QoS) couldn't be enabled.")); + { + m_dialog->AppendChat(Common::GetStringT("Quality of Service (QoS) couldn't be enabled.")); + } } while (m_do_loop.IsSet()) @@ -1511,8 +1516,8 @@ bool NetPlayClient::StartGame(const std::string& path) void NetPlayClient::SyncSaveDataResponse(const bool success) { - m_dialog->AppendChat(success ? GetStringT("Data received!") : - GetStringT("Error processing data.")); + m_dialog->AppendChat(success ? Common::GetStringT("Data received!") : + Common::GetStringT("Error processing data.")); if (success) { @@ -1540,7 +1545,7 @@ void NetPlayClient::SyncCodeResponse(const bool success) // If something failed, immediately report back that code sync failed if (!success) { - m_dialog->AppendChat(GetStringT("Error processing codes.")); + m_dialog->AppendChat(Common::GetStringT("Error processing codes.")); sf::Packet response_packet; response_packet << static_cast(NP_MSG_SYNC_CODES); @@ -1553,7 +1558,7 @@ void NetPlayClient::SyncCodeResponse(const bool success) // If both gecko and AR codes have completely finished transferring, report back as successful if (m_sync_gecko_codes_complete && m_sync_ar_codes_complete) { - m_dialog->AppendChat(GetStringT("Codes received!")); + m_dialog->AppendChat(Common::GetStringT("Codes received!")); sf::Packet response_packet; response_packet << static_cast(NP_MSG_SYNC_CODES); diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index bd4f527d50..df1c37ef14 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -1049,7 +1049,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) m_save_data_synced_players++; if (m_save_data_synced_players >= m_players.size() - 1) { - m_dialog->AppendChat(GetStringT("All players' saves synchronized.")); + m_dialog->AppendChat(Common::GetStringT("All players' saves synchronized.")); // Saves are synced, check if codes are as well and attempt to start the game m_saves_synced = true; @@ -1061,8 +1061,8 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) case SYNC_SAVE_DATA_FAILURE: { - m_dialog->AppendChat( - StringFromFormat(GetStringT("%s failed to synchronize.").c_str(), player.name.c_str())); + m_dialog->AppendChat(StringFromFormat(Common::GetStringT("%s failed to synchronize.").c_str(), + player.name.c_str())); m_dialog->OnGameStartAborted(); ChunkedDataAbort(); m_start_pending = false; @@ -1093,7 +1093,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) { if (++m_codes_synced_players >= m_players.size() - 1) { - m_dialog->AppendChat(GetStringT("All players' codes synchronized.")); + m_dialog->AppendChat(Common::GetStringT("All players' codes synchronized.")); // Codes are synced, check if saves are as well and attempt to start the game m_codes_synced = true; @@ -1105,8 +1105,8 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) case SYNC_CODES_FAILURE: { - m_dialog->AppendChat(StringFromFormat(GetStringT("%s failed to synchronize codes.").c_str(), - player.name.c_str())); + m_dialog->AppendChat(StringFromFormat( + Common::GetStringT("%s failed to synchronize codes.").c_str(), player.name.c_str())); m_dialog->OnGameStartAborted(); m_start_pending = false; } diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp index 758774197a..580a54eea7 100644 --- a/Source/Core/Core/State.cpp +++ b/Source/Core/Core/State.cpp @@ -437,11 +437,11 @@ std::string GetInfoStringOfSlot(int slot, bool translate) { std::string filename = MakeStateFilename(slot); if (!File::Exists(filename)) - return translate ? GetStringT("Empty") : "Empty"; + return translate ? Common::GetStringT("Empty") : "Empty"; State::StateHeader header; if (!ReadHeader(filename, header)) - return translate ? GetStringT("Unknown") : "Unknown"; + return translate ? Common::GetStringT("Unknown") : "Unknown"; return Common::Timer::GetDateTimeFormatted(header.time); } diff --git a/Source/Core/Core/TitleDatabase.cpp b/Source/Core/Core/TitleDatabase.cpp index e21239e0d0..c75da55ff3 100644 --- a/Source/Core/Core/TitleDatabase.cpp +++ b/Source/Core/Core/TitleDatabase.cpp @@ -78,7 +78,7 @@ TitleDatabase::TitleDatabase() // i18n: "Wii Menu" (or System Menu) refers to the Wii's main menu, // which is (usually) the first thing users see when a Wii console starts. - m_base_map.emplace("0000000100000002", GetStringT("Wii Menu")); + m_base_map.emplace("0000000100000002", Common::GetStringT("Wii Menu")); for (const auto& id : {"HAXX", "00010001af1bf516"}) m_base_map.emplace(id, "The Homebrew Channel"); } diff --git a/Source/Core/DiscIO/CompressedBlob.cpp b/Source/Core/DiscIO/CompressedBlob.cpp index 20584cf845..76b7506cb2 100644 --- a/Source/Core/DiscIO/CompressedBlob.cpp +++ b/Source/Core/DiscIO/CompressedBlob.cpp @@ -200,7 +200,7 @@ bool CompressFileToBlob(const std::string& infile_path, const std::string& outfi if (deflateInit(&z, 9) != Z_OK) return false; - callback(GetStringT("Files opened, ready to compress."), 0, arg); + callback(Common::GetStringT("Files opened, ready to compress."), 0, arg); CompressedBlobHeader header; header.magic_cookie = GCZ_MAGIC; @@ -239,8 +239,8 @@ bool CompressFileToBlob(const std::string& infile_path, const std::string& outfi if (inpos != 0) ratio = (int)(100 * position / inpos); - std::string temp = - StringFromFormat(GetStringT("%i of %i blocks. Compression ratio %i%%").c_str(), i, + const std::string temp = + StringFromFormat(Common::GetStringT("%i of %i blocks. Compression ratio %i%%").c_str(), i, header.num_blocks, ratio); bool was_cancelled = !callback(temp, (float)i / (float)header.num_blocks, arg); if (was_cancelled) @@ -332,7 +332,7 @@ bool CompressFileToBlob(const std::string& infile_path, const std::string& outfi if (success) { - callback(GetStringT("Done compressing disc image."), 1.0f, arg); + callback(Common::GetStringT("Done compressing disc image."), 1.0f, arg); } return success; } @@ -381,7 +381,8 @@ bool DecompressBlobToFile(const std::string& infile_path, const std::string& out { if (i % progress_monitor == 0) { - bool was_cancelled = !callback(GetStringT("Unpacking"), (float)i / (float)num_buffers, arg); + const bool was_cancelled = + !callback(Common::GetStringT("Unpacking"), (float)i / (float)num_buffers, arg); if (was_cancelled) { success = false; diff --git a/Source/Core/DiscIO/Enums.cpp b/Source/Core/DiscIO/Enums.cpp index 507616e32c..0939ae9174 100644 --- a/Source/Core/DiscIO/Enums.cpp +++ b/Source/Core/DiscIO/Enums.cpp @@ -64,7 +64,7 @@ std::string GetName(Country country, bool translate) break; } - return translate ? GetStringT(name.c_str()) : name; + return translate ? Common::GetStringT(name.c_str()) : name; } std::string GetName(Language language, bool translate) @@ -108,7 +108,7 @@ std::string GetName(Language language, bool translate) break; } - return translate ? GetStringT(name.c_str()) : name; + return translate ? Common::GetStringT(name.c_str()) : name; } bool IsDisc(Platform volume_type) diff --git a/Source/Core/DiscIO/VolumeVerifier.cpp b/Source/Core/DiscIO/VolumeVerifier.cpp index c86d9c498f..5e20803651 100644 --- a/Source/Core/DiscIO/VolumeVerifier.cpp +++ b/Source/Core/DiscIO/VolumeVerifier.cpp @@ -70,7 +70,7 @@ void VolumeVerifier::Start() CheckPartitions(); if (m_volume.GetVolumeType() == Platform::WiiWAD) - CheckCorrectlySigned(PARTITION_NONE, GetStringT("This title is not correctly signed.")); + CheckCorrectlySigned(PARTITION_NONE, Common::GetStringT("This title is not correctly signed.")); CheckDiscSize(); CheckMisc(); @@ -85,7 +85,8 @@ void VolumeVerifier::CheckPartitions() if (m_volume.GetVolumeType() != Platform::WiiWAD && !m_volume.GetFileSystem(m_volume.GetGamePartition())) { - AddProblem(Severity::High, GetStringT("The filesystem is invalid or could not be read.")); + AddProblem(Severity::High, + Common::GetStringT("The filesystem is invalid or could not be read.")); } return; } @@ -98,7 +99,7 @@ void VolumeVerifier::CheckPartitions() // The only game that has that many partitions in total is Super Smash Bros. Brawl, // and that game places all partitions other than UPDATE and DATA in the second table. AddProblem(Severity::Low, - GetStringT("There are too many partitions in the first partition table.")); + Common::GetStringT("There are too many partitions in the first partition table.")); } std::vector types; @@ -110,20 +111,20 @@ void VolumeVerifier::CheckPartitions() } if (std::find(types.cbegin(), types.cend(), PARTITION_UPDATE) == types.cend()) - AddProblem(Severity::Low, GetStringT("The update partition is missing.")); + AddProblem(Severity::Low, Common::GetStringT("The update partition is missing.")); if (std::find(types.cbegin(), types.cend(), PARTITION_DATA) == types.cend()) - AddProblem(Severity::High, GetStringT("The data partition is missing.")); + AddProblem(Severity::High, Common::GetStringT("The data partition is missing.")); const bool has_channel_partition = std::find(types.cbegin(), types.cend(), PARTITION_CHANNEL) != types.cend(); if (ShouldHaveChannelPartition() && !has_channel_partition) - AddProblem(Severity::Medium, GetStringT("The channel partition is missing.")); + AddProblem(Severity::Medium, Common::GetStringT("The channel partition is missing.")); const bool has_install_partition = std::find(types.cbegin(), types.cend(), PARTITION_INSTALL) != types.cend(); if (ShouldHaveInstallPartition() && !has_install_partition) - AddProblem(Severity::High, GetStringT("The install partition is missing.")); + AddProblem(Severity::High, Common::GetStringT("The install partition is missing.")); if (ShouldHaveMasterpiecePartitions() && types.cend() == @@ -135,23 +136,24 @@ void VolumeVerifier::CheckPartitions() // (French), Clásicos (Spanish), Capolavori (Italian), 클래식 게임 체험판 (Korean). // If your language is not one of the languages above, consider leaving the string untranslated // so that people will recognize it as the name of the game mode. - AddProblem(Severity::Medium, GetStringT("The Masterpiece partitions are missing.")); + AddProblem(Severity::Medium, Common::GetStringT("The Masterpiece partitions are missing.")); } for (const Partition& partition : partitions) { if (m_volume.GetPartitionType(partition) == PARTITION_UPDATE && partition.offset != 0x50000) { - AddProblem(Severity::Low, GetStringT("The update partition is not at its normal position.")); + AddProblem(Severity::Low, + Common::GetStringT("The update partition is not at its normal position.")); } const u64 normal_data_offset = m_volume.IsEncryptedAndHashed() ? 0xF800000 : 0x838000; if (m_volume.GetPartitionType(partition) == PARTITION_DATA && partition.offset != normal_data_offset && !has_channel_partition && !has_install_partition) { - AddProblem( - Severity::Low, - GetStringT("The data partition is not at its normal position. This will affect the " + AddProblem(Severity::Low, + Common::GetStringT( + "The data partition is not at its normal position. This will affect the " "emulated loading times. When using NetPlay or sending input recordings to " "other people, you will experience desyncs if anyone is using a good dump.")); } @@ -167,7 +169,7 @@ bool VolumeVerifier::CheckPartition(const Partition& partition) if (!type) { // Not sure if this can happen in practice - AddProblem(Severity::Medium, GetStringT("The type of a partition could not be read.")); + AddProblem(Severity::Medium, Common::GetStringT("The type of a partition could not be read.")); return false; } @@ -182,19 +184,22 @@ bool VolumeVerifier::CheckPartition(const Partition& partition) if (partition.offset % VolumeWii::BLOCK_TOTAL_SIZE != 0 || m_volume.PartitionOffsetToRawOffset(0, partition) % VolumeWii::BLOCK_TOTAL_SIZE != 0) { - AddProblem(Severity::Medium, - StringFromFormat(GetStringT("The %s partition is not properly aligned.").c_str(), - name.c_str())); + AddProblem( + Severity::Medium, + StringFromFormat(Common::GetStringT("The %s partition is not properly aligned.").c_str(), + name.c_str())); } CheckCorrectlySigned( - partition, StringFromFormat(GetStringT("The %s partition is not correctly signed.").c_str(), - name.c_str())); + partition, + StringFromFormat(Common::GetStringT("The %s partition is not correctly signed.").c_str(), + name.c_str())); if (m_volume.SupportsIntegrityCheck() && !m_volume.CheckH3TableIntegrity(partition)) { std::string text = StringFromFormat( - GetStringT("The H3 hash table for the %s partition is not correct.").c_str(), name.c_str()); + Common::GetStringT("The H3 hash table for the %s partition is not correct.").c_str(), + name.c_str()); AddProblem(Severity::Low, std::move(text)); } @@ -227,7 +232,8 @@ bool VolumeVerifier::CheckPartition(const Partition& partition) // the Masterpiece partitions in Super Smash Bros. Brawl without removing them from // the partition table. https://bugs.dolphin-emu.org/issues/8733 std::string text = StringFromFormat( - GetStringT("The %s partition does not seem to contain valid data.").c_str(), name.c_str()); + Common::GetStringT("The %s partition does not seem to contain valid data.").c_str(), + name.c_str()); AddProblem(severity, std::move(text)); return false; } @@ -236,7 +242,8 @@ bool VolumeVerifier::CheckPartition(const Partition& partition) if (!filesystem) { std::string text = StringFromFormat( - GetStringT("The %s partition does not have a valid file system.").c_str(), name.c_str()); + Common::GetStringT("The %s partition does not have a valid file system.").c_str(), + name.c_str()); AddProblem(severity, std::move(text)); return false; } @@ -266,8 +273,9 @@ bool VolumeVerifier::CheckPartition(const Partition& partition) { // This is reached for hacked dumps where the update partition has been replaced with // a very old update partition so that no updates will be installed. - AddProblem(Severity::Low, - GetStringT("The update partition does not contain the IOS used by this title.")); + AddProblem( + Severity::Low, + Common::GetStringT("The update partition does not contain the IOS used by this title.")); } } @@ -303,7 +311,7 @@ std::string VolumeVerifier::GetPartitionName(std::optional type) const // (French), Clásicos (Spanish), Capolavori (Italian), 클래식 게임 체험판 (Korean). // If your language is not one of the languages above, consider leaving the string untranslated // so that people will recognize it as the name of the game mode. - name = StringFromFormat(GetStringT("%s (Masterpiece)").c_str(), name.c_str()); + name = StringFromFormat(Common::GetStringT("%s (Masterpiece)").c_str(), name.c_str()); } return name; } @@ -381,10 +389,10 @@ void VolumeVerifier::CheckDiscSize() biggest_offset > SL_DVD_SIZE && m_volume.GetSize() >= SL_DVD_SIZE; std::string text = second_layer_missing ? - GetStringT( + Common::GetStringT( "This disc image is too small and lacks some data. The problem is most likely that " "this is a dual-layer disc that has been dumped as a single-layer disc.") : - GetStringT( + Common::GetStringT( "This disc image is too small and lacks some data. If your dumping program saved " "the disc image as several parts, you need to merge them into one file."); AddProblem(Severity::High, std::move(text)); @@ -393,17 +401,18 @@ void VolumeVerifier::CheckDiscSize() if (ShouldBeDualLayer() && biggest_offset <= SL_DVD_R_SIZE) { - AddProblem( - Severity::Medium, - GetStringT("This game has been hacked to fit on a single-layer DVD. Some content such as " + AddProblem(Severity::Medium, + Common::GetStringT( + "This game has been hacked to fit on a single-layer DVD. Some content such as " "pre-rendered videos, extra languages or entire game modes will be broken. " "This problem generally only exists in illegal copies of games.")); } if (!m_volume.IsSizeAccurate()) { - AddProblem(Severity::Low, GetStringT("The format that the disc image is saved in does not " - "store the size of the disc image.")); + AddProblem(Severity::Low, + Common::GetStringT("The format that the disc image is saved in does not " + "store the size of the disc image.")); } else if (!m_is_tgc) { @@ -420,8 +429,9 @@ void VolumeVerifier::CheckDiscSize() { if (debug && valid_retail_wii) { - AddProblem(Severity::Low, - GetStringT("This debug disc image has the size of a retail disc image.")); + AddProblem( + Severity::Low, + Common::GetStringT("This debug disc image has the size of a retail disc image.")); } else { @@ -431,15 +441,16 @@ void VolumeVerifier::CheckDiscSize() if (small) { - AddProblem(Severity::Low, - GetStringT("This disc image has an unusual size. This will likely make the " - "emulated loading times longer. When using NetPlay or sending " - "input recordings to other people, you will likely experience " - "desyncs if anyone is using a good dump.")); + AddProblem( + Severity::Low, + Common::GetStringT("This disc image has an unusual size. This will likely make the " + "emulated loading times longer. When using NetPlay or sending " + "input recordings to other people, you will likely experience " + "desyncs if anyone is using a good dump.")); } else { - AddProblem(Severity::Low, GetStringT("This disc image has an unusual size.")); + AddProblem(Severity::Low, Common::GetStringT("This disc image has an unusual size.")); } } } @@ -528,16 +539,17 @@ void VolumeVerifier::CheckMisc() // Hacked version of the Wii Backup Disc (aka "pinkfish" disc). std::string proper_game_id = game_id_unencrypted; proper_game_id[0] = '4'; - AddProblem(Severity::Low, - StringFromFormat(GetStringT("The game ID is %s but should be %s.").c_str(), - game_id_unencrypted.c_str(), proper_game_id.c_str())); + AddProblem( + Severity::Low, + StringFromFormat(Common::GetStringT("The game ID is %s but should be %s.").c_str(), + game_id_unencrypted.c_str(), proper_game_id.c_str())); inconsistent_game_id = false; } } if (inconsistent_game_id) { - AddProblem(Severity::Low, GetStringT("The game ID is inconsistent.")); + AddProblem(Severity::Low, Common::GetStringT("The game ID is inconsistent.")); } } @@ -546,16 +558,16 @@ void VolumeVerifier::CheckMisc() if (game_id_encrypted.size() < 4) { - AddProblem(Severity::Low, GetStringT("The game ID is unusually short.")); + AddProblem(Severity::Low, Common::GetStringT("The game ID is unusually short.")); } else { const char country_code = game_id_encrypted[3]; if (CountryCodeToRegion(country_code, platform, region) != region) { - AddProblem( - Severity::Medium, - GetStringT("The region code does not match the game ID. If this is because the " + AddProblem(Severity::Medium, + Common::GetStringT( + "The region code does not match the game ID. If this is because the " "region code has been modified, the game might run at the wrong speed, " "graphical elements might be offset, or the game might not run at all.")); } @@ -576,18 +588,19 @@ void VolumeVerifier::CheckMisc() // This is intended to catch pirated Korean games that have had the IOS slot set to 36 // as a side effect of having to fakesign after changing the common key slot to 0. // (IOS36 was the last IOS to have the Trucha bug.) https://bugs.dolphin-emu.org/issues/10319 - AddProblem(Severity::High, - // i18n: You may want to leave the term "ERROR #002" untranslated, - // since the emulated software always displays it in English. - GetStringT("This Korean title is set to use an IOS that typically isn't used on " - "Korean consoles. This is likely to lead to ERROR #002.")); + AddProblem( + Severity::High, + // i18n: You may want to leave the term "ERROR #002" untranslated, + // since the emulated software always displays it in English. + Common::GetStringT("This Korean title is set to use an IOS that typically isn't used on " + "Korean consoles. This is likely to lead to ERROR #002.")); } if (ios_id >= 0x80) { // This is also intended to catch fakesigned pirated Korean games, // but this time with the IOS slot set to cIOS instead of IOS36. - AddProblem(Severity::High, GetStringT("This title is set to use an invalid IOS.")); + AddProblem(Severity::High, Common::GetStringT("This title is set to use an invalid IOS.")); } } @@ -603,7 +616,7 @@ void VolumeVerifier::CheckMisc() const Severity severity = m_volume.GetVolumeType() == Platform::WiiWAD ? Severity::Low : Severity::High; // i18n: This is "common" as in "shared", not the opposite of "uncommon" - AddProblem(severity, GetStringT("This title is set to use an invalid common key.")); + AddProblem(severity, Common::GetStringT("This title is set to use an invalid common key.")); } if (common_key == 1 && region != Region::NTSC_K) @@ -613,7 +626,7 @@ void VolumeVerifier::CheckMisc() // https://forums.dolphin-emu.org/Thread-wiiware-chronos-twins-dx AddProblem(Severity::High, // i18n: This is "common" as in "shared", not the opposite of "uncommon" - GetStringT("This non-Korean title is set to use the Korean common key.")); + Common::GetStringT("This non-Korean title is set to use the Korean common key.")); } } @@ -622,11 +635,12 @@ void VolumeVerifier::CheckMisc() constexpr u32 NKIT_MAGIC = 0x4E4B4954; // "NKIT" if (m_volume.ReadSwapped(0x200, PARTITION_NONE) == NKIT_MAGIC) { - AddProblem(Severity::Low, - GetStringT("This disc image is in the NKit format. It is not a good dump in its " - "current form, but it might become a good dump if converted back. " - "The CRC32 of this file might match the CRC32 of a good dump even " - "though the files are not identical.")); + AddProblem( + Severity::Low, + Common::GetStringT("This disc image is in the NKit format. It is not a good dump in its " + "current form, but it might become a good dump if converted back. " + "The CRC32 of this file might match the CRC32 of a good dump even " + "though the files are not identical.")); } } } @@ -725,8 +739,9 @@ void VolumeVerifier::Process() { if (!CheckContentIntegrity(content)) { - AddProblem(Severity::High, - StringFromFormat(GetStringT("Content %08x is corrupt.").c_str(), content.id)); + AddProblem( + Severity::High, + StringFromFormat(Common::GetStringT("Content %08x is corrupt.").c_str(), content.id)); } m_content_index++; @@ -822,8 +837,8 @@ void VolumeVerifier::Finish() { const std::string name = GetPartitionName(m_volume.GetPartitionType(partition)); std::string text = StringFromFormat( - GetStringT("Errors were found in %zu blocks in the %s partition.").c_str(), blocks, - name.c_str()); + Common::GetStringT("Errors were found in %zu blocks in the %s partition.").c_str(), + blocks, name.c_str()); AddProblem(Severity::Medium, std::move(text)); } } @@ -834,8 +849,8 @@ void VolumeVerifier::Finish() { const std::string name = GetPartitionName(m_volume.GetPartitionType(partition)); std::string text = StringFromFormat( - GetStringT("Errors were found in %zu unused blocks in the %s partition.").c_str(), blocks, - name.c_str()); + Common::GetStringT("Errors were found in %zu unused blocks in the %s partition.").c_str(), + blocks, name.c_str()); AddProblem(Severity::Low, std::move(text)); } } @@ -848,14 +863,15 @@ void VolumeVerifier::Finish() if (m_is_datel) { - m_result.summary_text = GetStringT("Dolphin is unable to verify unlicensed discs."); + m_result.summary_text = Common::GetStringT("Dolphin is unable to verify unlicensed discs."); return; } if (m_is_tgc) { - m_result.summary_text = GetStringT("Dolphin is unable to verify typical TGC files properly, " - "since they are not dumps of actual discs."); + m_result.summary_text = + Common::GetStringT("Dolphin is unable to verify typical TGC files properly, " + "since they are not dumps of actual discs."); return; } @@ -864,26 +880,28 @@ void VolumeVerifier::Finish() case Severity::None: if (IsWii(m_volume.GetVolumeType()) && !m_is_not_retail) { - m_result.summary_text = - GetStringT("No problems were found. This does not guarantee that this is a good dump, " - "but since Wii titles contain a lot of verification data, it does mean that " - "there most likely are no problems that will affect emulation."); + m_result.summary_text = Common::GetStringT( + "No problems were found. This does not guarantee that this is a good dump, " + "but since Wii titles contain a lot of verification data, it does mean that " + "there most likely are no problems that will affect emulation."); } else { - m_result.summary_text = GetStringT("No problems were found."); + m_result.summary_text = Common::GetStringT("No problems were found."); } break; case Severity::Low: - m_result.summary_text = GetStringT("Problems with low severity were found. They will most " - "likely not prevent the game from running."); + m_result.summary_text = + Common::GetStringT("Problems with low severity were found. They will most " + "likely not prevent the game from running."); break; case Severity::Medium: - m_result.summary_text = GetStringT("Problems with medium severity were found. The whole game " - "or certain parts of the game might not work correctly."); + m_result.summary_text = + Common::GetStringT("Problems with medium severity were found. The whole game " + "or certain parts of the game might not work correctly."); break; case Severity::High: - m_result.summary_text = GetStringT( + m_result.summary_text = Common::GetStringT( "Problems with high severity were found. The game will most likely not work at all."); break; } @@ -891,13 +909,14 @@ void VolumeVerifier::Finish() if (m_volume.GetVolumeType() == Platform::GameCubeDisc) { m_result.summary_text += - GetStringT("\n\nBecause GameCube disc images contain little verification data, " - "there may be problems that Dolphin is unable to detect."); + Common::GetStringT("\n\nBecause GameCube disc images contain little verification data, " + "there may be problems that Dolphin is unable to detect."); } else if (m_is_not_retail) { - m_result.summary_text += GetStringT("\n\nBecause this title is not for retail Wii consoles, " - "Dolphin cannot verify that it hasn't been tampered with."); + m_result.summary_text += + Common::GetStringT("\n\nBecause this title is not for retail Wii consoles, " + "Dolphin cannot verify that it hasn't been tampered with."); } } diff --git a/Source/Core/DolphinQt/Main.cpp b/Source/Core/DolphinQt/Main.cpp index 038fed9c89..ee30defcf7 100644 --- a/Source/Core/DolphinQt/Main.cpp +++ b/Source/Core/DolphinQt/Main.cpp @@ -35,7 +35,8 @@ #include "UICommon/CommandLineParse.h" #include "UICommon/UICommon.h" -static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no, MsgType style) +static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no, + Common::MsgType style) { std::optional r = RunOnObject(QApplication::instance(), [&] { ModalMessageBox message_box(QApplication::activeWindow()); @@ -43,19 +44,19 @@ static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no message_box.setText(QString::fromUtf8(text)); message_box.setStandardButtons(yes_no ? QMessageBox::Yes | QMessageBox::No : QMessageBox::Ok); - if (style == MsgType::Warning) + if (style == Common::MsgType::Warning) message_box.addButton(QMessageBox::Ignore)->setText(QObject::tr("Ignore for this session")); message_box.setIcon([&] { switch (style) { - case MsgType::Information: + case Common::MsgType::Information: return QMessageBox::Information; - case MsgType::Question: + case Common::MsgType::Question: return QMessageBox::Question; - case MsgType::Warning: + case Common::MsgType::Warning: return QMessageBox::Warning; - case MsgType::Critical: + case Common::MsgType::Critical: return QMessageBox::Critical; } // appease MSVC @@ -67,7 +68,7 @@ static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no return true; if (button == QMessageBox::Ignore) - SetEnableAlert(false); + Common::SetEnableAlert(false); return false; }); @@ -137,7 +138,7 @@ int main(int argc, char* argv[]) Settings::Instance().SetBatchModeEnabled(options.is_set("batch")); // Hook up alerts from core - RegisterMsgAlertHandler(QtMsgAlertHandler); + Common::RegisterMsgAlertHandler(QtMsgAlertHandler); // Hook up translations Translation::Initialize(); diff --git a/Source/Core/DolphinQt/Settings/InterfacePane.cpp b/Source/Core/DolphinQt/Settings/InterfacePane.cpp index a6a8b1e31c..b923bcab32 100644 --- a/Source/Core/DolphinQt/Settings/InterfacePane.cpp +++ b/Source/Core/DolphinQt/Settings/InterfacePane.cpp @@ -263,7 +263,7 @@ void InterfacePane::OnSaveConfig() settings.m_show_active_title = m_checkbox_show_active_title->isChecked(); settings.m_PauseOnFocusLost = m_checkbox_pause_on_focus_lost->isChecked(); - SetEnableAlert(settings.bUsePanicHandlers); + Common::SetEnableAlert(settings.bUsePanicHandlers); auto new_language = m_combobox_language->currentData().toString().toStdString(); if (new_language != SConfig::GetInstance().m_InterfaceLanguage) diff --git a/Source/Core/DolphinQt/Translation.cpp b/Source/Core/DolphinQt/Translation.cpp index 6b484139a6..7adb1377f5 100644 --- a/Source/Core/DolphinQt/Translation.cpp +++ b/Source/Core/DolphinQt/Translation.cpp @@ -292,7 +292,8 @@ static bool TryInstallTranslator(const QString& exact_language_code) void Translation::Initialize() { // Hook up Dolphin internal translation - RegisterStringTranslator([](const char* text) { return QObject::tr(text).toStdString(); }); + Common::RegisterStringTranslator( + [](const char* text) { return QObject::tr(text).toStdString(); }); // Hook up Qt translations auto& configured_language = SConfig::GetInstance().m_InterfaceLanguage; diff --git a/Source/Core/UICommon/UICommon.cpp b/Source/Core/UICommon/UICommon.cpp index 9526f2b39f..935d07b043 100644 --- a/Source/Core/UICommon/UICommon.cpp +++ b/Source/Core/UICommon/UICommon.cpp @@ -84,7 +84,7 @@ void Init() GCAdapter::Init(); VideoBackendBase::ActivateBackend(SConfig::GetInstance().m_strVideoBackend); - SetEnableAlert(SConfig::GetInstance().bUsePanicHandlers); + Common::SetEnableAlert(SConfig::GetInstance().bUsePanicHandlers); } void Shutdown() @@ -440,7 +440,7 @@ std::string FormatSize(u64 bytes) const double unit_size = std::pow(2, unit * 10); std::stringstream ss; ss << std::fixed << std::setprecision(2); - ss << bytes / unit_size << ' ' << GetStringT(unit_symbols[unit]); + ss << bytes / unit_size << ' ' << Common::GetStringT(unit_symbols[unit]); return ss.str(); } diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp index 6da702d057..4000b30b70 100644 --- a/Source/Core/VideoCommon/ShaderCache.cpp +++ b/Source/Core/VideoCommon/ShaderCache.cpp @@ -157,7 +157,7 @@ void ShaderCache::WaitForAsyncCompiler() ImGui::SetNextWindowSize(ImVec2(400.0f * scale, 50.0f * scale), ImGuiCond_Always); ImGui::SetNextWindowPosCenter(ImGuiCond_Always); - if (ImGui::Begin(GetStringT("Compiling Shaders").c_str(), nullptr, + if (ImGui::Begin(Common::GetStringT("Compiling Shaders").c_str(), nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav |