From b2501ccba157e83f9beca0c994c3ee25f08f9e43 Mon Sep 17 00:00:00 2001 From: bancika Date: Wed, 26 Apr 2017 16:30:02 +0200 Subject: [PATCH] Tilde to repeat last added component --- .../src/org/diylc/presenter/Presenter.java | 16 +++++----- diylc/diylc-swing/lib/diylc-core.jar | Bin 239378 -> 239378 bytes .../swing/plugins/canvas/CanvasPanel.java | 30 ++++++++++++++++++ .../swing/plugins/statusbar/StatusBar.java | 1 - diylc/diylc-swing/update.xml | 4 +++ 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 0f952dbd..cc5d6a10 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -737,7 +737,9 @@ public class Presenter implements IPlugInPort { @SuppressWarnings("unchecked") @Override public void mouseMoved(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown) { - + if (point == null) + return; + if (shiftDown) { dragAction = IPlugInPort.DND_TOGGLE_SNAP; } else { @@ -859,7 +861,7 @@ public class Presenter implements IPlugInPort { public void nudgeSelection(Size xOffset, Size yOffset, boolean includeStuckComponents) { if (selectedComponents == null || selectedComponents.isEmpty()) return; - + LOG.debug(String.format("nudgeSelection(%s, %s, %s)", xOffset, yOffset, includeStuckComponents)); Map, Set> controlPointMap = new HashMap, Set>(); // If there aren't any control points, try to add all the selected @@ -877,10 +879,10 @@ public class Presenter implements IPlugInPort { if (controlPointMap.isEmpty()) { return; } - + if (includeStuckComponents) { includeStuckComponents(controlPointMap); - } + } int dx = (int) xOffset.convertToPixels(); int dy = (int) yOffset.convertToPixels(); @@ -1443,8 +1445,7 @@ public class Presenter implements IPlugInPort { public void setDefaultPropertyValue(Class clazz, String propertyName, Object value) { LOG.info(String.format("setProjectDefaultPropertyValue(%s, %s, %s)", clazz.getName(), propertyName, value)); LOG.debug("Default property value set for " + Project.class.getName() + ":" + propertyName); - ConfigurationManager.getInstance().writeValue(DEFAULTS_KEY_PREFIX + clazz.getName() + ":" + propertyName, - value); + ConfigurationManager.getInstance().writeValue(DEFAULTS_KEY_PREFIX + clazz.getName() + ":" + propertyName, value); } @Override @@ -1910,8 +1911,7 @@ public class Presenter implements IPlugInPort { } } catch (Exception e) { LOG.error("Could not apply properties", e); - view.showMessage("Could not apply changes. Check the log for details.", "Error", - IView.ERROR_MESSAGE); + view.showMessage("Could not apply changes. Check the log for details.", "Error", IView.ERROR_MESSAGE); } finally { // Notify the listeners. if (!oldProject.equals(currentProject)) { diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 8bcba159a55594f311fb3cabe897ab2a530e52e0..6f27e1b3a78eeb0b0f58da253e339d898b152831 100644 GIT binary patch delta 4162 zcmXYzc|gtC7r@`Ww?(9EEeQFMv@jSv*@VA>Ua$JLP-JQB{feGt z?6Qp|hO9FfGh-V|hJJ>T-#zENfBKyLo_oIc-d^5Sv%ITjrZXlBgO(~)3zcd}g2vQ= zs}nTp5Av_JFS7;AV7&k<*g(KO)`t&C(Eh^u1KRLmfT`RG5XaSk70gC^ja!4bkJ%_A zqnNSQRI~)$TJ(h??t~R$AO?w{fEQvUz|o)|z}LW8M%Ju1$mKvA<4QxwtTX)`u)FoY zVBKkUi2-BVFazL<4r!oQTUKFGwRJSouJd>S?gd?KQO~xmLAv&E$Mme8Bav6^B7j;K z``D*{l^p`e{!9R?C16hwpi0`N-yko!gO0?xF_wV^Q?G`E1n(KT283OBE*~ndxd^P z+D6VIXIFvv^K9Vmduwbt0@oqQ+s8!7_Xve*pS zskD}xsS`>jZJyWrhd7l=m9En6ueDITV}zyFq%1|QrOhe30j1`adtfWITY{0Dwy9e| zD_;8-3M`THW6t3%T%{Uos9jWUQS+p_7MCbJXoM|nt?h{V@k6o|S?}eM)yM_Me#KU& zoU+B%qfYMuYHiLo0N$Vd2&=rV!&SAO7rsEU$3^))BqJ`h!J_e(CmMi$zWx*zTYs|= ziznRv1>=10%2OfzZ6BOQ|E-6wQLp>08U1y?A4Plevr4o(z5EsJtzJ1AL!SEmf6@M; z=@`y?=jS?DSG%}*8@MgM;xe_c5DZHX`Q7dYlnhkM>YTje;a0p zLTWc=f?M<-Sl5M7=_1nEaOe~C4 zs%j(UVKcMRjgMjuaJh7gm$D43{dqaNhr;bu> zndM{XgH+~-LW>L*4}#({j`z^*%w$W@+$EP;;RpxkvrM#{RrH(7FJ-&XGP<07z~$5x z%pEOjwlhz(+^S>_kY2lob-^;-s@Mhm0MAeAcX;#+dx5c)=k%Yg_97dJWtuLtIJy*< z2DJQBv{9*=&6RqESt$>*g`uvbo>^k8>PO5K?zQfJ&zU@!QaJjGX;7Hf$WEYO{(-ee zq31{DjY8sQ=0(F0EanfD!g~JQ0P;-uy6yzT3aH#~~S7qdcmVC)lXeg z9^4fzQ8T%GPvs1ay?GW2g+5%3m9P17Gk8IC5B<0S3V-M?`hr&0LM4chHnx+f+q)6d{r&tEByl(VtF$0A> z9}xg;D1ZA37x^KSzJ6jfaIv502dwZDgMs(_#5ka>zZe1W0sdkPu)<$V2EOqZ@MA}D z4iFQ7GTuhf1c=_C$Rr!(c7W&(%BKMNQ$|)A8c2)_l$E9ZWT2P?Gz}8dfWASp6Unk5 zF&yF_1c~o}1A~P>FkjF2!D2S(Q|F2qz;Zns=ZaaNyU&w#A%32i3Vbq8Oab-}k)2B> zhEUyx5D^8s+k6oQteP)8fd-*O?@-|ldUYtRV-Tjdhf)1)VX|-Oe;-Emri2T3&1N`wZ!VB`Q#|SrI$ED(X;L@eE|Km%=M2Itqm3~Q&SlUlzEaiWSmGhGEp3A8J z1Iy%`q~2;d?JH!t+_%)vE~mQPR!GV^aVzBhrM*GV0V_$*UMWJr|6wJ?&xoUXm2sr= zRdQXKH)|Ey_pFlrNS(*idcN^;zf#|;XLCI5&ntoY+?_!2ERo`U5@{~G6KQT=L6`Z{ zSJOHbt7)BoR@3=&Pog>GCee**NTToFdkrye4bA1s8mikRS-8S}f|JE~;Lc<^A5F=W zKYT4Qc`enwq-VPnI+y+_l(#*F;$G_6KULmTm}4r%olB*Bvo!i%->1>~JN5i0jn1{l zI?5~2^T|4@@0d>KWL3JHm#kZ#PW7xah=CatH%yU_!I=!<1VL{zsHws0X*j9tX>&K$ zQ&U|x5F<8FGeYf2^+)n=0YekSGj&Z3VIpGAl5Mi%)yWm9}mHpT7BrpMr4 zy*@FA>S}Yy{y2y79CB&>mATaCghzN|$hJ zsR#zU@kS8@jMzx})s6Hxxoi^i!MNwu0i^w$ddn*7GktM{T1%a<@_4 l7u)2#Wu3v><++ed*-m=>b~zuZciBO6iQYkZr+0`M{|7Q-UupmV delta 4162 zcmXYzc|gtC7r@`Ww^b=y2_e61EerR(Y4LEPcicqh=b7nMRWkqqB74 z+8CYNd-+%2n>he{Sa+TfqhHGU1NN|9fS*}kKnp$?FoC-OwA>A_l-cXAa61t9FneWK zG&9v(ie{kOiQZ7si?CEsNihg~&%`i*vr!*FfRU?2^;)A`4zxF|GzN36qMjx0j{=rI%7$MXejvAVN&ckFh|BnM=KAMK{YltheMKULct;%vgLQSUzI1JWV# zt~uC0$L((ktWIr2`_6P*9M0*?9;pABU5tID=k~|?$Mkln-^zDEzp)~a&DL8X+n3aE ztAv>1ahqoK{9dckXwo(My)`zQ7>^wb$REefiCwv1q_; z`YKx9JB9um_g|vF_SYu#*Zy_{?a5Cn(eCp67qnZva5jbY+}`~U?avyI;yT+u)q<{H z&{P3#+b_7R;WlR&XUH^W4=m+vFhsXv+XM)XRw_pbO>g-DC`bnc^Eu0 zoQ8iA*vf)MECXwQTEgz2a5I5@#_Wb9Hl7xVuz5UxmE2{ba`FPRGk7Mmd<`gGqiM2M z>J`>jxt}eJ4aN1$7HjQ$z&y-h6#sw9<;>$bABnjKjd>Ro?wWBY1}mC0 z<6oi0tvNSCVPp%wkm|es(4$uyS;m@%f2%d`ff1}N-;F|5dwv~-v`)MOK>{&A6?VRx=nxp6zg>;ZfT#~YGg5N9-8Rv4tPOL9Et z+_*1x(0(vKfqTC`x#qyP{K{%7byI`5esoWWb)@wNaWEuLW^Pk``GMKO9=NUf51y80|n#z&% zFjD&Fa94vxmi)IpZX5b>OML?QhJ7r4Ew*E}38@80s*Zy;-q zn;2yY!cGrif-%*eLW{yz<3ug|W*QnN3HhW*;k=(%46m{K)B0; zPnRRFVkj^;NQ?xQ2Z`~(S3v^)*->1B#TcNBw^ww* zq9-Ua$zHh`EV_X5FbXARz!iWkEL}V$BIdy|92rVV`bD$eNpvED`=ha6|~OZE9Cblzk9Ehat@NYE9G}D*|1WcyJXK* zMC~e>C-qCKWL?RQ$-)B|mMlgCw$nR3d1*K5l))b0+ zuCi~cys6T!O{KWAsg!S(CeKUSze}U_x2ya+P3~XXeb-Q4vC2nlsJ?T$oSXC~q|13p z)~8cFy9{DT2E`3lkMjY;943^>RQ^|wYAh#r**{0b=1t^bySRJ%8yIt zduLKneJ0uOW>S97EO{8xpO_^NOY&M4`P*kxd}ubs?a7vpf%N~Q>SJ@Lu0DtC4|6Eb zDVNq?mP>t}&!r)>)X`zh($VG*=%_BwBi%ob^0wqr-rGE?H%L$WUa6;k&gm(xZ9dfv z$)~vQ^U41zpZanyAg(T;xm+nAzilBgu#nc@q3Ul6DP9g84?9JnxE~d=+Z55d;YH-% zQ$+R;Mf4GPtfzXp>t#RkQr%ilAGvEWUCMREVg}fssQQ=^x`bOwL>SmjH;7PR9UFJX`ATrzrTqtqx)vMoH?86 zF@3mM1i(7O%c-xDa=Of~%PG!t3tiInD*seDyn_13t)RNkD&)Lnoq=2F$0KDc>GfOX Te5AeOHkwQ9Hp)A-P5Ar^And?c diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java index 1d0629d4..367083c5 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java @@ -21,6 +21,7 @@ import java.awt.image.VolatileImage; import java.util.EnumSet; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -101,7 +102,10 @@ public class CanvasPanel extends JComponent implements Autoscroll { } private void initializeActions() { + getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_QUOTE, 0), "repeatLast"); + getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "clearSlot"); + for (int i = 1; i <= 12; i++) { final int x = i; getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F1 + i - 1, 0), @@ -126,6 +130,32 @@ public class CanvasPanel extends JComponent implements Autoscroll { CanvasPanel.this.plugInPort.setNewComponentTypeSlot(null, null); } }); + + getActionMap().put("repeatLast", new AbstractAction() { + + private static final long serialVersionUID = 1L; + + @SuppressWarnings("unchecked") + @Override + public void actionPerformed(ActionEvent e) { + List recent = + (List) ConfigurationManager.getInstance().readObject(IPlugInPort.RECENT_COMPONENTS_KEY, null); + if (recent != null && !recent.isEmpty()) { + String clazz = recent.get(0); + Map> componentTypes = CanvasPanel.this.plugInPort.getComponentTypes(); + for (Map.Entry> entry : componentTypes.entrySet()) { + for (ComponentType type : entry.getValue()) { + if (type.getInstanceClass().getCanonicalName().equals(clazz)) { + CanvasPanel.this.plugInPort.setNewComponentTypeSlot(type, null); + // hack: fake mouse movement to repaint + CanvasPanel.this.plugInPort.mouseMoved(getMousePosition(), false, false, false); + return; + } + } + } + } + } + }); } @SuppressWarnings("unchecked") diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java index e1a5b3b4..c7ef3b6e 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java @@ -13,7 +13,6 @@ import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.text.DecimalFormat; import java.text.Format; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 10fc4627..bf5509d3 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1761,6 +1761,10 @@ NEW_FEATURE Potentiometers can show an optional shaft, can have either solder lugs or PCB pins and rendering includes the wafer + + + NEW_FEATURE + 'Tilde' key repeats the last added component https://github.com/bancika/diy-layout-creator/releases