[GME-commit] GMESRC/GME/Gme ConnityDlg.cpp, NONE, 1.1 ConnityDlg.h, NONE, 1.1 resource.h, 1.76, 1.77 GME.rc, 1.165, 1.166 GME.vcproj, 1.6, 1.7 GMEView.h, 1.80, 1.81 GMEView.cpp, 1.197, 1.198

Log messages of CVS commits gme-commit at list.isis.vanderbilt.edu
Tue Mar 18 14:20:32 CDT 2008


Update of /project/gme-repository/GMESRC/GME/Gme
In directory escher:/tmp/cvs-serv17260

Modified Files:
	resource.h GME.rc GME.vcproj GMEView.h GMEView.cpp 
Added Files:
	ConnityDlg.cpp ConnityDlg.h 
Log Message:
Jump back and forth along connections.


CVS User: Zoltan Molnar, ISIS (zolmol)

--- NEW FILE: ConnityDlg.h ---
#pragma once
//#include "afxwin.h"
#include "GMEStd.h"
#include "GuiObject.h"
#include "afxwin.h"


// CConnityDlg dialog, as in Connectivity

class CConnityDlg : public CDialog
{
	DECLARE_DYNAMIC(CConnityDlg)

	CGuiConnectionList* m_listC;
	CGuiFcoList*        m_listF;

	CGuiConnection*     m_selectedC;
	CGuiFco*            m_selectedF;

	bool                m_reverse;

	static int          m_leftPad;
	static int          m_rightPad;
	static int          m_lastCX;
	static int          m_lastCY;
	static int          m_smallestCX;
	static int          m_smallestCY;

public:
	CConnityDlg( bool p_reverse, CWnd* pParent = NULL);   // standard constructor
	virtual ~CConnityDlg();

	void setList( CGuiConnectionList& p_list);
	void setList( CGuiFcoList&        p_list);

	CGuiConnection*    getSelectedC();
	CGuiFco*           getSelectedF();

// Dialog Data
	enum { IDD = IDD_CONNECTIVITYDIALOG };

	virtual BOOL OnInitDialog();

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	virtual void OnOK();

	DECLARE_MESSAGE_MAP()
	CListBox m_options;
	CButton m_ok;
	CButton m_ca;

public:
	afx_msg void OnLbnDblclkList1();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnSizing(UINT fwSide, LPRECT pRect);
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
};

Index: GMEView.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEView.cpp,v
retrieving revision 1.197
retrieving revision 1.198
diff -C2 -d -r1.197 -r1.198
*** GMEView.cpp	7 Feb 2008 22:54:48 -0000	1.197
--- GMEView.cpp	18 Mar 2008 19:20:29 -0000	1.198
***************
*** 19,22 ****
--- 19,23 ----
  #include "GMEEventLogger.h"
  #include "GmePrintDialog.h"
+ #include "ConnityDlg.h"
  
  #include "Autoroute/AutoRouter.h"
***************
*** 314,317 ****
--- 315,327 ----
  	ON_COMMAND(ID_CONNCNTX_PROPERTIES, OnConncntxProperties)
  	ON_COMMAND(ID_CONNCNTX_DELETE, OnConncntxDelete)
+ 	ON_COMMAND(ID_CONNCNTX_FOLLOW, OnConncntxFollow)
+ 	ON_COMMAND(ID_CONNCNTX_REVERSE, OnConncntxRevfollow)
+ 	ON_COMMAND(ID_CNTX_FOLLOWCONNECTION, OnCntxFollowConnection)
+ 	ON_COMMAND(ID_CNTX_REVERSECONNECTION, OnCntxRevfollowConnection)
+ 	ON_COMMAND(ID_JUMPALONGCONN, OnJumpAlongConnection)
+ 	ON_COMMAND(ID_BACKALONGCONN, OnBackAlongConnection)
+ 	ON_COMMAND(ID_JUMPTOFIRSTOBJ, OnJumpToFirstObject)
+ 	ON_COMMAND(ID_JUMPTONEXTOBJ, OnJumpToNextObject)
+ 	ON_COMMAND(ID_SHOWCONTEXTMENU, OnShowContextMenu)
  	ON_COMMAND(ID_CNTX_CLEAR, OnCntxClear)
  	ON_UPDATE_COMMAND_UI(ID_CNTX_CLEAR, OnUpdateCntxClear)
***************
*** 321,324 ****
--- 331,340 ----
  	ON_UPDATE_COMMAND_UI(ID_CONNCNTX_DELETE, OnUpdateConncntxDelete)
  	ON_UPDATE_COMMAND_UI(ID_CNTX_CUT, OnUpdateCntxCut)
+ 	ON_UPDATE_COMMAND_UI(ID_CONNCNTX_FOLLOW, OnUpdateConncntxFollow)
+ 	ON_UPDATE_COMMAND_UI(ID_CONNCNTX_REVERSE, OnUpdateConncntxRevfollow)
+ 	ON_UPDATE_COMMAND_UI(ID_CNTX_FOLLOWCONNECTION, OnUpdateCntxFollowConnection)
+ 	ON_UPDATE_COMMAND_UI(ID_CNTX_REVERSECONNECTION, OnUpdateCntxRevfollowConnection)
+ 	ON_UPDATE_COMMAND_UI(ID_JUMPALONGCONN, OnUpdateJumpAlongConnection)
+ 	ON_UPDATE_COMMAND_UI(ID_BACKALONGCONN, OnUpdateBackAlongConnection)
  	ON_COMMAND(ID_CNTX_PREFERENCES, OnCntxPreferences)
  	ON_COMMAND(ID_EDIT_PREFERENCES, OnEditPreferences)
***************
*** 2516,2519 ****
--- 2532,2590 ----
  }
  
+ CGuiObject *CGMEView::FindFirstObject()
+ {
+ 	m_findNextAlreadyAchieved = 0; // reset the currently achieved minimum level to its default
+ 
+ 	return helpMeFindNextObject( false);
+ }
+ 
+ CGuiObject *CGMEView::FindNextObject()
+ {
+ 	return helpMeFindNextObject( true);
+ }
+ 
+ CGuiObject *CGMEView::helpMeFindNextObject( bool p_secondFind)
+ {
+ 	CGuiObject*      first     = 0;
+ 	unsigned long    first_abs = 0; // distance square from (0,0)
+ 	CPoint           first_pos( 0, 0);
+ 
+ 	POSITION pos = children.GetHeadPosition();
+ 	while(pos) {
+ 		CGuiObject *cur = dynamic_cast<CGuiObject *>( children.GetNext( pos));
+ 		if( cur && cur->IsVisible())
+ 		{
+ 			CPoint        cur_pos = cur->GetCenter();
+ 			unsigned long cur_abs = cur_pos.x * cur_pos.x + cur_pos.y * cur_pos.y;
+ 
+ 			// m_findNextAlreadyAchieved is the previously achieved minimum distance
+ 			// and we need to get further now if not invoked from FindFirst
+ 			// we disregard objects closer than m_curAbs
+ 			if( p_secondFind && cur_abs <= m_findNextAlreadyAchieved)
+ 				continue; // skip if its closer than the allowed/required level
+ 
+ 			if( !first) 
+ 			{
+ 				first      = cur;
+ 				first_pos  = cur_pos;
+ 				first_abs  = cur_abs;
+ 			}
+ 			else
+ 			{
+ 				if( first_abs > cur_abs) // 'cur' closer to (0, 0) than 'first'?
+ 				{
+ 					first     = cur;
+ 					first_pos = cur_pos;
+ 					first_abs = cur_abs;
+ 				}
+ 			}
+ 		}
+ 	}
+ 
+ 	if( first) // something found
+ 		m_findNextAlreadyAchieved = first_abs;
+ 	return first;
+ }
+ 
  CGuiObject *CGMEView::FindObject(CPoint &pt)
  {
***************
*** 5597,5600 ****
--- 5668,5919 ----
  {
  	pCmdUI->Enable(isType);
+ }
+ 
+ void CGMEView::OnShowContextMenu()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnShowContextMenu in "+path+name+"\r\n");
+ 
+ 	CGMEDoc *doc = GetDocument();
+ 	if( doc && doc->GetEditMode() == GME_EDIT_MODE)
+ 	{
+ 		CRect cr;// GetWindowRect( &cr);
+ 		GetClientRect( &cr);
+ 		ClientToScreen( &cr);
+ 		CPoint global( cr.TopLeft() + CPoint( 10, 10));
+ 		if( selected.GetCount() > 0)
+ 		{
+ 			CGuiObject* head = selected.GetHead();
+ 			CPoint local = !head? CPoint( 0, 0): head->GetLocation().TopLeft();//GetCenter()); // overwrite the menu's topleft placement
+ 
+ 			// reverse CoordinateTransfer
+ 			CClientDC fernst(this);
+ 			(const_cast<CGMEView *>(this))->OnPrepareDC(&fernst);
+ 			fernst.LPtoDP( &local);
+ 
+ 			global.Offset( local);
+ 			CMenu menu;
+ 			menu.LoadMenu( dynamic_cast< CGuiConnection *>( head)? IDR_CONNCONTEXT_MENU: IDR_CONTEXT_MENU);
+ 			menu.GetSubMenu( 0)->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, global.x, global.y, GetParent());
+ 		}
+ 		else if( selectedAnnotations.GetCount() > 0)
+ 		{
+ 			CGuiAnnotator* head = selectedAnnotations.GetHead();
+ 			CPoint local = !head? CPoint( 0, 0): head->GetLocation().TopLeft();
+ 
+ 			// reverse CoordinateTransfer
+ 			CClientDC fernst(this);
+ 			(const_cast<CGMEView *>(this))->OnPrepareDC(&fernst);
+ 			fernst.LPtoDP( &local);
+ 
+ 			global.Offset( local); // overwrite the menu's topleft placement
+ 			CMenu menu;
+ 			menu.LoadMenu( IDR_ANNCONTEXT_MENU);
+ 			menu.GetSubMenu( 0)->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, global.x, global.y, GetParent());
+ 		}
+ 		else
+ 		{
+ 			CMenu menu;
+ 			menu.LoadMenu( IDR_SELFCONTEXT_MENU);
+ 			CMenu *submenu = menu.GetSubMenu( 0);
+ 			currentAspect->InitContextMenu( submenu);
+ 			submenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, global.x, global.y, GetParent());
+ 			currentAspect->ResetContextMenu( submenu);
+ 		}
+ 	}
+ }
+ 
+ void CGMEView::OnJumpToFirstObject()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnJumpToFirstObject in "+path+name+"\r\n");
+ 
+ 	CGuiObject* first = FindFirstObject();
+ 
+ 	if( first && first->mgaFco && CGMEDoc::theInstance)
+ 	{
+ 		CGMEDoc::theInstance->ShowObject( CComPtr<IUnknown>( first->mgaFco), TRUE);
+ 	}
+ }
+ 
+ void CGMEView::OnJumpToNextObject()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnJumpToNextObject in "+path+name+"\r\n");
+ 
+ 	CGuiObject* next = FindNextObject();
+ 
+ 	if( next && next->mgaFco && CGMEDoc::theInstance)
+ 	{
+ 		CGMEDoc::theInstance->ShowObject( CComPtr<IUnknown>( next->mgaFco), TRUE);
+ 	}
+ }
+ 
+ void CGMEView::OnConncntxFollow()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnConncntxFollow in "+path+name+"\r\n");
+ 	if(isType) {
+ 		CGuiConnection *conn = dynamic_cast<CGuiConnection *>(contextSelection);
+ 		if(!conn || !FollowLine( conn, false))
+ 			AfxMessageBox("Can't follow along connection!");
+ 		contextSelection = 0;
+ 	}
+ }
+ 
+ void CGMEView::OnConncntxRevfollow()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnConncntxRevfollow in "+path+name+"\r\n");
+ 	if(isType) {
+ 		CGuiConnection *conn = dynamic_cast<CGuiConnection *>(contextSelection);
+ 		if(!conn || !FollowLine( conn, true))
+ 			AfxMessageBox("Can't follow connection in reverse!");
+ 		contextSelection = 0;
+ 	}
+ }
+ 
+ void CGMEView::OnCntxFollowConnection()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnCntxFollowConnection in "+path+name+"\r\n");
+ 	if( selected.GetCount() > 0)
+ 		FollowLine( selected.GetHead(), 0, false);
+ 	else
+ 		FollowLine( lastObject, lastPort, false);
+ }
+ 
+ void CGMEView::OnCntxRevfollowConnection()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnCntxRevfollowConnection in "+path+name+"\r\n");
+ 	if( selected.GetCount() > 0)
+ 		FollowLine( selected.GetHead(), 0, true);
+ 	else
+ 		FollowLine( lastObject, lastPort, true);
+ }
+ 
+ void CGMEView::OnJumpAlongConnection()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnJumpAlongConnection in "+path+name+"\r\n");
+ 	if( selected.GetCount() > 0)
+ 		FollowLine( selected.GetHead(), 0, false);
+ }
+ 
+ void CGMEView::OnBackAlongConnection()
+ {
+ 	CGMEEventLogger::LogGMEEvent("CGMEView::OnBackAlongConnection in "+path+name+"\r\n");
+ 	if( selected.GetCount() > 0)
+ 		FollowLine( selected.GetHead(), 0, true);
+ }
+ 
+ bool CGMEView::FollowLine( CGuiConnection *p_guiConn, bool p_reverse)
+ {
+ 	CGuiObject * next = 0;
+ 	if( p_reverse)
+ 		next = p_guiConn->src;
+ 	else
+ 		next = p_guiConn->dst;
+ 
+ 	if( next && next->mgaFco && CGMEDoc::theInstance)
+ 		CGMEDoc::theInstance->ShowObject( CComPtr<IUnknown>( next->mgaFco), TRUE);
+ 
+ 	return true;
+ }
+ 
+ bool CGMEView::FollowLine( CGuiObject* p_guiObj, CGuiPort* p_guiPort, bool p_reverse)
+ {
+ 	CGuiObject* currO = p_guiObj;
+ 	CGuiPort*   currP = p_guiPort;
+ 
+ 	if( !currO && !currP)
+ 		return false;
+ 
+ 	int hmany = 0;
+ 	if( currP) // initial examination of the number of connections to the port
+ 	{
+ 		CGuiConnectionList& curr_conns = p_reverse? currP->inConns: currP->outConns;
+ 		hmany = curr_conns.GetCount();
+ 	}
+ 
+ 	if( currP && hmany > 0) // port selection has priority over object selection, but only if there are >0 ports
+ 	{
+ 		CGuiConnectionList& curr_conns = p_reverse? currP->inConns: currP->outConns;
+ 		int hmany = curr_conns.GetCount();
+ 		if( hmany >= 1)
+ 		{
+ 			CGuiConnection*     a_conn       = curr_conns.GetHead();
+ 			CGuiFco*            a_neighbor   = a_conn? p_reverse? a_conn->src: a_conn->dst: 0;
+ 
+ 			if( hmany > 1)
+ 			{
+ 				CConnityDlg dlg( p_reverse);
+ 				dlg.setList( curr_conns);
+ 				if( IDOK != dlg.DoModal())
+ 					return false;
+ 
+ 				a_conn     = dlg.getSelectedC(); // owerwrite with the selected one (if > 1)
+ 				a_neighbor = a_conn? p_reverse? a_conn->src: a_conn->dst: 0;
+ 			}
+ 			
+ 			if( a_neighbor)
+ 			{
+ 				CGMEDoc::theInstance->ShowObject( CComPtr<IUnknown>( a_neighbor->mgaFco), TRUE);
+ 				return true;
+ 			}
+ 		}
+ 		return false;
+ 	}
+ 	else if( currO)
+ 	{
+ 		CGuiFcoList neighbor_list;
+ 		currO->GetNeighborsInOut( neighbor_list, p_reverse);
+ 		int hmany = neighbor_list.GetCount();
+ 		if( hmany >= 1)
+ 		{
+ 			CGuiFco*         a_neighbor = neighbor_list.GetHead();
+ 
+ 			if( hmany > 1)
+ 			{
+ 				CConnityDlg dlg( p_reverse);
+ 				dlg.setList( neighbor_list);
+ 				if( IDOK != dlg.DoModal())
+ 					return false;
+ 				a_neighbor = dlg.getSelectedF(); // owerwrite with the selected one (if > 1)
+ 			}
+ 
+ 			if( a_neighbor)
+ 			{
+ 				CGMEDoc::theInstance->ShowObject( CComPtr<IUnknown>( a_neighbor->mgaFco), TRUE);
+ 				return true;
+ 			}
+ 		}
+ 		return false;
+ 	}
+ 
+ 	return false;
+ }
+ 
+ void CGMEView::OnUpdateConncntxFollow(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable(TRUE);
+ }
+ 
+ void CGMEView::OnUpdateConncntxRevfollow(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable(TRUE);
+ }
+ 
+ void CGMEView::OnUpdateCntxFollowConnection( CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable(TRUE);
+ }
+ 
+ void CGMEView::OnUpdateCntxRevfollowConnection( CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable(TRUE);
+ }
+ 
+ void CGMEView::OnUpdateJumpAlongConnection(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable( selected.GetCount() == 1);
+ }
+ 
+ void CGMEView::OnUpdateBackAlongConnection(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable( selected.GetCount() == 1);
  }
  

Index: GMEView.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEView.h,v
retrieving revision 1.80
retrieving revision 1.81
diff -C2 -d -r1.80 -r1.81
*** GMEView.h	27 Sep 2007 12:22:46 -0000	1.80
--- GMEView.h	18 Mar 2008 19:20:29 -0000	1.81
***************
*** 39,42 ****
--- 39,43 ----
  	POSITION m_prnpos;
  	unsigned int m_lastPrnPage;
+ 	unsigned long m_findNextAlreadyAchieved;
  	void setZoomPoint(int curzoom, CPoint point);
  	bool getNamePositionVal( CComPtr<IMgaFCO>& ccpMgaFCO, int *valRet);
***************
*** 45,48 ****
--- 46,50 ----
  	void updateNamePositionMenuItem( CCmdUI* pCmdUI, int this_val );
  	bool askUserAndDetachIfNeeded( CComPtr<IMgaFCO>& mgafco);
+ 	CGuiObject* helpMeFindNextObject( bool p_secondFind);
  
  public:
***************
*** 165,168 ****
--- 167,172 ----
  	bool SendMouseOver4Object( CGuiObject * object);
  	bool SendNow();
+ 	bool FollowLine( CGuiConnection *guiConn, bool reverse);
+ 	bool FollowLine( CGuiObject* guiObj, CGuiPort* guiPort, bool reverse);
  	std::list<CGuiObject*> m_lstSelect;
  	std::list<CGuiObject*> m_lstUnselect;
***************
*** 190,193 ****
--- 194,199 ----
  
  	void CoordinateTransfer(CPoint &point) const;
+ 	CGuiObject *FindFirstObject();
+ 	CGuiObject *FindNextObject();
  	CGuiObject *FindObject(CPoint &pt);
  	CGuiAnnotator *FindAnnotation(CPoint &pt);
***************
*** 354,357 ****
--- 360,365 ----
  	afx_msg void OnConncntxProperties();
  	afx_msg void OnConncntxDelete();
+ 	afx_msg void OnConncntxFollow();
+ 	afx_msg void OnConncntxRevfollow();
  	afx_msg void OnCntxClear();
  	afx_msg void OnUpdateCntxClear(CCmdUI* pCmdUI);
***************
*** 361,364 ****
--- 369,374 ----
  	afx_msg void OnUpdateConncntxDelete(CCmdUI* pCmdUI);
  	afx_msg void OnUpdateCntxCut(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateConncntxFollow(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateConncntxRevfollow(CCmdUI* pCmdUI);
  	afx_msg void OnCntxPreferences();
  	afx_msg void OnEditPreferences();
***************
*** 438,441 ****
--- 448,458 ----
  	afx_msg void OnCntxSrcarSet();
  	afx_msg void OnCntxDstarSet();
+ 	afx_msg void OnCntxFollowConnection();
+ 	afx_msg void OnCntxRevfollowConnection();
+ 	afx_msg void OnJumpAlongConnection();
+ 	afx_msg void OnBackAlongConnection();
+ 	afx_msg void OnJumpToFirstObject();
+ 	afx_msg void OnJumpToNextObject();
+ 	afx_msg void OnShowContextMenu();
  	afx_msg void OnPrintMetafile();
  	afx_msg void OnZoomIn();
***************
*** 452,455 ****
--- 469,476 ----
  	afx_msg void OnUpdateCntxNamePositionEast( CCmdUI* pCmdUI );
  	afx_msg void OnUpdateCntxNamePositionWest( CCmdUI* pCmdUI );
+ 	afx_msg void OnUpdateCntxFollowConnection( CCmdUI* pCmdUI );
+ 	afx_msg void OnUpdateCntxRevfollowConnection( CCmdUI* pCmdUI );
+ 	afx_msg void OnUpdateJumpAlongConnection( CCmdUI* pCmdUI );
+ 	afx_msg void OnUpdateBackAlongConnection( CCmdUI* pCmdUI );
  	afx_msg void OnShowSelectedModel();
  	afx_msg void OnFocusBrowser();

Index: GME.vcproj
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GME.vcproj,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** GME.vcproj	22 Feb 2008 17:18:50 -0000	1.6
--- GME.vcproj	18 Mar 2008 19:20:29 -0000	1.7
***************
*** 387,390 ****
--- 387,393 ----
  			</File>
  			<File
+ 				RelativePath=".\ConnityDlg.cpp">
+ 			</File>
+ 			<File
  				RelativePath="console.cpp">
  				<FileConfiguration
***************
*** 1458,1461 ****
--- 1461,1467 ----
  			<File
  				RelativePath="ChildFrm.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\ConnityDlg.h">
  			</File>
  			<File

--- NEW FILE: ConnityDlg.cpp ---
// ConnityDlg.cpp : implementation file
//

#include "stdafx.h"
#include "resource.h"
#include "ConnityDlg.h"


// CConnityDlg dialog

//static
int          CConnityDlg::m_lastCX     = 0;
int          CConnityDlg::m_lastCY     = 0;
int          CConnityDlg::m_smallestCX = 170;
int          CConnityDlg::m_smallestCY = 150;
int          CConnityDlg::m_leftPad    = 15;
int          CConnityDlg::m_rightPad   = 14;



IMPLEMENT_DYNAMIC(CConnityDlg, CDialog)
CConnityDlg::CConnityDlg( bool p_reverse, CWnd* pParent /*=NULL*/)
	: CDialog(CConnityDlg::IDD, pParent)
	, m_listC( 0)
	, m_listF( 0)
	, m_selectedC( 0)
	, m_selectedF( 0)
	, m_reverse( p_reverse)
{
}

CConnityDlg::~CConnityDlg()
{
}

void CConnityDlg::setList( CGuiConnectionList& p_list)
{
	m_listC = &p_list;
}

void CConnityDlg::setList( CGuiFcoList&        p_list)
{
	m_listF = &p_list;
}

CGuiConnection*    CConnityDlg::getSelectedC()
{
	return m_selectedC;
}

CGuiFco*           CConnityDlg::getSelectedF()
{
	return m_selectedF;
}


void CConnityDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, m_options);
	DDX_Control(pDX, IDOK, m_ok);
	DDX_Control(pDX, IDCANCEL, m_ca);
}


BEGIN_MESSAGE_MAP(CConnityDlg, CDialog)
	ON_LBN_DBLCLK(IDC_LIST1, OnLbnDblclkList1)
	ON_WM_SIZING()
	ON_WM_SIZE()
	ON_WM_CREATE()
END_MESSAGE_MAP()


// CConnityDlg message handlers

BOOL CConnityDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	if( CConnityDlg::m_lastCX && CConnityDlg::m_lastCY)
	{
		CRect rect;
		GetWindowRect( &rect);
		SetWindowPos( 0, rect.left, rect.top, m_lastCX, m_lastCY, SWP_NOZORDER | SWP_NOACTIVATE);
	}

	if( m_listC && m_listC->GetCount() > 0)
	{
		POSITION pos = m_listC->GetHeadPosition();
		while( pos)
		{
			CGuiConnection* one = m_listC->GetNext( pos);

			CString item = one? one->name: "Null";
			if( m_reverse)
			{
				item += CString( " : ") + ((one && one->src)? one->src->name: CString( "Null"));
			}
			else
			{
				item += CString( " : ") + ((one && one->dst)? one->dst->name: CString( "Null"));
			}

			m_options.AddString( item);
		}
	}
	else if( m_listF && m_listF->GetCount() > 0)
	{
		POSITION pos = m_listF->GetHeadPosition();
		while( pos)
		{
			CGuiFco* one = m_listF->GetNext( pos);

			m_options.AddString( one? one->name: "Null");
		}
	}

	return TRUE;
}

void CConnityDlg::OnOK()
{
	int which = m_options.GetCurSel();

	// finding the selected object in the list based on the index
	// relies on the unsorted  behaviour of the listbox
	if( m_listC && m_listC->GetCount() > 0)
	{
		int pos_i = -1;
		POSITION pos = m_listC->GetHeadPosition();
		while( pos)
		{
			CGuiConnection* one = m_listC->GetNext( pos);
			if( ++pos_i == which)
				m_selectedC = one;
		}
	}
	else if( m_listF && m_listF->GetCount() > 0)
	{
		int pos_i = -1;
		POSITION pos = m_listF->GetHeadPosition();
		while( pos)
		{
			CGuiFco* one = m_listF->GetNext( pos);
			if( ++pos_i == which)
				m_selectedF = one;
		}
	}

	// save the actual Height and Width
	CRect rect;
	GetWindowRect( &rect);

	CConnityDlg::m_lastCX = rect.Width();
	CConnityDlg::m_lastCY = rect.Height();

	CDialog::OnOK();
}

void CConnityDlg::OnLbnDblclkList1()
{
	OnOK();
}


void CConnityDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
	if( pRect->bottom - pRect->top > m_smallestCY
	 && pRect->right - pRect->left > m_smallestCX)
		CDialog::OnSizing(fwSide, pRect);
	else
	{
		if( pRect->bottom - pRect->top < m_smallestCY) pRect->bottom = pRect->top + m_smallestCY;
		if( pRect->right - pRect->left < m_smallestCX) pRect->right = pRect->left + m_smallestCX;
	}
}

void CConnityDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialog::OnSize(nType, cx, cy);

	CRect ls_rect, ok_rect, ca_rect;
	if (m_options.GetSafeHwnd() && m_ok.GetSafeHwnd() && m_ca.GetSafeHwnd()) {
		m_options.GetWindowRect( &ls_rect);
		m_ok.GetWindowRect( &ok_rect);
		m_ca.GetWindowRect( &ca_rect);

		ScreenToClient( &ls_rect);
		ScreenToClient( &ok_rect);
		ScreenToClient( &ca_rect);

		int width = cx - m_leftPad - m_rightPad;

		m_options.SetWindowPos( NULL, m_leftPad, ls_rect.top, width > 20? width: 20, cy - ls_rect.top - 2*ok_rect.Height(), SWP_NOZORDER);

		int btn_y = cy - 3* ok_rect.Height()/2;
		m_ok.SetWindowPos( 0, ok_rect.left, btn_y, ok_rect.Width(), ok_rect.Height(), SWP_NOZORDER);
		m_ca.SetWindowPos( 0, ca_rect.left, btn_y, ca_rect.Width(), ok_rect.Height(), SWP_NOZORDER);
	}
}

int CConnityDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;

	return 0;
}

Index: resource.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/resource.h,v
retrieving revision 1.76
retrieving revision 1.77
diff -C2 -d -r1.76 -r1.77
*** resource.h	13 Feb 2008 21:23:58 -0000	1.76
--- resource.h	18 Mar 2008 19:20:29 -0000	1.77
***************
*** 76,79 ****
--- 76,80 ----
  #define IDR_TOOLBAR_NAVIG               213
  #define IDD_PART_BROWSER_DIALOG         214
+ #define IDD_CONNECTIVITYDIALOG          216
  #define IDC_NAME                        1000
  #define IDC_TYPENAME                    1001
***************
*** 185,188 ****
--- 186,190 ----
  #define IDC_STATIC_SVN_SECTION1         1115
  #define IDC_PARTBROWSERCTRL1            1116
+ #define IDC_LIST1                       1124
  #define IDD_PRINT_DIALOG                1538
  #define IDD_PRINTSETUP_DIALOG           1539
***************
*** 408,411 ****
--- 410,422 ----
  #define ID_VIEW_CLEARCONSOLE            33045
  #define ID_MULTIUSER_SUBVERSION         33046
+ #define ID_CONNCNTX_FOLLOW              33048
+ #define ID_CONNCNTX_REVERSE             33050
+ #define ID_CNTX_FOLLOWCONNECTION        33051
+ #define ID_CNTX_REVERSECONNECTION       33053
+ #define ID_JUMPALONGCONN                33055
+ #define ID_BACKALONGCONN                33056
+ #define ID_JUMPTOFIRSTOBJ               33059
+ #define ID_JUMPTONEXTOBJ                33061
+ #define ID_SHOWCONTEXTMENU              33063
  #define IDW_TOOLBAR_MAIN                0xE820
  #define IDW_TOOLBAR_WINS                0xE821
***************
*** 419,425 ****
  #ifndef APSTUDIO_READONLY_SYMBOLS
  #define _APS_3D_CONTROLS                     1
! #define _APS_NEXT_RESOURCE_VALUE        216
! #define _APS_NEXT_COMMAND_VALUE         33047
! #define _APS_NEXT_CONTROL_VALUE         1124
  #define _APS_NEXT_SYMED_VALUE           115
  #endif
--- 430,436 ----
  #ifndef APSTUDIO_READONLY_SYMBOLS
  #define _APS_3D_CONTROLS                     1
! #define _APS_NEXT_RESOURCE_VALUE        217
! #define _APS_NEXT_COMMAND_VALUE         33064
! #define _APS_NEXT_CONTROL_VALUE         1125
  #define _APS_NEXT_SYMED_VALUE           115
  #endif

Index: GME.rc
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GME.rc,v
retrieving revision 1.165
retrieving revision 1.166
diff -C2 -d -r1.165 -r1.166
*** GME.rc	13 Feb 2008 21:23:58 -0000	1.165
--- GME.rc	18 Mar 2008 19:20:29 -0000	1.166
***************
*** 164,167 ****
--- 164,169 ----
      BUTTON      ID_BUTTON33033
      BUTTON      ID_BUTTON33044
+     BUTTON      ID_JUMPALONGCONN
+     BUTTON      ID_BACKALONGCONN
  END
  
***************
*** 513,516 ****
--- 515,521 ----
          MENUITEM SEPARATOR
          MENUITEM "Help",                        ID_CNTX_HELP
+         MENUITEM SEPARATOR
+         MENUITEM "Jump to Source",              ID_CONNCNTX_REVERSE
+         MENUITEM "Jump to Destination",         ID_CONNCNTX_FOLLOW
      END
  END
***************
*** 582,585 ****
--- 587,593 ----
          MENUITEM SEPARATOR
          MENUITEM "Help",                        ID_CNTX_HELP
+         MENUITEM SEPARATOR
+         MENUITEM "Jump Back Along Connection",  ID_CNTX_REVERSECONNECTION
+         MENUITEM "Jump Along Connection",       ID_CNTX_FOLLOWCONNECTION
      END
  END
***************
*** 637,640 ****
--- 645,649 ----
  IDR_GMEVIEW ACCELERATORS 
  BEGIN
+     "h",            ID_BACKALONGCONN,       ASCII,  NOINVERT
      VK_ESCAPE,      ID_EDIT_CANCEL,         VIRTKEY, NOINVERT
      "C",            ID_EDIT_COPY,           VIRTKEY, CONTROL, NOINVERT
***************
*** 650,658 ****
--- 659,673 ----
      "P",            ID_FILE_PRINT,          VIRTKEY, CONTROL, NOINVERT
      VK_F1,          ID_HELP_HELP,           VIRTKEY, NOINVERT
+     "j",            ID_JUMPALONGCONN,       ASCII,  NOINVERT
+     "f",            ID_JUMPTOFIRSTOBJ,      ASCII,  NOINVERT
+     "n",            ID_JUMPTONEXTOBJ,       ASCII,  NOINVERT
      "C",            ID_KEY_CONNECT,         VIRTKEY, NOINVERT
      "A",            ID_KEY_CYCLEOBJINSPBKWD, ASCII, NOINVERT
+     "A",            ID_KEY_CYCLEOBJINSPBKWD, VIRTKEY, SHIFT, ALT, NOINVERT
      "a",            ID_KEY_CYCLEOBJINSPFRWD, ASCII, NOINVERT
+     "A",            ID_KEY_CYCLEOBJINSPFRWD, VIRTKEY, ALT, NOINVERT
      VK_ADD,         ID_KEY_ZOOMIN,          VIRTKEY, NOINVERT
      VK_SUBTRACT,    ID_KEY_ZOOMOUT,         VIRTKEY, NOINVERT
+     VK_F10,         ID_SHOWCONTEXTMENU,     VIRTKEY, SHIFT, NOINVERT
      "`",            ID_VIEW_CYCLEALLASPECTS, ASCII, NOINVERT
      VK_TAB,         ID_VIEW_CYCLEASPECTKEY, VIRTKEY, NOINVERT
***************
*** 665,670 ****
      VK_BACK,        ID_VIEW_PARENT,         VIRTKEY, NOINVERT
      VK_RETURN,      ID_VIEW_SHOWSELMODEL,   VIRTKEY, NOINVERT
!     "A",            ID_KEY_CYCLEOBJINSPBKWD, VIRTKEY, SHIFT, ALT, NOINVERT
!     "A",            ID_KEY_CYCLEOBJINSPFRWD, VIRTKEY, ALT, NOINVERT
  END
  
--- 680,684 ----
      VK_BACK,        ID_VIEW_PARENT,         VIRTKEY, NOINVERT
      VK_RETURN,      ID_VIEW_SHOWSELMODEL,   VIRTKEY, NOINVERT
!     VK_APPS,        ID_SHOWCONTEXTMENU,     VIRTKEY, NOINVERT
  END
  
***************
*** 680,688 ****
  FONT 10, "MS Sans Serif", 0, 0, 0x0
  BEGIN
!     CTEXT           "7.9.26",IDC_STATIC,7,65,165,8,SS_NOPREFIX
!     CTEXT           "Copyright © 2000-2006 Vanderbilt University",IDC_STATIC,
                      7,135,165,8
      DEFPUSHBUTTON   "OK",IDOK,65,151,43,12,WS_GROUP
!     CTEXT           "GENERIC MODELING ENVIRONMENT 7",IDC_STATIC,7,55,165,8
      CONTROL         184,IDC_BMPABOUT,"Static",SS_BITMAP | SS_NOTIFY,7,7,165,
                      45
--- 694,702 ----
  FONT 10, "MS Sans Serif", 0, 0, 0x0
  BEGIN
!     CTEXT           GME_VERSION_STR,IDC_STATIC,7,65,165,8,SS_NOPREFIX
!     CTEXT           "Copyright © 2000-2008 Vanderbilt University",IDC_STATIC,
                      7,135,165,8
      DEFPUSHBUTTON   "OK",IDOK,65,151,43,12,WS_GROUP
!     CTEXT           "GENERIC MODELING ENVIRONMENT 8",IDC_STATIC,7,55,165,8
      CONTROL         184,IDC_BMPABOUT,"Static",SS_BITMAP | SS_NOTIFY,7,7,165,
                      45
***************
*** 1088,1091 ****
--- 1102,1117 ----
  END
  
+ IDD_CONNECTIVITYDIALOG DIALOGEX 0, 0, 220, 86
+ STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | 
+     WS_THICKFRAME
+ CAPTION "Select where to jump"
+ FONT 8, "MS Shell Dlg", 400, 0, 0x1
+ BEGIN
+     LISTBOX         IDC_LIST1,7,7,206,53,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | 
+                     WS_TABSTOP
+     DEFPUSHBUTTON   "OK",IDOK,50,65,50,14
+     PUSHBUTTON      "Cancel",IDCANCEL,124,65,50,14
+ END
+ 
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 1284,1287 ****
--- 1310,1321 ----
          BOTTOMMARGIN, 83
      END
+ 
+     IDD_CONNECTIVITYDIALOG, DIALOG
+     BEGIN
+         LEFTMARGIN, 7
+         RIGHTMARGIN, 213
+         TOPMARGIN, 7
+         BOTTOMMARGIN, 79
+     END
  END
  #endif    // APSTUDIO_INVOKED
***************
*** 1334,1337 ****
--- 1368,1372 ----
  END
  
+ 
  /////////////////////////////////////////////////////////////////////////////
  //
***************
*** 1632,1635 ****
--- 1667,1672 ----
      ID_BUTTON33044          "Next Window\nNext Window"
      ID_VIEW_CLEARCONSOLE    "Clears Console Contents\nClears Console Contents"
+     ID_JUMPALONGCONN        "Jump Along Connection\nJump Along Connection"
+     ID_BACKALONGCONN        "Jump Back Along Connection\nJump Back Along Connection"
  END
  



More information about the GME-commit mailing list