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