You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
381 lines
9.5 KiB
381 lines
9.5 KiB
/* -*- 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;
|
|
}
|