| /* -*- Mode: C; tab-width: 4 -*- |
| * |
| * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| #include "ControlPanel.h" |
| #include "ConfigDialog.h" |
| #include "ConfigPropertySheet.h" |
| #include "resource.h" |
| |
| #include <DebugServices.h> |
| |
| |
| #ifdef _DEBUG |
| #define new DEBUG_NEW |
| #undef THIS_FILE |
| static char THIS_FILE[] = __FILE__; |
| #endif |
| |
| |
| static CCPApp theApp; |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // GetControlPanelApp |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| CCPApp* |
| GetControlPanelApp() |
| { |
| CCPApp * pApp = (CCPApp*) AfxGetApp(); |
| |
| check( pApp ); |
| check( pApp->IsKindOf( RUNTIME_CLASS( CCPApp ) ) ); |
| |
| return pApp; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CPlApplet |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LONG APIENTRY |
| CPlApplet(HWND hWndCPl, UINT uMsg, LONG lParam1, LONG lParam2) |
| { |
| AFX_MANAGE_STATE(AfxGetStaticModuleState()); |
| |
| CCPApp * pApp = GetControlPanelApp(); |
| |
| return ( LONG ) pApp->OnCplMsg(hWndCPl, uMsg, lParam1, lParam2); |
| } |
| |
| |
| IMPLEMENT_DYNAMIC(CCPApplet, CCmdTarget); |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::CCPApplet |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| CCPApplet::CCPApplet(UINT resourceId, UINT descId, CRuntimeClass * uiClass) |
| : |
| m_resourceId(resourceId), |
| m_descId(descId), |
| m_uiClass(uiClass), |
| m_pageNumber(0) |
| { |
| check( uiClass ); |
| check( uiClass->IsDerivedFrom( RUNTIME_CLASS( CDialog ) ) || |
| uiClass->IsDerivedFrom( RUNTIME_CLASS( CPropertySheet ) ) ); |
| |
| m_name.LoadString(resourceId); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::~CCPApplet |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| CCPApplet::~CCPApplet() |
| { |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::OnStartParms |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApplet::OnStartParms(CWnd * pParentWnd, LPCTSTR extra) |
| { |
| DEBUG_UNUSED( pParentWnd ); |
| |
| if ( extra ) |
| { |
| m_pageNumber = ::_ttoi( extra ) - 1; |
| } |
| |
| return 0; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::OnRun |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApplet::OnRun(CWnd* pParentWnd) |
| { |
| LRESULT lResult = 1; |
| CWnd * pWnd; |
| |
| InitCommonControls(); |
| |
| pWnd = (CWnd*) m_uiClass->CreateObject(); |
| |
| if ( pWnd ) |
| { |
| lResult = ERROR_SUCCESS; |
| |
| if ( pWnd->IsKindOf( RUNTIME_CLASS( CPropertySheet ) ) ) |
| { |
| CPropertySheet * pSheet = (CPropertySheet*) pWnd; |
| |
| pSheet->Construct(m_name, pParentWnd, m_pageNumber); |
| |
| pSheet->DoModal(); |
| } |
| else |
| { |
| check( pWnd->IsKindOf( RUNTIME_CLASS( CDialog ) ) ); |
| |
| CDialog * pDialog = (CDialog*) pWnd; |
| |
| pDialog->DoModal(); |
| } |
| |
| delete pWnd; |
| } |
| |
| return lResult; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::OnInquire |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApplet::OnInquire(CPLINFO* pInfo) |
| { |
| pInfo->idIcon = m_resourceId; |
| pInfo->idName = m_resourceId; |
| pInfo->idInfo = m_descId; |
| pInfo->lData = reinterpret_cast<LONG>(this); |
| |
| return 0; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::OnNewInquire |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApplet::OnNewInquire(NEWCPLINFO* pInfo) |
| { |
| DEBUG_UNUSED( pInfo ); |
| |
| return 1; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::OnSelect |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApplet::OnSelect() |
| { |
| return 0; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApplet::OnStop |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApplet::OnStop() |
| { |
| return 0; |
| } |
| |
| |
| IMPLEMENT_DYNAMIC(CCPApp, CWinApp); |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApp::CCPApp |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| CCPApp::CCPApp() |
| { |
| debug_initialize( kDebugOutputTypeWindowsEventLog, "DNS-SD Control Panel", GetModuleHandle( NULL ) ); |
| debug_set_property( kDebugPropertyTagPrintLevel, kDebugLevelInfo ); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApp::~CCPApp |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| CCPApp::~CCPApp() |
| { |
| while ( !m_applets.IsEmpty() ) |
| { |
| delete m_applets.RemoveHead(); |
| } |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApp::AddApplet |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| void |
| CCPApp::AddApplet( CCPApplet * applet ) |
| { |
| check( applet ); |
| |
| m_applets.AddTail( applet ); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApp::OnInit |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApp::OnInit() |
| { |
| CCPApplet * applet; |
| |
| try |
| { |
| applet = new CCPApplet( IDR_APPLET, IDS_APPLET_DESCRIPTION, RUNTIME_CLASS( CConfigPropertySheet ) ); |
| } |
| catch (...) |
| { |
| applet = NULL; |
| } |
| |
| require_action( applet, exit, kNoMemoryErr ); |
| |
| AddApplet( applet ); |
| |
| exit: |
| |
| return m_applets.GetCount(); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApp::OnExit |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApp::OnExit() |
| { |
| return 1; |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------------------------------------- |
| // CCPApp::OnCplMsg |
| //--------------------------------------------------------------------------------------------------------------------------- |
| |
| LRESULT |
| CCPApp::OnCplMsg(HWND hWndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2) |
| { |
| LRESULT lResult = 1; |
| |
| switch ( uMsg ) |
| { |
| case CPL_INIT: |
| { |
| lResult = OnInit(); |
| } |
| break; |
| |
| case CPL_EXIT: |
| { |
| lResult = OnExit(); |
| } |
| break; |
| |
| case CPL_GETCOUNT: |
| { |
| lResult = m_applets.GetCount(); |
| } |
| break; |
| |
| default: |
| { |
| POSITION pos = m_applets.FindIndex( lParam1 ); |
| check( pos ); |
| |
| CCPApplet * applet = m_applets.GetAt( pos ); |
| check( applet ); |
| |
| switch (uMsg) |
| { |
| case CPL_INQUIRE: |
| { |
| LPCPLINFO pInfo = reinterpret_cast<LPCPLINFO>(lParam2); |
| lResult = applet->OnInquire(pInfo); |
| } |
| break; |
| |
| case CPL_NEWINQUIRE: |
| { |
| LPNEWCPLINFO pInfo = reinterpret_cast<LPNEWCPLINFO>(lParam2); |
| lResult = applet->OnNewInquire(pInfo); |
| } |
| break; |
| |
| case CPL_STARTWPARMS: |
| { |
| CWnd * pParentWnd = CWnd::FromHandle(hWndCPl); |
| LPCTSTR lpszExtra = reinterpret_cast<LPCTSTR>(lParam2); |
| lResult = applet->OnStartParms(pParentWnd, lpszExtra); |
| } |
| break; |
| |
| case CPL_DBLCLK: |
| { |
| CWnd* pParentWnd = CWnd::FromHandle(hWndCPl); |
| lResult = applet->OnRun(pParentWnd); |
| } |
| break; |
| |
| case CPL_SELECT: |
| { |
| lResult = applet->OnSelect(); |
| } |
| break; |
| |
| case CPL_STOP: |
| { |
| lResult = applet->OnStop(); |
| } |
| break; |
| |
| default: |
| { |
| // TRACE(_T("Warning, Received an unknown control panel message:%d\n"), uMsg); |
| lResult = 1; |
| } |
| break; |
| } |
| } |
| break; |
| } |
| |
| return lResult; |
| } |