EXTOBJ.H

///////////////////////////////////////////////////////////////////////////// 
//
//Copyright (c) 1997 <company name>
//
//Module Name:
//ExtObj.h
//
//Abstract:
//Definition of the CExtObject class, which implements the
//extension interfaces required by a Microsoft Windows NT Cluster
//Administrator Extension DLL.
//
//Implementation File:
//ExtObj.cpp
//
//Author:
//<name> (<e-mail name>) Mmmm DD, 1997
//
//Revision History:
//
//Notes:
//
/////////////////////////////////////////////////////////////////////////////

#ifndef _EXTOBJ_H_
#define _EXTOBJ_H_

/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////

#ifndef __cluadmex_h__
#include <CluAdmEx.h>// for CLUADMEX_OBJECT_TYPE and interfaces
#endif

#ifndef __extobj_idl_h__
#include "ExtObjID.h"// for CLSID_CoSmbSmpEx
#endif

/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////

class CExtObject;
class CObjData;
class CResData;

/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////

class CBasePropertyPage;

/////////////////////////////////////////////////////////////////////////////
// CPageList
/////////////////////////////////////////////////////////////////////////////

typedef CList<CBasePropertyPage *, CBasePropertyPage *> CPageList;

/////////////////////////////////////////////////////////////////////////////
// class CObjData
/////////////////////////////////////////////////////////////////////////////

class CObjData
{
public:
CStringm_strName;
CLUADMEX_OBJECT_TYPEm_cot;

virtual ~CObjData(void) { }

}; //*** class CObjData

/////////////////////////////////////////////////////////////////////////////
// class CNodeData
/////////////////////////////////////////////////////////////////////////////

class CNodeData : public CObjData
{
public:
HNODEm_hnode;

}; //*** class CNodeData

/////////////////////////////////////////////////////////////////////////////
// class CGroupData
/////////////////////////////////////////////////////////////////////////////

class CGroupData : public CObjData
{
public:
HGROUPm_hgroup;

}; //*** class CGroupData

/////////////////////////////////////////////////////////////////////////////
// class CResData
/////////////////////////////////////////////////////////////////////////////

class CResData : public CObjData
{
public:
HRESOURCEm_hresource;
CStringm_strResTypeName;

}; //*** class CResData

/////////////////////////////////////////////////////////////////////////////
// class CNetworkData
/////////////////////////////////////////////////////////////////////////////

class CNetworkData : public CObjData
{
public:
HNETWORKm_hnetwork;

}; //*** class CNetworkData

/////////////////////////////////////////////////////////////////////////////
// class CNetInterfaceData
/////////////////////////////////////////////////////////////////////////////

class CNetInterfaceData : public CObjData
{
public:
HNETINTERFACEm_hnetinterface;

}; //*** class CNetInterfaceData

/////////////////////////////////////////////////////////////////////////////
// class CExtObject
/////////////////////////////////////////////////////////////////////////////

//REVIEW -- using pointers to ID's is necessary because some compilers don't like
//references as template arguments.

class CExtObject :
public IWEExtendPropertySheet,
public IWEExtendWizard,
public ISupportErrorInfo,
public CComObjectRoot,
public CComCoClass<CExtObject, &CLSID_CoSmbSmpEx>
{
public:
CExtObject(void);
BEGIN_COM_MAP(CExtObject)
COM_INTERFACE_ENTRY(IWEExtendPropertySheet)
COM_INTERFACE_ENTRY(IWEExtendWizard)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
//DECLARE_NOT_AGGREGATABLE(CExtObject)
// Remove the comment from the line above if you don't want your object to
// support aggregation. The default is to support it

DECLARE_REGISTRY(CExtObject, _T("CLUADMEX.SmbSmpEx"), _T("CLUADMEX.SmbSmpEx"), IDS_CLUADMEX_COMOBJ_DESC, THREADFLAGS_APARTMENT)

// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);

// IWEExtendPropertySheet
public:
STDMETHOD(CreatePropertySheetPages)(
IN IUnknown *piData,
IN IWCPropertySheetCallback *piCallback
);

// IWEExtendWizard
public:
STDMETHOD(CreateWizardPages)(
IN IUnknown *piData,
IN IWCWizardCallback *piCallback
);

// Attributes
protected:
IUnknown *m_piData;
IWCWizardCallback *m_piWizardCallback;
BOOLm_bWizard;
DWORDm_istrResTypeName;

// IGetClusterUIInfo data
LCIDm_lcid;
HFONTm_hfont;
HICONm_hicon;

// IGetClusterDataInfo data
HCLUSTERm_hcluster;
LONGm_cobj;

CObjData *m_podObjData;

CObjData *PodObjDataRW(void) const{ return m_podObjData; }
CResData *PrdResDataRW(void) const{ return (CResData *) m_podObjData; }

public:
IUnknown *PiData(void) const{ return m_piData; }
IWCWizardCallback *PiWizardCallback(void) const{ return m_piWizardCallback; }
BOOLBWizard(void) const{ return m_bWizard; }
DWORDIstrResTypeName(void) const{ return m_istrResTypeName; }

// IGetClusterUIInfo data
LCIDLcid(void) const{ return m_lcid; }
HFONTHfont(void) const{ return m_hfont; }
HICONHicon(void) const{ return m_hicon; }

// IGetClusterDataInfo data
HCLUSTERHcluster(void) const{ return m_hcluster; }
LONGCobj(void) const{ return m_cobj; }

const CObjData *PodObjData(void) const{ return m_podObjData; }
const CNodeData *PndNodeData(void) const{ ASSERT(Cot() == CLUADMEX_OT_NODE); return (CNodeData *) m_podObjData; }
const CGroupData *PgdGroupData(void) const{ ASSERT(Cot() == CLUADMEX_OT_GROUP); return (CGroupData *) m_podObjData; }
const CResData *PrdResData(void) const{ ASSERT(Cot() == CLUADMEX_OT_RESOURCE); return (CResData *) m_podObjData; }
const CNetworkData *PndNetworkData(void) const{ ASSERT(Cot() == CLUADMEX_OT_NETWORK); return (CNetworkData *) m_podObjData; }
const CNetInterfaceData *PndNetInterfaceData(void) const{ ASSERT(Cot() == CLUADMEX_OT_NETINTERFACE); return (CNetInterfaceData *) m_podObjData; }

CLUADMEX_OBJECT_TYPECot(void) const{ ASSERT(PodObjData() != NULL); return PodObjData()->m_cot; }

HRESULTHrGetUIInfo(IUnknown * piData);
HRESULTHrSaveData(IUnknown * piData);
HRESULTHrGetObjectInfo(void);
HRESULTHrGetObjectName(IN OUT IGetClusterObjectInfo * pi);
HRESULTHrGetResourceTypeName(IN OUT IGetClusterResourceInfo * pi);

// Implementation
protected:
virtual ~CExtObject(void);

CPageListm_lpg;
CPageList &Lpg(void){ return m_lpg; }

}; //*** class CExtObject

/////////////////////////////////////////////////////////////////////////////

#endif // _EXTOBJ_H_