xref: /reactos/dll/cpl/joy/joy.c (revision 71fefa32)
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(VOID);
34 HINSTANCE hApplet = 0;
35 HWND MainDlg;
36 
37 /* Applets */
38 
39 APPLET Applets[NUM_APPLETS] =
40 {
41     {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
42 };
43 
44 VOID
45 AddColumns(HWND hList)
46 {
47     LV_COLUMN dummy;
48     RECT rect;
49     int Size;
50     TCHAR szBuf[256];
51 
52     GetClientRect(hList, &rect);
53     Size = rect.right - rect.left - 250;
54 
55     LoadString(hApplet, IDS_STATUS, szBuf, sizeof(szBuf) / sizeof(TCHAR));
56 
57     ZeroMemory(&dummy, sizeof(LV_COLUMN));
58     dummy.mask     = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
59     dummy.iSubItem = 0;
60     dummy.pszText  = (LPTSTR)szBuf;
61     dummy.cx       = Size;
62     (void)ListView_InsertColumn(hList, 0, &dummy);
63 
64     GetClientRect(hList, &rect);
65 
66     LoadString(hApplet, IDS_CONTROLLER, szBuf, sizeof(szBuf) / sizeof(TCHAR));
67 
68     ZeroMemory(&dummy, sizeof(LV_COLUMN));
69     dummy.mask     = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
70     dummy.iSubItem = 0;
71     dummy.pszText  = (LPTSTR)szBuf;
72     dummy.cx       = rect.right - rect.left - Size;
73     (void)ListView_InsertColumn(hList, 0, &dummy);
74 }
75 
76 INT_PTR CALLBACK
77 AdvancedPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
78 {
79     UNREFERENCED_PARAMETER(lParam);
80 
81     switch (uMsg)
82     {
83         case WM_INITDIALOG:
84             break;
85 
86         case WM_COMMAND:
87             switch (LOWORD(wParam))
88             {
89                 case IDOK:
90                     EndDialog(hwndDlg,LOWORD(wParam));
91                     break;
92 
93                 case IDCANCEL:
94                     EndDialog(hwndDlg,LOWORD(wParam));
95                     break;
96             }
97             break;
98 
99         case WM_NOTIFY:
100             break;
101 
102         case WM_SYSCOMMAND:
103             switch (LOWORD(wParam))
104             {
105                 case SC_CONTEXTHELP:
106                     // Not implemented yet
107                     break;
108             }
109             break;
110     }
111     return 0;
112 }
113 
114 INT_PTR CALLBACK
115 CustomPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
116 {
117     UNREFERENCED_PARAMETER(lParam);
118 
119     switch (uMsg)
120     {
121         case WM_INITDIALOG:
122             break;
123 
124         case WM_COMMAND:
125             switch (LOWORD(wParam))
126             {
127                 case IDOK:
128                     EndDialog(hwndDlg,LOWORD(wParam));
129                     break;
130 
131                 case IDCANCEL:
132                     EndDialog(hwndDlg,LOWORD(wParam));
133                     break;
134             }
135             break;
136 
137         case WM_NOTIFY:
138             break;
139 
140         case WM_SYSCOMMAND:
141             switch (LOWORD(wParam))
142             {
143                 case SC_CONTEXTHELP:
144                     // Not implemented yet
145                     break;
146             }
147             break;
148     }
149     return 0;
150 }
151 
152 INT_PTR CALLBACK
153 AddPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
154 {
155     UNREFERENCED_PARAMETER(lParam);
156 
157     switch (uMsg)
158     {
159         case WM_INITDIALOG:
160             break;
161 
162         case WM_COMMAND:
163             switch (LOWORD(wParam))
164             {
165                 case IDC_CUSTOM_BUTTON:
166                     DialogBox(hApplet,
167                               MAKEINTRESOURCE(IDD_CUSTOM),
168                               hwndDlg,
169                               CustomPageProc);
170                     break;
171 
172                 case IDOK:
173                     EndDialog(hwndDlg,LOWORD(wParam));
174                     break;
175 
176                 case IDCANCEL:
177                     EndDialog(hwndDlg,LOWORD(wParam));
178                     break;
179             }
180             break;
181 
182         case WM_NOTIFY:
183             break;
184 
185         case WM_SYSCOMMAND:
186             switch (LOWORD(wParam))
187             {
188                 case SC_CONTEXTHELP:
189                     // Not implemented yet
190                     break;
191             }
192             break;
193     }
194     return 0;
195 }
196 
197 /* Property page dialog callback */
198 INT_PTR CALLBACK
199 MainPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
200 {
201     static HICON s_hIcon = NULL, s_hIconSm = NULL;
202     UNREFERENCED_PARAMETER(lParam);
203 
204     switch (uMsg)
205     {
206         case WM_INITDIALOG:
207             AddColumns(GetDlgItem(hwndDlg,IDC_CONTROLLER_LIST));
208             s_hIcon = LoadIconW(hApplet, MAKEINTRESOURCEW(IDI_CPLSYSTEM));
209             s_hIconSm = (HICON)LoadImageW(hApplet, MAKEINTRESOURCEW(IDI_CPLSYSTEM),
210                                           IMAGE_ICON,
211                                           GetSystemMetrics(SM_CXSMICON),
212                                           GetSystemMetrics(SM_CYSMICON), 0);
213             SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)s_hIcon);
214             SendMessageW(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)s_hIconSm);
215             break;
216 
217         case WM_COMMAND:
218             switch (LOWORD(wParam))
219             {
220                 case IDC_ADD_BUTTON:
221                     DialogBox(hApplet,
222                               MAKEINTRESOURCE(IDD_ADD),
223                               hwndDlg,
224                               AddPageProc);
225                     break;
226 
227                 case IDC_ADVANCED_BUTTON:
228                     DialogBox(hApplet,
229                               MAKEINTRESOURCE(IDD_ADVANCED),
230                               hwndDlg,
231                               AdvancedPageProc);
232                     break;
233 
234                 case IDOK:
235                     DestroyIcon(s_hIcon);
236                     DestroyIcon(s_hIconSm);
237                     EndDialog(hwndDlg,LOWORD(wParam));
238                     break;
239             }
240             break;
241 
242         case WM_NOTIFY:
243             break;
244 
245         case WM_SYSCOMMAND:
246             switch (LOWORD(wParam))
247             {
248                 case SC_CLOSE:
249                     DestroyIcon(s_hIcon);
250                     DestroyIcon(s_hIconSm);
251                     EndDialog(hwndDlg,LOWORD(wParam));
252                     break;
253 
254                 case SC_CONTEXTHELP:
255                     // Not implemented yet
256                     break;
257             }
258             break;
259     }
260     return 0;
261 }
262 
263 /* First Applet */
264 LONG CALLBACK
265 SystemApplet(VOID)
266 {
267     DialogBox(hApplet,
268               MAKEINTRESOURCE(IDD_PROPPAGEMAIN),
269               MainDlg,
270               MainPageProc);
271 
272     return (LONG)TRUE;
273 }
274 
275 /* Control Panel Callback */
276 LONG CALLBACK
277 CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
278 {
279     CPLINFO *CPlInfo;
280     DWORD i;
281 
282     UNREFERENCED_PARAMETER(hwndCPl);
283 
284     i = (DWORD)lParam1;
285     switch (uMsg)
286     {
287         case CPL_INIT:
288             return TRUE;
289 
290         case CPL_GETCOUNT:
291             return NUM_APPLETS;
292 
293         case CPL_INQUIRE:
294             CPlInfo = (CPLINFO*)lParam2;
295             CPlInfo->lData = 0;
296             CPlInfo->idIcon = Applets[i].idIcon;
297             CPlInfo->idName = Applets[i].idName;
298             CPlInfo->idInfo = Applets[i].idDescription;
299             break;
300 
301         case CPL_DBLCLK:
302             {
303                 MainDlg = hwndCPl;
304                 Applets[i].AppletProc();
305             }
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