123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #ifndef __PropertyPageBase_h_
- #define __PropertyPageBase_h_
- #pragma warning(disable: 4786)
- #include <vector>
- #include <map>
- #include <set>
- #include <comdef.h>
- #include <typeinfo.h>
- #include "..\TCLib\AdviseHolder.h"
- #include "InsidePropPage.h"
- #include "PageEntry.h"
- class ATL_NO_VTABLE TCPropertyPageBase
- {
- public:
- typedef std::map<UINT, XInsidePage*> CPageMap;
- typedef CPageMap::iterator CPageIterator;
- typedef std::map<UINT, CPageMap*> CPageGroupMap;
- typedef CPageGroupMap::iterator CPageGroupIterator;
- typedef std::map<IConnectionPointContainer*, TCAdviseHolder> CAdviseMap;
- typedef CAdviseMap::iterator CAdviseIterator;
- typedef std::vector<IUnknown*> CUnkVector;
- typedef CUnkVector::iterator CUnkIterator;
- typedef std::map<IID, CUnkVector> CUnkVectorMap;
- public:
- TCPropertyPageBase();
- virtual ~TCPropertyPageBase();
- public:
- TCInsidePropPage* GetInsidePage(UINT idCtrl);
- DWORD GetInsidePageData(UINT idCtrl);
- LPCTSTR GetInsidePageText(UINT idCtrl);
- bool GetDirtyInsidePage(UINT idCtrl);
- void SetDirtyInsidePage(UINT idCtrl, bool bDirty);
- TCInsidePropPage* GetInsidePageOfGroup(UINT idGroup, DWORD dw);
- LPCTSTR GetInsidePageOfGroupText(UINT idGroup, DWORD dw);
- TCInsidePropPage* GetVisiblePageOfGroup(UINT idGroup);
- bool GetDirtyInsidePageOfGroup(UINT idGroup, DWORD dw);
- void SetDirtyInsidePageOfGroup(UINT idGroup, DWORD dw, bool bDirty);
- public:
- bool ShowInsidePage(UINT idCtrl);
- bool HideInsidePage(UINT idCtrl);
- bool ShowInsidePageOfGroup(UINT idGroup, DWORD dw);
- bool HideInsidePageOfGroup(UINT idGroup, DWORD dw);
- protected:
- #ifdef _DEBUG
- virtual LPCSTR TypeName() = 0;
- #endif
- protected:
- virtual bool OnInitDialog();
- virtual UINT GetInsidePageTable(const XInsidePageEntry** ppTable,
- UINT iTable);
- virtual HWND GetPageWindow() = 0;
- virtual IUnknown* GetPageUnknown() = 0;
- virtual bool IsObjectKnown(IUnknown* punk) = 0;
- virtual void UpdateFields(DISPID dispid = DISPID_UNKNOWN) = 0;
- virtual void OnSetAllAdvises(ULONG cObjects, IUnknown** ppUnk);
- virtual void OnClearAllAdvises();
- protected:
- bool CreateInsidePage(XInsidePage* pPage, bool bOfGroup);
- void CreateInsidePages();
- void DestroyInsidePages();
- void DestroyInsidePageMap(CPageMap* pmap);
- XInsidePage* _GetInsidePage(UINT idCtrl);
- XInsidePage* _GetInsidePageOfGroup(UINT idGroup, DWORD dw);
- HRESULT SetObjects(ULONG& cObjectsDest, IUnknown**& ppUnkDest,
- ULONG cObjects, IUnknown** ppUnk);
- HRESULT SetObjectsOfInsidePages(ULONG cObjects, IUnknown** ppUnk);
- void SaveObjectsForInsidePages(ULONG cObjects, IUnknown** ppUnk);
- HRESULT SetObjectsToInsidePage(TCInsidePropPage*);
- HRESULT ApplyToInsidePages();
- void ReleaseObjectsForInsidePages();
- void ReleaseSupportedInterfaces();
- void SetAllAdvises(ULONG cObjects, IUnknown** ppUnk);
- IConnectionPointContainer* SetAdvises(IUnknown* punk, IUnknown* punkThis);
- void ClearAllAdvises();
- public:
- void OnInitDialogHandler(ULONG cObjects, IUnknown** ppUnk);
- LRESULT OnChangedHandler(UINT, WPARAM, LPARAM, BOOL&);
- LRESULT OnNcDestroyHandler(UINT, WPARAM, LPARAM, BOOL&);
- protected:
-
- UINT m_iTable;
-
- CPageMap m_mapPages;
-
- CPageGroupMap m_mapPageGroups;
-
- CUnkVector m_vecForInsidePages;
-
-
- CAdviseMap m_mapAdvise;
-
-
- CUnkVectorMap m_mapInterfaces;
-
-
- bool m_bInitializing : 1;
-
- bool m_bUpdating : 1;
- };
- inline void TCPropertyPageBase::ClearAllAdvises()
- {
-
- OnClearAllAdvises();
-
- m_mapAdvise.clear();
- }
- #endif
|