#ifndef __COMPONET_H_ #define __COMPONET_H_ /*++ Copyright (C) Microsoft Corporation Module Name: componet.h Abstract: header file defines CComponent class Author: William Hsieh (williamh) created Revision History: --*/ class CComponent : public IComponent, public IResultDataCompare, public IExtendContextMenu, public IExtendControlbar, public IExtendPropertySheet, public IPersistStream, public ISnapinCallback { public: CComponent(CComponentData* pComponentData); ~CComponent(); // // IUNKNOWN // STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(ULONG, Release)(); STDMETHOD(QueryInterface)(REFIID riid, void** ppv); public: // // IComponent interface members // STDMETHOD(Initialize)(LPCONSOLE pConsole); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, MMC_COOKIE param); STDMETHOD(Destroy)(MMC_COOKIE cookie); STDMETHOD(GetResultViewType)(MMC_COOKIE cookie, LPOLESTR* ppViewType, long* pViewOptions); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetDisplayInfo)(RESULTDATAITEM* pResultDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB); // // IResultDataCompare interface member // STDMETHOD(Compare)(LPARAM lUserParam, MMC_COOKIE cookieA, MMC_COOKIE cookieB, int* pnResult); // // IExtendContextMenu // STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, long* pInsertionAllowed ); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject); // // IExtendControlbar // STDMETHOD(SetControlbar)(LPCONTROLBAR pControlbar); STDMETHOD(ControlbarNotify)(MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); // // IExtendPropertySheet // STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT lpDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT lpDataObject); // // IPersistStream // STDMETHOD(GetClassID)(CLSID* pClassId); STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream* pStm); STDMETHOD(Save)(IStream* pStm, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize); // // ISnapinCallback // STDMETHOD(tvNotify)(HWND hwndTV, MMC_COOKIE cookie, TV_NOTIFY_CODE Code, LPARAM arg, LPARAM param); protected: HRESULT OnShow(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnMinimize(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnResultItemClick(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnResultItemDblClick(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnProperties(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnViewChange(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnBtnClick(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnSelect(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnActivate(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnAddImages(MMC_COOKIE cookie, IImageList* pIImageList, HSCOPEITEM hScopeItem); HRESULT OnOcxNotify(MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); HRESULT OnRestoreView(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnContextHelp(MMC_COOKIE cookie, LPARAM arg, LPARAM param); // // Helper functions // HRESULT DoPropertySheet(MMC_COOKIE cookie); public: void SetDirty() { m_Dirty = TRUE; } HRESULT UpdateToolbar(CCookie* pCookie); HRESULT CreateFolderList(CCookie* pCookie); CScopeItem* FindScopeItem(MMC_COOKIE cookie) { return m_pComponentData->FindScopeItem(cookie); } CCookie* GetActiveCookie(MMC_COOKIE cookie) { return m_pComponentData->GetActiveCookie(cookie); } CMachine* GetMachine() { return m_pComponentData->m_pMachine; } LPCTSTR GetStartupDeviceId() { return m_pComponentData->m_strStartupDeviceId; } LPCTSTR GetStartupCommand() { return m_pComponentData->m_strStartupCommand; } HRESULT LoadScopeIconsForResultPane(IImageList* pIImageList); int MessageBox(LPCTSTR Msg, LPCTSTR Caption, DWORD Flags); BOOL AttachFolderToMachine(CFolder* pFolder, CMachine** ppMachine); LPCONSOLE m_pConsole; // Console's Interface LPHEADERCTRL m_pHeader; // Result pane's header control interface LPRESULTDATA m_pResult; // Interface pointer to the result pane LPCONSOLEVERB m_pConsoleVerb; LPPROPERTYSHEETPROVIDER m_pPropSheetProvider; LPDISPLAYHELP m_pDisplayHelp; LPTOOLBAR m_pToolbar; // Toolbar for view LPCONTROLBAR m_pControlbar; // Control bar to hold toolbar private: CFolder* FindFolder(MMC_COOKIE cookie); BOOL DestroyFolderList(MMC_COOKIE cookie); HRESULT SaveFolderPersistData(CFolder* pFolder, IStream* pStm, BOOL fClearDirty); HRESULT LoadFolderPersistData(CFolder* pFolder, IStream* pStm); void DetachAllFoldersFromMachine(); CComponentData* m_pComponentData; CFolder* m_pCurFolder; CList m_listFolder; BOOL m_Dirty; LONG m_Ref; }; #endif // __COMPONET_H_