From 598680838eee43355db4b65429bd5958faa1da56 Mon Sep 17 00:00:00 2001 From: Miguel Carvalho Date: Thu, 16 Jan 2025 13:16:01 +0000 Subject: [PATCH] swing/HoldFillButton: Added tick icon when button action is actually fired. --- .../lsts/neptus/gui/swing/HoldFillButton.java | 27 +++++++++++++----- src/resources/images/buttons/tick.png | Bin 0 -> 8263 bytes 2 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 src/resources/images/buttons/tick.png diff --git a/src/java/pt/lsts/neptus/gui/swing/HoldFillButton.java b/src/java/pt/lsts/neptus/gui/swing/HoldFillButton.java index df4b343073..90c4c67733 100644 --- a/src/java/pt/lsts/neptus/gui/swing/HoldFillButton.java +++ b/src/java/pt/lsts/neptus/gui/swing/HoldFillButton.java @@ -52,9 +52,12 @@ public class HoldFillButton extends JButton { private Timer timer; private int progress = 0; - private int holdDurationMs = 2000; // 2 seconds + private int holdDurationMillis = 2000; + private final Color fillColor = new Color(0, 128, 255, 100); + private final int tempButtonDurationMillis = 1000; private final List actionListeners = new ArrayList<>(); private final ImageIcon LOCK_CLOCK = new ImageIcon(ImageUtils.getScaledImage("images/buttons/lock_clock.png", 15, 15)); + private final ImageIcon TICK = new ImageIcon(ImageUtils.getScaledImage("images/buttons/tick.png", 15, 15)); public HoldFillButton(String text) { super(text); @@ -62,10 +65,10 @@ public HoldFillButton(String text) { setupButton(); } - public HoldFillButton(String text, int holdDurationMs) { + public HoldFillButton(String text, int holdDurationMillis) { super(text); setIcon(LOCK_CLOCK); - this.holdDurationMs = holdDurationMs; + this.holdDurationMillis = holdDurationMillis; setupButton(); } @@ -81,13 +84,14 @@ public void mousePressed(MouseEvent e) { timer = new Timer(10, event -> { long elapsed = System.currentTimeMillis() - pressStartTime; - progress = (int) (elapsed * 100 / holdDurationMs); + progress = (int) (elapsed * 100 / holdDurationMillis); repaint(); - if (elapsed >= holdDurationMs) { + if (elapsed >= holdDurationMillis) { timer.stop(); triggerAction(); progress = 0; + repaint(); } }); timer.start(); @@ -104,6 +108,8 @@ public void mouseReleased(MouseEvent e) { } private void triggerAction() { + progress = 0; + changeButtonTemporarily(); fireCustomActionPerformed(); } }); @@ -120,6 +126,15 @@ this, ActionEvent.ACTION_PERFORMED, getActionCommand() } } + private void changeButtonTemporarily() { + setIcon(TICK); + Timer timer = new Timer(tempButtonDurationMillis, (ActionEvent event) -> { + setIcon(LOCK_CLOCK); + }); + timer.setRepeats(false); // Run only once + timer.start(); + } + @Override public void addActionListener(ActionListener l) { if (l == null) { @@ -138,8 +153,6 @@ protected void paintComponent(Graphics g) { int fillWidth = (int) (getWidth() * (progress / 100.0)); - Color fillColor = new Color(0, 128, 255, 100); - g2d.setColor(fillColor); g2d.fillRect(0, 0, fillWidth, getHeight()); } diff --git a/src/resources/images/buttons/tick.png b/src/resources/images/buttons/tick.png new file mode 100644 index 0000000000000000000000000000000000000000..9b79a6f4c8b0ac227d6d2c940bf9952fe358bfd6 GIT binary patch literal 8263 zcmcI}g$hrfKo%3g1|#4D!nY-jRGRIz%HRuQoD4Q zf^?TCU83K8KCj=u@SE3bX72mk_nmX@z30xHb0<V;? zxsF_k%H2}6?>}eGF3z@(eZOHVrQ5-q_}) zwvwp|k5=E*;p~yEvDw`@{c7`y>8ioak&e~w`h_OkOpR_8_^LCkcCM~{r88kLt?WB4 zXFT7Z801TM)wR}}K9U4aHAoFrxRwg6k z*4I=~H1eC;&T)K<)ZqwcjTh#{pm{M+>uii{s)}u7=Iq@{3FWPB*w2N|Q%I=zURNtcp{bxXYuS)j0(sB4a8KXq0ct?r+DT*9|WCYtwgQ;hzQ z`^kN+Itm5XvXU~bG*#DDjK+TX((@1S1C&oU>&*!6F7M|A6an|*z(~5R5ed$7gAj02 zO9*%D`u*kvZ)*Le@m9~bqBjCNDTUC5-1{_Ha)!^JXVL7#X>?eS6?##!W&ao+<}YN1 zfr-9v?pl0E^#0MO44ARs<+#P-aNar z*sdwftj#^ahq!%9tsgE~e+hqb5ESUpwQh)0H~JCzDK4N7KH^nFhi8+LO_x@F_|yXi zNiMn!(#pOtg-2bon#;^v`(cV^k@%|W* zo#KP+ei&izuCEs?279Mm8F)}P&dFS5`xFNG+Z{p?f3uAl0MfjM%m^F0@OuH=x< z!wQMOCHG867*w0L>v%cV&vp@e3BUar8O}S){v{Zkh+LOk{?&=UgtvVD3+8aLGJc5= zz-@66j8OdLiiGY9E0Bo<+sq3P0^WVR$`@=~MuGoR6=zQyBvp3}Z|)|*NT(n^6At=E zSAfwqdwi^}S6$=SB|kAb;42a=@Vzw^$|#d1j?%Y6bI1kevT%$2Xwiwb>l3WNnyv0& z+EAo%+l09IOYtx*?3DOs_O*suiAbL}Pvfn8{oqKvlwi?pi)6;rxmP06QRE+6q%fcu??!4}4 zqG5AGs#xD*?Yb@(K9f}{Sy2vk_CunJ_1e2o>@6eKvib<~Dth)<6)*0Q7=6%KulEQmiA5N{ zNst^T$ag9RK9umNNCnrvDOXb6UlWToR(w&Yn`Nx8j+JjT=*HHIK{__m6%$mi9@62( z=Tlr9EQ)ze=z8N*mUMJp;d|cdJ=)wY0UAJ5Q?U@shDE|-EaOD?^_~Dt2R!mKkFMEA z=Qsox2P*q_DhUAf=p9G`xOvLxrCqMlGqI zGTJGBe&Nvy{W6m)Y)#r@wWG*s%xTJo&|vYmzZ>HQrQqQitO?%0Fps-DAGhaur&Y=d zV;QC;N1emi!(~jlY^7d#ySzsbaT)0FW?_tr&=c37!c+${(D?q6;>=>L8vbx?@#*Vd zS@$4|{4;h|SKTmbu3$I{v;W;puj?#r6Y*&Y8(GXrQU)al8G9D6GlzeF)}CO- zPH?d<)Sg#9BrD&O=@Yvp2;YM9U(o`_X^~$wH}d@O3T>hPj1H<)vEQqZrra-Z!f&#D zrkpZo*FgwcJm^xfz=EhdrPsUc?vLAro-_SAGf}~$v^FhVItrc?mcBO~Uz@>j9q|-H z^UF|zIDk6lE7>@vm$!m){)w2cR}9HB?JrJKmuC=~xHs^J>gm|5+e49wmPR)G!-ijc z*BN!FiBi5=N`y07o?!mjWCLKonhO7=CE}d|WyXsYV_=`=HGb8T%}&pYY6f80>CjKPE&bDh#x)Kre1(n5KltL-_A-aob0*7uW>@N>BheLO z>BS3%Ilz;d=F^AL72}>k<$+x$6unULUQaLQ!BTQe8d#m)qu+}XSlp7M{CJ8^F$-Z* zguCwXFYIf6m3l&$iePf_PdT{2p5G&sE`aQ{jV@<{RU$6i#GZM}0AeE&Ht(q}-AC+E zg4H&{R+$uf&9TVU-0?jz7V7257cSAnHpQL1gVIC$E)yUdRgh|`<`JbQZiX@DjzI7o z_HbU8X5JF1p(-=|aGI0@TIH$wHA(eXVhLgkVr>#H>|cpVGSZyq296fuOm~jd8sM(9 zrjJgJdh{ky(ziQQfWDQ`Y1AmEJ)a3TbRw8&L;`)3H%-VzY)%iw3L8xwtOPvp2mT$k`UA@2ZhKLMhFTDZ+B(1I1MEMBzKi8cWQ=BcYiXrkT zjDsmAEahT2X;tXVuhI=u?Wc89ikMJ;EjknE=|yorjFIPDfC`-p?Q|Vii6mPzXzQUI8FaU^z`Wx!gX^{D#S$KC{#S-9;gIS= zIE>u)i@KI7IehEJ@-Ib2t;)Vne~4`qFcylPi$<&MmP(MFv*Cy1{D3pHiCEjkYweCA zkOS9F>1jc-o9;DaA7B%4&|OSb**6<~6F+2qx*;xeRBD?vt_aA0BO(RCjZ!Zz&|xT} zz!t}t2EOerm-YzI3D+q7zRr{@6CkHc?I8!0?U3G!We)y56bWFSn(e{Ia9~Tv9G8t zWj_5-#0pR?CZrDpog2nZN7>Ia!z;-F0U67T`{Ay5%XWAiIW~Exb=}sofdv)fHE}PI zE{QZ@9fcr|HTpKph6=~M+gb>w_wTCRj=MAwuX6L=rY;a#z#SPb(6Y&yIE7{j;m_6h zb*Dt5%7YjKQtSjCrOJegIQdzRc<>>1)(%r;Jkon4>kH3m|K*#I5ZqO|r>)pd-abGy z4;9E&<5++pxj}CLvD1(&>#WgrviKkeQya|mTTlnNXz=BPP@{}L;)~4I3~}QLJ>I^{ z?8=&|ks-sD7+}96&s26syX)44XTq0~4-sTJCuF)f&9518 zp~JRx-jjH<%Nf4B6T z?0cZn81O{coASKtez~sAb`1l~T75(C#k7}F-pG0_YZ-;<@+Q@JidbxBIY{F{q@xxr zcm(2DT$!srzqy#MhSK6=ry^@ZS)`v@D;(c@4+br#x)Iu@^h@O1UaepRp9vu7|4l0q zFmik2)Bdg&%9xm!%z8v ztCZmF1M^7Z@SCyS&>MT5NhKhZZqGYZxinRK_P_Focj!eAqW@hOSZN(C$d$*S|Iul- zk(tKz_xla1Q5fsM7!BUzdzvBW8%mu*vvx>>*R_e32Gt8h3$@k`>cI3tPpU0BrBiV# z4`MrZpb7N3zC=6W6?&D}>$sf(vO(R$3?0Td-)&3dO%|eQxoo8J1E~A&GtnpmqVjFx zD_Ty!OF&i+weVPpJVkb$`wUwG?>))30z>t=U>kdpU<9t?lD;5aj@(Or1U+tN`vfKxF0U=;`Tu*VV3=-lN;dl&n-6sR_mWAWKH&ZWpO))8}uVV`D;t_eVT~u1tu{h#l z4)}9k_c7a?p4CuA%j`^~53TPNHSppr<=b8k=o(+d<#xLm$#C(|?LZg6`m(awu*d*a zyUmb|QjvS8{W}5g{)2K*|C<2NHi8%UeQxG7Ux2%D)jM=nf#xy9rO0zmg^G+FB3J(e z{b=QRT(wTsg!4rq9ANGnO6u#8k8VTu!o2b62``#IuB7(X5T?Q({7V>O2(W7qnvlIx z#ZkwxPIdqJ3?q$m$bX~()#D1GiPsVugf5G<*ddv}Um0n(62qdWZOzkWo@inDnHeRX ze|^ba{*95wmE%hE^xR{EdyYziriu!^^;wjL=AC+)-bX=+go;)8M^m6R-$F1p6zU!@jX`f)v7)hYo=6ai= zEfaUsn+@lJZVfh!NAG%=`k-ckz=2NXE(QPnhz&m1i-qg$4B5Z_T>g+0swT)8mfp^w zb~B%X+)M5f89q0O_=KJSF~~}A)%hx8ag6^#gBvaynQ$6?a()0^s4)h=%}4qkseo|Q zo%9M9bjJUyVd2ysoY@Hm(MY(BB9_c1BSu&Nj>0mN5P-l<|1JQfylKzk)-0En3eQoaNWrd(e7-?QSn)!*rLAG_H2hW4LI}F!;$vo|pBY_^Fq!>el5Zh(3k1Ut{~3Shnb7?9SK~Kvj)clqrCR}m zci4@X(1Kx?W*Q~tb0&{kV*Jo9~KRk8W zgRQC)HyLNGZKT#DUwneNN_LE0-=!dC{wE+U@+QMsRMFhoHWCZi1!UfuM%NYxnZ`oT z{-r|*d*xR7p(bQHt?c}k?4DSMgiWp$Y0qJZo`K}O4U2a($73j>n3fJqv9gvAy7r)! z0SDr+wI_6-i?!En{yOdklZl!UAKbbrvOCiR>oIo0<=A&Lgu+^R)~ zNYT%e2e4=!~ zuWQhc^-=3dZ=G!=Um(rDbsz+^l6Aph`;|h736cCma&;L8&Q23O3FI8{}&Pg+a0mOO5y7gHhvNm?F@t6`hlv4TqohI=;I zxtQA0Jg}d6l!7K}vpoHU@PsQDvEEE6i9i*FnskJWYnaP29KKpFBn>6v9U*&)8fH`^ zMbthVwXY4xkBdLGo<=C~qjWdwKy6AhXDmh>&dJocbq( z1*W!M2x?cF|4=8DDQ*yYs(-h#A+dV#pWsm&u^4m^1&X%M9Ie_!#YqZP3(~NJOqxPE`soMoCnTTL)Jd@9Jv^xjK@$> zw^GQsoSUE61mkxdYwG)rQoQkWbwV6?r{s;F&+mjJQ{Lg9jMcAVat-=%%~g^mMta8G zj1<1)?%wPiw%+J#EC=1%eecUF%YgLIF)M^u@KL)MfWP?Sb~>tt6`goc@jH$0R>_pq zxEg?TxY*K{0W+nvNfDII#XhF;ZEFDgV}~h>Y{&282BRa`mi>0gCzhx{tKtJ_H~Pfrui# zgHd?3+|jl#v#WgPf@Hms49)1^(Q*$LG5-dW10SbPH^K*j8eGw2rsa~zvK?flgp4Vz zQ&}#CI#Yv6$?;AZgYCut)-X7DZJP;;K*o3O$CxWR!_K}LdI}=8&L54*&@2?+Z(r8N z2I>wL80cX<#&pp30uu*U`jqZ$W=A?lK*KjJj%&87MbZ z(aU!mirIZBv!P6BN9WGwC4^{NIdK~4H0wfcvkUn`f%B&xi4pW&$f;kXa6dz#!hz3K zFZoNf7M{(juGC=tjSro>pUzXFRKRD2cZ8xaURPXEr^gKh*KVMSvoa;t)v2AKjlH8#1wxO;Nnkk=~O?fz$tk{5BTO8<%6k9Nl1Aubs1s!b@+ zicf;PVsF?6p;bxgk;RD;CFd2Wm-niGiN8`yJ56&sXO`FY|FYAg;|g;=KY3)9ms>{O zJAzmfH2eT^_6U6%4Wb(NDVY&d4g%r$;0(Nw>)%v#~3u=GLprmlp z2rY@};R!1Ai?Im=nY_2ftuf#VH^VbNH+Mu81xG;7r6^SzrCH^nG5QbGKfrhIh^4Sd z&MWrxcc=*BF2xk$sqeZJ`?^1MAz!M}?GPB5qh~P_sTTsebXe0fx`*9Z%yMdBqjQWD{=NqsJ2ftdkn?gc}W)3OUSL~2Q zh-@=D2V4n)6W&v)U)b+h67qkZ`Tj@i_k~0e<<4{L{G7FRG2bx8Oj7LqlEOr8*j6mA z0|XdlVs3?c7+pUnm}C1MOFl!Wh6u%fVqb-Ze}~4KE-@#O+Cfn6w|48F>iBi@J}pGNjprI_mpSSd(Cq78dl@h zdV?z{9Pv(;LvAwCl?J#je&=+NS!kHG>9QYruRU<0^qa`&txHuvHrt~A5kZ?sg^#ug zl%n*rC*t^2fO@!e-@|s4E;*KlQ6Lrloi>BEdOk&nL+~M>|Du5W3raf7vw`Jr!X3O+ z7Bnk2)WqVseOv{h1oQxNhUzT^#wS_!*1UkjcehdRg+> zTtv4Ytu5+>nu8_<-bqpf2d}sFG%YB1dYw;JGL`sPP>#UpL(wnLFoIXfe}Igc>J#|* zM<`Q6aK!oG75#~B6}EsWq=*1Oq5Nk=L87F<-OFb87|CD5Usnj~Nsj2I8&L)7J0MDD zw#s+~NS}*lL1-Z`#+xz9fuW7GNzS+-gh)BkD_cCBG^?5cAEj|H9QgQx908O4H{U2sSC+h^Tc&(MI&bxX{mlRdIwd zjyd;kAj^mqVBX4jW5BIkkB#))+heki{`BhIA@EPNyqCEhpg>guNkYTK7h`vLX07zn z3Hc+uo7t2hLa;PY#h;U-Ejy?Yx5*-caJO}3vsL>f8V%{MQaTi}C!Qzdd0iy0fR+l8!=zX!SAwTxi&n?>C#tC%AV!mD=A_j zpiDCb$7Q#QRcdHvpFyDfotkOd^RZ$7eP(sk* zF9o^el3SYm`F9*9DckikHVwq^#R1`y%9YX~j>f^@k+w~Dh{&w2rb$9oq-t`fIQQ3s zmBKQ$Qk*7 z=D?qkfNF5(YkpfwK^3SnN;CD;lgl#Qq~2u=QARwi3a1>W1>TmCygEwNsNeM?r-!ta zakGgGeCvbO%kq8|X!o!NVVoZU-cI<vPw2e1+9ZB~}Q7yqh-*9|`tLGg+H!l8YX1?oM-uvVN8EYP=p4F@r_TXjXY>qaKmV3A>?@!27UoDDVT67Ba4oI3NL5&%^2x6E>E6A*FpgE< zX4{h7Ijh-iSVwV1|H{S7K<{9 literal 0 HcmV?d00001