////////////////////////////////////////////////////////////////// // GML CONTEXT MENUS RULES #ALIAS[g=core.svg:GmlDrawing] #INCLUDE[gml:defs.inc] Configure RULES var category = 'Context Menus'; ////////////////////////////////////////////////////////////////// // defineDanglingMenu rule $ENV.defineRule({ id:'defineDanglingMenu', category:category, description: 'Supplies the menu when the user creates a dangling connection', parameters:'gml:Unit unit!,gml:Plug source!,Point pos, env:MENU_BAR menu', additive:true }); // rule helper for defineDanglingMenu. $ENV.defineRuleHelper('defineDanglingMenu', 'menuItemClick', function(signal ,unit, source, pos, menu) { if (signal == 'cancel') return; var cp= pos.x + ' ' + pos.y, srcplug=source; try{ BEGIN('Create interactor and a link'); var trgelem, trgplug; if (srcplug.dir == #[DIR_IN]) { trgelem = unit.createElement(signal,'elements', {'#ASPECT[g:pos]':(pos.x-40)+' '+(pos.y+10)}); trgplug = srcplug; srcplug = trgelem.getSinglePlug(#[DIR_OUT]); trgelem = trgplug.parent; } else { trgelem = unit.createElement(signal ,'elements' , {'#ASPECT[g:pos]':(pos.x+40)+' '+(pos.y+10)}); trgplug = trgelem.getSinglePlug(#[DIR_IN]); } var linktype = trgelem.canConnect(srcplug, trgplug); var A = SPLIT(TRIM(linktype)); if (!A[0]) { ROLLBACK(); return; } unit.createElement(A[0], 'elements', {source:srcplug, target:trgplug}); var fields = trgelem.getInfoshape() && trgelem.getInfoshape().getFields() || {}; if (ISEMPTY(fields) ){ COMMIT(); return; } var result = MODAL("#URL[common.FieldsSelectorDlg.htm]" ,{'interactor': trgelem },true); $ENV.context = trgelem; COMMIT(); }catch(e){ ROLLBACK(); } });