[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