Made notepad uses NLS properly.
[wine] / programs / clock / language.c
1 /*
2  * Clock
3  *
4  * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch>
5  * Copyright 1998 Karl Backström <karl_b@geocities.com>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #include <stdio.h>
23 #include "windows.h"
24 #include "main.h"
25 #include "language.h"
26 #include "winnls.h"
27
28 CHAR STRING_MENU_Xx[]      = "MENU_Xx";
29
30 VOID LANGUAGE_UpdateMenuCheckmarks(VOID) {
31
32     if(Globals.bAnalog == TRUE) {
33     
34         /* analog clock */
35         
36         CheckMenuItem(Globals.hPropertiesMenu, CL_ANALOG, \
37                        MF_BYCOMMAND | MF_CHECKED);
38         CheckMenuItem(Globals.hPropertiesMenu, CL_DIGITAL, \
39                        MF_BYCOMMAND | MF_UNCHECKED);
40         EnableMenuItem(Globals.hPropertiesMenu, CL_FONT, \
41                        MF_BYCOMMAND | MF_GRAYED);
42     }
43         else 
44     {
45     
46         /* digital clock */
47         
48         CheckMenuItem(Globals.hPropertiesMenu, CL_ANALOG, \
49                        MF_BYCOMMAND | MF_UNCHECKED);
50         CheckMenuItem(Globals.hPropertiesMenu, CL_DIGITAL, \
51                        MF_BYCOMMAND | MF_CHECKED);
52         EnableMenuItem(Globals.hPropertiesMenu, CL_FONT, \
53                        MF_BYCOMMAND);
54                        
55     }
56     
57     CheckMenuItem(Globals.hPropertiesMenu, CL_WITHOUT_TITLE, MF_BYCOMMAND | \
58                  (Globals.bWithoutTitle ? MF_CHECKED : MF_UNCHECKED));
59     CheckMenuItem(Globals.hSystemMenu, CL_ON_TOP, MF_BYCOMMAND | \
60                  (Globals.bAlwaysOnTop ? MF_CHECKED : MF_UNCHECKED));
61     CheckMenuItem(Globals.hPropertiesMenu, CL_SECONDS, MF_BYCOMMAND | \
62                  (Globals.bSeconds ? MF_CHECKED : MF_UNCHECKED));
63     CheckMenuItem(Globals.hPropertiesMenu, CL_DATE, MF_BYCOMMAND | \
64                  (Globals.bDate ? MF_CHECKED : MF_UNCHECKED));
65 }
66
67 VOID LANGUAGE_UpdateWindowCaption(VOID) {
68
69   CHAR szCaption[MAX_STRING_LEN];
70   CHAR szDate[MAX_STRING_LEN];
71   
72   LPSTR date = szDate;
73   
74   SYSTEMTIME st;
75   LPSYSTEMTIME lpst = &st;
76
77   GetLocalTime(&st);
78   GetDateFormat(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, lpst, NULL, date,
79                 MAX_STRING_LEN);
80
81   /* Set frame caption */
82   LoadString(Globals.hInstance, IDS_CLOCK, szCaption, sizeof(szCaption));
83   if (Globals.bDate) {
84      lstrcat(szCaption, " - ");
85      lstrcat(szCaption, szDate);
86   }
87   SetWindowText(Globals.hMainWnd, szCaption);
88
89 }
90
91
92
93 static BOOL LANGUAGE_LoadStringOther(UINT num, UINT ids, LPSTR str, UINT len)
94 {
95   ids -= Globals.wStringTableOffset;
96   ids += num * 0x100;
97   return(LoadString(Globals.hInstance, ids, str, len));
98 };
99
100 VOID LANGUAGE_SelectByName(LPCSTR lang)
101 {
102   INT i;
103   CHAR szNewLang[3];
104
105   for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
106     if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_ID, szNewLang, 
107                 sizeof(szNewLang)) && !lstrcmp(lang, szNewLang))
108       {
109         LANGUAGE_SelectByNumber(i);
110         return;
111       }
112
113   /* Fallback */
114     for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
115     if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_ID, szNewLang, sizeof(szNewLang)))
116       {
117         LANGUAGE_SelectByNumber(i);
118         return;
119       }
120
121     MessageBox(Globals.hMainWnd, "No language found", "FATAL ERROR", MB_OK);
122     PostQuitMessage(1);
123 }
124
125 VOID LANGUAGE_SelectByNumber(UINT num)
126 {
127   INT    i;
128   CHAR   szLanguage[3];
129
130   CHAR   szItem[MAX_STRING_LEN];
131   HMENU  hMainMenu;
132
133   /* Select string table */
134   Globals.wStringTableOffset = num * 0x100;
135
136   /* Get Language id */
137   LoadString(Globals.hInstance, IDS_LANGUAGE_ID, szLanguage, sizeof(szLanguage));
138
139   /* Change Resource names */
140   lstrcpyn(STRING_MENU_Xx + sizeof(STRING_MENU_Xx) - 3, szLanguage, 3);
141
142   /* Create menu */
143   hMainMenu = LoadMenu(Globals.hInstance, STRING_MENU_Xx);
144     Globals.hPropertiesMenu     = GetSubMenu(hMainMenu, 0);
145     Globals.hLanguageMenu       = GetSubMenu(hMainMenu, 1);
146     Globals.hInfoMenu           = GetSubMenu(hMainMenu, 2);
147
148   /* Remove dummy item */
149   RemoveMenu(Globals.hLanguageMenu, 0, MF_BYPOSITION);
150   /* Add language items */
151   for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
152     if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_MENU_ITEM, szItem, sizeof(szItem)))
153              AppendMenu(Globals.hLanguageMenu, MF_STRING | MF_BYCOMMAND,
154                         CL_FIRST_LANGUAGE + i, szItem);
155   EnableMenuItem(Globals.hLanguageMenu, CL_FIRST_LANGUAGE + num, MF_BYCOMMAND | MF_CHECKED);
156
157   SetMenu(Globals.hMainWnd, hMainMenu);
158
159   /* Destroy old menu */
160   if (Globals.hMainMenu) DestroyMenu(Globals.hMainMenu);
161   Globals.hMainMenu = hMainMenu;
162
163   /* specific for Clock: */
164
165   LANGUAGE_UpdateMenuCheckmarks();
166   LANGUAGE_UpdateWindowCaption();   
167
168   Globals.hSystemMenu = GetSystemMenu(Globals.hMainWnd, TRUE);
169
170   /* FIXME: Append a SEPARATOR to Globals.hSystemMenu here */
171
172   LoadString(Globals.hInstance, IDS_MENU_ON_TOP, szItem, sizeof(szItem));
173   AppendMenu(Globals.hSystemMenu, MF_STRING | MF_BYCOMMAND, 1000, szItem);
174 }
175
176 VOID LANGUAGE_DefaultHandle(WPARAM wParam)
177 {
178   if ((wParam >=CL_FIRST_LANGUAGE) && (wParam<=CL_LAST_LANGUAGE))
179           LANGUAGE_SelectByNumber(wParam - CL_FIRST_LANGUAGE);
180      else printf("Unimplemented menu command %i\n", wParam);
181 }
182
183 /* Local Variables:    */
184 /* c-file-style: "GNU" */
185 /* End:                */