|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-1999 Microsoft Corporation
//
// Module Name:
// AtlExtDll.h
//
// Implementation File:
// AtlExtDll.cpp
//
// Description:
// Definition of the Cluster Administrator extension classes.
//
// Author:
// David Potter (davidp) May 31, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __ATLEXTDLL_H_
#define __ATLEXTDLL_H_
// Required because of class names longer than 16 characters in lists.
#pragma warning( disable : 4786 ) // identifier was truncated to '255' characters ni the browser information
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
#ifndef __cluadmex_h__
#include <CluAdmEx.h> // for extension DLL definitions
#endif
#ifndef __cluadmexhostsvr_h__
#include "CluAdmExHostSvr.h" // for CLSIDs
#endif
#ifndef __CLUADMEXDATAOBJ_H_
#include "CluAdmExDataObj.h" // for CCluAdmExDataObject
#endif
//#ifndef _TRACETAG_H_
//#include "TraceTag.h" // for CTraceTag, Trace
//#endif
#ifndef __ATLEXTMENU_H_
#include "AtlExtMenu.h" // for CCluAdmExMenuItemList
#endif
#ifndef __ATLBASEPROPPAGE_H_
#include "AtlBasePropPage.h" // for CBasePropertyPageImpl
#endif
#ifndef __ATLBASEWIZPAGE_H_
#include "AtlBaseWizPage.h" // for CBaseWizardPageImpl
#endif
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CCluAdmExtensions; class CCluAdmExDll; class CCluAdmExPropPage; class CCluAdmExWizPage; class CCluAdmExWiz97Page;
/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CClusterObject; class CBaseSheetWindow; class CBasePropertySheetWindow; class CWizardWindow;
/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////
#define CAEXT_MENU_FIRST_ID 35000
typedef CComObject< CCluAdmExDll > CComCluAdmExDll; typedef std::list< CComCluAdmExDll * > CCluAdmExDllList; typedef std::list< CString > CStringList;
/////////////////////////////////////////////////////////////////////////////
// Global Variable Definitions
/////////////////////////////////////////////////////////////////////////////
//#if DBG
//extern CTraceTag g_tagExtDll;
//extern CTraceTag g_tagExtDllRef;
//#endif // DBG
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CCluAdmExtensions
//
// Description:
// Encapsulates access to a list of extension DLLs.
//
// Inheritance:
// CCluAdmExtensions
//
//--
/////////////////////////////////////////////////////////////////////////////
class CCluAdmExtensions { friend class CCluAdmExDll;
public: //
// Construction.
//
// Default constructor
CCluAdmExtensions( void ) : m_pco( NULL ) , m_hfont( NULL ) , m_hicon( NULL )
, m_pdoData( NULL ) , m_plextdll( NULL ) , m_psht( NULL ) , m_pmenu( NULL ) , m_plMenuItems( NULL )
, m_nFirstCommandID( (ULONG) -1 ) , m_nNextCommandID( (ULONG) -1 ) , m_nFirstMenuID( (ULONG) -1 ) , m_nNextMenuID( (ULONG) -1 ) { } //*** CCluAdmExtensions()
// Destructor
virtual ~CCluAdmExtensions( void ) { UnloadExtensions();
} //*** ~CCluAdmExtensions()
protected: // Initialize the list
void Init( IN const CStringList & rlstrExtensions, IN OUT CClusterObject * pco, IN HFONT hfont, IN HICON hicon );
// Unload all the extensions
void UnloadExtensions( void );
// Attributes
private: const CStringList * m_plstrExtensions; // List of extensions.
CClusterObject * m_pco; // Cluster item being administered.
HFONT m_hfont; // Font for dialog text.
HICON m_hicon; // Icon for upper left corner.
protected: //
// Accessor methods.
//
const CStringList * PlstrExtensions( void ) const { return m_plstrExtensions; } CClusterObject * Pco( void ) const { return m_pco; } HFONT Hfont( void ) const { return m_hfont; } HICON Hicon( void ) const { return m_hicon; }
// Operations
public: //
// IWEExtendPropertySheet methods.
//
// Create extension property sheet pages
void CreatePropertySheetPages( IN OUT CBasePropertySheetWindow * psht, IN const CStringList & rlstrExtensions, IN OUT CClusterObject * pco, IN HFONT hfont, IN HICON hicon );
public: //
// IWEExtendWizard methods.
//
// Create extension wizard pages
void CreateWizardPages( IN OUT CWizardWindow * psht, IN const CStringList & rlstrExtensions, IN OUT CClusterObject * pco, IN HFONT hfont, IN HICON hicon );
public: //
// IWEExtendWizard97 methods.
//
// Create extension Wizard97 wizard pages
void CreateWizard97Pages( IN OUT CWizardWindow * psht, IN const CStringList & rlstrExtensions, IN OUT CClusterObject * pco, IN HFONT hfont, IN HICON hicon );
public: //
// IWEExtendContextMenu methods.
//
// Add extension context menu items
void AddContextMenuItems( IN OUT CMenu * pmenu, IN const CStringList & rlstrExtensions, IN OUT CClusterObject * pco );
// Execute an extension context menu item
BOOL BExecuteContextMenuItem( IN ULONG nCommandID );
// Get a command string to display on the status bar
BOOL BGetCommandString( IN ULONG nCommandID, OUT CString & rstrMessage );
// Set the GetResNetName function pointer
void SetPfGetResNetName( PFGETRESOURCENETWORKNAME pfGetResNetName, PVOID pvContext ) { if ( Pdo() != NULL ) { Pdo()->SetPfGetResNetName( pfGetResNetName, pvContext ); } // if: data object specified
} //*** SetPfGetResNetName()
// Implementation
private: CComObject< CCluAdmExDataObject > * m_pdoData; // Data object for exchanging data.
CCluAdmExDllList * m_plextdll; // List of extension DLLs.
CBaseSheetWindow * m_psht; // Property sheet for IWEExtendPropertySheet.
CMenu * m_pmenu; // Menu for IWEExtendContextMenu.
CCluAdmExMenuItemList * m_plMenuItems;
ULONG m_nFirstCommandID; ULONG m_nNextCommandID; ULONG m_nFirstMenuID; ULONG m_nNextMenuID;
protected: CComObject< CCluAdmExDataObject > * Pdo( void ) { return m_pdoData; } CCluAdmExDllList * Plextdll( void ) const { return m_plextdll; } CBaseSheetWindow * Psht( void ) const { return m_psht; } CMenu * Pmenu( void ) const { return m_pmenu; } CCluAdmExMenuItemList * PlMenuItems( void ) const { return m_plMenuItems; } CCluAdmExMenuItem * PemiFromCommandID( ULONG nCommandID ) const; #if DBG
CCluAdmExMenuItem * PemiFromExtCommandID( ULONG nExtCommandID ) const; #endif // DBG
ULONG NFirstCommandID( void ) const { return m_nFirstCommandID; } ULONG NNextCommandID( void ) const { return m_nNextCommandID; } ULONG NFirstMenuID( void ) const { return m_nFirstMenuID; } ULONG NNextMenuID( void ) const { return m_nNextMenuID; }
// Get the wizard page pointer from an HPROPSHEETPAGE
CWizardPageWindow * PwpPageFromHpage( IN HPROPSHEETPAGE hpage );
public: // void OnUpdateCommand( CCmdUI * pCmdUI );
// BOOL OnCmdMsg( UINT nID, int nCode, void * pExtra, AFX_CMDHANDLERINFO * pHandlerInfo );
}; //*** class CCluAdmExtensions
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CCluAdmExDll
//
// Description:
// Encapsulates access to an extension DLL.
//
// Inheritance:
// CCluAdmExDll
// CComObjectRootEx<>, CComCoClass<>, <interface classes>
//
//--
/////////////////////////////////////////////////////////////////////////////
class ATL_NO_VTABLE CCluAdmExDll : public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CCluAdmExDll, &CLSID_CoCluAdmExHostSvr >, public ISupportErrorInfo, public IWCPropertySheetCallback, public IWCWizardCallback, public IWCWizard97Callback, public IWCContextMenuCallback { friend class CCluAdmExtensions;
public: //
// Object construction and destruction.
//
// Default constructor
CCluAdmExDll( void ) : m_piExtendPropSheet( NULL ) , m_piExtendWizard( NULL ) , m_piExtendWizard97( NULL ) , m_piExtendContextMenu( NULL ) , m_piInvokeCommand( NULL ) , m_pext( NULL ) { } //*** CCluAdmExDll()
// Destructor
virtual ~CCluAdmExDll( void ) { UnloadExtension();
} //*** ~CCluAdmExDll()
//
// Map interfaces to this class.
//
BEGIN_COM_MAP( CCluAdmExDll ) COM_INTERFACE_ENTRY( IWCPropertySheetCallback ) COM_INTERFACE_ENTRY( IWCWizardCallback ) COM_INTERFACE_ENTRY( IWCWizard97Callback ) COM_INTERFACE_ENTRY( IWCContextMenuCallback ) COM_INTERFACE_ENTRY( ISupportErrorInfo ) END_COM_MAP()
DECLARE_NO_REGISTRY()
DECLARE_NOT_AGGREGATABLE( CCluAdmExDll )
// Attributes
private: CString m_strCLSID; // Name of extension DLL.
protected: const CString & StrCLSID( void ) const { return m_strCLSID; } CClusterObject * Pco( void ) const { return Pext()->Pco(); }
// Operations
public:
void Init( IN const CString & rstrExtension, IN OUT CCluAdmExtensions * pext );
IUnknown * LoadInterface( IN const REFIID riid ); void UnloadExtension( void );
public: //
// IWEExtendPropertySheet methods.
//
// Create extension property sheet pages
void CreatePropertySheetPages( void );
public: //
// IWEExtendWizard methods.
//
// Create extension wizard pages
void CreateWizardPages( void );
public: //
// IWEExtendWizard97 methods.
//
// Create extension wizard pages
void CreateWizard97Pages( void );
public: //
// IWEExtendContextMenu methods.
//
// Add extension context menu items
void AddContextMenuItems( void );
public: //
// ISupportsErrorInfo methods.
//
STDMETHOD( InterfaceSupportsErrorInfo )( REFIID riid );
public: //
// IWCPropertySheetCallback methods.
//
// Callback to add extension property sheet pages
STDMETHOD( AddPropertySheetPage )( IN LONG * hpage // really should be HPROPSHEETPAGE
);
public: //
// IWCWizardCallback methods.
//
// Callback to add extension wizard pages
STDMETHOD( AddWizardPage )( IN LONG * hpage // really should be HPROPSHEETPAGE
);
public: //
// IWCWizard97Callback methods.
//
// Callback to add extension wizard 97 pages
STDMETHOD( AddWizard97Page )( IN LONG * hpage // really should be HPROPSHEETPAGE
);
public: //
// IWCWizardCallback and IWCWizard97Callback methods.
//
// Callback to enable the next button
STDMETHOD( EnableNext )( IN LONG * hpage, IN BOOL bEnable );
public: //
// IWCContextMenuCallback methods.
//
// Callback to add extension context menu items
STDMETHOD( AddExtensionMenuItem )( IN BSTR lpszName, IN BSTR lpszStatusBarText, IN ULONG nCommandID, IN ULONG nSubmenuCommandID, IN ULONG uFlags );
// Implementation
private: CCluAdmExtensions * m_pext; CLSID m_clsid; IWEExtendPropertySheet * m_piExtendPropSheet; // Pointer to an IWEExtendPropertySheet interface.
IWEExtendWizard * m_piExtendWizard; // Pointer to an IWEExtendWizard interface.
IWEExtendWizard97 * m_piExtendWizard97; // Pointer to an IWEExtendWizard97 interface.
IWEExtendContextMenu * m_piExtendContextMenu; // Pointer to an IWEExtendContextMenu interface.
IWEInvokeCommand * m_piInvokeCommand; // Pointer to an IWEInvokeCommand interface.
protected: CCluAdmExtensions * Pext( void ) const { ATLASSERT( m_pext != NULL ); return m_pext; } const CLSID & Rclsid( void ) const { return m_clsid; } IWEExtendPropertySheet * PiExtendPropSheet( void ) const { return m_piExtendPropSheet; } IWEExtendWizard * PiExtendWizard( void ) const { return m_piExtendWizard; } IWEExtendWizard97 * PiExtendWizard97( void ) const { return m_piExtendWizard97; } IWEExtendContextMenu * PiExtendContextMenu( void ) const { return m_piExtendContextMenu; } IWEInvokeCommand * PiInvokeCommand( void ) const { return m_piInvokeCommand; }
CComObject< CCluAdmExDataObject > * Pdo( void ) const { return Pext()->Pdo(); } CBaseSheetWindow * Psht( void ) const { return Pext()->Psht(); } CMenu * Pmenu( void ) const { return Pext()->Pmenu(); } CCluAdmExMenuItemList * PlMenuItems( void ) const { return Pext()->PlMenuItems(); } ULONG NFirstCommandID( void ) const { return Pext()->NFirstCommandID(); } ULONG NNextCommandID( void ) const { return Pext()->NNextCommandID(); } ULONG NFirstMenuID( void ) const { return Pext()->NFirstMenuID(); } ULONG NNextMenuID( void ) const { return Pext()->NNextMenuID(); }
void ReleaseInterface( IN OUT IUnknown ** ppi #if DBG
, IN LPCTSTR szClassName #endif
) { ATLASSERT( ppi != NULL ); if ( *ppi != NULL ) { #if DBG
ULONG ulNewRefCount;
// Trace( g_tagExtDllRef, _T("Releasing %s"), szClassName );
ulNewRefCount = #endif // DBG
(*ppi)->Release(); *ppi = NULL; #if DBG
// Trace( g_tagExtDllRef, _T(" Reference count = %d"), ulNewRefCount );
// Trace( g_tagExtDllRef, _T("ReleaseInterface() - %s = %08.8x"), szClassName, *ppi );
#endif // DBG
} // if: interface specified
} //*** ReleaseInterface( IUnknown )
void ReleaseInterface( IN OUT IWEExtendPropertySheet ** ppi ) { ReleaseInterface( (IUnknown **) ppi #if DBG
, _T("IWEExtendPropertySheet") #endif // DBG
); } //*** ReleaseInterface( IWEExtendPropertySheet )
void ReleaseInterface( IN OUT IWEExtendWizard ** ppi ) { ReleaseInterface( (IUnknown **) ppi #if DBG
, _T("IWEExtendWizard") #endif // DBG
); } //*** ReleaseInterface( IWEExtendWizard )
void ReleaseInterface( IN OUT IWEExtendWizard97 ** ppi ) { ReleaseInterface( (IUnknown **) ppi #if DBG
, _T("IWEExtendWizard97") #endif // DBG
); } //*** ReleaseInterface( IWEExtendWizard97 )
void ReleaseInterface( IN OUT IWEExtendContextMenu ** ppi ) { ReleaseInterface( (IUnknown **) ppi #if DBG
, _T("IWEExtendContextMenu") #endif // DBG
); } //*** ReleaseInterface( IWEExtendContextMenu )
void ReleaseInterface( IN OUT IWEInvokeCommand ** ppi ) { ReleaseInterface( (IUnknown **) ppi #if DBG
, _T("IWEInvokeCommand") #endif // DBG
); } //*** ReleaseInterface( IWEInvokeCommand )
}; //*** class CCluAdmExDll
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CCluAdmExPropPage
//
// Description:
// Encapsulates an extension property page.
//
// Inheritance:
// CCluAdmExPropPage
// CExtensionPropertyPageImpl< CCluAdmExPropPage >
// CBasePropertyPageImpl< CCluAdmExPropPage, CExtensionPropertyPageWindow >
// CBasePageImpl< CCluAdmExPropPage, CExtensionPropertyPageWindow >
// CPropertyPageImpl< CCluAdmExPropPage, CExtensionPropertyPageWindow >
// CExtensionPropertyPageWindow
// CDynamicPropertyPageWindow
// CBasePropertyPageWindow
// CBasePageWindow
// CPropertyPageWindow
//
//--
/////////////////////////////////////////////////////////////////////////////
class CCluAdmExPropPage : public CExtensionPropertyPageImpl< CCluAdmExPropPage > { public: //
// Construction.
//
// Standard constructor
CCluAdmExPropPage( HPROPSHEETPAGE hpage ) { ATLASSERT( hpage != NULL ); m_hpage = hpage;
} //*** CCluAdmExPropPage()
enum { IDD = 0 }; DECLARE_CLASS_NAME()
// Return the help ID map
static const DWORD * PidHelpMap( void ) { static const DWORD s_aHelpIDs[] = { 0, 0 }; return s_aHelpIDs;
} //*** PidHelpMap()
// Create the page
DWORD ScCreatePage( void ) { //
// This method is required by CDynamicPropertyPageWindow.
//
return ERROR_SUCCESS;
} //*** ScCreatePage()
}; //*** class CCluAdmExPropPage
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CCluAdmExWizPage
//
// Description:
// Encapsulates an extension wizard page.
//
// Inheritance:
// CCluAdmExWizPage
// CExtensionWizardPageImpl< CCluAdmExWizPage >
// CWizardPageImpl< CCluAdmExWizPage, CExtensionWizardWindow >
// CBasePageImpl< CCluAdmExWizPage, CExtensionWizardWindow >
// CPropertyPageImpl< CCluAdmExWizPage, CExtensionWizardWindow >
// CExtensionWizardPageWindow
// CDynamicWizardPageWindow
// CWizardPageWindow
// CBasePageWindow
// CPropertyPageWindow
//
//--
/////////////////////////////////////////////////////////////////////////////
class CCluAdmExWizPage : public CExtensionWizardPageImpl< CCluAdmExWizPage > { public: //
// Construction.
//
// Standard constructor
CCluAdmExWizPage( HPROPSHEETPAGE hpage ) { ATLASSERT( hpage != NULL ); m_hpage = hpage;
} //*** CCluAdmExWizPage()
WIZARDPAGE_HEADERTITLEID( 0 ) WIZARDPAGE_HEADERSUBTITLEID( 0 )
enum { IDD = 0 }; DECLARE_CLASS_NAME()
// Return the help ID map
static const DWORD * PidHelpMap( void ) { static const DWORD s_aHelpIDs[] = { 0, 0 }; return s_aHelpIDs;
} //*** PidHelpMap()
// Create the page
DWORD ScCreatePage( void ) { //
// This method is required by CDynamicWizardPageWindow.
//
return ERROR_SUCCESS;
} //*** ScCreatePage()
}; //*** class CCluAdmExWizPage
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CCluAdmExWiz97Page
//
// Description:
// Encapsulates an extension Wizard 97 page.
//
// Inheritance:
// CCluAdmExWiz97Page
// CExtensionWizard97PageImpl< CCluAdmExWiz97Page >
// CWizardPageImpl< CCluAdmExWiz97Page, CExtensionWizard97Window >
// CBasePageImpl< CCluAdmExWiz97Page, CExtensionWizard97Window >
// CPropertyPageImpl< CCluAdmExWiz97Page, CExtensionWizard97Window >
// CExtensionWizard97PageWindow
// CExtensionWizardPageWindow
// CDynamicWizardPageWindow
// CWizardPageWindow
// CBasePageWindow
// CPropertyPageWindow
//
//--
/////////////////////////////////////////////////////////////////////////////
class CCluAdmExWiz97Page : public CExtensionWizard97PageImpl< CCluAdmExWiz97Page > { public: //
// Construction.
//
// Standard constructor
CCluAdmExWiz97Page( HPROPSHEETPAGE hpage ) { ATLASSERT( hpage != NULL ); m_hpage = hpage;
} //*** CCluAdmExWiz97Page()
WIZARDPAGE_HEADERTITLEID( 0 ) WIZARDPAGE_HEADERSUBTITLEID( 0 )
enum { IDD = 0 }; DECLARE_CLASS_NAME()
// Return the help ID map
static const DWORD * PidHelpMap( void ) { static const DWORD s_aHelpIDs[] = { 0, 0 }; return s_aHelpIDs;
} //*** PidHelpMap()
// Create the page
DWORD ScCreatePage( void ) { //
// This method is required by CDynamicWizardPageWindow.
//
return ERROR_SUCCESS;
} //*** ScCreatePage()
}; //*** class CCluAdmExWiz97Page
/////////////////////////////////////////////////////////////////////////////
// Global Variables
/////////////////////////////////////////////////////////////////////////////
DEFINE_CLASS_NAME( CCluAdmExPropPage ) DEFINE_CLASS_NAME( CCluAdmExWizPage ) DEFINE_CLASS_NAME( CCluAdmExWiz97Page )
/////////////////////////////////////////////////////////////////////////////
#endif // __ATLEXTDLL_H_
|