/*++ Copyright (C) 1997-1999 Microsoft Corporation Module Name: compdata.h Abstract: This class is the interface that handles anything to do with the scope pane. MMC calls the IComponentData interfaces. --*/ #ifndef __COMPDATA_H_ #define __COMPDATA_H_ #include "smlogres.h" // Resource symbols #include "smlogcfg.h" // For CLSID_ComponentData #include "Globals.h" #include "common.h" #include "smctrsv.h" #include "smtracsv.h" #include "smalrtsv.h" #include "shfusion.h" // result pane column indices #define ROOT_COL_QUERY_NAME 0 #define ROOT_COL_QUERY_NAME_SIZE 80 #define ROOT_COL_COMMENT 1 #define ROOT_COL_COMMENT_SIZE 166 #define ROOT_COL_ALERT_COMMENT_XTRA 195 #define ROOT_COL_LOG_TYPE 2 #define ROOT_COL_LOG_TYPE_SIZE 75 #define ROOT_COL_LOG_NAME 3 #define ROOT_COL_LOG_NAME_SIZE 120 #define MAIN_COL_NAME 0 #define MAIN_COL_NAME_SIZE 120 #define MAIN_COL_DESC 1 #define MAIN_COL_DESC_SIZE 321 #define EXTENSION_COL_NAME 0 #define EXTENSION_COL_TYPE 1 #define EXTENSION_COL_DESC 2 class CSmLogQuery; class CSmRootNode; class CLogWarnd; class ATL_NO_VTABLE CComponentData : public CComObjectRootEx, public IComponentData, public IExtendContextMenu, public IExtendPropertySheet, public ISnapinHelp // *** CComObjectRoot is from framewrk\stdcdata.h //public CComObjectRoot { public: CComponentData(); virtual ~CComponentData(); //DECLARE_REGISTRY_RESOURCEID(IDR_COMPONENTDATA) //DECLARE_NOT_AGGREGATABLE(CComponentData) enum eBitmapIndex { eBmpQueryStarted = 0, eBmpQueryStopped = 1, eBmpLogType = 2, eBmpRootIcon = 3, eBmpAlertType = 4 }; enum eUpdateHint { eSmHintNewQuery = 1, eSmHintPreDeleteQuery = 2, eSmHintStartQuery = 3, eSmHintStopQuery = 4, eSmHintModifyQuery = 5, eSmHintPreRefresh = 6, eSmHintRefresh = 7 }; enum eNodeType { eCounterLog = SLQ_COUNTER_LOG, eTraceLog = SLQ_TRACE_LOG, eAlert = SLQ_ALERT, eMonitor = SLQ_LAST_LOG_TYPE + 1 }; BEGIN_COM_MAP(CComponentData) COM_INTERFACE_ENTRY(IComponentData) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(ISnapinHelp) END_COM_MAP() // IComponentData methods public: STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB); STDMETHOD(GetDisplayInfo)(LPSCOPEDATAITEM pItem); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT * ppDataObject); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); STDMETHOD(CreateComponent)(LPCOMPONENT * ppComponent); STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(Destroy)(); // IExtendPropertySheet methods STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK pCall, LONG_PTR handle, LPDATAOBJECT pDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT pDataObject); // ISnapinHelp interface members STDMETHOD(GetHelpTopic)(LPOLESTR* lpCompiledHelpFile); // IExtendContextMenu STDMETHOD(AddMenuItems)( LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, long *pInsertionAllowed ); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject); // other helper methods public: BOOL IsLogService(MMC_COOKIE mmcCookie); BOOL IsScopeNode(MMC_COOKIE mmcCookie); BOOL IsAlertService (MMC_COOKIE mmcCookie); BOOL IsLogQuery(MMC_COOKIE mmcCookie); BOOL IsRunningQuery( CSmLogQuery* pQuery); LPCWSTR GetConceptsHTMLHelpFileName ( void ); LPCWSTR GetSnapinHTMLHelpFileName ( void ); LPCWSTR GetHTMLHelpTopic ( void ); const CString& GetContextHelpFilePath ( void ); IPropertySheetProvider * GetPropSheetProvider(); BOOL LogTypeCheckNoMore (CLogWarnd* LogWarnd); // *** NOTE: Use of extension subclass not implemented. BOOL IsExtension(){ return m_bIsExtension; }; void HandleTraceConnectError( HRESULT&, CString&, CString& ); HRESULT CreateNewLogQuery( LPDATAOBJECT pDataObject, IPropertyBag* pPropBag = NULL); HRESULT CreateLogQueryFrom(LPDATAOBJECT pDataObject); // Methods to support IComponentData private: HRESULT OnExpand(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnRemoveChildren(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param ); HRESULT ProcessCommandLine ( CString& rstrMachineName ); HRESULT LoadFromFile ( LPWSTR pszFileName ); LPRESULTDATA GetResultData ( void ); void SetExtension( BOOL bExt ){ m_bIsExtension = bExt; }; BOOL IsMyComputerNodetype (GUID& refguid); HRESULT InitPropertySheet ( CSmLogQuery*, MMC_COOKIE, LONG_PTR, CPropertySheet* ); HRESULT NewTypedQuery( CSmLogService* pSvc, IPropertyBag* pPropBag ,LPDATAOBJECT pDataObject); BOOL IsPreWindows2000Server ( const CString& rstrMachineName ); CSmRootNode* GetOrphanedRootNode ( const CString& rstrMachineName ); CString m_strServerNamePersist; // *** override not implemented BOOL m_fAllowOverrideMachineName; // TRUE => Allow the machine name to be overriden by the command line LPCONSOLENAMESPACE m_ipConsoleNameSpace; // Pointer name space interface LPCONSOLE m_ipConsole; // Pointer to the console interface LPRESULTDATA m_ipResultData; // Pointer to the result data interface LPIMAGELIST m_ipScopeImage; // Caching the image list HINSTANCE m_hModule; // for load string operations IPropertySheetProvider *m_ipPrshtProvider;// from MMC // list of root nodes CTypedPtrList m_listpRootNode; // list of orphaned root nodes, due to machine retargeting CTypedPtrList m_listpOrphanedRootNode; CString m_strDisplayInfoName; BOOL m_bIsExtension; CString m_strWindowsDirectory; CString m_strContextHelpFilePath; }; //+-------------------------------------------------------------------------- // // Member: CComponentData::GetPropSheetProvider // // Synopsis: Access function for saved MMC IPropertySheetProvider // interface. // // History: 05-28-1999 a-akamal // //--------------------------------------------------------------------------- inline IPropertySheetProvider * CComponentData::GetPropSheetProvider() { return m_ipPrshtProvider; } ///////////////////////////////////////////////////////////////////// class CSmLogSnapin: public CComponentData, public CComCoClass { public: CSmLogSnapin() : CComponentData () {}; virtual ~CSmLogSnapin() {}; DECLARE_REGISTRY_RESOURCEID(IDR_COMPONENTDATA) DECLARE_NOT_AGGREGATABLE(CSmLogSnapin) virtual BOOL IsExtension() { return FALSE; } // IPersistStream or IPersistStorage STDMETHOD(GetClassID)(CLSID __RPC_FAR *pClassID) { *pClassID = CLSID_ComponentData; return S_OK; } }; ///////////////////////////////////////////////////////////////////// class CSmLogExtension: public CComponentData, public CComCoClass { public: CSmLogExtension() : CComponentData () {}; virtual ~CSmLogExtension() {}; DECLARE_REGISTRY_RESOURCEID(IDR_EXTENSION) DECLARE_NOT_AGGREGATABLE(CSmLogExtension) virtual BOOL IsExtension() { return TRUE; } // IPersistStream or IPersistStorage STDMETHOD(GetClassID)(CLSID __RPC_FAR *pClassID) { *pClassID = CLSID_ComponentData; return S_OK; } }; class CThemeContextActivator { public: CThemeContextActivator() : m_ulActivationCookie(0) { SHActivateContext (&m_ulActivationCookie); } ~CThemeContextActivator() { SHDeactivateContext (m_ulActivationCookie); } private: ULONG_PTR m_ulActivationCookie; }; #endif //__COMPDATA_H_