From d720f7388726f48103b48b6d5b20f279e580c882 Mon Sep 17 00:00:00 2001 From: bancika Date: Mon, 13 Apr 2020 14:54:59 +0200 Subject: [PATCH] Added "Find" functionality that locates and selects component(s) matching the search text --- .../src/org/diylc/common/EventType.java | 6 +- .../org/diylc/common/ISelectionProcessor.java | 9 +- .../src/org/diylc/common/Orientation.java | 20 +++ .../src/org/diylc/presenter/Presenter.java | 15 ++- .../src/org/diylc/presenter/update.xml | 4 + diylc/diylc-swing/lib/diylc-core.jar | Bin 315398 -> 316336 bytes .../src/org/diylc/swing/ActionFactory.java | 39 +++++- .../org/diylc/swing/gui/DialogFactory.java | 6 + .../swing/plugins/canvas/CanvasPlugin.java | 8 +- .../swing/plugins/edit/EditMenuPlugin.java | 12 +- .../diylc/swing/plugins/edit/FindDialog.java | 118 ++++++++++++++++++ 11 files changed, 230 insertions(+), 7 deletions(-) create mode 100644 diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java diff --git a/diylc/diylc-core/src/org/diylc/common/EventType.java b/diylc/diylc-core/src/org/diylc/common/EventType.java index c22e4858..8970a8d7 100644 --- a/diylc/diylc-core/src/org/diylc/common/EventType.java +++ b/diylc/diylc-core/src/org/diylc/common/EventType.java @@ -102,5 +102,9 @@ public enum EventType { /** * Called to update the status message. New status message is passed as a first parameter. */ - STATUS_MESSAGE_CHANGED; + STATUS_MESSAGE_CHANGED, + /** + * Signals the listeners to scroll to selection. + */ + SCROLL_TO; } diff --git a/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java b/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java index 56075d10..e754ccc7 100644 --- a/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java +++ b/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java @@ -113,5 +113,12 @@ public interface ISelectionProcessor { * @param yOffset * @param includeStuckComponents */ - void nudgeSelection(Size xOffset, Size yOffset, boolean includeStuckComponents); + void nudgeSelection(Size xOffset, Size yOffset, boolean includeStuckComponents); + + /** + * Selects components that match the criteria. + * + * @param criteria + */ + void selectMatching(String criteria); } diff --git a/diylc/diylc-core/src/org/diylc/common/Orientation.java b/diylc/diylc-core/src/org/diylc/common/Orientation.java index 48b75aa4..4e61f43a 100644 --- a/diylc/diylc-core/src/org/diylc/common/Orientation.java +++ b/diylc/diylc-core/src/org/diylc/common/Orientation.java @@ -32,5 +32,25 @@ public enum Orientation { } else { return name().replace("_", "") + " degrees clockwise"; } + } + + public double toDegrees() { + switch (this) { + case DEFAULT: + return 0; + case _180: + return 180; + case _270: + return 270; + case _90: + return 90; + default: + break; + } + return 0; + } + + public double toRadians() { + return Math.toRadians(toDegrees()); } } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index d38701bf..e3c04ded 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -1003,6 +1003,19 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.REPAINT); drawingManager.clearContinuityArea(); } + + @Override + public void selectMatching(String criteria) { + Set> matching = new HashSet>(); + for (IDIYComponent c : currentProject.getComponents()) { + if ((c.getName() != null && c.getName().toLowerCase().matches(criteria.toLowerCase())) || + (c.getValueForDisplay() != null && c.getValueForDisplay().toLowerCase().matches(criteria.toLowerCase()))) + matching.add(c); + } + updateSelection(matching); + messageDispatcher.dispatchMessage(EventType.REPAINT); + messageDispatcher.dispatchMessage(EventType.SCROLL_TO, getSelectionBounds(true)); + } @Override public VersionNumber getCurrentVersionNumber() { @@ -1924,7 +1937,7 @@ public class Presenter implements IPlugInPort { if (ConfigurationManager.getInstance().readBoolean(IPlugInPort.STICKY_POINTS_KEY, true)) { includeStuckComponents(controlPointMap); } - messageDispatcher.dispatchMessage(EventType.SELECTION_CHANGED, selectedComponents, controlPointMap.keySet()); + messageDispatcher.dispatchMessage(EventType.SELECTION_CHANGED, selectedComponents, controlPointMap.keySet()); } private static boolean useNetlistForExpandSelection = false; diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index 3a40c7ba..ee6da5e1 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -2934,6 +2934,10 @@ 2020-04-09 00:00:00.000 CET + + NEW_FEATURE + Added "Find" functionality that locates and selects component(s) matching the search text + NEW_FEATURE Added "Tag Strip" component for point-to-point layouts diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 855a12dcc7f836a1d195229c404006e67c906892..e0d05d8a7c3a83eae9a5163c805c034f9e40b3a1 100644 GIT binary patch delta 37464 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 delta 36854 zcmZ6yWmuHm_cqMT(A^;2A>G{|E#2MS9Wo%@ATe}FBi)kH0@5Mf4H8O&KHSXj|KWW< zaIEuKz4l&v?dzHu>dJ5;3UJU=6+y7bFffQPF!;G~$!H89ycfcM@gGTH0+7E_WdJSc zMVe9vBu+^J5WeCn0P`zd2C%-Nh4XGIDRi}c249Xd$Du8mF z=t!WPIEHE{5N48v`iWo`fr25H+Eu2< z#hCZu)yRNP91;7aO4WH@nVfh442%^B2Iegc1S<*_H|3ic5qRugQP@! z^pK1jSG1dsq_n5R$7DHkst$!=YdN7=rLu0(AK~PivTt0NDzwxxe|*mj__ec|x!8I@ z0K@tX7cWT^DUM%S&5-E0hM)Sl}ccWc#yR5-XEUh7Ota$yfk=cnH z2XKL{!C&?*L=gNmO*|E%8P}q+vS|1GAklAcN=uDQV$hiQH$$etKH*%ygG!a0JiAyc zr`vN(X2@Iv=O?jN(>c$X0&7#6*X&l|5ar}wJZ0N-5!e=2PHUeZ=g~IxGy|LMp1Pb~ z97=zbC#jS8RxZ;Di~oLYM$`GuKzJLcVV$EEKTwO@f1m)CPpfG86ogbv&xwsb>OCHG z=7GVQBHAS#&SIEInpf2IDT;(oXzmijN3>DuiHGv+lHU56^laGU+=jNB4bG_y?W+R1 zE}=p=TlV!__aKv;Lo{Ci}<_wxig4%RyY zRBk6X@_PVERK#Jy9B+0qFga+p+v7x)uGj~CjO8-$IjE_l^fE6Y*q^Y~IrrHo2~6a5 zH`^G%h56?y@`Rgyir9T55L#*enkYG(D5j(N!5`!B68swO$kCnm^PJf4Ds-8bqQ6+E zugn`YTGAs0t~6S}_TAjYA>hoS4s2Bqj$7+fM+LUAh`AORXz5cD#tb>*p^TLXTU~eM zoU(qC=58z_KSWY&MM3)ErPPrWx3QzzKdFs+-Mm!JFYof}Q68F%SW2Bmw*u9_QQZ2Y6p3NT|vABiDJ9@qt6I~?r;Fmi(Lf; z9bA$o(f{_%qsch37W+pvI1nNu;&05Y>SflA*xpHOM}Mz(OSvNUZI16W2oSm*kJ1zx zGQp54_YJ46k;)d6`GzsUCdVWA6~lJT$CO{Te>~Eb;gyYB*XM?UjafB>R4$s1Oir?* z=?I3Fc8)CA=6j~boL~six!G5H5r=O?ox!X+4F`8H7!vH`x_nZ9zw;ys>c8I-`s16l z^mvzFI;ioz67wJ6A7hw@GKx>WOwCbn;&VpHW%3jUa6?359A{9E)1zL^F@ZFLAa=+B zvxl-kA(9?(KY?=ir0w%tdk0b{uT`xTz49G0m%-A$A`Iz>FdJhD<6~;3!Jc>=L;)$S zYtqji_RRXr@A&om|Hhi2h%*5A}UTU3_VD8nl#Y76OP-94uaAyWZC89B<4up@7cYUUNDq zII{ZR4E447-?*l;=Yt+CQwI?0>&UeBL4^kK@^gk-?FTwwzlt;y>7k;ag)QHlUm zM?0Ma%JG7{1)}|zno(;Z$G4Y>OPvCS5I_c!VR0H4GRFX~X`4+MKz_W)q(G2*L;zmn zK=$#gbxM71#cL#^y#M*lEJT7zN{U{ufs}yH%dZ-`#j4O;s!A=P0K0+)T7f`wFf^&o zwqB?R+yMv8F0vCJ$|>mnUn!%#U?@kae-&!QH2lA7MS0{4H1^Z?`Tt_3%#Gf?#-1EA zeYHv9oOpU=a7+?F{VPuKLcN8}s6)ZhoE-G3q*>~P`af8`fQptk)}U5jx9XrAr`8wfQSn3*@VdJ15f!X^Uig+TtBap91w?`<=fa{iE}VXc zt}t%=)@9(!T?d1Z5)8q6Q9y=VPW_65MliW5fyP9*UWI0{e?yP(S`Fr3=&jt` z3)p|ny|n@k@bIb)DMbW){!gh@2?+qLrxgPYQ1dEm?Zp7Bq5k(E(po?QC;`19ISK$4 z6d6(jIG`wr4nPA%t&9Lf5c-RSY7Ozl+~mvH9tA?ofItFBZy_u^q^k%PrS+N_umpVd zHO&SfgndP)T!5GL{V$RPFQ66k6+ONKK%idJ6aX<$uY0YzF5h3g4gevhaR35{V=*jJ ztMYrmED-I#piiUzvx6_I)C;*J1roN(r~!ULJy2)?`k`oF_y6*LFaW$H-K_HCq4=(9mjM0mIO~ARYruLha6e0FIz&X$pV})jOO8 zh(Hm;BESzCd6W}*AA|`5^A`gGD0=A{#adYO*12T>8r0$LF+dXOwGkNq0KP$u&u#%p zP!#+K=!PPRe*kPK(gp%`pr{TGs18MNNWefS3PS~2K+!P<@MUEG*J5ZmKnB1o;>QKD zLV0!sKm;iAAOgBU(E%w?9-4G_Yg3}%%TkoWK?)RJmO_gX_`gFClg0KS|3#AZzeR$j z1=d5Y+ZcdEP&Cg341pp&HsA*+TH*w@LHpvWHk7*U#X}JD@KzsCE|Kxdf& z{dKcjm%KqTPzy>w&3?De~^CJ?M7HgP$Y<^HTfe* z3#xMz28x6tk4O*zTA|O&!G!Xn;y?*d^d=GX()a(Z`$`fB1^D_ZgVVM?KV<|11KE0c zjDmzjf+!#aDIij?csw>f95zK3EDZqF-c1gk^ONQFc-Y`q&-&&T*7;@qshA>O=js^F zkZtW1Nr&ocF9(OS(&kvFv!ZIMr1PAB^A&6Px_?1`$Fo~kuTKwFJ=iAm?iNzQk~EIG zM6YD_^u!E<4(T;g4=yfcef`MT#D>OH%CA1=6F#k|R9qE-^LH88w))33{RUO8?jSms zS6r1(t18H82jy2NVvO3x{g9sG(UTy~1hJ=>w>>v0NSzZdbvql|dp^E?pp7m&hMuxf z1O6AMw&-W+~wl0bV&L(E-rIP_RdGeF0NE6pHNJC6w_}1 zaDgR%f`in-RZj+DzxQs)1NYCTqk{Hb?i`-SH)^}Qu%7=4JY<5K);k^6I@z2js21Yw z*9f(%21miDdmo;jduvIwM2kl`qy!RL>B~7!>3_V%%_>k}XVQw$t58Td)zE^8uT;|- zUc|MpiZHpZ2{H}u!RtM?_;AecC9I^2 zw!H@1nQ9uZ-pSP85gj3jB&(LNM-PIZV-)qO6#Rh!InvBEE9U}yu@5ht;G9#a)ZR-9 z(|0Q8(e>mtwg(JUD$EN+2rjCyY8|Lu<35SZtEzC#33iICsZRFZ91z=!2s2H-IR;7@ z*_OwGQN8L5^N`rpCX0@-9qky6)3-`OD&y}uNW^M;YqW{%ac;o8yx!>RJdgAE&3NQG zZ;tJA?%MgQcyz!1P+dXuVp-1%HCcFb>|dF8K<~2!BlvU-e;wH4AL3tF7=#Mu+n2+- zrjkP23gi10dWEhf6w*1z+C!wxx3h-dvt0cSeBoYivR>>g6L-B?LcsRHH(I?}ERsai zB7$gm16I-$W@Xj7e8r7I2-S;Ti*4}b?W-KJb-owj56A0UV)7jJAm1}r6of4M+b(BG z%Xcw&=N?5%Y=?fbDqkkfC>}C-|DEZW$M@FH@g7C@uYRTRfljTCi@5onIl7$&+ieve zxRQ@@qQ|nFZ)c##vD}1X&Y*5UCxm0pNY|~ka6P7{)hxiIf9wo#TtxJq_ZppKEjP%k z)}H{somgyjN2jL-eS4?t?%Lf{@>*1?iyTbe3&a5KRBf=&xojUqUR>1`ikg={)=hl= z`OPBY>xOCye-mY(U#}_#Re5*#eC@YIa3t!roAeeA{{p?lQ2B;sqr>ddwB^K-&3SQy4U^qgEM>QXK?w32@}PcWCi zy%rnsfc>{S4)+Fmz01B_?DO#?+BJdZhaYS|V2bbrf8&6(3AnX4sYi@d*%w&q_|A2vnHpWBGRRJ za7wH9i1f)ktM`cY0hn#PLsQ6Z3}_MBuqm@K75Kq#94tc8o82OK*QY*4@B*qn!urcF zmFQ=ZKja|Jl`DS~x+Wql*M8sp{mu_LDV-OOZ8mV(lkhXI5%te?)Xwn%DllFIFG_Y5 z?AMt}_u@{Bhl+eZ$D-5?C0nzd> zsuT4*>y;ux({%(sXOnWof}O2VR5ZIWFYz)ytS4Ur?aSj%u|2_K$+^7&S~UWq_z6#w zsI(@o;-AN6#ik6ESO=t2N0<#K(7T0}$7cSEy5;IKn69F;feuA1958v=vK0*8o&fBR zy}L8y&JJw0{N6G8WM|FOcEHLrF7Lfv&c&>+PnyYW)8yt}qh<%uMj&gX@MojYGw}LU zx2f&oHg^qZXu4*23@zeDMyg|a%DIoqq)&&Bco`Dn-CRq!%o1^<#oRMCwj>4N;M$@|~XwvbGiDYce5R zc8Iu9WWE&a3;0_29An>eGp1Po(*^acHR47{Dj?L}^tCg$~&^g?QrfmGC}8eNYOoDj`>^{jrbMnFAIJ&rI*I2J9h ze!To7 z;`X!8cauy+?iwlR{%sd5TZzCGei!OFoq1J?c-Y}yglOimM!D!bn+XENY*|RyOqs@q z2$OELe7i$D&HO!x%K{S`>1npZwSDE{-Cpg-%!0`wGW!ZqSt@G{6BGWHFZ8&HkvrIG zSvu88a^N}vq7`-GV+=3vNQZzTgZEu+EdpPy6!}}ksqV)XYV>A*E_b^b?PRr-YE@%b zn3Z%;2?YoizW=wcTh7-hLbReUG_`@J5azHLZgDBsRO?mXgX3bRyu+yja>8b`?dES{ z(G*IG`ZLEXyN$%K>k#XBghC5%ZWcYRa^HEeD+o5MBV1;*w>9jxbn*yT8S)?!;;k{B zZRf&h50Ly|V84Q0FSmiukk!GwOrR3>fPEq<0-ACPvKTwQNr-of{}Dg7yriV^ z#*89&TDPsGqOih3uc=jRnc$Zq^B2SMh)oCmmP#)RgV~68(Q?Yjhn4Ob?qi>R^CF8g zyV!%B9s6$wvA>^?L=6^P9qaztcD0eD+R=E#G{HC3tE#%meU9o1T)fkld{(urzWven z$1jn;WPRP%FViZ4t+z@2Ai>4kM zQ$-E(CJm7X+br$IzAxrx!mFSHM4u%oC4eN@fN+a@@^OE+E`8(8nc_f^NY&@$ZrI@W zR43|Y0{UDPYl3wy$BJRexxPAZBGVJq>+-u^gOV!%5thPkOx)BFZXK8BdRLN|aEoTN zJaxq6p!cL>)FNgb&N4$^t7a7>pSKZhLJ<4Y)+DWl@Uu8mWkk1iLwp0NrZ{V1s=1RAA8nsqz&fJWfCB3Xzr`1TU~9 z#6c>x=(k>gE+MpLS*PgPoP}On!z9708}`F@NfM}@f2+50tJEg9Hf`b1;RnLK$>sjK z>dSBSHQD7RIt?Jf>0@@t(nq-?$#0`@6X62VRSLyU-`cvgn zXgf|r*y7RuczuJR({A&UAbO+rtXY{B0)I|?xQy+s{P>0Y*C|@$_GZ_B!wMCoRBG`t z?VDu|wW0`FinP5**1o0T7ocq{%2V?fabdh5^7;5t2^6^0K;{r%G)oGwN=_f)aDv_f z8oLEI=F!RNn?vMQT6n?MuWm-V$yEEvU%!q2Dwj*U_(v>6j9~k2+v$U8iL}lD6?;qI ziQ7D#B{5-Y2$ya%TA^|3#2JOjZ~u^{wb_h3!T3_TM3HY*>d)Mji}J+>|7LeNy^(R^ z3hCT&>;d4NJPCOj>%1L)uu;za$@e-^7m6M}>{uC#UmO>F6NKeA8SKXy7WMXx($-dQ zG)wh(|J_QB&*fm)71Yl9cBK|R<`hmiYK+grlo#iAOaJLJ@wInQw z9hL@Cz8y8Xv_+{&s5<-VKTiqf$(D0@7!LAMQta4Syn2(3e z5;^qxeX2z`gYB64^@rkMI#XDLhlZfB(1IS^h8i zIyQ!p9lMg*H34Hna0ok~31JqHxt}$;_ciw8N4;|VZ2h~9S!Ro5*UH!|=Uq-Vd@WRd zSTk#piI)egf_Jce!s&ozrGjpqO@#AKd)dakS)inYN?-b47xQ$Ph%+sywx3x7*LzAI1 zdQ=v+fRm?^b(~1N+g#Tg{*ayeMy`JY#h-`}cErUT{B!UP{D-zwQJ(9y??_u5HHfh# z^UrRc*D?$|RUPNNz*tf$_)WHGt}9SKNXqpz&mJ7?P3+?tp*KR6Ac`#&%n<#l(oL2M z-~I%{>*Mmo&fMvM4cE|FR{4#Nr-rWH`zy^yzS%YA?h{P}IFxuFI%!q@gl%sr|5Zs7 zX)g^bj~Q@Jd*RYBaRpxdC4&q-YvdsODJ$V(ag*5c?=M(_g|hZ9xUD74z1HrSBULOY|KER&mfCn!`mFrD#~@o}=f^m=_?p#E5-FKEFumv_dBD>D{rHv@@F^U86@g7#=IW z@~K;Oaze46a75(U5<*!5!U4w(cO}sMn&Gza$6T~`VQt|9H{HC`HDSm1zNyH{sel*d@=r`hAtCd{2KNAxib~F1tM*B+rb$98JN#M|sa0J^nnRXfc)8 zu$~I05JPELu=BNISV!YrPQ@7A;M}9%bCI`n+}{d?CHugF<3DZYt^)q9qG&nvoy8>U zs&&tXM%}GJF|G88^uD9?id|f}os5l-^2r%;TY&CX8>yv~I0^L2u|C;nRROGCr1yJ{V7wD)dwz zK$}0PIEa!c1s`crvN43zFM{9Ap@P^>kL5*lZyufRx^CUF`Y_QxW@#9ahf zp80{03hC6?ZxVdhq9XRk&kwYvWc?ld#@M5zrJ}(;E2%=RlpFerQu-Ca5v?aeO7|{T zLZ#grLGj0stcT(2F{Nksd!AS=!b7Ju^n|O1Lva-yKND`X2?M5c6c@G)5{YrcLK7q^ zx@z$eR?d#VH{i;|D`}s$PWrDUfgar2>v-?Os6;N8u&0SQ@ZkmNW{IjRz>@!HHkteT z$oo70GCt3i2H~Lx8dh@Dds58IhKG!opmgALiNw~c-`}Wqk~~FsyXtt|mxjP5Fv7cB zVkh22j8R|SiSrwyySH};e=0X=V{9S(r`qx~CI#ul&;b97`>PjSt_!b|<4{kp(W5U) ziS<7Y_KWQ|cNq(*d>65FcQrrFZy>~kU^*9L!r06NlvZq%Z&;2Ft62uh_hcUb zR(c-0pa3(FgJRj8j?x-$Nw0EC|KdI4Yy7M19s|iQxD(NwweFR6ssyF(VTQX_l&`)g ze5lE?M(k1qqP#u=e1k*)u%XQ-hK9(Dm>^vxht& zpm&aZuE*?nL%LTatUN#$JTP~AL=j6SMaOofOEgRLh+UsMVsPhh{HS&~dc9YgH>X4W z109_C0O-P+n#f4RvV_0LxC+utPT>r(;H49H(}s+Urx*fwuS5Ai!4!ey;Iqq*cJp0b zHzZpaZ_&RSy^B*2qxqM9oS6N9^N_+onlD-SwNH~(%{;Jf3CV9+c&YMVxq+tT!k=KMXrbeDU@XcN3Xr&~114XAiE)rPxp$>KDvedBlS-H5eDb!10LD zHt{#0URSnQ`gu1z(pJUikZ~IalP>o2%tVNr?5#twMJv#`6fj( z{R5Snzi^|F_5wZz9>lSLsL7Vx_rAu=3_T7em`rKUWAvrXO8*8#k1Ni;@t#e;QzZC+ z)1bq7-70>>C;=xNwYl6~{bBm-LnkKK({P>my{Bx4>ldAZ_$vhIysyPoD8^4%g}3z2 zlOtLb`|At0Sq~vLD3$fIrHgh5?kUq8sKcewDC1w+>5wa0`}WL$oTvQY83dhN8b$BOd(*tOE1x z)UpXBKCdW8;rgW;I<8!ltwI_w888;ha*0aa8K-*w=KXciXjf`Cq*CNx{+yc&5+B=J z=}=4GmgL*sm~bZ6ljZo(`I$F?*Xe9YxYo?890PRM>4ksr4gS%ne&A|)8(iwnYD;+! zcQ2vwmr?ir0i5cu0X9Ln5{=;m|CV~rs34E5eL(t

D1oJ=*(ndMMy24|Sa_{KP&+ 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 diff --git a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java index a983e70c..81108058 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java @@ -73,13 +73,14 @@ import org.diylc.swing.gui.DialogFactory; import org.diylc.swing.gui.editor.PropertyEditorDialog; import org.diylc.swing.plugins.config.ConfigPlugin; import org.diylc.swing.plugins.edit.ComponentTransferable; +import org.diylc.swing.plugins.edit.FindDialog; import org.diylc.swing.plugins.file.BomDialog; import org.diylc.swing.plugins.file.FileFilterEnum; import org.diylc.swingframework.ButtonDialog; import org.diylc.swingframework.CheckBoxListDialog; import org.diylc.swingframework.IDrawingProvider; -import org.diylc.swingframework.export.DrawingExporter; import org.diylc.swingframework.TextDialog; +import org.diylc.swingframework.export.DrawingExporter; import org.diylc.utils.BomEntry; import com.thoughtworks.xstream.XStream; @@ -231,6 +232,10 @@ public class ActionFactory { public NudgeAction createNudgeAction(IPlugInPort plugInPort) { return new NudgeAction(plugInPort); } + + public FindAction createFindAction(IPlugInPort plugInPort, ISwingUI swingUI) { + return new FindAction(plugInPort, swingUI); + } // Config actions. @@ -1545,6 +1550,38 @@ public class ActionFactory { plugInPort.bringSelectionToFront(); } } + + public static class FindAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + + private IPlugInPort plugInPort; + private ISwingUI swingUI; + + public FindAction(IPlugInPort plugInPort, ISwingUI swingUI) { + super(); + this.plugInPort = plugInPort; + this.swingUI = swingUI; + putValue(AbstractAction.NAME, "Find"); + putValue(AbstractAction.SMALL_ICON, IconLoader.SearchBox.getIcon()); + putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK)); + } + + @Override + public void actionPerformed(ActionEvent e) { + LOG.info("Find triggered"); + FindDialog dialog = DialogFactory.getInstance().createFindDialog(); + dialog.setVisible(true); + + if (dialog.getSelectedButtonCaption() == FindDialog.OK) { + String criteria = dialog.getCriteria(); + plugInPort.selectMatching(criteria); + if (plugInPort.getSelectedComponents().size() == 0) { + swingUI.showMessage("No matching components found.", "Find", ISwingUI.INFORMATION_MESSAGE); + } + } + } + } public static class ConfigAction extends AbstractAction { diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java b/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java index d7f441ba..4c1fdd95 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java @@ -36,6 +36,7 @@ import org.diylc.swing.plugins.cloud.view.ChangePasswordDialog; import org.diylc.swing.plugins.cloud.view.LoginDialog; import org.diylc.swing.plugins.cloud.view.UploadDialog; import org.diylc.swing.plugins.cloud.view.UserEditDialog; +import org.diylc.swing.plugins.edit.FindDialog; import org.diylc.swing.plugins.file.BomDialog; import org.diylc.swingframework.AboutDialog; import org.diylc.swingframework.IFileChooserAccessory; @@ -196,6 +197,11 @@ public class DialogFactory { LoginDialog dialog = new LoginDialog(mainFrame); return dialog; } + + public FindDialog createFindDialog() { + FindDialog dialog = new FindDialog(mainFrame); + return dialog; + } public UploadDialog createUploadDialog(JFrame ownerFrame, IPlugInPort plugInPort, String[] categories, boolean isUpdate) { diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index edf57b22..7c0ac26a 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -706,7 +706,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { @Override public EnumSet getSubscribedEventTypes() { - return EnumSet.of(EventType.PROJECT_LOADED, EventType.ZOOM_CHANGED, EventType.REPAINT); + return EnumSet.of(EventType.PROJECT_LOADED, EventType.ZOOM_CHANGED, EventType.REPAINT, EventType.SCROLL_TO); } @SuppressWarnings("incomplete-switch") @@ -759,6 +759,12 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { } }); break; + case SCROLL_TO: + Rectangle visibleRect2 = canvasPanel.getVisibleRect(); + Rectangle2D targetRect = (Rectangle2D) params[0]; + canvasPanel.scrollRectToVisible(new Rectangle((int)(targetRect.getCenterX() - visibleRect2.width / 2), + (int)(targetRect.getCenterY() - visibleRect2.height / 2), visibleRect2.width, visibleRect2.height)); + break; } // } // }); diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java index 303fd462..79050b43 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java @@ -74,7 +74,8 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { private ActionFactory.RotateSelectionAction rotateClockwiseAction; private ActionFactory.RotateSelectionAction rotateCounterClockwiseAction; private ActionFactory.MirrorSelectionAction mirrorHorizontallyAction; - private ActionFactory.MirrorSelectionAction mirrorVerticallyAction; + private ActionFactory.MirrorSelectionAction mirrorVerticallyAction; + private ActionFactory.FindAction findAction; private UndoHandler undoHandler; @@ -261,6 +262,12 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { ActionFactory.getInstance().createMirrorSelectionAction(plugInPort, IComponentTransformer.VERTICAL); } return mirrorVerticallyAction; + } + + public ActionFactory.FindAction getFindAction() { + if (findAction == null) + findAction = ActionFactory.getInstance().createFindAction(plugInPort, swingUI); + return findAction; } @Override @@ -276,7 +283,8 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { swingUI.injectMenuAction(getCopyAction(), EDIT_TITLE); swingUI.injectMenuAction(getPasteAction(), EDIT_TITLE); swingUI.injectMenuAction(getDuplicateAction(), EDIT_TITLE); - swingUI.injectMenuAction(null, EDIT_TITLE); + swingUI.injectMenuAction(null, EDIT_TITLE); + swingUI.injectMenuAction(getFindAction(), EDIT_TITLE); swingUI.injectMenuAction(actionFactory.createSelectAllAction(plugInPort), EDIT_TITLE); swingUI.injectMenuAction(getEditSelectionAction(), EDIT_TITLE); swingUI.injectMenuAction(getDeleteSelectionAction(), EDIT_TITLE); diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java new file mode 100644 index 00000000..e18929fb --- /dev/null +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java @@ -0,0 +1,118 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.edit; + +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +import org.diylc.swingframework.ButtonDialog; + +public class FindDialog extends ButtonDialog { + + private static final long serialVersionUID = 1L; + + private JPanel mainPanel; + + private JTextField criteriaField; + + private String criteria; + + public FindDialog(JFrame owner) { + super(owner, "Find", new String[] {OK, CANCEL}); + setMinimumSize(new Dimension(240, 32)); + layoutGui(); + refreshState(); + } + + public String getCriteria() { + return criteria; + } + + @Override + protected JComponent getMainComponent() { + if (mainPanel == null) { + mainPanel = new JPanel(new GridBagLayout()); + mainPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.anchor = GridBagConstraints.LINE_START; + gbc.fill = GridBagConstraints.NONE; + gbc.insets = new Insets(2, 2, 2, 2); + + gbc.gridx = 0; + + gbc.gridy = 0; + mainPanel.add(new JLabel("Look for:"), gbc); + + gbc.gridx = 1; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.weightx = 1; + + gbc.gridy = 0; + mainPanel.add(getCriteriaField(), gbc); + } + return mainPanel; + } + + private void refreshState() { + this.criteria = getCriteriaField().getText(); + + JButton okButton = getButton(OK); + okButton.setEnabled(this.criteria.length() > 0); + } + + private JTextField getCriteriaField() { + if (criteriaField == null) { + criteriaField = new JTextField(); + criteriaField.getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void removeUpdate(DocumentEvent e) { + refreshState(); + } + + @Override + public void insertUpdate(DocumentEvent e) { + refreshState(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + refreshState(); + } + }); + } + return criteriaField; + } +}