LanguageList AlphabetFactory::supportedLanguages() { LanguageList ret; for (AlphabetMap::iterator it = alpha_map_.begin(), end = alpha_map_.end(); it != end; ++it) ret.push_back(it->first); return ret; }
bool CLanguage::LoadCurrentStrings(void) { //clear all the current strings loaded m_CurrentStrings.clear(); if (g_Settings->LoadBool(Debugger_DebugLanguage)) { m_LanguageLoaded = true; return true; } LanguageList LangList = GetLangList(); stdstr Filename; //Find the file name of the current language for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++) { if (g_Lang->IsCurrentLang(*Language)) { Filename = Language->Filename; break; } } if (Filename.length() == 0) { return false; } //Process the file FILE *file = fopen(Filename.c_str(), "rb"); if (file == NULL) { return false; } //Search for utf8 file marker uint8_t utf_bom[3]; if (fread(&utf_bom, sizeof(utf_bom), 1, file) != 1 || utf_bom[0] != 0xEF || utf_bom[1] != 0xBB || utf_bom[2] != 0xBF) { fclose(file); return false; } //String; while (!feof(file)) { m_CurrentStrings.insert(GetNextLangString(file)); } fclose(file); m_LanguageLoaded = true; return true; }
static LanguageList getTrLanguages(const QString& translationPath) { LanguageList trLanguages; QStringList qms = findQmFiles(translationPath); for (int i = 0; i < qms.size(); ++i) { QLocale locale(qms[i]); if (locale.language() == QLocale::C) continue; trLanguages.push_back(Language(locale.language())); } qSort(trLanguages); return trLanguages; };
void CMainMenu::FillOutMenu ( HMENU hMenu ) { CGuard Guard(m_CS); MENU_ITEM Item; //Get all flags bool inBasicMode = g_Settings->LoadBool(UserInterface_BasicMode); bool CPURunning = g_Settings->LoadBool(GameRunning_CPU_Running); bool RomLoading = g_Settings->LoadBool(GameRunning_LoadingInProgress); bool RomLoaded = g_Settings->LoadString(Game_GameName).length() > 0; bool RomList = g_Settings->LoadBool(RomBrowser_Enabled) && !CPURunning; CMenuShortCutKey::ACCESS_MODE AccessLevel = CMenuShortCutKey::GAME_NOT_RUNNING; if (g_Settings->LoadBool(GameRunning_CPU_Running)) { AccessLevel = g_Settings->LoadBool(UserInterface_InFullScreen) ? CMenuShortCutKey::GAME_RUNNING_FULLSCREEN : CMenuShortCutKey::GAME_RUNNING_WINDOW; } //Get the system information to make the menu LanguageList LangList = g_Lang->GetLangList(); MenuItemList LangMenu; int Offset = 0; for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++) { Item.Reset(ID_LANG_START + Offset++,EMPTY_STRING,EMPTY_STDSTR,NULL,Language->LanguageName.c_str()); if (g_Lang->IsCurrentLang(*Language)) { Item.SetItemTicked(true); } LangMenu.push_back(Item); } //Go through the settings to create a list of Recent Roms MenuItemList RecentRomMenu; DWORD count, RomsToRemember = g_Settings->LoadDword(File_RecentGameFileCount); for (count = 0; count < RomsToRemember; count++) { stdstr LastRom = g_Settings->LoadStringIndex(File_RecentGameFileIndex,count); if (LastRom.empty()) { break; } stdstr_f MenuString("&%d %s",(count + 1) % 10,LastRom.c_str()); RecentRomMenu.push_back(MENU_ITEM(ID_RECENT_ROM_START + count,EMPTY_STRING,EMPTY_STDSTR,NULL,MenuString.ToUTF16().c_str())); } /* Recent Dir ****************/ MenuItemList RecentDirMenu; DWORD DirsToRemember = g_Settings->LoadDword(Directory_RecentGameDirCount); for (count = 0; count < DirsToRemember; count++) { stdstr LastDir = g_Settings->LoadStringIndex(Directory_RecentGameDirIndex,count); if (LastDir.empty()) { break; } stdstr_f MenuString("&%d %s",(count + 1) % 10,LastDir.c_str()); RecentDirMenu.push_back(MENU_ITEM(ID_RECENT_DIR_START + count,EMPTY_STRING,EMPTY_STDSTR,NULL,MenuString.ToUTF16().c_str())); } /* File Menu ****************/ MenuItemList FileMenu; Item.Reset(ID_FILE_OPEN_ROM, MENU_OPEN, m_ShortCuts.ShortCutString(ID_FILE_OPEN_ROM,AccessLevel)); FileMenu.push_back(Item); if (!inBasicMode) { Item.Reset(ID_FILE_ROM_INFO, MENU_ROM_INFO,m_ShortCuts.ShortCutString(ID_FILE_ROM_INFO,AccessLevel)); Item.SetItemEnabled(RomLoaded); FileMenu.push_back(Item); FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_FILE_STARTEMULATION,MENU_START, m_ShortCuts.ShortCutString(ID_FILE_STARTEMULATION,AccessLevel) ); Item.SetItemEnabled(RomLoaded && !CPURunning); FileMenu.push_back(Item); } Item.Reset(ID_FILE_ENDEMULATION, MENU_END, m_ShortCuts.ShortCutString(ID_FILE_ENDEMULATION,AccessLevel) ); Item.SetItemEnabled(CPURunning); FileMenu.push_back(Item); FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(SUB_MENU, MENU_LANGUAGE, EMPTY_STDSTR, &LangMenu ); FileMenu.push_back(Item); if (RomList) { FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_FILE_ROMDIRECTORY, MENU_CHOOSE_ROM,m_ShortCuts.ShortCutString(ID_FILE_ROMDIRECTORY,AccessLevel) ); FileMenu.push_back(Item); Item.Reset(ID_FILE_REFRESHROMLIST,MENU_REFRESH,m_ShortCuts.ShortCutString(ID_FILE_REFRESHROMLIST,AccessLevel) ); FileMenu.push_back(Item); } if (!inBasicMode && RomList) { FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(SUB_MENU, MENU_RECENT_ROM,EMPTY_STDSTR, &RecentRomMenu); if (RecentRomMenu.size() == 0) { RecentRomMenu.push_back(MENU_ITEM(SPLITER)); Item.SetItemEnabled(false); } FileMenu.push_back(Item); Item.Reset(SUB_MENU, MENU_RECENT_DIR,EMPTY_STDSTR, &RecentDirMenu); if (RecentDirMenu.size() == 0) { RecentDirMenu.push_back(MENU_ITEM(SPLITER)); Item.SetItemEnabled(false); } FileMenu.push_back(Item); } else { if (RecentRomMenu.size() != 0) { FileMenu.push_back(MENU_ITEM(SPLITER)); for (MenuItemList::iterator MenuItem = RecentRomMenu.begin(); MenuItem != RecentRomMenu.end(); MenuItem++) { FileMenu.push_back(*MenuItem); } } } FileMenu.push_back(MENU_ITEM(SPLITER)); FileMenu.push_back(MENU_ITEM(ID_FILE_EXIT, MENU_EXIT,m_ShortCuts.ShortCutString(ID_FILE_EXIT,AccessLevel))); /* Current Save ****************/ MenuItemList CurrentSaveMenu; DWORD _CurrentSaveState = g_Settings->LoadDword(Game_CurrentSaveState); Item.Reset(ID_CURRENT_SAVE_DEFAULT, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_DEFAULT,AccessLevel),NULL,GetSaveSlotString(0)); if (_CurrentSaveState == 0) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); CurrentSaveMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_CURRENT_SAVE_1, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_1,AccessLevel),NULL,GetSaveSlotString(1)); if (_CurrentSaveState == 1) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_2, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_2,AccessLevel),NULL,GetSaveSlotString(2)); if (_CurrentSaveState == 2) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_3, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_3,AccessLevel),NULL,GetSaveSlotString(3)); if (_CurrentSaveState == 3) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_4, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_4,AccessLevel),NULL,GetSaveSlotString(4)); if (_CurrentSaveState == 4) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_5, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_5,AccessLevel),NULL,GetSaveSlotString(5)); if (_CurrentSaveState == 5) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_6, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_6,AccessLevel),NULL,GetSaveSlotString(6)); if (_CurrentSaveState == 6) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_7, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_7,AccessLevel),NULL,GetSaveSlotString(7)); if (_CurrentSaveState == 7) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_8, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_8,AccessLevel),NULL,GetSaveSlotString(8)); if (_CurrentSaveState == 8) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_9, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_9,AccessLevel),NULL,GetSaveSlotString(9)); if (_CurrentSaveState == 9) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_10, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_10,AccessLevel),NULL,GetSaveSlotString(10)); if (_CurrentSaveState == 10) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); /* System Menu ****************/ MenuItemList SystemMenu; MenuItemList ResetMenu; if (inBasicMode) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_RESET_SOFT, MENU_RESET, m_ShortCuts.ShortCutString(ID_SYSTEM_RESET_SOFT,AccessLevel) )); } else { ResetMenu.push_back(MENU_ITEM(ID_SYSTEM_RESET_SOFT, MENU_RESET_SOFT, m_ShortCuts.ShortCutString(ID_SYSTEM_RESET_SOFT,AccessLevel) )); ResetMenu.push_back(MENU_ITEM(ID_SYSTEM_RESET_HARD, MENU_RESET_HARD, m_ShortCuts.ShortCutString(ID_SYSTEM_RESET_HARD,AccessLevel))); SystemMenu.push_back(MENU_ITEM(SUB_MENU,MENU_RESET,EMPTY_STDSTR,&ResetMenu)); } if (g_Settings->LoadBool(GameRunning_CPU_Paused)) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_PAUSE, MENU_RESUME, m_ShortCuts.ShortCutString(ID_SYSTEM_PAUSE,AccessLevel))); } else { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_PAUSE, MENU_PAUSE, m_ShortCuts.ShortCutString(ID_SYSTEM_PAUSE,AccessLevel))); } SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_BITMAP, MENU_BITMAP, m_ShortCuts.ShortCutString(ID_SYSTEM_BITMAP,AccessLevel))); SystemMenu.push_back(MENU_ITEM(SPLITER)); if (!inBasicMode) { Item.Reset(ID_SYSTEM_LIMITFPS, MENU_LIMIT_FPS,m_ShortCuts.ShortCutString(ID_SYSTEM_LIMITFPS,AccessLevel) ); if (g_Settings->LoadBool(GameRunning_LimitFPS)) { Item.SetItemTicked(true); } SystemMenu.push_back(Item); SystemMenu.push_back(MENU_ITEM(SPLITER)); } SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_SAVE, MENU_SAVE, m_ShortCuts.ShortCutString(ID_SYSTEM_SAVE,AccessLevel))); if (!inBasicMode) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_SAVEAS, MENU_SAVE_AS, m_ShortCuts.ShortCutString(ID_SYSTEM_SAVEAS,AccessLevel))); } SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_RESTORE, MENU_RESTORE, m_ShortCuts.ShortCutString(ID_SYSTEM_RESTORE,AccessLevel))); if (!inBasicMode) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_LOAD, MENU_LOAD, m_ShortCuts.ShortCutString(ID_SYSTEM_LOAD,AccessLevel))); } SystemMenu.push_back(MENU_ITEM(SPLITER)); SystemMenu.push_back(MENU_ITEM(SUB_MENU, MENU_CURRENT_SAVE, EMPTY_STDSTR, &CurrentSaveMenu )); SystemMenu.push_back(MENU_ITEM(SPLITER)); SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_CHEAT, MENU_CHEAT, m_ShortCuts.ShortCutString(ID_SYSTEM_CHEAT,AccessLevel))); SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_GSBUTTON, MENU_GS_BUTTON, m_ShortCuts.ShortCutString(ID_SYSTEM_GSBUTTON,AccessLevel) )); /* Option Menu ****************/ MenuItemList OptionMenu; Item.Reset(ID_OPTIONS_FULLSCREEN, MENU_FULL_SCREEN,m_ShortCuts.ShortCutString(ID_OPTIONS_FULLSCREEN,AccessLevel) ); Item.SetItemEnabled(CPURunning); if (g_Plugins->Gfx() && g_Plugins->Gfx()->ChangeWindow == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); if (!inBasicMode) { Item.Reset(ID_OPTIONS_ALWAYSONTOP, MENU_ON_TOP,m_ShortCuts.ShortCutString(ID_OPTIONS_ALWAYSONTOP,AccessLevel) ); if (g_Settings->LoadDword(UserInterface_AlwaysOnTop)) { Item.SetItemTicked(true); } Item.SetItemEnabled(CPURunning); OptionMenu.push_back(Item); } OptionMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_OPTIONS_CONFIG_GFX, MENU_CONFG_GFX,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_GFX,AccessLevel)); if (g_Plugins->Gfx() == NULL || g_Plugins->Gfx()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); Item.Reset(ID_OPTIONS_CONFIG_AUDIO, MENU_CONFG_AUDIO,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_AUDIO,AccessLevel)); if (g_Plugins->Audio() == NULL || g_Plugins->Audio()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); if (!inBasicMode) { Item.Reset(ID_OPTIONS_CONFIG_RSP, MENU_CONFG_RSP,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_RSP,AccessLevel)); if (g_Plugins->RSP() == NULL || g_Plugins->RSP()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); } Item.Reset(ID_OPTIONS_CONFIG_CONT, MENU_CONFG_CTRL,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_CONT,AccessLevel)); if (g_Plugins->Control() == NULL || g_Plugins->Control()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); OptionMenu.push_back(MENU_ITEM(SPLITER)); if (!inBasicMode) { Item.Reset(ID_OPTIONS_CPU_USAGE, MENU_SHOW_CPU,m_ShortCuts.ShortCutString(ID_OPTIONS_CPU_USAGE,AccessLevel)); if (g_Settings->LoadDword(UserInterface_ShowCPUPer)) { Item.SetItemTicked(true); } OptionMenu.push_back(Item); } OptionMenu.push_back(MENU_ITEM(ID_OPTIONS_SETTINGS, MENU_SETTINGS,m_ShortCuts.ShortCutString(ID_OPTIONS_SETTINGS,AccessLevel) )); /* Profile Menu ****************/ MenuItemList DebugProfileMenu; if (bHaveDebugger()) { Item.Reset(ID_PROFILE_PROFILE,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Profile Code"); if (g_Settings->LoadBool(Debugger_ProfileCode)) { Item.SetItemTicked(true); } DebugProfileMenu.push_back(Item); Item.Reset(ID_PROFILE_RESETCOUNTER,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Reset Counters"); if (!CPURunning) { Item.SetItemEnabled(false); } DebugProfileMenu.push_back(Item); Item.Reset(ID_PROFILE_GENERATELOG,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Generate Log File"); if (!CPURunning) { Item.SetItemEnabled(false); } DebugProfileMenu.push_back(Item); } /* Debugger Menu ****************/ MenuItemList DebugMenu; MenuItemList DebugLoggingMenu; MenuItemList DebugAppLoggingMenu; MenuItemList DebugR4300Menu; MenuItemList DebugMemoryMenu; MenuItemList DebugInterrupt; MenuItemList DebugNotificationMenu; if (bHaveDebugger()) { /* Debug - Interrupt *******************/ Item.Reset(ID_DEBUGGER_INTERRUPT_SP,EMPTY_STRING,EMPTY_STDSTR,NULL,L"SP Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_SI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"SI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_AI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"AI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_VI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"VI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_PI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"PI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_DP,EMPTY_STRING,EMPTY_STDSTR,NULL,L"DP Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); /* Debug - R4300i *******************/ Item.Reset(ID_DEBUGGER_LOGOPTIONS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"R4300i &Commands..."); Item.SetItemEnabled(false); DebugR4300Menu.push_back(Item); Item.Reset(ID_DEBUGGER_R4300REGISTERS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"R4300i &Registers..."); Item.SetItemEnabled(true); DebugR4300Menu.push_back(Item); Item.Reset(ID_DEBUG_DISABLE_GAMEFIX,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Disable Game Fixes"); if (g_Settings->LoadBool(Debugger_DisableGameFixes)) { Item.SetItemTicked(true); } DebugR4300Menu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugInterrupt,L"&Generate Interrupt"); DebugR4300Menu.push_back(Item); /* Debug - Memory ****************/ Item.Reset(ID_DEBUGGER_MEMORY,EMPTY_STRING,EMPTY_STDSTR,NULL,L"View..."); DebugMemoryMenu.push_back(Item); Item.Reset(ID_DEBUGGER_SEARCHMEMORY,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Search..."); DebugMemoryMenu.push_back(Item); Item.Reset(ID_DEBUGGER_DUMPMEMORY,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Dump..."); DebugMemoryMenu.push_back(Item); Item.Reset(ID_DEBUGGER_TLBENTRIES,EMPTY_STRING,EMPTY_STDSTR,NULL,L"TLB Entries..."); DebugMemoryMenu.push_back(Item); /* Debug - App logging *******************/ { DWORD LogLevel = g_Settings->LoadDword(Debugger_AppLogLevel); Item.Reset(ID_DEBUGGER_APPLOG_ERRORS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Error Messages"); if ((LogLevel & TraceError) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_SETTINGS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Settings"); if ((LogLevel & TraceSettings) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_RECOMPILER,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Recompiler"); if ((LogLevel & TraceRecompiler) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_RSP,EMPTY_STRING,EMPTY_STDSTR,NULL,L"RSP"); if ((LogLevel & TraceRSP) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_TLB,EMPTY_STRING,EMPTY_STDSTR,NULL,L"TLB"); if ((LogLevel & TraceTLB) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_GFX_PLUGIN,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Gfx Plugin"); if ((LogLevel & TraceGfxPlugin) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_AUDIO_EMU,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Audio Emulation"); if ((LogLevel & TraceAudio) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_DEBUG,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Debug Messages"); if ((LogLevel & TraceDebug) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); DebugAppLoggingMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_DEBUGGER_APPLOG_FLUSH,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Auto flush file"); if (g_Settings->LoadBool(Debugger_AppLogFlush)) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); } /* Debug - Logging *******************/ Item.Reset(ID_DEBUGGER_LOGOPTIONS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Log Options..."); DebugLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_GENERATELOG,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Generate Log"); if (g_Settings->LoadBool(Debugger_GenerateDebugLog)) { Item.SetItemTicked(true); } DebugLoggingMenu.push_back(Item); /* Debugger Main Menu ****************/ Item.Reset(ID_DEBUGGER_BREAKPOINTS, EMPTY_STRING,EMPTY_STDSTR, NULL,L"Breakpoint..."); Item.SetItemEnabled(CPURunning); DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); /* Debug - RSP *******************/ if (g_Plugins->RSP() != NULL && IsMenu((HMENU)g_Plugins->RSP()->GetDebugMenu())) { Item.Reset(ID_PLUGIN_MENU,EMPTY_STRING,EMPTY_STDSTR,g_Plugins->RSP()->GetDebugMenu(),L"&RSP"); DebugMenu.push_back(Item); } /* Debug - RDP *******************/ if (g_Plugins->Gfx() != NULL && IsMenu((HMENU)g_Plugins->Gfx()->GetDebugMenu())) { Item.Reset(ID_PLUGIN_MENU,EMPTY_STRING,EMPTY_STDSTR,g_Plugins->Gfx()->GetDebugMenu(),L"&RDP"); DebugMenu.push_back(Item); } /* Notification Menu *******************/ Item.Reset(ID_DEBUG_SHOW_UNHANDLED_MEM,EMPTY_STRING,EMPTY_STDSTR,NULL,L"On Unhandled Memory Actions"); if (g_Settings->LoadBool(Debugger_ShowUnhandledMemory)) { Item.SetItemTicked(true); } DebugNotificationMenu.push_back(Item); Item.Reset(ID_DEBUG_SHOW_PIF_ERRORS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"On PIF Errors"); if (g_Settings->LoadBool(Debugger_ShowPifErrors)) { Item.SetItemTicked(true); } DebugNotificationMenu.push_back(Item); Item.Reset(ID_DEBUG_SHOW_DIV_BY_ZERO,EMPTY_STRING,EMPTY_STDSTR,NULL,L"On Div By Zero"); if (g_Settings->LoadBool(Debugger_ShowDivByZero)) { Item.SetItemTicked(true); } DebugNotificationMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugR4300Menu,L"&R4300i"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugMemoryMenu,L"Memory"); Item.SetItemEnabled(CPURunning); DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugProfileMenu,L"Profile"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugAppLoggingMenu,L"App Logging"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugLoggingMenu,L"Logging"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugNotificationMenu,L"Notification"); DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_DEBUG_SHOW_TLB_MISSES,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Show TLB Misses"); if (g_Settings->LoadBool(Debugger_ShowTLBMisses)) { Item.SetItemTicked(true); } Item.Reset(ID_DEBUG_SHOW_DLIST_COUNT,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Display Alist/Dlist Count"); if (g_Settings->LoadBool(Debugger_ShowDListAListCount)) { Item.SetItemTicked(true); } DebugMenu.push_back(Item); Item.Reset(ID_DEBUG_SHOW_RECOMP_MEM_SIZE,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Display Recompiler Code Buffer Size"); if (g_Settings->LoadBool(Debugger_ShowRecompMemSize)) { Item.SetItemTicked(true); } DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_DEBUG_GENERATE_LOG_FILES,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Generate Log Files"); if (g_Settings->LoadBool(Debugger_GenerateLogFiles)) { Item.SetItemTicked(true); } DebugMenu.push_back(Item); } /* Help Menu ****************/ MenuItemList HelpMenu; HelpMenu.push_back(MENU_ITEM(ID_HELP_SUPPORTFORUM, MENU_FORUM)); HelpMenu.push_back(MENU_ITEM(ID_HELP_HOMEPAGE, MENU_HOMEPAGE)); HelpMenu.push_back(MENU_ITEM(SPLITER)); if (!inBasicMode) { HelpMenu.push_back(MENU_ITEM(ID_HELP_ABOUTSETTINGFILES, MENU_ABOUT_INI)); } HelpMenu.push_back(MENU_ITEM(ID_HELP_ABOUT, MENU_ABOUT_PJ64)); /* Main Title bar Menu ***********************/ MenuItemList MainTitleMenu; Item.Reset(SUB_MENU, MENU_FILE, EMPTY_STDSTR, &FileMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); if (CPURunning) { Item.Reset(SUB_MENU, MENU_SYSTEM, EMPTY_STDSTR, &SystemMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); } Item.Reset(SUB_MENU, MENU_OPTIONS, EMPTY_STDSTR, &OptionMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); if (!inBasicMode) { if (bHaveDebugger()) { Item.Reset(SUB_MENU, MENU_DEBUGGER, EMPTY_STDSTR, &DebugMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); } } Item.Reset(SUB_MENU, MENU_HELP, EMPTY_STDSTR, &HelpMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); AddMenu(hMenu,MainTitleMenu); }
LRESULT CALLBACK CLanguageSelector::LangSelectProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HBITMAP hbmpBackgroundTop = NULL; static HFONT hTextFont = NULL; static CLanguageSelector * lngClass; switch (uMsg) { case WM_INITDIALOG: { lngClass = (CLanguageSelector *)lParam; LanguageList LangList = g_Lang->GetLangList(); if (LangList.size() == 0) { EndDialog(hDlg, 0); } for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++) { int index = SendMessageW(GetDlgItem(hDlg, IDC_LANG_SEL), CB_ADDSTRING, 0, (WPARAM)stdstr(Language->LanguageName).ToUTF16().c_str()); if (_stricmp(Language->LanguageName.c_str(), "English") == 0) { SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_SETCURSEL, index, 0); } } int Index = SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_GETCURSEL, 0, 0); if (Index < 0) { SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_SETCURSEL, 0, 0); } //Get Windows DPI Scale float DPIScale = CClientDC(hDlg).GetDeviceCaps(LOGPIXELSX) / 96.0f; // Use the size of the image hbmpBackgroundTop = LoadBitmap(GetModuleHandle(NULL), DPIScale <= 1.0f ? MAKEINTRESOURCE(IDB_ABOUT_LOGO) : MAKEINTRESOURCE(IDB_ABOUT_LOGO_HDPI)); BITMAP bmTL; GetObject(hbmpBackgroundTop, sizeof(BITMAP), &bmTL); hTextFont = ::CreateFont(18, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial"); SendDlgItemMessage(hDlg, IDC_SELECT_LANG, WM_SETFONT, (WPARAM)hTextFont, TRUE); } break; case WM_CTLCOLORSTATIC: { HDC hdcStatic = (HDC)wParam; SetTextColor(hdcStatic, RGB(0, 0, 0)); SetBkMode(hdcStatic, TRANSPARENT); return (LONG)(LRESULT)((HBRUSH)GetStockObject(NULL_BRUSH)); } break; case WM_ERASEBKGND: { HPEN outline; HBRUSH fill; RECT rect; outline = CreatePen(PS_SOLID, 1, 0x00FFFFFF); fill = CreateSolidBrush(0x00FFFFFF); SelectObject((HDC)wParam, outline); SelectObject((HDC)wParam, fill); GetClientRect(hDlg, &rect); Rectangle((HDC)wParam, rect.left, rect.top, rect.right, rect.bottom); } break; case WM_PAINT: { PAINTSTRUCT ps; if (BeginPaint(hDlg, &ps)) { RECT rcClient; GetClientRect(hDlg, &rcClient); BITMAP bmTL_top; GetObject(hbmpBackgroundTop, sizeof(BITMAP), &bmTL_top); HDC memdc = CreateCompatibleDC(ps.hdc); HGDIOBJ save = SelectObject(memdc, hbmpBackgroundTop); SetStretchBltMode(ps.hdc, HALFTONE); StretchBlt(ps.hdc, 0, 0, rcClient.right, (int)(bmTL_top.bmHeight * rcClient.right / bmTL_top.bmWidth), memdc, 0, 0, bmTL_top.bmWidth, bmTL_top.bmHeight, SRCCOPY); SelectObject(memdc, save); DeleteDC(memdc); EndPaint(hDlg, &ps); } } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if (hbmpBackgroundTop) { DeleteObject(hbmpBackgroundTop); } if (hTextFont) { ::DeleteObject(hTextFont); } { int Index = SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_GETCURSEL, 0, 0); if (Index >= 0) { wchar_t String[255]; SendMessageW(GetDlgItem(hDlg, IDC_LANG_SEL), CB_GETLBTEXT, Index, (LPARAM)String); g_Lang->SetLanguage(stdstr().FromUTF16(String).c_str()); } } EndDialog(hDlg, 0); break; } default: return FALSE; } return TRUE; }
// ---------------------------------------------------------------------------- Translations::Translations() //: m_dictionary_manager("UTF-16") { m_dictionary_manager.add_directory( file_manager->getAsset(FileManager::TRANSLATION,"")); if (g_language_list.size() == 0) { std::set<Language> languages = m_dictionary_manager.get_languages(); // English is always there but won't be found on file system g_language_list.push_back("en"); std::set<Language>::iterator it; for (it = languages.begin(); it != languages.end(); it++) { g_language_list.push_back((*it).str()); } } // LC_ALL does not work, sscanf will then not always be able // to scan for example: s=-1.1,-2.3,-3.3 correctly, which is // used in driveline files. #if defined(WIN32) && !defined(__CYGWIN__) // Windows does not have LC_MESSAGES setlocale(LC_CTYPE, ""); #else setlocale(LC_MESSAGES, ""); #endif /* bindtextdomain (PACKAGE, file_manager->getTranslationDir().c_str()); if (sizeof(wchar_t) == 4) { if (IS_LITTLE_ENDIAN) bind_textdomain_codeset(PACKAGE, "UTF-32LE"); else bind_textdomain_codeset(PACKAGE, "UTF-32BE"); } else if (sizeof(wchar_t) == 2) { bind_textdomain_codeset(PACKAGE, "UTF-16LE"); } else { fprintf(stderr, "Your wchar_t is neither 2 byte-long nor 4. What now??\n"); exit(1); } textdomain (PACKAGE); */ /* const std::set<Language>& languages = m_dictionary_manager.get_languages(); Log::info("Translatings", "Number of languages: %d", languages.size()); for (std::set<Language>::const_iterator i = languages.begin(); i != languages.end(); ++i) { const Language& language = *i; Log::info("Translatings", "Env: %s", language.str()); Log::info("Translatings", "Name: %s", language.get_name()); Log::info("Translatings", "Language: %s", language.get_language()); Log::info("Translatings", "Country: %s", language.get_country()); Log::info("Translatings", "Modifier: %s", language.get_modifier()); } */ const char *p_language = getenv("LANGUAGE"); std::string language; if(p_language) { language=p_language; } else { const char *p_lang = getenv("LANG"); if(p_lang) language = p_lang; else { #ifdef WIN32 // Thanks to the frogatto developer for this code snippet: char c[1024]; GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, c, 1024); Log::verbose("translation", "GetLocaleInfo langname returns '%s'.", c); if(c[0]) { language = c; GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, c, 1024); Log::verbose("translation", "GetLocaleInfo tryname returns '%s'.", c); if(c[0]) language += std::string("_")+c; } // if c[0] #endif } // neither LANGUAGE nor LANG defined } if (language != "") { Log::verbose("translation", "Env var LANGUAGE = '%s'.", language.c_str()); if (language.find(":") != std::string::npos) { std::vector<std::string> langs = StringUtils::split(language, ':'); Language l; for (unsigned int curr=0; curr<langs.size(); curr++) { l = Language::from_env(langs[curr]); if (l) { Log::verbose("translation", "Language '%s'.", l.get_name().c_str()); m_dictionary = m_dictionary_manager.get_dictionary(l); break; } } m_current_language_name = l.get_name(); m_current_language_name_code = l.get_language(); if (!l) { m_dictionary = m_dictionary_manager.get_dictionary(); } } else { const Language& tgtLang = Language::from_env(language); if (!tgtLang) { Log::warn("Translation", "Unsupported langage '%s'", language.c_str()); UserConfigParams::m_language = "system"; m_current_language_name = "Default language"; m_current_language_name_code = "en"; m_dictionary = m_dictionary_manager.get_dictionary(); } else { m_current_language_name = tgtLang.get_name(); m_current_language_name_code = tgtLang.get_language(); Log::verbose("translation", "Language '%s'.", m_current_language_name.c_str()); m_dictionary = m_dictionary_manager.get_dictionary(tgtLang); } } } else { m_current_language_name = "Default language"; m_current_language_name_code = "en"; m_dictionary = m_dictionary_manager.get_dictionary(); } // This is a silly but working hack I added to determine whether the // current language is RTL or not, since gettext doesn't seem to provide // this information // This one is just for the xgettext parser to pick up #define ignore(X) //I18N: Do NOT literally translate this string!! Please enter Y as the // translation if your language is a RTL (right-to-left) language, // N (or nothing) otherwise ignore(_(" Is this a RTL language?")); const std::string isRtl = m_dictionary.translate(" Is this a RTL language?"); m_rtl = false; for (unsigned int n=0; n < isRtl.size(); n++) { if (isRtl[n] == 'Y') { m_rtl = true; break; } } #ifdef TEST_BIDI m_rtl = true; #endif } // Translations
static void fill_lang_list_cb( const char* const l, const char* const, const char* const, const char* const, void* ) { s_lang_list.insert( l ); }