Source code of Windows XP (NT5)
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.
|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-2000 Microsoft Corporation
//
// Module Name:
// BasePSht.cpp
//
// Abstract:
// Implementation of the CBasePropertySheet class.
//
// Author:
// David Potter (davidp) August 31, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BasePSht.h"
#include "ClusItem.h"
#include "TraceTag.h"
#include "BasePPag.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// Global Variables
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
CTraceTag g_tagBasePropSheet(_T("UI"), _T("BASE PROP SHEET"), 0); #endif
/////////////////////////////////////////////////////////////////////////////
// CBasePropertySheet
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CBasePropertySheet, CBaseSheet)
/////////////////////////////////////////////////////////////////////////////
// Message Maps
/////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CBasePropertySheet, CBaseSheet) //{{AFX_MSG_MAP(CBasePropertySheet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::CBasePropertySheet
//
// Routine Description:
// Constructor.
//
// Arguments:
// pParentWnd [IN OUT] Parent window for this property sheet.
// iSelectPage [IN] Page to show first.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
CBasePropertySheet::CBasePropertySheet( IN OUT CWnd * pParentWnd, IN UINT iSelectPage ) : CBaseSheet(pParentWnd, iSelectPage) { m_pci = NULL;
} //*** CBasePropertySheet::CBaseSheet()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::~CBasePropertySheet
//
// Routine Description:
// Destructor.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
CBasePropertySheet::~CBasePropertySheet(void) { if (m_pci != NULL) m_pci->Release();
} //*** CBasePropertySheet::~CBasePropertySheet()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::BInit
//
// Routine Description:
// Initialize the property sheet.
//
// Arguments:
// pci [IN OUT] Cluster item whose properties are to be displayed.
// iimgIcon [IN] Index in the large image list for the image to use
// as the icon on each page.
//
// Return Value:
// TRUE Property sheet initialized successfully.
// FALSE Error initializing property sheet.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CBasePropertySheet::BInit( IN OUT CClusterItem * pci, IN IIMG iimgIcon ) { BOOL bSuccess = TRUE; CWaitCursor wc;
ASSERT_VALID(pci);
// Call the base class method.
if (!CBaseSheet::BInit(iimgIcon)) return FALSE;
ASSERT(m_pci == NULL); m_pci = pci; pci->AddRef();
try { // Set the object title.
m_strObjTitle = Pci()->PszTitle();
// Set the property sheet caption.
SetCaption(StrObjTitle());
// Add non-extension pages.
{ CBasePropertyPage ** ppages = Ppages(); int cpages = Cpages(); int ipage;
ASSERT(ppages != NULL); ASSERT(cpages != 0);
for (ipage = 0 ; ipage < cpages ; ipage++) { ASSERT_VALID(ppages[ipage]); ppages[ipage]->BInit(this); AddPage(ppages[ipage]); } // for: each page
} // Add non-extension pages
// Add extension pages.
AddExtensionPages(Pci()->PlstrExtensions(), Pci());
} // try
catch (CException * pe) { pe->ReportError(); pe->Delete(); bSuccess = FALSE; } // catch: anything
return bSuccess;
} //*** CBasePropertySheet::BInit()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::DoModal
//
// Routine Description:
// Display a modal property sheet.
//
// Arguments:
// None.
//
// Return Value:
// id Control the user pressed to dismiss the sheet.
//
//--
/////////////////////////////////////////////////////////////////////////////
INT_PTR CBasePropertySheet::DoModal(void) { INT_PTR id = IDCANCEL;
// Don't display a help button.
m_psh.dwFlags &= ~PSH_HASHELP;
// Display the property sheet.
id = CBaseSheet::DoModal();
// Update the state.
Trace(g_tagBasePropSheet, _T("DoModal: Calling UpdateState()")); Pci()->UpdateState();
return id;
} //*** CBasePropertySheet::DoModal()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::AddExtensionPages
//
// Routine Description:
// Add extension pages to the sheet.
//
// Arguments:
// plstrExtensions [IN] List of extension names (CLSIDs).
// pci [IN OUT] Cluster item.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CBasePropertySheet::AddExtensionPages( IN const CStringList * plstrExtensions, IN OUT CClusterItem * pci ) { ASSERT_VALID(pci);
// Add extension pages.
if ((plstrExtensions != NULL) && (plstrExtensions->GetCount() > 0)) { // Enclose the loading of the extension in a try/catch block so
// that the loading of the extension won't prevent all pages
// from being displayed.
try { Ext().CreatePropertySheetPages( this, *plstrExtensions, pci, NULL, Hicon() ); } // try
catch (CException * pe) { pe->ReportError(); pe->Delete(); } // catch: CException
catch (...) { } // catch: anything
} // Add extension pages
} //*** CBasePropertySheet::AddExtensionPages()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::HrAddPage
//
// Routine Description:
// Add an extension page.
//
// Arguments:
// hpage [IN OUT] Page to be added.
//
// Return Value:
// TRUE Page added successfully.
// FALSE Page not added.
//
//--
/////////////////////////////////////////////////////////////////////////////
HRESULT CBasePropertySheet::HrAddPage(IN OUT HPROPSHEETPAGE hpage) { HRESULT hr = ERROR_SUCCESS;
ASSERT(hpage != NULL); if (hpage == NULL) return FALSE;
// Add the page to the end of the list.
try { Lhpage().AddTail(hpage); } // try
catch (...) { hr = ERROR_NOT_ENOUGH_MEMORY; } // catch: anything
return hr;
} //*** CBasePropertySheet::HrAddPage()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::OnInitDialog
//
// Routine Description:
// Handler for the WM_INITDIALOG message.
//
// Arguments:
// None.
//
// Return Value:
// TRUE Focus not set yet.
// FALSE Focus already set.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CBasePropertySheet::OnInitDialog(void) { BOOL bFocusNotSet;
bFocusNotSet = CBaseSheet::OnInitDialog();
// Add all the extension pages.
{ POSITION pos; HPROPSHEETPAGE hpage;
pos = Lhpage().GetHeadPosition(); while (pos != NULL) { hpage = (HPROPSHEETPAGE) Lhpage().GetNext(pos); SendMessage(PSM_ADDPAGE, 0, (LPARAM) hpage); } // while: more pages to add
} // Add all the extension pages
return bFocusNotSet;
} //*** CBasePropertySheet::OnInitDialog()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBasePropertySheet::SetCaption
//
// Routine Description:
// Set the caption for the property sheet.
//
// Arguments:
// pszTitle [IN] String to be included in the caption.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CBasePropertySheet::SetCaption(IN LPCTSTR pszTitle) { CString strCaption;
ASSERT(pszTitle != NULL);
try { strCaption.FormatMessage(IDS_PROPSHEET_CAPTION, pszTitle); SetTitle(strCaption); } // try
catch (CException * pe) { // Ignore the error.
pe->Delete(); } // catch: CException
} //*** CBasePropertySheet::SetCaption()
|