xref: /reactos/dll/cpl/joy/joy.c (revision 019f21ee)
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 }
328