From b279510e5ce87a51c5dd8ab5e739b8773a8b4498 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sun, 10 Mar 2019 09:03:22 +0100 Subject: [PATCH] Detect when a file is created with a newer version of DIYLC and show a warning Force correct prefix for transistors in spice --- .../src/org/diylc/presenter/Presenter.java | 13 +++++- .../diylc/presenter/ProjectFileManager.java | 40 +++++++++++++++++- diylc/diylc-library/lib/diylc-core.jar | Bin 276939 -> 277144 bytes .../AbstractTransistorPackage.java | 9 +++- .../src/org/diylc/netlist/ISpiceMapper.java | 2 + .../src/org/diylc/netlist/SpiceAnalyzer.java | 12 +++++- diylc/diylc-swing/lib/diylc-core.jar | Bin 276939 -> 277144 bytes diylc/diylc-swing/library/main.jar | Bin 616031 -> 616301 bytes diylc/diylc-swing/update.xml | 4 ++ 9 files changed, 74 insertions(+), 6 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index b8584229..84edacc4 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -300,8 +300,9 @@ public class Presenter implements IPlugInPort { @Override public void loadProjectFromFile(String fileName) { LOG.info(String.format("loadProjectFromFile(%s)", fileName)); + List warnings = null; try { - List warnings = new ArrayList(); + warnings = new ArrayList(); Project project = (Project) projectFileManager.deserializeProjectFromFile(fileName, warnings); loadProject(project, true); projectFileManager.fireFileStatusChanged(); @@ -317,7 +318,15 @@ public class Presenter implements IPlugInPort { addToRecentFiles(fileName); } catch (Exception ex) { LOG.error("Could not load file", ex); - view.showMessage("Could not open file " + fileName + ". Check the log for details.", "Error", IView.ERROR_MESSAGE); + String errorMessage = "Could not open file " + fileName + ". Check the log for details."; + if (warnings != null && !warnings.isEmpty()) { + errorMessage += " Possible reasons are:\n\n"; + for (String warn : warnings) { + errorMessage += warn; + errorMessage += "\n"; + } + } + view.showMessage(errorMessage, "Error", IView.ERROR_MESSAGE); } } diff --git a/diylc/diylc-core/src/org/diylc/presenter/ProjectFileManager.java b/diylc/diylc-core/src/org/diylc/presenter/ProjectFileManager.java index 8277ece4..f0c58bda 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/ProjectFileManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/ProjectFileManager.java @@ -44,10 +44,13 @@ import javax.xml.parsers.ParserConfigurationException; import org.apache.log4j.Logger; import org.diylc.appframework.miscutils.Utils; import org.diylc.appframework.simplemq.MessageDispatcher; +import org.diylc.appframework.update.VersionNumber; import org.diylc.common.EventType; import org.diylc.core.Project; import org.diylc.parsing.IOldFileParser; import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -209,7 +212,15 @@ public class ProjectFileManager { } private Project parseV3File(String fileName, List warnings) throws IOException { - Project project; + Project project; + VersionNumber fileVersion; + try { + fileVersion = readV3Version(fileName); + if (fileVersion.compareTo(Presenter.CURRENT_VERSION) > 0) + warnings.add("The file is created with a newer version of DIYLC and may contain features that are not supported by your version of DIYLC. Please update."); + } catch (Exception e) { + warnings.add("Could not read file version number, the file may be corrupted."); + } FileInputStream fis = new FileInputStream(fileName); missingFields.clear(); try { @@ -226,5 +237,32 @@ public class ProjectFileManager { } fis.close(); return project; + } + + private VersionNumber readV3Version(String fileName) throws Exception { + File fXmlFile = new File(fileName); + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(fXmlFile); + + doc.getDocumentElement().normalize(); + + NodeList nList = doc.getElementsByTagName("fileVersion"); + + int items = nList.getLength(); + + if (items != 1) + throw new Exception("File version information could not be read from the XML."); + + Node versionNode = nList.item(0); + Node n = versionNode.getFirstChild().getNextSibling(); + int major = Integer.parseInt(n.getFirstChild().getNodeValue()); + n = n.getNextSibling().getNextSibling(); + int minor = Integer.parseInt(n.getFirstChild().getNodeValue()); + n = n.getNextSibling().getNextSibling(); + int build = Integer.parseInt(n.getFirstChild().getNodeValue()); + + return new VersionNumber(major, minor, build); + } } diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 7fa620bd37fd6b7c21d3ee5361bfa25228dfda0d..723dd0f6dce04984934b8bd29fe91b6bf99ebde3 100644 GIT binary patch delta 11289 zcmZX42|N{T*uFC}*6bYn5|QoL$x;$R*(H&!WNniyQPfEyB$P4;l}M{4awJPx%N}J5 zZ+5b8Nr`XH%y_@={r~-be$VB;ulv5Q=bmStXPh~WOYF%j>?~HMAjCvN!$3nLZE)%~ zi!>;O44QwbL!u@@6dfH1k|5$uEC&P=(+PYiE+LT6ah#xpjsk!-I@$rU=y)C2g^uNb zDmpF!7+)NeNB=$q%5xw!ENK4E4<{V<5Fq{^NmLO?Q8?})z?%3CWI`h+KrM8XfOOE& z9a2QcBuI`r7S=%V01A%Km(!vi9+qKrTxa=%I)1Z$BA}p-Jre_`Id?#)T|&KS#clca-zM)^n-Bpz1mK-0)7 z#bTbf%6u63q9TfcpQ^htuA2HUDmPJa*BTllr(sEtg3Eh9V^r&XJQz5oXO4kVeOyf6 z{sc_SIpYiru$%Z{f+NfqFv~?N7z123Com9fJB@a&(92O0BgealVxYhkSG>f_d?2HF60cT&Mb+5Xtg=#D*Aa2Snh&9|LWv*h z#R{*~s-sC0i|f}}sQ$ZMyfn>7Yn2n<*Nel90K}EJ{ILsF+wzGE6EM;!i~*?S0JeTD z+uws|`X5$4Wlxdx?zD+)Eh2@xJL@qfZBHKo&Ci~>!`=rWbi!QIc?3@Q@FpK%fWvnO7qknNQUW##Irk((3-KHW}QZmwkYe1q{2@&2m1~L{p z%@$#Fu6Y@3`RcCbV+$y8y1I!B(a;z%($I(}>dguk3jR*Src$smftH2S2!zLI?#4R| zEmuJr8czB|_8t*ffsQ~A&oMxBlwg1mgX*Br(h>5}C`t(f;U8w|_C-l060$*7>SnX= zj_SJsWX?T6(mnz&#hsrp2cVQALIh5gvRL!HOMZ`IgNwdJ4x&%J>GAl$+d0|Ho!V)w%5SlTR>Oy#qA>$K-cntM;5N>0| z&w3MdF(ueQ>Ll)-=rgW&>v>-wh#*+#m^nj=W-kRMu6^OLA@GJws2bXa` zoD>Z*;Uj=<;D$QC8W<3LAo42(bC3x{n3WSEQnarTII&EY5rkq4F+>w&u$*GMuY58_ zBJ^S95CT8NE|y@AQeY2bK%DX=o`7sr)b<@rB=A6J9aD;gf+Z4Rg8YiX=d%esa03^_ zO1TRYj$+*T)U95;&mcU*Y-chF%h(*N|b|iMR%0)!%mzXelN$ zgj6hKe4dbip-anz3JmT3wbgQ~KLk6>_I!hI2t%6$AQVGaXaP42jW7V)F+|S{NE6UG zB;+%C&Lh*FLN7PvFbjY$em8c29wVRS0?uP-kOw%3A$bAdC5HNhfesM8W*^OVKkG+Q zbtAvxu&XpcgdKz-cFL$2FpjmZRRRdZIut<>=R1JR*8po>pfuo!IbJvqd0s~xWVCgZ z6*(XYs}rXP%wg!ND)RJ!u9xy%KrR7AKAONWtVWwQ;E#EY_5zidmti096id(YrDZM{ zN$(FY%p;fVs{wEeBO@#EE{4`kfC!BIW(WI0b%d;hl3`~tXd9)#0>E#rCF`w{wub?I zEH>3{ORlOT5Q}9YTI=VmBU}42%)yM@Q2WFoTFRsgz=lcta|~cXw@b=4SAY&Zi(zh0 zV1&B$Q~r1Y;pp~A2|Eo)aiF#rp}-ex_q%o#IEkUza9}^S52{B3`Iv1Y8kj~C!(BIl zQ8ctN7O+5{swnI*FogwdqyVN^eY5+32v+PYvQc0*|A#;th@N$o5^p({kqg_2Y~6~~ zCpR(pvNXg&Ig|w;J04Z6O%4Fip~(If;EIVT%Ln#iBK{TtZK$*DH9+Pbt^ zm>J|(hni9l-aY{`!4Y-93`z~G2V^iEk3Iq-*qIwK@!9ekqT?DZ4UPK$22oZ%0f=g< z4!8-Z!lIm70C`MD>}S9d^A2p30FsUdzOg!`6lcK=8_mjmPYG?DLZSCiP z*H|lkWj}4csIJV!htopF+(qA4AU~!H$L(2-6NABei9gNIz#*k;WJ=;kx5Kl-a5dw> zjJwq`T4_h-SqJXDQ1#<8Jt4%!RC+#XScld*c_jIc=MybY33AeK+O<{X`tvRy{FC7( zHqE^wzoH(^JUw}TLpieZ%qGczG{+5ric`6E?edXRJ*x1sp>tutyQk(PC(cOS&^q6S z)MI|vPJBA%*VmX)JWXE9ZEH-O^v*FG{E=&|!qT70^mg2-gLl@gh`HW{Tj5i1ul-1u z%FKy@g3ATdY>oN5%-2fKUo^`zo7$GNosYj4{NtLS@!FEVJ*#b-r9it`e{1T)RBN#k zEd};pcj@Ee4Xy^p(Oyf}Qx4cI+T%XqU88nxGDD+}>{5Gk!ehdp+?RPoDbInf_B+!n zQh=gwM9wXem3Qf2ydg7@j){4}u%9W4z2s?T6z7d+L!1gP@~xf((A{-nGKyfiQDtrY zfk;%?L);4xZ`vO!h;<>_WxuB-cFji@%{=|ZUCvz*(>nh)MsZ%U+FCJR-Oj0KqRhd% zyGorUuSJR1@cQ+fbn;i{auS2iQmVAsu~$(YqcPb-a-q%n9{ry^ws-Lt?>!N(O^`fV z%Mw}`DSCAL*OA(wUm0S5y{CS?7L%=*?3TTfaAS?*2LB~dy`y3ftw+n(Q}d%!YaV=; z?udIQoQsNzi9U7B)!#tk!oCvG&?G;1&Bd219}}dR$VWP_k@D((kYn3~JP+_x*_uc7 zUcOrtnsX(xW!n3(LygFlACLDpw>R-@g}?SkW?OlKQ_Wfu z`P>#wPZ}J^bvHgd&+7XgI7jEA@x}BA!yyhm$w%G$ZnX`$7MeSq0j9+298F3!jLzOy zOgZv_cp*yl4LNg~bZ1SHd_qE|=6tDpeYJm4v|O0a#i`IvAMR&8JJr2p-BXu$9_$Tx zoRsNt>yyVDT%~#v6?aaBWI_H3dTa7%O#}A(N-jtaK zo9EsbG_Q6KFXWE;s=j?(m94_W{LiBkS_$drDmXOezdhXVc|qsM)r8_&a{I~5z;6t4 zzE{BO_m5r=hyYfrHCojAOS0a5T{ha&O6pyl@vjPO=r-6CQ7YSaZk4Y&AgJRPr}Z~) zPqq5hzf2eC7mXvLDtdo1N7tWhVd*n4RY;1q{d`H(IsBRTQNvK$voF5CN(dO*+aCVx zr|;1S&c(UwJcVk-k4F`!2Pgg^Tf|=Gi*m|m((=xEd*fE2)0yo=N5j{&s|D{WoWe@4 znGb`{ekL^4`V5YT*`Dz%iQXe$tkhO=Pdj1V=Uud#wagK_cM)c1DLQ@TM(;*W5+|*e zHkH*%VpubWQi6%;t8MpAHx}6zlm~9=1dIpo{7J9*j#kp3k?8IhZMJ7)cPV+?p`%+_ zowsrRnd}A59IxEK1MQ5NLH%(}GoBR27w<^5?aO-HVJYE@8gy?%Bk6VzFYkHp5(jIk z30V4;EwW`Rw=BrkUx@>6OYqg}z4m3eahh@Vq2gPfRIZan%!e1&6AKUuqf`R(c zg+M68?wQlf(s6SlCY9Ga#ncT zfxXx!ZFm&CgT?kbg6}a~x-*C$Ij@d^ukFw+{Ovf&wsW8OTXVp@7(b zV-)UEupLwXxz2t12rCWEfCvo@2~&@71<3Tl++A-r;){lIjlv1hJI_?LONyP05G%f| zWFPfpKc@<(p=PwsOQRQI{rnd_dBSXF0w|iztTpF3a}rKSbu-Fw>+H_@wI+Ff@zPxR zsz9aJQcFsY^Q$ap1K`1IUr6iQ@r>X9gsk4kyE1i=Mx$NzYYE#wUHO8F2j+OQFIo@6 zWVOSCv=O4x>q;@AC!>ZWS(tQrep{-k4Z@Fq5hIS>o6R#^m}08rs68jUeuTSHxOVR2 z@|^5?M&xL)9$jVLJiS0JZwmRTYj)`7foj>cje@q#{ezao4YR>k;)ed9B5}iHFps!l zRLm-|{_4!%p!W6hx@O%2bE3qJgVmm8?BrVA)4zDvPqS>WY`TPRz9*Y39b?*jHOR9b zANgR&BVzO3hs}daCM+(sM8o4U`>mh1J-s7t{rr%c?;!fmc~wU)yA3 z$Y0w|IqYb5I1<_UDQ>Dqx|cosmWsF47ryMBER1E`+2&O}q-CBX_Z_mMyB>!3X7#+B zFk(6RlW=xW@$9{^6@mW!8g?D>MdqDvOgkQZzEEoWShy&WSZz8jS884~#T|0N@R@1s zfV_#~ofMs_d<~O7+%vo;8U(2PTd_Gs&LfzdG07nt!aBX<%c`c2icc(mw6$u6-yKKG znvgX2_JG|CKbEh~r5dH?Kam>D8s2!Ccrfnwa9l|H%?CdLhjs6d)zc1ffA^hA&fk9f zymQCTRR@{E)&uvi_hxX_$?V8bnRZX(m*4&AbmmE~Zh-{O-&fe~CZl>es4VEGIFFOgamlmQttDkkGrI4t&ls9^ zFBiGhucn>wr)!N(5#C*+;TAcSqVVUutG8Vp<R%1hTOyqs%lNNy>cNjkf>n?XZ;U8v&p971D)+-C;OhDNu4dMincs-Qht(c> zC$y0R2PG48rX$nFi-#R|cQcQ6`XDg= z#WEm7ocJX&&Uhg?t}s}?9t^gsHwaE1^hzaH4&GW6(64@Tw%AAYQ32_IgT;D)Hu0aC zte|(DGJ0>G8-#~A`na-8B&gj845bnMGRYw9(VOhnQ??Qqrd?MeItMeRM?yPx?1*C@ z=Zy*>hZhKJ3mkf>AgrGxXy$i4`H}hr<#nA~T(i+d?S8#;C$bbz=AQXywELwNTi_+t z@@!@=IMJ^Uka7)_*=b!8<>f4s;nFeBS9Y`eNjb-v%#QQ`Ue~WAw~j$=#Vg$h*CHh* zQ~iYK&Ep&2=W{g`6${zGLbr~@y_oiVE57|Dsh<3KF7_se$Gyqo8>-QLyEN{)2^<#^ ztI55c)Ij+_+@3ZcIGKk0+{S9f7x00Vr*?gYmY3sbPJfNt@E+mliv3 zDSi2Ix5i)l)}30Zj({-wRmOCSwu6Q;>Fw@?k#+{h(uD*%CVgJ>RR#EcYJ9=-k@Ws) z-0I-pY4RHdsYHP|Wtv(eQi$f*{MC*sw>bM*p(8abw;$QW%4VEDwKGHG<*ERG<&#lS zO@;k*R_S$dGA!N<%%L9J`>}ik-#&H`2JY%WvJx7_gWlw@s!8U&|+r@>LhM+_3U0x0j;3 zc)sUdKq)*sY&+zxM{Lz>p4@Rsi{EZBXK$r!8cUImw?OrstBo;|JfCahf=ri0P7XBY zL|e=~UR}DK*+D-M9y8lDNwC;)iQPt9N20lUWb)UpjInLT4VuI5nlz%B#+nWtakCcL zOF^vG;+@j6l8 zeEs%9_lqm!Gkx`n*k29MQURV{s|vvh29^$p6Heyeq@s8Xpn{Kp!1QjAUccP9f7s$ zPdMdndeRv?dpR9u(pOQuKD9m9zbw?4k!VtWP&`Rz=&p6jYWLmy4+7`mPm|Bj>#1)1 zZu#tTg*jL8v;|?UDlq!)@IvXBlUW{Zv;C^W&%Z+J4rFM-_28@cQ5wZz@DYqSh4K4O49*S7jO4?AkR*Ze%ad_rSFZ8_mX&+{XIWG`(l{v zy@Oh7NxsVWo`3eP%Ku|fZ%fb0OlIlsv1(sFy`gtip6ubRayIvU(&_dfZT`%PMBQVs z*}3|7(ubHn!k|{JZaTf;Z(os@(wpIIiap=@3&&f+KD2x=0D~^f%uRozcxhDnx=a~o zuJ7JsbpamEG7E1t4{SK#(FE=Q66<4{Kb@a{-K@J5Z@YenzlFuG=;+{pn^(K!pajXO zL%QnK(Fn4QfaDhj@YGedsWBegXQ9!tf(rNlv45g%DsP=ckwofd_x~UZoG8GYHoFwdlxoosIr){JdzT=CEYPdi33E4_rE$kw%UZ1T&-~Jn?UPwJO ze>f(-{N$W|yu0$TiZ@+fUG;djg>PhPe;NA|7-*k1r})e{wN_=)!d1&OxAlafW@(18 z2Dg#i#pTi}Z({t3x7NZ(yb5+s%S$hJ@?4r?Dqo2hh}1vl_NdEhLfzyXlexi(K4_Qu z!!>b-}K{bZ?HXzgAuI*w}s}Rvz8T%tG?AZ6|KjJOp%Pq%6HtFMD?zxdIPLW#_y1-_; zi_NJjgY?tF^&hJx=qJVaNt@1L(c9C(1|hbWZD#}vCpg&7JIj7Q$_8&xowyCODk-t4-}vC+z$d9~e^?aLwxQ34x2L_^l=F=rZN^e@{?hz?Ek z4~V?I9-gVs1I{e{7&muKa0`jrWG%eLrKuA3n2WDr$o}1PyTp=krD%c-< ziMPOHSE_z0*QeaT*L*MH{Ss^YUk5HpS`?dK^rARP2Vau=LhQTww5p4{BG*@MkUzqU zSn+7yJmTiQl?J;4@}4XXsRLgv3uL1X+#OCBO*R`jG|E{sA1Y63{(7yGJH?i6{dnsF z3839$o5p{S*U$Y*1H9chqv7@g#p$-DXVN2liH;80uo*|{O z0{;9?6&))HOY2qA72$J9zJd`hw}wIt!yX;Ccu{>Bo}WGUy*TvvfL!6a?FYV1w*UV7 z%}CK}0FfW+=dH%g;6)5ow}Cb2C)kvjPOuyMH`t>G48%TF?(YXJF{C&Ix}g6W!wJKn zCiU}sxN#WNMFGnQsE7jH5m23)9}XG;4Ny=%0`5V<`UtoW1-hf42?}CILG%j=@TXDG z2(@sI{cn^Y>^}yIp=NjtM88J>cToYgGVeGJ?8fnk^l|VYN}e1C%~7B=fvBTu37G(Q zqu}iXXo~`lNzfSu=eNM;N$?12k^KQ$q9F7KZuz=pk(vSzqpmAcc&&yh&V-4lS(LM57W6{Fty$0-1%q2aeGbnPKZolXoWnWl^WY(r z95WBvpy2yFu7|XM&pmVjuk~dCG)6fhi{N<_+*!n*7z`()1HNin^p%@p)Za1&^VYkyX$e1(v_? zi<0*XJb_xc*Klxg4LpTf#@6ua+P^^y)N*qR^!>)glm2Wq;SXND^$*@LiFLdiKI@<% z8eY5(+M|HuFYa>u3m!l%PyXVZ*}wR7_HW<`;SIdKa~t?9tT*ws@pKcL;5`6ByK>JJ zLJQn0!$z2w0Aa20-vX^$Kn{T1(b9JS=rk21fq0N32w_X_^_GPNg0N;Ehj14Kg0SVl zLJMJQ(2Ev#RnS6Mx7g@#aGVap7SS6z2)id(=<#qjdOWVS<76u4go~{hIrGNpi z4l&{-92p_xvpD2#d(H?MqF|8`GC+YQ6J&{km@Ux9goIPcirbKcR6yPa>7$@#8?+w< z+n6B}6xcK4c`~-Z2s2)S#DaqW7U&>Ke$Rr3)3f4H=35|<6*59OeXKZHnhg*4WrGf& zu6Jy>o^9+naAZgNLseMFj)$*r0YeVFRxAh7RVt^S1L-OisBq$$FKvM;PMn;+9TJ2k zxR7r`QHh7RaGA+mc>l(^@Oi6o<1(*qfhKNTln@b5?@ok_(LA|CJpIa+ONR%~6T^dC zJ!-819^?vBff_F!9?FYHRrBIxc0R}y<+$+SmKS_@iIpvv0Y4solONafjUN{;D}Xo2 zUjV93E^!S62cYA2;=07!gz@)VVuk)f^)1z zaH;pVz^Dk`LuFB%6TAf~MR7gM+i{o8c03%pMA%9h+j7Z^;jSPtTt>YZ&S4kFT@K>- zBFYxWGcSrG3aKZM_722F1rb}IZ3n`kT7)I=8_`b!$wRf2Ng$Vi3Ya8uj-4ca*FKd* zrbBftOX4@H$xb}#?oRwZp5BSynz~YWo?BA*?K>!i?Md)HX~+T1lP-;0)}`@X$zBF> z#bn4p$59|Ei(A5FA#A6fm4!S|*AY1gJHXz{;p818TxtLbSJ*(p_b^F$99-Q3-?qRm z1>ALe3rs6O*m-QIi1#N|5#N@U6_M?P+5{sdyhNH3&RI~xT?WdKBg%QC3?2P{U%xV_ zKqlLf1pj#-A%(op-ulT36W$N|szSVQvjNBn-&cXqZ@ z>yZDi@Kcyg9a2Np?NnAAp}t^mMP6F}SKYg#SiW#|Tt|vJQpL&%vvzJ-r>Ryh7tAWN z3+L+YLaaNEQ>~(K$Sw$dV-6=!t=$x=l@Dew1KHuPyC5EP>a$c=OzHn|scJynsKo!g zXZcS9kCpw)=YeOHA!c;mjOq{6PaE z!oHdiE$rJ2GQf(O_$t_|iTJ}m|Lf;Pqhb&%Xwn73sh!|fIMp~-3VH8rlbRwe=m57X2c9fAF5kj)d z%&Lt3uk#$g>-YWt|E|mReBS&1+~c{Q=iKMK=XoD3u{AERF`FMj2n>%VL?(7#E0QxNFE!DWF3Cu$3Ll`j22}BzkB?!B*(Vd`# zjSmTOn`8ca!hIM6$7su`F%1v%FgC6+uVRY7EDaC_YS~f&@aEV~z$DQ;Awa^<_ZoO< z6u{j%3Lii)PWrZOKvgIH1W3H3M1dqy<_!RPaz?;Ug#2y*8Wln@K(bcqz}(0xM*_`T z6+QquRYd_mns>MDY0KD`}04UMNllgk!0Z8VY zQ8EB*hy6jqAtv)ca@iaOfYZtqfJ;ZGu&U*svX=zp`%a<&Z-%Bh&a`VbL;C10z5)-B(g-Zcd zS!6sgw~bN*oTzACAbB1m3pk%+VE}p`G6V4A(F_JieUGO${gFN&6LurkgDp$(Jq+4Nm{J$#ui2+61atqx+^6h0 z#l1Tzhy*GsLwYJIagyGQV7}mA5|~fk#sn4?O@yE{%y(l9UCRxGii(4l z#MUE%D$+o-WPccXfTcjDrh#%X19CAPG>GjhasoH>3>0Nwj9TdcWx74^!+j7hI?F(y zC42KjAO!iC5TpXUgo{EF0Og58bO4n}LQDWP%0PTrcH}X6$Pz@;Rf5QDn~OtU+6$q8 zcYi+=4v>%$v;la+hoQefCSVHH0QAiQVh8!@udeoNZXGKuKQhlz$P>oaY1CUpoP#oH zX7t})h>x6Z18oPkACE)L03|pOrvJyzh0bDkxdKMQ7+>KJ+dJfrG3?gzCZK8SMW3k&coYLiv|Q z*@+N0+Q&iQChOdSIDjX!5U2+gLLXHLg80!YPRdF+MM4%B5A`sD z#mSxbA<(VJhe!|)0lU7AkR=q&C}xK#|6-`$Gl&O8xd<%eSQN4YA?6ac3R0B}y#TT^ zsn8;rsM|Bh2*|RZLl!^=WkE7vIptqNLI54fhw9j{?Iy?hC?<|F`3Ep+u?OZw`*;Zq zWWD!L8ZaKOg(d;&XrSy5tX}_95!Aw!vRH&>NDwH{WczdjO6L1EC(TDb&<5FnWRg3e z-C*|&3`6?#Sm2+dzT;sO@+|}euIhlO(G&axda~6t6bV zDilH%=Q~K5^nR>#Xr%~cy4Pi3OQ6ki{C+Z+q9ua*Ey=+TL9i$#cov`=YLw>?Y$um% z!Z}!fBKz!wok5^B9XJ4J4fnv6Kufm|eh%C-cec!4qPP!0=jR|k)Le|fNdC4Tz6C5O zdomWFwZm`-uqfQlc1VL_p$sf!#VHnfrZ9e`Em&;DJ!%c>1KR|ft(?{D;Yi?x+d@Bc zjne5CQFbPnk38Z8bAi-WondBx7+qi*?5>P*orFiQ`K_LWZ-dQx(;Jp%$7ESo;Z6|e z)(zMbpqbn70Wf=wP&gOJCho#hm}9g%0v^RoDk!hQdFA!A3lM1jILf42ytZ zXDKZM$O4|giC~2*CEl_xQdYN%(!Z59pW(#N!#fDCRSP5Ixw=~57_k|i*pA+_){Mh&ckcYr*e*25y; z?i(`EZgz{3$1Q3qDvkeT)FMydB-4F_Bf+%LCb$}yI<&wFAeqQ^*bHa~I$-cXL7w>x zbAkJrxz{Z^ON!$#0_xWf%cIkZly8^JK{h!OIl2IqKUFE0BA7Veo)JKG_ea z1Fy{AU``Ne`!HMtqJJHMi?N3yGP(f!0v^LMJcvDXlc%_mHXy6yLnJt`Nsq}Q^T4)O z9@)Wx^$Cl8hE8^ro98+m%Dxv-CMF$ov=KDmyB;cGe6T2l=Cp}-_GyKiH~K!YdRNKP z^twK^hO@aULz~%nV*1bTg$u4c`?r5~SMsny`Q2~YSBigC4-RLG&bre}F#Gq8jWkW| zQk(5ws92cU_|y8j65)H-ts>zUKYW&Q>*{BzMCG+fc!jf9eDrs}2Lis9RYwCmoR1)<}Z!QQi z3a#+>))_Z0`X~omA_YvRrpw&FNe&ffrPj}xcwI5E4tC-?rkCRAL<-f?Ir~Mj-@b6Y z`X$*#_h(MUmU(|%NZ57y*^MFF7S7tgkut3jqp1=(+9I6?*Mr@n zE%)_o`+hed^pV)BGbe68&5Uk4V^KUaQMI4>b=v)>gBKXC41ARp7$I$6is8y3&K|T8 zb(XRT8EPg_?N1jEujrg(J0h^>!zqD1b-Y5(UTn4*>VIRcnQ49rSx#p^a28;&{d~gJ zq(&!P;P8Z%z%g~(iS4g7zQ}lAB80g#Eh+Rz%Nc|pQ#yD=Cu67!$`?mO9M+S44;hf$RoPH zU|adBY~RZZ0!LJ~-9N07{CfAaaB9RZJ%$_b05!hMSczwKjY)q?|#)Dh}&ZY{57hdh3(xi({$Tt#sa>mx*ExfB*)ytruv)7IFY-y5*|JSUgfy+Pc zNc4G>4Ci?B$bSwyr=uCDQD*qsCNy9%hq=SJJg!#jbl|O%h5_z#ytye)uQQ$dzBaH- z)X))mdRe(VqR9A?4Ey2GtS3Zw!D-!ZVoZ{$3_qTWAG7ZcEDK=_(%BGaR!JZlOY7_2 zArG-8X6^Oa-&dPgI(eX=s419O^xy>_uALSiiU;Q#{F4h`loV+ zgQL05a=dx$c!4x^ZE)qh?$*A;K2bhEuX%FIx?ZPB?imw7Pin=Zp(+>DaJ zTq8qe>Rgt9m!Cn#b(5iPjaS_4l}}yDuM(|lX#Q+GY$MtaUF5oMGql2W-Fb+WYr}l# zKG%k=IyJ|}0rmA4>ckAch4D|Tj3JesZQ*k4YjL5K#M(jY;dApBKmQI|yRH83`J9=+ zg`pIUHO7sjLxb*fv!B+CG&VT@J)0X8A0>+ac4i)|X=GnZss87EiTd@&-wEQUcizbg zKUgCs8)5#|klVUptc@Y#LAdz=i@4CB9>H{rLiLi=xNslKg2Oe}3Xa#XWw$FI)DZam zsrj?Dk$09SQ8*jTaB8P13iEM!c3y5aLep?UBV5x!=H-x{!@ahXL*8tkcr+7=4(DeJ zlzNt`lXrM^D!&tXBDGuQc?Ivw*hKWXj->BRG{)hYg8^PQ&3c-vg1^+is0znQw- zpi=$vQg5J1-)vsY*o|madW~zRA_ENNJ-^)LQ#*d)R`&tRmPZ;s@nyG6Il9t~Th%zm z#2O!~U)5}oBu+8N3*~2!{E7nnzj}DO>Nn+Ek`AdY`Mx4fit{*VoRK_JV^;d=Plc#c zb;T{ovZYwJx{}uU3x*le&E=~fv`C>p;}uu^0*hZ4oRf6B_HbNnK1$LmlqRNlx@YS&N`_A-z8rixKTZf&C6vR%>Wtn`%68vE7m^O5H5 zqmg;ThS!6ay5|!QcJChaU55e=FSp+PB11Y}y%^@dC)@MP@tMzYH5Kf8`_36h@nw=S zQoDEjaOZk(R&lgKFYNVbl!rvNQIlA=wp;BwyR`a?a=&&(2epSDUrN6YOFxcM>5|c@ z51QB`swI7`k(jsJz%iKFZOoE+cMgdmaLU_3(R(uE@!|M)A=wiTQhjQ-(Wn^g4xh0& zZ)@>7wVN|EN2%=euUPB)%Ragl8haFKFPhAW@9>PW>;9xusm*)uLtKuX6S1O8d&FTn zaQLD3M}3x8Da-mVjI&w1etuCDQ{h-RzFlN|S6_)+9ZPjGvHFW~$&^c&a%+9OKu;FW+c?(2!|T) zCYedPg(Y^1b?Zn!KX&Qx1Y>fYEbncUQ_jTIG)p--am zyyG44mHqq2U3t<(J}s_7tFAz8&8(59rYr5y9EpympZpdQgPT7*I$#C0cDe3a&lpnq z!IP_SX1jT6hw?o(O@%`R*2OIm!T~WAVm+VD!-wxo`fUhYNQ^Ivb^Q^e*8I^w&iY}q zQ+2JS(EgU#GpXq+<;%7@$wvdccVxKGQ0XsT3488dZ6SO=K#KS+=@J^H-O#%7{aSEu zNaxgfN4Mj$k2oK47tu2G*qcS3giD<#zL{XExp^wlp6UI)zA`DAWa>Y+Gehd@Gdt`K|A-ZToV({qz}<$J zcLjUnmjhNFGHY87E&6rGxSnv@%0#sEGcz4wHg)r+_R4V<<$FrX1zGg1FTcs zeBS~SM!cSd-R=K21iLtXQmK7N6?8h^=`?3resLt@PLuIVaXamZ->TGF0{-4{H0_OB zd(oQBa0>Ch|ETtn#J3XtyVU1<>SEQ$pT&>4?aMTpxObIjVo~afb^GJMD~y@!<=p&x z=EG}BP0#H&%p`Z{p1;bSGA?)E)1wQYU^&K?Sre(|;OMFIoReJL#(TP$8W>$JNSWwf zd44f=I7z)P%}6LY|Bot>y|C9L3)x`}c{dXez7R-#ezf6RD=6aleA1l8N1uZi{}^Nk@vb zJ^pZ75UV45$E?+Z{+zw{cSgOByXi=YZqbVl>3Sail+H=3N0NzxF5lfJ{yz7PdK{^D zwaTEQM?u-t_?J!}Z^ofei^j#{X*=o`(hmK66`vTDtT}Ah>-PF@`;MB3TD!v5>&)`1 z??pPAc@xwWp~;`Fr_NR85o?Syc_%vFZkM`v^_O3z^2}&R=s8Wr<+e7|ZgVCVadQ%yv|UbAVpVPc%=!u)y1V-`7*_MB+3z9iJ2UHih<)6#>H^(%-@~gQR`-xR<`I}1wv3#ml`c-i> zQ-@sH9)iw~$b#08(flgY#{sIj_hwtT?@5O^G>}bihxHv9An=;r+&3W5ZS2d}RBc~1 zeec+5ya8+3=|&C5oOOR``Ir8!tZc;c>2pf+szX}V4*nk_gyS@? z+Kz~p+lN!1`J>VPF>|HY;2bf+p|=t7t)8Q4T1YhKzA$HZb(YyocC5qh+VXcfCBce6 z%VRCiZbUckZAi=$GV`^X+12dy%>g~V{PE~zjn?_T2Pp+pR@z?StFhWyZ+{0(e_eW> z=$0p8lK+r?wuIvxu|=dK&||gP;22L+q;YXe>?5vVcY`}6dJgF2KO5pwM6MudYun{w zt7`YI_LwAR{|w&CD7AsIt3c}?EXNCs{467U!|Pg+_lg9%Sz*k z(|z~qzkTrLxgbTw{w43aOU}1?)`NwN>2u+10wVR&Q%unFdWG$)@9o1Qf@-=Qe7-c_ zU!_v$)=(U4<#<$HRImQ@<3l0hL7J6*FP@!MY}^%$agnzMycUKEq8G1lHhEv*cRgpZ zZ8!fhv&`1v4$r%8D#~)n22LmRF6*~s>*PFjea3%RaM^s~^~1@CR9QY3lRQAIn6awa zp0wR4%q&oNMyNP*m95h5dfTkVTWP-&Q+joW5@=Gc{78&8etdiQR+Ka&nKb&%Lzg%) zc<=XF)rZ3Fo=2+t&t_T~SV+9G>5#dRCAnlNB-FWc_%s!xJ=$%VclE_1RfmD=R(Dh7 ziw@X1UG(}iE_j4H)0M^1K4Ra+hC!lB9{>ICR5$1}>$AdxJbt<9&0X8IdJQ(C8O)qJ zKR4RFoo<%p@9fat>-)#*X2&Z}&7HZv22Fe=vWSjsgi(EZT3lzk&;9yxy!|?j*js z^H}XUqmlRJ0>!<@Thsoooks5aG(>s%dD95i47|KLtMO+bK3OP)5=VD84bW z#8JYb^h79bEzr)l@u=;qytu+bM?=P?&%}aO@vd&wFyY{hF6}9aW4U3vWX_xu-TUlm zE;fBH|(jsWphyA{6*_7o32H7-}{$}pH-;du34ID za(bAT@iy>9nts~(*z6$cRqj36bNp8yo|1j^OM9a2}ruio8P2SwhikGI3Z`;-S^*f5j*IeQcyE2^GW6or>*COg>oqEan z>Bnb@HhG7*n%!=ZYF}!T-u3*Y)8dyf2>dB;8S~<)Tc1-?P$2IyhZ-(%250l%Dj}ja zzf-HtWY*HF&2}gc*V^RmkzgO!A6?1a;d?#UaYORLzau@beycLB9o{qDeX_&JJI6L= zel57=*Q=q|bJqSGv6YV`7lupd-hPj;`{m%YU+xq!=|P&Y&lUO$9&Bg2Mwsr0S2x)0 z+Ld@y@P`6vP_|m)oms&5gSC`K)3$4QtOU`0i5$hiz$D^`fjvKPko*HVhDla_AZ8di^b?n){=_AVKM`w8bz};U zg-#*Hm}G1UIf4Q8X~YHtQPcQT`?i403?BW)400CZ%*`ODFmQYpvA{si7J%n)KMr$v z^qe`I1J5It7};hXvBE(1Jf6>=d3^4Ne&Mm6{z8l}&d*^I_! zN%DRpr!gS(2VaY;e-KwpGPDH@{~}(PB>yiSopu#5#U!>{;KeGQ{GTmwXbq2^xQ173 zehsgN?mA+CncrSVY%wsfj;mxgkb{^cU<2orZs5~l|A#wt|A&{i>>rp#oCpEi8gYRH zZ299_37{s55CQnVy9Gud0w~2k7zc@4;5STg$3i-2c^c6vO73;^ZY(+|O<{ z0$B7rYT|IeaV4W^&bcB*@zPd_c?L0ml#11o#zBU z6+%V1@a#Oe@cI>S;q!*L@ia}gKs+~|-6S{eRfUHDuJ0fo+ z@J1A`;f5&AG1!KK$ZdE&JzJ7(Vz@bFiNH?D7sJVaw^Rqj@ibz^aZbNDZY8}P-$ee~ zanF_8@eFAtaFyj2NRq%gKP2!ivsV)Lb5|0tbGIbUk&wbG7AS>J=baS3l)Tcom5VgK zPv1)8m1mN{{T!FUH$aXI-jqIRa?a zrE&xhOtoE}0PbM-mJ3B?2)d+%c!of}H zHk3h~z=>tEO`ReQJPf3c>I5$O%`|xVxnsxCN=*VcJYc-3Q^TV94RdQ9q(m#CM3eka zG&(cjfuMo=70{sgC0PKe&6f1+rgWP%kPccSw5;YwAeal;{IMl=bb?lGG9+yPW1V7$ z1(s4#8reK+ZvB4(@3aF{b4{H3JX&h#2IXf~rzrIQ=GbfxsA&``HutxhlvocOfz-?i zp+(m<3E0o0P$n&k>WTBFN)&ZEfzY6)TDZz_Q+1TQsp8u_3gJLSiV-^W)t0_=Q%_s+ zKY9sl2LCxm`A_M-mi`Zw4RzQ_z)rPMznug@MD-(rK50j|P~}F15zX0&XHdSW(`m+Z z{OIl$O7yiY9iuiySJZ~-M6rD$wz;4@Wr>N&l!{PO3Ml%Y@YlK!^i(&pP5%E{3Da=q zTt#&Xoj~~+tki!@YegrKUKqOEd9X#(tI+WbR gzauEqFe1ofeuSE4(|{FXh18ExQQaJ-oR(4jALH8iO8@`> diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java index 22fd0b07..e84d8267 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java @@ -89,7 +89,14 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo @Override public String getComment() { - return getPinout() == null ? null : (getPinout().toString() + " pinout"); + return getPinout() == null ? "Pinout not configured, validate this line" : (getPinout().toString() + " pinout"); + } + + @Override + public String getPrefix() { + if (getPinout() == null) + return null; + return getPinout().name().substring(0, 1); } @EditableProperty diff --git a/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java b/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java index 80021b0d..7a3063dc 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java +++ b/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java @@ -31,4 +31,6 @@ public interface ISpiceMapper { int mapToSpiceNode(int pontIndex); String getComment(); + + String getPrefix(); } diff --git a/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java b/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java index 8aade615..c37442d6 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java +++ b/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java @@ -80,8 +80,16 @@ public class SpiceAnalyzer extends NetlistAnalyzer implements INetlistAnalyzer { maxLen = c.getName().length(); } - for (IDIYComponent c : allComponents) { - sb.append(fill(c.getName(), (int) (Math.ceil(maxLen / 5.0) * 5))); + for (IDIYComponent c : allComponents) { + // change the prefix to match spice convention if needed + String name = c.getName(); + String prefix = null; + if (c instanceof ISpiceMapper) + prefix = ((ISpiceMapper)c).getPrefix(); + if (prefix != null && !name.toLowerCase().startsWith(prefix.toLowerCase())) + name = prefix + name; + + sb.append(fill(name, (int) (Math.ceil(maxLen / 5.0) * 5))); sb.append(" "); int[] nodeIndices = new int[c.getControlPointCount()]; diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 7fa620bd37fd6b7c21d3ee5361bfa25228dfda0d..723dd0f6dce04984934b8bd29fe91b6bf99ebde3 100644 GIT binary patch delta 11289 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 diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 63f7194df5f173831945d62d21bda9baa2864f05..f3358e68944a83cfd1f65347fbed1ec4b1834178 100644 GIT binary patch delta 13463 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 T%$-pEE&KsCk^&Z5?_&NBtaB1v delta 13140 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 rXJ8F~h#zJIMPROVEMENT Cleaner and more compact XML format for .DIY files resulting in files about half the size of originals. Backward compatible with older files, but might introduce issues when opening files from the new version using an old version! + + IMPROVEMENT + Detect when a file is created with a newer version of DIYLC and show a warning + BUG_FIX "Highlight Connected Areas" doesn't follow multiple chained wires and jumpers