/* SCM_MS (SCM) -- SCM Mouse Action */ /* SCM_MS (SCM) -- SCM Mausaktion */ /* -- EXECUTED AFTER LEFT MOUSE BUTTON ACTIVATION IN WORK AREA -- */ /* // Copyright (c) 1999-2013 Bartels System GmbH, Muenchen // Author: Roman Ludwig // Changes History: // rl (131029) RELEASED FOR BAE V8.0. // rl (120427) RELEASED FOR BAE V7.8. // rl (101019) RELEASED FOR BAE V7.6. // rl (100305) ENHANCEMENT: // Added drag&drop functionality. // rl (091021) RELEASED FOR BAE V7.4. // rl (081014) RELEASED FOR BAE V7.2. // rl (080723) ENHANCEMENT: // Added element loop operation mode. // rl (080401) ENHANCEMENT: // Added center/pan window function. // rl (080114) ENHANCEMENT: // Added multiline text context functions. // rl (071029) RELEASED FOR BAE V7.0. // rl (060829) RELEASED FOR BAE V6.8. // rl (051208) ENHANCEMENT: // Added left/right rotate element functions. // Added support for control and alt keys. // rl (051025) ENHANCEMENT: // Added support for scm_picksel_dis rule. // rl (050913) RELEASED FOR BAE V6.6. // rl (050530) ENHANCEMENT: // Added support for element attached context functions. // rl (041018) ENHANCEMENT: // Added label reference plan load function. // rl (040811) RELEASED FOR BAE V6.4. // rl (040511) ENHANCEMENT: // Added bus tap support. // rl (031010) BUGFIX: // Fixed problem with pick element type restriction. // Fixed problem with disfunctional delete/move/select mode. // rl (030904) RELEASED FOR BAE V6.2. // rl (021209) RELEASED FOR BAE V6.0. // rl (021026) ENHANCEMENT: // Added figure element type set support. // rl (020704) ENHANCEMENT: // Improved label/symbol pick to handle elements without texts. // rl (020618) RELEASED FOR BAE V5.4. // rl (020312) ENHANCEMENT: // Added symbol relevant area check for pick point to handle // frame symbols. // rl (010806) ENHANCEMENT: // Changed pick priorities for different element classes. // rl (010625) RELEASED FOR BAE V5.0. // rl (010621) ENHANCEMENT: // Added program calling sequence support. // Added symbol/label query to context functions. // mb (010321) ENHANCEMENT: // Group selection mouse operation mode changed to // selection toggle. // rl (001114) ENHANCEMENT: // Mouse operation mode implemented. // rl (000825) RELEASED FOR BAE V4.6. // rl (000504) ENHANCEMENT: // Added symbol logical library functions. // rl (000204) ENHANCEMENT: // Added macro load function. // rl (991102) ORIGINAL CODING. // // DESCRIPTION // // The scm_ms User Language program is automatically activated when // pressing the left mouse button in the work area while the program is idle. // scm_ms lists a menu of functions for the element at the // Depending on the activated mouse mode scm_ms lists a menu of functions for // the element at the given mouse position or performs the specified action // for the element. */ // Includes #include "pop.ulh" // User Language popup utilities #include "scm.ulh" // User Language SCM utilities // Disable undo state request #pragma ULCALLERNOUNDO // Messages string UPRABORT = M_UPRABORT(); string UPRMOUSEDRAG = M("Mausparameter","Mouse Settings"); string UPRMODE = M("Maus Dragmodus","Mouse Drag Mode"); string UPRMODE1 = M("&Mausklickselektion","&Click to Move"); string UPRMODE2 = M("&Drag && Drop","&Drag && Drop"); string UPREDLOOP = M("Ecke(n) Modus","Corner(s) Mode"); string UPREDLOOP1 = M("E&inzelecke","&Single Corner"); string UPREDLOOP2 = M("&Ecken","&Corners"); string UPRANGREL = M("Winkelfreigabe","Angle Release"); string UPRANGREL1 = M("&Default","&Default"); string UPRANGREL2 = M("&Automatisch","&Automatisch"); string UPRSELGELEM = M("Elemente zur Gruppe selektieren/deselektieren. ESC/RMB Ende.", "Group select/deselect elements. ESC/RMB end."); string UPRSELG1ELEM = M("Element zur Gruppe selektieren/deselektieren!", "Group select/deselect element!"); string UPRSELDELEM = M("Zu loeschende Elemente selektieren. ESC/RMB Ende.", "Select elements to delete. ESC/RMB end."); string UPRSELD1ELEM = M("Zu loeschendes Element selektieren!", "Select element to delete!"); string UPRSELDCORN = M("Zu loeschende Ecken selektieren. ESC/RMB Ende.", "Select corners to delete. ESC/RMB end."); string UPRSELD1CORN = M("Zu loeschende Ecke selektieren!", "Select corner to delete!"); string UPRSELMELEM = M("Zu bewegende Elemente selektieren (packen). ESC/RMB Ende.", "Select elements to move (drag). ESC/RMB end."); string UPRSELM1ELEM = M("Zu bewegendes Element selektieren!", "Select element to move (drag)!"); string UPRSELEELEM = M("Editierpunkte/-segmente selektieren. ESC/RMB Ende.", "Select points/segments to edit. ESC/RMB end."); string UPRSELE1ELEM = M("Editierpunkt/-segment selektieren!", "Select point/segment to edit!"); string REPDELELEM = M("%d Elemente geloescht.","%d elements deleted"); string REPDEL1ELEM = M("1 Element geloescht.","1 element deleted."); string REPDELCORN = M("%d Ecken geloescht.","%d corners deleted"); string REPDEL1CORN = M("1 Ecke geloescht.","1 corner deleted."); string REPMOVELEM = M("%d Elemente bewegt.","%d elements moved"); string REPMOV1ELEM = M("1 Element bewegt.","1 element moved."); string REPEDTELEM = M("%d Elemente editiert.","%d elements edited"); string REPEDT1ELEM = M("1 Element editiert.","1 element edited."); string REPNILATT = M("!nicht_gesetzt!","!not_set!"); // Menu names string SCM_1_10 = M("%&Highlight Netz","%Highlight N&et"); string SCM_3_0 = M("%N&eues Symbol","%Add &Symbol"); string SCM_3_1 = M("Neuer &Label","Add &Label"); string SCM_3_3 = M("&Folge Symbol/Label","Ne&xt Symbol/Label"); string SCM_3_4 = M("&Bewegen Symbol/Label","&Move Symbol/Label"); string SCM_3_5 = M("L&oeschen Symbol/Label","&Delete Symbol/Label"); string SCM_3_6 = M("%Sy&mbolname aendern","%&Change Symbol Name"); string SCM_3_6L = M("%Labelna&me aendern","%&Change Label Name"); string SCM_3_7 = M("%Wert(e) &zuweisen","%Assign &Value(s)"); string SCM_3_9 = M("Symbolname Mus&ter","Symbol Name Pa&ttern"); string SCM_3_10 = M("%Symbollo&gik zeigen","%Show Symbol L&ogic"); string SCM_3_13 = M("Symbolpin bewegen","Move Symbol Pin"); string SCM_4_0 = M("%Neue &Verbindung","%Add &Connection"); string SCM_4_1 = M("%Bus &definieren","%Define &Bus"); string SCM_4_2 = M("&Bus anzapfen","&Tap Bus"); string SCM_4_3 = M("Bustap b&ewegen","Move Bus T&ap"); string SCM_4_4 = M("Bus&tap loeschen","Delete Bus Ta&p"); string SCM_4_5 = M("Bustap &umbenennen","&Rename Bus Tap"); string SCM_4_6 = M("%&Segment bewegen","%Move &Segment"); string SCM_4_7 = M("Se&gment teilen","Break Se&gment"); string SCM_4_8 = M("Segment l&oeschen","D&elete Segment"); string SCM_4_9 = M("%Verbindung &loeschen","%&Delete Connection"); string SCM_4_10 = M("&Netz loeschen","Delete &Net"); string SCM_4_12 = M("E&cke bewegen","&Move Corner"); string SCM_4_13 = M("%Neue&r Bus","%Add B&us"); string SCM_5_0 = M("%Neue Grafikl&inie","%Add Graphic L&ine"); string SCM_5_1 = M("Neue Punk&tlinie","Add Do&t Line"); string SCM_5_2 = M("Neue Grafikflae&che","Add Graphic &Area"); string SCM_5_3 = M("Neuer Ko&ntaktbereich","Add Co&ntact Area"); string SCM_5_4 = M("Grafik &bewegen","&Move Graphic"); string SCM_5_5 = M("Grafik &kopieren","&Copy Graphic"); string SCM_5_6 = M("Grafik l&oeschen","&Delete Graphic"); string SCM_5_7 = M("%&Ecke einfuegen","%&Insert Corner"); string SCM_5_8 = M("E&cke bewegen","Move C&orner"); string SCM_5_8A = M("Ecke(&n) bewegen","Move Corner(&s)"); string SCM_5_11 = M("Ecke loeschen","Delete Corner"); string SCM_5_9 = M("&Segment bewegen","Move &Segment"); string SCM_5_10 = M("%Se&gment einfuegen","%Inse&rt Segment"); string SCM_6_0 = M("%Neuer Te&xt","%Add T&ext"); string SCM_6_1 = M("Text &bewegen","&Move Text"); string SCM_6_2 = M("Text &kopieren","&Copy Text"); string SCM_6_2A = M("Text ableiten","Derive Text"); string SCM_6_3 = M("Text &aendern","&Edit Text"); string SCM_6_4 = M("Text &loeschen","&Delete Text"); string SCM_6_5 = M("%&Namen bewegen","%Move &Name"); string SCM_6_7 = M("Att&ribut bewegen","Move A&ttribute"); string MI_NEW = M("&Neu","&New"); string MI_OPEN = M("&Laden","L&oad"); string MI_PARAM = M("%&Einstellungen","%&Settings"); string MI_UPBOUND = M("&Obere Elementgrenze","&Upper/Right Border"); string MI_LOBOUND = M("&Untere Elementgrenze","&Lower/Left Border"); string MI_BOUNDRCT = M("Neues Workspace &Rechteck","New Workspace &Rectangle"); string MI_SEL = M("%Selektieren/Deselektieren","%Select/Deselect"); string MI_ASEL = M("Inhalt Selektieren/Deselektieren","Select/Deselect Content"); string MI_ACSEL = M("Inhalt kreuzend Selektieren/Deselektieren","Select/Deselect Content Crossing"); string MI_CSEL = M("Verbindungszug Selektieren/Deselektieren","Select/Deselect Connection Route"); string MI_NSEL = M("Netz selektieren","Select Net"); string MI_NDESEL = M("Netz deselektieren","Deselect Net"); string MI_ACOPY = M("Werte in Zwischenablage","Copy Values"); string MI_MACL = M("%Laden Makr&o","%Load Macr&o"); string MI_MACLW = M("Laden Makro neues Fenster" ,"Load Macro New Window"); string MI_DOCU = M("Dokumentation","Documentation"); string MI_CSYM = M("Symbol &kopieren","Copy Sym&bol"); string MI_LOGLED= M("Symbollogi&k editieren","Edit Symbol Lo&gic"); string MI_LLPL = M("%&Labelplan laden ","%Load &Label Sheet"); string MI_WLPL = M("Labelplan neues Fenster ","Label Sheet New Window"); string MI_LPLC = M("%La&youtbauteil platzieren","%&Place Layout Part"); string MI_ZOOMPAN = M("%Fenster &Mitte","%Center/&Pan Window"); string MI_MSMOD = M("%Mausmodus","%Mouse mode"); string MI_QSYM = M("%Symbol/Label &Query","%Symbol/Label &Query"); string MI_CU2 = M("Bus&abfrage","Bus &Query"); string MI_LTPL = M("%Text&plan laden","%Load &Text Sheet"); string MI_LEXT = M("Link zu ex&terner Datei","Li&nk to External File"); string MI_TCLASS= M("%Te&xtklasse","%Te&xt Class"); string MI_TWID = M("%Text St&iftbreite setzen","%Set Text Plot &Width"); string MI_UPPER = M("%Text Gro&ssschreibung","%Text &Upper Case"); string MI_LOWER = M("Text Klei&nschreibung","Text L&ower Case"); string MI_RESETGROUP = M("%&Gruppe ruecksetzen","%Reset &Group"); string MI_MOVENGROUP = M("%%Gruppe %s bewegen","%%Move Group %s"); string MI_MOVEGROUP = M("%Gruppe &bewegen","%&Move Group"); string MI_COPYGROUP = M("Gruppe &kopieren","&Copy Group"); string MI_SYMSEL = M("Symbold&atenbank","S&ymbol Database"); string MI_MTADD = M("Neuer Mehrzeilentext","Add Multi Line Text"); string MI_MTSIZE = M("%&Groesse setzen","%Set Si&ze"); string MI_MTMODE = M("&Modus setzen","Set M&ode"); string MI_ATTRDEF = M("Attribute &Defaultwerte","Attributes Default &Values"); string MI_PROP = M("%Eigenschaften\tP","%Properties\tP"); string MI_PRULES = M("%Planregeln","%Plan Rules"); string MI_PPREDS = M("Plan String Predikate","Plan String Predicates"); string MI_PPREDD = M("Plan Double Predikate","Plan Double Predicates"); string MI_PPREDI = M("Plan Integer Predikate","Plan Integer Predicates"); string MI_RULES = M("Regeln","Rules"); string MI_PREDS = M("String Predikate","String Predicates"); string MI_PREDD = M("Double Predikate","Double Predicates"); string MI_PREDI = M("Integer Predikate","Integer Predicates"); string UPRSYMBOL= M("Symbol '%s'/'%s'.","Symbol '%s'/'%s'."); string UPRLABEL = M("Label '%s'/'%s'.","Label '%s'/'%s'."); string UPRPOLY = M("%s.","%s."); string UPRBUSTAP = M("Bustap '%s'/'%s'.","Bus Tap '%s'/'%s'."); string UPRBUS = M("Bussegment '%s'.","Bus Segment '%s'."); string UPRCON = M("Verbindungssegment '%s'.","Connection Segment '%s'."); string UPRTEXT = M("Text '%s'.","Text '%s'."); string UPRCTEXT = M("Kommentartext '%s'.","Commentary Text '%s'."); string UPRMTEXT = M("Mehrzeilentext.","Multiline Text."); string REPUNET = M("-unbenannt-.","-unnamed-."); // INI file parameter name definitions #define PAR_GROUPLOOP "GROUPLOOP_STD" // Group sel. loop mode #define PAR_MOUSEREP "MOUSEREP_STD" // Mouse command repeat mode #define PAR_MOUSEDRAG "MOUSEDRAG_STD" // Mouse drag mode #define PAR_CEDITLOOP "CEDITLOOP_STD" // Corner edit loop mode #define PAR_CEDITANGR "CEDITANGR_STD" // Corner edit angle angle release mode #define PAR_SYMRENAME "SYMRENAME_SCM" // Symbol rename action sequence #define PAR_SETPOS "SETTINGMPOS_STD"// Settings menu position // Pick definitions #define PICKRANGE 0.001 // Pick range tolerance #define C_FIGMTEXT 0x100 // Multiline text #define GV_PROPCALL "propcall" // Property function call flag #define GV_PROPX "propx" // Property query x coordinate #define GV_PROPY "propy" // Property query y coordinate int SETPOS = bae_iniintval(PAR_SETPOS,0) /* Settings menu position */; int GROUPLOOP = bae_iniintval(PAR_GROUPLOOP,0) /* Group selection pick loop */; int MOUSEREP = bae_iniintval(PAR_MOUSEREP,0) /* Mouse command repeat mode */; int MOUSEDRAG = bae_iniintval(PAR_MOUSEDRAG,0) /* Mouse drag mode */; int CEDITLOOP = bae_iniintval(PAR_CEDITLOOP,0) /* Corner edit loop mode */; int CEDITANGR = bae_iniintval(PAR_CEDITANGR,1) /* Corner edit angle release mode */; typedef struct mnudes { // Menu definition descriptor string t /* Menu text */; string p /* Menu program sequence */; int c /* Class restriction */; } MNUITEML[] /* Menu item list */; typedef struct fmnudes { // Figure index menu def. descriptor int typ /* Figure list element type */; MNUITEML iteml /* Menu item list */; } FMNUL[] /* Figure index menu list definition */; typedef struct factdes { // Figure index action descriptor int typ /* Figure list element type */; string p /* Program sequence */; string p2 /* Figure list elem. 2nd prog. name */; string p3 /* Figure list elem. 3rd prog. name */; string t /* Menu text */; string t2 /* 2nd menu text */; string t3 /* 3rd menu text */; } FACTL[] /* Figure index action list def. */; #define C_FIGBUSTAP (-2) // Virtual bus tap type static FMNUL fmnul = { { C_FIGBUSTAP, { // Bus tap functions { SCM_4_3,"#403:ml",(-1) }, { SCM_4_4,"#404:ml",(-1) }, { SCM_4_5,"#405:ml",(-1) }, { SCM_4_0,"#400:ml",(-1) }, { MI_MACL,"scmmacl",(-1) }, { (bae_swconfig(0)==BAE_HighEnd ? "" : ",")+MI_MACLW,"scmmacl:'launch'",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } }, { C_FIGCON, { // Connection functions { SCM_4_12,"#412:ml",(-1) }, { SCM_4_6,"#406:ml",(-1) }, { SCM_4_7,"#407:ml",(-1) }, { SCM_4_8,"#408:ml",(-1) }, { MI_MOVENGROUP,"#movengrp",(-5) }, { MI_SEL,"#702:s1:s2:ml"+(GROUPLOOP ? "" : ":mr"),(-1) }, { MI_CSEL,"#702:s4:s2:ml"+(GROUPLOOP ? "" : ":mr"),(-1) }, { MI_NSEL,"scmgroup:s0:s10:ml",(-1) }, { MI_NDESEL,"scmgroup:s1:s10:ml",(-1) }, { SCM_4_0,"#400:ml",(-1) }, { SCM_4_9,"#409:ml",(-1) }, { SCM_4_10,"#410:ml",(-1) }, { SCM_4_1,"#401:ml",(-1) }, { SCM_4_2,"#402:'?':ml",(-1) }, { MI_CU2,"scmcon:s1:ml:t:mr",(-1) }, { "%"+SCM_3_1,"#301",(-1) }, { SCM_1_10,"#110:ml:mr",(-1) }, { "%"+MI_RULES,"scmrule:sl0:sl1:ml:'single'",(-1) }, { MI_PREDS,"scmrule:sl0:sl1:ml:'string'",(-1) }, { MI_PREDD,"scmrule:sl0:sl1:ml:'double'",(-1) }, { MI_PREDI,"scmrule:sl0:sl1:ml:'integer'",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } }, { C_FIGPOLY, { // Polygon functions { SCM_5_4,"#504:ml",(-1) }, { SCM_5_5,"#505:ml",(-1) }, { SCM_5_6,"#506:ml",(-1) }, { SCM_5_7,"#507:ml",(-1) }, { SCM_5_8,"#508:ml",(-1) }, { SCM_5_8A,"#508:ml",(-1) }, { SCM_5_11,"#511:ml",(-1) }, { SCM_5_10,"#510:ml",(-1) }, { SCM_5_9,"#509:ml",(-1) }, { MI_MOVENGROUP,"#movengrp",(-5) }, { MI_SEL,"#702:s2:s2:ml"+(GROUPLOOP ? "" : ":mr"),(-1) }, { MI_ASEL,"#701:s4:s2:mr:s7:ml",(-1) }, { MI_ACSEL,"#701:s4:s2:mr:s8:mr:s7:ml",(-1) }, { MI_PROP,"scmpedit",(-1) }, { MI_RULES,"scmrule:sl0:sl2:ml:'single'",(-1) }, { MI_PREDS,"scmrule:sl0:sl2:ml:'string'",(-1) }, { MI_PREDD,"scmrule:sl0:sl2:ml:'double'",(-1) }, { MI_PREDI,"scmrule:sl0:sl2:ml:'integer'",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } }, { C_FIGTEXT, { // Text functions { SCM_6_1,"#601:ml",(-1) }, { SCM_6_2,"#602:ml",(-1) }, { SCM_6_2A,"tbdvscm:'t3':ml",(-1) }, { SCM_6_3,"#603:ml",(-1) }, { SCM_6_4,"#604:ml",(-1) }, { MI_MOVENGROUP,"#movengrp",(-5) }, { MI_SEL,"#702:s3:s2:ml"+(GROUPLOOP ? "" : ":mr"),(-1) }, { MI_TCLASS,"scmtext:sl10:sl0:ml:t:mr",(-1) }, { MI_ATTRDEF,"ssymattr:sl5",DDBCLSSYM }, { MI_TWID,"scmtext:sl12:sl0:ml:mr",(-1) }, { MI_UPPER,"scmtext:sl5:ml:mr",(-1) }, { MI_LOWER,"scmtext:sl6:ml:mr",(-1) }, { MI_LTPL,"scmtext:sl13:ml",DDBCLSCM }, { MI_LEXT,"scmtext:sl14:ml",(-1) }, { MI_PROP,"scmpedit",(-1) }, { MI_RULES,"scmrule:sl0:sl3:ml:'single'",(-1) }, { MI_PREDS,"scmrule:sl0:sl3:ml:'string'",(-1) }, { MI_PREDD,"scmrule:sl0:sl3:ml:'double'",(-1) }, { MI_PREDI,"scmrule:sl0:sl3:ml:'integer'",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } }, { C_FIGMTEXT, { // Multiline text functions { SCM_6_1,"scmtext:sl11:sl1:ml",(-1) }, { SCM_6_2,"scmtext:sl11:sl2:ml",(-1) }, { SCM_6_3,"scmtext:sl11:sl3:ml",(-1) }, { SCM_6_4,"scmtext:sl11:sl4:ml",(-1) }, { MI_MTSIZE,"scmtext:sl11:sl5:ml",(-1) }, { MI_MTMODE,"scmtext:sl11:sl6:ml",(-1) }, { MI_MOVENGROUP,"#movengrp",(-5) }, { MI_SEL,"scmtext:sl11:sl9:ml",(-1) }, { MI_PROP,"scmpedit",(-1) }, { MI_RULES,"scmrule:sl0:sl3:ml:'single'",(-1) }, { MI_PREDS,"scmrule:sl0:sl3:ml:'string'",(-1) }, { MI_PREDD,"scmrule:sl0:sl3:ml:'double'",(-1) }, { MI_PREDI,"scmrule:sl0:sl3:ml:'integer'",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } }, { C_FIGNREF, { // Named reference functions { SCM_3_4,"#304:ml",(-1) }, { MI_CSYM,"scmpart:sl14:ml",(-1) }, { SCM_3_5,"#305:ml",(-1) }, { MI_MOVENGROUP,"#movengrp",(-5) }, { MI_SEL,"#702:s0:s2:ml"+(GROUPLOOP ? "" : ":mr"),(-1) }, { SCM_4_0,"#400:ml",DDBCLSSYM }, { SCM_3_6,bae_inistrval(PAR_SYMRENAME,"#306")+":ml",DDBCLSSYM }, { SCM_3_6,bae_inistrval(PAR_SYMRENAME,"#306")+":ml",DDBCLSMRK }, { SCM_3_6L,bae_inistrval(PAR_SYMRENAME,"#306")+":ml",DDBCLSLAB}, { SCM_3_7,"attrset",DDBCLSSYM }, { MI_ACOPY,"ssymattr:s13:ml",DDBCLSSYM }, { SCM_6_5,"#605:ml",(-1) }, { SCM_6_7,"#607:ml",(-1) }, { SCM_3_13,"#313:ml",DDBCLSSYM }, { SCM_4_0,"#400:ml",DDBCLSLAB }, { MI_QSYM,"scmpart:sl5:ml:t:mr",DDBCLSSYM }, { MI_QSYM,"scmpart:sl5:ml:t:mr",DDBCLSLAB }, { MI_DOCU,"symsel:'docu':ml",DDBCLSSYM }, { SCM_3_10,"#310:ml",DDBCLSSYM }, { SCM_3_10,"#310:ml",DDBCLSLAB }, { MI_LOGLED,"logledit:ml",DDBCLSSYM }, { MI_LOGLED,"logledit:ml",DDBCLSLAB }, { MI_MACL,"scmmacl",(-1) }, { (bae_swconfig(0)==BAE_HighEnd ? "" : ",")+MI_MACLW,"scmmacl:'launch'",(-1) }, { (bae_swconfig(0)==BAE_HighEnd ? "" : ",")+MI_LPLC, "scmpart:sl16:ml",DDBCLSSYM }, { MI_LLPL,"scmcon:sl4:ml",DDBCLSLAB }, { (bae_swconfig(0)==BAE_HighEnd ? "" : ",")+MI_WLPL, "scmcon:sl4:'win':ml",DDBCLSLAB }, { SCM_1_10,"#110:ml:mr",DDBCLSLAB }, { MI_PROP,"scmpedit",(-1) }, { MI_RULES,"scmrule:sl0:sl0:ml:'single'",(-1) }, { MI_PREDS,"scmrule:sl0:sl0:ml:'string'",(-1) }, { MI_PREDD,"scmrule:sl0:sl0:ml:'double'",(-1) }, { MI_PREDI,"scmrule:sl0:sl0:ml:'integer'",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } }, { (-1), { // New element functions { MI_PARAM,"#5001",SETPOS ? 105 : (-1) }, { MI_UPBOUND,"#803",(-2) }, { MI_BOUNDRCT,"scmbound:s3",(-2) }, { MI_LOBOUND,"#804",(-3) }, { MI_BOUNDRCT,"scmbound:s3",(-3) }, { SCM_3_0,"#300",DDBCLSCM }, { SCM_3_0,"#300",DDBCLSSYM }, { SCM_3_0,"#300",DDBCLSLAB }, { MI_SYMSEL,"symsel",DDBCLSCM }, { SCM_3_1,"#301",DDBCLSCM }, { SCM_3_3,"snextsym",DDBCLSCM }, { SCM_3_3,"snextsym",DDBCLSSYM }, { SCM_3_3,"snextsym",DDBCLSLAB }, { SCM_4_0,"#400",DDBCLSCM }, { SCM_4_13,"#413",DDBCLSCM }, { SCM_3_9,"#309",DDBCLSSYM }, { SCM_3_9,"#309",DDBCLSLAB }, { SCM_3_10,"#310",DDBCLSSYM }, { SCM_3_10,"#310",DDBCLSLAB }, { MI_LOGLED,"logledit",DDBCLSSYM }, { MI_LOGLED,"logledit",DDBCLSLAB }, { MI_ATTRDEF,"ssymattr:sl5",DDBCLSSYM }, { SCM_5_0,"#500",(-1) }, { SCM_5_1,"#501",(-1) }, { SCM_5_2,"#502",(-1) }, { SCM_5_3,"#503",DDBCLSMRK }, { SCM_6_0,"tbdvscm:'t2'",(-1) }, { MI_MTADD,"scmtext:sl11:sl0",(-1) }, { MI_PARAM,"#5001",SETPOS ? (-1): 105 }, { MI_PRULES,"scmrule:sl0:sl5",DDBCLSCM }, { MI_PRULES,"scmrule:sl0:sl4",DDBCLSSYM }, { MI_PRULES,"scmrule:sl0:sl4",DDBCLSLAB }, { MI_PRULES,"scmrule:sl0:sl4",DDBCLSMRK }, { MI_PPREDS,"scmrule:sl0:sl5:'string'",DDBCLSCM }, { MI_PPREDS,"scmrule:sl0:sl4:'string'",DDBCLSSYM }, { MI_PPREDS,"scmrule:sl0:sl4:'string'",DDBCLSLAB }, { MI_PPREDS,"scmrule:sl0:sl4:'string'",DDBCLSMRK }, { MI_PPREDD,"scmrule:sl0:sl5:'double'",DDBCLSCM }, { MI_PPREDD,"scmrule:sl0:sl4:'double'",DDBCLSSYM }, { MI_PPREDD,"scmrule:sl0:sl4:'double'",DDBCLSLAB }, { MI_PPREDD,"scmrule:sl0:sl4:'double'",DDBCLSMRK }, { MI_PPREDI,"scmrule:sl0:sl5:'integer'",DDBCLSCM }, { MI_PPREDI,"scmrule:sl0:sl4:'integer'",DDBCLSSYM }, { MI_PPREDI,"scmrule:sl0:sl4:'integer'",DDBCLSLAB }, { MI_PPREDI,"scmrule:sl0:sl4:'integer'",DDBCLSMRK }, { MI_RESETGROUP,"#700",(-1) }, { MI_MOVEGROUP,"#703",(-1) }, { MI_COPYGROUP,"#704",(-1) }, { MI_ZOOMPAN,"#105:ml",(-1) }, { MI_MSMOD,"msmode",(-1) } } } }; static FACTL fmovl = { // Move mouse operation mode { C_FIGNREF,"#304:ml","","",SCM_3_4,"","" }, // Named reference { C_FIGBUSTAP,"#403:ml","","",SCM_4_3,"","" }, // Bus tap { C_FIGCON ,"#412:ml","#406:ml","",SCM_4_12,SCM_4_6,"" }, // Connection { C_FIGPOLY,"#508:ml","#509:ml","",SCM_5_8,SCM_5_9,""}, // Polygon { C_FIGTEXT,"#601:ml","","",SCM_6_1,"","" }, // Text { C_FIGMTEXT,"scmtext:sl11:sl1:ml","","",SCM_6_1,"","" } // Multiline text }; static FACTL fedtl = { // Edit mouse operation mode { C_FIGCON ,"#412:ml","#406:ml","",SCM_4_12,SCM_4_6,"" },// Connection { C_FIGPOLY,"#508:ml","#509:ml","#507:ml",SCM_5_8,SCM_5_9,SCM_5_7} // Polygon }; static FACTL fdell = { // Delete mouse operation modes { C_FIGNREF,"#305:ml","","",SCM_3_5,"","" }, // Named reference { C_FIGBUSTAP,"#404:ml","","",SCM_4_4,"","" }, // Bus tap { C_FIGCON ,"#409:ml","","",SCM_4_9,"","" }, // Connection { C_FIGPOLY,"#506:ml","","",SCM_5_6,"","" }, // Polygon { C_FIGTEXT,"#604:ml","","",SCM_6_4,"","" }, // Text { C_FIGMTEXT,"scmtext:sl11:sl4:ml","","",SCM_6_4,"","" } // Multiline text }; static FACTL fcdell = { // Delete corner mouse operation modes { C_FIGPOLY,"#511:ml","","",SCM_5_11,"","" } // Polygon }; // Global variables double PI = cvtangle(180.0,1,2) /* PI-value */; double x, y /* Mouse position */; int figdis /* Figure list disable bits */; index C_LEVEL conlevel /* Current connection level */; double conlx,conly /* Current con. segment lower bound. */; double conux,conuy /* Current con. segment upper bound. */; int levfound /* Level found flag */; // Main program void main() { string cmdstr /* Command string */; int rangedis /* Range check disabled flag */; int msmode /* Mouse context operation mode */; int rmbflag = 0 /* Right mouse button activation */; int oneelem = 0 /* Process one element only flag */; int lastanglock /* Last angle lock mode */; int lastpmode /* Last pick point display mode */; int lastgridlock /* Last grid lock mode */; int lastmsnodbl /* Old mouse double click mode */; int mspickdbl /* Pick mouse double click mode */; int cnt = 0 /* Element count */; // Check if no element loaded if (bae_planddbclass()==DDBCLUNDEF) { // Query the function selection switch (bae_askmenu(4,MI_OPEN,MI_NEW,MI_MSMOD,UPRABORT)) { // Load case 0 : if (MOUSEREP&0x02) bae_storecmdbuf(0, "#200",bae_plainmenutext(MI_OPEN)); bae_callmenu(200); break; // New case 1 : if (MOUSEREP&0x02) bae_storecmdbuf(0, "#203",bae_plainmenutext(MI_NEW)); bae_callmenu(203); break; // Mouse mode case 2 : if (MOUSEREP&0x02) bae_storecmdbuf(0, "msmode",bae_plainmenutext(MI_MSMOD)); ulsystem("msmode",0); break; default : ; } bae_clriactqueue(); return; } // Get the figure list element type set if (varget(VAR_MSFIGDIS,figdis)) figdis=0; // Check if loop operation mode requested if (bae_peekiact()) { // Get the command string if ((cmdstr=askstr("",MAXKEYLEN))==UINPOPABORT) error_abort(); if (cmdstr=='!') { rmbflag=1; if ((cmdstr=askstr("",MAXKEYLEN))==UINPOPABORT) error_abort(); } x=bae_planwsnx(); y=bae_planwsny(); switch (cmdstr[0]) { case 'G' : oneelem=1; case 'g' : lastgridlock=bae_getgridlock(); bae_setgridlock(0); bae_getintpar(39,lastmsnodbl); bae_getintpar(40,mspickdbl); bae_setintpar(39,mspickdbl ? 1 : 2); bae_promptdialog(oneelem ? UPRSELG1ELEM : UPRSELGELEM); while (bae_inpoint(x,y,x,y,14)==0) { bae_setgridlock(lastgridlock); if (grpfunc()==0) cnt++; if (oneelem) break; bae_setgridlock(0); } bae_setgridlock(lastgridlock); bae_setintpar(39,lastmsnodbl); if (cnt==0) error_abort(); exit(0); case 'D' : oneelem=1; case 'd' : varcheck(); lastgridlock=bae_getgridlock(); bae_setgridlock(0); bae_getintpar(39,lastmsnodbl); bae_getintpar(40,mspickdbl); bae_setintpar(39,mspickdbl ? 1 : 2); if (rmbflag) { while (bae_promptdialog( oneelem ? UPRSELD1CORN : UPRSELDCORN), bae_inpoint(x,y,x,y,14)==0) { bae_setgridlock(lastgridlock); if (elfunc(fcdell)==0) cnt++; if (oneelem) break; bae_setgridlock(0); } } else { while (bae_promptdialog( oneelem ? UPRSELD1ELEM : UPRSELDELEM), bae_inpoint(x,y,x,y,14)==0) { bae_setgridlock(lastgridlock); if (elfunc(fdell)==0) cnt++; if (oneelem) break; bae_setgridlock(0); } } bae_setgridlock(lastgridlock); bae_setintpar(39,lastmsnodbl); if (cnt==0) error_abort(); if (rmbflag) { if (cnt==1) cmdstr=REPDEL1CORN; else sprintf(cmdstr,REPDELCORN,cnt); } else { if (cnt==1) cmdstr=REPDEL1ELEM; else sprintf(cmdstr,REPDELELEM,cnt); } bae_prtdialog(cmdstr); exit(0); case 'M' : oneelem=1; case 'm' : if (rmbflag) { setdragmode(); exit(0); } varcheck(); lastgridlock=bae_getgridlock(); bae_setgridlock(0); bae_getintpar(39,lastmsnodbl); bae_getintpar(40,mspickdbl); bae_setintpar(39,mspickdbl ? 1 : 2); if (MOUSEDRAG) bae_setintpar(33,1); while ( bae_promptdialog(oneelem ? UPRSELM1ELEM : UPRSELMELEM), bae_inpoint(x,y,x,y,14)==0) { bae_setgridlock(lastgridlock); if (!CEDITLOOP) scm_setintpar(35,1); if (MOUSEDRAG) bae_setintpar(33,3); if (elfunc(fmovl)==0) cnt++; scm_setintpar(35,0); if (MOUSEDRAG) bae_setintpar(33,1); if (oneelem) break; bae_setgridlock(0); } bae_setintpar(33,0); bae_setgridlock(lastgridlock); bae_setintpar(39,lastmsnodbl); if (cnt==0) error_abort(); if (cnt==1) cmdstr=REPMOV1ELEM; else sprintf(cmdstr,REPMOVELEM,cnt); bae_prtdialog(cmdstr); exit(0); case 'E' : oneelem=1; case 'e' : if (rmbflag) { setdragmode(); exit(0); } varcheck(); scm_getintpar(0,lastpmode); scm_setintpar(0,3); screenredraw(); lastanglock=bae_getanglelock(); if (CEDITANGR) bae_setanglelock(0); lastgridlock=bae_getgridlock(); bae_setgridlock(0); bae_getintpar(39,lastmsnodbl); bae_getintpar(40,mspickdbl); bae_setintpar(39,mspickdbl ? 1 : 2); if (MOUSEDRAG) bae_setintpar(33,1); while ( bae_promptdialog(oneelem ? UPRSELE1ELEM : UPRSELEELEM), bae_inpoint(x,y,x,y,14)==0) { bae_setgridlock(lastgridlock); if (!CEDITLOOP) scm_setintpar(35,1); if (MOUSEDRAG) bae_setintpar(33,3); if (elfunc(fedtl)==0) cnt++; scm_setintpar(35,0); if (MOUSEDRAG) bae_setintpar(33,1); if (oneelem) break; bae_setgridlock(0); } bae_setintpar(33,0); bae_setgridlock(lastgridlock); bae_setanglelock(lastanglock); scm_setintpar(0,lastpmode); bae_setintpar(39,lastmsnodbl); screenredraw(); if (cnt==0) error_abort(); if (cnt==1) cmdstr=REPEDT1ELEM; else sprintf(cmdstr,REPEDTELEM,cnt); bae_prtdialog(cmdstr); exit(0); default : } } // Get the mouse position bae_wsmouse(x,y,0); // Check if shift and/or ctrl activated switch (kbstate()&0x0F) { case 0 : // Get the mouse mode if (varget(VAR_MSMODE,msmode)) msmode=MS_CONT; break; // Shift button pressed case 1 : // Get the mouse mode if (varget(VAR_MSMODES,msmode)) msmode=MS_MOVE; break; // Ctrl button pressed case 2 : // Get the mouse mode if (varget(VAR_MSMODEC,msmode)) msmode=MS_DEL; break; // Shift and Ctrl buttons pressed case 3 : // Get the mouse mode if (varget(VAR_MSMODESC,msmode)) msmode=MS_GSEL; break; // Alt left button pressed case 4 : // Get the mouse mode if (varget(VAR_MSMODEAL,msmode)) msmode=MS_LROT; break; // Alt right button pressed case 8 : case 10 : // Get the mouse mode if (varget(VAR_MSMODEAR,msmode)) msmode=MS_RROT; break; default : exit(0); } // Evaluate mouse action switch (msmode) { // Context function mode case MS_CONT : contextfunc(); break; // Delete mode case MS_DEL : elfunc(fdell); break; // Move mode case MS_MOVE : elfunc(fmovl); break; // Group selection mode case MS_GSEL : case MS_GCSEL : grpfunc(); break; // Left rotate mode case MS_LROT : rotate(0.5*PI); break; // Right rotate mode case MS_RROT : rotate(-0.5*PI); break; // Center/pan window mode case MS_PANW : // Warp to given position bae_clriactqueue(); bae_storemouseiact(1,x,y,2,LMB); bae_callmenu(MNU_BAEZOOMPAN); // Disable range check bae_getintpar(0,rangedis); bae_setintpar(0,1); // Set mouse cursor to new position bae_clriactqueue(); bae_storemouseiact(1,x,y,0x06,LMB); bae_inpoint(0.0,0.0,0.0,0.0,0); // Restore old range check state bae_setintpar(0,rangedis); break; // No/unknown operation case MS_NONE : default : break; } bae_clriactqueue(); } void contextfunc() // Context function display { index C_FIGURE fig /* Figure list index */; index C_CONSEG conseg /* Connection segment index */; index C_BUSTAP bustap /* Bus tap index */; index C_CNET cnet /* Connection index */; string msg /* Message buffer */; string conname = "" /* Connection name */; string predname /* Predicate name */; string grpname /* Group name */; string elemgrp /* Element group name */; string callseq /* Call sequence */; int ftyp /* Figure list element type */; int typ /* Current lement type */; int pidx /* Pick type index */; int pickemode /* Pick element mode */; int tidx /* Type index */; int tcount /* Type count */; int icount /* Item count */; int iclass /* Current item class */; int mcount = 0 /* Menu item count */; STRINGS mnul /* Menu item list */; STRINGS seql /* Menu sequence list */; int mnuidxl[] /* Menu index list */; int actflag = 0 /* Active element flag */; int found /* Element found flag */; int res /* Menu selection result */; int i /* Loop control variable */; // Try to pick element at given position bae_clriactqueue(); bae_storemouseiact(1,x,y,2,LMB); found= scm_pickanyelem(fig,conseg,bustap,pidx, ~(figdis|(1<=0 && cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ, RS_PICKDIS,"?d",0)>0) || (typ==C_FIGNREF && cap_rulequery(RS_OCPOOL,fig.NREF.MACRO, RS_SCMSUBJ,RS_PICKDIS,"?d",0)>0)) { // No element found bae_prtdialog(""); continue; } if (fig.RULEOBJID>=0) { for (mcount=0;mcount<30;mcount++) { sprintf(predname,RS_FCTSEQ,mcount); if (cap_rulequery(RS_OCFIG,fig, RS_SCMSUBJ,predname,"?s", seql[mcount])<1 || seql[mcount]=="") break; sprintf(predname,RS_FCTNAME,mcount); if (cap_rulequery(RS_OCFIG,fig, RS_SCMSUBJ,predname,"?s", mnul[mcount])<1) mnul[mcount]=""; } } if (mcount==0 && typ==C_FIGNREF) { for (mcount=0;mcount<30;mcount++) { sprintf(predname,RS_FCTSEQ,mcount); if (cap_rulequery(RS_OCPOOL, fig.NREF.MACRO,RS_SCMSUBJ,predname, "?s",seql[mcount])<1 || seql[mcount]=="") break; sprintf(predname,RS_FCTNAME,mcount); if (cap_rulequery(RS_OCPOOL, fig.NREF.MACRO,RS_SCMSUBJ,predname, "?s",mnul[mcount])<1) mnul[mcount]=""; } } if (mcount==1) { // Call the element program if (MOUSEREP&0x02) bae_storecmdbuf(0,seql[0], bae_plainmenutext(mnul[0])); ulsystem(seql[0],0); exit(0); } } } if (mcount) { actflag=1; } else { icount=arylength(fmnul[tidx].iteml); // Transform group classes for (i=0;i=bae_planwsux() && y>=bae_planwsuy()) || (iclass==(-3) && x<=bae_planwslx() && y<=bae_planwsly()) || iclass==(-1) || (typ==C_FIGNREF && iclass==fig.NREF.MACRO.CLASS) || (typ!=C_FIGNREF && iclass==bae_planddbclass())) { mnuidxl[mcount]=i; mnul[mcount]=fmnul[tidx].iteml[i].t; mcount++; } } } mnul[mcount]=UPRABORT; for (i=mcount+1;i<30;i++) mnul[i]=""; switch (typ) { case C_FIGNREF : sprintf(msg,fig.NREF.MACRO.CLASS==DDBCLSLAB ? UPRLABEL : UPRSYMBOL,fig.NAME,fig.NREF.MACRO.NAME); bae_prtdialog(msg); break; case C_FIGPOLY : sprintf(msg,UPRPOLY, bae_plainmenutext(cappolytypename(fig.POLY.TYP))); bae_prtdialog(msg); break; case C_FIGTEXT : sprintf(msg,(fig.TEXT.MODE&TEXTCOMM) ? UPRCTEXT : UPRTEXT,fig.NAME); bae_prtdialog(msg); break; case C_FIGMTEXT : bae_prtdialog(UPRMTEXT); break; case C_FIGBUSTAP : sprintf(msg,UPRBUSTAP,bustap.NAME,bustap.MACRO.NAME); bae_prtdialog(msg); break; case C_FIGCON : // Get connection data conlx=conseg.X1; conly=conseg.Y1; conux=conseg.X2; conuy=conseg.Y2; // Scan bus connection level levfound=0; cap_scanall(0.0,0.0,0.0,1,NULL,conlev,NULL,NULL); if (levfound) forall (cnet of conlevel) if (cnet.NAME[0]!='@') if (conname=="") conname=cnet.NAME; else conname+=","+cnet.NAME; sprintf(msg,conseg.BUSFLAG ? UPRBUS : UPRCON, conname=="" ? REPUNET : conname); bae_prtdialog(msg); break; } // Query the function selection bae_defmenusel(-1); bae_setstrpar(8,fig.NAME); if ((res=bae_askmenu(mcount+1,mnul[0],mnul[1],mnul[2],mnul[3], mnul[4],mnul[5],mnul[6],mnul[7],mnul[8],mnul[9],mnul[10], mnul[11],mnul[12],mnul[13],mnul[14],mnul[15],mnul[16], mnul[17],mnul[18],mnul[19],mnul[20],mnul[21],mnul[22], mnul[23],mnul[24],mnul[25],mnul[26],mnul[27],mnul[28], mnul[29],mnul[30]))<0 || res>=mcount) break; // Get the pick element mode scm_getintpar(5,pickemode); if (typ!=(-1) && typ!=C_FIGBUSTAP && pickemode) { if (typ==C_FIGCON) scm_setpickconseg(conseg); else scm_setpickelem(fig); } // Call the element program if (actflag) { if (MOUSEREP&0x02) bae_storecmdbuf(0, seql[res],bae_plainmenutext(mnul[res])); ulsystem(seql[res],0); } else { callseq=fmnul[tidx].iteml[mnuidxl[res]].p; if (callseq=="scmpedit" || callseq=="scmmacl" || callseq=="scmmacl:'launch'" || callseq=="attrset") { if (MOUSEREP&0x02) bae_storecmdbuf(0,callseq+":ml", bae_plainmenutext( fmnul[tidx].iteml[mnuidxl[res]].t)); varset(GV_PROPCALL,0); varset(GV_PROPX,x); varset(GV_PROPY,y); ulsystem(callseq,0); vardelete(GV_PROPCALL); vardelete(GV_PROPX); vardelete(GV_PROPY); } else if (callseq=="#movengrp") { bae_callmenu(MNU_SCMGRPRESE); forall (fig where fig.RULEOBJID>=0 && fig.TYP!=C_FIGCON) // Query group name predicate if (cap_rulequery(RS_OCFIG,fig, RS_SCMSUBJ,RS_GROUPNAME,"?s", elemgrp)>0 && elemgrp==grpname) scm_elemgrpchg(fig,1); forall (conseg where conseg.RULEOBJID>=0) // Query group name predicate if (cap_rulequery(RS_OCCON,conseg, RS_SCMSUBJ,RS_GROUPNAME,"?s", elemgrp)>0 && elemgrp==grpname) scm_conseggrpchg(conseg,1); ulsystem("#703:ml",0); bae_callmenu(MNU_SCMGRPRESE); } else { if (MOUSEREP&0x02) bae_storecmdbuf(0,callseq, bae_plainmenutext( fmnul[tidx].iteml[mnuidxl[res]].t)); if (mnul[res]==SCM_5_8) scm_setintpar(35,1); ulsystem(callseq,0); scm_setintpar(35,0); } } break; } } int elfunc(FACTL fctl) /* // Element function // Return value : // zero if element found or (-1) on element not found // Parameter : // FACTL fctl : Element action list */ { index C_FIGURE fig /* Figure list index */; index C_FIGURE afig /* Attribute elem. figure list index */; index C_CONSEG conseg /* Connection segment index */; index C_BUSTAP bustap /* Bus tap index */; index C_FIGURE lastfig /* Last figure list element */; index C_FIGURE newfig /* New figure list element */; struct factdes curfact /* Current function action */; string attrname /* Attribute name */; int lastexists /* Last element exists flag */; int ftyp /* Figure list element type */; int typ /* Current lement type */; int tidx /* Type index */; int tcount /* Type count */; int pidx /* Pick type index */; int pickemode /* Pick element mode */; int abortflag /* Abort flag */; // Try to pick element at given position bae_clriactqueue(); bae_storemouseiact(1,x,y,2,LMB); if (scm_pickanyelem(fig,conseg,bustap,pidx, ~(figdis|(1<=0 && cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ, RS_PICKDIS,"?d",0)>0) || (cap_rulequery(RS_OCPOOL,fig.NREF.MACRO, RS_SCMSUBJ,RS_PICKDIS,"?d",0)>0))) { // No element found bae_prtdialog(""); continue; } // Check if symbol move function if (typ==C_FIGNREF && curfact.p=="#304:ml" && (figdis&(1<=0;tidx--) { // Get and check element type if (figdis&(1<<(typ=typel[tidx]))) continue; // Try to pick element at given position bae_clriactqueue(); bae_storemouseiact(1,x,y,2,LMB); if (typ==C_FIGCON) { if (scm_pickconseg(conseg)!=0) { // No element found bae_prtdialog(""); continue; } scm_conseggrpchg(conseg,6); } else { if (scm_pickelem(fig,typ)!=0) { // No element found bae_prtdialog(""); continue; } // Query the multiline text status if (typ==C_FIGTEXT && fig.RULEOBJID>=0 && cap_rulequery( RS_OCFIG,fig,RS_SCMSUBJ,RS_MTEXTID,"?s","")>0) { scm_setpickelem(fig); ulsystem("scmtext:sl11:sl9:ml",0); } else { scm_elemgrpchg(fig,6); } } return(0); } return(-1); } int conlev(index C_CONBASE conbase,int segidx, int contyp,double lx,double ly,double ux,double uy, int busconflag,int coninws,index C_LEVEL level) /* // Get level of connection segment // Return value : // zero if done or (-1) on file error // Parameters : // index C_CONBASE conbase : Connection base // int segidx : Connection segment index // int contyp : Connection type // double lx : Lower X coordinate // double ly : Lower Y coordinate // double ux : Upper X coordinate // double uy : Upper Y coordinate // int busconflag : Connection bus flag // int coninws : Connection in workspace flag // index C_LEVEL level : Connection level */ { // Check if connection segment found if (lx==conlx && ly==conly && ux==conux && uy==conuy) { // Store connection level levfound=1; conlevel=level; return(-1); } // Return without errors return(0); } void setdragmode() /* // Set mouse drag mode */ { double pcol = 15.0 /* Parameter column */; double cy /* Dialog box current y coordinate */; int modidx = (-1) /* Drag mode dialog box item idx. */; int clidx = (-1) /* Corner loop dialog box item idx. */; int aridx = (-1) /* Ang. release dialog box item idx. */; int repflag /* Repeat flag */; int res /* Result */; int varidx /* INI variable index */; // Check for dialog support if (bae_dialclr()) { // Set default selection bae_defmenusel(MOUSEDRAG); // Select the mouse drag mode bae_selectprompt(UPRMODE); if ((MOUSEDRAG=bae_askmenu(3, UPRMODE1,UPRMODE2,UPRABORT))<0 || MOUSEDRAG>1) error_abort(); // Set default selection bae_defmenusel(CEDITLOOP); // Select the corner edit loop mode bae_selectprompt(UPREDLOOP); if ((CEDITLOOP=bae_askmenu(3, UPREDLOOP1,UPREDLOOP2,UPRABORT))<0 || CEDITLOOP>1) error_abort(); // Set default selection bae_defmenusel(CEDITANGR); // Select the corner edit angle release mode bae_selectprompt(UPRANGREL); if ((CEDITANGR=bae_askmenu(3, UPRANGREL1,UPRANGREL2,UPRABORT))<0 || CEDITANGR>1) error_abort(); } else { // Perform the dialog input loop repflag=1; do { bae_dialclr(); // Init. the y coordinate cy=DIAL_TOPMARG; // Store mouse drag mode controls modidx=dial_selboxpar(UPRMODE,MOUSEDRAG,pcol,cy); dial_sbentry(0,0,UPRMODE1); dial_sbentry(0,1,UPRMODE2); // Store corner edit loop mode controls clidx=dial_selboxpar(UPREDLOOP,CEDITLOOP,pcol,cy); dial_sbentry(0,0,UPREDLOOP1); dial_sbentry(0,1,UPREDLOOP2); // Store angle release mode controls aridx=dial_selboxpar(UPRANGREL,CEDITANGR,pcol,cy); dial_sbentry(0,0,UPRANGREL1); dial_sbentry(0,1,UPRANGREL2); dial_hsep(cy); dial_okabortini(cy,34.0+DIAL_RIGHTSMARG,28); // Call the dialog function bae_setintpar(16,3116); res=bae_dialaskparams(UPRMOUSEDRAG,0, DIAL_LEFTMARG+pcol+19.0+DIAL_RIGHTSMARG,cy); bae_dialgetdata(modidx,MOUSEDRAG,0.0,""); bae_dialgetdata(clidx,CEDITLOOP,0.0,""); bae_dialgetdata(aridx,CEDITANGR,0.0,""); switch (res) { case 0 : repflag=0; break; case 28 : varidx=0; bae_iniintset(varidx,PAR_MOUSEDRAG,MOUSEDRAG); bae_iniintset(varidx,PAR_CEDITLOOP,CEDITLOOP); bae_iniintset(varidx,PAR_CEDITANGR,CEDITANGR); bae_iniwrite(varidx); break; // Fail/abort case (-1) : default : error_abort(); } // Stop if no further repeat requests } while (repflag); } // Store the new mouse drag mode to global variable varset(PAR_MOUSEDRAG,MOUSEDRAG); varset(PAR_CEDITLOOP,CEDITLOOP); varset(PAR_CEDITANGR,CEDITANGR); exit(0); } int gettransfigtyp(index C_FIGURE fig) /* // Get the translated figure list element type // Return value : // translatd figure list element type // Parameter : // index L_FIGURE fig : Figure list index */ { int ftyp /* Figure list element type */; // Query the multiline text status if ((ftyp=fig.TYP)==C_FIGTEXT && fig.RULEOBJID>=0 && cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ,RS_MTEXTID,"?s","")>0) // Transform to virtual type ftyp=C_FIGMTEXT; return(ftyp); } // User Language program end