431 lines
13 KiB
C++
431 lines
13 KiB
C++
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 2001.
|
||
|
//
|
||
|
// File: Wiz97pg.cpp
|
||
|
//
|
||
|
// Contents: WiF Policy Snapin
|
||
|
//
|
||
|
//
|
||
|
// History: TaroonM
|
||
|
// 10/30/01
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
#include "stdafx.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Base classes for Wiz97 dialogs
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// CWiz97BasePage base class
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CWiz97BasePage, CSnapPage)
|
||
|
|
||
|
BOOL CWiz97BasePage::m_static_bFinish = FALSE;
|
||
|
BOOL CWiz97BasePage::m_static_bOnCancelCalled = FALSE;
|
||
|
|
||
|
CWiz97BasePage::CWiz97BasePage( UINT nIDD, BOOL bWiz97 /*= TRUE*/, BOOL bFinishPage /*= FALSE*/ ) :
|
||
|
CSnapPage( nIDD, bWiz97 ),
|
||
|
m_bSetActive( FALSE ),
|
||
|
m_bFinishPage( bFinishPage ),
|
||
|
m_pbDoAfterWizardHook( NULL ),
|
||
|
m_bReset( FALSE )
|
||
|
{
|
||
|
CWiz97BasePage::m_static_bFinish = FALSE;
|
||
|
CWiz97BasePage::m_static_bOnCancelCalled = FALSE;
|
||
|
}
|
||
|
|
||
|
CWiz97BasePage::~CWiz97BasePage()
|
||
|
{
|
||
|
// Clean up
|
||
|
m_psp.dwFlags = 0;
|
||
|
m_psp.pfnCallback = NULL;
|
||
|
m_psp.lParam = (LPARAM)NULL;
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97BasePage::OnInitDialog()
|
||
|
{
|
||
|
CSnapPage::OnInitDialog();
|
||
|
|
||
|
if ( IDD_PROPPAGE_P_WELCOME == m_nIDD )
|
||
|
{
|
||
|
SetLargeFont(m_hWnd, IDC_POLICY_WIZARD_TITLE );
|
||
|
}
|
||
|
|
||
|
|
||
|
if ( IDD_PROPPAGE_N_DONE == m_nIDD )
|
||
|
{
|
||
|
SetLargeFont(m_hWnd, IDC_POLICY_WIZARD_DONE );
|
||
|
}
|
||
|
|
||
|
OnFinishInitDialog();
|
||
|
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97BasePage::InitWiz97
|
||
|
(
|
||
|
DWORD dwFlags,
|
||
|
DWORD dwWizButtonFlags /*= 0*/,
|
||
|
UINT nHeaderTitle /*= 0*/,
|
||
|
UINT nSubTitle /*= 0*/,
|
||
|
STACK_INT *pstackPages /*= NULL*/
|
||
|
)
|
||
|
{
|
||
|
// NOTE: we wouldn't ever get here except when win97 wizards are running
|
||
|
// but we have to compile this in because its a base class, EVEN WHEN
|
||
|
// NOT DOING WIZ97 WIZARDS. To maintain the compile we have to ifdef
|
||
|
// out this call to the base class
|
||
|
|
||
|
#ifdef WIZ97WIZARDS
|
||
|
|
||
|
// Hook up our callback function
|
||
|
return CSnapPage::InitWiz97( &CWiz97BasePage::PropSheetPageCallback,
|
||
|
NULL, dwFlags, dwWizButtonFlags, nHeaderTitle, nSubTitle, pstackPages );
|
||
|
#else
|
||
|
return FALSE;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97BasePage::InitWiz97
|
||
|
(
|
||
|
CComObject<CSecPolItem> *pSecPolItem,
|
||
|
DWORD dwFlags,
|
||
|
DWORD dwWizButtonFlags /*= 0*/,
|
||
|
UINT nHeaderTitle /*= 0*/,
|
||
|
UINT nSubTitle /*= 0*/
|
||
|
)
|
||
|
{
|
||
|
// Hook up our callback function
|
||
|
return CSnapPage::InitWiz97( &CWiz97BasePage::PropSheetPageCallback,
|
||
|
pSecPolItem, dwFlags, dwWizButtonFlags, nHeaderTitle, nSubTitle );
|
||
|
}
|
||
|
|
||
|
// static member
|
||
|
UINT CALLBACK CWiz97BasePage::PropSheetPageCallback( HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp )
|
||
|
{
|
||
|
if (PSPCB_RELEASE == uMsg)
|
||
|
{
|
||
|
ASSERT( NULL != ppsp && NULL != ppsp->lParam );
|
||
|
CWiz97BasePage *pThis = reinterpret_cast<CWiz97BasePage*>(ppsp->lParam);
|
||
|
|
||
|
// Wiz97BasePage callback handling is for wizards only.
|
||
|
if (pThis->m_bWiz97)
|
||
|
{
|
||
|
if (m_static_bFinish) // Sheet is finishing
|
||
|
{
|
||
|
// Call OnWizardRelease for each page in the sheet giving each page
|
||
|
// the opportunity to clean up anything left over after the finish
|
||
|
// page's OnWizardFinish.
|
||
|
pThis->OnWizardRelease();
|
||
|
|
||
|
// If an access violation occurs here its because OnWizardRelease()
|
||
|
// is not a member of the base class. See the implementation note
|
||
|
// in wiz97run.cpp.
|
||
|
}
|
||
|
else // Sheet is cancelling
|
||
|
{
|
||
|
// Call OnCancel when it hasn't been called yet. OnCancel was already
|
||
|
// called by OnReset for pages which were activated, don't call it again.
|
||
|
if (!pThis->m_bReset)
|
||
|
pThis->OnCancel();
|
||
|
if (!CWiz97BasePage::m_static_bOnCancelCalled)
|
||
|
{
|
||
|
// Make sure base class OnCancel is called exactly once because
|
||
|
// there is only one object for the propsheet, and OnCancel
|
||
|
// refreshes it, throwing away changes. All proppages have
|
||
|
// a ptr to the same object.
|
||
|
CWiz97BasePage::m_static_bOnCancelCalled = TRUE;
|
||
|
pThis->CSnapPage::OnCancel();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return CSnapPage::PropertyPageCallback( hwnd, uMsg, ppsp );
|
||
|
}
|
||
|
|
||
|
void CWiz97BasePage::ConnectAfterWizardHook( BOOL *pbDoHook )
|
||
|
{
|
||
|
ASSERT( NULL != pbDoHook );
|
||
|
m_pbDoAfterWizardHook = pbDoHook;
|
||
|
*m_pbDoAfterWizardHook = FALSE; // initialize
|
||
|
}
|
||
|
|
||
|
void CWiz97BasePage::SetAfterWizardHook( BOOL bDoHook )
|
||
|
{
|
||
|
ASSERT( NULL != m_pbDoAfterWizardHook );
|
||
|
*m_pbDoAfterWizardHook = bDoHook;
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CWiz97BasePage message handlers
|
||
|
|
||
|
BOOL CWiz97BasePage::OnSetActive()
|
||
|
{
|
||
|
m_bSetActive = TRUE;
|
||
|
return CSnapPage::OnSetActive();
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97BasePage::OnWizardFinish()
|
||
|
{
|
||
|
// Let other wizard pages know they should finish, instead of cancel.
|
||
|
SetFinished();
|
||
|
|
||
|
// If m_pbDoAfterWizardHook is valid, caller expects it to be set.
|
||
|
// Derive this function in your class.
|
||
|
|
||
|
return CSnapPage::OnWizardFinish();
|
||
|
}
|
||
|
|
||
|
void CWiz97BasePage::OnCancel()
|
||
|
{
|
||
|
// Make sure we don't call OnCancel again for this page
|
||
|
m_bReset = TRUE;
|
||
|
|
||
|
// Note: OnCancel is ALWAYS called, even when the page has not been
|
||
|
// activated. Override this class to clean up anything that was done
|
||
|
// in InitWiz97. CSnapPage::OnCancel will be called exactly once for
|
||
|
// the Sheet by the Page callback function.
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// CWiz97PSBasePage Class
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// General Name/Properties Wiz97 dialog(s)
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
CWiz97WirelessPolGenPage::CWiz97WirelessPolGenPage(UINT nIDD, UINT nInformativeText, BOOL bWiz97) :
|
||
|
CWiz97BasePage(nIDD, bWiz97)
|
||
|
{
|
||
|
m_nInformativeText = nInformativeText;
|
||
|
m_pPolicy = NULL;
|
||
|
}
|
||
|
|
||
|
CWiz97WirelessPolGenPage::~CWiz97WirelessPolGenPage()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void CWiz97WirelessPolGenPage::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CWiz97BasePage::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CWiz97WirelessPolGenPage)
|
||
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
||
|
//}}AFX_DATA_MAP
|
||
|
if (IDD_WIFIGEN_WIZBASE == m_nIDD)
|
||
|
{
|
||
|
DDX_Control(pDX, IDC_EDNAME, m_edName);
|
||
|
DDX_Control(pDX, IDC_EDDESCRIPTION, m_edDescription);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CWiz97WirelessPolGenPage, CWiz97BasePage)
|
||
|
//{{AFX_MSG_MAP(CWiz97WirelessPolGenPage)
|
||
|
ON_EN_CHANGE(IDC_EDNAME, OnChangedName)
|
||
|
ON_EN_CHANGE(IDC_EDDESCRIPTION, OnChangedDescription)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
BOOL CWiz97WirelessPolGenPage::OnInitDialog()
|
||
|
{
|
||
|
// call base class init
|
||
|
CWiz97BasePage::OnInitDialog();
|
||
|
|
||
|
m_pPolicy = m_pspiResultItem->GetWirelessPolicy();
|
||
|
|
||
|
if (IDD_WIFIGEN_WIZBASE == m_nIDD)
|
||
|
{
|
||
|
// show the wait cursor in case there is a huge description being accessed
|
||
|
CWaitCursor waitCursor;
|
||
|
|
||
|
m_edName.SetLimitText(c_nMaxName);
|
||
|
m_edDescription.SetLimitText(c_nMaxName);
|
||
|
|
||
|
// initialize our edit controls
|
||
|
m_edName.SetWindowText (m_pPolicy->pszWirelessName);
|
||
|
m_edDescription.SetWindowText (m_pPolicy->pszDescription);
|
||
|
|
||
|
// add context help to the style bits
|
||
|
if (GetParent())
|
||
|
{
|
||
|
GetParent()->ModifyStyleEx (0, WS_EX_CONTEXTHELP, 0);
|
||
|
}
|
||
|
|
||
|
UpdateData (FALSE);
|
||
|
}
|
||
|
else if (IDD_PROPPAGE_G_NAMEDESCRIPTION == m_nIDD)
|
||
|
{
|
||
|
SendDlgItemMessage(IDC_NEW_POLICY_NAME, EM_LIMITTEXT, c_nMaxName, 0);
|
||
|
SendDlgItemMessage(IDC_NEW_POLICY_DESCRIPTION, EM_LIMITTEXT, c_nMaxName, 0);
|
||
|
}
|
||
|
|
||
|
// OK, we can start paying attention to modifications made via dlg controls now.
|
||
|
// This should be the last call before returning from OnInitDialog.
|
||
|
OnFinishInitDialog();
|
||
|
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97WirelessPolGenPage::OnHelpInfo(HELPINFO* pHelpInfo)
|
||
|
{
|
||
|
|
||
|
if (pHelpInfo->iContextType == HELPINFO_WINDOW)
|
||
|
{
|
||
|
DWORD* pdwHelp = (DWORD*) &g_aHelpIDs_IDD_PROPPAGE_G_NAMEDESCRIPTION[0];
|
||
|
::WinHelp ((HWND)pHelpInfo->hItemHandle,
|
||
|
c_szWlsnpHelpFile,
|
||
|
HELP_WM_HELP,
|
||
|
(DWORD_PTR)(LPVOID)pdwHelp);
|
||
|
}
|
||
|
|
||
|
return CWiz97BasePage::OnHelpInfo(pHelpInfo);
|
||
|
}
|
||
|
|
||
|
void CWiz97WirelessPolGenPage::OnChangedName()
|
||
|
{
|
||
|
ASSERT( IDD_WIFIGEN_WIZBASE == m_nIDD );
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
void CWiz97WirelessPolGenPage::OnChangedDescription()
|
||
|
{
|
||
|
ASSERT( IDD_WIFIGEN_WIZBASE == m_nIDD );
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97WirelessPolGenPage::OnSetActive()
|
||
|
{
|
||
|
if (IDD_WIFIGEN_WIZBASE != m_nIDD)
|
||
|
{
|
||
|
// show the wait cursor in case there is a huge description being accessed
|
||
|
CWaitCursor waitCursor;
|
||
|
|
||
|
// initialize our name/description controls with the correct name/description
|
||
|
GetDlgItem(IDC_NEW_POLICY_NAME)->SetWindowText (m_pPolicy->pszWirelessName);
|
||
|
GetDlgItem(IDC_NEW_POLICY_DESCRIPTION)->SetWindowText (m_pPolicy->pszDescription);
|
||
|
|
||
|
// set the informative text correctly
|
||
|
if (m_nInformativeText != 0)
|
||
|
{
|
||
|
// NOTE: currently the IDC_INFORMATIVETEXT control is disabled and
|
||
|
// readonly. Need to change the resource if this functionality is to
|
||
|
// be used.
|
||
|
ASSERT (0);
|
||
|
|
||
|
CString strInformativeText;
|
||
|
strInformativeText.LoadString (m_nInformativeText);
|
||
|
GetDlgItem(IDC_INFORMATIVETEXT)->SetWindowText (strInformativeText);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return CWiz97BasePage::OnSetActive();
|
||
|
}
|
||
|
|
||
|
LRESULT CWiz97WirelessPolGenPage::OnWizardBack()
|
||
|
{
|
||
|
ASSERT( IDD_WIFIGEN_WIZBASE != m_nIDD );
|
||
|
|
||
|
// skip going to the prev page if they selected 'cancel' on a data error dialog
|
||
|
return CWiz97BasePage::OnWizardBack();
|
||
|
}
|
||
|
|
||
|
LRESULT CWiz97WirelessPolGenPage::OnWizardNext()
|
||
|
{
|
||
|
ASSERT( IDD_WIFIGEN_WIZBASE != m_nIDD );
|
||
|
|
||
|
// TODO: enable this when we are sure update stuff is working
|
||
|
// refresh the display
|
||
|
// GetResultObject()->m_pComponentDataImpl->GetConsole()->UpdateAllViews (0, 0,0);
|
||
|
|
||
|
// skip going to the next page if they selected 'cancel' on a data error dialog
|
||
|
return SaveControlData() ? CWiz97BasePage::OnWizardNext() : -1;
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97WirelessPolGenPage::OnApply()
|
||
|
{
|
||
|
ASSERT( IDD_WIFIGEN_WIZBASE == m_nIDD );
|
||
|
|
||
|
// pull our data out of the controls and into the object
|
||
|
CString strName;
|
||
|
CString strDescription;
|
||
|
|
||
|
if (!UpdateData (TRUE))
|
||
|
// Data was not valid, return for user to correct it.
|
||
|
return CancelApply();
|
||
|
|
||
|
m_edName.GetWindowText (strName);
|
||
|
m_edDescription.GetWindowText (strDescription);
|
||
|
|
||
|
// verify that the name is not empty
|
||
|
CString strNameNoBlank = strName;
|
||
|
strNameNoBlank.TrimLeft();
|
||
|
if (strNameNoBlank.GetLength() == 0)
|
||
|
{
|
||
|
AfxMessageBox (IDS_WARNNONAME, MB_ICONSTOP);
|
||
|
return CancelApply();
|
||
|
}
|
||
|
|
||
|
SaveControlData();
|
||
|
|
||
|
return CWiz97BasePage::OnApply();
|
||
|
}
|
||
|
|
||
|
BOOL CWiz97WirelessPolGenPage::SaveControlData()
|
||
|
{
|
||
|
ASSERT( IDD_WIFIGEN_WIZBASE != m_nIDD );
|
||
|
|
||
|
BOOL bSaved = TRUE;
|
||
|
|
||
|
// set the wait cursor
|
||
|
CWaitCursor waitCursor;
|
||
|
|
||
|
// set the new name and description
|
||
|
CString strName, strDesc;
|
||
|
GetDlgItem(IDC_NEW_POLICY_NAME)->GetWindowText (strName);
|
||
|
GetDlgItem(IDC_NEW_POLICY_DESCRIPTION)->GetWindowText (strDesc);
|
||
|
|
||
|
// verify that the name is not empty
|
||
|
CString strNameNoBlank = strName;
|
||
|
strNameNoBlank.TrimLeft();
|
||
|
if (strNameNoBlank.GetLength() == 0)
|
||
|
{
|
||
|
AfxMessageBox (IDS_WARNNONAME, MB_ICONSTOP);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
if (m_pPolicy->pszWirelessName)
|
||
|
FreePolStr(m_pPolicy->pszWirelessName);
|
||
|
|
||
|
m_pPolicy->pszWirelessName = AllocPolStr(strName);
|
||
|
|
||
|
if (m_pPolicy->pszDescription)
|
||
|
FreePolStr(m_pPolicy->pszDescription);
|
||
|
|
||
|
m_pPolicy->pszDescription = AllocPolStr(strDesc);
|
||
|
|
||
|
|
||
|
return bSaved;
|
||
|
}
|