//============================================================================ // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: tfsnode.h // // History: // // 04/13/97 Kenn Takara Created. // // Declarations for some common code/macros. //============================================================================ #ifndef _TFSNODE_H_ #define _TFSNODE_H_ #if _MSC_VER >= 1000 // VC 5.0 or later #pragma once #endif // UpdateAllViews hints #define RESULT_PANE_ADD_ITEM ( 0x00000001 ) #define RESULT_PANE_DELETE_ITEM ( 0x00000002 ) #define RESULT_PANE_CHANGE_ITEM_DATA ( 0x00000004 ) #define RESULT_PANE_CHANGE_ITEM_ICON ( 0x00000008 ) #define RESULT_PANE_CHANGE_ITEM ( RESULT_PANE_CHANGE_ITEM_DATA | RESULT_PANE_CHANGE_ITEM_ICON ) #define RESULT_PANE_REPAINT ( 0x00000010 ) #define RESULT_PANE_DELETE_ALL ( 0x00000020 ) #define RESULT_PANE_ADD_ALL ( 0x00000040 ) #define RESULT_PANE_COLUMN_CHANGE ( 0x00000080 ) #define RESULT_PANE_SAVE_COLUMNS ( 0x00000100 ) #define RESULT_PANE_UPDATE_VERBS ( 0x00000200 ) #define RESULT_PANE_SET_VIRTUAL_LB_SIZE ( 0x00000400 ) #define RESULT_PANE_CLEAR_VIRTUAL_LB ( 0x00000800 ) #define RESULT_PANE_EXPAND ( 0x00001000 ) #define RESULT_PANE_SHOW_MESSAGE ( 0x00002000 ) #define RESULT_PANE_CLEAR_MESSAGE ( 0x00004000 ) // Used for ChangeNode #define SCOPE_PANE_CHANGE_ITEM_DATA ( 0x00000080 ) #define SCOPE_PANE_CHANGE_ITEM_ICON ( 0x00000100 ) #define SCOPE_PANE_STATE_NORMAL ( 0x00000200 ) #define SCOPE_PANE_STATE_BOLD ( 0x00000400 ) #define SCOPE_PANE_STATE_EXPANDEDONCE ( 0x00000800 ) #define SCOPE_PANE_STATE_CLEAR ( 0x00001000 ) #define SCOPE_PANE_CHANGE_ITEM ( SCOPE_PANE_CHANGE_ITEM_DATA | \ SCOPE_PANE_CHANGE_ITEM_ICON ) typedef struct _TFSEXPANDDATA { SPITFSNode spNode; BOOL fExpand; } TFSEXPANDDATA, * LPTFSEXPANDDATA; typedef CList CTFSNodeListBase; class CTFSNodeList : public CTFSNodeListBase { public: ~CTFSNodeList() { ReleaseAllNodes(); } BOOL RemoveNode(ITFSNode* p) { POSITION pos = Find(p); if (pos == NULL) return FALSE; RemoveAt(pos); return TRUE; } void ReleaseAllNodes() { while (!IsEmpty()) RemoveTail()->Release(); } BOOL HasNode(ITFSNode* p) { return NULL != Find(p); } }; #define IMPL /*--------------------------------------------------------------------------- Class: TFSNode ---------------------------------------------------------------------------*/ class TFSNode : public ITFSNode { public: TFSNode(); virtual ~TFSNode(); DeclareIUnknownMembers(IMPL); DeclareITFSNodeMembers(IMPL); HRESULT Construct(const GUID *pNodeType, ITFSNodeHandler *pHandler, ITFSResultHandler *pResultHandler, ITFSNodeMgr *pNodeMgr); protected: HRESULT UpdateAllViewsHelper(LPARAM data, LONG_PTR hint); HRESULT InternalRemoveFromUI(ITFSNode *pNode, BOOL fDeleteThis); HRESULT InternalZeroScopeID(ITFSNode *pNode, BOOL fZeroChildren); protected: TFSVisibility m_tfsVis; LONG_PTR m_uData; // user-settable data LONG_PTR m_uDataParent; // user-settable (set by the parent) data LONG_PTR m_uType; // user-settable data LONG_PTR m_cookie; IfDebug(BOOL m_bCookieSet); SPITFSNodeHandler m_spNodeHandler; SPITFSResultHandler m_spResultHandler; BOOL m_fContainer; int m_nImageIndex; int m_nOpenImageIndex; LPARAM m_lParam; long m_cPropSheet; // # of active property pages BOOL m_fDirty; SPITFSNode m_spNodeParent; SPITFSNodeMgr m_spNodeMgr; HSCOPEITEM m_hScopeItem; const GUID * m_pNodeType; // Positional data HSCOPEITEM m_hRelativeId; ULONG m_ulRelativeFlags; BOOL m_fScopeLeafNode; LONG m_cRef; private: HRESULT InitializeScopeDataItem(LPSCOPEDATAITEM pScopeDataItem, HSCOPEITEM pParentScopeItem, LPARAM lParam, int nImage, int nOpenImage, BOOL bHasChildren, ULONG ulRelativeFlags, HSCOPEITEM hSibling); }; /*--------------------------------------------------------------------------- Class: TFSContainer ---------------------------------------------------------------------------*/ class TFSContainer : public TFSNode { public: virtual ~TFSContainer(); // specific container-related functions that we need to override STDMETHOD_(BOOL, IsContainer) (); STDMETHOD(AddChild) (ITFSNode *pNodeChild); STDMETHOD(InsertChild) (ITFSNode *pInsertAfterNode, ITFSNode *pNodeChild); STDMETHOD(RemoveChild) (ITFSNode *pNodeChild); STDMETHOD(ExtractChild) (ITFSNode *pNodeChild); STDMETHOD(GetChildCount) (int *pVis, int *pTotal); STDMETHOD(GetEnum) (ITFSNodeEnum **ppNodeEnum); STDMETHOD(DeleteAllChildren) (BOOL fRemoveFromUI); STDMETHOD(CompareChildNodes) (int *pnResult, ITFSNode *pChild1, ITFSNode *pChild2); STDMETHOD_(LONG_PTR, Notify)(int nIndex, LPARAM lParam); // we override this node interface member for containers STDMETHOD(ChangeNode)(LONG_PTR changeMask); protected: HRESULT InternalAddToList(ITFSNode *pInsertAfterNode, ITFSNode *pNode); HRESULT InternalRemoveFromList(ITFSNode *pNode); HRESULT InternalRemoveChild(ITFSNode * pChild, BOOL fRemoveFromList, BOOL fRemoveFromUI, BOOL fRemoveChildren); CTFSNodeList m_listChildren; private: friend class TFSNodeEnum; }; /*--------------------------------------------------------------------------- Class: TFSNodeEnum ---------------------------------------------------------------------------*/ class TFSNodeEnum : public ITFSNodeEnum { public: TFSNodeEnum(TFSContainer * pNode); virtual ~TFSNodeEnum(); DeclareIUnknownMembers(IMPL); DeclareITFSNodeEnumMembers(IMPL); protected: TFSContainer * m_pNode; LONG m_cRef; POSITION m_pos; private: }; /*--------------------------------------------------------------------------- Class: TFSNodeMgr ---------------------------------------------------------------------------*/ class TFSNodeMgr : public ITFSNodeMgr { public: TFSNodeMgr(); ~TFSNodeMgr(); DeclareIUnknownMembers(IMPL) DeclareITFSNodeMgrMembers(IMPL) HRESULT Construct(IComponentData *pCompData, IConsoleNameSpace2 *pConsoleNS); protected: SPIComponentData m_spComponentData; SPITFSNode m_spRootNode; SPITFSNode m_spResultPaneNode; SPIConsole m_spConsole; SPIConsoleNameSpace m_spConsoleNS; long m_cRef; }; #endif // _TFSNODE_H_