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.
 
 
 
 
 
 

128 lines
3.3 KiB

/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
CLASSINF.H
Abstract:
History:
--*/
#ifndef __HMM_CLASS_INFO__H_
#define __HMM_CLASS_INFO__H_
#include <windows.h>
#include <objbase.h>
#include "providl.h"
#include "unk.h"
#include "arrtempl.h"
#include "hmmstr.h"
#include <wstring.h>
#include "project.h"
#include "trees.h"
class CHmmClassInfo
{
protected:
WString m_wsClassName;
BOOL m_bIncludeChildren;
CPropertyList m_Selected;
public:
CHmmClassInfo(CLifeControl* pControl)
: m_bIncludeChildren(FALSE), m_Selected(pControl, NULL)
{
m_Selected.AddRef();
if(pControl) pControl->Release(&m_Selected);
}
void SetControl(CLifeControl* pControl)
{
m_Selected.SetControl(pControl);
}
void Load(HMM_CLASS_INFO ci);
void Save(HMM_CLASS_INFO& ci);
inline CPropertyList& GetSelected() {return m_Selected;}
inline WString& AccessClassName() {return m_wsClassName;}
inline BOOL& AccessIncludeChildren() {return m_bIncludeChildren;}
public:
static HRESULT CheckObjectAgainstMany(
IN long lNumInfos,
IN CHmmClassInfo** apInfos,
IN IHmmPropertySource* pSource,
OUT IHmmPropertyList** ppList,
OUT long* plIndex);
CHmmNode* GetTree();
};
//*****************************************************************************
//
// IMPORTANT: there is an issue with someone holding on to a CPropertyList
// pointer while someone else calls RemoveAllInfos!
//
//*****************************************************************************
class CClassInfoFilter : public CUnk
{
protected:
class XFilter : public CImpl<IHmmClassInfoFilter, CClassInfoFilter>
{
public:
XFilter(CClassInfoFilter* pObj)
: CImpl<IHmmClassInfoFilter, CClassInfoFilter>(pObj){}
STDMETHOD(CheckObject)(IN IHmmPropertySource* pObject,
IN OUT IHmmPropertyList** ppList,
IN OUT IUnknown** ppHint);
STDMETHOD(IsSpecial)();
STDMETHOD(GetType)(OUT IID* piid);
STDMETHOD(GetSelectedPropertyList)(
IN long lFlags, // necessary, sufficient
OUT IHmmPropertyList** ppList);
STDMETHOD(GetClassInfos)(
IN long lFirstIndex,
IN long lNumInfos,
OUT long* plInfosReturned,
OUT HMM_CLASS_INFO* aInfos);
} m_XFilter;
friend XFilter;
class XConfigure : public CImpl<IConfigureHmmClassInfoFilter, CClassInfoFilter>
{
public:
XConfigure(CClassInfoFilter* pObj)
: CImpl<IConfigureHmmClassInfoFilter, CClassInfoFilter>(pObj){}
STDMETHOD(AddClassInfos)(IN long lNumInfos, IN HMM_CLASS_INFO* aInfos);
STDMETHOD(RemoveAllInfos)();
} m_XConfigure;
friend XConfigure;
protected:
CUniquePointerArray<CHmmClassInfo> m_apTokens;
CContainerControl m_MemberLife;
CHmmNode* m_pTree;
inline void InvalidateTree() {if(m_pTree) m_pTree->Release(); m_pTree = NULL;}
public:
CClassInfoFilter(CLifeControl* pControl, IUnknown* pOuter)
: CUnk(pControl, pOuter), m_XFilter(this), m_XConfigure(this),
m_MemberLife(GetUnknown()), m_pTree(NULL)
{}
~CClassInfoFilter();
void* GetInterface(REFIID riid);
CHmmNode* GetTree();
};
#endif