/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: CSakSnap.h Abstract: Implementation of IComponent for Snapin. Author: Rohde Wakefield [rohde] 12-Aug-1997 Revision History: --*/ #ifndef CSAKSNAP_H #define CSAKSNAP_H #define RS_RESULT_IMAGE_ARRAY_MAX 100 typedef struct { GUID nodeTypeId; USHORT colCount; USHORT columnWidths[BHSM_MAX_CHILD_PROPS]; } COLUMN_WIDTH_SET; class CSakData; ///////////////////////////////////////////////////////////////////////////// // COM class representing the SakSnap snapin object class ATL_NO_VTABLE CSakSnap : public IComponent, // interface that console calls into public IExtendPropertySheet,// add pages to the property sheet of an item. public IExtendContextMenu, // add items to context menu of an item public IExtendControlbar, // add items to control bar of an item public IResultDataCompare, // So we can custom sort public IPersistStream, public CComObjectRoot, // handle object reference counts for objects public CComCoClass { public: CSakSnap( ) {}; BEGIN_COM_MAP(CSakSnap) COM_INTERFACE_ENTRY(IComponent) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendControlbar) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IResultDataCompare) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_HsmAdmin) // IComponent interface members public: STDMETHOD( Initialize ) ( IConsole* pConsole); STDMETHOD( Notify ) ( IDataObject* pDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param ); STDMETHOD( Destroy ) ( MMC_COOKIE cookie ); STDMETHOD( GetResultViewType )(MMC_COOKIE cookie, BSTR* ppViewType, long * pViewOptions ); STDMETHOD( QueryDataObject ) ( MMC_COOKIE cookie, DATA_OBJECT_TYPES type, IDataObject** ppDataObject ); STDMETHOD( GetDisplayInfo ) ( LPRESULTDATAITEM pScopeItem ); STDMETHOD( CompareObjects ) ( IDataObject* pDataObjectA, IDataObject* pDataObjectB ); // IExtendPropertySheet interface public: STDMETHOD( CreatePropertyPages )( LPPROPERTYSHEETCALLBACK lpProvider, RS_NOTIFY_HANDLE handle, LPDATAOBJECT lpIDataObject ); STDMETHOD( QueryPagesFor ) ( LPDATAOBJECT lpDataObject ); // IExtendContextMenu public: STDMETHOD( AddMenuItems ) ( IDataObject* pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, LONG* pInsertionAllowed ); STDMETHOD( Command ) ( long nCommandID, IDataObject* pDataObject ); // IExtendControlbar STDMETHOD( SetControlbar ) ( LPCONTROLBAR pControlbar ); STDMETHOD( ControlbarNotify )( MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param ); // IResultDataCompare STDMETHOD( Compare ) ( IN LPARAM lUserParam, IN MMC_COOKIE CookieA, IN MMC_COOKIE CookieB, IN OUT int* pnResult ); // IPersistStream methods STDMETHOD( Save )( IStream *pStm, BOOL fClearDirty ); STDMETHOD( Load )( IStream *pStm ); STDMETHOD( IsDirty )(void); STDMETHOD( GetSizeMax )( ULARGE_INTEGER *pcbSize ); STDMETHOD( GetClassID )( CLSID *pClassID ); public: // Notify event handlers protected: HRESULT OnFolder (IDataObject * pNode, LPARAM arg, LPARAM param); HRESULT OnShow (IDataObject * pNode, LPARAM arg, LPARAM param); HRESULT OnSelect (IDataObject * pNode, LPARAM arg, LPARAM param); HRESULT OnMinimize (IDataObject * pNode, LPARAM arg, LPARAM param); HRESULT OnChange (IDataObject * pNode, LPARAM arg, LPARAM param); HRESULT OnRefresh (IDataObject * pNode, LPARAM arg, LPARAM param); HRESULT OnDelete (IDataObject * pNode, LPARAM arg, LPARAM param); // Toolbar event handler void CSakSnap::OnSelectToolbars(LPARAM arg, LPARAM param); // Pseudo Constructor / Destructor public: HRESULT FinalConstruct(); void FinalRelease(); // Methods to work with the image lists private: // Given an HICON, return "virtual index" from result pane's image list CComPtr m_pImageResult; // SakSnap interface pointer to result pane image list HRESULT OnAddImages(); HRESULT OnToolbarButtonClick(LPARAM arg, LPARAM param); protected: // Enumerate the children of a node in result pane. HRESULT EnumResultPane( ISakNode* pNode ); // functions to initialize headers in result view HRESULT InitResultPaneHeaders( ISakNode* pNode ); // function to clear all icons of the node's children HRESULT ClearResultIcons( ISakNode* pNode ); // Interface pointers protected: friend class CSakData; CComPtr m_pConsole; // Console's IFrame interface CComPtr m_pResultData; CComPtr m_pHeader; // Result pane's header control interface CComPtr m_pControlbar; // control bar to hold my tool bars CComPtr m_pConsoleVerb; CComPtr m_pToolbar; // Toolbar for view CSakData * m_pSakData; // Pointer to owning SakData private: CComPtr m_pEnumeratedNode; MMC_COOKIE m_ActiveNodeCookie; // ISakNode of active node in scope pane HRESULT ClearResultPane(); HRESULT EnumRootDisplayProps( IEnumString ** ppEnum ); // Contains column widths for a given node type COLUMN_WIDTH_SET COLUMN_WIDTH_SET m_ChildPropWidths[ BHSM_MAX_NODE_TYPES ]; USHORT m_cChildPropWidths; HRESULT GetSavedColumnWidths( ISakNode *pNode, INT *pColCount, INT *pColumnWidths ); HRESULT SaveColumnWidths( ISakNode *pNode ); // Image Array public: static UINT m_nImageArray[RS_RESULT_IMAGE_ARRAY_MAX]; static INT m_nImageCount; // Static functions public: static INT AddImage( UINT rId ); }; #endif