From fb6b1464a35ca8394a2e0880b3b51a7c60ab3f8b Mon Sep 17 00:00:00 2001 From: bancika Date: Tue, 27 Dec 2016 12:19:58 +0100 Subject: [PATCH] tree improvements --- diylc/diylc-library/lib/diylc-core.jar | Bin 230151 -> 230151 bytes .../components/guitar/HumbuckerPickup.java | 4 +- .../components/guitar/P90DogEarPickup.java | 6 +- .../components/guitar/P90SoapBarPickup.java | 6 +- .../components/guitar/SingleCoilPickup.java | 34 ++-- diylc/diylc-swing/lib/diylc-core.jar | Bin 230151 -> 230151 bytes diylc/diylc-swing/library/main.jar | Bin 351319 -> 351437 bytes .../toolbox/ComponentButtonFactory.java | 6 +- .../swing/plugins/tree/ComponentTree.java | 15 ++ .../diylc/swing/plugins/tree/TreePanel.java | 171 +++++++++++++++++- 10 files changed, 218 insertions(+), 24 deletions(-) diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 7a02be5b5f4e512a3d0c00a8e93a4fcc1124de03..b935a0b094003cdced737e91e0c19526ca81baba 100644 GIT binary patch delta 4689 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 diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java index 61433e2f..b815fb08 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java @@ -42,7 +42,7 @@ public class HumbuckerPickup extends AbstractTransparentComponent { private static Color BODY_COLOR = Color.lightGray; private static Color POINT_COLOR = Color.darkGray; - public static Color PIN_COLOR = Color.decode("#C3E4ED"); + public static Color POLE_COLOR = METAL_COLOR; private static Size WIDTH = new Size(36.5d, SizeUnit.mm); private static Size LENGTH = new Size(68.58d, SizeUnit.mm); private static Size WIDTH_MINI = new Size(29.3d, SizeUnit.mm); @@ -100,7 +100,7 @@ public class HumbuckerPickup extends AbstractTransparentComponent { g2d.draw(body[0]); g2d.draw(body[1]); if (!outlineMode) { - g2d.setColor(PIN_COLOR); + g2d.setColor(POLE_COLOR); g2d.fill(body[3]); g2d.setColor(color.darker()); g2d.draw(body[3]); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/P90DogEarPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/P90DogEarPickup.java index 9ac491f0..e4b0a84c 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/P90DogEarPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/P90DogEarPickup.java @@ -42,7 +42,7 @@ public class P90DogEarPickup extends AbstractTransparentComponent { private static Color BODY_COLOR = Color.decode("#D8C989");; private static Color POINT_COLOR = Color.darkGray; - public static Color POLE_COLOR = Color.decode("#C3E4ED"); + public static Color POLE_COLOR = METAL_COLOR; private static Size WIDTH = new Size(41d, SizeUnit.mm); private static Size LENGTH = new Size(86.9d, SizeUnit.mm); private static Size TOTAL_LENGTH = new Size(118.7d, SizeUnit.mm); @@ -52,8 +52,8 @@ public class P90DogEarPickup extends AbstractTransparentComponent { private static Size POINT_SIZE = new Size(3d, SizeUnit.mm); private static Size LIP_HOLE_SIZE = new Size(2.5d, SizeUnit.mm); private static Size LIP_HOLE_SPACING = new Size(97d, SizeUnit.mm); - private static Size POLE_SIZE = new Size(3d, SizeUnit.mm); - private static Size POLE_SPACING = new Size(10.1d, SizeUnit.mm); + private static Size POLE_SIZE = new Size(4d, SizeUnit.mm); + private static Size POLE_SPACING = new Size(11.68d, SizeUnit.mm); private String value = ""; private Point controlPoint = new Point(0, 0); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/P90SoapBarPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/P90SoapBarPickup.java index e2569cca..726df5da 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/P90SoapBarPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/P90SoapBarPickup.java @@ -42,14 +42,14 @@ public class P90SoapBarPickup extends AbstractTransparentComponent { private static Color BODY_COLOR = Color.decode("#D8C989"); private static Color POINT_COLOR = Color.darkGray; - public static Color POLE_COLOR = Color.decode("#C3E4ED"); + public static Color POLE_COLOR = METAL_COLOR; private static Size WIDTH = new Size(35.3d, SizeUnit.mm); private static Size LENGTH = new Size(85.6d, SizeUnit.mm); private static Size EDGE_RADIUS = new Size(8d, SizeUnit.mm); private static Size POINT_MARGIN = new Size(5d, SizeUnit.mm); private static Size POINT_SIZE = new Size(3d, SizeUnit.mm); - private static Size POLE_SIZE = new Size(3d, SizeUnit.mm); - private static Size POLE_SPACING = new Size(10.1d, SizeUnit.mm); + private static Size POLE_SIZE = new Size(4d, SizeUnit.mm); + private static Size POLE_SPACING = new Size(11.68d, SizeUnit.mm); private String value = ""; private Point controlPoint = new Point(0, 0); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java index 96f20c69..f72724e3 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java @@ -41,16 +41,17 @@ public class SingleCoilPickup extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; - private static Color BODY_COLOR = Color.darkGray; + private static Color BODY_COLOR = Color.gray; private static Color POINT_COLOR = Color.lightGray; private static Size WIDTH = new Size(15.5d, SizeUnit.mm); - private static Size LENGTH = new Size(83.82d, SizeUnit.mm); + private static Size LENGTH = new Size(83d, SizeUnit.mm); + private static Size INNER_LENGTH = new Size(70d, SizeUnit.mm); private static Size LIP_WIDTH = new Size(5d, SizeUnit.mm); private static Size LIP_LENGTH = new Size(20d, SizeUnit.mm); private static Size POINT_SIZE = new Size(3d, SizeUnit.mm); private static Size HOLE_SIZE = new Size(2d, SizeUnit.mm); private static Size HOLE_MARGIN = new Size(4d, SizeUnit.mm); - private static Size POLE_SIZE = new Size(3d, SizeUnit.mm); + private static Size POLE_SIZE = new Size(4d, SizeUnit.mm); private static Size POLE_SPACING = new Size(11.68d, SizeUnit.mm); private String value = ""; @@ -74,6 +75,8 @@ public class SingleCoilPickup extends AbstractTransparentComponent { g2d.fill(body[0]); g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : POINT_COLOR); g2d.fill(body[1]); + // g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : color); + // g2d.fill(body[3]); g2d.setComposite(oldComposite); } @@ -87,13 +90,18 @@ public class SingleCoilPickup extends AbstractTransparentComponent { } else { finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR - : color.brighter(); + : color.darker(); } g2d.setColor(finalBorderColor); g2d.draw(body[0]); + g2d.draw(body[3]); + if (!outlineMode) { + g2d.setColor(METAL_COLOR.darker()); g2d.draw(body[2]); + g2d.setColor(METAL_COLOR); + g2d.fill(body[2]); } Color finalLabelColor; @@ -118,12 +126,13 @@ public class SingleCoilPickup extends AbstractTransparentComponent { @SuppressWarnings("incomplete-switch") public Shape[] getBody() { if (body == null) { - body = new Shape[3]; + body = new Shape[4]; int x = controlPoint.x; int y = controlPoint.y; int width = (int) WIDTH.convertToPixels(); int length = (int) LENGTH.convertToPixels(); + int innerLength = (int) INNER_LENGTH.convertToPixels(); int lipWidth = (int) LIP_WIDTH.convertToPixels(); int lipLength = (int) LIP_LENGTH.convertToPixels(); int pointSize = getClosestOdd(POINT_SIZE.convertToPixels()); @@ -132,9 +141,9 @@ public class SingleCoilPickup extends AbstractTransparentComponent { Area mainArea = new Area(new RoundRectangle2D.Double(x - length / 2, y - lipWidth / 2 - width, length, width, width, width)); - mainArea.add(new Area(new Polygon(new int[] {x - length / 2 + width / 2, x + length / 2 - width / 2, - x + lipLength / 2, x - lipLength / 2}, new int[] {y - lipWidth / 2, y - lipWidth / 2, y + lipWidth / 2, - y + lipWidth / 2}, 4))); + mainArea.add(new Area(new Polygon(new int[] {(int) (x - length / 2 + width * 0.47), + (int) (x + length / 2 - width * 0.47), x + lipLength / 2, x - lipLength / 2}, new int[] {y - lipWidth / 2, + y - lipWidth / 2, y + lipWidth / 2, y + lipWidth / 2}, 4))); // Cutout holes mainArea.subtract(new Area(new Ellipse2D.Double(x - length / 2 + holeMargin - holeSize / 2, y - lipWidth / 2 - width / 2 - holeSize / 2, holeSize, holeSize))); @@ -151,12 +160,15 @@ public class SingleCoilPickup extends AbstractTransparentComponent { Area poleArea = new Area(); for (int i = 0; i < 6; i++) { Ellipse2D pole = - new Ellipse2D.Double(x - length / 2 + poleMargin + i * poleSpacing, y - lipWidth / 2 - width / 2 - poleSize - / 2, poleSize, poleSize); + new Ellipse2D.Double(x - length / 2 + poleMargin + i * poleSpacing - poleSize / 2, y - lipWidth / 2 - width + / 2 - poleSize / 2, poleSize, poleSize); poleArea.add(new Area(pole)); } body[2] = poleArea; + body[3] = + new RoundRectangle2D.Double(x - innerLength / 2, y - lipWidth / 2 - width, innerLength, width, width, width); + // Rotate if needed if (orientation != Orientation.DEFAULT) { double theta = 0; @@ -184,7 +196,7 @@ public class SingleCoilPickup extends AbstractTransparentComponent { @Override public void drawIcon(Graphics2D g2d, int width, int height) { g2d.rotate(Math.PI / 4, width / 2, height / 2); - + int bodyWidth = 8 * width / 32; int bodyLength = 30 * width / 32; g2d.setColor(BODY_COLOR); diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 7a02be5b5f4e512a3d0c00a8e93a4fcc1124de03..b935a0b094003cdced737e91e0c19526ca81baba 100644 GIT binary patch delta 4689 zcmY+H3s_ZE7RT@28wHhzSDuC=7@>lYIx6IY$3-5(MFccJPy|6h6ugLtiXh;#bQ0!j zXEH}CE5lUGJ9#uKGj%jypysQvuq-MSMNMn;v)N~@b>?gQKELyG?X~`E?X}lF=el~8 z^XgU3PRV9r*VABdFc{2fuQxgk776n4!UOGL9m;&*nZo?xIZk+6zj6F?jONwMf`p8< ze#3^r)5rtCJDi8WzqP1;o^x^hUm^_hR%!y6y|sn+1n)K;3{OXa&v9aeQ98yO{`9B6 zGQh&UmCht?|Nm;cMHr;&6hq176jGvSplJK&-kF_X}`SyR-4ZSSb52p zF@V1f=nr7s{p{~x*x`2%>acAMC`K2@Asz_+K`97}gAX8#8rpyfP7F^(@EqBN&?{6y zcxUuXgr4KNQ2D9JAL|h(?TGGc3ES8#qXnC#HlR0aLv!ci&`W7=7>V&oRjJwjDB;0Hrbq}%p_T?Pie^}|n zoiz7VF55;dl06Qx4jAdGY?&lHY=hU-gOhdF%O7b;ti@~3L9+05$yizAE4c{2HV7CM z+v80fcDQ%TB}{Pjjc%Co`kP*8d9p1KA>iFegt_ls!?q;u^g-v+UGD=}`!!#L)DM~; zLF&#uGNV>Ys_h9FQvO9}RQ#a}sx4I~U{8)8{0wDZK6DqCsy}Z-{b@&WENsT(htcQa z$=m32?94}KsXzBFT84ai4WoKp3b2Qyq1X1{zJK}lW6afb<0v>=Egjpy#p5SRe)XpG zl@;68b$;szQ2O{C%;52d5kL*(Y&cSOH})LTN(bhE)XlfRXx3xgq5SO@&!sjduQMJRALh&{!yuA%HdXzLuoj$qhHvFXt@ zIRjU?!uByw^-?IigWe~`u(e2OVJrsYwnVZsNTtzi2a@*$wjODhnKfdBDTzf0n6WUw z`*xp5{r!sRA@fpN%*;XEmBL!luXYOC%Ax%4zWSkudv}9jZ+E4!f_W+@^F&WIDV_Or zhkaV6vo)CHaSpqRbUB|rL77X1ECJKacJC;ulU-P<40q;UYRnwA0iD}QSpbs5d{zad zj1K0{D!v6W(X3!j-TKR7=7H@Fsb*_Yw6&x#-YP|3QP>5!hvouduima@Z=>FZ6|4y< zat(Wc1%<9+>2rj%WLG z6Kg@agFD&JNZXs`TtH)E!hSpHAms$?R52He9_sbItPid#Te9Ack*kr)2S(WkuYD|? z&ik)De-yn9hNmvdo6+1;`Knkrt8X1(PQBr^tCT1o+V?ORxcuv@lm#$1WzZbqqJIAc zGr|i=eRQ7T^-&LAVhy;-q_5bgNG{*#73?^c*7=OAz+Ew|l}&r&2J5A!TxWskS961< zVx^UiJD0^uKa!MxO8J6I-GTCwfUJwLh7UnmU@aw1+X5pL?5n=BX=_IEO0q_4Z! zU?uEgP{rGNt z-(T4f{A7sS??Ae|`Tcnq7P4Vuxm|>e9s}pEte-FUb=H^1qrx-K@k8)>Q``LcduUr7 zz?+fewV+GWI*hMGTgFH}7wLE?pMkR&Fos8=tu&0kiezu%>yTcJ<{_A)C5Ag8eH+UK z(hqTbGy1JC^KhhNNu1+tKRJcxqV4$%9u5)8ys5kuMznNeQOonL2E)3c21AJU3&dZo z$mEHx@SZqY!hJDAM=1|La$?5iWo_<5|o#{zyFd${qZ%GOT+HV4N)g_*fw%b?uXW?Mm<0(w=(?NaU zC%U2ElYwF}(xO0dv>W(E3={GdqNx~1hzdKPmqNuPq_4+{Y^K?iabe;Gtx%;hOhf=2 z2$R3vG|SB}F$$n8LU=3T;R1e=Dzn4II0$_&Ttoug3>Ra-ad3o)1&fRr4;Ja{t(=b# z1K?i|BjnFRO*$l!0HhluN&4eR5fAGQCNU9&GEA~6tUB3MGAg&AN)v`7Fr7fpfzF(L&l)iD&_qFel8NoQWHEKJ+M zp;(IYj1zHS$&C}`0GH#$6oBU^kWTFcifYxtH=dT}%MGJoJY{!H5R<_&TZcmlVk%g? z%_1GTQDGJ{04|$F5kOQTb>l4^_(ZbIoG9`j{KP~t6CgN=a@8e?B(R**D+?+w#A7)Tn;-=D;H&3OSA510ZgiJb%w==0@4>GB%6SBzik1Wb{GmCOXO`|z% zoJRe*I*qQ1&vY7zG98Xg*E^q0f(6+k3O4wDwvh8H+j1|P<|kqX>8#Y@)C@}DnnRG4 zLu0%>hr&B^C~9Ob!IE5ghc)FRx#a9Jlfu(y(&4@}lj^yrLsTC1XHy=9f3HJOKIJOU zr>-8&r>^#$MasE4G|eLCyR%4VbO9B%tbkf~wt%+mT}Txc>R>CR!sM;M@iQ0EWNs`X zvGYiI`8;aN7xSpX-WGDsu~3R83psaL z$mfMJDz#pR(`D2{uleLNLx*?gQ$6=}%b0Qsm#5>cY%Le?pL^v@Ifc3{p!MtpRLkxK zRLdiM$y7l@w622WuU1f*0~XRbR4k<1|K&oF3Bx$Nk}M6Cbo*~ridUX^ zxmX^*Hp2Cb#Vmkd7K=iFDND#%T|zx}sG=7`o(`Yt(03^({W5v@8hoe2s9IT%W?5BB@0Ipic`}+Ms7{WR c221M5^6xs?I?du*FFU3|VLgTKuNRa43rx;28vpu{*^XV01A zu+28hkoli^7-oj!WuveeTeb{qTSOS!;bXg>>$;xv+41@KJm0SSx_;MnU-xxC&wuqQ z$JMJG9TMY&O?QLA&R_`0*;4N?Pz;ifmmg^l%Mj)T&m`sx&#}VO@~!=!V>GWu79eD- z2Q>pS}ww5N|9lTq3AUy2_KF5mTM(G%9_|w0> zN49u*>HG)M4H3SBNh5gWM2&1CkIH2OdHgIiwB~oEa96;69=gp+~TS z@Xn~22;IkaqVjW-FV@#Tsu7p2##A7rOjv5K^~d^UiX#X3A?*o5YsQ6cP~iu&8jS!s z<-cH5#*$t(U@=$qN6YKg?#xj;oD~Ibk$0HEP$MkO=UtV?1mR+Bt9gv&w=U=CetV?@ zchKBdIqev}NcK3u(r<*bvTc%ZvkqKS3r?0jYd_MGSPIu&gk+)X6S1=T4cQ34)Cm|B z>(eb9cDR4r6-;pLjV_q-#+x2!dA7qJ!SCI0gt_ls$F{`p_Cn|4J?{fp`ZRtCsUI~y zfz%!QWJax)Wa~39B>kJtsPIE4R9mW!$DW)%{0YjgJ$4_LDnD&O{b?t0EUd=U$I<7@ zb9d3_)cKFlQhV`Tv<&*m)c^%xycs#qCE*eyv^l z%8IS)JHE3AD1Q15W^nu62%!3NHVi4V3wsG^r5&?Fs_Vh*k+wTB56Gu})Qcs9tm@>- z)SjBIde)aI0?yv;+^?mn!eB@imVUpxt1JCj0Sep?V9znEa|rt{+B$}_6Bu?*Yw7Doh)*?kWDD1M_Lt~z>Rqs}_w^47?3f6!W zzJ@)*f`Zqv7_`-FU`cq}?mmnu@02QclzKnzp;Q!z9xAVAPr>iNX4VJOdcDq01EcJN#{rf~ z=l$32KZu?N!*eI)%}DO9d|fCU)wd2Yho11-Rf?1kZMzu^T>ke~O8l6MGGLByQg5DR zMtC8qPcAXMKI-8stPVGs@HP7w$?03Yf?cOlI$n?!xGJV~vT1MJVm;KP8_Xa5s&27l zthC&I_p)f|XHx3Qn1}jH8%xJZ%XZv*;3F6M3Z>3YPQ=CYH*#gp&x>VGhCO5g{emAeTO`wOtOT^pp3A>RH!Rl`FY%aQGTa<7s!L+N^70Gm3kWHIQZNg;qXgGgm<9xZV3*I~y6<&CWAA{GM+TzRKL)&UU z-iRcx1znovp?oFU(nj#PNT-AO44g&3(L4fe#UcDPBwG_-kMvq355gQxQQQIPyJ#+u zZpZMg=(i${ha#Oy;2dxJxhXswZG+QzC`2gprt)SO(c;YoO@o~chV?@Xh9K=1h_70f z&f}foJ#n&#dt-*SV(y3JZ07jcS4WiaOIUli1^hH~l;7Ui%|E8^w3R&^V51CO!~>Lx z74mi)7jh%K?N#4J+yQCi67GT&zm&^Qo(xuhs^Z6y_SEptkSbR2dPi7wvheFJK=*d? z&CWop5A#k2RB@CGBT&r+9*MDMn)v~wn#=NQ4XdlJ@LaUry~;lc1=~J%VS=9y>LVY~ z1^u4&7mJY=`HPcXz%Oj5kgpJ}QsZz@W&`wUu$YAO%@~mhwJ2jl#LHU$l=2V}25=}u z3;}2l5hDRg!i1+18YXHVr)nCJ(8 zJr0vU54B`L;RGOEA1+Y(NVtfFbvu)o2tsKlS(TP-i%E=urK=|K3c%0^F&&^zhx-vC z1uU`S#3X=!jw8XgaUvcpL6IU3U`3>u0B|vq1pT5!5?CsuD7;Cx_(YS=yl7dNwu58Q z6y+WxV!)CeBT50jiV;%)29GD5>hToStb=zfEzOUmGLFSkcIOFVGKA08;n)N*6)c`{ zA{Dw(7AIx^d=)1O03zb48*k~rCz566M3DpGXC{i70D%dVt0qAtfaQ`7K9i`_QXNiA z5{cmBmMD?|<|K+JNNPi7(@{3C;MwP#SSh-oy3 z_0y<7*QU``@tRH}QKG|%>3ZigNiZ){M8F2$&lHgW4>DHct;jRjmRcgk}dDB*6Up3;L=N?5OAdwK)FB|3a+T&% zS5M|rS9{MQbyZ#TC$GZZ06@ z7JccZ*`!l4n-1>OY&u-eLJH3*q^MnmIBj7K(I8F|3>{b>(#X@05#dSV~+ZvH+}$$l|_O z9=|riwTs0pfS(tOe1IuS$XQ(?d#rs}>?-ITmZQVRI`m#jOAB;pS}MOVTGYTwy8X44 za%42i)k=ANHSn(z831dlWT~3vR+XH04Mr^^=Z(wc;cJ%fbr@Mq^{lEU<<@F>GMZ07 fjT|ctmei2tKQ*#-n#H+Rc1(l(S_(f{D<=H`L{1QA diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index d96c670fe3a04fe6e98c8e153561a9dba3ae9e71..1daacec2933ca1de5a69ae396e8b60e7d8ede2e4 100644 GIT binary patch delta 27256 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 delta 27433 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 b4udZgWd-zI!fui_nC=d!lFti3@gx2RIyf#K diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java index 5d7f5600..3edc57a9 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java @@ -19,6 +19,8 @@ import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; +import javax.swing.border.Border; +import javax.swing.border.EmptyBorder; import org.diylc.common.ComponentType; import org.diylc.common.IPlugInPort; @@ -33,7 +35,7 @@ import org.diylc.swingframework.openide.DropDownButtonFactory; * * @author Branislav Stojkovic */ -class ComponentButtonFactory { +public class ComponentButtonFactory { public static int MARGIN = 3; @@ -127,6 +129,8 @@ class ComponentButtonFactory { e.consume(); } }); + Border margin = new EmptyBorder(4, 0, 0, 0); + label.setBorder(margin); item.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); item.add(label); return item; diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/ComponentTree.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/ComponentTree.java index 6b4565fc..9f02ae42 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/ComponentTree.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/ComponentTree.java @@ -1,5 +1,8 @@ package org.diylc.swing.plugins.tree; +import java.awt.KeyEventDispatcher; +import java.awt.KeyboardFocusManager; +import java.awt.event.KeyEvent; import java.util.EnumSet; import javax.swing.SwingConstants; @@ -49,6 +52,18 @@ public class ComponentTree implements IPlugIn { getTreePanel().setVisible( ConfigurationManager.getInstance().readString(ConfigPlugin.COMPONENT_BROWSER, ConfigPlugin.SEARCHABLE_TREE) .equals(ConfigPlugin.SEARCHABLE_TREE)); + + KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { + + @Override + public boolean dispatchKeyEvent(KeyEvent e) { + if (e.getKeyChar() == 'q') { + getTreePanel().getSearchField().requestFocusInWindow(); + return true; + } + return false; + } + }); } public TreePanel getTreePanel() { diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java index 9d067e23..81bb5877 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/tree/TreePanel.java @@ -8,20 +8,32 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; +import javax.swing.AbstractAction; import javax.swing.Icon; +import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.JScrollPane; +import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.JTree; +import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; @@ -29,20 +41,33 @@ import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; +import org.apache.log4j.Logger; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.appframework.miscutils.IConfigListener; import org.diylc.common.ComponentType; import org.diylc.common.IPlugInPort; +import org.diylc.core.IDIYComponent; +import org.diylc.core.Template; import org.diylc.images.IconLoader; +import org.diylc.presenter.ComponentProcessor; +import org.diylc.swing.plugins.toolbox.ComponentButtonFactory; public class TreePanel extends JPanel { private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(TreePanel.class); + private DefaultTreeModel treeModel; private JTree tree; private JTextField searchField; + private DefaultMutableTreeNode recentNode; + private List recentComponents; private IPlugInPort plugInPort; + private JPopupMenu popup; + public TreePanel(IPlugInPort plugInPort) { this.plugInPort = plugInPort; setLayout(new GridBagLayout()); @@ -65,11 +90,63 @@ public class TreePanel extends JPanel { add(scroll, gbc); setPreferredSize(new Dimension(240, 200)); + + ConfigurationManager.getInstance().addConfigListener(IPlugInPort.RECENT_COMPONENTS_KEY, new IConfigListener() { + + @SuppressWarnings("unchecked") + @Override + public void valueChanged(String key, Object value) { + List newComponents = (List) value; + if (!new HashSet(newComponents).equals(new HashSet(TreePanel.this.recentComponents))) { + LOG.info("Detected change"); + refreshRecentComponentsToolbar(newComponents); + } else + LOG.info("Detected no change"); + TreePanel.this.recentComponents = new ArrayList(newComponents); + } + }); + + getTree().expandRow(0); + } + + public DefaultMutableTreeNode getRecentNode() { + if (this.recentNode == null) { + this.recentNode = new DefaultMutableTreeNode(new Payload("(Recently Used)"), true); + @SuppressWarnings("unchecked") + List recent = + (List) ConfigurationManager.getInstance().readObject(IPlugInPort.RECENT_COMPONENTS_KEY, null); + if (recent != null) { + this.recentComponents = new ArrayList(recent); + refreshRecentComponentsToolbar(recent); + } else { + this.recentComponents = new ArrayList(); + } + } + return this.recentNode; + } + + @SuppressWarnings("unchecked") + private void refreshRecentComponentsToolbar(List recentComponentClassList) { + getRecentNode().removeAllChildren(); + for (String componentClassName : recentComponentClassList) { + ComponentType componentType; + try { + componentType = + ComponentProcessor.getInstance().extractComponentTypeFrom( + (Class>) Class.forName(componentClassName)); + final DefaultMutableTreeNode componentNode = new DefaultMutableTreeNode(new Payload(componentType), false); + getRecentNode().add(componentNode); + } catch (ClassNotFoundException e) { + LOG.error("Could not create recent component button for " + componentClassName, e); + } + } + getTreeModel().nodeStructureChanged(getRecentNode()); } public DefaultTreeModel getTreeModel() { if (treeModel == null) { final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Components", true); + rootNode.add(getRecentNode()); Map> componentTypes = plugInPort.getComponentTypes(); List categories = new ArrayList(componentTypes.keySet()); Collections.sort(categories); @@ -88,12 +165,11 @@ public class TreePanel extends JPanel { public JTree getTree() { if (tree == null) { - - tree = new JTree(getTreeModel()); tree.setRootVisible(false); tree.setCellRenderer(new ComponentCellRenderer()); tree.setRowHeight(0); + ToolTipManager.sharedInstance().registerComponent(tree); tree.addTreeSelectionListener(new TreeSelectionListener() { @Override @@ -109,10 +185,62 @@ public class TreePanel extends JPanel { } } }); + + tree.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + + if (SwingUtilities.isRightMouseButton(e)) { + int row = tree.getClosestRowForLocation(e.getX(), e.getY()); + tree.setSelectionRow(row); + getPopup().show(e.getComponent(), e.getX(), e.getY()); + } + } + }); } return tree; } + public JPopupMenu getPopup() { + if (popup == null) { + popup = new JPopupMenu(); + popup.add("Loading..."); + popup.addPopupMenuListener(new PopupMenuListener() { + + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + popup.removeAll(); + + popup.add(new SelectAllAction(plugInPort)); + ComponentType componentType = plugInPort.getNewComponentTypeSlot(); + if (componentType != null) { + popup.add(new JSeparator()); + + List