Dutch translation of clock and cmdlgtst.
[wine] / programs / winecfg / main.c
1 /*
2  * WineCfg main entry point
3  *
4  * Copyright 2002 Jaco Greeff
5  * Copyright 2003 Dimitrie O. Paun
6  * Copyright 2003 Mike Hearn
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24 #define NONAMELESSUNION
25 #define NONAMELESSSTRUCT
26
27 #include <windows.h>
28 #include <commctrl.h>
29 #include <stdlib.h>
30 #include <stdio.h>
31 #include <wine/debug.h>
32
33 #include "properties.h"
34 #include "resource.h"
35 #include "winecfg.h"
36
37 WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
38
39 void CALLBACK
40 PropSheetCallback (HWND hWnd, UINT uMsg, LPARAM lParam)
41 {
42     switch (uMsg)
43     {
44         /*
45          * hWnd = NULL, lParam == dialog resource
46          */
47     case PSCB_PRECREATE:
48         break;
49
50     case PSCB_INITIALIZED:
51         break;
52
53     default:
54         break;
55     }
56 }
57
58 void
59 initGeneralDlg (HWND hDlg)
60 {
61     int i;
62     const VERSION_DESC *pVer = NULL;
63     char *curWinVer = getConfigValue("Version", "Windows", "win98");
64     char *curDOSVer = getConfigValue("Version", "DOS", "6.22");
65     char *curWineLook = getConfigValue("Tweak.Layout", "WineLook", "win95");
66
67     /* normalize the version strings */
68     if (!strcmp(curWinVer, "win2000") || !strcmp(curWinVer, "nt2k") || !strcmp(curWinVer, "nt2000")) {
69         free(curWinVer);
70         curWinVer = strdup("win2k");
71     }
72
73     if (!strcmp(curWinVer, "win2k3")) {
74         free(curWinVer);
75         curWinVer = strdup("win2003");
76     }
77     
78     if ((pVer = getWinVersions ()))
79     {
80         for (i = 0; *pVer->szVersion; i++, pVer++)
81         {
82             SendDlgItemMessage (hDlg, IDC_WINVER, CB_ADDSTRING,
83                                 0, (LPARAM) pVer->szDescription);
84             if (!strcmp (pVer->szVersion, curWinVer))
85                 SendDlgItemMessage (hDlg, IDC_WINVER, CB_SETCURSEL,
86                                     (WPARAM) i, 0);
87         }
88     }
89     if ((pVer = getDOSVersions ()))
90     {
91         for (i = 0; *pVer->szVersion; i++, pVer++)
92         {
93             SendDlgItemMessage (hDlg, IDC_DOSVER, CB_ADDSTRING,
94                                 0, (LPARAM) pVer->szDescription);
95             if (!strcmp (pVer->szVersion, curDOSVer))
96                 SendDlgItemMessage (hDlg, IDC_DOSVER, CB_SETCURSEL,
97                                     (WPARAM) i, 0);
98         }
99     }
100     if ((pVer = getWinelook ()))
101     {
102         for (i = 0; *pVer->szVersion; i++, pVer++)
103         {
104             SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_ADDSTRING,
105                                 0, (LPARAM) pVer->szDescription);
106             if (!strcmp (pVer->szVersion, curWineLook))
107                 SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_SETCURSEL,
108                                     (WPARAM) i, 0);
109         }
110     }
111
112     free(curWinVer);
113     free(curDOSVer);
114     free(curWineLook);
115 }
116
117 INT_PTR CALLBACK
118 GeneralDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
119 {
120     switch (uMsg) {
121         
122         case WM_INITDIALOG:
123             initGeneralDlg (hDlg);
124             break;
125
126         case WM_COMMAND:
127             switch (LOWORD(wParam)) {
128                 case IDC_WINVER: if (HIWORD(wParam) == CBN_SELCHANGE) {
129                     /* user changed the wine version combobox */
130                     int selection = SendDlgItemMessage( hDlg, IDC_WINVER, CB_GETCURSEL, 0, 0);
131                     VERSION_DESC *desc = getWinVersions();
132
133                     while (selection > 0) {
134                         desc++; selection--;
135                     }
136                     addTransaction("Version", "Windows", ACTION_SET, desc->szVersion);
137                 }
138                 break;
139             }
140             break;
141             
142         default:
143             break;
144             
145     }
146     return FALSE;
147 }
148
149
150 INT_PTR CALLBACK
151 DllDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
152 {
153     switch (uMsg)
154     {
155     case WM_COMMAND:
156         break;
157
158     default:
159         break;
160     }
161     return FALSE;
162 }
163
164
165 #define NUM_PROPERTY_PAGES 5
166 INT_PTR
167 doPropertySheet (HINSTANCE hInstance, HWND hOwner)
168 {
169     PROPSHEETPAGE psp[NUM_PROPERTY_PAGES];
170     PROPSHEETHEADER psh;
171
172     /*
173      * Fill out the (General) PROPSHEETPAGE data structure 
174      * for the property sheet
175      */
176     psp[0].dwSize = sizeof (PROPSHEETPAGE);
177     psp[0].dwFlags = PSP_USETITLE;
178     psp[0].hInstance = hInstance;
179     psp[0].u.pszTemplate = MAKEINTRESOURCE (IDD_GENERALCFG);
180     psp[0].u2.pszIcon = NULL;
181     psp[0].pfnDlgProc = GeneralDlgProc;
182     psp[0].pszTitle = "General";
183     psp[0].lParam = 0;
184
185     /*
186      * Fill out the (Applications) PROPSHEETPAGE data structure 
187      * for the property sheet
188      */
189     psp[1].dwSize = sizeof (PROPSHEETPAGE);
190     psp[1].dwFlags = PSP_USETITLE;
191     psp[1].hInstance = hInstance;
192     psp[1].u.pszTemplate = MAKEINTRESOURCE (IDD_APPCFG);
193     psp[1].u2.pszIcon = NULL;
194     psp[1].pfnDlgProc = AppDlgProc;
195     psp[1].pszTitle = "Applications";
196     psp[1].lParam = 0;
197
198     /*
199      * Fill out the (Libraries) PROPSHEETPAGE data structure 
200      * for the property sheet
201      */
202     psp[2].dwSize = sizeof (PROPSHEETPAGE);
203     psp[2].dwFlags = PSP_USETITLE;
204     psp[2].hInstance = hInstance;
205     psp[2].u.pszTemplate = MAKEINTRESOURCE (IDD_DLLCFG);
206     psp[2].u2.pszIcon = NULL;
207     psp[2].pfnDlgProc = DllDlgProc;
208     psp[2].pszTitle = "Libraries";
209     psp[2].lParam = 0;
210     
211     /*
212      * Fill out the (X11Drv) PROPSHEETPAGE data structure 
213      * for the property sheet
214      */
215     psp[3].dwSize = sizeof (PROPSHEETPAGE);
216     psp[3].dwFlags = PSP_USETITLE;
217     psp[3].hInstance = hInstance;
218     psp[3].u.pszTemplate = MAKEINTRESOURCE (IDD_X11DRVCFG);
219     psp[3].u2.pszIcon = NULL;
220     psp[3].pfnDlgProc = X11DrvDlgProc;
221     psp[3].pszTitle = "X11 Driver";
222     psp[3].lParam = 0;
223
224     psp[4].dwSize = sizeof (PROPSHEETPAGE);
225     psp[4].dwFlags = PSP_USETITLE;
226     psp[4].hInstance = hInstance;
227     psp[4].u.pszTemplate = MAKEINTRESOURCE (IDD_DRIVECFG);
228     psp[4].u2.pszIcon = NULL;
229     psp[4].pfnDlgProc = DriveDlgProc;
230     psp[4].pszTitle = "Drives";
231     psp[4].lParam = 0;
232     
233     /*
234      * Fill out the PROPSHEETHEADER
235      */
236     psh.dwSize = sizeof (PROPSHEETHEADER);
237     psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USEICONID | PSH_USECALLBACK;
238     psh.hwndParent = hOwner;
239     psh.hInstance = hInstance;
240     psh.u.pszIcon = NULL;
241     psh.pszCaption = "Wine Configuration";
242     psh.nPages = NUM_PROPERTY_PAGES;
243     psh.u3.ppsp = (LPCPROPSHEETPAGE) & psp;
244     psh.pfnCallback = (PFNPROPSHEETCALLBACK) PropSheetCallback;
245     psh.u2.nStartPage = 0;
246
247     /*
248      * Display the modal property sheet
249      */
250     return PropertySheet (&psh);
251 }
252
253
254 /*****************************************************************************
255  * Name       : WinMain
256  * Description: Main windows entry point
257  * Parameters : hInstance
258  *              hPrev
259  *              szCmdLine
260  *              nShow
261  * Returns    : Program exit code
262  */
263 int WINAPI
264 WinMain (HINSTANCE hInstance, HINSTANCE hPrev, LPSTR szCmdLine, int nShow)
265 {
266
267     /* Until winecfg is fully functional, warn users that it is incomplete and doesn't do anything */
268     WINE_FIXME("The winecfg tool is not yet complete, and does not actually alter your configuration.\n");
269     WINE_FIXME("If you want to alter the way Wine works, look in the ~/.wine/config file for more information.\n");
270
271     if (initialize() != 0) {
272         WINE_ERR("initialization failed, aborting\n");
273         ExitProcess(1);
274     }
275     
276     /*
277      * The next 3 lines should be all that is needed
278      * for the Wine Configuration property sheet
279      */
280     InitCommonControls ();
281     if (doPropertySheet (hInstance, NULL) > 0) {
282         WINE_TRACE("OK\n");
283     } else {
284         WINE_TRACE("Cancel\n");
285     }
286     
287     ExitProcess (0);
288
289     return 0;
290 }