[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