[commit] r1941 - trunk/GME/GMEActiveBrowser
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Thu Jun 28 14:07:20 CDT 2012
Author: ksmyth
Date: Thu Jun 28 14:07:20 2012
New Revision: 1941
Log:
Refactor towards tree browser icons per-kind
Deleted:
trunk/GME/GMEActiveBrowser/MgaMap.cpp
Modified:
trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp
trunk/GME/GMEActiveBrowser/AggregateContextMenu.cpp
trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.cpp
trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.h
trunk/GME/GMEActiveBrowser/GMEActiveBrowserCtl.cpp
trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.cpp
trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.h
trunk/GME/GMEActiveBrowser/InheritanceTreeCtrl.h
trunk/GME/GMEActiveBrowser/MetaTreeCtrl.h
trunk/GME/GMEActiveBrowser/MgaMap.h
trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.cpp
trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.h
trunk/GME/GMEActiveBrowser/MgaObjectProxy.h
trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.cpp
trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.h
trunk/GME/GMEActiveBrowser/TreeCtrlEx.cpp
trunk/GME/GMEActiveBrowser/TreeCtrlEx.h
Modified: trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -846,7 +846,7 @@
for(HTREEITEM hItem=m_TreeAggregate.GetFirstSelectedItem();hItem;
hItem=m_TreeAggregate.GetNextSelectedItem(hItem))
{
- CMgaObjectProxy ObjectProxy;
+ CAggregateMgaObjectProxy ObjectProxy;
if(m_TreeAggregate.m_MgaMap.LookupObjectProxy(hItem, ObjectProxy))
{
if ( ObjectProxy.m_TypeInfo == OBJTYPE_MODEL || // FCOs
@@ -931,7 +931,7 @@
hItem;
hItem = m_TreeAggregate.GetNextSelectedItem( hItem))
{
- CMgaObjectProxy ObjectProxy;
+ CAggregateMgaObjectProxy ObjectProxy;
if( m_TreeAggregate.m_MgaMap.LookupObjectProxy( hItem, ObjectProxy))
{
if ( ObjectProxy.m_TypeInfo == OBJTYPE_MODEL // FCOs: connection too
@@ -1148,7 +1148,7 @@
hItem;
hItem = m_TreeAggregate.GetNextSelectedItem( hItem))
{
- CMgaObjectProxy ObjectProxy;
+ CAggregateMgaObjectProxy ObjectProxy;
if( m_TreeAggregate.m_MgaMap.LookupObjectProxy( hItem, ObjectProxy))
{
all_containers &= (ObjectProxy.m_TypeInfo == OBJTYPE_MODEL || ObjectProxy.m_TypeInfo == OBJTYPE_FOLDER);
@@ -1299,7 +1299,7 @@
for(HTREEITEM hItem=m_TreeAggregate.GetFirstSelectedItem();hItem;
hItem=m_TreeAggregate.GetNextSelectedItem(hItem))
{
- CMgaObjectProxy ObjectProxy;
+ CAggregateMgaObjectProxy ObjectProxy;
if(m_TreeAggregate.m_MgaMap.LookupObjectProxy(hItem, ObjectProxy))
{
if(ObjectProxy.m_TypeInfo==OBJTYPE_MODEL|| // FCOs
@@ -3071,7 +3071,7 @@
CActiveBrowserPropertySheet* pParent=(CActiveBrowserPropertySheet*)GetParent();
// Getting selection from aggregate tree
- CMgaObjectProxy MgaObjectProxy;
+ CAggregateMgaObjectProxy MgaObjectProxy;
// condition modified> inheritance tree empty for all folders
Modified: trunk/GME/GMEActiveBrowser/AggregateContextMenu.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/AggregateContextMenu.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/AggregateContextMenu.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -140,7 +140,7 @@
{
m_pParent->m_bIsBrowserCreatedNewObject=TRUE;
HTREEITEM hItem=m_pParent->m_TreeAggregate.GetSelectedItem();
- CMgaObjectProxy MgaObjectProxy;
+ CAggregateMgaObjectProxy MgaObjectProxy;
if(m_pParent->m_TreeAggregate.m_MgaMap.LookupObjectProxy(hItem,MgaObjectProxy))
{
@@ -616,7 +616,7 @@
HTREEITEM hItem=m_pParent->m_TreeAggregate.GetSelectedItem();
- CMgaObjectProxy MgaObjectProxy;
+ CAggregateMgaObjectProxy MgaObjectProxy;
if(m_pParent->m_TreeAggregate.m_MgaMap.LookupObjectProxy(hItem,MgaObjectProxy))
{
@@ -733,7 +733,7 @@
if( OBJTYPE_FOLDER != MgaObjectProxy.m_TypeInfo) // for folders we already deleted the feature
{
HTREEITEM hItemsParent = m_pParent->m_TreeAggregate.GetParentItem( hItem);
- CMgaObjectProxy MgaParentProxy; // if parent is a model, then enable
+ CAggregateMgaObjectProxy MgaParentProxy; // if parent is a model, then enable
if(m_pParent->m_TreeAggregate.m_MgaMap.LookupObjectProxy(hItemsParent,MgaParentProxy))
EnableMenuItem( ID_POPUP_SHOWINPARENT, OBJTYPE_MODEL == MgaParentProxy.m_TypeInfo?MF_ENABLED:MF_GRAYED);
}
Modified: trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -14,6 +14,10 @@
#define new DEBUG_NEW
#endif
+
+BEGIN_MESSAGE_MAP(CAggregateTreeCtrl, CTreeCtrl)
+ ON_WM_PAINT()
+END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
@@ -286,7 +290,7 @@
if(nItemState!=0xffffffff)
{
- CMgaMappedTreeCtrl::SetItemState(hItem,nItemState);
+ __super::SetItemState(hItem,nItemState);
}
}
@@ -508,7 +512,7 @@
{
TCHAR* pszEndPtr=NULL;
UINT nItemState=_tcstoul(strItemState,&pszEndPtr,10);
- CMgaMappedTreeCtrl::SetItemState(hItem,nItemState);
+ __super::SetItemState(hItem,nItemState);
}
}
}
@@ -567,8 +571,8 @@
}break;
case SORT_BYTYPE:
{
- CMgaObjectProxy MgaObjectProxyItem1;
- CMgaObjectProxy MgaObjectProxyItem2;
+ CAggregateMgaObjectProxy MgaObjectProxyItem1;
+ CAggregateMgaObjectProxy MgaObjectProxyItem2;
if(
pTreeCtrl->m_MgaMap.LookupObjectProxy(hItem1,MgaObjectProxyItem1) &&
pTreeCtrl->m_MgaMap.LookupObjectProxy(hItem2,MgaObjectProxyItem2))
@@ -605,8 +609,8 @@
case SORT_BYCREATION:
{
- CMgaObjectProxy MgaObjectProxyItem1;
- CMgaObjectProxy MgaObjectProxyItem2;
+ CAggregateMgaObjectProxy MgaObjectProxyItem1;
+ CAggregateMgaObjectProxy MgaObjectProxyItem2;
if(
pTreeCtrl->m_MgaMap.LookupObjectProxy(hItem1,MgaObjectProxyItem1) &&
@@ -725,7 +729,7 @@
if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
- CMgaObjectProxy ObjectProxy;
+ CAggregateMgaObjectProxy ObjectProxy;
if(m_MgaMap.LookupObjectProxy(hItem,ObjectProxy)) // If it is in the map
{
if(ObjectProxy.m_TypeInfo==OBJTYPE_FOLDER || ObjectProxy.m_TypeInfo==OBJTYPE_MODEL)
@@ -764,7 +768,7 @@
hItem = HitTest(point);
}
- CMgaObjectProxy MgaObjectProxy;
+ CAggregateMgaObjectProxy MgaObjectProxy;
if(hItem==NULL || !m_MgaMap.LookupObjectProxy(hItem,MgaObjectProxy))
{
@@ -1222,13 +1226,15 @@
{
- CMgaObjectProxy ObjectProxy;
+ CAggregateMgaObjectProxy ObjectProxy;
- if(!m_MgaMap.LookupObjectProxy(hItem, ObjectProxy))return;
+ if(!m_MgaMap.LookupObjectProxy(hItem, ObjectProxy))
+ return;
CComQIPtr<IMgaObject> ccpObject(ObjectProxy.m_pMgaObject);
- if(!ccpObject)return; // Not an MgaObject
+ if(!ccpObject)
+ return; // Not an MgaObject
BYTE cState=0;
@@ -1377,4 +1383,30 @@
}
return retv;
-}
\ No newline at end of file
+}
+
+void CAggregateTreeCtrl::OnPaint()
+{
+ __super::OnPaint();
+
+ CDC* dc = GetDC();
+ CRect rClient;
+ this->GetClientRect( rClient );
+
+ HTREEITEM hItem = NULL;
+ CRect rItem;
+
+ // Get the current top item, if any...
+ hItem = GetFirstVisibleItem();
+
+ // Work through them one at a time...
+ while ( hItem )
+ {
+
+ this->GetItemRect(hItem, rItem, TRUE);
+ rItem += rClient;
+ rItem.left -= 16;
+ //dc->DrawText(L"xx", 2, rItem, DT_LEFT | DT_BOTTOM);
+ hItem = this->GetNextVisibleItem(hItem);
+ }
+}
Modified: trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/AggregateTreeCtrl.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -11,7 +11,14 @@
#include "MgaMappedTreeCtrl.h"
-class CAggregateTreeCtrl : public CMgaMappedTreeCtrl
+struct CAggregateMgaObjectProxy : public CMgaObjectProxy
+{
+ CAggregateMgaObjectProxy() : CMgaObjectProxy() { };
+ CAggregateMgaObjectProxy(LPUNKNOWN pMgaObject, objtype_enum type) : CMgaObjectProxy(pMgaObject, type) {};
+ CAggregateMgaObjectProxy(CMgaObjectProxy& proxy) : CMgaObjectProxy(proxy) {};
+};
+
+class CAggregateTreeCtrl : public CMgaMappedTreeCtrl<CAggregateMgaObjectProxy>
{
friend class CAggregatePropertyPage;
friend class CAggregateContextMenu;
@@ -44,6 +51,10 @@
CAggregateTreeCtrl();
virtual ~CAggregateTreeCtrl();
+
+ afx_msg void OnPaint();
+protected:
+ DECLARE_MESSAGE_MAP()
};
#endif // !defined(AFX_AGGREGATETREECTRL_H__BAA3D537_E504_4801_B793_6F96B703380C__INCLUDED_)
Modified: trunk/GME/GMEActiveBrowser/GMEActiveBrowserCtl.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/GMEActiveBrowserCtl.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/GMEActiveBrowserCtl.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -356,7 +356,7 @@
CGMEActiveBrowserApp* pApp=(CGMEActiveBrowserApp*)AfxGetApp();
CMgaContext* pMgaContext=&pApp->m_CurrentProject.m_MgaContext;
- CMgaMappedTreeCtrl* pTreeCtrl = &m_pPropFrame->m_pModelessPropSheet->m_PageAggregate.m_TreeAggregate;
+ CMgaMappedTreeCtrlBase* pTreeCtrl = &m_pPropFrame->m_pModelessPropSheet->m_PageAggregate.m_TreeAggregate;
if( 1 == m_pPropFrame->m_pModelessPropSheet->GetActiveIndex()) // if the INHER tree is active use that tree
pTreeCtrl = &m_pPropFrame->m_pModelessPropSheet->m_PageInheritance.m_TreeInheritance;
@@ -375,7 +375,7 @@
while(hItem)
{
LPUNKNOWN pUnknown;
- pTreeCtrl->m_MgaMap.LookupObjectUnknown(hItem,pUnknown);
+ pTreeCtrl->LookupObjectUnknown(hItem, pUnknown);
CComQIPtr<IMgaObject> ccpMgaObject(pUnknown);
ASSERT(ccpMgaObject!=NULL);
Modified: trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -20,7 +20,7 @@
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
-CGMEActiveBrowserDropTarget::CGMEActiveBrowserDropTarget(CMgaMappedTreeCtrl* pParent)
+CGMEActiveBrowserDropTarget::CGMEActiveBrowserDropTarget(CMgaMappedTreeCtrlBase* pParent)
{
m_pParent=pParent;
m_bCreatedDragImageList=FALSE;
Modified: trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/GMEActiveBrowserDropTarget.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -19,7 +19,7 @@
} \
} \
-class CMgaMappedTreeCtrl;
+class CMgaMappedTreeCtrlBase;
class CGMEActiveBrowserDropTarget : public COleDropTarget
{
@@ -33,11 +33,13 @@
void OnDragLeave( CWnd* pWnd );
DROPEFFECT OnDragOver( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point );
DROPEFFECT OnDragEnter( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point );
- CGMEActiveBrowserDropTarget(CMgaMappedTreeCtrl*);
+ CGMEActiveBrowserDropTarget(CMgaMappedTreeCtrlBase*);
virtual ~CGMEActiveBrowserDropTarget();
- CMgaMappedTreeCtrl* m_pParent;
+ CMgaMappedTreeCtrlBase* m_pParent;
CComPtr<IMgaEventLogger> m_EventLogger;
+private:
+ CGMEActiveBrowserDropTarget(const CGMEActiveBrowserDropTarget&);
};
#endif // !defined(AFX_GMEACTIVEBROWSERDROPTARGET_H__4A7D8C14_58DA_4785_932F_1BB960E09EF6__INCLUDED_)
Modified: trunk/GME/GMEActiveBrowser/InheritanceTreeCtrl.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/InheritanceTreeCtrl.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/InheritanceTreeCtrl.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -11,7 +11,7 @@
#include "MgaMappedTreeCtrl.h"
-class CInheritanceTreeCtrl : public CMgaMappedTreeCtrl
+class CInheritanceTreeCtrl : public CMgaMappedTreeCtrl<CMgaObjectProxy>
{
friend class CInheritancePropertyPage;
public:
Modified: trunk/GME/GMEActiveBrowser/MetaTreeCtrl.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/MetaTreeCtrl.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MetaTreeCtrl.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -11,7 +11,7 @@
#include "MgaMappedTreeCtrl.h"
-class CMetaTreeCtrl : public CMgaMappedTreeCtrl
+class CMetaTreeCtrl : public CMgaMappedTreeCtrl<CMgaObjectProxy>
{
friend class CMetaPropertyPage;
public:
Modified: trunk/GME/GMEActiveBrowser/MgaMap.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaMap.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MgaMap.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -10,40 +10,271 @@
#endif // _MSC_VER > 1000
-#include "MgaObjectProxyMapItem.h"
+#include "MgaObjectProxy.h"
#include "AfxColl.h"
-typedef CMap<HTREEITEM,HTREEITEM,LPUNKNOWN,LPUNKNOWN> CMapItem2Object;
-typedef CMap<LPUNKNOWN,LPUNKNOWN,CMgaObjectProxyMapItem*,CMgaObjectProxyMapItem*> CMapObject2Item;
-class CMgaMap
+template<class ObjectProxy>
+class CMgaMap
{
+ class CMgaObjectProxyMapItem : public ObjectProxy
+ {
+ public:
+ CMgaObjectProxyMapItem(LPUNKNOWN pMgaObject, objtype_enum type, HTREEITEM hTreeItem) : ObjectProxy(pMgaObject,type),m_hTreeItem(hTreeItem) {};
+ CMgaObjectProxyMapItem(CMgaObjectProxy& rSourceMgaObjectProxy, HTREEITEM hTreeItem) : ObjectProxy(rSourceMgaObjectProxy),m_hTreeItem(hTreeItem) {};
+ virtual ~CMgaObjectProxyMapItem() {}
+ HTREEITEM m_hTreeItem;
+ };
public:
+ typedef CMap<HTREEITEM,HTREEITEM,LPUNKNOWN,LPUNKNOWN> CMapItem2Object;
+ typedef CMap<LPUNKNOWN,LPUNKNOWN,CMgaObjectProxyMapItem*,CMgaObjectProxyMapItem*> CMapObject2Item;
- // High level functions for complex operations eg. context menu
- void AddEntry(HTREEITEM hTreeItem, CMgaObjectProxy ObjectProxy);
- BOOL RemoveObjectProxy(CMgaObjectProxy MgaObjectProxy);
- BOOL RemoveTreeItem( HTREEITEM hTreeItem);
- BOOL SearchTreeItem(BSTR Id, HTREEITEM &hTreeItem, IUnknown* &punk);
- BOOL LookupTreeItem(CMgaObjectProxy MgaObjectProxy, HTREEITEM& hTreeItem);
- BOOL LookupTreeItem(LPUNKNOWN pUnknown, HTREEITEM &hTreeItem);
- BOOL LookupObjectProxy(HTREEITEM hTreeItem,CMgaObjectProxy& rObjectProxy);
+ CMgaMap() {}
+
+ virtual ~CMgaMap() {
+ DestroyMap();
+ }
+
+ void DestroyMap()
+ {
+ // Remove elements from object map and delete the object
+ POSITION pos=m_MapObject2Item.GetStartPosition();
+ CMgaObjectProxyMapItem* pObject;
+ LPUNKNOWN pUnknown;
+
+ // Remove the TreeItem handles and LPUNKNOWNs from the item map
+ m_MapItem2Object.RemoveAll();
+
+
+ while(pos!=NULL)
+ {
+ m_MapObject2Item.GetNextAssoc(pos,pUnknown,pObject);
+ m_MapObject2Item.RemoveKey(pUnknown);
+ delete pObject;
+ pUnknown->Release();
+ }
+
+ }
+
+ // Retreives the corresponding TreeItem handle from an Object Proxy
+ BOOL LookupTreeItem(CMgaObjectProxy MgaObjectProxy, HTREEITEM &hTreeItem)
+ {
+ return LookupTreeItem(MgaObjectProxy.m_pMgaObject, hTreeItem);
+ }
+
+
+ // Retreives the Object Proxy from the corresponding TreeItem handle
+ BOOL LookupObjectProxy(HTREEITEM hTreeItem, ObjectProxy& rObjectProxy)
+ {
+ CMgaObjectProxyMapItem* pMgaObjectProxyMapItem;
+ LPUNKNOWN pUnknown;
+
+ BOOL bResult=m_MapItem2Object.Lookup(hTreeItem,pUnknown);
+
+ if(bResult)
+ {
+ if( (bResult=m_MapObject2Item.Lookup(pUnknown,pMgaObjectProxyMapItem)) )
+ {
+ rObjectProxy=*pMgaObjectProxyMapItem;
+ }
+ }
+ return bResult;
+ }
+
+
+ // Removes a tree item maintaining the consistency between the two maps
+ BOOL RemoveTreeItem(HTREEITEM hTreeItem)
+ {
+ LPUNKNOWN pUnknown;
+
+ if(!m_MapItem2Object.Lookup(hTreeItem,pUnknown))
+ {
+ return FALSE;
+ }
+ else
+ {
+ m_MapItem2Object.RemoveKey(hTreeItem);
+
+ CMgaObjectProxyMapItem* pObjectProxyMapItem;
+ if(m_MapObject2Item.Lookup(pUnknown,pObjectProxyMapItem))
+ {
+ m_MapObject2Item.RemoveKey(pUnknown);
+ // Free COM object
+ pUnknown->Release();
+ delete pObjectProxyMapItem;
+ }
+ return TRUE;
+ }
+
+ }
+
+
+ // Removes an Object Proxy maintaining the consistency between the two maps
+ BOOL RemoveObjectProxy(CMgaObjectProxy MgaObjectProxy)
+ {
+ CMgaObjectProxyMapItem* pObjectProxyMapItem;
+
+ CComPtr<IUnknown> pUnk;
+ MgaObjectProxy.m_pMgaObject->QueryInterface(IID_IUnknown, (void**)&pUnk);
+ if(!m_MapObject2Item.Lookup(pUnk, pObjectProxyMapItem))
+ {
+ return FALSE;
+ }
+ else
+ {
+ m_MapObject2Item.RemoveKey(pObjectProxyMapItem->m_pMgaObject);
+ m_MapItem2Object.RemoveKey(pObjectProxyMapItem->m_hTreeItem);
+
+ // Free COM object
+ pObjectProxyMapItem->m_pMgaObject->Release();
+ delete pObjectProxyMapItem;
+ return TRUE;
+ }
+ }
+
+
+ // Adds a new TreeItem Handle - ObjectProxy pair to the map
+ void AddEntry(HTREEITEM hTreeItem, ObjectProxy MgaObjectProxy)
+ {
+
+ // Removing the elements from the maps with the keys, because CMap::SetAt would overwrite
+ // the value belonging to the already existing key
+ // resulting an inconsistency with the other map.
+ RemoveTreeItem(hTreeItem);
+ RemoveObjectProxy(MgaObjectProxy);
- // Low level functions (involving IUnknown-based search) for efficiency
- // of the simple oprations
- BOOL bIsInMap(HTREEITEM hTreeItem);
- BOOL bIsInMap(LPUNKNOWN pUnknown);
- BOOL LookupObjectUnknown(HTREEITEM hTreeItem, LPUNKNOWN& pUnknown);
- void DestroyMap();
- CMgaMap();
- virtual ~CMgaMap();
+ // Increase reference counter for this map
+ IUnknown* pUnk = MgaObjectProxy.m_pMgaObject;
+ MgaObjectProxy.m_pMgaObject = NULL;
+ pUnk->QueryInterface(IID_IUnknown, (void**)&MgaObjectProxy.m_pMgaObject);
+
+ m_MapItem2Object.SetAt(hTreeItem,MgaObjectProxy.m_pMgaObject);
+
+ CMgaObjectProxyMapItem* pMgaObjectProxyMapItem= new CMgaObjectProxyMapItem(MgaObjectProxy, hTreeItem);
+ m_MapObject2Item.SetAt(MgaObjectProxy.m_pMgaObject,pMgaObjectProxyMapItem);
+
+ }
+
+
+ // Low level function for efficiency: if one wants IUnknown pointer
+ // he can get it with one lookup call
+ BOOL LookupObjectUnknown(HTREEITEM hTreeItem, LPUNKNOWN &pUnknown)
+ {
+
+ return m_MapItem2Object.Lookup(hTreeItem,pUnknown);
+ }
+
+
+ _COM_SMARTPTR_TYPEDEF(IMgaObject, __uuidof(IMgaObject));
+
+ BOOL SearchTreeItem(BSTR Id, HTREEITEM &hTreeItem, IUnknown* &punk)
+ {
+ // read all looking for the ID
+
+ LPUNKNOWN nKey;
+ CMgaObjectProxyMapItem * pt;
+ POSITION pos = m_MapObject2Item.GetStartPosition();
+ bool found = false;
+ while (pos != NULL)
+ {
+ m_MapObject2Item.GetNextAssoc( pos, nKey, pt);
+ IMgaObjectPtr mgao(nKey);
+ IUnknownPtr punkptr(nKey);
+
+ punk = punkptr;
+ _bstr_t boid;
+ COMTHROW(mgao->get_ID(boid.GetAddress()));
+ _bstr_t bid = Id;
+ if (bid == boid)
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(found)
+ hTreeItem = pt->m_hTreeItem;
+
+ return (found);
+ }
+
+
+ BOOL LookupTreeItem(LPUNKNOWN pUnknown, HTREEITEM &hTreeItem)
+ {
+ CComPtr<IUnknown> pUnk;
+ pUnknown->QueryInterface(IID_IUnknown, (void**)&pUnk);
+ CMgaObjectProxyMapItem* pMgaObjectProxyMapItem;
+
+ BOOL bResult=m_MapObject2Item.Lookup(pUnk,pMgaObjectProxyMapItem);
+
+ if (bResult)
+ hTreeItem=pMgaObjectProxyMapItem->m_hTreeItem;
+
+ return bResult;
+ }
+
+
+
+ BOOL bIsInMap(LPUNKNOWN pUnknown)
+ {
+ CComPtr<IUnknown> pUnk;
+ pUnknown->QueryInterface(IID_IUnknown, (void**)&pUnk);
+
+ CMgaObjectProxyMapItem* pMgaObjectProxyMapItem;
+ return m_MapObject2Item.Lookup(pUnk,pMgaObjectProxyMapItem);
+ }
+
+ BOOL bIsInMap(HTREEITEM hTreeItem)
+ {
+ LPUNKNOWN pUnknown;
+ return m_MapItem2Object.Lookup(hTreeItem,pUnknown);
+ }
+
+
// Dump function
#ifdef _DEBUG
- virtual void Dump(CDumpContext& dc ) const;
-#endif
+ void Dump(CDumpContext& dc ) const
+ {
+ return;
+ dc<<"______________________ MgaMap Dump begin _______________________";
+ // Dumping the Item2Object Map
+ dc<<"\n\nMapItem2Object:\n";
+
+ HTREEITEM hItem;
+ LPUNKNOWN pUnknown;
+
+ POSITION pos = m_MapItem2Object.GetStartPosition();
+ while(pos!=NULL)
+ {
+ m_MapItem2Object.GetNextAssoc(pos,hItem,pUnknown);
+ CString strOut;
+ strOut.Format(_T(" %x | %x\n"),hItem, pUnknown);
+ dc<<strOut;
+ }
+ dc<<"\n";
+
+ // Dumping Object2Item Map
+ dc<<"\n\nMapObject2Item:\n";
+
+ CMgaObjectProxyMapItem* pMgaObjectProxyMapItem;
+
+
+ pos = m_MapObject2Item.GetStartPosition();
+ while(pos!=NULL)
+ {
+ m_MapObject2Item.GetNextAssoc(pos,pUnknown,pMgaObjectProxyMapItem);
+ CString strOut;
+ strOut.Format(_T(" %x | %x | %d\n"), pUnknown, pMgaObjectProxyMapItem->m_hTreeItem,pMgaObjectProxyMapItem->m_TypeInfo);
+ dc<<strOut;
+ }
+ dc<<"\n";
+
+ dc<<"______________________ MgaMap Dump end _______________________\n\n";
+ }
+#endif
private:
CMapObject2Item m_MapObject2Item;
Modified: trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -16,45 +16,7 @@
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
-CMgaMappedTreeCtrl::CMgaMappedTreeCtrl():m_DropTarget(this)
-{
-
- try
- {
- COMTHROW( m_EventLogger.CoCreateInstance(L"Mga.MgaEventLogger"));
- }
- catch(...)
- {
- m_EventLogger = NULL;
- }
-
-}
-
-CMgaMappedTreeCtrl::~CMgaMappedTreeCtrl()
-{
-
-}
-
-void CMgaMappedTreeCtrl::CleanUp()
-{
- CTreeCtrlEx::DeleteAllItems();
- m_MgaMap.DestroyMap();
-
-
-}
-
-BOOL CMgaMappedTreeCtrl::GetSelectedItemProxy(CMgaObjectProxy &rMgaObjectProxy)
-{
- HTREEITEM hTreeItem=CTreeCtrlEx::GetSelectedItem();
-
- if(hTreeItem== NULL) return FALSE; // No selected item
-
- return m_MgaMap.LookupObjectProxy(hTreeItem,rMgaObjectProxy);
-}
-
-
-
-BOOL CMgaMappedTreeCtrl::SetItemState(HTREEITEM hItem, UINT nState)
+BOOL CMgaMappedTreeCtrlBase::SetItemState(HTREEITEM hItem, UINT nState)
{
if(nState&TVIS_BOLD)CTreeCtrl::SetItemState(hItem,TVIS_BOLD,TVIS_BOLD);
@@ -64,15 +26,8 @@
return TRUE;
}
-BOOL CMgaMappedTreeCtrl::DeleteItem(HTREEITEM hItem)
-{
-
- m_MgaMap.RemoveTreeItem(hItem);
- return CTreeCtrl::DeleteItem(hItem);
-}
-
// Recursively deletes every child
-void CMgaMappedTreeCtrl::DeleteAllChildren(HTREEITEM hParent)
+void CMgaMappedTreeCtrlBase::DeleteAllChildren(HTREEITEM hParent)
{
if (ItemHasChildren(hParent)) // this may indicate true and the GetChildItem may give at the same time back 0x00000000 since that children may not have htreeitem inserted for it
{
@@ -84,7 +39,7 @@
HTREEITEM hNextItem = GetNextSiblingItem(hItem);
// Consistently removes item from map and the tree ctrl
- CMgaMappedTreeCtrl::DeleteItem(hItem);
+ DeleteItem(hItem);
hItem=hNextItem;
}
@@ -92,7 +47,7 @@
}
-void CMgaMappedTreeCtrl::ExpandAllChildren(HTREEITEM hParent,UINT nCode)
+void CMgaMappedTreeCtrlBase::ExpandAllChildren(HTREEITEM hParent,UINT nCode)
{
if (ItemHasChildren(hParent))
@@ -109,18 +64,18 @@
}
-BOOL CMgaMappedTreeCtrl::IsRelevantDropTarget(CPoint point, CImageList*)
+BOOL CMgaMappedTreeCtrlBase::IsRelevantDropTarget(CPoint point, CImageList*)
{
return FALSE;
}
-void CMgaMappedTreeCtrl::RegisterDropTarget()
+void CMgaMappedTreeCtrlBase::RegisterDropTarget()
{
m_DropTarget.Register(this);
}
-BOOL CMgaMappedTreeCtrl::DoDrop(eDragOperation, COleDataObject*, CPoint)
+BOOL CMgaMappedTreeCtrlBase::DoDrop(eDragOperation, COleDataObject*, CPoint)
{
return FALSE;
}
Modified: trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MgaMappedTreeCtrl.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -22,22 +22,19 @@
} \
} \
-class CMgaMappedTreeCtrl : public CTreeCtrlEx
+class CMgaMappedTreeCtrlBase : public CTreeCtrlEx
{
public:
+ CMgaMappedTreeCtrlBase() : m_DropTarget(this) {};
virtual BOOL DoDrop(eDragOperation, COleDataObject*,CPoint);
void RegisterDropTarget();
virtual BOOL IsRelevantDropTarget(CPoint point,CImageList*);
void ExpandAllChildren(HTREEITEM hParent,UINT nCode);
void DeleteAllChildren(HTREEITEM hParent);
- BOOL DeleteItem(HTREEITEM hItem);
BOOL SetItemState(HTREEITEM hItem, UINT nState);
- BOOL GetSelectedItemProxy(CMgaObjectProxy& rMgaObjectProxy);
- void CleanUp();
- CMgaMappedTreeCtrl();
- virtual ~CMgaMappedTreeCtrl();
-
- CMgaMap m_MgaMap;
+ virtual BOOL DeleteItem(HTREEITEM hItem) = 0;
+ virtual void CleanUp() = 0;
+ virtual BOOL LookupObjectUnknown(HTREEITEM hTreeItem, IUnknown*& out) = 0;
protected:
CGMEActiveBrowserDropTarget m_DropTarget;
@@ -45,4 +42,41 @@
CComPtr<IMgaEventLogger> m_EventLogger;
};
+
+template<class ObjectProxy>
+class CMgaMappedTreeCtrl : public CMgaMappedTreeCtrlBase
+{
+public:
+ CMgaMappedTreeCtrl() {
+ m_EventLogger.CoCreateInstance(L"Mga.MgaEventLogger");
+ }
+
+ BOOL GetSelectedItemProxy(ObjectProxy& rMgaObjectProxy) {
+ HTREEITEM hTreeItem = __super::GetSelectedItem();
+
+ if (hTreeItem == NULL)
+ return FALSE; // No selected item
+
+ return m_MgaMap.LookupObjectProxy(hTreeItem, rMgaObjectProxy);
+ }
+
+ virtual ~CMgaMappedTreeCtrl() {}
+
+ virtual BOOL DeleteItem(HTREEITEM hItem) {
+ m_MgaMap.RemoveTreeItem(hItem);
+ return CTreeCtrl::DeleteItem(hItem);
+ }
+
+ virtual void CleanUp() {
+ CTreeCtrlEx::DeleteAllItems();
+ m_MgaMap.DestroyMap();
+ }
+
+ virtual BOOL LookupObjectUnknown(HTREEITEM hTreeItem, IUnknown*& out) {
+ return m_MgaMap.LookupObjectUnknown(hTreeItem, out);
+ }
+
+ CMgaMap<ObjectProxy> m_MgaMap;
+};
+
#endif // !defined(AFX_MGAMAPPEDTREECTRL_H__01ABA150_667F_4191_95BC_DA45058B98C9__INCLUDED_)
Modified: trunk/GME/GMEActiveBrowser/MgaObjectProxy.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaObjectProxy.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MgaObjectProxy.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -13,7 +13,6 @@
class CMgaObjectProxy
{
- friend class CMgaMap;
public:
CMgaObjectProxy(){};
CMgaObjectProxy(LPUNKNOWN pMgaObject, objtype_enum type);
Modified: trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -1,35 +1 @@
-// MgaObjectProxyMapItem.cpp: implementation of the CMgaObjectProxyMapItem class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-#include "gmeactivebrowser.h"
-#include "MgaObjectProxyMapItem.h"
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-CMgaObjectProxyMapItem::CMgaObjectProxyMapItem(LPUNKNOWN pMgaObject, objtype_enum type, HTREEITEM hTreeItem)
-:CMgaObjectProxy(pMgaObject,type),m_hTreeItem(hTreeItem)
-{
-
-}
-
-CMgaObjectProxyMapItem::CMgaObjectProxyMapItem(CMgaObjectProxy& rSourceMgaObjectProxy, HTREEITEM hTreeItem)
-:CMgaObjectProxy(rSourceMgaObjectProxy),m_hTreeItem(hTreeItem)
-{
-
-
-}
-
-CMgaObjectProxyMapItem::~CMgaObjectProxyMapItem()
-{
-
-}
+#include "StdAfx.h"
\ No newline at end of file
Modified: trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/MgaObjectProxyMapItem.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -1,25 +0,0 @@
-// MgaObjectProxyMapItem.h: interface for the CMgaObjectProxyMapItem class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_MGAOBJECTPROXYMAPITEM_H__0A26F08F_7295_4AEC_81F6_C1DFE5FD7944__INCLUDED_)
-#define AFX_MGAOBJECTPROXYMAPITEM_H__0A26F08F_7295_4AEC_81F6_C1DFE5FD7944__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include "MgaObjectProxy.h"
-
-class CMgaObjectProxyMapItem : public CMgaObjectProxy
-{
- friend class CMgaMap;
- HTREEITEM m_hTreeItem;
-public:
- CMgaObjectProxyMapItem(LPUNKNOWN pMgaObject, objtype_enum type, HTREEITEM hTreeItem);
- CMgaObjectProxyMapItem(CMgaObjectProxy& rSourceMgaObjectProxy, HTREEITEM hTreeItem);
- virtual ~CMgaObjectProxyMapItem();
-
-};
-
-#endif // !defined(AFX_MGAOBJECTPROXYMAPITEM_H__0A26F08F_7295_4AEC_81F6_C1DFE5FD7944__INCLUDED_)
Modified: trunk/GME/GMEActiveBrowser/TreeCtrlEx.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/TreeCtrlEx.cpp Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/TreeCtrlEx.cpp Thu Jun 28 14:07:20 2012 (r1941)
@@ -979,7 +979,7 @@
///////////////////////////////////////////////////////////////////////////////
// Retreives a tree ctrl item given the item's data
-HTREEITEM CTreeCtrlEx::ItemFromData(DWORD dwData, HTREEITEM hStartAtItem/*=NULL*/) const
+HTREEITEM CTreeCtrlEx::ItemFromData(DWORD_PTR dwData, HTREEITEM hStartAtItem/*=NULL*/) const
{
// Traverse all items in tree control
HTREEITEM hItem;
@@ -990,7 +990,7 @@
while ( hItem )
{
- if ( dwData == (DWORD)GetItemData( hItem ) )
+ if ( dwData == GetItemData( hItem ) )
return hItem;
// Get first child node
@@ -1024,7 +1024,7 @@
// Global function to retreive a HTREEITEM from a tree control, given the
// item's itemdata.
-HTREEITEM GetTreeItemFromData(CTreeCtrl& treeCtrl, DWORD dwData, HTREEITEM hStartAtItem /*=NULL*/)
+HTREEITEM GetTreeItemFromData(CTreeCtrl& treeCtrl, DWORD_PTR dwData, HTREEITEM hStartAtItem /*=NULL*/)
{
// Traverse from given item (or all items if hFromItem is NULL)
HTREEITEM hItem;
@@ -1035,7 +1035,7 @@
while ( hItem )
{
- if ( dwData == (DWORD)treeCtrl.GetItemData( hItem ) )
+ if ( dwData == treeCtrl.GetItemData( hItem ) )
return hItem;
// Get first child node
Modified: trunk/GME/GMEActiveBrowser/TreeCtrlEx.h
==============================================================================
--- trunk/GME/GMEActiveBrowser/TreeCtrlEx.h Tue Jun 26 14:09:40 2012 (r1940)
+++ trunk/GME/GMEActiveBrowser/TreeCtrlEx.h Thu Jun 28 14:07:20 2012 (r1941)
@@ -40,7 +40,7 @@
HTREEITEM GetFirstSelectedItem();
HTREEITEM GetNextSelectedItem(HTREEITEM hItem);
HTREEITEM GetPrevSelectedItem(HTREEITEM hItem);
- HTREEITEM ItemFromData(DWORD dwData, HTREEITEM hStartAtItem=NULL) const;
+ HTREEITEM ItemFromData(DWORD_PTR dwData, HTREEITEM hStartAtItem=NULL) const;
BOOL SelectItemEx(HTREEITEM hItem, BOOL bSelect=TRUE);
@@ -105,9 +105,12 @@
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
+
+private:
+ CTreeCtrlEx(const CTreeCtrlEx&);
};
-HTREEITEM GetTreeItemFromData(CTreeCtrl& treeCtrl, DWORD dwData, HTREEITEM hStartAtItem=NULL);
+HTREEITEM GetTreeItemFromData(CTreeCtrl& treeCtrl, DWORD_PTR dwData, HTREEITEM hStartAtItem=NULL);
#endif
More information about the gme-commit
mailing list