From 295504d7d93ae9f4d0ae14bad7f4700f4b78b7d6 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Thu, 3 Jan 2019 17:21:54 +0100 Subject: [PATCH] measure array editor support --- diylc/diylc-swing/lib/swing-framework.jar | Bin 136794 -> 140092 bytes .../swing/gui/editor/FieldEditorFactory.java | 6 +- .../swing/gui/editor/MeasureArrayEditor.java | 162 ++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 diylc/diylc-swing/src/org/diylc/swing/gui/editor/MeasureArrayEditor.java diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index baaf7810270d78db91c83cef575dbd0e18a2ab11..a0518534186b65886cbd5bae8f803303171c71ee 100644 GIT binary patch delta 16150 zcmZu&1z1$g*JqdR?v|8BI+T`93F&T-MoJbG>5yCnM5Mb*x}-xw1f&~jL;(T$E-d=~ zdEalJXP=!t=QqD|?#!7pGxyG&E<$PSLcvl~ghxPwgF}IXQw*b1iN#_6G@^x5a z@5_RZlwyO$5UwP#y;QK@EqdH5B;5aeNaII96!D@UG=wWnyaGrBRtN(LzzX8E-^=*3!X(o}0tm!PLzyF>YQJUjnDQCA&Ru~xA@LEnUv49Pv$r#x;v?@r6VfB$k!4L9N35>56*QOQ)@ z4D=K{gIPvkqH9tQ*+^-e!VO&-_>s{`kt^JX9ktW+)J{C)%^6NpPw;F)P3og=Uw6%I zGKF{#tXZxJf?>o7J^Zc*lf-$B)~Kik;ZfONIwYVoX=bW{9|Xr(W_5IY90($87nz(9K0;<>VANzYSsOXw_j+OmF1T%o(Y3A z<*_8fYt)gT6{(am@4(;?*}KQoO`BA&I1sdd&uTavKKGgd$1wKMt2v&=%4hSfHX6Uh zO7cR^J%P)mCBuZw!5lGMZTWn zc+YXGrHbWA68HByt)VBN2%Ch1j8uB#7SNyZfr5QKKxoWtMk`R^;O^r=X_rCN|8G#- zgv4WXFA6Qf-%dZdQ+l(qY~wxk)7g0~D;?`;HAwlS6Q)NRhBd%o&=hNL(-`x+8 zOQH3a^|@a2VKHY4@pv3zj!tq*w-*jr8;>K%`=)&3g9Wxw&X#IzyzGVMg2_GjoxZ3? zr(_L@xHsbO#g*ullfUCyN$MDGLumgNLQ} zbt&zgB|Fx6{fywi4;viypV)T|SQQtEYfZS0Sy_dwT8%|FH9dP9FiE2}^=(pj7*f?l zX=T-l)^>>+xc{Vkhv$Cax0S@T^f&uOO-32Yy?O{%J9S(io?Q^?*F2f4@VA$>R%bPz zz8~h8mQv%JM@W|N5OHlgnYVt3bffPv#b@>}9y3`}mX-)>EKyBi+c>$5{LFVfSjO(x zEbA3FrQU7A5eakfm{#$%N3b*JnJk9P)8aUI)PLB%+gs)6NVc(6F@qIvj+Y&8hN1NE z`JT7wr!D0%_dA<)_rrFNoEcX$CwG#cO}tv(?M-R^1^yGhTsv~azl|0TM3t`rEbkaC^w=a9jx))Sa-R0AxN*Kq)73J>XZ$FQ{sLqjj zk-Hc{Mzu^t6FZ>U*JlOg=jTV`g?u!!pt8j3|LJOF;lUDbozy%?>ikGsU++%%5U*pl zv}J1>2RvoP2a2zl4j=jJi{MhEjLeFc?B^rh$E(T?~87}`@1)`{W_0|T~^;5 zGJV?5IP9i;)SfC2uk|Qi3tXJ}#UuE?I&t7gph;XvF;Vq#;LCCgNNiuTL#AyC z#)oO1a@2Dx$R&c0Prt@n8&x6CQSJuI=T(ZzU$k47dM}?6*#~v?u^@_4n*Cr{f00nr z<0E3o@?M5X@j`jhDo3=Nk}*)D#L{QtSF^vg`E^0gE6qKXh6$oCo3#c`lVZFGLov!?@Hry)D(&kpV{ge(*gf_^JMCh{f*iu$L~X6MI7Na6u z27#*Q7o--vldAKg9x0p7kimqP42@EytA@M-`agWC4j%gA&i6TU&wGC>qn5!Vk2v%` zUw)tSOZ36#_;v1gWFEq0Z+EbotJRIVa;d0gbp5=s0;Lp=HEJqxOvt5P)gHNa9w;<_ z{x!YPsp26p@tH+(Y9_JPn@4gRlw!+6f=waA{21QpWf#`L$`@uqQdG8&Q*!6LNwlSn9`Eedo1{QZ3&`;X0FttzB z1yJLpd@5)qdk`u5IIw@eK(sUHImR84=hMCs!5s>d{I;%nf~SX)1D&%5kHLaCrD;s- zJa*rg`(rZrsYDCdv^gLU0zGGhHgT*GZnpF-bODa}ac4g*t}+%)`~uXuFfS?PynLa? zJ0XvpLYgyvRZ*z4xPLTd3lDaC%w}AI9Tt1Qv{XfyZ*&hFRbaj1oP)N3!ji)GIl_(! z3-=i%QrWxLKbOgVU@$`_76@v{)g*#7W2yNp#4 z)J^ll>zGFdU5jS-atP5~5RC>;=udhrMc; zx*Yb|GiCw4qv-xu_Hy<%vBO5(Lr#NboS&Q-^!?ozb=f|ZSyOyQAqWZZ#C+odeodc= zYD96?CExvA>wOys6AmO-yuV@#r8;#}zYF8#6GBC~vTUL8)v|4xJ9mVhGkuTyR_Pk* zNFjCqJJEbqh7buRl`$b&5!#m^d&#FuX*OkyGvh_Q2DW{zhih`Yhg{keo#(+eE3{mX zFptewx#{H!aWVSZy4p?5v8+|ewi8|`BdZr9rJyZUYxt>{4hacC8ZAas>$y|EzFF7$ z!Q#q5*1On9VbsSVe=q#IssS~lcMU%RRRUv5|2~dh+}MUfjzVzsenU_@`qCXv3=OYP z^)czh*BwsZ((lA8;|2K2(Gjl2VW{UoNXIzhA-H36ZJowl^esqDBoE01?s3TMoY*(A#e2=*>%E2(ztLMGfb%&L z9Gv*oUIU7A1j2^CIs%bYe&@5ffg1}I-B4hQ{cS%Az(=0w6n}r zNOpE^lznaQ;i}vnVCkY)W&9l?y23ZCy=lgv<;|;gN}As%6&EtY%2>{8j7_XVL;NTx z+gIgS=o!bn&@-!MucKaTxSvZ+WV}nCnej-%&B*WBd26!A$jD>rEPFu+n4C4(RW=1F zWi(MA9waAMeCr`);L?z?;|>4fq8%1}7qde>wS(Nw=aKTdM`QN#^XLe$iz*TO7*(Ro zuZfx%wDKFW1`dAn_

vIXkY45q%G9u<5gzo^ zCxM}2w%+WN!b*Xi>02j|i}(`7M;E(Cbzj$qFjm;-+0jTyyBA9webSB)f`ez5q=lUf zYu()RI0*-By$9J(5Nq{evA0-34j>}*x zM!0YZxfi(rMq_5q(>C(zCoh>1hAvAz7|XnMtyHFRv}n2Ngdtcc4#rmb!vlp4xfBJV zg3ScFfodA7qIPSpqu=#@R@b6OmKwR8q*yVRCMcx{t*DH4|*mlFMhkx?Gp-Ruu($ z`5*DdAFZYAjtxV{*$OoBMR1OB>d|*R)6Iz2ZD@`d?Dh#E8d(@r>$KYsQ+!Izu}2fs z(Ade;_Rby`*p9Ka=jYS}X+K;EE2uugJt4#Ollt{leD?PTy6@izK1WBlN=F*=QwAQ8 z{8Z;4P(%JC&x8EJ2Ek~>tTUZ5+ZjoFk@W5FGF8GDs{-734h3%eeM-B7`>|(%rWc`4&V!83Bh61<&KtGd zi9oIknCA+cS8t`R3k*4divhn1Ceel`_ZBeyw}!N zK-mH4iUjaq zD9gwvgb_I#LND7@IF;g4TZab^>sb9#)_h1$nE8j`Kg);G6sWOFa&3q!1(oY=Ox`Vs zB~srew*SNmvE!znxWl?cLdcy;=mC))4!%PH7f!+>@wU)Y zBrvJrklxW^n(yw^+4ef{efD#}>GJ%XH30eG8P3=J6JadXo~d|OelltJXcjM)P`GFa zq6>v8vJ03=$_r_@Z!zKd`g1iGy}mRks~(E&hHH;pAZ-ZuT}o(&Gzuf*Di@(N(U@zG z{BqKBQbbPX9&`uFDp!@uAj_$T&GX4B`p+h2#Jk+t`o`ZIL>KA~)?n(>%;-C_eH*aA z?5=V>V{hVeT%iaI;4z(!#R~kHkVvfxu^OnC05{NbRyk>7DZ?=;_n^flG)jQN_9 zb*Z>@RYh^RIk?%M)f~k^?v0Rn7S~(;L)mKgBv$fANhOvsw%(8Yp+wK(vRd21o$u5} zVfE_72q!<_D;lgrc_NOg#`i?9BRNwQrAqoy{4^>1o6oMxz3NP=RcVvo75cNh#00?zOAuwzI%Aq>2@H6he!9Yy9O9 zsdoIs(g!o%9!qByEAH2zaG^z!GvtbJwglq{-W?H~kv>mXbHFByxvx zl)Glh8H;jt6C?Q{e0()=yXO&nbtofB@W}jE2Hc1wV=QF#*^OZbt)yr!q zJanRcbp%1OX7T*Xce2bvr;coWdC0VGQ9XyQ#~F*GQ~&O-1l#^CuZuoHe%`O5)^*$q z3_Fz2T5m^p8*fZ1dDRN+p5IH4KXzIYhb0wjyd07@&bQ}yt1C#xI`5W%I!NVG9p)dW z>AKsk@Ktexwp&5B@<^q!SHMO@Z>~HhWvJ6}8Xq&b3))>zOV%J&7QtTIG6@;})}PPe zS>^1F>NfatS=uG#slOff38jaaEU+jsm7mddgOzp{{cFm-qCB z&Xbvz$?0KY=VT}GYUATQtTB~vqK8NptY3#p(f1F?C-GI!5sc5t&JU;;PZ0z0Q(3>~ zDHwFuBO)OBi#HMUI_-fasb(Mn!ZF{xi(2|FjH;Y5I#l!YittUx!`MSZg^xmuCneq} zNH5WZlgzt3Ag6hfflP&nidby0-=kPBy^Yu6=l2wMeBE`DhHIuifGjY=W@&|r_HJa= zpt{`&#)a61d}|?T*}6a66cy7R5l; zu-0j{ec}nkzPNP4c&nejQ}i2Whk$FMmDEND+%EfvPmwJ3I1+MICh?PP=?_O3%r@{* zF+v5AWD2)NC736rL#Wyz9W$g7bX09m>ZfFmeFVRof4UzadzWFBK>*vNbjvEVqPr|+ z_v38l(F{FmsjpxY8YwE`MI=eQb=k@<|8ENVfnG~wjXJaV4la+BsDA8m6y{`f;pqi< z4VH+CcS-G!YcAqoLD?8jlkN$imnQH%9-tE&{6r&=%VjX#m@=IvBPg74zU!=>S=S&f zDZJMfS_nZnJ}^`r{dzK=H}cu!XWdZRE3ZrN?Y#av^dcx;LfZh+uQ4u8aDOlep__&d z1+AIT!wX49omASw-Ne~1;W5Xgr6hXWtD3mTh1?D7y3a3dK9m`pDJS^|XHM)h7w5ai z?)s|E`<^{eS>HNVeFrjVzj!to6QMgu1zPcyhDav+4>o*)lWqN(*$Wb<@`q zsDJfVwSM$-D}h%T_TbR%LiuqO8e4x zSd#Y2wQ_{e9<)Z8%P+soiTie`XfxsCAj3!~rV@S+#lM5s7g8cg$_O4i?MpsupDi+8 zVY3;NL=y^BT#)ck_K|2Y`H20}RjB{o^0Xgy~Q@RjcbeY4vO+Sa3F3LHF%pf81?>=|U z+qw+dwT@h|(ZSy@BhbJf-ty20k%iR6Gk}qw4r(rl!=r;`GL?*4!WXR$Eueyv{cR=E1w?TYZ%-W^EYl#V5Rqc?sOjY$A07YP7!HT8 zlnjKuV!NV~Io(mhDhJ(GFSw*Ra;Mra4bfXDu<&-W+~3qctau@{M~ftuzG`SU_VIHT zW+x#HYz&NjQ|2@HWQ(vu zO5f%gd_>9z$V;TMVyxY-k~Lra`qkbX{i3S6cTTUQF8=QIbGj!BHLq31yfs@6b%gbV z!_95O-2|iYZROnrdyyI~%m25;7eWLBg3;df$|o zJboFT;4q4YAw;UK9;m(;8CI2VVj#m8T_}jDm=q~D)$V4|8-7lTSQ7p@gDy7%D__G4 z97{YErs00~wI-KLULR>mzCL_#3J>L(oV7?G79LAn^xN<5U&%ieH{wd{(@A=Dmfx4O z{8IPeJ=2jq=SW+mVUR1&7bl2?ht4qtlsg(XWA62vLMKLtUDufr>FLxOjj)+4+nDG& zpRU*LGh@G3S6(ld5y~_1Y*z_AiX@zMoX)8Yc@;_cl&`FBbZ11mWxe90Bp6g9w3&rj zK2;T!=4UnOjJ?%C|gb@Wx}f(J@fhI??TRK8lNvfYRByl$vw?%qOt zv8c!(a-WU4nLQjaw|ai;QEtPJqP;?6_%XD!WrgK}rL8pl(29%l;E!-Rd5JyO;{m|^|S^ZYa%cJ4zqJlvCc>VgrH`5fA<-Wx3p%vloWYIQ_-$zvH$?4ubmu%$rD zQhPa`P51h`{!R}5;*x}J<nW2z@U{WC|QVnngUvippBzFlkM9^5ypu5mB&E+GCz2@H8VeZ17&_o|J@UE zqWAeEG-(OP^@A^p>(J(AzBAJh_Veb=aDvm^bPC$NT`XpW~GwYmF%b06AWn>@PX$pfuEvR!1z?$7Yyx1V(I zq1?MPeZ@*qXcDQ@y=&{`(qby#O}y{}D~3E@ye9I+)O%|sd$KLa=~+WyONQxhjxWom zX_@5SI?rWKG6&fQ-K&oT)U+6)2G3C5xxTBkK#!RFOI<{&&U}--fl}>(=&f!lv z@;*mxnU9%=xhXu(YlCIu4$BgK3YXK;BDim9KCrpdn@A@_l82d7ydgTA)(T4CJdeTR zyOe^KM`n?J=CrT^@zBH`G?^N5&g0X-$F&0Ww@4`ECCh>Miq${p;j^23BxWwfM6Y(; zcL?H``>h;cue-?-JWHA%g`i-!T#Y;8JR;!3*HLOp_qquG#e{Y#>p~#wwsGhsFNiMB z@?C@a!~1#ZMn#zq9I~Wrviy0+;A%$Hw{vJI(w9lH@C7AuA+K^wEto%k=ZbQ(SO7;Y zu+Bl0&FiEYOGX6!>Cwevql|mn_S}*5b-#e3w}jZbGbg*ahg_@l%im_cYopz6HBT*9 z%xhQKHk+gADoe?KWdV*^M!kGDqP#6dZq3?z^e|y=jUg-Duq_@2W!J{nZN-MU?W! zNi2n}mSgwPXZwq|S`xj?$1o&y&Xe&Q^JcOy9;k@oy!kFGfvrPxs#&`CM(vpw+4};G zXoX8QFSCg!VjrQZrhXMDdgD#T0kGw|^GUauk}C;hfQ&bW9yEqZ!Im?lbC z5F;ooSjO?}-gh}FC99K6wAZAn6;3T z_ogvQKNTv6V^o*5Z67Rm`_C{A?vU;7XAUgZKkBf)AbD|rbY``Cwyt}46@GN4aPff{ zPH9ZN>p)crnXq8>S40dGwWI2n#mnxNEY5|jIvomEJZP4b}{|#c?hZt z-$zCB7t#I4mtJ%EsgtC!v_ZM($8xhFrxj{35k|u{C*c7XcHC>rx|qiCzqkDPhkKjX zU!Eaia@u*xcl4vFeM+Ij<(a_YUvl9oS+G}meIM;nN=B@-)KgwECidwuQbVfQnu*Au zf!CyuUT;e{V(5l3+pZc^MmmR(M(B_9d>mvY7-xAo8f-(K#&stQi*Cl6sP#0H0Mh4U zZq;J>gfMnzf{<}4rFXZahRIAjOVL!R-zsxH51Tx;#K(HafQpdkg%v%m$TH?gvz+96 zFMKA)hcV)JpZ+{zC~|%lL8$61>(cO`zb;u;guP_a zQY^bwj|}lXeJU7g-?)b1{!+0hH1To4D`TzMHZ_~j;5xmB>Q?&3s=1^MJsTJ)OOZCO zsQ5Rmhh}ArGrnfHdeA+WzkgU?cgia(Yi^(M`}ymUua1bzQL+B4L{Ud-vaV50kWN-O zwDyO&q}n9b__adF6Qy>sT5;X(Z^HOGG9xBQjLny*=#8~17dTX%6ocpM3hajABG;Xx zOZzMd-e>Qi($&3;HBISPk@!tcb1$uipDDV#t4Uk2{m5EMKqiHDt@oiF&4~O6Do?d& zF^i*8u*m@`AslI-*h>zB;+VmpUb1!OpDa_H9U4+pex%w7Ug0gTVgG)GfX0r~3cxy5= zg3s?!ckR9-<$T*yK0np&;{$j~vCfzc$I`D(HdMfN6qvLJ>4?cYXcaq5qX)hH1 z9jQZF*YPZCne(JDx<&r`)5e@->N?GCvFuag--8674upSaE(dL=i7e3*4E`=$#*FpT zka(oftun2-s?LyD>Q~PqKKVo1^V`M=SIK9s_ks|=q|7*`4Tbp757LC21(3(5GKcnP ze01t@F<3Df^t5IVS4PwY?sU4vi&xl1NPfI*u*m}#hCOTW*08o9BHD{kKw#SvC@M?v zRxj$^C~yBdTj=YjRlP2wou=)f%Vy;O4S6g|rYOhWKT}rk#uEWG>_U&Kdz57D1HAHC;`<6}Rlo`5tNNhbba(=rQ+ZE}Ru<;+{dt|k)d0(n6q7SI?V{2UcD zPs14JG>Y^_g{qT4CFjY)8^RZ_iBK?>s$?C0%nf=Hip>OCYT7?Ie=PozcuY`{3m-GD z3vK*8?suD_kGvXm%A1SyT#SWF zD^fgY%r=C#M_m*{v@rk~dT0~N-!`?V5FaZYz+8@Kik&_F-c;e`{lsq)owJRDT6TIS zKV2d-=&ZLx_|M?{6lT)ioBIbxqeeV!m#d_X{&IS|tU*mXGwUH%21gi`O5pe^j(C7J2M0 zP;!)RH%5pXSOk(`^9tY%Dv$dKyg0GS>1B^>YEpXf4C7Lt=TnjDd)=6wy64kGlVPK4 z83*XeQ|=RN)H&;8?PrvLfd97yy<2jKWkQgwq*e|*FB~Ef=2yx2dlQDeWG5PA==FL+H0bL-%2QE= zp$;!N_!{;vqidKXQIO-si-ZpW2bUl{F6u1K79E))8jVb3L-h@&aWtX zXWj&~&6mI$dnr}Qldng~AjwfQ z@WAUHT{dHVh^(U#Us}Yup7W}}$Z)$RchIRu3Nb}jJ1v`;OfDo)NY@Wx9g9;))f%N# zZgp!&vv+FKs)Nl%*swAPt#(56#k~UqI}U&I$#>A7UkUn<(=u1q)uV}-&t$p|6bD+M zJZ3)HeMyxLimZpK<;8oQ?%ane>5?5DGOIEtDDk4T;8ko{UZz5@A?M+TQzXCbK?C%; zl&6c!PC0(Q4vcIU4;z|L`*$Lb7yX(^rES>HkV=#-Tb^Ig|BPz=_k;1uOIv)<^@Hws zBKr-jt5d*zf^EFNz;JMdi1F_cspB1;P@$=(Ae2f`2ZWpF+0st%2(X9aif-8m*OhRB zd8OfiN?!0+l`1K{$Zwu=i~4NbJX~jfj*SSjBocB0t1b|F4l`aU5WbHNld&fCpukGU zX(l%Y^)oyXugw&_aS`JK%p@SdZceT!Z=@XbplZzPX0Bc51|5U0S!igwRa^iT zW0ZIrdur%DDi{?CMFr#4GV+3aZz^UBf|g+yS{o?>>W4{l^~FK3FsU_`0rB2k2UHn! zaAP@A9rP8}D7E&FK*TVon-A>cR)8*z23;TSg^Ck`P@qlfAT;O>1{ej}s|DJHdDx&0 zqU3@VXM#bBF!NB>FwhcAh#L-)yYa~|5@dB#?2ZPR-8ju24{|}fZpJn{xxrJQCwQPV z%U2x{4I+SY;ee59SKoqe#z*b;dr;F2M{ySD5yo}f2=XVSU;^!b2Lb9-3F51jDhJ&h zJE^s-1ohlpCwDEVA6B)d9>jkm6m9~|-|$hkg0OC+oE;!j^lR$;c&pbNfKO$}SHlo0 zz6?UH?HmG~!(u1UO?Ds%&<-PAcM71zgnpU;AfPc&;tf~w1n4G8YuhG4)X3Mg)csGR zmH>~%kgl5dUM>j4E-*amUHN`BiQ-s`@AR&9f%V5PHdkRq(4umh5Xm0b2fWYE$b z5Ue+$*MBem{^i~UDZ_BjcR{LuS;(M!yC81ZU-~^Dgs;ZKRb2&GsbvqO4J(oEgEVin z`yd@yY2a^(=>Vkl-A|65q&< z2G#!#!ho5y{|=bk5xG*wBXN;Hg^xfO*JSxWz0geovv$DkWT{(ZaAMbF)JGsD7>B|U zz|k%NNF|})PHyTOXAU-~0QG|bXQXe{_m{b@@B9OV6#rI;2uk+jk25Sk03r^#KWdt5 zN46g=q>%ylN5CX-aO}5;m=poz-FPt|qUZl|>|Jq0YQ@un$gggH6F`N3-ZbQ`vst%@ zqO|{k|2eO9_uBZsj}!c$0uGMl78gR$O$}UV!LL6))n9Qb1>a~;!hel4{L!fN^07T#D!|)3OOy z=%jNHC#P1&bHJcT#+3%zbq->Lxv_sGMJ~L? z)4U^uieCJ|D_sB@`x0pR4(QI+f(Hkhd;!9T)hfTztycck(Oo-K?&qv0-zE6<0|l*6&SvM-PcWPB-bGaYg#)nK$mrRqoIbjf&m||C#p|Z zn*O7|b*SNQ!c@p@<*XJ+@(aMxCH`9$=6+tGp^ot2yD*Mqcz|Q`;)Vk)9^;VaI=R5K z=m>yz3l7?b2Bx@LTcXF~{Gj|Fz3-L24*nlKv>5>mn?l<3%eiBLD`Wyj{OzHFiue~# z7JvT~1^NK-&lRZv%UAFb%0K$6wJa=ye2lD6>p+HsOT+v3l;n-^7taQBn+6G>Ng((u zCWE>nfr(+ds4E=`^_7keYJvjB{%3ytyAlQ_s@u7giS~c+zzP|b4gOgh{~Nzb_dob- z01va>hz!`?VE!K+8pt3W5>1F7X-Sx6nqjSiN&Mveb|jF1C_ zP8NW?J??XLuej)-J<34Jvq8U^1H*GRd}4qBRRUbWy<4_Z4WYD{U^XZ<#!VFEzn)ue z2B2>Mda+wjUt<^)f&r$z_TryS#J^Kuk|_+@ss%#*&*%>R?hrr52?rNy^6y;KZ+2Df z!8JJ*^=H>Zz>l~8@nbskKw<7|;{ool55UCwt-#*v?}9lb<6smYn5&aW|2=TUhOh9F*G>4( z=I-CipsZ;qE)g&h|G)HB{+hX3ySqpd4EJCu3>=+(a~Ic~VN&2S+2=Kd2a nOnWf=Ea6Sl{=d$2WUp}WW{+eOnHeD~gplk_w1gy5`M=IN z^-aHj*L5yW_x-s)_ju;}zE4{p?rbG4(Ip)WOne9g7XsPUdZ3p~#D%*9{?#1YKS`F; zfPIZmj#R)rl_U=^qW*qhCp|?%{`yCY7=zLyWTE(&ry7JdR0h?Efl8nniWoe=1p*k( zKi&|a9I-R=zhami$}SY9@SBnc@S=d>oGKEQ3gAEB4<7~PvM)wK3wcJJA!mp zT#nc#_0nm}9Ci&F+N%y%3(ej0>VHMa?>CHAKkAySp44bHJyD-}uQC_42)I`r$aMGO z?mJL(WQ!hWw~syx3e1!H(z|9Lk5Pm3S>sjo)I&`>?%1jqr5mITvUD8cSK=HE>HG2E z4U)8dW!#0@La`FBQ%yAV`9hO%%f`4DduTbNi^a}qcvE?ny>l1OAy~^18j12&V%{E1 zaWQ}RWIZ!cE=7u;IT5#V+s|!E)XnpC&7es1i~p8YN~?41+`RL*g3zTwX)vjA*LUCQ-nDlOFtUe7tyx-b-8wLIo~DA=6>hcx;D>(6mR}l87v->^B3Lk zw8^F+9!;o^tm^-)L2xBvkF5uI7#RuSRw@`D(DU+HjMYWt84a#Z_MVKD39?|J*K@E18H&@X}L^Kgrr310m&HoWs8GWj8F;;Q*#rE=)cfs?mx33CO-a{Mcm*Vei2)2b;@ z+pk-Yb4YDmVWCoTC@5mPxri4U$s0)U3_fNkJn%soUZ?*w6}VSC=(;A7F(=Bheha3e!mW5mr}p0Q!Oj!BFH#b<%%zL%K6qVv?M*xH zvl3zW#v9A*w(diUK5>T6t1XG=Zv+sx8M*>7%FFX7me*ie=}vEpoFACL?(wbN?QDc| zq<@bOYY7}ID34x?OQytSHyL@TE`Pzg$=NfoRncQ3vwKNQ<<3(#^EN5MfpR*Ta}da|0&)|xj&%zGmk&UnYy>!7T%{sGM5h5yYPhQ4pDP4&WNXmfpT z{@l}|Dz&=Q|K4$vM>xZB+*73X#+$o?_6vs&_HHY!(p_e5kPACgn4t+*Ci64y$zewK zo4Bsz_SG`Ta3`}*8iWw$5tdnhW4AB-og}pK|aou9u5m!Ep+;4i;5?rV8_BBsA z1H-cznhrPVpf%x-kFIo<96Ur^B|03#ZF||ZE&1WDWM{jORFf6cvT1O0L)a{_Hyh>k za^~?zWy|tvx7@HRQf;MY0X3v8rCtYGW#BUATE=!Sy$Ryu_u-mc5^Z0bzhgycAe!^FlWh(o=scz#$er0Rf zB@fsYOR6Qx>BbDvAieL!0AI$C-BqG2Iw zA6TOw;MyZfdx=PuEGwVO7d$kp>`IFEVBvc&#JeiV_C7c%VCy5TJaNJ3fS^x@$Xl@A^tz?rYN!z7Exv zWMjS^uHV}XE^=2CN6cD3z=A+75JDij$i0r}Dg{7{31fmcn7JE)%WsIsB2`Mm<)L0sOZ!|Rc)>+uGIJx+;UAO(z8Vqkb_*7wgyI9TTnsmsv!Imyu z`9!hA=y+Z)pLtAJbiaGCJ#h5t=ADtJoAZbt2cx4MFn^LIoU!o!3MpBZYX*Zenk2)L z#mi;PFiA#u51uSTk5)GR3au<()C7JmfpRY`PoPcpb(W%nAr>~QNP6{0w{(ftSROn` z>UJWr&>djmO0dE&rfkb+zVIrk{-*v(v-6Dlv!zUJtKc^u75i@S55DfYl2~Ce+(>A} z+}5#d{yJlXF41L!$UMM)@P!l%dTqX*Ee9qOS^2}974Dcj^d2v;?`1;5+Xf!TzCi=d z!Os1gn>M1?q>nLM3e(&Z7^ru?TG6W5eM-s@y&O?ipR7>)sP0M`!;@PAfmepI_FC(= z5bRh)CgJ2y9dBud3`akFhv=TIk6Xr0g_t--idIT}Z|-c|dKK<#s^io!Z|=}DKwc%$ zcrzwY9S;F#B_3#xpLbNpd_&EF)&G(cn}O{yrN!a!{H-p-PM^|&^Ai?&66*1l1w(9P zrFA1E-t4Bn8{k5Q+qCaHAl50^;M0~(Yd`0W~ig7-Ldw9ya1b{KrQyw+m4p{ z>!y8OS+%!9MJp(_HIL>$IBV57%m)eLDk@e8CG)OL!8fo+Mdx^;1Vcx(n+Pz)ttH%K zp41`K$J1)tb)@^!8AetdWpj#LoJ4g<{Iq)J%UKp3J#aKCm2D(aius>^7kTUZLXTIv zMy1!{W$AQSbnNi;G|}RPcPHZa*k4FtZJM-21LmE)Hhp~fHYU4tf~Ecpo;B4TemcEb z{yM#LTX4f&qDAN3vgYV-#%=eBjf1$InN}Pr^OlV$^HzMYY)cO>&mQAbQ(U>cD=t`Z zs7|!BDid1u&Da7qFc}k}7{tSTAz@6_vQ96jhThZ6<1uEM+4NvwY*oP%WqVg4?X9nV zBW|9?>1)Z8e5{rPfCf44Oyn2aQP-I2HbQDo4j1^fg7+=XlauO>Iv$@{Ceo=t1`nA{ z7rK3ETM6iOos!}FyxFp~JYFuHnY%nJC==;OX_OqyV%fM&F`o9Z%vCT~*`M}4hqWs0 z)W_5cy?vvi6d#53IU7}CsW(aD-8(K9kFeb}hGY)#CTKfUx(m8qO^x%AqaU{xHNCI(ot^2Pyqm*6lDTf&Sm)@ofH2-Esg-iym{L1DB>WiD^b^zehxCtK zrj;YCP((JLPiaf&`#YFeA&U1>cP3=+C*epGjKJ-O>9DZ*{#M`W~ z(a{A~J!4$6!pyTt6b#imQTcWZ3<0>rKG!he0`VUhTV@i(w>DnhXKy%ICDqpQ8ymhi zz1c!r_|Z^S{oCrcaDYd0_>|m(pZK(RSU=-wCO9o_{)F6qRHfMVNxE%neq!z|Cm{QF z$=Wn4mM-o(bhV*n4?;`)+{h@RTk`Ug2g_E2^FLZG-`EL9{SZ^RH!mB$GX7TX^#T7Y z(hYgPs5rXb1rDFC#&Au|ZDV@G_j>Ogf-(4sk8 z4cqJq_j0*SwaeF*bdRk^rIUCB5(2uG%^Y@|qd)xZbnWWl<%Q1I2H*_-`fcx{h78#J z)T+z3B8*J!F9#GG^FK_nEGu(qFfG~)XZk)+)Y%*4T7Ay|Gd{&K1!irckV^cXPn=fH z*A<$)UA{NJ9CQB2atT71Q`DJkT{t}CrKK)HR>NnnDeJXnKJH)rs0jNPS!M&Hb-LE% zeMHK+Fa@DuxJ~(`$e2#2XW!?8H>$-2Z@#T}5st|2xDudM`=nWNT5(~rXJ-Fe z5L{-Ij! zRZ%qO?@BnX-)11Bzp1<$aACXk!o+UUO`bfDlGH-kUR^kqvD}{1%+!QTn@+Q#b!k%MEk-)zyZ^=sOVB=W_EnAKs2 z>l)A%Jb7p-g_cFwpA;NU4*M1uoyydA%LR2LaJscmT z@-}kDwN1$^?})a~%Dhj8CL?U}+JU8K5`&G#v5firOZaWEPzFM;QRyeaZv!I-i>8=V zWxA>DWAXOmvb=iOx1+6Gq`xHaNsNz;lhW%MWp@eF8|Y+q;ay}#XqR}=sq^L(ydD`Z z7P{**f9wt2jIns}r49QF4v_^-n?Ojd6$4cy|2ZofQe~2j;|8x4>U-O=E^9FnV;UzS zb{_h(tHNCLtBZOr7y2x!ssrh-g)W_)JId?j(UIUe=r#es%migZ5M5=4Tli3zQ2g?^ z`cAh*#erFonOVDMfL#brQ&BNVH=g!oWN43S^y14~oH_fqh~;vIgO%8}V|B_5zCVvM zQB2e2E*s}%@~_cm3QAKbBwm(UV8LU*k)Us~B>!#Rr=u<}H_tQV1mo_)p={XkF2#j= zyaFn^a#ap8`aF_V4m6{sxbQU#c?7+R%p~!A4VHG*tShG{&6a&&EAR&;SO7U zpm^tb<6d?Be29zwdzM4+ft0>Mz%0Me=ZgM7bGGl=ryfb}OIO#A_p{-*id<#Fh1p4b z`{RSG5uMfga|1mSeU%xpnXre{ss)nvqVb&*`yKnB?6n!?f>zEVtgnPUoOG+dz z^j+Gmua$Sx>-qP3Qjgm7=jGI-Z2D<1Z3k!GaVj0StMPMJ1y}3p-5SW=tT4lVUfVPrs$SkG9IJ(sWW zSD5nwQ7d;9olTEU(BYFvvz_wJSq{93-0jr5gQB6$$1eU1*UIcnsVXBSyyBe~UkgPw ziDh@s!Os6G#wbk^Yr6;c6K{+9CLVN`SUf2FzBoJWx~x2DsZD*sr0-U&XGG_BnOhgK z*jB-(d1G?X%-3#<)+^Ilrq!LF>%G| z!sLYJEQ$4u;Q+ge#$L-D0&$JAEIw?E#q+xwwSh-epwF$c_+T3VUhfncNu$F{8*CqG z{J1cR116F~6)m8`^5tfu+EdF#7M+(IdEe?rt9rk;&GHjuwWN9Xx8+~feO@N~j{bHq z+$E@j$EAVxD4XY62CythFmy$~>BYX~>`6DX8Mo;#n#Zw=lRF9-UJ7x6D zEj(;Sur5+6&VB#qffwt-jVhV2XU4+UR|OA zowhEh;@s}@IYh*Ch zx&!6gt@Sj?;+00aN~9B|Bz3tPnQ+&x#BeS?US1{Vi3Z4mN+ol9nz_oFEDUJRbZiq^ zqGVvye@Shzuc0JilD|{RI4W8k;7uPocsW*k3FaTv<#C}GFpW6SJ4ec_G_gT0`E<~E z_fv;$@s|)!hE876(GO(rOYP}7zvBgvAO3ULdC*t3&kVjvRG@}HM9_yFa>Nf;Ja`br z2IUESfU|B!m#CT<2vg5=gW=_e-89B!?z*cfMsnSqt5rp$W~Mi1IJD8kwW49N(Z;-C zyqufYRLNecR@=SzO=GOa=i?fn{j(+S&yI{4KH6i^$-JYtGK+yrGQU2zd*0bj=+DCx zvWgh2A(0sLLY$L`62h6g*Q`dBHxBo5#ieT;TD?f?F}3rKWN;xzM(iVQ0ok1Mp)PJ- zZw`yc5=Zv}oo}QN)wdU`HiWIpH2064ygSYjzo?N3FY~|D6RaN@<>YVP%{a5j7pLLm zZ>;$(hVIxoL$Du8pSmJUct7gWeHG=MaFU>B^aiW~LnTg<{3W&|?YVDu)Cg_iWOKPZ z-EQ=F-u|ZM&-lY_@m8dQOd=mg?A(^U&`m&>c*EbYTL=HrE2}kc(HSyPx4C*sSQSs5 znf>^ls_f)ALUUSHXWy42ogI5BbGI}@41rG`qz|Z78HZh)oUe;FkIJa8QvLD#%_IC9 zkCfGPSUpPO{mZ+fzh-cFofzSpz^xEhJDiE4U-*6?L#$V^fAgI)(&AgJ5^8a;8}k(F zjraFMv`XZeaSTV(8sL>Iq-@2NP$*MPHd)1M5@RKJXMDeGTImvD|E*G_F{Pq%;eF!y zvS;i(7tfWL3;if=RDIIQbHhDOE%PJP!%ds6{jDPF(?c)}*Rz~UH0ciHb_|^jM?Suh)fu|DAy_7uv=RN7;mKFdFdb@hZ@vc2g68UH z_by%6Qsrrl#m}fX4rqP3j-_t)GS!ZqHNK`x(&v*q_GLLL&pavCYrEqq55}DPDEg$O z30rja_~x8|{)er@uQLm93qpEcz^~73a$lO_Z86)N79pXtGW$%x8c4Iz+_DnRT3;yV ztlCJzmN=kKw|gRoN#|)Lb1u%&tz%)22IJMZ%GlLZ^Cd+>%sPr3k-9k}S;F{GW5kRB zo*vmJXAvJU!}?pRSqN@S(Ytoq`|b&s8+&rLYqR%rzrYnO3!ad?!dEkO=Y)F+Hfuf* zGsnKt(f3kwF#hTb@wSfv<-sqME?Q>2bQ+Iu@vai-mQg4iVo|F)*u0^9Ct{X7cp&=ed`hZpmquL1^P-1@6}KvT zo=U&5Z%-tgez9-s#{cd{%$9kA52ZR`MZEM#Hys0md3XNtBp<`4=DWX`a$iW>bV-N> z8TB`jObSO2OFv8a%+1e4O0-n}DH>~Oa#t?M*1mU+GUJ^O>pqTjNHo*CLt%JG;o8mp zt-~^!9Z}klM6=sJV2{ZY`==uMxV>M z_B`dz{HfM&tG2ha<41V%%KOpbeqP~t$4*Nk{9%8bsy%jX3uQPLn^`~QVSb_`EQav# zexiiemGEc9yD|BxyyGUd_}9zfs%DS0CrmD-@rWg=`pEMJ;ioV6#ScAncpE)0#OG+O zv|#wkTsu4$GV+-DN$-9s_q12pLV(f86IS!ROp66Tk5dftugGa(|fN)Um$fROriyxZoZ& zQ5Np&&HuJ7#ax_Ccp{%ci7zfSGwfpW)YE##ZX0)^;%q+J^m#2#ALX zu+nB`H3Z%snSWfvP`GABbx{o-`Lwkr?d|tDw|Aa88dqzMwP|vFHf+>es-D&N*S7@v z-_f$J_;Q)=ZSC`09g5#+g^%D38tF9JJ~k!KN{qhfguw$Tp>fBAe4G)AuWdZ`Eo%h_3~2C?vBd8%?K%Re(DlEaZ~^6&r->7?UC}?=Y%fCCBiop zVxPZsuu1JdA|L?dDLxmFdWzuZVGO-xj+g(O-9HL|-p{SG08Vit&o> zcYAsLN1ul40~p;s3flRu_w&v^4Ndnbl(V`%rnX+`eY-z!$0lTRMT};v&>5dpRgNGl zTl^B)VpJhcof#mVMJ?rU3+N<&XtzfO+~FwOh#lNv7fzZrC`^#T;5B>+A7lT_X`C-( zP^N8=`I0@UP*oxzDD`q+B=_Wpiqwc<#xMCLuT#CcNsY%(5PpiT(-C)5wl?0GXO}oK z^%XK9gp*3vQY#aU=#zM)sUF-d6sL3OSK}iLitFDvk9e&7eCqKdm7m{3Y{?t1{tO^5 zQ>#$lb#>WQ9xT;#94yKy^@W#kRTJ>f-~Q1s&{P=Iti~m3eV5p1&*YVtxcVAf_^`Mn z9#c0@GZkU;$WwTEpvId)b*>0=I9^R$auJb(CrNLAe%bDZY;E$MSkUZ*SNr_4@?G2! zY8gMfM z7kHyg%Yv?CkNl=WwVM03+xPOm{v9GU%Bxqz(|QpPFw9STBYdPDko+`v|VU zc^J&&Elti`DSKbucg>JP zc&M7gq35{mN)P8{`5jp}M@MI(PwH4eG9)A>=G#ri2PN0qB^P#u;ps_6Keof3o>S`= zvgnQqn^byxY?6B!!EieiV&B+rD0%IYD9_`oa{dIp9Z&N$t=Te@jvn%}dKPFN3y~X7 zT|Mv0)d5TO#_@jpG=A5@oe)Pj4^F_S=3O27T2kvsfAyoAW$ObyCj~r$+d7S!I9u%> zcD(zkHx4o7-$l1Cu5^U%UzUfh+iq>yjD9A=VJ6_gNUbN)2|a#ED(oCqwncWj>S+2#2Eu%!Gbc?g``fP;;1u8 z-yuK+qE+|;{jr|1!Vc~APPH!{hhjDr>feKj0hvC*q*DIg{2ySdf zQ%OCKCPk6iTDTFi@@g3(n});WFs)^u9#hmGz5IR4aX>4=uBM z*NAS>eF{KF_F#t!MtJ%`|HDbv!!aR9|e|^4#D9`=S^7v|chz8hB7yl;ftTb5LqrJ;Pov-&z3Xe-7ET z%zz>jloFr^i_>H%53N9D)~E>5A!9CnM}GtdL&yc4X@fDd1J#C5B4CROcD{*04H|pnvsW7DLT`X9IMZB}PCa=%XY;*}p_MuZKU%-cNP>DbHoB-ZKs5Ek>0@n|r zf~Z#JAyf?6hrswDR0Y+dJ%Z|>TGx-D8mJcZJCqI>K7yh~0RaA28>KM#4%I`o^1nk3 zP^~ZDe-kJlgA?F%(w|z;0cFR(2^Nl_rYMEP52!J!b^iy{4Apx7r=|82YJw~=@1$MZ z1UPFZ!7>X06+fXuK;ADX0}9{y3rYt&VM>F-=n;y{Sf?610Q&?=hEmg?oT|A%H80Rk z4kKqijVP8Bb9@&p`54$|@_${hDhg%c1(70%?2AMIJrs5hi58%lxBL#eHwTL^eFp6z z0HQUKj?(mCbg<3~r+(59Fm{xz6_ibgoXQaD3g?lGsHpg%pe9WmslipI0b)U4C`~4) zff}a5_<&_7j2k682LsVi*;DkX6dMtsNd)}(9o~OesUQ%6GvR%g2Tgc@Ru~LjjImQ9 zTP*|&^gQ@tn*yN6Ko9ID z4~ahWN$L#xg6ZGr(=Sv+zyb;E9PVjHoxY6+o?*hMV8s?_7$ZQ8h3=R$uYS&uhT5Xh zMk+*t~a3>NSeo8XyHd16nkWKlfc zcpwi$Ix_f6M^Id#1`o!Fj8o~AGmHkDytd#FJ4^5`7nzlO1tq|U|2s}We2_@55CN?h z0fO++_4@Bn1A$1K38KFQL`nfX6zE~m;we+)0*3pM3IY*7gETA$k-|VR!S5kqMF4st zYy_pOKn4Mf36)6OsWhV>C?JHf0^bQ>^r-cc?i?sCdWjUL%;1syU8d9H5a4|Z$Qnl3 zJw6AcWIh#__nL0gfyq;XKjAasIF2Eqh>iu)Gc`Z8`qsr-Lj_upf~0( zu?3W`q<6SLFcH{4$UGB>K$h)g6w441j2hX=6+iDy^?=Ky6UZWYCStdBWG6HK!bdQD zBLu{Ve~&y}Vvs2E?HO$*s73OTM_4^*2l?Fohp%euZ;Nyiw1Je*`f(GuqA!D2m@b|P zp!5A-2IPPnxV)fxI*0@eU}zVu#1%r|VXiRjqI`7&jLT%_n`Ywhy2?ISI}1DrMCMEi6HI^M75Ks9 z`xVOHJ?TaX5;C*@0Z{$5?Tw!5W`zIJfk$py)C$VnukQ`c8C$TU#LhT-EsDld!MIQ{ zXHkJPfaD)B9`M)@N_cu4=R$I2DR8#Bf?PjAF7-29Au|6O*-^vTkVeMtTUU!fBPVdV zRX$^+r}(c?vo4hUe}>v4!f=5N@YqXE`ai3k+F1f}K%3@wxh!eGTw?Ul0Pxm1kU;~Z zM@AG|ycKXCoOjjW0ZHUcL?MPKJotpbfrOSlSX_GsLNmbbQaA&(HbOx!(ZWQK(ElDX zAP~_rP=Av@tYp9_EqXFXesM!gT!28L?fzZ=s!adjNr4M==&g{EY4YYC7)s9ngfbF& ziq}I%(G;H1kOq1$2Y+XyV2C+Iu>haJQG|p-Qw$f5K*AZ2@a!&v5sQLeIuBz-LVe59 zDe%B*jez~Aawa!}_&-o$;OPVKVbA3RiaJ&P_lWeb(bL4UMnu4$DfZ0y^8^(*QcS?7 zSfw+bm=J#%#pL}z1EuSR=I{}ij3_v-&gPz)^T(D5kibP(bWv&Uh98)f6u4>gpYgR= zfWmh$z_0-MYH+9jlavpuCvQLThkvrYI5BQ@YQ(>Lf8HWy7%-ClmxKu zgW>>|Ouy&G4JObxfBRp6CZ^wUjhyO;JO9$1XNJ)r zJ!W)$|9h zo?XG>-=Oe0Ea*99@IozS0^A_Ezzy>3%&wb0g(@QR`0si2-*NJ02@qz5DIrn+J&pd0 z!dp8<2?Cw0=ngX~IiDB{M#m2hyt4yKctfJVG1LA5%m(s*MX+9W diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java index 3d5d616a..463288d3 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java @@ -72,7 +72,11 @@ public class FieldEditorFactory { if (AbstractMeasure.class.isAssignableFrom(property.getType())) { MeasureEditor editor = new MeasureEditor(property); return editor; - } + } + if (AbstractMeasure[].class.isAssignableFrom(property.getType())) { + MeasureArrayEditor editor = new MeasureArrayEditor(property); + return editor; + } if (ImageIcon.class.isAssignableFrom(property.getType())) { ImageEditor editor = new ImageEditor(property); return editor; diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/MeasureArrayEditor.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/MeasureArrayEditor.java new file mode 100644 index 00000000..67801400 --- /dev/null +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/MeasureArrayEditor.java @@ -0,0 +1,162 @@ +/* + + 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.gui.editor; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +import javax.swing.JComboBox; + +import org.apache.log4j.Logger; +import org.diylc.common.PropertyWrapper; +import org.diylc.core.measures.AbstractMeasure; +import org.diylc.swingframework.DoubleArrayTextField; +import org.diylc.utils.Constants; + +public class MeasureArrayEditor extends Container { + + private static final long serialVersionUID = 1L; + + private final static Logger LOG = Logger + .getLogger(MeasureArrayEditor.class); + + private Color oldBg; + private DoubleArrayTextField valueField; + private JComboBox unitBox; + + public MeasureArrayEditor(final PropertyWrapper property) { + setLayout(new BorderLayout()); + final AbstractMeasure[] measure = ((AbstractMeasure[]) property + .getValue()); + Double[] values = new Double[measure.length]; + for (int i = 0; i < measure.length; i++) { + values[i] = measure[i].getValue(); + } + valueField = new DoubleArrayTextField(measure == null ? null : values); + oldBg = valueField.getBackground(); + valueField.addPropertyChangeListener( + DoubleArrayTextField.VALUE_PROPERTY, + new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + try { + Constructor ctor = property.getType().getComponentType() + .getConstructors()[0]; + Double[] newValues = (Double[]) evt.getNewValue(); + AbstractMeasure[] newMeasure; + if (newValues == null) + newMeasure = null; + else { + newMeasure = (AbstractMeasure[]) Array.newInstance(property.getType().getComponentType(), newValues.length); + for (int i = 0; i < newValues.length; i++) { + newMeasure[i] = (AbstractMeasure) ctor + .newInstance(newValues[i], + unitBox.getSelectedItem()); + } + } + + property.setValue(newMeasure); + property.setChanged(true); + valueField.setBackground(oldBg); + unitBox.setBackground(oldBg); + } catch (Exception e) { + LOG.error("Error while updating property value", e); + } + } + }); + add(valueField, BorderLayout.CENTER); + try { + Type type = ((ParameterizedType) property.getType().getComponentType() + .getGenericSuperclass()).getActualTypeArguments()[0]; + Method method = ((Class) type).getMethod("values"); + unitBox = new JComboBox((Object[]) method.invoke(null)); + unitBox.setSelectedItem(measure == null || measure.length == 0 ? null + : measure[0].getUnit()); + unitBox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent evt) { + try { + Constructor ctor = property.getType().getComponentType() + .getConstructors()[0]; + + AbstractMeasure[] newMeasure; + Double[] newValues = valueField.getValue(); + if (newValues == null) + newMeasure = null; + else { + newMeasure = (AbstractMeasure[]) Array.newInstance(property.getType().getComponentType(), newValues.length); + for (int i = 0; i < newValues.length; i++) { + newMeasure[i] = (AbstractMeasure) ctor + .newInstance(newValues[i], + unitBox.getSelectedItem()); + } + } + + property.setValue(newMeasure); + property.setChanged(true); + valueField.setBackground(oldBg); + unitBox.setBackground(oldBg); + } catch (Exception e) { + LOG.error("Error while updating property units", e); + } + } + }); + add(unitBox, BorderLayout.EAST); + + if (!property.isUnique()) { + valueField.setBackground(Constants.MULTI_VALUE_COLOR); + unitBox.setBackground(Constants.MULTI_VALUE_COLOR); + } + } catch (Exception e) { + LOG.error("Error while creating the editor", e); + } + } + + @Override + public void requestFocus() { + this.valueField.requestFocus(); + } + + @Override + public boolean requestFocusInWindow() { + return this.valueField.requestFocusInWindow(); + } + + @Override + public synchronized void addKeyListener(KeyListener l) { + this.valueField.addKeyListener(l); + this.unitBox.addKeyListener(l); + } +}