Allow the user to stick the option and its argument together.
[wine/wine-kai.git] / programs / clock / language.c
blobd212985827908a38a3da9a5765e41001b545fcb7
1 /*
2 * Clock
4 * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch>
5 * Copyright 1998 Karl Backström <karl_b@geocities.com>
6 */
8 #include <stdio.h>
9 #include "windows.h"
10 #include "main.h"
11 #include "language.h"
12 #include "winnls.h"
14 CHAR STRING_MENU_Xx[] = "MENU_Xx";
16 VOID LANGUAGE_UpdateMenuCheckmarks(VOID) {
18 if(Globals.bAnalog == TRUE) {
20 /* analog clock */
22 CheckMenuItem(Globals.hPropertiesMenu, CL_ANALOG, \
23 MF_BYCOMMAND | MF_CHECKED);
24 CheckMenuItem(Globals.hPropertiesMenu, CL_DIGITAL, \
25 MF_BYCOMMAND | MF_UNCHECKED);
26 EnableMenuItem(Globals.hPropertiesMenu, CL_FONT, \
27 MF_BYCOMMAND | MF_GRAYED);
29 else
32 /* digital clock */
34 CheckMenuItem(Globals.hPropertiesMenu, CL_ANALOG, \
35 MF_BYCOMMAND | MF_UNCHECKED);
36 CheckMenuItem(Globals.hPropertiesMenu, CL_DIGITAL, \
37 MF_BYCOMMAND | MF_CHECKED);
38 EnableMenuItem(Globals.hPropertiesMenu, CL_FONT, \
39 MF_BYCOMMAND);
43 CheckMenuItem(Globals.hPropertiesMenu, CL_WITHOUT_TITLE, MF_BYCOMMAND | \
44 (Globals.bWithoutTitle ? MF_CHECKED : MF_UNCHECKED));
45 CheckMenuItem(Globals.hSystemMenu, CL_ON_TOP, MF_BYCOMMAND | \
46 (Globals.bAlwaysOnTop ? MF_CHECKED : MF_UNCHECKED));
47 CheckMenuItem(Globals.hPropertiesMenu, CL_SECONDS, MF_BYCOMMAND | \
48 (Globals.bSeconds ? MF_CHECKED : MF_UNCHECKED));
49 CheckMenuItem(Globals.hPropertiesMenu, CL_DATE, MF_BYCOMMAND | \
50 (Globals.bDate ? MF_CHECKED : MF_UNCHECKED));
53 VOID LANGUAGE_UpdateWindowCaption(VOID) {
55 CHAR szCaption[MAX_STRING_LEN];
56 CHAR szDate[MAX_STRING_LEN];
58 LPSTR date = szDate;
60 SYSTEMTIME st;
61 LPSYSTEMTIME lpst = &st;
63 GetLocalTime(&st);
64 GetDateFormat(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, lpst, NULL, date,
65 MAX_STRING_LEN);
67 /* Set frame caption */
68 LoadString(Globals.hInstance, IDS_CLOCK, szCaption, sizeof(szCaption));
69 if (Globals.bDate) {
70 lstrcat(szCaption, " - ");
71 lstrcat(szCaption, szDate);
73 SetWindowText(Globals.hMainWnd, szCaption);
79 static BOOL LANGUAGE_LoadStringOther(UINT num, UINT ids, LPSTR str, UINT len)
81 ids -= Globals.wStringTableOffset;
82 ids += num * 0x100;
83 return(LoadString(Globals.hInstance, ids, str, len));
86 VOID LANGUAGE_SelectByName(LPCSTR lang)
88 INT i;
89 CHAR szNewLang[3];
91 for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
92 if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_ID, szNewLang,
93 sizeof(szNewLang)) && !lstrcmp(lang, szNewLang))
95 LANGUAGE_SelectByNumber(i);
96 return;
99 /* Fallback */
100 for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
101 if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_ID, szNewLang, sizeof(szNewLang)))
103 LANGUAGE_SelectByNumber(i);
104 return;
107 MessageBox(Globals.hMainWnd, "No language found", "FATAL ERROR", MB_OK);
108 PostQuitMessage(1);
111 VOID LANGUAGE_SelectByNumber(UINT num)
113 INT i;
114 CHAR szLanguage[3];
116 CHAR szItem[MAX_STRING_LEN];
117 HMENU hMainMenu;
119 /* Select string table */
120 Globals.wStringTableOffset = num * 0x100;
122 /* Get Language id */
123 LoadString(Globals.hInstance, IDS_LANGUAGE_ID, szLanguage, sizeof(szLanguage));
125 /* Change Resource names */
126 lstrcpyn(STRING_MENU_Xx + sizeof(STRING_MENU_Xx) - 3, szLanguage, 3);
128 /* Create menu */
129 hMainMenu = LoadMenu(Globals.hInstance, STRING_MENU_Xx);
130 Globals.hPropertiesMenu = GetSubMenu(hMainMenu, 0);
131 Globals.hLanguageMenu = GetSubMenu(hMainMenu, 1);
132 Globals.hInfoMenu = GetSubMenu(hMainMenu, 2);
134 /* Remove dummy item */
135 RemoveMenu(Globals.hLanguageMenu, 0, MF_BYPOSITION);
136 /* Add language items */
137 for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
138 if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_MENU_ITEM, szItem, sizeof(szItem)))
139 AppendMenu(Globals.hLanguageMenu, MF_STRING | MF_BYCOMMAND,
140 CL_FIRST_LANGUAGE + i, szItem);
141 EnableMenuItem(Globals.hLanguageMenu, CL_FIRST_LANGUAGE + num, MF_BYCOMMAND | MF_CHECKED);
143 SetMenu(Globals.hMainWnd, hMainMenu);
145 /* Destroy old menu */
146 if (Globals.hMainMenu) DestroyMenu(Globals.hMainMenu);
147 Globals.hMainMenu = hMainMenu;
149 /* specific for Clock: */
151 LANGUAGE_UpdateMenuCheckmarks();
152 LANGUAGE_UpdateWindowCaption();
154 Globals.hSystemMenu = GetSystemMenu(Globals.hMainWnd, TRUE);
156 /* FIXME: Append a SEPARATOR to Globals.hSystemMenu here */
158 LoadString(Globals.hInstance, IDS_MENU_ON_TOP, szItem, sizeof(szItem));
159 AppendMenu(Globals.hSystemMenu, MF_STRING | MF_BYCOMMAND, 1000, szItem);
162 VOID LANGUAGE_DefaultHandle(WPARAM wParam)
164 if ((wParam >=CL_FIRST_LANGUAGE) && (wParam<=CL_LAST_LANGUAGE))
165 LANGUAGE_SelectByNumber(wParam - CL_FIRST_LANGUAGE);
166 else printf("Unimplemented menu command %i\n", wParam);
169 /* Local Variables: */
170 /* c-file-style: "GNU" */
171 /* End: */