• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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*
GetControlPanelApp()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
CPlApplet(HWND hWndCPl,UINT uMsg,LONG lParam1,LONG lParam2)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 
CCPApplet(UINT resourceId,UINT descId,CRuntimeClass * uiClass)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 
~CCPApplet()94 CCPApplet::~CCPApplet()
95 {
96 }
97 
98 
99 //---------------------------------------------------------------------------------------------------------------------------
100 //	CCPApplet::OnStartParms
101 //---------------------------------------------------------------------------------------------------------------------------
102 
103 LRESULT
OnStartParms(CWnd * pParentWnd,LPCTSTR extra)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
OnRun(CWnd * pParentWnd)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
OnInquire(CPLINFO * pInfo)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
OnNewInquire(NEWCPLINFO * pInfo)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
OnSelect()193 CCPApplet::OnSelect()
194 {
195 	return 0;
196 }
197 
198 
199 //---------------------------------------------------------------------------------------------------------------------------
200 //	CCPApplet::OnStop
201 //---------------------------------------------------------------------------------------------------------------------------
202 
203 LRESULT
OnStop()204 CCPApplet::OnStop()
205 {
206 	return 0;
207 }
208 
209 
210 IMPLEMENT_DYNAMIC(CCPApp, CWinApp);
211 
212 //---------------------------------------------------------------------------------------------------------------------------
213 //	CCPApp::CCPApp
214 //---------------------------------------------------------------------------------------------------------------------------
215 
CCPApp()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 
~CCPApp()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
AddApplet(CCPApplet * applet)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
OnInit()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
OnExit()282 CCPApp::OnExit()
283 {
284   return 1;
285 }
286 
287 
288 //---------------------------------------------------------------------------------------------------------------------------
289 //	CCPApp::OnCplMsg
290 //---------------------------------------------------------------------------------------------------------------------------
291 
292 LRESULT
OnCplMsg(HWND hWndCPl,UINT uMsg,LPARAM lParam1,LPARAM lParam2)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