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