1 /* -*- Mode: C; tab-width: 4 -*- 2 * 3 * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 19 #include "ControlPanel.h" 20 #include "ConfigDialog.h" 21 #include "ConfigPropertySheet.h" 22 #include "resource.h" 23 24 #include <DebugServices.h> 25 26 27 #ifdef _DEBUG 28 #define new DEBUG_NEW 29 #undef THIS_FILE 30 static char THIS_FILE[] = __FILE__; 31 #endif 32 33 34 static CCPApp theApp; 35 36 37 //--------------------------------------------------------------------------------------------------------------------------- 38 // GetControlPanelApp 39 //--------------------------------------------------------------------------------------------------------------------------- 40 41 CCPApp* 42 GetControlPanelApp() 43 { 44 CCPApp * pApp = (CCPApp*) AfxGetApp(); 45 46 check( pApp ); 47 check( pApp->IsKindOf( RUNTIME_CLASS( CCPApp ) ) ); 48 49 return pApp; 50 } 51 52 53 //--------------------------------------------------------------------------------------------------------------------------- 54 // CPlApplet 55 //--------------------------------------------------------------------------------------------------------------------------- 56 57 LONG APIENTRY 58 CPlApplet(HWND hWndCPl, UINT uMsg, LONG lParam1, LONG lParam2) 59 { 60 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 61 62 CCPApp * pApp = GetControlPanelApp(); 63 64 return ( LONG ) pApp->OnCplMsg(hWndCPl, uMsg, lParam1, lParam2); 65 } 66 67 68 IMPLEMENT_DYNAMIC(CCPApplet, CCmdTarget); 69 70 71 //--------------------------------------------------------------------------------------------------------------------------- 72 // CCPApplet::CCPApplet 73 //--------------------------------------------------------------------------------------------------------------------------- 74 75 CCPApplet::CCPApplet(UINT resourceId, UINT descId, CRuntimeClass * uiClass) 76 : 77 m_resourceId(resourceId), 78 m_descId(descId), 79 m_uiClass(uiClass), 80 m_pageNumber(0) 81 { 82 check( uiClass ); 83 check( uiClass->IsDerivedFrom( RUNTIME_CLASS( CDialog ) ) || 84 uiClass->IsDerivedFrom( RUNTIME_CLASS( CPropertySheet ) ) ); 85 86 m_name.LoadString(resourceId); 87 } 88 89 90 //--------------------------------------------------------------------------------------------------------------------------- 91 // CCPApplet::~CCPApplet 92 //--------------------------------------------------------------------------------------------------------------------------- 93 94 CCPApplet::~CCPApplet() 95 { 96 } 97 98 99 //--------------------------------------------------------------------------------------------------------------------------- 100 // CCPApplet::OnStartParms 101 //--------------------------------------------------------------------------------------------------------------------------- 102 103 LRESULT 104 CCPApplet::OnStartParms(CWnd * pParentWnd, LPCTSTR extra) 105 { 106 DEBUG_UNUSED( pParentWnd ); 107 108 if ( extra ) 109 { 110 m_pageNumber = ::_ttoi( extra ) - 1; 111 } 112 113 return 0; 114 } 115 116 117 //--------------------------------------------------------------------------------------------------------------------------- 118 // CCPApplet::OnRun 119 //--------------------------------------------------------------------------------------------------------------------------- 120 121 LRESULT 122 CCPApplet::OnRun(CWnd* pParentWnd) 123 { 124 LRESULT lResult = 1; 125 CWnd * pWnd; 126 127 InitCommonControls(); 128 129 pWnd = (CWnd*) m_uiClass->CreateObject(); 130 131 if ( pWnd ) 132 { 133 lResult = ERROR_SUCCESS; 134 135 if ( pWnd->IsKindOf( RUNTIME_CLASS( CPropertySheet ) ) ) 136 { 137 CPropertySheet * pSheet = (CPropertySheet*) pWnd; 138 139 pSheet->Construct(m_name, pParentWnd, m_pageNumber); 140 141 pSheet->DoModal(); 142 } 143 else 144 { 145 check( pWnd->IsKindOf( RUNTIME_CLASS( CDialog ) ) ); 146 147 CDialog * pDialog = (CDialog*) pWnd; 148 149 pDialog->DoModal(); 150 } 151 152 delete pWnd; 153 } 154 155 return lResult; 156 } 157 158 159 //--------------------------------------------------------------------------------------------------------------------------- 160 // CCPApplet::OnInquire 161 //--------------------------------------------------------------------------------------------------------------------------- 162 163 LRESULT 164 CCPApplet::OnInquire(CPLINFO* pInfo) 165 { 166 pInfo->idIcon = m_resourceId; 167 pInfo->idName = m_resourceId; 168 pInfo->idInfo = m_descId; 169 pInfo->lData = reinterpret_cast<LONG>(this); 170 171 return 0; 172 } 173 174 175 //--------------------------------------------------------------------------------------------------------------------------- 176 // CCPApplet::OnNewInquire 177 //--------------------------------------------------------------------------------------------------------------------------- 178 179 LRESULT 180 CCPApplet::OnNewInquire(NEWCPLINFO* pInfo) 181 { 182 DEBUG_UNUSED( pInfo ); 183 184 return 1; 185 } 186 187 188 //--------------------------------------------------------------------------------------------------------------------------- 189 // CCPApplet::OnSelect 190 //--------------------------------------------------------------------------------------------------------------------------- 191 192 LRESULT 193 CCPApplet::OnSelect() 194 { 195 return 0; 196 } 197 198 199 //--------------------------------------------------------------------------------------------------------------------------- 200 // CCPApplet::OnStop 201 //--------------------------------------------------------------------------------------------------------------------------- 202 203 LRESULT 204 CCPApplet::OnStop() 205 { 206 return 0; 207 } 208 209 210 IMPLEMENT_DYNAMIC(CCPApp, CWinApp); 211 212 //--------------------------------------------------------------------------------------------------------------------------- 213 // CCPApp::CCPApp 214 //--------------------------------------------------------------------------------------------------------------------------- 215 216 CCPApp::CCPApp() 217 { 218 debug_initialize( kDebugOutputTypeWindowsEventLog, "DNS-SD Control Panel", GetModuleHandle( NULL ) ); 219 debug_set_property( kDebugPropertyTagPrintLevel, kDebugLevelInfo ); 220 } 221 222 223 //--------------------------------------------------------------------------------------------------------------------------- 224 // CCPApp::~CCPApp 225 //--------------------------------------------------------------------------------------------------------------------------- 226 227 CCPApp::~CCPApp() 228 { 229 while ( !m_applets.IsEmpty() ) 230 { 231 delete m_applets.RemoveHead(); 232 } 233 } 234 235 236 //--------------------------------------------------------------------------------------------------------------------------- 237 // CCPApp::AddApplet 238 //--------------------------------------------------------------------------------------------------------------------------- 239 240 void 241 CCPApp::AddApplet( CCPApplet * applet ) 242 { 243 check( applet ); 244 245 m_applets.AddTail( applet ); 246 } 247 248 249 //--------------------------------------------------------------------------------------------------------------------------- 250 // CCPApp::OnInit 251 //--------------------------------------------------------------------------------------------------------------------------- 252 253 LRESULT 254 CCPApp::OnInit() 255 { 256 CCPApplet * applet; 257 258 try 259 { 260 applet = new CCPApplet( IDR_APPLET, IDS_APPLET_DESCRIPTION, RUNTIME_CLASS( CConfigPropertySheet ) ); 261 } 262 catch (...) 263 { 264 applet = NULL; 265 } 266 267 require_action( applet, exit, kNoMemoryErr ); 268 269 AddApplet( applet ); 270 271 exit: 272 273 return m_applets.GetCount(); 274 } 275 276 277 //--------------------------------------------------------------------------------------------------------------------------- 278 // CCPApp::OnExit 279 //--------------------------------------------------------------------------------------------------------------------------- 280 281 LRESULT 282 CCPApp::OnExit() 283 { 284 return 1; 285 } 286 287 288 //--------------------------------------------------------------------------------------------------------------------------- 289 // CCPApp::OnCplMsg 290 //--------------------------------------------------------------------------------------------------------------------------- 291 292 LRESULT 293 CCPApp::OnCplMsg(HWND hWndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2) 294 { 295 LRESULT lResult = 1; 296 297 switch ( uMsg ) 298 { 299 case CPL_INIT: 300 { 301 lResult = OnInit(); 302 } 303 break; 304 305 case CPL_EXIT: 306 { 307 lResult = OnExit(); 308 } 309 break; 310 311 case CPL_GETCOUNT: 312 { 313 lResult = m_applets.GetCount(); 314 } 315 break; 316 317 default: 318 { 319 POSITION pos = m_applets.FindIndex( lParam1 ); 320 check( pos ); 321 322 CCPApplet * applet = m_applets.GetAt( pos ); 323 check( applet ); 324 325 switch (uMsg) 326 { 327 case CPL_INQUIRE: 328 { 329 LPCPLINFO pInfo = reinterpret_cast<LPCPLINFO>(lParam2); 330 lResult = applet->OnInquire(pInfo); 331 } 332 break; 333 334 case CPL_NEWINQUIRE: 335 { 336 LPNEWCPLINFO pInfo = reinterpret_cast<LPNEWCPLINFO>(lParam2); 337 lResult = applet->OnNewInquire(pInfo); 338 } 339 break; 340 341 case CPL_STARTWPARMS: 342 { 343 CWnd * pParentWnd = CWnd::FromHandle(hWndCPl); 344 LPCTSTR lpszExtra = reinterpret_cast<LPCTSTR>(lParam2); 345 lResult = applet->OnStartParms(pParentWnd, lpszExtra); 346 } 347 break; 348 349 case CPL_DBLCLK: 350 { 351 CWnd* pParentWnd = CWnd::FromHandle(hWndCPl); 352 lResult = applet->OnRun(pParentWnd); 353 } 354 break; 355 356 case CPL_SELECT: 357 { 358 lResult = applet->OnSelect(); 359 } 360 break; 361 362 case CPL_STOP: 363 { 364 lResult = applet->OnStop(); 365 } 366 break; 367 368 default: 369 { 370 // TRACE(_T("Warning, Received an unknown control panel message:%d\n"), uMsg); 371 lResult = 1; 372 } 373 break; 374 } 375 } 376 break; 377 } 378 379 return lResult; 380 } 381