From 1884320315f615cf8214beea7c68918be4ac829f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 21 Nov 2015 23:32:02 +0100 Subject: [PATCH] BreakPoints UI enhancements - line icons Breakpoints handling fixes --- lib/jsyntaxpane-0.9.5.jar | Bin 566518 -> 568036 bytes .../components/LineMarkerPainter.java | 14 ++ .../LineNumbersBreakpointsRuler.java | 43 ++++++ .../components/LineNumbersRuler.java | 2 +- .../decompiler/flash/gui/DebugPanel.java | 12 ++ .../decompiler/flash/gui/DebuggerHandler.java | 21 ++- src/com/jpexs/decompiler/flash/gui/Main.java | 2 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 4 +- .../flash/gui/action/ActionPanel.java | 9 -- .../gui/editor/DebuggableEditorPane.java | 124 +++++++++++++++--- .../gui/editor/LineMarkedEditorPane.java | 49 ++++--- 11 files changed, 217 insertions(+), 63 deletions(-) create mode 100644 libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineMarkerPainter.java diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index 195c89e1b4bd4c044ba835a6cb8c18d6ed6859df..2af05d4b8ddcb97b3967db74e83df68fee87e945 100644 GIT binary patch delta 43643 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

=6e~x`(X6Mo)W1J0)RwA; zKt9rr4dP`*X~H{|avfSntILsEH7cq{+wq~@-8HE3a?$^WX|`1^!9eP}dLCCO^k6WEwhe_@kYVF@eWkH0dm_f3 z{>L3c7F-hu1s6=ghrQduPv$)t1xcCtJ+g8*IdY}t(O?t+dpNXhB;<%WY%e!vG$4$> zYB`8R#rjHtq7d?ri&SA1q@70_iSK(z_?FG|1`-^2a8O}tpu^^J(`34Rhw|+T4#Xma zhcf8l#P&R+^vy$pGT25#=(!VOx;?l5j}Hr>r%e%&`3v|cG}=88goWDfK*|rUI-8PQ zyuk8+26wRkb0Wob>;8S%wBO)BH|N2<9MkPzs-VDULIkMootT+Oqut>0pg?2~2ymh; z90b7Ew-@*G-}hELq{q%5=MWTU8M)sE*#@l% zwkp{aaMD$X(zvqfhzg|c&4QrPJe<5W#}IbdZ`;&n9W<-FIYmOIIP3k#8Y+!ELjoY< zWNRR9N-9^lcoa}$8;X?s`Qv2POs{|sTfHk5b{iY;01~n{Mg6OWSyMwQysh@SbzK|Cv zrcYm|RM`--$zI)QlLpr(C?C0lvU@)a1Pfhy2lY(a7e~%zQ9{15#Gq|JNzHDj}KGXEjjG;Zjf?R;X=9z~wL}UX`suIqAwM;lq6G{$ZlS2bc*-5cJ3c?ZT-_>AZz#i9>YnO7@yX22VCI=_ zb=s_&JST?=UbgA_fd^q`FT$$*uBJMk%@S~kVr_U|{HaOtYg+G^_JupEwpTndUZ3~y zDo}e%R{N2T@@svCu~xifU{3&{gSDse_!zY@b^h$}Oje%w(0B)k5s%hbNQ&j!;?L(2k#gD z_AjMH?xx~*+*YHm*>Nx`Xq;jG8(n(5!MbH=vSBGlLWZEi!e_M$4o9wcMH7Hu#=hyF zdehbW8nhYWVYWjD3tsEROw)VFo0p0KC}S6VM#xL8VPHdd#-WO*Q^wZ7yb^_{lrokEuEeI*r#GcSr!bLifa zpqcVh%|5>G!F9?r2eV45bkkOD<{8I|t+Y`}zV6>+Qj)U$E6a%Rq1ng!`%P3!-W#$g zNH@#Hzt{D-Qf^hJ^3p=VC^uH>{WL9`vAX8L0U?{hfHK`WI_9)Uzv9SqlJ^K7_r5=W zH8-i)X3)}s-ok<>Ci!)YL%A^fjRN~(bz=!e;R5SYNy8gn_^QSyyX%I@>7N-V>~eoG zfcq$ZfL79HL`VPqVaD$Jw`FYU-zlz}9D1$)vMeb5o{>vc{c-mOxhJXC(Gc!Y zy2B5B!uVg}Q6N}Co4m+O(0;*r~Xp2ogG-$lcI`l~KOA@$w;3LjF;o?D*@ zXsnS_7T#se@0qTjop6LHt>o%cmhuj+>I`Y*;8+31f=q z^7M}%M|^g-lmy<(++%d+n8hPg!iVA5zM<)rkD5GmZ>&1EmnzNU^+Ht!0|%DB%G8Eb zy7yEb+xa~rrC@fr3w#kmtR#M=#b3QeSSuUY?p<`uNYoc479s2?3i`=^X{u`dq1=9 z+3q7HPHtU(*1Dac4cF#em7KU7ALSc1choW_{H`yD279ICaPgi=@uGLC^jcspTb^*` zsU+h?p~J2c8cCstCA96m;!+B&bIJ<$mFb?-r^49?6gKk@TZ{-zd${i2KWU$RLxGFy z+PnL=BsE{QB&?W=*@)j8RPyVhYrL#qlj7!;l$x$R(qvJ?R(*`+Ot@W~qA}efXI@f9 zfoIBDOy&_4FB$w1(V4cI;}?>zq-7k)BCPNm@I-vhzvNN&IZldt-%zl-bxnDA&5r(ivXPn;;boAqqQ|Z{D4B`I=Tb+n#kU(u$|gonb)#@bIzPm)dtu zH!m{J#HHws9B#rtIWzBn_2adf>rqp0POKBm0^j0|xIZc0)DLs7Z)1G^uvt+-(%WOg ziht*X=|#yDZud1Z<9T&ZnsaNXOTX!E{-{jp_i~=Qce%}VOzb>-0dW&f)=a}Dtl;jYW0*x zHTSlk%JYiBM|0ALrhJe2KU`Sf;Fk3#+%|e++sSiz*9~1Q4bQSKBD+T0Uhdk^bk=Wd z4~~xgC2>~ai2mA-e_M6WMc<#|l&PS-S0O8ksUHEm;71|ro5w1H+E-SI+adMYm z8<-iC9h#)8dT^%NW9)=VqV{`Yey|_2b^78}ddN#SInfeFXb2k!q zOT4huY`3571@_I9cXB5F@Uzh<&XRZ6kP z*p3BAK3w`Zd|~PS(jFey99w&WW$=I>W%K;^YrFdh!7Ja>JxAH2%euAV!4E%2gsxtB~-?^TVY_<8Z ztEf|`D$niakk_~KO^54lje9vWkNV$Uzpt>uMPrKpYGdd8%DmRY%QCPdM%_6>ol4Vp zipIvjFMzP(uP_mDO}VtQq5PZu%*{ukwaOFxciKlnoxMA1&s9GC!83EFdXb?lB43NK z;v0R11}?Z;J?84GxF(!n606{jkgtu2VTE$Jr8g2IC4xTLZdVezL>0ec`gn@dCA!6h zse@h_Z_KjlJ9R!Qt?eLNcmn2p@1#%MZ@Rvh3yu;Vgkp~U&zO^N_NNM)SsNVR^HQi` z>?8YR4&4>MPoE-cU#V<&idFXIso$ede>fG6C(J|-yVH#&--=znbyF}|B)imR{xKr2I;DAo`;Uo&Ce6UkT3F{_qcD_;8Uc^9XuDS zT(V)tL&a+&4%tV!d``DunBVO#kd`Cma@QdMe##vFR)$x0iu2o88+oveYprVz z{EEDh9$K`D&Ga&UYGY%%ObQ zQzWnsZuHk=a0K>MzYEz%RlpOhR8d>VTpO8olObws@OQMd|If~geybch>qXd?G*SK7RbhL>LqmSq|MlVzU?GCAdlyp=7tTNeg!En~u=84XtT8}SUBQ{}@ULAB*ry0h+JH*Y-%3X0rGEZ-N zvrMCM*;eYQN7-_p#cT!3pl1DCMf+oGYxub;y)a?ja{TvVYjjsqRNxgYOVu(9e{OSs z@0K37HyOJ3y%E*uI+e+j4Xd>W$kMt4EjQYGgu&54WyN ztlV*vQ}4YxvA@dho}3i7H8&S+dqx!vQh#3uQR^ zZKHM)gp$&0pU>CZ8SV<=O>b7*UA>50%uarE^6WKQKJWL&r6<2eWH<9K!6%BbTuHxy z)sK$pzq8>cHy^Q*dCI0J{xQL=Z=$YuI6jPXO|;bt=wLeOtk!0e?(*ixDeK_A?bUE* z0LwO0GXsyi4^N4Gjvg4N(wg<168apg(ZRpE)I>Obwl)f^oeIr4*_E|n6dLP{`?Bae zB^)7p`Vn@4DuVy?y;{$6lU;rr`fsONBpCbevVY#2_q=*^O_Xj(!{~bGJ`wD|S*PKc^|*n5Yv;@$hQdcL`taY0^IV zP*h7{Iwbi%qsMx`$gVrHED7zw8rI$vs_B8ao0=SXz5e~fCz#r(-WE7!r0TpcGk>ja zO&iK7wV|T2=FippEq~a&OYRnD!&<6bGiU4Owm{ePK(Ixc{nPsghl5tAeyPv@(#bI6 zI3P|NR5^P&O8EGbB%8uPYRS8Jhck8?^YUSAJxT$NZO?9BF_uqLqcrEmc=8xdaHoj=i2f6LblVlY!ho|lKE zaV^-`v4o}F#q0cBD@rcliPMWh>o>Cp*Pbi8)b~if37;TX55dPYiLje1x3zb@9Zu}gOXEHu zDZ3h0`XW=0ZR|X2;XXQ%1Z}(pgM2VIW~YSX#rz9*rV}z)ttos*hR%B_E|A|pihC0& zKO#egA6ERJ-Jj*5hNPB0XVm$n7_I7WTV~)|Xg%fTWAbLiu}05uF~V2C0owjE7Ogdr!xqn!hP*GfUhnK;JAA>>G|$y^!1?NdDU+aiZq328xr_PZ zOpa}sOfGiccCpctP+7;DO*c5a8PDymre#X>_Esf?&$%BcN>rxUF*U&Zg#U-sX)k=g z^yTRjM*QStwJ~JB_pZvEF5%kXU-RqoRMw1LRE;0>T|0eoa5CwbqGs5d^-1}?);m=& z(LdU!1njbFIDZ!lB+c24(knQ;k$GkDW;n6S#E(}dac=-;N8CnZ&@azAyF$*qo@u|E ztqC00;|P>9J{-Z_uXbo-7<43QgnAPa_i`^eUTYDEIsZc_d4)Ro!L{DAvL_z-y+0Qy zYCkf|VU=R`xamV_ASazU{I+SuK+`)67mvL#9g6^ZgJ0HHOOoz3(k}K=ZpX^FQmFLp zk7LbD64BSK;KFjd@?B(p9%`6F_AbFef<4tGvOl(u;7TLIimTHxiRF;Tj$YV~#JP@% zcytdGQuwo;m@<>+{LDUEXZkQIrx3G^Gp)|tx*KmvZ=Ue|xP#1D)siC*SVmCO6W_*dfgW7wX%+n8?y+s|m zL5r2W{t;PYx4*E3e|L1%>NMxG%7iz%&zds2oeq9~P4Lh=w3A=i_~k;)5{<*9@AC&T zFtx5(tQ^bSa}`aYm%Fdy-7~@BXz^tgfy=73l{0#h&Jb(VkD zG>f3xz%=II%%8M$9ky%GVVOjZ&D^9uW*^!bMr9n*-{m&gZWma#5v+FceKcKML(fjh zCVBPzir<9Ek>6Bv(YuaY?VNzmdvWbxh+n4^t9Rlm&aiVYIkq6S%I>~A_q^4n<+$`O z-h#3;wJ?nN<(ZJ&p43}9;p>mYl|m;wnjEW@xX&7WXiPjMRPjMn^J-O1OaHvCoM^;n zc?m6w)Wq)SSeF;_87C1jfv5|*NuFU0%1+GAhYs(Y(XRCQ(6l!HLO1CQ-CKck8(66s ziwN$Lnw%oJp}el8<a>Af10>j-B_lbh$Hbn~5w4~SJqR7!x{sx@?pVP~YxZjM_L_+&gMwbMT zti){x{D%>a*umSlmciSUMw(bDrN9h%x~3}ZEr--jrIpLz(JAW_9epWBfRC(A%fMy5jc-%oMmNF9-?kJYFM2B-ER zyqL~rV5yHtg06kg7NQ1TXTMEf!jO?Yq97xK-*xxzr#Mov4W;ty|DiVSIY)MYnT$+N zl#ERFACZi#IFg}*NIit98XykG4LR)l1O|q@ek3$P)?yj?0!TIGd>S`_ahD%=}%z0A!3U8ya)me5i`td zcF=8z7-5_^0lg6-D)|4NTD&D*JuaYag0K@GV$2C5j9{Fs+9=X#gs5UNT~UG27*WEE zM4^I%F`|y)xrGXXZ5Re{(-@H=PXK#O5Ki#h7}<-NcuUk;VF@^FS^!oA(7|sC6e32l z<(mYzM50NB1@-b+9$ zHKxdJZ09jzRBXV>2g^*d21#-V1>iM9c(4masP1wumJ!tnN1t4K4KJwZG8`{>dkP8 zL3n=J2HAtTcOA9!tHp5=?dSxFYpSByEg1#4`pCd#K)`i!yM4 zzAyzXD6H22bMep3qPoeHICMh>-AHe7!`g=OKO96fF;O>AL97WiW&*~|I3~Kk2E~zs z?IvSy3Ftuu$3xKm&TUj^ zKZIyu*!obRr4y!&l+EW|TZVSLLn5SiBV3KYT1?(&;&^bZD=p9io z!g{RYz~TaqA5=KOh3_{N7EMRa&1i?u>9QW}KRCs_#v@ufh zM8N`6ycf8*A~x84W|ZLZeo7HA?h5C&?m`J3z`w%+Vs3~wcCQ;r5(bytpl-VdC8&0R z%n6d@1tnL??LgKYj(f}p$a})jPP)S`$p!c$aO|h1#+hzfK$lrO2mTfyR*g5y$3)j0QUUEaoCxbkBEW=MrH`LN)AAFk@tXrKuGX;1Sj!1 z0Q#;TMYSq{aCL4RLxrS37)R!dKf)`RmxVxL%e>lzn4N$#6PwzERGdKM$mc+E5F!Dv zLGY@xpGCEGK?n_S3WDt`GWQQr!zj)FGe!VwFzgWRk0|o~Eu0`J$A<5>OmN^cN@x#; z6Es;w1-=mInSTWp{6pZ4E#E3-st|<$a9*Y41a$;>JF^l3H>{=~|6oyYHUVyhM@}N} z%K*s%{w%z}Ae$R}NkF)WH`3twNqBczK=n_>1+*Sf(Sxc`n0Dh(xYz;uO}e~Ln6U)b zO$bvMM3T8TA%oALJwY1|do>IWnrr%yq% zGt!%2Eiq{JDH^)`MARk7Z_;%IL*4NV=n}p{0Qhi(m)sRBh9j!rSS-RP2NP-8Po9J75f374@~_Y6fJ+o~R^^Stu*JAh_WLNv zj`c%f*k^xW|ML*`Jch!5n~e$F_uDdAvp|&auj4>|8VoQr8XAiQqdM4a${6xcRQTIt zOhCeYi>LWhDB)kDq0v#rLQj2XP#tWwJ(%LNs6gr?rZ_mKiYOEzwa~)|Sdz>*XcZrW z!hf4Y3UfIgMPNfng4%e50TX@^$R{9bU~eoH7r1p6HWDd=+b=--bC-xZ4Pqs>gB&7~ zoD6K^WQaN5F!jySk zhC_)rqVV4$FafUmEl#qVQ39-lAiyU<6OJ1w0?VO{>Ar~y|5d^^8FCc5QTT5q=+G`1 zChA`IqB>X;WsF}xz^5X6fZT1g9DLwe3anBf+^SL$b+i)py;~xhAnAfJWCKLbUZ4(} zA9b&E1-e&xjKZBxR16^h3cTWjMo>ia5kyGUkxGNa0=RV%?Q`L3OtjyIdHkG&q^HBZ zi~?>}MD5uysBL<&Wv$VG+ZIvh!~-1?S6y`YH?OwD={1A01{2|ReG$MB!CMs36oYo8 z8c=3H`00BT?hJ-7Tydo^6rWIJZxURneiAv#3n+3ciFjL=36Z2_6d^?Xoz)@{?p-Cp z>G6M);(HaM{Oc%L&=`_6QegGRzHJHC;U^%^Le7xy0}I)R43No!6gv993*LAZ!bAR> zsFF{0reXx`5il;hZ0NWd0~WL4o=}~Q=wKS)jdV705;H+bJgR{SD)d&`yjAg^%SS=9qV=kjhBS z1gdEN#?6-xd4?<~?-w1sbNOpd2XgaapDDBc(TTv2#;N|=MHE20ScZ?z7gGH8j)Tc@!UV#DAxSF*$|}OGBdluQ7c4H1I9^cJ^%m! delta 42096 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 diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineMarkerPainter.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineMarkerPainter.java new file mode 100644 index 000000000..a5479cb9d --- /dev/null +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineMarkerPainter.java @@ -0,0 +1,14 @@ +package jsyntaxpane.components; + +import java.awt.Graphics; + +/** + * + * @author JPEXS + */ +public interface LineMarkerPainter { + + public void installLineMarker(LineNumbersBreakpointsRuler ruler); + + public void paintLineMarker(Graphics g, int line, int x, int lineY, int textY, int lineHeight, boolean currentLine, int maxLines); +} diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersBreakpointsRuler.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersBreakpointsRuler.java index 126c38661..b1b86c7be 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersBreakpointsRuler.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersBreakpointsRuler.java @@ -13,11 +13,17 @@ */ package jsyntaxpane.components; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JEditorPane; import javax.swing.text.BadLocationException; +import jsyntaxpane.SyntaxView; import jsyntaxpane.actions.ActionUtils; /** @@ -29,6 +35,9 @@ public class LineNumbersBreakpointsRuler extends LineNumbersRuler { @Override public void install(final JEditorPane editor) { super.install(editor); + if (editor instanceof LineMarkerPainter) { + ((LineMarkerPainter) editor).installLineMarker(this); + } removeMouseListener(mouseListener); mouseListener = new MouseAdapter() { @@ -54,4 +63,38 @@ public class LineNumbersBreakpointsRuler extends LineNumbersRuler { addMouseListener(mouseListener); } + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + if (editor instanceof LineMarkerPainter) { + FontMetrics fontMetrics = editor.getFontMetrics(editor.getFont()); + int lh = fontMetrics.getHeight(); + Rectangle bounds = g.getClipBounds(); + int minY = bounds.y; + int maxY = minY + bounds.height; + int maxLines = ActionUtils.getLineCount(editor); + Insets insets = getInsets(); + + int currentLine = -1; + try { + // get current line, and add one as we start from 1 for the display + currentLine = ActionUtils.getLineNumber(editor, editor.getCaretPosition()) + 1; + } catch (BadLocationException ex) { + // this wont happen, even if it does, we can ignore it and we will not have + // a current line to worry about... + } + + for (int line = 1; line <= maxLines; line++) { + int y = line * lh; + if (y < minY) { + continue; + } + if (y - lh > maxY) { + break; + } + ((LineMarkerPainter) editor).paintLineMarker(g, line, insets.left, y - lh + fontMetrics.getDescent() - 1, y, lh, currentLine == line, maxLines); + } + } + } + } diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersRuler.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersRuler.java index 78db74374..5c57438b3 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersRuler.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/LineNumbersRuler.java @@ -75,7 +75,7 @@ public class LineNumbersRuler extends JPanel private Status status; private final static int HEIGHT = Integer.MAX_VALUE - 1000000; // Text component this TextTextLineNumber component is in sync with - private JEditorPane editor; + protected JEditorPane editor; //JPEXS: changed to protected private int minimumDisplayDigits = 2; // Keep history information to reduce the number of times the component // needs to be repainted diff --git a/src/com/jpexs/decompiler/flash/gui/DebugPanel.java b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java index 3f9d334c0..20f4427cd 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebugPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java @@ -111,6 +111,18 @@ public class DebugPanel extends JPanel { } }); + Main.getDebugHandler().addConnectionListener(new DebuggerHandler.ConnectionListener() { + + @Override + public void connected() { + } + + @Override + public void disconnected() { + refresh(); + } + }); + Main.getDebugHandler().addBreakListener(listener = new DebuggerHandler.BreakListener() { @Override diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index 6b12b847f..efbe2c6b0 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -92,6 +92,10 @@ public class DebuggerHandler implements DebugConnectionListener { public synchronized void removeBreakPoint(String scriptName, int line) { if (isBreakpointInvalid(scriptName, line)) { + invalidBreakPointMap.get(scriptName).remove(line); + if (invalidBreakPointMap.get(scriptName).isEmpty()) { + invalidBreakPointMap.remove(scriptName); + } return; } if (isBreakpointToAdd(scriptName, line)) { @@ -160,7 +164,7 @@ public class DebuggerHandler implements DebugConnectionListener { public boolean addBreakPoint(String scriptName, int line) { synchronized (this) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "adding bp " + scriptName + ":" + line); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "adding bp " + scriptName + ":" + line); if (isBreakpointToRemove(scriptName, line)) { toRemoveBPointMap.get(scriptName).remove(line); if (toRemoveBPointMap.get(scriptName).isEmpty()) { @@ -169,18 +173,18 @@ public class DebuggerHandler implements DebugConnectionListener { } if (isBreakpointConfirmed(scriptName, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "bp " + scriptName + ":" + line + " already confirmed"); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already confirmed"); return true; } if (isBreakpointInvalid(scriptName, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "bp " + scriptName + ":" + line + " already invalid"); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already invalid"); return false; } if (!toAddBPointMap.containsKey(scriptName)) { toAddBPointMap.put(scriptName, new TreeSet<>()); } toAddBPointMap.get(scriptName).add(line); - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "bp " + scriptName + ":" + line + " added to todo"); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " added to todo"); } try { sendBreakPoints(false); @@ -328,6 +332,15 @@ public class DebuggerHandler implements DebugConnectionListener { commands.disconnect(); } commands = null; + synchronized (this) { + for (String scriptName : confirmedPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); + } + confirmedPointMap.clear(); + } for (ConnectionListener l : clisteners) { l.disconnected(); } diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index f5524a5c3..11235ab41 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -426,7 +426,7 @@ public class Main { } public synchronized static boolean toggleBreakPoint(String scriptName, int line) { - if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line)) { + if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line) || getDebugHandler().isBreakpointInvalid(scriptName, line)) { getDebugHandler().removeBreakPoint(scriptName, line); return false; } else { diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index b105367b4..0932db1c6 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -2838,10 +2838,10 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se public void clearDebuggerColors() { if (abcPanel != null) { - abcPanel.decompiledTextArea.removeColorMarkerOnAllLines(DecompiledEditorPane.FG_IP_COLOR, DecompiledEditorPane.BG_IP_COLOR, DecompiledEditorPane.PRIORITY_IP); + abcPanel.decompiledTextArea.removeColorMarkerOnAllLines(DecompiledEditorPane.IP_MARKER); } if (actionPanel != null) { - actionPanel.decompiledEditor.removeColorMarkerOnAllLines(DecompiledEditorPane.FG_IP_COLOR, DecompiledEditorPane.BG_IP_COLOR, DecompiledEditorPane.PRIORITY_IP); + actionPanel.decompiledEditor.removeColorMarkerOnAllLines(DecompiledEditorPane.IP_MARKER); } } diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index fb8b07177..060d7b898 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -45,15 +45,6 @@ import com.jpexs.decompiler.flash.gui.SearchPanel; import com.jpexs.decompiler.flash.gui.TagEditorPanel; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.gui.DebugPanel; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.BG_BREAKPOINT_COLOR; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.BG_INVALID_BREAKPOINT_COLOR; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.BG_IP_COLOR; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.FG_BREAKPOINT_COLOR; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.FG_INVALID_BREAKPOINT_COLOR; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.FG_IP_COLOR; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.PRIORITY_BREAKPOINT; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.PRIORITY_INVALID_BREAKPOINT; -import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.PRIORITY_IP; import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; import com.jpexs.decompiler.flash.gui.controls.NoneSelectedButtonGroup; import com.jpexs.decompiler.flash.gui.editor.DebuggableEditorPane; diff --git a/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java b/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java index 29763fea9..15cdecf5e 100644 --- a/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java @@ -17,29 +17,44 @@ package com.jpexs.decompiler.flash.gui.editor; import com.jpexs.decompiler.flash.gui.Main; +import com.jpexs.decompiler.flash.gui.View; +import java.awt.BasicStroke; import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; import java.util.Set; import jsyntaxpane.components.BreakPointListener; +import jsyntaxpane.components.LineMarkerPainter; +import jsyntaxpane.components.LineNumbersBreakpointsRuler; /** * * @author JPEXS */ -public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakPointListener { +public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakPointListener, LineMarkerPainter { - public static final Color BG_BREAKPOINT_COLOR = new Color(0xfc, 0x9d, 0x9f); - public static final Color FG_BREAKPOINT_COLOR = null; - public static final int PRIORITY_BREAKPOINT = 20; + private static final Color BG_CURRENT_COLOR = new Color(0xd6, 0xe8, 0xe2); + private static final Color BG_RULER_COLOR = new Color(0xe9, 0xe8, 0xe2); - public static final Color BG_IP_COLOR = new Color(0xbd, 0xe6, 0xaa); - public static final Color FG_IP_COLOR = null; - public static final int PRIORITY_IP = 0; + private static final Color BG_BREAKPOINT_COLOR = new Color(0xfc, 0x9d, 0x9f); + private static final Color FG_BREAKPOINT_COLOR = null; + private static final int PRIORITY_BREAKPOINT = 20; - public static final Color BG_INVALID_BREAKPOINT_COLOR = new Color(0xdc, 0xdc, 0xd8); - public static final Color FG_INVALID_BREAKPOINT_COLOR = null; - public static final int PRIORITY_INVALID_BREAKPOINT = 10; + private static final Color BG_IP_COLOR = new Color(0xbd, 0xe6, 0xaa); + private static final Color FG_IP_COLOR = null; + private static final int PRIORITY_IP = 0; + + private static final Color BG_INVALID_BREAKPOINT_COLOR = new Color(0xdc, 0xdc, 0xd8); + private static final Color FG_INVALID_BREAKPOINT_COLOR = null; + private static final int PRIORITY_INVALID_BREAKPOINT = 10; + + public static final LineMarker BREAKPOINT_MARKER = new LineMarker(FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + public static final LineMarker IP_MARKER = new LineMarker(FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); + public static final LineMarker INVALID_BREAKPOINT_MARKER = new LineMarker(FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); protected String scriptName = null; + private LineNumbersBreakpointsRuler ruler; public synchronized void setScriptName(String scriptName) { this.scriptName = scriptName; @@ -51,23 +66,23 @@ public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakP return; } boolean on = Main.toggleBreakPoint(scriptName, line); - removeColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + removeColorMarker(line, INVALID_BREAKPOINT_MARKER); if (on) { if (Main.isBreakPointValid(scriptName, line)) { - addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + addColorMarker(line, BREAKPOINT_MARKER); } else { - addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + addColorMarker(line, INVALID_BREAKPOINT_MARKER); } } else { - removeColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); - removeColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + removeColorMarker(line, BREAKPOINT_MARKER); + removeColorMarker(line, INVALID_BREAKPOINT_MARKER); } } public synchronized void refreshMarkers() { - removeColorMarkerOnAllLines(FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); - removeColorMarkerOnAllLines(FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); - removeColorMarkerOnAllLines(FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); + removeColorMarkerOnAllLines(BREAKPOINT_MARKER); + removeColorMarkerOnAllLines(INVALID_BREAKPOINT_MARKER); + removeColorMarkerOnAllLines(IP_MARKER); if (scriptName == null) { return; @@ -77,15 +92,15 @@ public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakP for (int line : bkptLines) { if (Main.isBreakPointValid(scriptName, line)) { - addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + addColorMarker(line, BREAKPOINT_MARKER); } else { - addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + addColorMarker(line, INVALID_BREAKPOINT_MARKER); } } int ip = Main.getIp(scriptName); String ipPath = Main.getIpClass(); if (ip > 0 && ipPath != null && ipPath.equals(scriptName)) { - addColorMarker(ip, FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); + addColorMarker(ip, IP_MARKER); } } @@ -99,4 +114,71 @@ public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakP return scriptName; } + @Override + public void paintLineMarker(Graphics g, int line, int x, int lineY, int textY, int lineHeight, boolean currentLine, int maxLines) { + + if (currentLine) { + g.setColor(BG_CURRENT_COLOR); + } else { + g.setColor(View.getDefaultBackgroundColor()); + } + int h = lineHeight; + if (line == 1) { + h += lineY; + } + if (line == maxLines) { + h = getHeight() - lineY; + } + g.fillRect(0, line == 1 ? 0 : lineY, getWidth(), h); + + ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + ((Graphics2D) g).setStroke(new BasicStroke(0.5f)); + + boolean drawText = true; + if (hasColorMarker(line, INVALID_BREAKPOINT_MARKER)) { + g.setColor(BG_INVALID_BREAKPOINT_COLOR); + g.fillOval(x + 5, textY - 10, 10, 10); + g.setColor(Color.black); + g.drawOval(x + 5, textY - 10, 10, 10); + drawText = false; + } else if (hasColorMarker(line, BREAKPOINT_MARKER)) { + g.setColor(BG_BREAKPOINT_COLOR); + g.fillOval(x + 5, textY - 10, 10, 10); + g.setColor(Color.black); + g.drawOval(x + 5, textY - 10, 10, 10); + drawText = false; + } + if (hasColorMarker(line, IP_MARKER)) { + int mx = x + 10; + g.setColor(BG_IP_COLOR); + g.fillPolygon(new int[]{mx, mx + 10, mx}, new int[]{textY - 10, textY - 5, textY}, 3); + g.setColor(Color.black); + g.drawPolygon(new int[]{mx, mx + 10, mx}, new int[]{textY - 10, textY - 5, textY}, 3); + drawText = false; + } + if (drawText) { + g.setColor(getForeground()); + g.drawString("" + line, x, textY); + } + + } + + @Override + public void installLineMarker(LineNumbersBreakpointsRuler ruler) { + this.ruler = ruler; + } + + @Override + public void addColorMarker(int line, LineMarker lm) { + super.addColorMarker(line, lm); + ruler.repaint(); + } + + @Override + public void removeColorMarker(int line, LineMarker lm) { + super.removeColorMarker(line, lm); + ruler.repaint(); + } + } diff --git a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java index d558924ad..062e1dbd5 100644 --- a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java @@ -82,7 +82,7 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan private Color bgColor; private Color color; private FgPainter fgPainter; - private int line; + //private int line; private int priority; public FgPainter getForegroundPainter() { @@ -91,11 +91,10 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan @Override public String toString() { - return bgColor.toString() + " line " + line + " priority:" + priority; + return bgColor.toString() + " priority:" + priority; } - public LineMarker(int line, Color color, Color bgColor, int priority) { - this.line = line; + public LineMarker(Color color, Color bgColor, int priority) { this.bgColor = bgColor; this.color = color; this.priority = priority; @@ -109,7 +108,6 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan int hash = 5; hash = 17 * hash + Objects.hashCode(this.bgColor); hash = 17 * hash + Objects.hashCode(this.color); - hash = 17 * hash + this.line; return hash; } @@ -125,10 +123,7 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan if (!Objects.equals(this.bgColor, other.bgColor)) { return false; } - if (!Objects.equals(this.color, other.color)) { - return false; - } - return this.line == other.line; + return (Objects.equals(this.color, other.color)); } public Color getBgColor() { @@ -156,41 +151,45 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan repaint(); } - public void removeColorMarker(int line, Color color, Color bgColor, int priority) { + public boolean hasColorMarker(int line, LineMarker lm) { + if (lineMarkers.containsKey(line)) { + return lineMarkers.get(line).contains(lm); + } + return false; + } + + public void removeColorMarker(int line, LineMarker lm) { if (lineMarkers.containsKey(line)) { - LineMarker lm = new LineMarker(line, color, bgColor, priority); lineMarkers.get(line).remove(lm); } - repaint(); + getParent().repaint(); } - public void removeColorMarkerOnAllLines(Color color, Color bgColor, int priority) { + public void removeColorMarkerOnAllLines(LineMarker lm) { for (int line : lineMarkers.keySet()) { - removeColorMarker(line, color, bgColor, priority); + removeColorMarker(line, lm); } } - public void toggleColorMarker(int line, Color color, Color bgColor, int priority) { + public void toggleColorMarker(int line, LineMarker lm) { if (!lineMarkers.containsKey(line)) { - addColorMarker(line, color, bgColor, priority); + addColorMarker(line, lm); } else { - LineMarker m = new LineMarker(line, color, bgColor, priority); - if (lineMarkers.get(line).contains(m)) { - removeColorMarker(line, color, bgColor, priority); + if (lineMarkers.get(line).contains(lm)) { + removeColorMarker(line, lm); } else { - addColorMarker(line, color, bgColor, priority); + addColorMarker(line, lm); } } - repaint(); + getParent().repaint(); } - public void addColorMarker(int line, Color color, Color bgColor, int priority) { + public void addColorMarker(int line, LineMarker lm) { if (!lineMarkers.containsKey(line)) { lineMarkers.put(line, Collections.synchronizedSortedSet(new TreeSet<>())); } - LineMarker marker = new LineMarker(line, color, bgColor, priority); - lineMarkers.get(line).add(marker); - repaint(); + lineMarkers.get(line).add(lm); + getParent().repaint(); } public int getLine() {