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.
 
 
 
 
 
 

567 lines
14 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-1999 Microsoft Corporation
//
// Module Name:
// LCPair.h
//
// Abstract:
// Definition of the CModifyNodesDlg and CModifyResourcesDlg dialogs.
//
// Implementation File:
// LCPair.cpp
//
// Author:
// David Potter (davidp) April 16, 1998
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __LCPAIR_H_
#define __LCPAIR_H_
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
template < class T, class BaseT > class CModifyNodesDlg;
template < class T, class BaseT > class CModifyResourcesDlg;
class CModifyPreferredOwners;
class CModifyPossibleOwners;
class CModifyDependencies;
/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CClusGroupInfo;
class CClusResInfo;
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
#ifndef __CLUSOBJ_H_
#include "ClusObj.h" // for CClusterObject, CClusObjPtrList
#endif
#ifndef __ATLLCPAIR_H_
#include "AtlLCPair.h" // for CListCtrlPair
#endif
#ifndef __ATLBASEDLG_H_
#include "AtlBaseDlg.h" // for CBaseDlg
#endif
#ifndef __HELPDATA_H_
#include "HelpData.h" // for control id to help context id mapping array
#endif
/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// class CModifyNodesDlg
/////////////////////////////////////////////////////////////////////////////
template < class T, class BaseT >
class CModifyNodesDlg : public CListCtrlPair< T, CClusNodeInfo, BaseT >
{
typedef CModifyNodesDlg< T, BaseT > thisClass;
typedef CListCtrlPair< T, CClusNodeInfo, BaseT > baseClass;
public:
//
// Construction
//
// Constructor taking a string pointer for the title
CModifyNodesDlg(
IN CClusterAppWizard * pwiz,
IN DWORD dwStyle,
IN LPCTSTR pszTitle = NULL
)
: baseClass(
dwStyle | /*LCPS_PROPERTIES_BUTTON | */(dwStyle & LCPS_ORDERED ? LCPS_CAN_BE_ORDERED : 0),
pszTitle
)
{
ASSERT( pwiz != NULL );
m_pwiz = pwiz;
} //*** CModifyNodesDlg()
// Constructor taking a resource ID for the title
CModifyNodesDlg(
IN CClusterAppWizard * pwiz,
IN DWORD dwStyle,
IN UINT nIDCaption
)
: baseClass(
dwStyle | /*LCPS_PROPERTIES_BUTTON | */(dwStyle & LCPS_ORDERED ? LCPS_CAN_BE_ORDERED : 0),
nIDCaption
)
{
ASSERT( pwiz != NULL );
m_pwiz = pwiz;
} //*** CModifyNodesDlg()
protected:
CClusterAppWizard * m_pwiz;
public:
CClusterAppWizard * Pwiz( void ) const { return m_pwiz; }
public:
//
// Functions that are required to be implemented by CListCtrlPair.
//
// Get column text and image
void GetColumnInfo(
IN OUT CClusNodeInfo * pobj,
IN int iItem,
IN int icol,
OUT CString & rstr,
OUT int * piimg
)
{
switch ( icol )
{
case 0:
rstr = pobj->RstrName();
break;
default:
ASSERT( 0 );
break;
} // switch: icol
} //*** GetColumnInfo()
// Display an application-wide message box
virtual int AppMessageBox( LPCWSTR lpszText, UINT fuStyle )
{
return ::AppMessageBox( m_hWnd, lpszText, fuStyle );
} //*** AppMessageBox()
public:
//
// Message map.
//
// BEGIN_MSG_MAP( thisClass )
// CHAIN_MSG_MAP( baseClass )
// END_MSG_MAP()
//
// Message handler functions.
//
//
// Message handler overrides.
//
// Handler for the WM_INITDIALOG message
BOOL OnInitDialog( void )
{
//
// Add columns.
//
AddColumn( IDS_COLTEXT_NODE_NAME, 125 /* nWidth */);
//
// Call the base class.
//
return baseClass::OnInitDialog();
} //*** OnInitDialog()
//static const DWORD * PidHelpMap( void ) { return g_; };
}; //*** class CModifyNodesDlg
/////////////////////////////////////////////////////////////////////////////
// class CModifyResourcesDlg
/////////////////////////////////////////////////////////////////////////////
template < class T, class BaseT >
class CModifyResourcesDlg : public CListCtrlPair< T, CClusResInfo, BaseT >
{
typedef CModifyResourcesDlg< T, BaseT > thisClass;
typedef CListCtrlPair< T, CClusResInfo, BaseT > baseClass;
public:
//
// Construction
//
// Constructor taking a string pointer for the title
CModifyResourcesDlg(
IN CClusterAppWizard * pwiz,
IN DWORD dwStyle,
IN LPCTSTR pszTitle = NULL
)
: baseClass(
dwStyle | /*LCPS_PROPERTIES_BUTTON | */(dwStyle & LCPS_ORDERED ? LCPS_CAN_BE_ORDERED : 0),
pszTitle
)
, m_pwiz( pwiz )
{
ASSERT( pwiz != NULL);
} //*** CModifyResourcesDlg()
// Constructor taking a resource ID for the title
CModifyResourcesDlg(
IN CClusterAppWizard * pwiz,
IN DWORD dwStyle,
IN UINT nIDCaption
)
: baseClass(
dwStyle | /*LCPS_PROPERTIES_BUTTON | */(dwStyle & LCPS_ORDERED ? LCPS_CAN_BE_ORDERED : 0),
nIDCaption
)
, m_pwiz( pwiz )
{
ASSERTE( pwiz != NULL );
} //*** CModifyResourcesDlg()
protected:
CClusterAppWizard * m_pwiz;
public:
CClusterAppWizard * Pwiz( void ) const { return m_pwiz; }
public:
//
// Functions that are required to be implemented by CListCtrlPair.
//
// Get column text and image
void GetColumnInfo(
IN OUT CClusResInfo * pobj,
IN int iItem,
IN int icol,
OUT CString & rstr,
OUT int * piimg
)
{
switch ( icol )
{
case 0:
rstr = pobj->RstrName();
break;
case 1:
rstr = pobj->Prti()->RstrDisplayName();
break;
default:
ASSERT( 0 );
break;
} // switch: icol
} //*** GetColumnInfo()
// Display an application-wide message box
virtual int AppMessageBox( LPCWSTR lpszText, UINT fuStyle )
{
return ::AppMessageBox( m_hWnd, lpszText, fuStyle );
} //*** AppMessageBox()
public:
//
// Message map.
//
// BEGIN_MSG_MAP( thisClass )
// CHAIN_MSG_MAP( baseClass )
// END_MSG_MAP()
//
// Message handler functions.
//
//
// Message handler overrides.
//
// Handler for the WM_INITDIALOG message
BOOL OnInitDialog( void )
{
//
// Add columns.
//
AddColumn( IDS_COLTEXT_RESOURCE_NAME, 125 /* nWidth */);
AddColumn( IDS_COLTEXT_RESOURCE_TYPE, 100 /* nWidth */);
//
// Call the base class.
//
return baseClass::OnInitDialog();
} //*** OnInitDialog()
//static const DWORD * PidHelpMap( void ) { return g_; };
}; //*** class CModifyResourcesDlg
/////////////////////////////////////////////////////////////////////////////
// class CModifyPreferredOwners
/////////////////////////////////////////////////////////////////////////////
class CModifyPreferredOwners : public CModifyNodesDlg< CModifyPreferredOwners, CBaseDlg< CModifyPreferredOwners > >
{
typedef CModifyNodesDlg< CModifyPreferredOwners, CBaseDlg< CModifyPreferredOwners > > baseClass;
public:
// Constructor
CModifyPreferredOwners(
IN CClusterAppWizard * pwiz,
IN CClusGroupInfo * pgi,
IN OUT CClusNodePtrList * plpniRight,
IN CClusNodePtrList * plpniLeft
)
: baseClass( pwiz, LCPS_SHOW_IMAGES | LCPS_ALLOW_EMPTY | LCPS_CAN_BE_ORDERED | LCPS_ORDERED )
, m_pgi( pgi )
, m_plpniRight( plpniRight )
, m_plpniLeft( plpniLeft )
{
ASSERT( pgi != NULL );
ASSERT( plpniRight != NULL );
ASSERT( plpniLeft != NULL );
} //*** CModifyPreferredOwners()
enum { IDD = IDD_MODIFY_PREFERRED_OWNERS };
DECLARE_CTRL_NAME_MAP()
protected:
CClusGroupInfo * m_pgi;
CClusNodePtrList * m_plpniRight;
CClusNodePtrList * m_plpniLeft;
public:
//
// Functions that are required to be implemented by CListCtrlPair.
//
// Return list of objects for right list control
CClusNodePtrList * PlpobjRight( void ) const
{
return m_plpniRight;
} //*** PlpobjRight()
// Return list of objects for left list control
CClusNodePtrList * PlpobjLeft( void ) const
{
return m_plpniLeft;
} //*** PlpobjRight()
static const DWORD * PidHelpMap( void ) { return g_aHelpIDs_IDD_MODIFY_PREFERRED_OWNERS; };
}; //*** class CModifyPreferredOwners
/////////////////////////////////////////////////////////////////////////////
// class CModifyPossibleOwners
/////////////////////////////////////////////////////////////////////////////
class CModifyPossibleOwners : public CModifyNodesDlg< CModifyPossibleOwners, CBaseDlg< CModifyPossibleOwners > >
{
typedef CModifyNodesDlg< CModifyPossibleOwners, CBaseDlg< CModifyPossibleOwners > > baseClass;
public:
// Constructor
CModifyPossibleOwners(
IN CClusterAppWizard * pwiz,
IN CClusResInfo * pri,
IN OUT CClusNodePtrList * plpniRight,
IN CClusNodePtrList * plpniLeft
)
: baseClass( pwiz, LCPS_SHOW_IMAGES | LCPS_ALLOW_EMPTY )
, m_pri( pri )
, m_plpniRight( plpniRight )
, m_plpniLeft( plpniLeft )
{
ASSERT( pri != NULL );
ASSERT( plpniRight != NULL );
ASSERT( plpniLeft != NULL );
} //*** CModifyPossibleOwners()
enum { IDD = IDD_MODIFY_POSSIBLE_OWNERS };
DECLARE_CTRL_NAME_MAP()
protected:
CClusResInfo * m_pri;
CClusNodePtrList * m_plpniRight;
CClusNodePtrList * m_plpniLeft;
public:
//
// Functions that are required to be implemented by CListCtrlPair.
//
// Return list of objects for right list control
CClusNodePtrList * PlpobjRight( void ) const
{
return m_plpniRight;
} //*** PlpobjRight()
// Return list of objects for left list control
CClusNodePtrList * PlpobjLeft( void ) const
{
return m_plpniLeft;
} //*** PlpobjRight()
static const DWORD * PidHelpMap( void ) { return g_aHelpIDs_IDD_MODIFY_POSSIBLE_OWNERS; };
}; //*** class CModifyPossibleOwners
/////////////////////////////////////////////////////////////////////////////
// class CModifyDependencies
/////////////////////////////////////////////////////////////////////////////
class CModifyDependencies
: public CModifyResourcesDlg< CModifyDependencies, CBaseDlg< CModifyDependencies > >
{
typedef CModifyResourcesDlg< CModifyDependencies, CBaseDlg< CModifyDependencies > > baseClass;
public:
// Constructor
CModifyDependencies(
IN CClusterAppWizard * pwiz,
IN CClusResInfo * pri,
IN OUT CClusResPtrList * plpriRight,
IN CClusResPtrList * plpriLeft
)
: baseClass( pwiz, LCPS_SHOW_IMAGES | LCPS_ALLOW_EMPTY )
, m_pri( pri )
, m_plpriRight( plpriRight )
, m_plpriLeft( plpriLeft )
{
ASSERT( pri != NULL );
ASSERT( plpriRight != NULL );
ASSERT( plpriLeft != NULL );
} //*** CModifyDependencies()
enum { IDD = IDD_MODIFY_DEPENDENCIES };
DECLARE_CTRL_NAME_MAP()
protected:
CClusResInfo * m_pri;
CClusResPtrList * m_plpriRight;
CClusResPtrList * m_plpriLeft;
public:
//
// Functions that are required to be implemented by CListCtrlPair.
//
// Return list of objects for right list control
CClusResPtrList * PlpobjRight( void ) const
{
return m_plpriRight;
} //*** PlpobjRight()
// Return list of objects for left list control
CClusResPtrList * PlpobjLeft( void ) const
{
return m_plpriLeft;
} //*** PlpobjRight()
// Update data on or from the dialog
BOOL UpdateData( IN BOOL bSaveAndValidate )
{
BOOL bSuccess = TRUE;
bSuccess = baseClass::UpdateData( bSaveAndValidate );
if ( bSuccess )
{
if ( bSaveAndValidate )
{
//
// Ensure all required dependencies are present.
//
if ( ! Pwiz()->BRequiredDependenciesPresent( m_pri, &LpobjRight() ) )
{
bSuccess = FALSE;
} // if: all required dependencies not present
} // if: saving data from the dialog
} // if: base class was successful
return bSuccess;
} //*** UpdateData()
static const DWORD * PidHelpMap( void ) { return g_aHelpIDs_IDD_MODIFY_DEPENDENCIES; };
}; //*** class CModifyDependencies
/////////////////////////////////////////////////////////////////////////////
// Global Variables
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CModifyPreferredOwners Control Name Map
BEGIN_CTRL_NAME_MAP( CModifyPreferredOwners )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_LEFT_LABEL )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_LEFT_LIST )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_ADD )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_REMOVE )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_RIGHT_LABEL )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_RIGHT_LIST )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_MOVE_UP )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_MOVE_DOWN )
DEFINE_CTRL_NAME_MAP_ENTRY( IDOK )
DEFINE_CTRL_NAME_MAP_ENTRY( IDCANCEL )
END_CTRL_NAME_MAP()
/////////////////////////////////////////////////////////////////////////////
// CModifyPossibleOwners Control Name Map
BEGIN_CTRL_NAME_MAP( CModifyPossibleOwners )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_LEFT_LABEL )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_LEFT_LIST )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_ADD )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_REMOVE )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_RIGHT_LABEL )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_RIGHT_LIST )
DEFINE_CTRL_NAME_MAP_ENTRY( IDOK )
DEFINE_CTRL_NAME_MAP_ENTRY( IDCANCEL )
END_CTRL_NAME_MAP()
/////////////////////////////////////////////////////////////////////////////
// CModifyDependencies Control Name Map
BEGIN_CTRL_NAME_MAP( CModifyDependencies )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_LEFT_LABEL )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_LEFT_LIST )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_ADD )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_REMOVE )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_RIGHT_LABEL )
DEFINE_CTRL_NAME_MAP_ENTRY( ADMC_IDC_LCP_RIGHT_LIST )
DEFINE_CTRL_NAME_MAP_ENTRY( IDOK )
DEFINE_CTRL_NAME_MAP_ENTRY( IDCANCEL )
END_CTRL_NAME_MAP()
/////////////////////////////////////////////////////////////////////////////
#endif // __LCPAIR_H_