530a78d442c86a201953b56538f51facc6d6afd0
[reactos.git] / dll / cpl / joy / joy.c
1 /*
2 * ReactOS
3 * Copyright (C) 2004 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 /*
20 *
21 * PROJECT: ReactOS Software Control Panel
22 * FILE: dll/cpl/joy/joy.c
23 * PURPOSE: ReactOS Software Control Panel
24 * PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
25 * UPDATE HISTORY:
26 * 10-18-2007 Created
27 */
28
29 #include "joy.h"
30
31 #define NUM_APPLETS (1)
32
33 LONG CALLBACK SystemApplet(HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2);
34 HINSTANCE hApplet = 0;
35
36 /* Applets */
37
38 APPLET Applets[NUM_APPLETS] =
39 {
40 {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
41 };
42
43 VOID
44 AddColumns(HWND hList)
45 {
46 LV_COLUMN dummy;
47 RECT rect;
48 int Size;
49 TCHAR szBuf[256];
50
51 GetClientRect(hList, &rect);
52 Size = rect.right - rect.left - 250;
53
54 LoadString(hApplet, IDS_STATUS, szBuf, sizeof(szBuf) / sizeof(TCHAR));
55
56 ZeroMemory(&dummy, sizeof(LV_COLUMN));
57 dummy.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
58 dummy.iSubItem = 0;
59 dummy.pszText = (LPTSTR)szBuf;
60 dummy.cx = Size;
61 (void)ListView_InsertColumn(hList, 0, &dummy);
62
63 GetClientRect(hList, &rect);
64
65 LoadString(hApplet, IDS_CONTROLLER, szBuf, sizeof(szBuf) / sizeof(TCHAR));
66
67 ZeroMemory(&dummy, sizeof(LV_COLUMN));
68 dummy.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
69 dummy.iSubItem = 0;
70 dummy.pszText = (LPTSTR)szBuf;
71 dummy.cx = rect.right - rect.left - Size;
72 (void)ListView_InsertColumn(hList, 0, &dummy);
73 }
74
75 INT_PTR CALLBACK
76 AdvancedPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
77 {
78 UNREFERENCED_PARAMETER(lParam);
79
80 switch (uMsg)
81 {
82 case WM_INITDIALOG:
83 break;
84
85 case WM_COMMAND:
86 switch (LOWORD(wParam))
87 {
88 case IDOK:
89 EndDialog(hwndDlg,LOWORD(wParam));
90 break;
91
92 case IDCANCEL:
93 EndDialog(hwndDlg,LOWORD(wParam));
94 break;
95 }
96 break;
97
98 case WM_NOTIFY:
99 break;
100
101 case WM_SYSCOMMAND:
102 switch (LOWORD(wParam))
103 {
104 case SC_CONTEXTHELP:
105 // Not implemented yet
106 break;
107 }
108 break;
109 }
110 return 0;
111 }
112
113 INT_PTR CALLBACK
114 CustomPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
115 {
116 UNREFERENCED_PARAMETER(lParam);
117
118 switch (uMsg)
119 {
120 case WM_INITDIALOG:
121 break;
122
123 case WM_COMMAND:
124 switch (LOWORD(wParam))
125 {
126 case IDOK:
127 EndDialog(hwndDlg,LOWORD(wParam));
128 break;
129
130 case IDCANCEL:
131 EndDialog(hwndDlg,LOWORD(wParam));
132 break;
133 }
134 break;
135
136 case WM_NOTIFY:
137 break;
138
139 case WM_SYSCOMMAND:
140 switch (LOWORD(wParam))
141 {
142 case SC_CONTEXTHELP:
143 // Not implemented yet
144 break;
145 }
146 break;
147 }
148 return 0;
149 }
150
151 INT_PTR CALLBACK
152 AddPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
153 {
154 UNREFERENCED_PARAMETER(lParam);
155
156 switch (uMsg)
157 {
158 case WM_INITDIALOG:
159 break;
160
161 case WM_COMMAND:
162 switch (LOWORD(wParam))
163 {
164 case IDC_CUSTOM_BUTTON:
165 DialogBox(hApplet,
166 MAKEINTRESOURCE(IDD_CUSTOM),
167 hwndDlg,
168 CustomPageProc);
169 break;
170
171 case IDOK:
172 EndDialog(hwndDlg,LOWORD(wParam));
173 break;
174
175 case IDCANCEL:
176 EndDialog(hwndDlg,LOWORD(wParam));
177 break;
178 }
179 break;
180
181 case WM_NOTIFY:
182 break;
183
184 case WM_SYSCOMMAND:
185 switch (LOWORD(wParam))
186 {
187 case SC_CONTEXTHELP:
188 // Not implemented yet
189 break;
190 }
191 break;
192 }
193 return 0;
194 }
195
196 /* Property page dialog callback */
197 INT_PTR CALLBACK
198 MainPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
199 {
200 static HICON s_hIcon = NULL, s_hIconSm = NULL;
201 UNREFERENCED_PARAMETER(lParam);
202
203 switch (uMsg)
204 {
205 case WM_INITDIALOG:
206 AddColumns(GetDlgItem(hwndDlg,IDC_CONTROLLER_LIST));
207 s_hIcon = LoadIconW(hApplet, MAKEINTRESOURCEW(IDI_CPLSYSTEM));
208 s_hIconSm = (HICON)LoadImageW(hApplet, MAKEINTRESOURCEW(IDI_CPLSYSTEM),
209 IMAGE_ICON,
210 GetSystemMetrics(SM_CXSMICON),
211 GetSystemMetrics(SM_CYSMICON), 0);
212 SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)s_hIcon);
213 SendMessageW(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)s_hIconSm);
214 break;
215
216 case WM_COMMAND:
217 switch (LOWORD(wParam))
218 {
219 case IDC_ADD_BUTTON:
220 DialogBox(hApplet,
221 MAKEINTRESOURCE(IDD_ADD),
222 hwndDlg,
223 AddPageProc);
224 break;
225
226 case IDC_ADVANCED_BUTTON:
227 DialogBox(hApplet,
228 MAKEINTRESOURCE(IDD_ADVANCED),
229 hwndDlg,
230 AdvancedPageProc);
231 break;
232
233 case IDOK:
234 DestroyIcon(s_hIcon);
235 DestroyIcon(s_hIconSm);
236 EndDialog(hwndDlg,LOWORD(wParam));
237 break;
238 }
239 break;
240
241 case WM_NOTIFY:
242 break;
243
244 case WM_SYSCOMMAND:
245 switch (LOWORD(wParam))
246 {
247 case SC_CLOSE:
248 DestroyIcon(s_hIcon);
249 DestroyIcon(s_hIconSm);
250 EndDialog(hwndDlg,LOWORD(wParam));
251 break;
252
253 case SC_CONTEXTHELP:
254 // Not implemented yet
255 break;
256 }
257 break;
258 }
259 return 0;
260 }
261
262 /* First Applet */
263 LONG CALLBACK
264 SystemApplet(HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
265 {
266 UNREFERENCED_PARAMETER(uMsg);
267 UNREFERENCED_PARAMETER(lParam1);
268 UNREFERENCED_PARAMETER(lParam2);
269
270 DialogBox(hApplet,
271 MAKEINTRESOURCE(IDD_PROPPAGEMAIN),
272 hwnd,
273 MainPageProc);
274
275 return (LONG)TRUE;
276 }
277
278 /* Control Panel Callback */
279 LONG CALLBACK
280 CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
281 {
282 CPLINFO *CPlInfo;
283 DWORD i;
284
285 UNREFERENCED_PARAMETER(hwndCPl);
286
287 i = (DWORD)lParam1;
288 switch (uMsg)
289 {
290 case CPL_INIT:
291 return TRUE;
292
293 case CPL_GETCOUNT:
294 return NUM_APPLETS;
295
296 case CPL_INQUIRE:
297 CPlInfo = (CPLINFO*)lParam2;
298 CPlInfo->lData = 0;
299 CPlInfo->idIcon = Applets[i].idIcon;
300 CPlInfo->idName = Applets[i].idName;
301 CPlInfo->idInfo = Applets[i].idDescription;
302 break;
303
304 case CPL_DBLCLK:
305 Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
306 break;
307 }
308
309 return FALSE;
310 }
311
312 BOOL WINAPI
313 DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
314 {
315 UNREFERENCED_PARAMETER(lpvReserved);
316
317 switch (dwReason)
318 {
319 case DLL_PROCESS_ATTACH:
320 case DLL_THREAD_ATTACH:
321 CoInitialize(NULL);
322 hApplet = hinstDLL;
323 break;
324 }
325
326 return TRUE;
327 }