[GME-commit]
GMESRC/GME/Gme GMEApp.h,1.34,1.35 GMEOLEApp.cpp,1.14,1.15
GMEOLEApp.h,1.8,1.9 GMEOLEIt.h,1.3,1.4 GMEOLEIt.cpp,1.6,1.7
gme-commit at list.isis.vanderbilt.edu
gme-commit at list.isis.vanderbilt.edu
Thu Oct 19 03:18:25 CDT 2006
Update of /project/gme-repository/GMESRC/GME/Gme
In directory escher:/tmp/cvs-serv26043
Modified Files:
GMEApp.h GMEOLEApp.cpp GMEOLEApp.h GMEOLEIt.h GMEOLEIt.cpp
Log Message:
IGMEOleApp has Exit.
IGMEOleIt has some new methods.
CVS User: Zoltan Molnar, ISIS (zolmol)
Index: GMEOLEIt.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEOLEIt.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** GMEOLEIt.h 18 Nov 2005 18:17:39 -0000 1.3
--- GMEOLEIt.h 19 Oct 2006 02:18:23 -0000 1.4
***************
*** 57,64 ****
--- 57,66 ----
static void refPortFinderAndChainBuilder( LPCTSTR p_portRole, CComPtr<IMgaFCO> p_ref, CComPtr<IMgaFCO>& p_portResult, CComPtr<IMgaFCOs>& p_refChainResult );
static bool areCollectionsEqual( const CComPtr<IMgaFCOs>& op1, const CComPtr<IMgaFCOs>& op2);
+ static bool refChainBuilder2( CComPtr<IMgaFCO> p_ref, CComPtr<IMgaFCO> port, CComPtr<IMgaFCOs>& chain);
// gui related helpers
void moveAspect( int dir);
void moveView( int dir);
+ void doLayout( long par);
// transaction related helper methods
***************
*** 102,107 ****
--- 104,112 ----
afx_msg void ShowFCO( LPCTSTR, BOOL);
+ afx_msg void ShowFCOPtr( LPDISPATCH, BOOL);
afx_msg LPDISPATCH Child( LPCTSTR);
afx_msg LPDISPATCH Create( LPCTSTR, LPCTSTR);
+ afx_msg LPDISPATCH CreateInChild( LPCTSTR, LPCTSTR, LPCTSTR);
+ afx_msg LPDISPATCH CreateInChildFCO( LPDISPATCH, LPCTSTR, LPCTSTR);
afx_msg LPDISPATCH Duplicate( LPCTSTR, LPCTSTR);
afx_msg LPDISPATCH DuplicateFCO( LPDISPATCH, LPCTSTR);
***************
*** 115,118 ****
--- 120,124 ----
afx_msg void Disconnect( LPCTSTR, LPCTSTR, LPCTSTR);
afx_msg LPDISPATCH ConnectThruPort( LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR);
+ afx_msg LPDISPATCH ConnectThruPortFCO( LPDISPATCH, LPDISPATCH, LPDISPATCH, LPDISPATCH, LPCTSTR);
afx_msg void DisconnectThruPort( LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR);
afx_msg LPDISPATCH ConnectFCOs( LPDISPATCH, LPDISPATCH, LPCTSTR);
***************
*** 122,125 ****
--- 128,134 ----
afx_msg void ClearRef( LPCTSTR);
afx_msg void ClearRefFCO( LPDISPATCH);
+ afx_msg void FollowRef( LPCTSTR);
+ afx_msg void FollowRefFCO( LPDISPATCH);
+ afx_msg LPDISPATCH NullFCO();
afx_msg void SetAttribute( LPCTSTR, LPCTSTR, LPCTSTR);
***************
*** 150,153 ****
--- 159,163 ----
afx_msg void Next( );
afx_msg void Prev( );
+ afx_msg void Layout( long);
DECLARE_DISPATCH_MAP()
***************
*** 175,180 ****
--- 185,194 ----
STDMETHOD(ShowFCO)(THIS_ BSTR path, VARIANT_BOOL inparent);
+ STDMETHOD(ShowFCOPtr)(THIS_ IMgaFCO* ptr, VARIANT_BOOL inparent);
STDMETHOD(Child)(THIS_ BSTR name, IMgaFCO** child_fco);
STDMETHOD(Create)(THIS_ BSTR part, BSTR name, IMgaFCO** new_fco);
+ STDMETHOD(CreateInChild)(THIS_ BSTR child_as_parent, BSTR part, BSTR name, IMgaFCO** new_fco);
+ STDMETHOD(CreateInChildFCO)(THIS_ IMgaFCO* child_as_parent, BSTR part, BSTR name, IMgaFCO** new_fco);
+
STDMETHOD(Duplicate)(THIS_ BSTR existing_fco_name, BSTR new_fco_name, IMgaFCO** new_fco);
STDMETHOD(DuplicateFCO)(THIS_ IMgaFCO* existing_fco, BSTR new_fco_name, IMgaFCO** new_fco);
***************
*** 188,191 ****
--- 202,206 ----
STDMETHOD(Disconnect)(THIS_ BSTR part1, BSTR part2, BSTR connection);
STDMETHOD(ConnectThruPort)(THIS_ BSTR part1, BSTR port1, BSTR part2, BSTR port2, BSTR connection, IMgaConnection ** conn );
+ STDMETHOD(ConnectThruPortFCO)(THIS_ IMgaFCO* part1, IMgaFCO* port1, IMgaFCO* part2, IMgaFCO* port2, BSTR connection_role, IMgaConnection ** conn);
STDMETHOD(DisconnectThruPort)(THIS_ BSTR part1, BSTR port1, BSTR part2, BSTR port2, BSTR connection);
STDMETHOD(ConnectFCOs)(THIS_ IMgaFCO* part1, IMgaFCO* part2, BSTR connection, IMgaConnection ** conn );
***************
*** 195,198 ****
--- 210,216 ----
STDMETHOD(ClearRef)(THIS_ BSTR reference);
STDMETHOD(ClearRefFCO)(THIS_ IMgaReference* reference);
+ STDMETHOD(FollowRef)(THIS_ BSTR reference);
+ STDMETHOD(FollowRefFCO)(THIS_ IMgaReference* reference);
+ STDMETHOD(NullFCO)(THIS_ IMgaFCO** nullobj);
STDMETHOD(SetAttribute)(THIS_ BSTR name, BSTR attr_name, BSTR value);
***************
*** 224,227 ****
--- 242,246 ----
STDMETHOD(Next)(THIS);
STDMETHOD(Prev)(THIS);
+ STDMETHOD(Layout)(THIS_ long par);
END_DUAL_INTERFACE_PART(Dual)
Index: GMEOLEApp.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEOLEApp.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** GMEOLEApp.h 1 May 2006 17:20:11 -0000 1.8
--- GMEOLEApp.h 19 Oct 2006 02:18:23 -0000 1.9
***************
*** 97,100 ****
--- 97,101 ----
afx_msg BOOL GetCompFiltering();
afx_msg void SetWorkingDirectory( LPCTSTR pPath);
+ afx_msg void Exit();
DECLARE_DISPATCH_MAP()
***************
*** 151,154 ****
--- 152,156 ----
STDMETHOD(GetCompFiltering)( THIS_ VARIANT_BOOL* pOn);
STDMETHOD(SetWorkingDirectory)(THIS_ BSTR pPath);
+ STDMETHOD(Exit)(THIS);
END_DUAL_INTERFACE_PART(Dual)
Index: GMEApp.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEApp.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** GMEApp.h 3 May 2006 16:50:26 -0000 1.34
--- GMEApp.h 19 Oct 2006 02:18:23 -0000 1.35
***************
*** 138,141 ****
--- 138,142 ----
void FindConstraintManager();
void RunComponent(const CString &progid);
+ void exit() { OnAppExit(); }
void Autosave();
Index: GMEOLEApp.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEOLEApp.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** GMEOLEApp.cpp 1 May 2006 17:20:11 -0000 1.14
--- GMEOLEApp.cpp 19 Oct 2006 02:18:23 -0000 1.15
***************
*** 121,124 ****
--- 121,125 ----
DISP_FUNCTION(CGMEOLEApp, "GetCompFiltering", GetCompFiltering, VT_BOOL, VTS_NONE)
DISP_FUNCTION(CGMEOLEApp, "SetWorkingDirectory", SetWorkingDirectory, VT_EMPTY, VTS_BSTR)
+ DISP_FUNCTION(CGMEOLEApp, "Exit", Exit, VT_EMPTY, VTS_NONE)
//}}AFX_DISPATCH_MAP
***************
*** 723,726 ****
--- 724,732 ----
}
+ void CGMEOLEApp::Exit()
+ {
+ theApp.exit();
+ }
+
DELEGATE_DUAL_INTERFACE(CGMEOLEApp, Dual)
***************
*** 1305,1308 ****
--- 1311,1326 ----
{
pThis->SetWorkingDirectory( CString( pPath));
+ return NOERROR;
+ }
+ CATCH_ALL_DUAL
+ }
+
+ STDMETHODIMP CGMEOLEApp::XDual::Exit()
+ {
+ METHOD_PROLOGUE(CGMEOLEApp, Dual)
+
+ TRY_DUAL(IID_IGMEOLEApp)
+ {
+ pThis->Exit();
return NOERROR;
}
Index: GMEOLEIt.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEOLEIt.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** GMEOLEIt.cpp 18 Nov 2005 18:17:39 -0000 1.6
--- GMEOLEIt.cpp 19 Oct 2006 02:18:23 -0000 1.7
***************
*** 443,446 ****
--- 443,486 ----
}
+ // verifies if p_port
+ // -is inside a model referred by p_ref
+ // -or inside a model referred by a reference referred by p_ref
+ // -or inside a model (referred by a reference)* referred by p_ref
+ // and builds the reference collection (chain)
+ //
+ // returns: success or failure
+ // the reference collection
+ //
+ // used by ConnectThruPortFCO
+ //static
+ bool CGMEOLEIt::refChainBuilder2( CComPtr<IMgaFCO> p_ref, CComPtr<IMgaFCO> p_port, CComPtr<IMgaFCOs>& coll)
+ {
+ CComQIPtr<IMgaReference> ref( p_ref);
+ CComPtr<IMgaFCO> tgt;
+ if( !coll) coll.CoCreateInstance( L"Mga.MgaFCOs");
+ VERIFY( coll);
+
+ bool valid = ref != 0;
+ while( ref && valid)
+ {
+ COMTHROW( coll->Append( ref));
+ COMTHROW( ref->get_Referred( &tgt));
+ CComQIPtr<IMgaModel> tgt_model( tgt);
+ CComQIPtr<IMgaReference> tgt_isRef( tgt);
+ if( tgt_model)
+ {
+ ref = CComPtr<IMgaReference>(0);
+ valid = isValidChildIn( tgt_model.p, p_port.p);
+ }
+ else
+ {
+ ref = tgt_isRef;
+ valid = ref != 0;
+ }
+ }
+
+ return valid;
+ }
+
// static
bool CGMEOLEIt::createObjs( CComPtr<IMgaModel>& p_parent, LPCTSTR p_partToCreate, LPCTSTR p_givenName, IMgaFCO** p_pNewObj )
***************
*** 572,577 ****
--- 612,620 ----
DISP_FUNCTION(CGMEOLEIt, "ShowFCO", ShowFCO, VT_EMPTY, VTS_BSTR VTS_BOOL)
+ DISP_FUNCTION(CGMEOLEIt, "ShowFCOPtr", ShowFCOPtr, VT_EMPTY, VTS_DISPATCH VTS_BOOL)
DISP_FUNCTION(CGMEOLEIt, "Child", Child, VT_DISPATCH, VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "Create", Create, VT_DISPATCH, VTS_BSTR VTS_BSTR)
+ DISP_FUNCTION(CGMEOLEIt, "CreateInChild", CreateInChild, VT_DISPATCH, VTS_BSTR VTS_BSTR VTS_BSTR)
+ DISP_FUNCTION(CGMEOLEIt, "CreateInChildFCO", CreateInChildFCO, VT_DISPATCH, VTS_DISPATCH VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "Duplicate", Duplicate, VT_DISPATCH, VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "DuplicateFCO", DuplicateFCO, VT_DISPATCH, VTS_DISPATCH VTS_BSTR)
***************
*** 585,595 ****
DISP_FUNCTION(CGMEOLEIt, "Disconnect", Disconnect, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "ConnectThruPort", ConnectThruPort, VT_DISPATCH, VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "DisconnectThruPort", DisconnectThruPort, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "ConnectFCOs", ConnectFCOs, VT_DISPATCH, VTS_DISPATCH VTS_DISPATCH VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "DisconnectFCOs", DisconnectFCOs, VT_EMPTY, VTS_DISPATCH VTS_DISPATCH VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "Refer", Refer, VT_EMPTY, VTS_BSTR VTS_BSTR)
- DISP_FUNCTION(CGMEOLEIt, "ReferFCO", ReferFCO, VT_EMPTY, VTS_DISPATCH VTS_DISPATCH)
DISP_FUNCTION(CGMEOLEIt, "ClearRef", ClearRef, VT_EMPTY, VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "ClearRefFCO", ClearRefFCO, VT_EMPTY, VTS_DISPATCH)
DISP_FUNCTION(CGMEOLEIt, "SetAttribute", SetAttribute, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR)
--- 628,642 ----
DISP_FUNCTION(CGMEOLEIt, "Disconnect", Disconnect, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "ConnectThruPort", ConnectThruPort, VT_DISPATCH, VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR)
+ DISP_FUNCTION(CGMEOLEIt, "ConnectThruPortFCO", ConnectThruPortFCO, VT_DISPATCH, VTS_DISPATCH VTS_DISPATCH VTS_DISPATCH VTS_DISPATCH VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "DisconnectThruPort", DisconnectThruPort, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "ConnectFCOs", ConnectFCOs, VT_DISPATCH, VTS_DISPATCH VTS_DISPATCH VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "DisconnectFCOs", DisconnectFCOs, VT_EMPTY, VTS_DISPATCH VTS_DISPATCH VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "Refer", Refer, VT_EMPTY, VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CGMEOLEIt, "ClearRef", ClearRef, VT_EMPTY, VTS_BSTR)
+ DISP_FUNCTION(CGMEOLEIt, "FollowRef", FollowRef, VT_EMPTY, VTS_BSTR)
+ DISP_FUNCTION(CGMEOLEIt, "ReferFCO", ReferFCO, VT_EMPTY, VTS_DISPATCH VTS_DISPATCH)
DISP_FUNCTION(CGMEOLEIt, "ClearRefFCO", ClearRefFCO, VT_EMPTY, VTS_DISPATCH)
+ DISP_FUNCTION(CGMEOLEIt, "FollowRefFCO", FollowRefFCO, VT_EMPTY, VTS_DISPATCH)
+ DISP_FUNCTION(CGMEOLEIt, "NullFCO", NullFCO, VT_DISPATCH, VTS_NONE)
DISP_FUNCTION(CGMEOLEIt, "SetAttribute", SetAttribute, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR)
***************
*** 621,624 ****
--- 668,672 ----
DISP_FUNCTION(CGMEOLEIt, "Next", Next, VT_EMPTY, VTS_NONE )
DISP_FUNCTION(CGMEOLEIt, "Prev", Prev, VT_EMPTY, VTS_NONE )
+ DISP_FUNCTION(CGMEOLEIt, "Layout", Layout, VT_EMPTY, VTS_I4)
***************
*** 1115,1118 ****
--- 1163,1183 ----
}
+ void CGMEOLEIt::ShowFCOPtr( LPDISPATCH p_obj, BOOL p_inParent)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::ShowFCOPtr\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ CComQIPtr<IMgaFCO> obj_ptr( p_obj);
+
+ if( obj_ptr && CMainFrame::theInstance != NULL )
+ {
+ CMainFrame::theInstance->mGmeOleApp->ShowFCO( obj_ptr, p_inParent);
+ }
+ }
+
LPDISPATCH CGMEOLEIt::Child( LPCTSTR p_objName)
{
***************
*** 1158,1161 ****
--- 1223,1278 ----
}
+ LPDISPATCH CGMEOLEIt::CreateInChild( LPCTSTR p_childAsParent, LPCTSTR p_part, LPCTSTR p_objname)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::CreateInChild\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ CComPtr<IMgaFCO> obj_ptr;
+ start();
+ try
+ {
+ CComQIPtr<IMgaModel> model( putInTerr( m_theMgaModel));
+ THROW_IF_NULL( model, _T("Invalid parent model"));
+
+ CComQIPtr<IMgaModel> child( getChildInByName( model, p_childAsParent));
+ THROW_IF_NULL( child, _T("Invalid child model specified"));
+
+ createObjs( child, p_part, p_objname, &obj_ptr);
+ }
+ CATCHALL_AND_CALL_END;
+ return obj_ptr.Detach();
+ }
+
+ LPDISPATCH CGMEOLEIt::CreateInChildFCO( LPDISPATCH p_childAsParent, LPCTSTR p_part, LPCTSTR p_objname)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::Create\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ CComPtr<IMgaFCO> obj_ptr;
+ start();
+ try
+ {
+ CComQIPtr<IMgaModel> model( putInTerr( m_theMgaModel));
+ THROW_IF_NULL( model, _T("Invalid parent model"));
+
+ CComQIPtr<IMgaModel> child( putInTerr( p_childAsParent));
+ if( !child || !isValidChildIn( model.p, child.p))
+ THROW_IF_NULL( 0, _T("Invalid child model specified"));
+
+ createObjs( child, p_part, p_objname, &obj_ptr);
+ }
+ CATCHALL_AND_CALL_END;
+ return obj_ptr.Detach();
+ }
+
+
LPDISPATCH CGMEOLEIt::Duplicate( LPCTSTR p_existingObjName, LPCTSTR p_objName)
{
***************
*** 1506,1524 ****
objtype_enum type2_info = myTypeIs( dst1);
! if( type1_info == OBJTYPE_MODEL)
{
// for models only:
sport = getChildInByName( CComQIPtr<IMgaModel>(src1), p_srcRole2);
}
! else if( type1_info == OBJTYPE_REFERENCE)
{
refPortFinderAndChainBuilder( p_srcRole2, src1, sport, srefs );
}
! if( type2_info == OBJTYPE_MODEL)
{
dport = getChildInByName( CComQIPtr<IMgaModel>(dst1), p_dstRole2);
}
! else if( type2_info == OBJTYPE_REFERENCE)
{
refPortFinderAndChainBuilder( p_dstRole2, dst1, dport, drefs);
--- 1623,1641 ----
objtype_enum type2_info = myTypeIs( dst1);
! if( type1_info == OBJTYPE_MODEL && CComBSTR( p_srcRole2) != "")
{
// for models only:
sport = getChildInByName( CComQIPtr<IMgaModel>(src1), p_srcRole2);
}
! else if( type1_info == OBJTYPE_REFERENCE && CComBSTR( p_srcRole2) != "")
{
refPortFinderAndChainBuilder( p_srcRole2, src1, sport, srefs );
}
! if( type2_info == OBJTYPE_MODEL && CComBSTR( p_dstRole2) != "")
{
dport = getChildInByName( CComQIPtr<IMgaModel>(dst1), p_dstRole2);
}
! else if( type2_info == OBJTYPE_REFERENCE && CComBSTR( p_dstRole2) != "")
{
refPortFinderAndChainBuilder( p_dstRole2, dst1, dport, drefs);
***************
*** 1571,1574 ****
--- 1688,1803 ----
}
+ LPDISPATCH CGMEOLEIt::ConnectThruPortFCO( LPDISPATCH p_src1, LPDISPATCH p_src2Port, LPDISPATCH p_dst1, LPDISPATCH p_dst2Port, LPCTSTR p_connName)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::ConnectThruPortFCO\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ CComPtr<IMgaFCO> new_conn;
+ start();
+ try
+ {
+ CComQIPtr<IMgaModel> model( putInTerr( m_theMgaModel));
+ THROW_IF_NULL( model, _T("Invalid parent model"));
+
+ //CComPtr<IMgaFCO> src1( getChildInByName( model, p_srcRole1));
+ CComQIPtr<IMgaFCO> src1( putInTerr( p_src1));
+ THROW_IF_NULL( src1, _T("SourceRole1 object not found"));
+ //CComPtr<IMgaFCO> dst1( getChildInByName( model, p_dstRole1));
+ CComQIPtr<IMgaFCO> dst1( putInTerr( p_dst1));
+ THROW_IF_NULL( dst1, _T("DestinationRole1 object not found"));
+
+ if( !isValidChildIn( model.p, src1.p))
+ THROW_IF_NULL( 0, _T("SourceRole1 object not found in active model"));
+ if( !isValidChildIn( model.p, dst1.p))
+ THROW_IF_NULL( 0, _T("DestinationRole1 object not found in active model"));
+
+ objtype_enum type1_info = myTypeIs( src1);
+ objtype_enum type2_info = myTypeIs( dst1);
+
+ CComPtr<IMgaFCOs> srefs;
+ CComPtr<IMgaFCOs> drefs;
+
+ CComQIPtr<IMgaFCO> sport( putInTerr( p_src2Port));
+ CComQIPtr<IMgaFCO> dport( putInTerr( p_dst2Port));
+ if( sport) // non-zero means really port is needed to be connected
+ {
+ if( type1_info == OBJTYPE_MODEL)
+ {
+ CComQIPtr<IMgaModel> s_m( src1);
+ bool valid = s_m && isValidChildIn( s_m.p, sport.p);
+ THROW_IF_NULL( valid, _T("Source port object not found in source model specified"));
+ }
+ else if( type1_info == OBJTYPE_REFERENCE)
+ {
+ bool succ = refChainBuilder2( src1, sport.p, srefs);
+ THROW_IF_NULL( succ, _T("Source port object not found inside the target of the specified reference"));
+ }
+ }
+
+ if( dport) // non-zero means really port is needed to be connected
+ {
+ if( type2_info == OBJTYPE_MODEL)
+ {
+ CComQIPtr<IMgaModel> d_m( dst1);
+ bool valid = d_m && isValidChildIn( d_m.p, dport.p);
+ THROW_IF_NULL( valid, _T("Destination port object not found in destination model specified"));
+ }
+ else if( type2_info == OBJTYPE_REFERENCE)
+ {
+ bool succ = refChainBuilder2( dst1.p, dport.p, drefs);
+ THROW_IF_NULL( succ, _T("Destination port object not found inside the target of the specified reference"));
+ }
+ }
+
+ bool error;
+ error = p_src2Port && !sport; // if sport == NULL and the p_src2Port != NULL then error state
+ THROW_IF_BOOL( error, _T("SourceRole2 object not found"));
+ error = p_dst2Port && !dport; // if dport == NULL and the p_dst2Port != NULL then error state
+ THROW_IF_BOOL( error, _T("DestinationRole2 object not found"));
+
+ CComPtr<IMgaMetaRole> metarole;
+ CComBSTR conn_name( p_connName);
+ try
+ {
+ if( conn_name != "")
+ metarole = metaRolePtrInByName( model, conn_name);
+ }catch(...)
+ {
+ THROW_IF_BOOL( true, _T("No such connection role found"));
+ }
+
+ if( !metarole)
+ metarole = connMetaRolePtrInBetween( model, src1, sport, dst1, dport ); // create the only possible connection if 1 exists
+
+ THROW_IF_NULL( metarole, _T("No possible connection found"));
+
+ // will create a connection inside the model
+ // between
+ // src1 sport - dst1 dport
+ // src1 sport - dst1
+ // src1 - dst1 dport
+ // src1 - dst1
+ //
+
+ if( sport && dport)
+ COMTHROW( model->CreateSimpleConn( metarole, sport, dport, srefs, drefs, &new_conn));
+ else if( sport && dst1)
+ COMTHROW( model->CreateSimpleConn( metarole, sport, dst1, srefs, drefs, &new_conn));
+ else if( dport && src1)
+ COMTHROW( model->CreateSimpleConn( metarole, src1, dport, srefs, drefs, &new_conn));
+ else if( src1 && dst1 )
+ COMTHROW( model->CreateSimpleConn( metarole, src1, dst1, srefs, drefs, &new_conn));
+ else
+ THROW_IF_BOOL( true, _T("Unexpected case"));
+ }
+ CATCHALL_AND_CALL_END;
+
+ return new_conn.Detach();
+ }
+
void CGMEOLEIt::DisconnectThruPort( LPCTSTR p_srcRole1, LPCTSTR p_srcRole2, LPCTSTR p_dstRole1, LPCTSTR p_dstRole2, LPCTSTR p_connName)
{
***************
*** 1938,1941 ****
--- 2167,2231 ----
}
+ void CGMEOLEIt::FollowRef( LPCTSTR prefnm)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::FollowRef\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ CComPtr<IMgaFCO> tgt;
+ start();
+ try
+ {
+ CComQIPtr<IMgaModel> model( putInTerr( m_theMgaModel));
+ THROW_IF_NULL( model, _T("Invalid parent model"));
+
+ CComQIPtr<IMgaReference> ref( getChildInByName( model, prefnm));
+ THROW_IF_NULL( ref, _T("Reference object not found"));
+
+ COMTHROW( ref->get_Referred( &tgt ));
+
+ }
+ CATCHALL_AND_CALL_END;
+
+ if( tgt) ShowFCOPtr( tgt, 1);
+ }
+
+ void CGMEOLEIt::FollowRefFCO( LPDISPATCH pref)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::FollowRefFCO\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ CComQIPtr<IMgaFCO> tgt;
+ start();
+ try
+ {
+ CComQIPtr<IMgaModel> model( putInTerr( m_theMgaModel));
+ THROW_IF_NULL( model, _T("Invalid parent model"));
+
+ CComQIPtr<IMgaReference> ref( putInTerr( pref));
+ THROW_IF_NULL( ref, _T("Invalid Reference pointer"));
+
+ COMTHROW( ref->get_Referred( &tgt) );
+ }
+ CATCHALL_AND_CALL_END;
+
+ if( tgt) ShowFCOPtr( tgt, 1);
+ }
+
+ LPDISPATCH CGMEOLEIt::NullFCO()
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::NullFCO\r\n");
+ CComPtr<IMgaFCO> nullobj;
+ return nullobj.Detach();
+ }
+
+
void CGMEOLEIt::SetAttribute( LPCTSTR p_partName, LPCTSTR p_attrName, LPCTSTR p_attrValue)
{
***************
*** 2556,2559 ****
--- 2846,2865 ----
}
+ void CGMEOLEIt::doLayout( long p)
+ {
+ }
+
+ void CGMEOLEIt::Layout( long par)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEOLEIt::Layout()\r\n");
+
+ PRECONDITION_VALID_MODEL // calls AmIValid
+
+ ASSERT( m_theView);
+ ASSERT( m_theMgaModel);
+
+ doLayout( par);
+ }
+
DELEGATE_DUAL_INTERFACE(CGMEOLEIt, Dual)
***************
*** 2799,2802 ****
--- 3105,3120 ----
}
+ STDMETHODIMP CGMEOLEIt::XDual::ShowFCOPtr( IMgaFCO* child, VARIANT_BOOL inParent)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ pThis->ShowFCOPtr( child, inParent);
+ return NOERROR;
+ }
+ CATCH_ALL_DUAL
+ }
+
STDMETHODIMP CGMEOLEIt::XDual::Child( BSTR child_name, IMgaFCO** new_fco)
{
***************
*** 2825,2828 ****
--- 3143,3172 ----
}
+ STDMETHODIMP CGMEOLEIt::XDual::CreateInChild( BSTR child_as_parent, BSTR part, BSTR name, IMgaFCO** new_fco)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ LPDISPATCH lpDisp = pThis->CreateInChild( (LPCTSTR) child_as_parent, (LPCTSTR) part, (LPCTSTR) name);
+ lpDisp->QueryInterface(IID_IMgaFCO, (LPVOID*) new_fco);
+ return NOERROR;
+ }
+ CATCH_ALL_DUAL
+ }
+
+ STDMETHODIMP CGMEOLEIt::XDual::CreateInChildFCO( IMgaFCO* child_as_parent, BSTR part, BSTR name, IMgaFCO** new_fco)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ LPDISPATCH lpDisp = pThis->CreateInChildFCO( child_as_parent, (LPCTSTR) part, (LPCTSTR) name);
+ lpDisp->QueryInterface(IID_IMgaFCO, (LPVOID*) new_fco);
+ return NOERROR;
+ }
+ CATCH_ALL_DUAL
+ }
+
STDMETHODIMP CGMEOLEIt::XDual::Duplicate(THIS_ BSTR existing_fco_name, BSTR new_fco_name, IMgaFCO** new_fco)
{
***************
*** 2953,2956 ****
--- 3297,3312 ----
}
+ STDMETHODIMP CGMEOLEIt::XDual::ConnectThruPortFCO(THIS_ IMgaFCO* src_part, IMgaFCO* src_ref, IMgaFCO* dst_part, IMgaFCO* dst_ref, BSTR connection_role, IMgaConnection ** conn)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ LPDISPATCH lpDisp = pThis->ConnectThruPortFCO( src_part, src_ref, dst_part, dst_ref, (LPCTSTR) connection_role);
+ lpDisp->QueryInterface(IID_IMgaConnection, (LPVOID*) conn);
+ }
+ CATCH_ALL_DUAL
+ }
+
STDMETHODIMP CGMEOLEIt::XDual::DisconnectThruPort(THIS_ BSTR part1, BSTR port1, BSTR part2, BSTR port2, BSTR connection)
{
***************
*** 3031,3034 ****
--- 3387,3424 ----
}
+ STDMETHODIMP CGMEOLEIt::XDual::FollowRef(THIS_ BSTR reference)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ pThis->FollowRef( (LPCTSTR) reference);
+ }
+ CATCH_ALL_DUAL
+ }
+
+ STDMETHODIMP CGMEOLEIt::XDual::FollowRefFCO(THIS_ IMgaReference* reference)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ pThis->FollowRefFCO( reference);
+ }
+ CATCH_ALL_DUAL
+ }
+
+ STDMETHODIMP CGMEOLEIt::XDual::NullFCO(THIS_ IMgaFCO** nullobj)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ LPDISPATCH lpDisp = pThis->NullFCO();
+ lpDisp->QueryInterface(IID_IMgaFCO, (LPVOID*) nullobj);
+ }
+ CATCH_ALL_DUAL
+ }
+
STDMETHODIMP CGMEOLEIt::XDual::SetAttribute(THIS_ BSTR name, BSTR attr_name, BSTR value)
{
***************
*** 3279,3282 ****
--- 3669,3684 ----
{
pThis->Prev();
+ return NOERROR;
+ }
+ CATCH_ALL_DUAL
+ }
+
+ STDMETHODIMP CGMEOLEIt::XDual::Layout(THIS_ long par)
+ {
+ METHOD_PROLOGUE(CGMEOLEIt, Dual)
+
+ TRY_DUAL(IID_IGMEOLEIt)
+ {
+ pThis->Layout( par);
return NOERROR;
}
More information about the GME-commit
mailing list