blob: ec96c2d9d3947598db9f33c06d3ed47c46668ffc [file] [log] [blame]
Alexandre Julliard02ed4c21996-03-02 19:34:10 +00001/*
2 * Program Manager
3 *
4 * Copyright 1996 Ulrich Schmid
5 */
6
Alexandre Julliard9ea19e51997-01-01 17:29:55 +00007#include "windows.h"
Alexandre Julliard59730ae1996-03-24 16:20:51 +00008#ifdef WINELIB
Alexandre Julliard9ea19e51997-01-01 17:29:55 +00009#include "options.h"
Alexandre Julliard59730ae1996-03-24 16:20:51 +000010#endif
Alexandre Julliard02ed4c21996-03-02 19:34:10 +000011#include "progman.h"
12
13/* Class names */
14
15CHAR STRING_MAIN_WIN_CLASS_NAME[] = "PMMain";
16CHAR STRING_MDI_WIN_CLASS_NAME[] = "MDICLIENT";
17CHAR STRING_GROUP_WIN_CLASS_NAME[] = "PMGroup";
18CHAR STRING_PROGRAM_WIN_CLASS_NAME[] = "PMProgram";
19
20/* Resource names */
21/* Xx will be overwritten with En, ... */
22CHAR STRING_ACCEL[] = "ACCEL";
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000023CHAR STRING_MENU_Xx[] = "MENU_Xx";
Alexandre Julliard02ed4c21996-03-02 19:34:10 +000024CHAR STRING_NEW_Xx[] = "DIALOG_NEW_Xx";
25CHAR STRING_OPEN_Xx[] = "DIALOG_OPEN_Xx";
26CHAR STRING_MOVE_Xx[] = "DIALOG_MOVE_Xx";
27CHAR STRING_COPY_Xx[] = "DIALOG_COPY_Xx";
28CHAR STRING_DELETE_Xx[] = "DIALOG_DELETE_Xx";
29CHAR STRING_GROUP_Xx[] = "DIALOG_GROUP_Xx";
30CHAR STRING_PROGRAM_Xx[] = "DIALOG_PROGRAM_Xx";
31CHAR STRING_SYMBOL_Xx[] = "DIALOG_SYMBOL_Xx";
32CHAR STRING_EXECUTE_Xx[] = "DIALOG_EXECUTE_Xx";
33
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000034static BOOL STRING_LoadStringOtherLanguage(UINT num, UINT ids, LPSTR str, UINT len)
Alexandre Julliard02ed4c21996-03-02 19:34:10 +000035{
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000036 ids -= Globals.wStringTableOffset;
37 ids += num * 0x100;
38 return(LoadString(Globals.hInstance, ids, str, len));
39};
40
41VOID 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
66VOID 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 Julliard59730ae1996-03-24 16:20:51 +000072 HMENU hMainMenu;
Alexandre Julliard59730ae1996-03-24 16:20:51 +000073
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000074 /* Select string table */
75 Globals.wStringTableOffset = num * 0x100;
Alexandre Julliard02ed4c21996-03-02 19:34:10 +000076
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000077 /* 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 Julliard02ed4c21996-03-02 19:34:10 +000084
85 /* Change Resource names */
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000086 lstrcpyn(STRING_MENU_Xx + sizeof(STRING_MENU_Xx) - 3, lang, 3);
Alexandre Julliard02ed4c21996-03-02 19:34:10 +000087 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 Julliard59730ae1996-03-24 16:20:51 +000097 /* Create menu */
Alexandre Julliardc981d0b1996-03-31 16:40:13 +000098 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 Julliard02ed4c21996-03-02 19:34:10 +0000103
Alexandre Julliardc981d0b1996-03-31 16:40:13 +0000104 /* 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 Julliard59730ae1996-03-24 16:20:51 +0000111
Alexandre Julliardc981d0b1996-03-31 16:40:13 +0000112 if (Globals.hMDIWnd)
113 SendMessage(Globals.hMDIWnd, WM_MDISETMENU,
114 (WPARAM) hMainMenu,
115 (LPARAM) Globals.hWindowsMenu);
116 else SetMenu(Globals.hMainWnd, hMainMenu);
Alexandre Julliard02ed4c21996-03-02 19:34:10 +0000117
Alexandre Julliardc981d0b1996-03-31 16:40:13 +0000118 /* Destroy old menu */
119 if (Globals.hMainMenu) DestroyMenu(Globals.hMainMenu);
120 Globals.hMainMenu = hMainMenu;
Alexandre Julliard02ed4c21996-03-02 19:34:10 +0000121}
122
123/* Local Variables: */
124/* c-file-style: "GNU" */
125/* End: */