Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Program Manager |
| 3 | * |
| 4 | * Copyright 1996 Ulrich Schmid |
| 5 | */ |
| 6 | |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 7 | #include "windows.h" |
Alexandre Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 8 | #ifdef WINELIB |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 9 | #include "options.h" |
Alexandre Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 10 | #endif |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 11 | #include "progman.h" |
| 12 | |
| 13 | /* Class names */ |
| 14 | |
| 15 | CHAR STRING_MAIN_WIN_CLASS_NAME[] = "PMMain"; |
| 16 | CHAR STRING_MDI_WIN_CLASS_NAME[] = "MDICLIENT"; |
| 17 | CHAR STRING_GROUP_WIN_CLASS_NAME[] = "PMGroup"; |
| 18 | CHAR STRING_PROGRAM_WIN_CLASS_NAME[] = "PMProgram"; |
| 19 | |
| 20 | /* Resource names */ |
| 21 | /* Xx will be overwritten with En, ... */ |
| 22 | CHAR STRING_ACCEL[] = "ACCEL"; |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 23 | CHAR STRING_MENU_Xx[] = "MENU_Xx"; |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 24 | CHAR STRING_NEW_Xx[] = "DIALOG_NEW_Xx"; |
| 25 | CHAR STRING_OPEN_Xx[] = "DIALOG_OPEN_Xx"; |
| 26 | CHAR STRING_MOVE_Xx[] = "DIALOG_MOVE_Xx"; |
| 27 | CHAR STRING_COPY_Xx[] = "DIALOG_COPY_Xx"; |
| 28 | CHAR STRING_DELETE_Xx[] = "DIALOG_DELETE_Xx"; |
| 29 | CHAR STRING_GROUP_Xx[] = "DIALOG_GROUP_Xx"; |
| 30 | CHAR STRING_PROGRAM_Xx[] = "DIALOG_PROGRAM_Xx"; |
| 31 | CHAR STRING_SYMBOL_Xx[] = "DIALOG_SYMBOL_Xx"; |
| 32 | CHAR STRING_EXECUTE_Xx[] = "DIALOG_EXECUTE_Xx"; |
| 33 | |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 34 | static BOOL STRING_LoadStringOtherLanguage(UINT num, UINT ids, LPSTR str, UINT len) |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 35 | { |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 36 | ids -= Globals.wStringTableOffset; |
| 37 | ids += num * 0x100; |
| 38 | return(LoadString(Globals.hInstance, ids, str, len)); |
| 39 | }; |
| 40 | |
| 41 | VOID STRING_SelectLanguageByName(LPCSTR lang) |
| 42 | { |
| 43 | INT i; |
| 44 | CHAR newlang[3]; |
| 45 | |
| 46 | for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++) |
| 47 | if (STRING_LoadStringOtherLanguage(i, IDS_LANGUAGE_ID, newlang, sizeof(newlang)) && |
| 48 | !lstrcmp(lang, newlang)) |
| 49 | { |
| 50 | STRING_SelectLanguageByNumber(i); |
| 51 | return; |
| 52 | } |
| 53 | |
| 54 | /* Fallback */ |
| 55 | for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++) |
| 56 | if (STRING_LoadStringOtherLanguage(i, IDS_LANGUAGE_ID, newlang, sizeof(newlang))) |
| 57 | { |
| 58 | STRING_SelectLanguageByNumber(i); |
| 59 | return; |
| 60 | } |
| 61 | |
| 62 | MessageBox(Globals.hMainWnd, "No language found", "FATAL ERROR", MB_OK); |
| 63 | PostQuitMessage(1); |
| 64 | } |
| 65 | |
| 66 | VOID STRING_SelectLanguageByNumber(UINT num) |
| 67 | { |
| 68 | INT i; |
| 69 | CHAR lang[3]; |
| 70 | CHAR caption[MAX_STRING_LEN]; |
| 71 | CHAR item[MAX_STRING_LEN]; |
Alexandre Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 72 | HMENU hMainMenu; |
Alexandre Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 73 | |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 74 | /* Select string table */ |
| 75 | Globals.wStringTableOffset = num * 0x100; |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 76 | |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 77 | /* Get Language id */ |
| 78 | LoadString(Globals.hInstance, IDS_LANGUAGE_ID, lang, sizeof(lang)); |
| 79 | Globals.lpszLanguage = lang; |
| 80 | |
| 81 | /* Set frame caption */ |
| 82 | LoadString(Globals.hInstance, IDS_PROGRAM_MANAGER, caption, sizeof(caption)); |
| 83 | SetWindowText(Globals.hMainWnd, caption); |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 84 | |
| 85 | /* Change Resource names */ |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 86 | lstrcpyn(STRING_MENU_Xx + sizeof(STRING_MENU_Xx) - 3, lang, 3); |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 87 | lstrcpyn(STRING_NEW_Xx + sizeof(STRING_NEW_Xx) - 3, lang, 3); |
| 88 | lstrcpyn(STRING_OPEN_Xx + sizeof(STRING_OPEN_Xx) - 3, lang, 3); |
| 89 | lstrcpyn(STRING_MOVE_Xx + sizeof(STRING_MOVE_Xx) - 3, lang, 3); |
| 90 | lstrcpyn(STRING_COPY_Xx + sizeof(STRING_COPY_Xx) - 3, lang, 3); |
| 91 | lstrcpyn(STRING_DELETE_Xx + sizeof(STRING_DELETE_Xx) - 3, lang, 3); |
| 92 | lstrcpyn(STRING_GROUP_Xx + sizeof(STRING_GROUP_Xx) - 3, lang, 3); |
| 93 | lstrcpyn(STRING_PROGRAM_Xx + sizeof(STRING_PROGRAM_Xx) - 3, lang, 3); |
| 94 | lstrcpyn(STRING_SYMBOL_Xx + sizeof(STRING_SYMBOL_Xx) - 3, lang, 3); |
| 95 | lstrcpyn(STRING_EXECUTE_Xx + sizeof(STRING_EXECUTE_Xx) - 3, lang, 3); |
| 96 | |
Alexandre Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 97 | /* Create menu */ |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 98 | hMainMenu = LoadMenu(Globals.hInstance, STRING_MENU_Xx); |
| 99 | Globals.hFileMenu = GetSubMenu(hMainMenu, 0); |
| 100 | Globals.hOptionMenu = GetSubMenu(hMainMenu, 1); |
| 101 | Globals.hWindowsMenu = GetSubMenu(hMainMenu, 2); |
| 102 | Globals.hLanguageMenu = GetSubMenu(hMainMenu, 3); |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 103 | |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 104 | /* Remove dummy item */ |
| 105 | RemoveMenu(Globals.hLanguageMenu, 0, MF_BYPOSITION); |
| 106 | /* Add language items */ |
| 107 | for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++) |
| 108 | if (STRING_LoadStringOtherLanguage(i, IDS_LANGUAGE_MENU_ITEM, item, sizeof(item))) |
| 109 | AppendMenu(Globals.hLanguageMenu, MF_STRING | MF_BYCOMMAND, |
| 110 | PM_FIRST_LANGUAGE + i, item); |
Alexandre Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 111 | |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 112 | if (Globals.hMDIWnd) |
| 113 | SendMessage(Globals.hMDIWnd, WM_MDISETMENU, |
| 114 | (WPARAM) hMainMenu, |
| 115 | (LPARAM) Globals.hWindowsMenu); |
| 116 | else SetMenu(Globals.hMainWnd, hMainMenu); |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 117 | |
Alexandre Julliard | c981d0b | 1996-03-31 16:40:13 +0000 | [diff] [blame] | 118 | /* Destroy old menu */ |
| 119 | if (Globals.hMainMenu) DestroyMenu(Globals.hMainMenu); |
| 120 | Globals.hMainMenu = hMainMenu; |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 121 | } |
| 122 | |
| 123 | /* Local Variables: */ |
| 124 | /* c-file-style: "GNU" */ |
| 125 | /* End: */ |