diff --git a/desmume/src/windows/main.c b/desmume/src/windows/main.c index aaaebcd9e..af5eb43f5 100644 --- a/desmume/src/windows/main.c +++ b/desmume/src/windows/main.c @@ -433,6 +433,53 @@ BOOL LoadROM(char * filename) return FALSE; } +void SetLanguage(int langid) +{ + switch(langid) + { + case 1: + // French + SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), + SORT_DEFAULT)); + break; + case 0: + // English + SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), + SORT_DEFAULT)); + break; + default: break; + break; + } +} + +void SaveLanguage(int langid) +{ + char text[80]; + + sprintf(text, "%d", langid); + WritePrivateProfileString("General", "Language", text, IniName); +} + +void CheckLanguage(UINT id) +{ + int i; + for (i = IDC_LANGENGLISH; i < IDC_LANGFRENCH+1; i++) + CheckMenuItem(menu, i, MF_BYCOMMAND | MF_UNCHECKED); + + CheckMenuItem(menu, id, MF_BYCOMMAND | MF_CHECKED); +} + +void ChangeLanguage(int id) +{ + HMENU newmenu; + + SetLanguage(id); + newmenu = LoadMenu(hAppInst, "MENU_PRINCIPAL"); + SetMenu(hwnd, newmenu); + DestroyMenu(menu); + menu = newmenu; +} + int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, @@ -446,6 +493,11 @@ int WINAPI WinMain (HINSTANCE hThisInstance, hAppInst=hThisInstance; InitializeCriticalSection(§ion); + + GetINIPath(IniName, MAX_PATH); + GetPrivateProfileString("General", "Language", "-1", text, 80, IniName); + SetLanguage(atoi(text)); + sprintf(text, "DeSmuME v%s", VERSION); hAccel = LoadAccelerators(hAppInst, MAKEINTRESOURCE(IDR_MAIN_ACCEL)); @@ -476,10 +528,11 @@ int WINAPI WinMain (HINSTANCE hThisInstance, LogStart(); #endif - GetINIPath(IniName, MAX_PATH); - NDS_Init(); + GetPrivateProfileString("General", "Language", "0", text, 80, IniName); + CheckLanguage(IDC_LANGENGLISH+atoi(text)); + GetPrivateProfileString("Video", "FrameSkip", "AUTO", text, 80, IniName); if (strcmp(text, "AUTO") == 0) @@ -1341,6 +1394,16 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM CheckMenuItem(menu, LOWORD(wParam), MF_BYCOMMAND | MF_CHECKED); } return 0; + case IDC_LANGENGLISH: + SaveLanguage(0); + ChangeLanguage(0); + CheckLanguage(LOWORD(wParam)); + return 0; + case IDC_LANGFRENCH: + SaveLanguage(1); + ChangeLanguage(1); + CheckLanguage(LOWORD(wParam)); + return 0; case IDM_WEBSITE: ShellExecute(NULL, "open", "http://desmume.sourceforge.net", NULL, NULL, SW_SHOWNORMAL); return 0; diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index d149c1fa9..8ffb9597a 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -133,6 +133,9 @@ void refreshAll(); #define IDM_IMPORTBACKUPMEMORY 201 +#define IDC_LANGENGLISH 210 +#define IDC_LANGFRENCH 211 + #define IDD_MEM_VIEWER 301 #define IDC_8_BIT 302 #define IDC_16_BIT 303 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 3d586d4c3..571c84810 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -37,8 +37,39 @@ MENU_PRINCIPAL MENU MENUITEM "&Ouvrir", IDM_OPEN MENUITEM "&Info rom", IDM_GAME_INFO MENUITEM SEPARATOR - MENUITEM "&Printscreen", IDM_PRINTSCREEN - MENUITEM "&Quick Printscreen", IDM_QUICK_PRINTSCREEN + MENUITEM "Save State As", IDM_STATE_SAVE + MENUITEM "Load State As", IDM_STATE_LOAD + POPUP "Save State" + { + MENUITEM "1", IDM_STATE_SAVE_F1 + MENUITEM "2", IDM_STATE_SAVE_F2 + MENUITEM "3", IDM_STATE_SAVE_F3 + MENUITEM "4", IDM_STATE_SAVE_F4 + MENUITEM "5", IDM_STATE_SAVE_F5 + MENUITEM "6", IDM_STATE_SAVE_F6 + MENUITEM "7", IDM_STATE_SAVE_F7 + MENUITEM "8", IDM_STATE_SAVE_F8 + MENUITEM "9", IDM_STATE_SAVE_F9 + MENUITEM "10", IDM_STATE_SAVE_F10 + } + POPUP "Load State" + { + MENUITEM "1", IDM_STATE_LOAD_F1 + MENUITEM "2", IDM_STATE_LOAD_F2 + MENUITEM "3", IDM_STATE_LOAD_F3 + MENUITEM "4", IDM_STATE_LOAD_F4 + MENUITEM "5", IDM_STATE_LOAD_F5 + MENUITEM "6", IDM_STATE_LOAD_F6 + MENUITEM "7", IDM_STATE_LOAD_F7 + MENUITEM "8", IDM_STATE_LOAD_F8 + MENUITEM "9", IDM_STATE_LOAD_F9 + MENUITEM "10", IDM_STATE_LOAD_F10 + } + MENUITEM SEPARATOR + MENUITEM "Import Backup Memory", IDM_IMPORTBACKUPMEMORY + MENUITEM SEPARATOR + MENUITEM "Save Screenshot &As", IDM_PRINTSCREEN + MENUITEM "&Quick Screenshot", IDM_QUICK_PRINTSCREEN MENUITEM SEPARATOR MENUITEM "&Quitter", IDM_QUIT } @@ -68,6 +99,40 @@ MENU_PRINCIPAL MENU //MENUITEM "&DeMagnify", IDC_DEMAGNIFY MENUITEM "&Force Maintain Ratio", IDC_FORCERATIO } + POPUP "&Config" + { + POPUP "&Save Type" + { + MENUITEM "Autodetect", IDC_SAVETYPE1 + MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 + MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 + MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 + MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 + MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 + } + MENUITEM "Control Config", IDM_CONFIG + MENUITEM "Sound Settings", IDM_SOUNDSETTINGS + MENUITEM "Firmware Settings", IDM_FIRMSETTINGS + POPUP "&Frame Skip" + { + MENUITEM "Auto", IDC_FRAMESKIPAUTO + MENUITEM "0", IDC_FRAMESKIP0 + MENUITEM "1", IDC_FRAMESKIP1 + MENUITEM "2", IDC_FRAMESKIP2 + MENUITEM "3", IDC_FRAMESKIP3 + MENUITEM "4", IDC_FRAMESKIP4 + MENUITEM "5", IDC_FRAMESKIP5 + MENUITEM "6", IDC_FRAMESKIP6 + MENUITEM "7", IDC_FRAMESKIP7 + MENUITEM "8", IDC_FRAMESKIP8 + MENUITEM "9", IDC_FRAMESKIP9 + } + POPUP "&Language" + { + MENUITEM "English", IDC_LANGENGLISH + MENUITEM "French", IDC_LANGFRENCH + } + } POPUP "&Outils" { MENUITEM "&Desassembleur", IDM_DISASSEMBLER @@ -92,9 +157,14 @@ MENU_PRINCIPAL MENU MENUITEM "Sub BG 3", IDM_SBG3, CHECKED } } + POPUP "&Help" + { + MENUITEM "&Website", IDM_WEBSITE + MENUITEM "&Forums", IDM_FORUM + MENUITEM "&Submit a bug report", IDM_SUBMITBUGREPORT + } } - IDD_MEM_VIEWER DIALOG DISCARDABLE 0, 0, 428, 178 STYLE WS_SYSMENU CAPTION "Visualisation de la memoire" @@ -405,6 +475,11 @@ MENU_PRINCIPAL MENU MENUITEM "8", IDC_FRAMESKIP8 MENUITEM "9", IDC_FRAMESKIP9 } + POPUP "&Language" + { + MENUITEM "English", IDC_LANGENGLISH + MENUITEM "French", IDC_LANGFRENCH + } } POPUP "&Tools" {