From 7c7b4b0636cbb5fdb2ae67658ec9709be1c58812 Mon Sep 17 00:00:00 2001 From: akl Date: Tue, 9 Jul 2013 08:32:08 +0000 Subject: [PATCH] 0021708: [CEA 586] Object browser sort only children: + Add Use Case browser data tree management + Add "Sort children" contextual menu popup item + Update user documentation --- doc/salome/gui/SMESH/images/smesh_sort.png | Bin 0 -> 14446 bytes .../input/arranging_study_objects_page.doc | 11 ++++ doc/salome/gui/SMESH/input/index.doc | 3 + idl/SMESH_Gen.idl | 14 +++++ src/SMESHGUI/SMESHGUI.cxx | 30 ++++++++++ src/SMESHGUI/SMESHGUI_Selection.cxx | 47 ++++++++++++++++ src/SMESHGUI/SMESHGUI_Selection.h | 3 + src/SMESHGUI/SMESH_msg_en.ts | 8 +++ src/SMESHGUI/SMESH_msg_fr.ts | 8 +++ src/SMESH_I/SMESH_Gen_i.cxx | 52 ++++++++++++++++++ src/SMESH_I/SMESH_Gen_i.hxx | 5 ++ src/SMESH_I/SMESH_Gen_i_1.cxx | 13 +++++ 12 files changed, 194 insertions(+) create mode 100644 doc/salome/gui/SMESH/images/smesh_sort.png create mode 100644 doc/salome/gui/SMESH/input/arranging_study_objects_page.doc diff --git a/doc/salome/gui/SMESH/images/smesh_sort.png b/doc/salome/gui/SMESH/images/smesh_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..0b00568c3a3cae65f39cc8207aa0be22694a85e2 GIT binary patch literal 14446 zcma*O1yCGO8znlp26uM}9tf_3y9NjZPk<2IT?f|?+$C6WcZcBa!QI{cHUGc+cDG*D z)}xpPdYIdN@BQqY^L40-lJq-dB4iK<^iEbrLJb6hG6Y`Ki15G})Y8Q$;0Kh0nlu_7Dthze$e%K}BJ}TdH!FjH- zeH9LjNcoc%3Y3zXx_}MoAq2keF76T;m>DD#ts>Vx1R%Wo>ko%A|9Kt95ajAJ_jvRU zjJS^kHG6ms{6^J3Puv$&^CC^|gQG?`GBVJ=xV(*VoM!SS}cO~Qfoh<;>-j)euyoyxN3wEViDGKeVU`Rhuy zLZ|fUyo;qnyqxsl{;BsT+tUdMjN0m4xW;e)Q!UCxsP{lViGP) zp6_v8$n1heZO+W}AURtawBX)>7_aw6!|JIY?7Yi@O3cQnS3SLk0eCuS+4Pj#YP~Da zf2d5qwQ1<$pm5$e$(DP zNre1O#*S{is1x!ud1z?p^1;rtkjg#Si3(K=c-WTHrT*2E#|7VC2%rvsdBTnpSa+bLie?V(#- zPJ?XJIqud)S`7s7?;wgE<91_8l-2KjQKXk46}q0$qyl&o6Ic@8ph=3Y$C~xpa+HJR zw;*r-cVg?Wa@XPV@64#XxxpZD2rg18Ks*?|vinnzW?1#*E<LG|2(uJN~myD4*LN}1?eRFSicXT-ho9Lokyv((3p@RAGIkRF{RNo(sczJ*W0CQ0IqS+LFnb%J(^F$Fnmo_!7n<|H z>7V@(4 zz3$kms(^|fU^4IKg?*fmHKNjlW7X)f+9?sUC(vKIP*)y*d8`CCi{O0eTXoE#fet#V}!Ruf; zhVbQzwR~N_NVX2!U2W+=qfnxQHY2C47Cmv0gasKiK&u`M|Ar(e(V7Er9|JXNqK| zgQ4gk5@1)a35#0)*B|_b$hKe9R8&Bq!qU=X?qwGu%1-377Prfom~lqx*SkIu!6}9g zBdoPK10T|0bn?G&xk!qorl{@tu&q#7Ha6CJ=+``wnECkqQ`6%~ zGrGH1!Csk%b-Gzf8b;67z^`UcpU2~Rp{W(`$K#6nqSDfL?T^c+wy)2(xivK!UeKPq z=`I^%J};bHMDJqN)r@|$`zIW*#bo{jsc*VD&SS6H^4g9G-L5T|W%jmtJ+j+x$skuC z!`@97sWUJ#b{44@G+n;}N9Z7ir_lOwm(vTSbpF7}Nwt?*j`tnb89py=pbm8JGng^1 zR(;b@)%2OobEu%^QD z^59-$F-669a`N(a&)0KIE5SpFY`1J3&eC&z2JKb*xL3!E_{puDMlSP}JMqf4=i$c{ z27I9AZn)z65C8rx3Lbtg)qL9FX%~}}3|uWJf3OaKAh?M5xIM|oB_y~{M!DaeJBEyI|@wa;)VBqdTQ?n~zg`X>vpY2|^#U z{IfZBW!kDsE9MV&*d1NpNwxVK$+Hr&vtvp_W4><7YgD~(zF&}OygQoS@NI)7>~^zU z^9eaVKHiV?tYo3u_F_x+=+#ps$bg50I~7;<`#taV0vv(+w$UAAkz?aPke38a!?LWy z4+f#)JTH=6ci6GxJ(AcRitHDGEgcd*_uoSw=Fl3s%@K}t@q7-GG}c(V+=0F7Fk}aT zX3Gsulj(wW&4&MOAB6Ls?bBy`*R8j{W*V+!>JpRt#{Uxkz_xAHAL=p?NiC;6$?7oKG$C2?f_+7DBC z^Jg3I1d&o(w{jBhgVzM?XN+II+ldy>WZB4JzdYjm^zBa-R2ppt`TFp`FjBL11f!96 z)ryzlzT-fB9sCZ<)B(%@FSzA}xjXpX=|y^vKH^3%z5y&~I9*_lbHtE6tF=|nc>!jq zOv=KY|DvioCLby?eBM8viV6<~w90>FtdCo|})|a!-Z%b;e$HLk{YM5aCF`>(%d> zY{JQhoX_~H3iOfwT)p6b3_qo8N?lFO_I9cHXG-jQqCXg$R|D93ZDXzVoMm6?ENH`u zi|xLuOD5i1KBp20yF_)e zQ`UUawP@2G+5WW6HhF-(H9~gMeC-L1U9ot~o;p&oV98E^YRjJvd^hZ*{HQP+Ba;ly zSM^1r6bq&}X}MGyV|>Xp*{wd^jJ&wK;IQ1Q$TI0b3x)yiv#_{0Kq}X-(@@mj{sS`}%D=_M ziRtMryEfo$=VsFH-@gNMIH2noA~ztrS!Kssq<}!geVT=1_hz*8;XuRp(R>--+|6#J z#7zQp{hq779pVkAabOSWAGu?m6g9ep3d^&8{D|vz??%9H$sh+G2Z_75SX_PKe*gYG zyY&+9TMSn!zy_{{7v75<_BKbQg6@~+$4c9Eu%x=BGv?aoYEz@xlFvr3n0c0OC64RE zenDd&HWrG3RwT+cq9Xp@!= zDvn{{w;>;bOj=QV$PltnZALB7tnSFu-n76uGRN`gRLxkF#BKzA<5`7Zm0#wPoR^X%Ou%x61s9BmDP9q{vBZxjCOFoC= zEND(6+A^Tc8&?`$2OXPR)f+Ee(-Js6Bht{)isepZH8v8SwzU&~`WSh4a;2-H9dk-( z$pUwK9KP%<6Q4a{e#c9I6-6L{Z&W(J+)aZhKs*B%BP-3r9#nqKlHnA+q__e@AlNc9QBKybPyXd%&eim+Q5*#tTS)z?s~+^ z4dH%7CJkkK#zhm``ntOo_1T4jhra&s2{gBc$_W3qAE21n6#u3s{%H1SM)H8{?jZNH zG8Lg5(iz0F$vk;n?CsKca+7Hmtr8jX2pn7BHlg@3z$-| z)lX%&X`ZK;rH}w2z?#78?G@lUPyKiP{07a5&yd3}o@yLaVYSFzQ_Hev^Q7xZ}*E;GS<)hyEztNKJ?oIRwxP#x@%h%jcbh7Tj z{zs?H+Mlg|;{LM>9HgMphFWRL3&?{Qbwz z!{^8&=sRN+1uJTRL&*&Hk zwk3P)wK=toWJUX}F|i4uSHmRpM$*B#aNptAF1CmCP8@$$!#tcA{#;sbaQKzs+%eV8 zNg4iqfq^Sv_{0b5Sl4hd@p zAM|FRy7~8#?ni-)K0aycsXd&( z?IvM?H>z!I-n5112zUad&V8YQ8@;TFC|bC9T|Y%If`%<|q6i|<4fLajTd)Y&(nOv0 zg;UC=vskDxpM#?$%e#u#ENlX&_E8!1jqN^Fj)%tamZ=$~sDKesMPdxW=yGgh7!q;n z-p3RKR{JuiQ|O`aF#Kw@g)cQ&EPpu*$6As1`P>NFwlHZ3)P7D15NkOD@vxhcQ3ODs zW!j$Fmfq~6p9UF_iV*O@(3Dp=R#*YhBoXZ2xridjMacSQ%ewtGgMWT7#L!V9hjjjf zJiWN>vDfEh*TEsl4%qTp@@n1l#|r376l<{!px^wWGVL6_O{c&0$Z~U}rqS5aXQEW4 z=}-$!2{mFTV7I!U`Q3I)ChWE;8FwWocKYHq(eC4ObufccTU*Q9bYRCd%|kKpP1>%# zSVdDaC@n3mVHt_Qn}TK(PP=Fc9SI3(Z?#>7PB8@%8;ey_Q$xYSgD)v5DI+T@rml`H zl_nfHRiNB$U7y>~KtL@Of#`;6TZ7D&&OwP|D8@q)!SI8N==bm6h8@08{bOTq=?BOZ zfa5swliE8tyrse)WsUGa3{Or@-dk?w!NSJgJn1Vq!vaHTE@1*6rlF&w;^eGe6l~Rx zUTO8925JaVvq3(6Un`4G%PO0zT838&c zd~=t$;#;5f(?w!CYB-|0ClY06&H?18ZR&T!MqM4Z<*ODgogzszrFc-*L%NHh>?=IH z(i6u?lMSX6YCHUtO(tYx!Y!`MlU4>bk|_eqvV`VS&%l zVsN1ZeD*ZX%5JYbT! zu0eU8bs~h#b{hEKhz?DjV}TJ!W|BrsxoYdEbG!X&HY(@uSB4mdEc@2H_wS}A8Ew62 z?IrK`83_5H8XFtO&AH62tlmP@SA1r=1Y^5((Xp@8ka4J6f)jP;(?lBrFf(H_kbC2Y zY72j`XZPla-(<<&&7H7u75AzRI)MA3X`388^ouE>=t-63h@qAX-W*zt$#&1|D zvA;6qh8c~)Z#YA-gXs0E5~Vj{XlSU?s2g4*{k>#)3l_;jD_rtFDH0)f9P%R(gw$T> z;>LGHe9x-W^!Rysc?2K6hA`6;$*DR2bwr}%Aod4p!EuXPbE_u*x>-7cXrBc_qE8Qet7CWC|U|{Ijo5?d0?^Hl2nsK z><)U@?KGzs40yHdrWX=$T@qNJR89K$Lla*NaG=`k$i$$aOC(|la3MU(jEsuxo908; zTXIUrjz8Gs$k=chJ@`oHljAC+XAy*)Su++!^^28Oi*+$@U}kA{q<1SVU}H63m*anM zxf3CP&j2;a=TYCS3+}hpeMekbjLiPFty^1JfBqnsmX-oepxt0g$k z>4+x0*WYgQFBItJXdz%EdNnEmjd;-K;=Q%|U9I(iOPAgI(!V_?eh2j221?eED&45| z4?i(J@vVI-)-*bpE_#cH6XuW^3rTr-lq+{3pngtMq6ZlQZ_QVILjmqTST$FwSA+f| z56@=My^pl2D&}aW2zu@W!NqqgW*TR7v!xUcJFHu@yAhsM2^}3Gcr+43(A`EjTZO}} z($Q)=IZ%Uhr@rG(9jR{VUhg@a%dS^eGt}`UY6k@Fb7A6Yp+389v2m}1ID)0SQL$?91uWDBEb zsnMbG+Ynw0KzEHFUiS|VOGrtL5$vt@eW2?=l;^T;4q4FIh_sW zhM4<+yY+_0k>lStWv`5{^N^T+MBAEd#}kD5d8y{T2Z8wAPT*Yk7Yw_gaYTMpnxAhCBlr}D&c1v7N~vFm8_$2o-V z#l(Z$1uFN1IJ&XU&E*tN+~G4A7~SYA%gjR(Zg~vMQ#%umtpnPxy%q@y$$-E+1tr}i z*lv96-55Ch*j!%NxOE7*95g5;L9jhGFZf(p(Pw2?0Sjp)`aOKHZ) zZ7>`vXIEsOW|`#qg60ys)VTV?N_xd$NNDh)fKK^?jB3sFG2u9 zi(?0-Lx-PnFL<@p0KAPfg5ubzWWKDzc6VP)4U`o8YlRK~;f%~q%1-$|Ru?#FXs22B zC3Jfz(LtF8V5bpC_AdZRwZga;nOVO@JN`Le)wWQZ;oEn2*Z!0s@f}1s-W!q%&Bc3c zh&y(KR4!7pOivY}TYaRlJQZ9YR4_#Ykms#UmPg z0lF^LoGjEI-q(4>pME>_8J+=iU4hXYHzT&t>mDk(68=O+uH#SdvfF+ZlA(VY- z^yf4i&C1_7TojWYbwl;#f|@nwB7-`AIT{-oNIta@03SY-(a*`kzh_ffP&?eQ4)!3t zH9P&ja`|M%Gk){L!la4zwwFUVLXBx4_A+97@WBZ+Le58p8QeF{xrpQd{v|#pi#OHr- z=lCj^M~}0{Yuh0g@3J$EgqrzGpmR8yb36!_qgpVh=!&Puiq$BJQkhbgWlm9{Bj?A?FiNB zfQ#65oQO1!n4&b2^5L^bajP>N(M%y zl2P&TQT7?U=FaEnPQR-ioR(*F=4Zq$I@8Y4;;c0|cKG$kppCM%b1r7e^5+; zMz7wWj)fem-x+)X(Lh%3HSdWl-_gn|$Q{^6mERNX{|KL|sJL(cj1*a}61Khm>5rFv z&?($|&T&$2`&rsbIB7B1bBGGj(&m47ic)FLDLQ|PGR=w`O7#Zlv zM)nzUkt*vDtRIx{K|) zSq;2#>i>oJAHL<{_U}nlt!Ej>4gy<5GzN{5XyLHanOS2kO}toko5H#`u$MlOf;r8U30)>z(X(5B6)LC=_JdVg5B+!4zSJ zxn^@rLvE9e^G(;jZU5^@T9VT#1SchWophz)HcvvP>MAflqJ%F0pi0JKzQ*I0g1URE z9QhIw9B)2JMJ(Dsw>8j*o8tfg_l0GCLt_#|Wx-pEVaEEw4!;DmOt6)w6BRYg zs-kQs&#zz2tx=1|O9HKs#0~j9-_3a_rq3%O2Nn?_D$OSAjy!QwZr~g#-;XJ{daP@Z z-BvR-wi^xMwf-x{)%z8PSC$+V#I8qVOWqZa$OVn zMIU}ai!_zwQ9Vn?`_qqT72rvV7uE`cLTWpWVoO6}t9(o^*W()?E6vD)GLQTj`j{!d z6Im|HzGWB1O5D=B@S8l#&@zwxAd0jP!*!~}rcXEn4sZ=st_0%_p=HxZ)4*M2)~nsy z47#0==lD(izUPbOp!p}2p#*j1#%(zMA2I*v_>S{n=o~wcqy1y1OgZdO|FXETk(aFX zv-H(R`5lnRE!YpmF8Z*}*=uNMI3{bVs``zj2H&Ue=&t}_UhwqvXO_b++_1#QC5JIL zVV|dozWEk6&QI!e)n;P}bR7{;L--n}&W(~QkIUO~*f>U&7y)W%3yaCJeA{>eDzMb{ z>+f|#+ZI~f2mtk%dd3f;CmZBR%CQf&z~{s1e6 zK$5|YKm-Yax!FODfmJCyKm#c*G}Aw^CUC$Gsg+Y_im(3DeqmD;@m z)%LEIG7*FAkxyCY4EVAkNO8;pDxZOhr!N!+ZO0TXTR7gqos~wvGvguHo|0wUF>es9 zRI9m%YqE9PoOf;Itn?-s2=Gpe$s-_fuPzXf!1SJHa@x)Od@)Xpoy!`Ao&iicO z4dK=zln`2e%&`JO9-uFEnpRT^2oSrs3U7&c3G%NQUZOmj0IGBnw-u4p%C$!X(8EFZ z3n>_lRINX`Q9|#}DOVneW0rl>iqRgHo&gJGsChV4@X)q28G>d>11`5NXNKzrHi+@h zS!OJp>vEG5Al?N6%)h%kzmATMA$Mx_)P9BgwFRKZ8gKN3{sEu__PXH(3d$SAvs`T> zU97k1OX4uGeSY={?A?(tGNK$dP^Y$(sghxoS6`~p*crEf3T^xwK*sRiH`N14B0d-(hv;BxX#W2j zk{ca`S4ii_)vdGad=uO)rWyFx5GR+GB8YchNdW?l*XKnrLdry@VAT(dD#!QLAdzV| zYg%aF=fiU8v>=7OG!!fm+`4WV7OO^KS!W6McWF;RXkK!fOLx8B)*4@VLFTp=M4%|@ zORFdZwcqcg%E-%i10pjN$iVX)4ghvWmD++npwy8Yr?}q#Vm}QHNK1<#zhUy|oK_43 z*qPegwl=a6EA9xLt1(vmi5ybCG9De^ZgwtWs0}-Jt`ToG($kI^CxnZDYJ`N(9`&UQ2)v1v6*PcjFDYRL0KZ31Q&|}r zph>Ex-!=6rlu~Va1t-*pAa3L1b(wSJ41ASpE^16|7rggC*Vl@h7$5~8z2W3NDIXo|9*^PnNJug7VO&KAG6h^%{}dOWpERF>%jc*$Ik5qq zdvB@$=s3g5nmep?KGsR&wSz_%zRR)@5Z3HQ2aV6p!iN_@33v#G z3S-5A!E5rR<5HG+3V4Tpr|*eUM+R{!5Yiw7UT#d2fcq>GE!zFYot~m z+wWYDu>kD)S%t&!G;!W@wdt{pX?G)OyvqK7vhH0TD{AaspGB>E+8Mxho);SkMQItN zM-$r&hcsX(2%;VXq*>&Fl2$GZTAx_wG5;+9O9O*2ezHS!LtIW*A`3DegzBsw*%UIK z%sgM*1VBPmc6}rcVuf427#7ddG5g^$<_?`Fx4@!+0C{e{(u9LfK|7FIx&(yP&Du2# z*ZI&Z^s!dNU$Zz+so>Ca?jUQ%sm&vQ-?8Nkzqh8Y4!OzDhNlJK7xu2*fdaL=!FC;5 zPEO8{oxuNL`G>_18kW8<7$xMCcEMBo0Jjkc@D4x9TZ4eE8}h|EtL}~7@Sh0@K{+{8 z)3dW(*7Z{Wki`ba{m#k))h{~}>-#)AwOmcgzcFIYz;uR(6#(gkf{_ska2Y`7l~GXm z4PshnPexA);mG<55}=f_Yy4vV{W}!st%KyW?UA*rs_N{GSq#M2?*OiLUf=%w&TKRd zlhlV*%E5v24KJ95?m&(@pZsJT*P@_q59iREosYYIQcI7Q8;CG#SAcvT7gx`^P}mHg zAO1s3w0l2i%}CMl4-v2*(lZ!l(`+JXII~|;sRlm;xpQ%U%*o4x%jd=hh#|mO02++1 ziAHL^)q^LBgbzBn+YbVP6?{7D2Gq$8K>krvXNviqnJs$T0P0f%JJ$mAG303F8n0Lcy9ygCy+;vz zqdi*N0XaIi^J7V4jYO!)5SwHO0s6gis;aO|s|l~KuQN!60h^MJCX-ZBLfaWhEjS4J zBLojP>ibnp=o7#=;z$SK*cuPzShSQrt6^1XX=q%9_`*Ln_dSS7mDqsy>yt1HDITz^ ziaF+>v8(#Xe>QXwGI?Q#`xDoIqy;Rn4e}1VAxD+F&|aijE;4;CM>Qh#{i#~h?;OM` zyd@+z4!w*fwZ3?<=`=}do4Zkp-RSF^Z^>lc3oVPR4=MvNH5iTe-+^@3p?#n*0u~Wt z<%wvn%Cuw3X}JyLi)RVMde8T>2$opSUo)oli=M$VQofv>w$MaZfEYQHc2}`&Nl(M- zqB7e;WCKk?O&R@7g3%194x1$~s!%qL(UB6oMFAXv)8YWX9I%}=fAPjf8ciF0Oyu;Q zFo%NwX_P<_BHiDZ>{Sj4-n4MdT1+(I+oIqWQdvPM`WD)&nwLQS{pT+%{?NcDy0*7v zH*Y}db|J#9a!_Cjwc4PgY$iH|n1G$>zS5s7F426|@<2^OS`cRnMp}?nKtB8PsrW4| z0+KH^2Zt&bWwU;HACM|F4t-7Hf#xgJ)JJI?TwJI<1?BsLs>=C?@YM6a7rI~jM!HC0 zZg3w&31@Qb6qqO}QEZuMziJi3;K}!&q(&^Sib0STl4H_=PRjpf9&H2j&!iGbG3haT zG;5L#jSjoULkTQ;SXE|Uzjj#Ef^#Qav8w88YSyxY$<(aGP41OAUBEYQL7RoLx!bgJ z1wUaxssBV^WYyE>gmW4bafK4T2q3cnkdq1+R@c7c8?&6B4=A+Xr-QfMwbD%&iu+&wElD#c^hQvea+*TccJYJI!mzGm#Oa7l{U} z&`hsyEYuM!78lTVy^g(RE^W2x>vf1_@thRXYW5-uk?4Vv78r&TgH~NtK?nK{(lrrE z%P#c_rks?f_FdPb8PML0?0>Rk03SB|fC*5IjvW*5fQP(serT#4Z)_{X zeU&(WD$#`X7K6xulQ-jop+SIB_Dpo#7?B*#2aV=B^XF3%ztj7R%S$6JB1!Bjn}sU4 z$D8BsLe<!;jp8ip{e<17;SAU)!p>8wCjLW1XQY>K+~(nvPx~AuXwBWw#W8DdW=v~m3ZSC zt&3jK_8_CY9QY}RnfL1$6Ibv6_XtX4>q&K?yBSMS)wj8rTTbc*j8#K{EM#BX&ad&GP2N)SH=09>Xrcv&{8oSgGjQx(PX`8`E)?q?=Y>-21piq zr8LnWKZ?zgKQ1gVsQ2eR3`x;#8Nx*NU6C&CpDHm`4jX6FNTGi$;s?lg0*W|Y+H?a? zKSeYIWI(V}R6?_0!Snpiz9wNzMMR4B)YM3bP&yk@E6FU|*nV$ZA09@_hEB`jUMM>Q zNOsr+H>U`oG?w?^gJjOT!Yq(_gp|U)h4&|S{*<=CaOP`63c505DqQml@2q=cf7Wl_ zSs!2`rQ@qvDJzwR4It`Nt7WMrKuhs#yU5?!S>qqxZDtRbrKQ?79|r6zjNPnf{sn`d zcRlbEVh;iKJ<2|=zy45B?i21m>8PIJCjORv+Ag`d&x-yya>iG#a(~D|VY1_@8S4Bf zLy~$gI$)Awl0xbx)qbZ565gbLIyx79At^}v{l0TrTxqsUWi}FlGIHi7I2I)Znj}|= z_y0x(k>+wxvCglO&p*bk7&LFca6rd1-dNTFV|+W`4wS~ihc203wn>l-2UQbdN0avn zu;P~_vaY*k3Ku%?PaHTJ-)s+QC&%MX`iX{qW$@dPmmQ?yQrx$C?`0UFd5$X}I(ST8 zdA)^ZfLg00IFt=yN_igs|BykE0@hEM=JOe8UXlt&@g#CG3>~q{wiP*^Eq{=IaDK2I zHtl9iefJSsd=#LCjP9{x@2E(+5w{bF2UWoTX%L7mEc+Wmb_etKa-SdRq=WQGn4TV% zvM=(|&2EF8I7J~TDz;G7Q=C+b4ERL$gRLhIoHhr-ks=@mX_jdF^@igYj}G*7-Ixfq zP+TQZ`m6>#vpl_1j;m5++=kN;PO<)w1CmaLnYE}5gTS~ClG;+V@Jnd#87GWaFZ}-N zk|&7Gnq)S3Kg+0c@2Q_AxbdDe@06>k%=Q1Db`XLLMRD-_?)NAPR~k#KIMQ}p=WcIr zCOzmY1I1O|GXuS7RRT9<=w z;eHxUsXq+uuAM6PI{t$66oKUVgkrn)|8f6Tyt8S!PF*}N&20B`RA-V4HW2NMN2#cp z-Q3gl5p%dcuLwkWTGnCy7Gat-1#aADd=71i3qUCk!p16qCP5}9V?_WdeEej1IcD8; zms!%+{>o1dQu$zt_YjqYDzB?PudEdyD?)gLYZoN4LA@pBp3tBqy`LKPK}CBba=YH} z!A7K`?9*+|6GHlWWVOe8Tf0}ZFM<`+0Ao6Y&yZvt8^i0;VO*)Xsu8EgI@tO~`qvww za|?ffH>uG%ay$8%C602w(?;M=0X%sV^M7#tvj$7Q`xC~hSlWNF8Q85#iU85h(4 ze<%1~Y7A*WhELIRowF0jsg3V4+wKg+kYd|WjKTXPFe8bJqqaL4A$`E2sra^oi&EJ# zO75`mnz02mSv%HFUop)rQrL|K!YfjU46AEQR)aE4_O61(`4JH#f5mMihyycMaF@&L z%Y5@^u{Z^3x11(iHbHxAOKxJ}2lJY>52b&rjYJ}M153_6yg?Q}Sj9IS!b_6I=LFqt zCK5E;RBhgD54AJ+!EdOnI6!mm zzHDlrzhK`{5QZ`=_ZvP25Iuol{q`)ze-FTe7eMTO>w^JwvbTdBN*}$njlr1|D%f3x zq$fiG>(mRUNF(2m>`@Ymjz%gb1;nV|TVHS?eLHQ_fdNbT-rlQC+2%YEhJQALYlDrn zSS9oBu-F_`aU2R8OHzq_JV3|fx%=4g_ \subpage using_notebook_mesh_page "Salome notebook". +The possibility to sort the created sub-meshes or groups is detailed on +\subpage arranging_study_objects_page section. + Mesh module preferences are described in the \subpage mesh_preferences_page section of SALOME Mesh Help. Almost all mesh module functionalities are accessible via diff --git a/idl/SMESH_Gen.idl b/idl/SMESH_Gen.idl index fbe8a35d6..aadfb1e33 100644 --- a/idl/SMESH_Gen.idl +++ b/idl/SMESH_Gen.idl @@ -36,6 +36,7 @@ module SMESH { + typedef sequence sobject_list; typedef sequence object_array; typedef sequence mesh_array; @@ -402,6 +403,19 @@ module SMESH * \brief Get names of meshes defined in file with the specified name. */ string_array GetMeshNames(in string theFileName); + + /*! + * \brief Moves objects to the specified position + * + * This function is used in the drag-n-drop functionality. + * + * \param what objects being moved + * \param where parent object where objects are moved to + * \param row position in the parent object's children list at which objects are moved + */ + void Move( in sobject_list what, + in SALOMEDS::SObject where, + in long row ); }; }; diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 390621247..33de52b4d 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -162,6 +162,7 @@ #include #include #include +#include // OCCT includes #include @@ -1221,6 +1222,25 @@ } } + void sortChildren(){ + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; + if( aSel ) { + aSel->selectedObjects( selected ); + + if(selected.Extent()){ + Handle(SALOME_InteractiveObject) anIObject = selected.First(); + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry()); + if (aSObj) { + if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) { + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + } + } + } + } + } + void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap) { SALOME_ListIO selected; @@ -3533,6 +3553,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) dlg->show(); break; } + case 41: + ::sortChildren(); + break; + } anApp->updateActions(); //SRN: To update a Save button in the toolbar @@ -3830,6 +3854,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 301, "SHOW" ); createSMESHAction( 302, "DISPLAY_ONLY" ); + createSMESHAction( 41, "SORT_CHILD_ITEMS" ); + // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), editId = createMenu( tr( "MEN_EDIT" ), -1, 3 ), @@ -4512,6 +4538,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), -1, -1 ); + popupMgr()->insert( action( 41 ), -1, -1 ); + popupMgr()->setRule( action( 41 ), "$component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( separator(), -1, -1 ); + connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ), this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) ); diff --git a/src/SMESHGUI/SMESHGUI_Selection.cxx b/src/SMESHGUI/SMESHGUI_Selection.cxx index 4b8c433f9..86a929214 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.cxx +++ b/src/SMESHGUI/SMESHGUI_Selection.cxx @@ -127,6 +127,9 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const else if ( p=="groupType" ) val = QVariant( groupType( ind ) ); else if ( p=="quadratic2DMode") val = QVariant(quadratic2DMode(ind)); else if ( p=="isDistributionVisible") val = QVariant(isDistributionVisible(ind)); + else if ( p=="hasChildren") val = QVariant(hasChildren(ind)); + else if ( p=="nbChildren") val = QVariant(nbChildren(ind)); + else if ( p=="isContainer") val = QVariant(isContainer(ind)); if( val.isValid() ) return val; @@ -529,6 +532,50 @@ QVariant SMESHGUI_Selection::isVisible( int ind ) const return QVariant( false ); } +//======================================================================= +//function : hasChildren +//purpose : +//======================================================================= + +bool SMESHGUI_Selection::hasChildren( int ind ) const +{ + if ( ind >= 0 ) + { + _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); + return SMESH::GetActiveStudyDocument()->GetUseCaseBuilder()->HasChildren( sobj ); + } + return false; +} + +//======================================================================= +//function : hasChildren +//purpose : +//======================================================================= + +int SMESHGUI_Selection::nbChildren( int ind ) const +{ + int nb = 0; + if ( ind >= 0 ) + { + _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() ); + if ( sobj->GetStudy()->GetUseCaseBuilder()->IsUseCaseNode( sobj ) ) { + _PTR(UseCaseIterator) it = sobj->GetStudy()->GetUseCaseBuilder()->GetUseCaseIterator( sobj ); + for (it->Init(false); it->More(); it->Next()) nb++; + } + } + return nb; +} + +//======================================================================= +//function : isContainer +//purpose : +//======================================================================= + +bool SMESHGUI_Selection::isContainer( int ind ) const +{ + return ind >= 0 && ind < myTypes.count() && myTypes[ind] == "Unknown"; +} + //======================================================================= //function : type //purpose : diff --git a/src/SMESHGUI/SMESHGUI_Selection.h b/src/SMESHGUI/SMESHGUI_Selection.h index 4358bab07..5f2a50bdb 100644 --- a/src/SMESHGUI/SMESHGUI_Selection.h +++ b/src/SMESHGUI/SMESHGUI_Selection.h @@ -63,6 +63,9 @@ public: virtual QString quadratic2DMode(int ) const; virtual bool isDistributionVisible(int ) const; + virtual bool hasChildren( int ) const; + virtual int nbChildren( int ) const; + virtual bool isContainer( int ) const; // parameters got from actor return nothing if an actor is not visible virtual QList elemTypes( int ) const; diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 6fd576050..6a8b6750f 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -4114,6 +4114,14 @@ It can't be deleted SMESH_GIGABYTE %1 GB + + MEN_SORT_CHILD_ITEMS + Sort children + + + STB_SORT_CHILD_ITEMS + Sort child items + SMESHGUI_Dialog diff --git a/src/SMESHGUI/SMESH_msg_fr.ts b/src/SMESHGUI/SMESH_msg_fr.ts index 65e5bb7b5..7423e43ea 100755 --- a/src/SMESHGUI/SMESH_msg_fr.ts +++ b/src/SMESHGUI/SMESH_msg_fr.ts @@ -4114,6 +4114,14 @@ avec le paramètre '%1' des préférences du module Mesh.L'objet sélectionné a été utilisé pour en créer un autre. Il ne peut pas être supprimé. + + MEN_SORT_CHILD_ITEMS + Sort children + + + STB_SORT_CHILD_ITEMS + Sort child items + SMESHGUI_Dialog diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index f710776b6..f393b918c 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -4790,6 +4790,18 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, } pd << ""; // prevent optimizing pd out + // creation of tree nodes for all data objects in the study + // to support tree representation customization and drag-n-drop: + SALOMEDS::UseCaseBuilder_var useCaseBuilder = theComponent->GetStudy()->GetUseCaseBuilder(); + if ( !useCaseBuilder->IsUseCaseNode( theComponent ) ) { + useCaseBuilder->SetRootCurrent(); + useCaseBuilder->Append( theComponent ); // component object is added as the top level item + SALOMEDS::ChildIterator_var it = theComponent->GetStudy()->NewChildIterator( theComponent ); + for (it->InitEx(true); it->More(); it->Next()) { + useCaseBuilder->AppendTo( it->Value()->GetFather(), it->Value() ); + } + } + INFOS( "SMESH_Gen_i::Load completed" ); return true; } @@ -4997,6 +5009,46 @@ char* SMESH_Gen_i::getVersion() #endif } +//================================================================================= +// function : Move() +// purpose : Moves objects to the specified position. +// Is used in the drag-n-drop functionality. +//================================================================================= +void SMESH_Gen_i::Move( const SMESH::sobject_list& what, + SALOMEDS::SObject_ptr where, + CORBA::Long row ) +{ + if ( CORBA::is_nil( where ) ) return; + + SALOMEDS::Study_var study = where->GetStudy(); + SALOMEDS::StudyBuilder_var studyBuilder = study->NewBuilder(); + SALOMEDS::UseCaseBuilder_var useCaseBuilder = study->GetUseCaseBuilder(); + SALOMEDS::SComponent_var father = where->GetFatherComponent(); + std::string dataType = father->ComponentDataType(); + if ( dataType != "SMESH" ) return; // not a SMESH component + + SALOMEDS::SObject_var objAfter; + if ( row >= 0 && useCaseBuilder->HasChildren( where ) ) { + // insert at given row -> find insertion position + SALOMEDS::UseCaseIterator_var useCaseIt = useCaseBuilder->GetUseCaseIterator( where ); + int i; + for ( i = 0; i < row && useCaseIt->More(); i++, useCaseIt->Next() ); + if ( i == row && useCaseIt->More() ) { + objAfter = useCaseIt->Value(); + } + } + + for ( int i = 0; i < what.length(); i++ ) { + SALOMEDS::SObject_var sobj = what[i]; + if ( CORBA::is_nil( sobj ) ) continue; // skip bad object + // insert the object to the use case tree + if ( !CORBA::is_nil( objAfter ) ) + useCaseBuilder->InsertBefore( sobj, objAfter ); // insert at given row + else + useCaseBuilder->AppendTo( where, sobj ); // append to the end of list + } +} + //============================================================================= /*! * SMESHEngine_factory diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index bbd544fab..403fb7ee5 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -585,6 +585,11 @@ public: const std::string & GetLastObjEntry() const { return myLastObj; } std::vector< std::string > GetAllParameters(const std::string& theObjectEntry) const; + // Move objects to the specified position + void Move( const SMESH::sobject_list& what, + SALOMEDS::SObject_ptr where, + CORBA::Long row ); + private: // Create hypothesis of given type SMESH::SMESH_Hypothesis_ptr createHypothesis( const char* theHypName, diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 4ac7ad8d3..fc50bc409 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -261,6 +261,7 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, { SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); + SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); if ( SO->_is_nil() ) { if ( theTag == 0 ) SO = aStudyBuilder->NewObject( theFatherObject ); @@ -286,6 +287,10 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, selAttr->SetSelectable( false ); } + // add object to the use case tree + // (to support tree representation customization and drag-n-drop) + useCaseBuilder->AppendTo( SO->GetFather(), SO ); + return SO._retn(); } @@ -377,6 +382,9 @@ static void addReference (SALOMEDS::Study_ptr theStudy, if ( !theSObject->FindSubObject( theTag, aReferenceSO.inout() )) aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); + // add reference to the use case tree + // (to support tree representation customization and drag-n-drop) + theStudy->GetUseCaseBuilder()->AppendTo( aReferenceSO->GetFather(), aReferenceSO ); } } @@ -456,6 +464,7 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt return father._retn(); SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); + SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); SALOMEDS::GenericAttribute_wrap anAttr; SALOMEDS::AttributePixMap_wrap aPixmap; @@ -466,6 +475,10 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" ); CORBA::String_var userName = aComp->componentusername(); SetName( father, userName.in(), "MESH" ); + // add component to the use case tree + // (to support tree representation customization and drag-n-drop) + useCaseBuilder->SetRootCurrent(); + useCaseBuilder->Append( father ); // component object is added as the top level item if(MYDEBUG) MESSAGE("PublishComponent--END"); return father._retn(); -- 2.30.2