From d16be2975c96c850f60d4814a5f97f7e80303458 Mon Sep 17 00:00:00 2001 From: lempinen Date: Tue, 1 Nov 2011 14:15:28 +0000 Subject: [PATCH] Valve horizontal and vertical orientation and text locations git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@23151 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 71717 -> 72091 bytes .../graph/Sysdyn.pgraph | 13 +- .../org/simantics/sysdyn/SysdynResource.java | 24 +++ .../ui/elements2/SysdynElementHints.java | 3 +- .../ui/elements2/SysdynElementUtils.java | 16 ++ .../sysdyn/ui/elements2/ValveFactory.java | 38 ++++- .../ui/elements2/ValveTextLocation.java | 35 ++++ .../ui/properties/VariableInformationTab.java | 8 +- .../widgets/ValveOrientationGroup.java | 22 ++- .../widgets/ValveTextLocationGroup.java | 150 ++++++++++++++++++ 10 files changed, 295 insertions(+), 14 deletions(-) create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveTextLocation.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ValveTextLocationGroup.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index 1d3d856bc069ef1d6a7a6853e5e7435103a9011e..3863b84b4a9f1d2979d965ee940157ce643d8136 100644 GIT binary patch literal 72091 zcmd442b^4089qFBXExbvdLeWi0%(GpWP3rt4QWIY5|X7$ne0xIf!&>Db~cS7Vn@V+ zy@Dtzid_UN*bp1oyC8N{?7e-@^Pcmb``)uF#?SBn|9$!WE_0sqKJW9sr`~h#Ov3b> z|I;|TRvxcT)CS9|s}rO3hFq?>GE^R|SL&7Wc++&HH8d%WjG^+5$|xAs(V3o5C~U1( z>nXi3S{f-&gRxNGHztLqwR`L3+GuGwB~2SE)es7bf!?%vjIxf^*tB6Z^=ZsCkJn4} z@(5hUo8Xk2w!1Vu@o%$i6l+t$44cacJ~|HN@fpl&RxZ~#JC|!Xi$?jAd`gH-TWZxy z%7gXsTrRmMkNe# z#1?_DAB2YTJTJ1fTpHRpS{_HFhD*dUldfk>l!hzyeW-k&ROW{|`vBgnpcmjh3VHzE zt)Ls=T?)DY-l?Dy;2jD&0N$>k9pE+vZ2)gm&!cC>Um63^&D3`Z7=1>Q_=T-&mp0_Aq_q`*gdx>VB9woeJ2nI~1^C?^nQv-L8NQyGnqJ5wfnLW>jis z*(Rd)#Zo&*(i$GF4(i-)mU@}|tE(ep!)4BS_JKC*InL2HYs0uqe+a%@>iw))hlUQ( z3x?g33|lduu*4pOA-R7sQ;?+>FSEmFe=tAP#=baI0sG=$1?-E(3fLDp0kf&u&j0v% zx==Zon#n@~WXbQSV!wpjL25@ACO;O?NO!{D3Y0b7t|OTIH02;{@=t*WO*JQI{>Q&J zGs54+e3Z{!xr`*N#q%a9iQrDvx7HBoC)vZLwEg zhWP#?C@CX`=`zK(ya*Ec#Z%^{lXsd>7ERU3@a+<7eyANCneSA9p3HYBKv(A56`(Kk zZ3@tt`Bnw!&HPFQ=*~PhgZ$!IST#cvgZ0X8xijQ@9A!s4`P~Z0f1H5%Z1FnIQSES; zRyf{ZJ9%6Q`NapjO=^`}$RN9ez&LD=5yGs~%XM3OjMU2Nmk!-luMS>{QTQV2llz+) z*7Y&q*Q9Q4)cG)c&ym;e9V^$c)VZ@IpJ&}Y3kPw>ylALARvyI>WN_a_wek+s-z&z# zKxrp3YhV+Td*`eg8mWwK7(c5b8!_sSmHK(UeqD8NV!VVc8syK2KMpOb3pU%A+|wv* zls+eLZWJGeFF0SeV%xrv?bTt_eOBrUJBF)!fWGQnLpzn0OXNT?f6tyhE5<7$B^;>+ z$5&KqJ8|5|)09kK-@ayf+X~+HR7ZF-CeGYvw6phSo4OF(#~?b(@SIIrSbB*iBU{Uo^O(;h+!6(XW+FUYc8}8-9vYvgG-)8;e=RqUd)^lGHOS7Fexdu^b-dNgK zuC+Ra+zQq;G;JQOSBI-RagfTLBsJ4Y`3q`7BFWz$%#ib>AXT=E2| zX-2EYE93R?&6wDEm&o*0k{H|?Ic4%y6UmG7c8P8(4-MeXoF5mdgCwHUUlY#bh<%5c zr>*4~9+C4Sf;lWmaHxV?HX4;XMQZ1a<3KlD#{S~-%sF<`no_;w#yj^aVa^!eH!@PL z*D8Z>o-b8Rkla|>UdEaz{E#*C)6A3gLTTPGzOgcTsY|@@Bh)494e19$%GXO+6pf7n z=5CunDm6A2vr4+@$zqtf4Z%luuBz2aY}JHR&N9P=eJwXzYNv0kY_FASq@6Dn?5lw? zjwNXOmQoFmCU~r1hfjw&e}0-#?lVqy1E$}|SarNS#0+xs5Yf=QVH6J_ql0Csd!;b* z*p)zN6~Jk$+vVzE%r|t*Pibj25#%|eVfrc6>TtP)xtCikzSCUu;PGj}Si76|jFyK^ zK`U~%OBL7P=~zbKyk9Dsb=)MOo4lXf7^LbxS9Qw1dfE3|!AtSMYA4rs?l9prY4@N% zhMkw2ma?=PWuY~2eS|p_HlW;Gr?6pk7dCW0Ipy5o&)zn%-40~qOd-yc5$0o|fXZ0yDa+>YJ+Lb>6!!5L@H=T4`(-Vx1cNwKvc||B%Y2HPw+)MJ7>hgHzP) zsx&MsN?KR=o!F+Gj(H&|y-;v-wKi17irH3XkN->R7H>cY#A}W|`MT4eY(20kU!7Nl=lg%d9z6)FB^NqJZvL_c$jwEf@{P->Au^z%Z;LeH;^^u z@xfX}9;`9vXHmA<5En|EIUB&!JEU~OX;MFJO?5);IBty8@$RiB)wXHarV(H}X7PIWu zx>2F_B~sgXN@aA2o66q>Vv9J14@}%5@-LRE1wIg_#95_U#T|eOe-+zwxl1re?q;c2 z#Dm`+-e{Q{T-=6V_%*FJr~R0FozQ11vqP$9$Obwp$GhAcq>8)n zs(QUNxQm^ZuD{$iF?08fdZQqtef)e_;w*Egi_@G*_18=NOwQ&Vc=C1|=v$jR-QBsKPrmL*HlV7al1_WO@mTO`%>%BGrw|f zlWlmZ@b9FM=8@vIz*BshZcGxnX|xH+tUC#ydllr$VMCgEls_zu^ zscgqBb2Yp_C}2!v$7?xAM<(7Qc?gxj5pwjkaE<=ECT&CLOf-(Q4| zU4(}ptcf5B+t0*yoQWtSFy+8tH=gDqryVZr@O1Q$n41T~EW$L9V?)c4lNHTmL#JFP zt~2lwI;dSBRopfCOyc*_OX>GiR$aq+fY zcs)I&>pp#;Ncdg>?~m8|7uxG8vUTUqmFgoh(_zw_%6(Z_y!YX#I5Et##dlcs<#fYM z_+|!&Q#apuNaLHoT;tp|I2P~26HpDWjpeSN`<57H2Q}sbMLuKazLhHG_zazE#H(DK zfd_HBF>g{p|0b>X8am$==Ng&h#%lG_i7{~aB%FJP;oK;k=Je12`MmA} z8PA^!D?d<$Zte-r#SMVpw{okclKcMVi8|h^%J%?xpAR*@>ddV+YWs!TsP7^iL|5rq zMjtu(3LT>cO*sqeu|>w?y+)7k0&~~7dywmaEUmCW~Ili#XHS(c19rB+^U14K+2j)&P z$N7#`hjG8J@7ow&$tEpg(bG@7cby7rg6$mN+Q=6fc70+Xz73b$7tBD&tZ(G8BOGA-^7$^Q-!#-ev!Ze4>f!3dkY=BI ztyDJQ7*MJV%h6{-Y8Gz5>nk_=>gg#gSs_Lpk9a3O57uPGbXU#0#>K2S?~v2Wd$MB` zo^6woFlKE=D87B#j+F|R^QCq+{L*ek^+i&>0M*)AsnCUDn`vxtxIilBpfa;p2Xc_3ao2{x;Ujq@5!zZdocvqm)(W&v@H}P7bE>5XY6Zv%q?u%wVxciA5E@AqB z*cXP?l;#WL(PEs3XAXbx8edFs;2xbQWPI`w;TFAAL8$ zUH+4_US;Om{X##|+^Dd9>jVjlDYsi_GgeLPtqfP>B~*@Y{&S5B+*-gZCHHDlW?=4C zu{GjVqujXpZaH_Wi8|zbeTJDQiR2KmEj$yisdS%_6(fDYFHdoXKLurjt^XvO1$^Oo9AuyeQZ>Y-+JMW zm)@IlPj#+lCV}w-spM@GW3aoNS=5CGX#9am^ku@Hr@QY!`kYh|3-17OqYqtDkfv0O zhU-9n=g+Cdnetfr9&%{ zZo$hdqeWc`ASc(smK-tfEdJ(VBx896E!P#!+py+56!?1ukhg6(9iKex0Ic4;4WI13 zMHJAogoletR9ojaqmNs?_GFWvAGkCKzZC$mArk6T&j?0^8Nr)hCirnDb zHc2b^~6+#9fh0P0f11tsVHZS^wlJcUoN zwr+GjEwtHN%R}Ws9H{j~u~4dut9D~2hPGoL7=P3YRWynDhrSAyjR&*+U31WJb zx9nVFbRN#VL~608k-d3`;d2_{0Z<-t(shZt0WlorhQ>c_;<#1DuTJ!xVopxJjmz@TQ$ot=Fsg@-tZ=c(H304!CY4!t-#_B=&i_g{F6w!b7kmO(un(2$e&? zuOJQcK^lINGLwUa`Iv3xVZ08-d;iR%k=r2Msqs)D&e9FfoojP1ms<3wdt`;UJLxvc z-3(B6(8fh)SL(Z_xSQT1?hE~iYRKF-&|%-8@t!o-+$>?wUo|u&Kf^1T!_FLjd`@oofk$po z;DS@})oiu4FMGp(FVV`J%&^93VShM7NQs6&`0E$T05set-J}zlTB`mr9z!G2+0*y-t7G<8t^T3=PMmIW)+(h6On~ zqKA3Yjm78j9lADBlPn<*iP}cPuK7a~0`# z34D{ED;)f9T81y`UMd9cv_3W(tg8W@e}g&yQqvw60be$ShJ*DR5y2)BelaBPpWZ0d z9AcaWE2E}y`HGnMOEPxAT68wQHN1q;D*P7LKa4kW>g3HaKhG~Y9K|oJ#yo2-O;gPA z3y)lZO>)C##}cEnRLuCcGW=Mp&@EL9@NIe~Pie#hV#5y-!WUl;vgU#L@^xi-Xbpag zEMHghL8Dp7i?&uL>Sg&wK-#H@e3X+yVtxP%e@0EiQEBdlM}&e*vWr48nJ2cHypyH_ z{1~ak>t^?CyF}m&?t8uqbH}o3i9C6u7Mr~+uVYQnUU9-rnO`{b8%h37I=@S57mJL@ zX9ug{XtCpf;odT%%m0L$hNDyA+;fG3Gu&{smM*ts8LN}oXI093#;SOl@ZW{>p*mSM z!@gJLx2nmq`GbBJwk9sDWZCTaMRF^vm(SXO=ZnGNiJ|h)2K=ZcDNC(<;~Tzq*X51G zeE9fBLB{B(}L2fzkg z*->x*PcQ#HIvZ1a)6+~p)A=T_h>DKwcp3qNPgjC6RDA?J;Evc9EhuKiw^ z@93k>Sw&O7>}DX3e^^0m%mOJ_vt> zV#;pg4JBFTyUp}X!uu1}rj5p*NhHhgYw>jE8IL@_QAJ1VxADd^{{xuv56L;l_X4Q= zZAG$dUXV+t_(@J_Qjg)6nJsAJL)c8#V_R!P`Te-QAK?ch{6K`i7vb+l_&WxF8v5Th znDM?9;crIx8xj6`guj;J{41dM)d+tj#nQenNBBz-{$hmhkMMmF{(`}uL;TN27ww>C^iOd(=z}YE ztAA^x4;=KjpiH~!vwz+a=>rFS`qFOo-#i%y{nNpxUGC`cDF%cGW)t_~u9-IOu~bcB}t-@csQj*56GL zzA?hDi|}hB{F(^A`aj@T!EW;b4(&S#W!ioF8h!%&N?^Y}8n8DLhxXBzcB_YbM2v&} zBJgQfed@j3=;Pi)9Q45zyVb|OlhFqb`rN;1SAE2vufrI{hlxbJ}uL8d)(gzOu^rhYEzi=`R`t!i2UG;IV zEWE(zGahiz2UqM?|M`(VaL}KNGVQAWBjD?eKH~ugefrXF^`AEx2mLwV)2{lsw->H6 z`d@Z9=z}YEtN+|cA2{gGMwxci|03|UMxXJ3gFby}xBAbSjD!A6@M%|l=KE};{{x4E zKDc7H`p=5=frI`GlxbJ}dw`!A=>rFS`qFOopD`H+{psM-uKLXP=|=za4hMa3#cuVV z7U=^A{YI2&SAEXMYa)H%pif`gt^QLdjdy zPr#>L_3s6~3fSrc2YqnGZuPE=^nq2s;a@1zuKHgGzQX7;9&pg7FYQ+U^2s>p{{wv5 zRsZ|I`y+kepbxItt^U49A2{g$4Q1L@pYwCC(ZA2(pif`gt^S_LIOzWceA-o?>uYzU z4;=Kt6}#1+i1dMj{-02$UG*OTt{Z*!7jV$0FYQ);d@>IDe*m9$)&DqfEz$=L`rwM) z>R%S=0|))zp-j8#bAKB%`fLwy(5El$R=+wK2mRlGPrK@W5_r_;vwwhtKDc7H`XiA( zaM1r1%CxKg*MWzPKJy0-`t+sU>R&n;2mN1yPrK@W7xtL4=fK`8u!$BWhv0MGEkv?$HN8cA{SN&GtGmQQz z4hMbu(r)#)OvXVUV^^SE_4|Q018e>#I2`oB6}#0xJ<-+$+$o`t86QjDEkvL7%>~Tm4ff zKiNLEPec+(a^+3DT#~hAv(8pXX(60KN|ErAt$qom7t_Rw!e*a_~^f~uvSAF*X z6M=R9Gahiz2UqM?A30>=F(>ph-@i3rE*5B4{Z8PMfUQ1o(5El$Rv&#DWDDrc*foqVT?h> zzVbid6?m_Sy}j^v@Lq;b;u~Q?$l!;Gl^?);a z#~VK56I(uThQAE97+kpZNo4_{SRlHLw#apZNo4_{SLj)vyyQpZNo4 z_)Aj0wg9jQ&xPK5#~# zSo??j2eH)$4*E4`&*&c+=>rG-3t=PH{MkRms?Ym5aL~WZW842npw9L`a7Le4_1Qnf zRv$R%k2!lL|HC7F;EX=8?H^*R4;=KX&?2_^9~S8Y2mK3RBUXK$hls5{aL^xh_Kg0a zkv?!npIG%T1((?B0|$MqGukuyheZ0oLH~T%h*ked9;^O24hQ`~k8S@fPUGeO0XuM> z%ky8*J=f!ZI-L6~@Ikm{;QBf2T))7YZ=nfzQHn(mSoOr0*y|;o;4j3bddwF%qqiW% zq6ZxG=u51696#l3*GkWtajl)!>1l_(Ax|Qv-Yp_Ct%P6m-f(J^k@DrXxA#gp3q;!>Ywy``)Y6BFChm@ax$l?4CeE#c! zf1m0n=uhH|KJBUxE#Yf>`+$F!@+IHj8a?Iw>qqP`C;G(aMfT(nEVwE2YcPycVplAC*sTj{vIyN2hQ+mSN?RAziapt z4rlnZd%ooN9q6r3->>Fl{B7`Gf_(lC-pf!Xz5&IJ%oXO{_hR^(oEgv|;|H@<>@?-vA zj_km}&iuawyUjnwUo?E?PptXiUO}A6hieph%Xl$=V#^24@b8<9gFo~CLSzRHcIN+i z*lqqX{+!`6e`3w&cMfOr;TpC16I(uThX0w#IQTRFdm}q=urvQpNBPJ29>Zt;#F`KG zcH&GvpE7**Ke6QlXZW9l-L7xoVCQ~7yRO%tp!^A3e!t26$Yb4aus6{j{JGzJ++eOx z;Lv{d&&MJ=aImv~?!u+<9iT4rI+4cYjJKICMwugJgha*04hEKclu~+0j zWcU*fXZW-$|1~IoFwz4K_AjIS0bDj;;EW#as@IJ2orcf&z!^U6%4hsLB0g}2PrLHD zw%#A{firyCl~4WK4gU&3*OT&wSm_`n%H?aF69?}_-p89wdG z=URMs#0SpsX;(hi-n($=eB|07*7?Y_0UZ1}|KEvA$CvE|4tCB*+Et(VzXO-$184ZO zE1zw7d&CFM@M%{*+j3jP2hQ+mS3cYJwuld$;nS{sw&kr6A2`FOUHOc~Gm335aE4F2 z^4a#cM10^3pLWZCbHoSE@M%{*`|3>*A2`FOUHQzPdzj51IK!vi^4}QofiryCE&mM> zA2`FO-STfXe6B~}44-!8bM3s|@Hsz$Gkn^W&+<(XA2`FOUHR;*8x5cN0B88LE1z@Y zb%xJ;fHQpBmCt;5kFfm@oZ-{1eCES7X8FJwKJCiq+qvXa2w$ zKJCh9tXIOm-kg75j=Gna^DglXxb6n;Irsz)dM^g%nLzpY6m0phXZSBNnEMZK$miK8 zzYv%0AK>6mKJA+Se3V~+OZUTPcs$~tKc4Pz@aKN`e8Yd5$I9R7aE5<9>TEv1!OnbW z*L72_?!cp zKj%Miu(N+?*ZeO*nR7(>>`&kfpLXT5e>i6>A2`FOUHOd1Ibr$089wdGA4mDA5g$0i zr(OBb&0ihyfiryCmCyOWIi};q@gUazywu^~Pdmrh<_{d~Y#;5a&;GnJ;sa;+v@5@Y zGUtrybG(2veA<=I`LrLG=0D)E=D*G1;LrRy$CSU$W96@PIK$tII-3u0u(Q3iYd&jG z=A5*A;0&L3<*!DWW1#u0@>uifcR2Vn|1raVqQ}ZV+2ITyeH8GMVc%i!1;Ay4X&*9} z_CbSb-)=DNC4*_d*kIZ(GMM%Y4W|9v6elwr&iCSe^FEaEDSxM_%fBz)>(aw1M|I7 z;j<`1OR(zm{7AcgUo{K(%oIyJ%;}I{C+xtPc)%eZV*`hH&=RciZu8j2!y3`}5^t-C z*8x6oCLVBz$JoFj9@iVO#(S&BHr^Rgye%ePJNUqvc)%eZV*`hH&=Rci-r}*1w>gS; zx{22YK5!-;aEQm)z#$&A1Z%uEd2Hihj%NCEqlwoFK5!-;aEQm)z#$&zJF&)lqsKNL z=42+`lT5so-~(sk0f%^u4IJWeeiLiFn?1JiHl*8{zUc8Dp!tEzzXPiF+#?PLJ>EZH4|SdM(PF-^A+wHsEex z<#YUql}~?S%f~%N`3;rkaQI0a^ckO6 z#sK3|B#3x_lGX};W`0sW&`Jp>+$$X&w66Etyul-oVXTHZ7{9%Xl$AW(& z%J>xf+kroiGJK^@?eHZI@tHsIdiVZ8)+4dzOHIsyz~Aq1$d~hjcFh;Q`6Y(We2+Gm z{Yk9-2`+KIhSe}_Nu^VzSyhs zM<5^WC-@`|_78Zh`NLN@%J;s3&wOFa+*|o~t@Dc_J>ZNUub(GXZlnjC(E|>8&>}zR-QoRJ?|R@lksfeH4>;&S zi~OMXe($e(*8$It^nf#Zz(EgMes~^$ zmSEL?w#WW{n$X@H#hYQ`y%%=iOg!2(9%9iR;z3KW#(Sp6HeOQ{Z@P*19`J!P@o3k0 zh(&vd2Q9%G@97@fcsO%~{o*v(8%?}-JDiC}yT(H-@YpqIh`|?_J;n zXX4SW@eqsl5D!{{HQv=8+jtF8yu`$NC-}gbc(iLg#G*aKgO*^8ca_IB9_Y3|8~$bD zy#r-n8&B*SkFjA7@lX`3@viXL#B2Cx6z?D4tVfJr;`8mefHU!E_wgh)u*Rbn`C-4> z@3D>d_bA@qz|nZOp$wdfN4v&jY~T zYkn^WekkRO-uF?bdh`X(=+Ulv@TEQE_hOVEO!=bs0P0kaT;Plz?WzY~+JoL4l)snq zMen<)Q$2ElGkUbE9(-vJde1}oJ1JlEzKuH7BNsTMN4x65m-e8?_3^EgFM8iZo$8Sb zoYA9Q_25f;(BpjkM#>kxucJ=&$OTqCzP}_6dhivjGkG{YeJ=!%t z_|hKodj`s1N%^ApWz?x2xxg7c+Eov}vX8ea(W71U;7fbZ8%6okDPQ#NL7nQ63mo+R z;c(D{FYQ6^aFjol@9FJ{+)(TJF)V)UWhIK4#TINSo!!A zZ29jueCA86e6Am2%fH?5X(v`b`-|A}-)HzQhn-mYj7O~e8-d>&@rjks^+#;^?=gJ# zKe6%|kJ$3x9r1~k&;BL0{C62X`;%Dtyk8Pq{yQT+vGUnp#FqaK!>65C`JAuBmjCvM zPpteGgHLSvw;4X?JF)WFpTw4rHIrFi#LDM*5nKLS4WIFel|RR0%fB_^6Dyzl7qR8P zCE^n+e-`+}mj7nMXMAGibAA$AKKBycPsnFk`RspU%g4Tx;S($WdEgUU{u?7cvGR9- zPi*;bFnsC}E5F%e%g3G<{I7tWT(uK(?^Jvm@Qo3EU4*fZX85m(@T(18482!H_?4)8 z1@`K)`)mNtVGS0(y;aNgv}erOGWQ$s!}kNs8GAjuML4E!QoFGRkB z?vps^F<)ZM7rx{MzV{7$<_mi!Ut-OdF$f(lS21#5i9xXSR^ zU%;WiP!_xP7h_#%_{@MpfTXYwW1e5r{X z1Ani>Az$WCyXMPS`wXA?!YBAMUt-M{^h|m6oJ(Dl7=1YwoCO-284*8-icFmWuaE1x` z7X#yr5b$ZhgSgfszhC0>Fo!emn_&;%SDoqX;e9jD8}vT{{%5;SV%6vOyA9h@%$q7@K_G-xBZQ6id8|z|nXIqYRvh2OQ#^;p`zEw8#(b zWA5bJc-XTQOFZt08jte>I1>*z#M|ubAs)2I5AhhAd>apYm|}^?JwoFhgfeg@9&m`a z$=O3Z?uYc({$yq{HN_H-b6n%iMHx5~4>-hI?d%~Q zw8#(f7@K?>Z%c|L9_P5mn~gGXCLVBzx60W=JZO<0;xRV)Hs0wemUx`w8gC}bz?pc! zA>I?6J;Z|+`5_)-lW*f~OtHk{9M^a=PzKJ#0}k;{a`q4pTI7d#j7`3c_oNg{JkD{A zHyvf*Og!Ka?+MNx;z5i25Rb9RxA9I*vBX;kj>c<588{OUIK=C7_7D$RqX zIjvaUPp>h2`U0z+zuzYg@29yQh+B};Z}ACg1LmyqMeh{U>G~%ZSnZ-m`*QgI2A`bo z#9lA?7s{BE$``$U)Tti1z-kvg;GoC(OssnUL>Y5V`J#6+>Qs+hV6}@L?V2CwE3xXa zKQO11FM21UPW8wIR=eoYu6mr0#H#mqlrd+NFM21S?g;b`_cC&U)y}`KKpgZq--x|l zLxM8qgz`nN7j>#fF0k4~k9N(E^NCpV;~4j(e9`Mho$8SboYA9Q_25f;(0c^su9Po& zov2eia)C2?w5uL`X%Bi2qui15MXw!osz)xc>Lp)rIOxHb_MrDul-p9i=(VCw^~eRz z=+UnE!I$=+_hXb-qrsi?)Tp;3&#G@ z$h~7Ju49cIWx;Ac4tR;t`xNkFa6K0D?+^H-9`P~2f5a#KiH`>U6F%Wftob(-fzh_` z{Sa{exKT z|Mb}E9Tf42mH!X$i7kJT!5k0ZkUz=|3t`v%6@Duv|E2-_5VBgXmgl9 zY(KHipBH+pdb=GC{ZIaE@U{OHEB{7s*Z3S?@-;r^5Be;$m*Wc@^x2;?jlN>5PrK?< zkJ$Dv`ZS{t9Q4`WGmO4st53VtC)WHQhCli|qYoVPIUduEzGACSyVWOFeU8sGU|ruR z3%zTA+EtI^103R$k9|Chk7DKD=0PseFOhv&Tj9QwdMfI0 z-w&Ai{oddYIGms@g?5zLCffacp|8}b9X8^ihxsDd%oo8ofrCple{1-=!3Pfg&ob?P zzDTU!7(Vm;wZY7nSn~syIQbP~wYg801NOE|zOZNdlUVbm#v>*k^92t1vP`??%UHiO zeCGQLTt7!Xt?rXJ#Ap7*nm>HW4Seq#_+!qN$rt>PFJnAx^qDVk$d_f>FF`&ye@LvK z89wvU|T}*U>*K z-6wGvzZ;xA|5DhoR}@wNf5Y(U3!LEt2mW%$4f@_U@L%BUnfZZSCSjf5%n^N@yB@jx z6>*q9@m%cpGx7OM;IA6|9FIMpdC;ER2mUmC!Z-N}_`2V)y}-$rpx@#?i9>rHkGd~M zeBi*RFL2-=?`%Pz?S*#Wd*4iZVV{Jx{mcntuI=Z$eZjW<_oEK`S%LGk5oL=T91imf zb3yFicISQ0J>rn>6FlyR-km68Zi)S5;5$&p+~PBA=zsP%vGzCH3LN^I^Y!ya|1gL1 z=OfkW=(meJJ`ego0KO3Ta}ggn@Jr5~SN_GopN;syfj{W%fxjL2GZ7y+@Y%n_sy_sL zui?)Iz9+@Wr-472Vp-pxh%oM*+t>i<-PQ4FC_yfSI2U|jH^@vpuS_$S^ zuu~87EQ8+cZA;sta`8| z#8!`3^`Mo!)7Yu^jtIXUSoL5_h^-#6>Om{H&Dg2;wg|r!SoL5_h^-#6>Om{H)!3=` zmI%KYSoL5_h^-#6>Om`cld)6pmI%KQSoL5_h^-#6>Om`cgRxWZ<_NzYSoL5_h^-#6 z>Om{vUaNNM-5BB50jnNt39<6Ieu-5NTFGmToqDf{@T-AU54MEZ>Jh6Rw31gDJM~@} z;a32w9&8D*)gx9tXeBQ!Y>6@J=hXrt4FMQ&`Mrn?9_X4gl_;=J=hXrt4FMQ z&`Mrp?9_W_ zfUk`(?vbh|_Gjb%QpNos!JhwE@GX8^gqKEmnZtVjO|ArfR;r(y4g5^txzL}9@?Km| zPwf)_nh0MV;VVpjOW<$uF%dpC!pAur;xoU?Q+>&AKd{XYIR?BB{5=tW!eEYHJ;LJ= zu0{B=2#-Y=W1-_C_wUgNk3@J^gm(bX$5{RlxxtnIhyNc@$z%Qh5nbxB{{M*1c39&l zJAnryeP{&xlVQI&!WTvO!U$gw;qxPWUW#RW&M=t$y(Pk%BfK%iNf-D}itwosUSsfD z@PU(c=)WK1^9Wo|#HIg#m=hfi?eF(?|NoN^U-I?;C((&Ad;*{O^cvg;+--0VFnlun zcGR^ZpP%5f0~c_xFLyX8`|~r$ntYE7heY_$2p<;V!z0Z0TfHMAd{l%V6X9Znj|N^D zk?DJ>e87%*A4vRS^7XLKD4@dYH5q>1XzmD*4BmDaa|1rXUj__X`&i~!Dr+}t1 z-+&t;3_`{}EyB|yjQc`{KP$p>B0Mj`3nIKI!dzeMU!8AlD6fddt0lrqQ!M+{<0AZ6 zVB{^&8?YtB_I^hEIn3{G!3M1adv>rhpJOA8JwNEdmJnM#V%6jRk9$V2Qx9`6gNwkL zALl2r)gx9t-hVL1gPnR<0~w4p67;w}h^-#6>T$hbjRpJtz*vLf`TGuFtkDd{8qQ#> z@eDpV!pJdWKPbYO0~!0m2xHDeW&jr@@o`(Eq0i#at|2z)>CpZffeunxR z9nRyPS@;*$$#*0Cy$C}`RM{-e$I*Od4saBxWu|3q2G3;o64xY+&@?E5Q6F72kjG8p}p!RRl+zP}_F_=o=jH{j4;R{;MBmu)ZcAJFE{yHDCf`>{{w z{uuFzl}}&b!2hhX1-s{lc|uid~n6NUIUc>HU$`O_%lllIX5dw_p~%l0p^@~H(J_@8pNVE5eM&;DWz zJHMvF+F#7+SGY7j`|A;0wm&Rpe^|`^01oZn>+K8iS;d9@Px#ln{Y!GA|9s#d;*+s~ z^W(tWb3W-YeC2-i3E*Gi(tLi3@-HI%^9b|4Wcj>rT1*YaccA^7 zzZ2na1FQZkQ6~1k_mVQP>c0ZzZ{gDToDamBFJloapY8u9F3TrY{&&6I^1p#P+aJJT z{67Sn#UGCFM}WU>{J)6u*CPDY2!AEQUk28EnG3Pz%f2JleA%Cjq4{z@1`hdt5cqy$ z$9au7*zb(+2Y|nTOXJ_?vBu|E(5~^>zueO_{v8en{r5+hcJ9Hd$FU;T@#lOd*7zJ> zVjGWpvW*8E;=LC(i{BSv&c}Okjbc6HzMK2B$2LCg8vm)@ZsXIg`ExE&!{!4V@_Dzj z2mBu3dvMwK#5O*$jZeHjJ->>-#^?Oto}~WVf4L{AopX^`?d)G-)mOgN|G3Hjo!|mz z+DCiU?|<)t?PIt!9_Ko->ao9xwSPDscjHn%*8;KS6I=dWz}jCEC==WE5Nmrl--uO@ z^OIQPajkt6m+F%b9LDF?2){MLZ;SA45q^7w-vP`$!Nvm)@!kR(_Yi9b4)!<0#y!W{ zfrI@`uyKuBJ8-by0vp$~wF3wH8)4%fVC}%c{s!3CM{4K#1rGL`fw|_i|G8d?wZFMn z5!>aSe*uU7dJSwAzc#|m&)QMu@1#{fM?102 zpV;P4togsu^KJgLYyQmr)wnd@*$#(%Uln0;Uye)17(&?I2`833nR?- zJ_DEb$EQ$!Ixd~BPxV;s8$8y0l&|r*p6Rdo-GlPeaH&80>l$2EpIGhGCszHBd93L@S0disxHyl$9ATb6Xt(Rj;#-_O(;nCZ-r@bnF@OFAo##aO+6Z(0QD57CU4%J* zufR3euP^qW#f%3W+Vh17-{-My5BZAOp38A*|FOUK8@+Et_?sT9KldN<6;ls5 zuBT6UyIn7s%Nahg@;M&FmS2nb#LDM*5?lUdhQAnPV&&iMvE`2$`&}p#tNnJ5wLjkn zJd8`ncLe22aOr->^+c?8?jOY3Kh!2xeTeH@z>@Q-~#dL~~n_Zo|NFFFC2j{gdj`y$*6toin! z+#TUggE=4CaWy0UEPT>Nto|JycfsC-GPP(|%vf!>lux~75nc*B-=BABBli6KE{F4% zLO+jk(c?>i3n(9r>v6cO{$qhvk2Yef2ORW{a`wE{J0|7x`(25l`b#`M7V&4Ge4NJ` zkG@4*%6|;XjA8MSz&buhpnQ0Q4>kP5PzKJQk9gDZxzpqG&|g0Q-T{1w;d4D7WH9qz z5aBt%i=c-w6)y2YT$oci#K;kAd+1B7`OZU`^FZ6fcry)VJZk8Cp^aGi?6YYRZZvoW z%EYZ`-%s(`hU>eyR^e*uN3Xj-`9XX#=X{~QZ>(I{RW1z`>ZJ;9m3ek|LjuRVB>K@i zU%@}G1ZIPq3~q|BBxdZKV3ywyVL)ql|Kp9+zv1tZ{jU-JbAE1S09<1!Bl*fzpUFBkRv|b&q?j)?0 zFPo^;%0tEN`--LFwteG6`$mgnwdy71!8*pc;m2@4u+ZmUEg}2;CqOr@V~^QYuaBLu za^;>qdsd8BMoOdg%Ha5lYHjCA7i@Xk3QPg{xA_k&&JG`^6w6L+BJL+_`tLVs06JvkM95;nD2$+n(M!~-xb`yqkmw& z>#i1`{xjSs+W!qy9GI{6dzf1C@8chs?_klz4Rb^OE&K!X9TL}E|GDlHIe!VI1M~H{ z8sGa5*!PkLC1ARg8oqGAzBt6vf&Vmo4F5SWU+>d@+ST6K{Tsyn z&+k`!BMMFZi#*IVypC8AV!bx9zb3N38o2nF%P((j>AJGz^41kyEgkr5Ye5O0?ecjg zbY2DC;~u-WGPHl`+11*mYpSE=mf{w-kFsLbNOfYg-coE`(Tbx}!^=Q_^7%sF>UUtW zDx*8GQ~KfsLNct?FMI z5`ENeEiR8*x~#a8{f(oo{L`QZFJ4=#Rcqrb-N!l%$PiP7c>-~cJYs3vayI0QiPCVT zzHiy_w&fsQ22y+5DflMdLobffc4H$gls9$?P>;+pH< z<~|V@^Xve9x85aA{hW#NNB$A41M4f@^aqRT+l9h^=X=gw>f3R^zIepqpZ=kue4@R4 z_&Bh*Prh1w`p>*eKH<9pg#+_Fw_kkvH+Wa~4@&Wur}8h4v^;*QJ-cnn+ID=?^Eb#e z76!^SY(Vl)Wi%ExRcm;*lYf_@kniCZk^Ba%d_x;rDF2)Sis)qiYXiAyjofai^pk){ z`w>v{4BB>7Yl9U3K57nL%$iNrq4MzR>gbNj&WW0AQZPRN^UUV8d&kN(?1rOtRDBm! zP5sz7-5>sKY8}gT=*R1{@ z+Ep)&?(z-08x3o38(4MvsZ+LW7oL!7+pEaE2&bJG3fDAb@zMXacOmGL_z0vPdmNIO zGKV45wDIqQ*2)#zHvH$Y&ouo#|7+8s=9~U*NFB2T8BE#qOw@P&uTjf;$9&XxKx+Cl zw>UA8Zv%YwD|69$+EuRX+*S9Rh1oyG>*X;X(I#8!#gmFWUH%sv3{GzK;>jl!Rn#4V zU1)z+ThYq>=WWRG%zZWzWS05enG8Nb{2L$DwVsZeb&^qf3q}cdiLI+PZCNT&IZ8h57EMtD z>kTA3Twq7zB|_uHiLpJU+K?YwWEHV?RfmVhi-Xls1RUjSGWn+m-f>%w?Td$R@(Asz z4Apl{u71=hP35TvE}hnF4)1Ac-!Chkcv4Zqxv^@)e05K7Zl>RYKD^@cEoW}rwsxs> zUW;Q#)0}Q%#`9^hL_JrU+&$ZU)q$KPa0FOdYAJ4)slmUb$8+VwRin*pI4~Vrk`eH<|WS#><>aFNgnF^}sVUOZC4w zsmkjJCf!nW2Ufn#F?qAvO|iWPmiJ5GzoUHMc^}9UK!=sERd06-zvPzvcHZ7zjA*SZ zH{l#09q+ehyBfwvO2flg3piMpWQA{M@4o2&RF)@CmE{W&ZRLthtIqkiSq_(KJ0~Ui ze7L>jhFsd0r&O!M<!Hb;3cd-cO-ym)#UoM)_o@G4%RzrLgzIi6>-t=!(1X__ zxihwGSXUf4b?xcJwcK@`QwzV6K_W#KBy!QupyelX3O%YageM?;$idroVb2&UuA3Mg zl=n{?E8A5_ToT226mPrW_c34GWPJdC-tftb zaHK1_<14*7zS6_=a641T#J5ZFXmJU~X}eojwd$Vn&;{BO*J*9u&!KjU_GN7QXbaE# zKKdvh_{S^z%S)x-T8eGUyaFcsC=V^}6}8Ki1GbMIuE*P2r2j7P9@(Se%HxaM%B9-i zuJj~w{K`}Y@)MK~N^KX&icJ|ZI~Yt`!HR5*K+$Hif`9hxstjZJvF+jrfxTd&c(RXF zK@%^)i-qb~HWIxmj8-W=J`<4!9y~?Tx0H4K;~kb~97wM005c7MzF1$bo9W1x(nFPCY-HGl_Am+W5eREch^$HjJGh z6CzAC*6Kc_!cicALjx|2gW&0UR!OObid3QDBAJp}{&1tcTy6(AAtq{_pHb z|NE{I*0mcO={mDHtwY0?PPDi+&{Axd?@yZo;(6u|{0iwRAx_pT5A;&RW@f;y5 z6&ZkwlF~J|?w&Pp8R>|#X1Ucm3e{w(|nYM!xbVsB-*BBu)Z zJJHh`&ngY?#*I10x6B1x{KJ>QNrL}857+Ej?ryzp-w0lAqT(5};*!50&?r9)0=ODi zV}bV*6rO^s377u49ED)Si6#Ym49M>UI0RRI`uN0l{)DA*yuNR^+_HnCym zsipBX*m4K(ZWp*9mCYOE&B0)KGZM-*vM!mqrc&BjD~&8~UxByyxoNCyT)du%Z(|$q z_2>@VUDo29$o5Yc`>d$8nYGiK5K|lhnnI1Jpk@{>j(W5IB`SaUMQnfhMO^UqX(;jQ69>ls@{93w)bRs1`B50S`sXmFoNMym z2lIq_IBO1Dkbd8wU-Y6{dhhVUKxrqLuG{9U8XBpLZWuqSB43W9-gVbJU%#$8I5Ey+ z9W0MBs?wWDv;Cb?ZYEP{UgYXlS4T%N$@rDG8(tan=FsGYLY|A^I2GTjLw};fz6sE19zm4+DepHHV)}Gw9GXA4-#APBr(AAU&RY^QAI7_uPEU*GpVEb4Z9M z;-RdZvtYycmSMah@zJX_nYjzZHX~Gmd5~1iT2(9i+A{Z!xl+sYSK$u4$2uGf^E^8G z>9*M8g&r^Rc)rIAfXO-3V@_4#gFWW*C$@ZY=6XA05zq3N+W_$lkGUN5&pH&QHJ0(< zfybddzMYq!d2n8H5iFi^J};OwpATWWdh6cizl$GwOLb7;CURHS(yneYj##VfoBVG$_ZSAL_C3rXZr~?2W4J% z0utK^PHZPEC%xqp>jbAZv0X5L{F5)?KMPri_Gi>wjHS(8S<{(0;cl~! zGAVeBV4pqO{SIdS$zO#39E>ZzzvXLX+^OXs4d=K2+(UTH&N%~*3sc?O{x9{Wbiwqd zt>qo%+V}upzx==JU$?%Z6N}sw9(Bzh97GwAWn?8h*TTX1{!*>(-<2-}zp2m-m&wp)q&PhVgN{I>a|tqgaJF1?ATsu;i1S zRR6hGt0W&==g-5P9pkNcIT7sDm>O@q z`H&NzxOZf@xEre!N5+$u;5lIlUKk8khcIp@Eje>w-SXZg{Gx4is5Fcpke;+;w7TSp zC!cuqn$4>R&fT)MIKF#lam$&fY}~NAxMcatm1lRXUb%A3z?$N=v(^{!Gy0V)*Pgzl zxWxS6eou$|(tdrdG`0&ryI%?7N)q9;5@Ky_D~9SrOHMwK!boj&{G=(o+gn>($zD>d zBJ~}^)jcOI+3il&OKfA>AhZ+d<6-5bC3sdDKH(U6;?ENZmRHA0gZNqH32jdpuh*)V zmQNT(6X7yes_!ZeowQ`6*tw#;yRWaWyS;@EL7lyQ9i5%U<*h3^d)m5t`g&Sgi>r$r zD|)(m+WXpj$?0fo@9XXBMrC(zM|($iA1k|BdwSbCdQjQb(+!m_R`zssbhfgtv%9ag zv$KCatt*5=UqqhTS1M9Z+jcuiV#8`y`6}IioW*t-tJa1yIXsD+IrermUmJK zpa+$mU2WYRty0;BAAR+TCMw!H*%O^B+R$1wAI!Ec^iBt&qo>;1TKiDhwxX}My}i8; z(NWpn3H@$V_H_5Qc6LZzM@Mg8R|o34x;lD0nI?#x9T*pScXV}ix3>Grp02K5)U~0v z+PXs>TRzNj=;-V2gaXE)wWSB+(A(47*H#=XF7H~=+ErfOjn^n`U9BB`ZGC)y(b0yX zK~;NiFM6bxRefDOs77698#=MGopoqW9|jJt?Oh%1-JPgw>*?x*4h9@8YH#cA?Lj35 zu&=w7vtUJgUu#!;PY1nw+gsZi1hRdt)NAkRgd~5L-P+UDhPiuJ>yREBTd^5dQPve9qWgBt$nR+T_V`li3QNXj=~Ukb)r8= z#q93D%t38y4|gmSSHAaO_NQay_Hj+6Q#AayH~V3 z+t93D@x(0Y5;d$dtUwtvEb|U=l}YKQNn39_l1GS+*6vQ(Q_v2~&(0oJVkXFvM>DYy zIeVCKcUup}6@gjm^UcEY>*&T(z~0f--rgZ;`(8k0S63_cs6KILOWd?=?P~4q#`|M- zcuyzRG?<<3*z+*8m{NCpM{6f1IQkv?S(~`GcJ{XQG7yYth)W3@2POl(F;lP-DB0HA z!zwH>PD;08JCQjzHkqH;ey}Dxy84Q}D>^&-;Lr=h{w2kgC!e@-Cob&qC*zLACv5&O zb#MLu8L-yV1#)DhK_f5V)uiBoLM`CXObT#(0=Pb+1UMGOtOZn~u7+*(D|jSPA5}Sc z8=|a?dukqVHZVs4IOYYan}Doj;06L?flUd-SPAViHy8a%h4AOc7872ib%m_$=`WnovKmrH=RC@8^ literal 71717 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, defaultSelected, getClass()); + return new Quad>(button, uri, defaultSelected, getClass()); } @Override @@ -129,6 +131,12 @@ public class ValveOrientationGroup extends WidgetImpl { if(graph.hasStatement(symbol, sr.HasValveOrientation)) graph.deny(symbol, sr.HasValveOrientation); graph.claim(symbol, sr.HasValveOrientation, graph.getResource(uri)); + + if(graph.hasStatement(symbol, sr.HasTextLocation)) + graph.deny(symbol, sr.HasTextLocation); + if(sr.Vertical.equals(graph.getResource(uri))) + graph.claim(symbol, sr.HasTextLocation, sr.Right); + } } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ValveTextLocationGroup.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ValveTextLocationGroup.java new file mode 100644 index 00000000..04252f0a --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ValveTextLocationGroup.java @@ -0,0 +1,150 @@ +/******************************************************************************* + * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets; + +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.simantics.browsing.ui.swt.widgets.Button; +import org.simantics.browsing.ui.swt.widgets.WidgetImpl; +import org.simantics.browsing.ui.swt.widgets.impl.ReadFactoryImpl; +import org.simantics.browsing.ui.swt.widgets.impl.SelectionListenerImpl; +import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.management.ISessionContext; +import org.simantics.modeling.ModelingResources; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.utils.datastructures.Quad; + +public class ValveTextLocationGroup extends WidgetImpl { + + Group group; + Button top, bottom, left, right; + + public ValveTextLocationGroup(Composite parent, ISessionContext context, WidgetSupport support, int style) { + super(support); + + group = new Group(parent, SWT.NONE); + group.setText("Text location"); + GridDataFactory.fillDefaults().applyTo(group); + GridLayoutFactory.fillDefaults().margins(3, 3).applyTo(group); + + top = new Button(group, support, SWT.RADIO); + top.setText("Top"); + top.setSelectionFactory(new LocationSelectionFactory(top, SysdynResource.URIs.Top)); + top.addSelectionListener(new LocationSelectionListener(context, SysdynResource.URIs.Top)); + + bottom = new Button(group, support, SWT.RADIO); + bottom.setText("Bottom"); + bottom.setSelectionFactory(new LocationSelectionFactory(bottom, SysdynResource.URIs.Bottom, true)); + bottom.addSelectionListener(new LocationSelectionListener(context, SysdynResource.URIs.Bottom)); + + left = new Button(group, support, SWT.RADIO); + left.setText("Left"); + left.setSelectionFactory(new LocationSelectionFactory(left, SysdynResource.URIs.Left)); + left.addSelectionListener(new LocationSelectionListener(context, SysdynResource.URIs.Left)); + + right = new Button(group, support, SWT.RADIO); + right.setText("Right"); + right.setSelectionFactory(new LocationSelectionFactory(right, SysdynResource.URIs.Right)); + right.addSelectionListener(new LocationSelectionListener(context, SysdynResource.URIs.Right)); + + } + + @Override + public void setInput(ISessionContext context, Object input) { + // TODO Auto-generated method stub + + } + + @Override + public Control getControl() { + return this.group; + } + + + private class LocationSelectionFactory extends ReadFactoryImpl { + + boolean defaultSelected; + String uri; + Button button; + + public LocationSelectionFactory(Button button, String uri) { + this(button, uri, false); + } + + public LocationSelectionFactory(Button button, String uri, boolean defaultSelected) { + this.uri = uri; + this.defaultSelected = defaultSelected; + this.button = button; + } + + public Object getIdentity(Object inputContents) { + return new Quad>(button, uri, defaultSelected, getClass()); + } + + @Override + public Boolean perform(ReadGraph graph, Resource valve) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + ModelingResources mr = ModelingResources.getInstance(graph); + if(!graph.isInstanceOf(valve, sr.Valve)) + return Boolean.FALSE; + + Resource symbol = graph.getPossibleObject(valve, mr.ComponentToElement); + if(symbol == null) + return Boolean.FALSE; + + Resource location = graph.getPossibleObject(symbol, sr.HasTextLocation); + + if(location == null) + return defaultSelected; + + return location.equals(graph.getResource(uri)); + } + + } + + + private class LocationSelectionListener extends SelectionListenerImpl { + + String uri; + + public LocationSelectionListener(ISessionContext context, String uri) { + super(context); + this.uri = uri; + } + + @Override + public void apply(WriteGraph graph, Resource valve) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + ModelingResources mr = ModelingResources.getInstance(graph); + if(!graph.isInstanceOf(valve, sr.Valve)) + return; + + Resource symbol = graph.getPossibleObject(valve, mr.ComponentToElement); + if(symbol == null) + return; + + if(graph.hasStatement(symbol, sr.HasTextLocation)) + graph.deny(symbol, sr.HasTextLocation); + graph.claim(symbol, sr.HasTextLocation, graph.getResource(uri)); + } + + } + +} -- 2.47.1