[commit] r2200 - trunk/GME/Gme

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Tue May 21 12:32:39 CDT 2013


Author: ksmyth
Date: Tue May 21 12:32:39 2013
New Revision: 2200

Log:
In connect mode, dont highlight illegal connection targets. Enable quick-connect mode without 'Mouse Over Object Notify' config. Exit quick-connect mode after clicking on invalid destination. Esc cancels quick-connect mode. Properly enable 'Connect' context menu.

Modified:
   trunk/GME/Gme/GMEView.cpp
   trunk/GME/Gme/GMEView.h
   trunk/GME/Gme/GUIObject.cpp
   trunk/GME/Gme/GUIObject.h

Modified: trunk/GME/Gme/GMEView.cpp
==============================================================================
--- trunk/GME/Gme/GMEView.cpp	Tue May 21 12:32:11 2013	(r2199)
+++ trunk/GME/Gme/GMEView.cpp	Tue May 21 12:32:39 2013	(r2200)
@@ -4933,11 +4933,12 @@
 	if(tmpConnectMode) {
 		if(connTmp && (connSrc != 0)) {
 			Connect(connSrc, connSrcPort, connSrcHotSide, connTmp, connTmpPort, connTmpHotSide, 0 != (nFlags & MK_SHIFT));
-			ClearConnSpecs();
 		}
 		tmpConnectMode = false;
+		ClearConnSpecs();
 		SetCursor(editCursor);
 		ShowCursor(TRUE);
+		Invalidate();
 	}
 	else {
 		CGMEDoc *doc = GetDocument();
@@ -6557,6 +6558,13 @@
 			::SetCursor(customizeConnectionCursorBackup);
 			isCursorChangedByEdgeCustomize = false;
 		}
+		if (tmpConnectMode) {
+			tmpConnectMode = false;
+			ClearConnSpecs();
+			SetCursor(editCursor);
+			ShowCursor(TRUE);
+			Invalidate();
+		}
 	}
 
 	if(CGuiMetaProject::theInstance->CmdIDInRange(nID))	{
@@ -7314,6 +7322,7 @@
 		ClearConnSpecs();
 		SetCursor(editCursor);
 		ShowCursor(TRUE);
+		Invalidate();
 	}
 	else {
 	 	CGMEDoc *doc = GetDocument();
@@ -9427,13 +9436,14 @@
 				SetCursor(editCursor);
 			}
 			ShowCursor(TRUE);
+			Invalidate();
 		}
 	}
 }
 
 void CGMEView::OnUpdateCntxConnect(CCmdUI* pCmdUI)
 {
-	pCmdUI->Enable(GetDocument()->GetEditMode() == GME_EDIT_MODE && isSubType);
+	pCmdUI->Enable(GetDocument()->GetEditMode() == GME_EDIT_MODE && isType);
 }
 
 void CGMEView::OnResetSticky()
@@ -9452,6 +9462,36 @@
 		CScrollZoomView::OnNcMouseMove(nHitTest, point);
 }
 
+bool CGMEView::IsLegalConnectionEnd(CGuiObject *connEnd, CGuiPort *port)
+{
+	IMgaMetaModelPtr metaModel = guiMeta->mgaMeta.p;
+	IMgaMetaRolePtr srcMeta = connSrc->dynamic_cast_CGuiObject()->metaRole.p;
+	IMgaMetaRolePtr srcPortMeta = connSrcPort ? connSrcPort->metaRole.p : NULL;
+	IMgaMetaRolePtr dstMeta = connEnd->dynamic_cast_CGuiObject()->metaRole.p;
+	IMgaMetaRolePtr dstPortMeta = port ? port->metaRole.p : NULL;
+
+	wchar_t srcPath[100];
+	if (srcPortMeta)
+		swprintf_s(srcPath, L"src %d %d, ", srcMeta->MetaRef, srcPortMeta->MetaRef);
+	else
+		swprintf_s(srcPath, L"src %d, ", srcMeta->MetaRef);
+
+	wchar_t dstPath[100];
+	if (dstPortMeta)
+		swprintf_s(dstPath, L"dst %d %d", dstMeta->MetaRef, dstPortMeta->MetaRef);
+	else
+		swprintf_s(dstPath, L"dst %d", dstMeta->MetaRef);
+
+	_bstr_t path = srcPath;
+	path += dstPath;
+
+	IMgaMetaRolesPtr roles = metaModel->__LegalConnectionRoles(path);
+
+	// TODO: check for primary aspect
+
+	return roles->Count > 0;
+}
+
 void CGMEView::OnMouseMove(UINT nFlags, CPoint screenpoint)
 {
 	if (!isLeftMouseButtonDown || (GetKeyState(VK_LBUTTON) & 0x8000) == 0) {
@@ -9463,16 +9503,14 @@
 	CPoint point(screenpoint);
 	CoordinateTransfer(point);
 
-	if( theApp.isMouseOverNotifyEnabled()/* && GetDocument()->GetEditMode() == GME_EDIT_MODE*/) {
-		//static CGuiObject *lastObject = 0;
-		CGuiObject *object = self  ?self->FindObject(point):0;
-		CGuiPort   *port   = object?object->FindPort(point):0;
-		if(object) {
-			if( object != lastObject)
-				this->SendMouseOver4Object( object);
+	{
+		CGuiObject *object = self ? self->FindObject(point) : 0;
+		CGuiPort   *port   = object? object->FindPort(point) : 0;
+		if(object && object != lastObject && theApp.isMouseOverNotifyEnabled()/* && GetDocument()->GetEditMode() == GME_EDIT_MODE*/) {
+			this->SendMouseOver4Object(object);
 		}
 		lastObject = object;
-		lastPort   = port;
+		lastPort = port;
 	}
 
 	if (GetDocument()->GetEditMode() == GME_EDIT_MODE) { // new decorator notification logic
@@ -9577,11 +9615,11 @@
 			Invalidate();
 		} 
 	}
-	if ((GetDocument()->GetEditMode() == GME_AUTOCONNECT_MODE || GetDocument()->GetEditMode() == GME_SHORTAUTOCONNECT_MODE) || (tmpConnectMode)) {
+	if ((GetDocument()->GetEditMode() == GME_AUTOCONNECT_MODE || GetDocument()->GetEditMode() == GME_SHORTAUTOCONNECT_MODE || (tmpConnectMode))) {
 		CGuiObject *object = self->FindObject(point);
-		if(object) {
+		CGuiPort *port = object ? object->FindPort(point) : NULL;
+		if (object && (connSrc == NULL || IsLegalConnectionEnd(object, port))) {
 			CRect rect = object->GetLocation();
-			CGuiPort *port = object->FindPort(point);
 			int hotSide = GME_CENTER;
 			if(port && port->IsRealPort()) {
 				rect = port->GetLocation() + rect.TopLeft();

Modified: trunk/GME/Gme/GMEView.h
==============================================================================
--- trunk/GME/Gme/GMEView.h	Tue May 21 12:32:11 2013	(r2199)
+++ trunk/GME/Gme/GMEView.h	Tue May 21 12:32:39 2013	(r2200)
@@ -48,6 +48,7 @@
 	void			UpdateNamePositionMenuItem(CCmdUI* pCmdUI, int this_val);
 	bool			AskUserAndDetachIfNeeded(CComPtr<IMgaFCO>& mgafco);
 	CGuiObject*		HelpMeFindNextObject(bool p_secondFind);
+	bool IsLegalConnectionEnd(CGuiObject *connEnd, CGuiPort *port = NULL);
 
 public:
 	bool m_isActive;

Modified: trunk/GME/Gme/GUIObject.cpp
==============================================================================
--- trunk/GME/Gme/GUIObject.cpp	Tue May 21 12:32:11 2013	(r2199)
+++ trunk/GME/Gme/GUIObject.cpp	Tue May 21 12:32:39 2013	(r2200)
@@ -170,6 +170,8 @@
 
 	COMTHROW(fco->get_Meta(&metaFco));
 
+	COMTHROW(fco->get_MetaRole(&metaRole));
+
 	if (!IsRealPort()) {
 		ReadARPreferences();
 	}

Modified: trunk/GME/Gme/GUIObject.h
==============================================================================
--- trunk/GME/Gme/GUIObject.h	Tue May 21 12:32:11 2013	(r2199)
+++ trunk/GME/Gme/GUIObject.h	Tue May 21 12:32:39 2013	(r2200)
@@ -98,6 +98,7 @@
 	CGuiConnectionList inConns;
 	CGuiConnectionList outConns;
 	CComPtr<IMgaMetaFCO> metaFco;
+	CComPtr<IMgaMetaRole> metaRole;
 
 private:
 	bool autorouterPrefs[GME_AR_NUM];


More information about the gme-commit mailing list