From 7055a2bc47b4d66c0969fe4e58cf460ced2cd53d Mon Sep 17 00:00:00 2001 From: CHARRAS Date: Fri, 1 Feb 2008 21:30:45 +0000 Subject: [PATCH] zone outlines edition: added drag outline edge --- eeschema/locate.cpp | 16 +- include/build_version.h | 2 +- include/id.h | 4 +- include/wxPcbStruct.h | 8 + internat/fr/kicad.mo | Bin 141209 -> 141758 bytes internat/fr/kicad.po | 998 ++++++++++++------------ pcbnew/bitmaps/Drag_Outline_Segment.xpm | 59 ++ pcbnew/class_zone.cpp | 32 +- pcbnew/class_zone.h | 9 +- pcbnew/edit.cpp | 169 ++-- pcbnew/onrightclick.cpp | 11 +- pcbnew/router.cpp | 12 +- pcbnew/zones_by_polygon.cpp | 76 +- version.txt | 4 +- 14 files changed, 783 insertions(+), 617 deletions(-) create mode 100644 pcbnew/bitmaps/Drag_Outline_Segment.xpm diff --git a/eeschema/locate.cpp b/eeschema/locate.cpp index 181a1a8520..f26b017125 100644 --- a/eeschema/locate.cpp +++ b/eeschema/locate.cpp @@ -351,7 +351,7 @@ bool SnapPoint2( const wxPoint& PosRef, int SearchMask, switch( STRUCT->m_Orient ) { - case 0: /* HORIZONTAL */ + case 0: /* HORIZONTAL Left justified */ x2 += dx; y2 -= dy; break; @@ -359,12 +359,12 @@ bool SnapPoint2( const wxPoint& PosRef, int SearchMask, x2 -= dy; y2 -= dx; break; - case 2: /* horizontal inverse */ - x2 -= dx; y2 += dy; + case 2: /* horizontal Right justified */ + x2 -= dx; y2 -= dy; break; case 3: /* vertical DOWN */ - x2 += dy; y2 += dx; + x2 -= dy; y2 += dx; break; } @@ -571,7 +571,7 @@ bool DrawStructInBox( int x1, int y1, int x2, int y2, switch( STRUCT->m_Orient ) { - case 0: /* HORIZONTAL */ + case 0: /* HORIZONTAL Left justified */ xt2 += dx; yt2 -= dy; break; @@ -579,12 +579,12 @@ bool DrawStructInBox( int x1, int y1, int x2, int y2, xt2 -= dy; yt2 -= dx; break; - case 2: /* horizontal inverse */ - xt2 -= dx; yt2 += dy; + case 2: /* horizontal Right justified */ + xt2 -= dx; yt2 -= dy; break; case 3: /* vertical DOWN */ - xt2 += dy; yt2 += dx; + xt2 -= dy; yt2 += dx; break; } diff --git a/include/build_version.h b/include/build_version.h index e73849a18a..6913a3bd5c 100644 --- a/include/build_version.h +++ b/include/build_version.h @@ -5,7 +5,7 @@ COMMON_GLOBL wxString g_BuildVersion #ifdef EDA_BASE - (wxT("(2008-01-22)")) + (wxT("(2008-02-01)")) #endif ; diff --git a/include/id.h b/include/id.h index 37c9f72366..090c59af26 100644 --- a/include/id.h +++ b/include/id.h @@ -564,8 +564,8 @@ enum main_id { ID_POPUP_PCB_DELETE_ZONE_CUTOUT, ID_POPUP_PCB_MOVE_ZONE_OUTLINES, ID_POPUP_PCB_PLACE_ZONE_OUTLINES, - ID_POPUP_ZONE_UNUSED1, - ID_POPUP_ZONE_UNUSED2, + ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT, + ID_POPUP_PCB_PLACE_DRAGGED_ZONE_OUTLINE_SEGMENT, ID_POPUP_ZONE_UNUSED3, ID_POPUP_ZONE_UNUSED4, diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 87f526dada..84a0a536ae 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -561,6 +561,14 @@ public: bool IsNewCorner ); /** + * Function Start_Move_Zone_Corner + * Prepares a drag edge in an existing zone outline, + */ + void Start_Move_Zone_Drag_Outline_Edge( wxDC* DC, + ZONE_CONTAINER* zone_container, + int corner_id ); + + /** * Function End_Move_Zone_Corner_Or_Outlines * Terminates a move corner in a zone outline, or a move zone outlines * @param DC = current Device Context (can be NULL) diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 369a040a0cd8c25a85c82ca1a6fa20c13821986a..e60dba9dd65d7a0cefb6c5d4f9cbbc9c83137655 100644 GIT binary patch delta 50218 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

E4mJ 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 g%4Z561R&*lT=7ULnJC1 zW+e?05-I=p`}%(TkB;X$p6hv?=lMOy=Um_WPUE+7Q{Kln5ld64x$mS>#c&=L#MiJCuE7$x70cm1ERCnGNu~1R=~xfzVI%C1C2`*VDBjJk9o-tiu_HOi~Oi4 zzX$Dq0-nnFsVO8JU>4f(B5a4Rp))&zzYzI%F(>);Xg{0Ke!mNU zMeF~Km9Y5x1j_iS#w47{S!l=I(Fpru861GF&`5MArwmj7qb6}6~0(2(5;`!xRnEVY`6YoU#@)@jwYtZ&T<0<%C zcpy9+9u5Ebfc3Xx*4m^&t}tI%Ff598Tr%=y!t!BuST(E})(sn=?VF%0*F5s=*RuXT z=oAI#hTX!R;f0u+dcDy-?T4<+4N-n8<{>{CUFxxDy{SK^q#*Rj-P#bh6ouj-r<|BV4I-?uW!0$%ekHb@OdN>DNsYQ`r8m>fF>LX0M z*BeMU(00t+Tg)PV03GmPl>dYNEXZ1ySR$-}wrhp9I~%=K=b#g5kFMBxQGPyV4(qzO z|5sCBq=V6phKILC`5lqJFT5X}=|ps?A4LOu37yDlH1PG|7R*n67dp;9G{7V4Sbrlv zMu8n3N0&0sr>Rs6EQQUnC%U%}U|F1ncDO8DgLb$coxnzP=3k&Q{|+nTF06++*QZj= zuyLA%1745b*E`S%r=UypI6BZGwBu!109T*`td0BzwEeeHeh~ec@i#iLA{&yGDTi)( zt;nZal5l{|=#pI&`Tpnt*P($7kMjG_03Jr`&q7yZ0UG$~DE|oUcN4lb+tL31KK+aTjB~l z)BAsjgdH^4m_*nT9k?wzgNv~cUWo=U9E)HY3*!`YhI7#$$4le+26Sb1pubuDjg_#> z=gEXyU_S4EM-o=-iJ5mcI`F+%3@4$7Z!S8s*U*4gp@FZD=U<^S{UyxWl+3tvSUIc{ zHpR4i*@lEO>4wg%9~!_Atd4hJRh)}e@O^aPz37YN5A<;Ug$8yUi(>xGyri%K8u&!? z`J-4IpV`d%`vzN1felun`Hkpd*@6bP154oV=s>x?NR}`k8bB$uUU_tYx@f&KF*8AQ zLfz27`=Tp7@C(+zHHncF`0ihZ#qcxihP$y2Huy4m(ey)SG9pZ)flfs4`BZd(ndl7X zVrI**B>7e7M8AmgJ$5jNff z=b-gFggwvz`l9X9*OPGRMxskR9*z7-bSAH$Gh2anxC(3FyJ$zhpj+?{+RrIllYWY$ zOJ5T`Q%%v8=oIA_B>8me@+i12ye)Z<8iVfH!%_Z3ls|_K^eP&_8ua#TM(giK2mBjP z#{yp`6R3}FRTDI@voOE+|6CF-S#NZyuFgD2rG}yrk3tXSICS8L&=s1E4)ikG{vEXA z&(M|nF3NYJEBQOx&r!5q>Ko3S_rD+sBddW{s2?^9Tcd}kL*y?-w`w37$Zcqc6Vbyv z6J41_Xkc%ld;Lkc6|KJq(=OQ|5}NupnQ;NML1`?F)zF!?M)$r4`g{LvXaLjW`Sa)s zy@3w=5&Bba3!aO|(0)67m#p-K-?9EKaX$(iXb_%>X>=vtL_1o84zv;7q95=g+>Zv< zep@o*Ug$)w#p-x7x>Ap$^%i3-T!m$E?>5#yn?%m-$zRb_!@A^qU~{|^9dIdn%HNLi zchNolJD%s!A}m6TMCC(8Jj|O~L`L4@ZP|hvUPk=+e$c_x43} zpp|GKAE9UHb99Nn#?$a8wErACV{6eBDvgyfU4?{^bi^_^7#rff=wVtKz1@osH)2#dB~DT7L)D!g70Ae9fE0F#* z37{exVSO}^_UK++h_i7B=EYNgOMbW%$ExH@qcc4VPsR4=fIToj4#WaD1ha7zy4ADL zGn8IK!iHa=1Mfmt@goW^4^bk%#1DG4Wga)<( z3wr-QhzFaKg49m5;r=K;5#27q1A45A{8m>kM_!M*Dw^6<; z+#eqQgZ*zvg?tB-Q+#IF4s%j|F4n;wm=8yxGaie+SRO|MdL0d94|?r#97?w6R5b8% zk*|Zr$)AP3cg{b=`j;RvC@PFbw`3A}O$r`PR-g%5uM-x-%djL4#nw0$8{-;mihrVS z%({Oj?K`4pqYqmD8f=I2(|~W(Us|l*6WEy zu~+1;MbE+wk-r_?;?d|9rDu__!$s(xzK*_VHlh)KjW+lReI@7lE2&=vJu?l^0D7TI ze>ocHwdjfsLC?T_Xu#vqfgeNqPp6(EVZ{GS3Q}v)fW8QKh5ON&97nHH-lIvq;&?Xs zY_xm;I^gwaKsTWi85!P>o`LCD*v)>PgaahEO9iifA80XIZvd^Q^3 zxmX%|NBIzR0wd9WC!qD7LbrGkrcEp*;Y{8_m+AwwZXna}X8<6+L6NqK>cX-;euln<+hbTcEAtMzWgF2$xeq<8N6?96`Uj(E*=B>n}wET!{{}3H>4UTUa!25>QhtM|p?5>8#XQ zB(9*qicg}a^c{31cB3=@Ir96_f&N5io|P{v^JBXZ8b~p80u`|?)vEGtmI% zAuEV*w(1RB@^bSqxN`nU!S=nr&7PA!s^`DZ+;V{7u4 zpaITAZ^1J3{jwVkbT7IBzZc>Dn>ZE)Ig2I_3Wa6D)5E%9v+$g-YuGEiJRBU}j0P|o z{Vn@G%*OkRa{t}y=O}OmmY_3UgU)y(x`f-&SL%Lr$^SxU@=uiKES3ab5G^l_4pZF`OX0F`Rrq1J5$!kq zbrkFhe+dtT|Ae`VCjk@=%Y>D~+F@g~#Iw8%e$4)7AX_pe9(ZM46&XuAz)zgw_`_djRJq~U4ki=qm82wR2c zMtNWKFb)gTSd08*bYdR>kuz=zC^wDek`&^Oa8CcooqG z4bUI6XQ4liJEI+6hi=s<^tO!0MmQUNV{Sm(?L=QdzoPx;FO&Q<&Bk-ccSa{Lz6|%@ zrFw({U!8N&j#r=qu15pfj;_Qn=m392`9J82ajqXTXUccWXh53P3yJzS@hO;#X3TE7C?Z_Tg~dUno21L}sh zPhUyGclvO23Fl#E&%#ycOg=%E>~pl^Z_qvb0kbhzxnzLq=<{Z1VCSIix)Jzga^eQ^ghslG~26QWaj_3cPOIM=D^{5mw&rvCPUI5*)Qt0#AQQi{mw>=ur z`RKRQq4tA`2uv{7tp2sA9^d^MrZO4+R?}8fLp>n=xP5Gt(QAH z>8CJS?=-Ys&Fpj%Q8NmRurnG!FLc05&_g*8jeKyF-+`{oy^)_3K8l`&C(*;W3~l!b zI?->jA?}az%IV6w1)B$}FU5G|{BiiszbR`}}1A7cJD}|Yrisvt&?fw_}_aeU@ z4d^>G@ITNkPyb880rH)mL|Pub4QHSOwnr;=M+58|&##T=qtO}Ok2!EAdMloY=P#oD zFAG0H`}-D|NIJELgdOikJNhRqR3-VTRSAu}IcDBmXa`rKf0Qx=ozWC@t7fA=Mdza{ zxdJ^4o6#-)9_{A<*74_mo~l`yH&|md@?PkV%WKgN?nVcE3~e|c9pH`dGi*tI4|@75 zS4+02DH>2~bc;HmThwF%SNB)%kJq({)}@^6@@M)KEsMbHK<(3Lq8{jq!z zI?%0{jbqT${|q|N+gKGpM_2L)*2SVVlZl>PGw%Oo6u5Ll(HY+tJ{09M!bRxPuSB=v z3v|F=(4Y4?YbE(A=<~DC`WK?N<~nqO!_l)asuuU(nLj{*OY|_h)N>;LDmue=(GE7E zhixmmr$3-G{RQnORXdqT9yDJLy^g1&d*2WpxLG`JpC(~MUC}q&Md(0%qQU@lMXp5~ z-h_5|SCl^#UV_#ih@PSA(E;y@{KIH~^U#%CY`ORUZ4&P zFWJLN=ryd5w(E?Zk!#Qi3`5)9j|Ms)ZNCH!Yz2B9KgG=N|9eOn(IIrtPN|>F=u|Xc z3|)cK&_h%&o}Z1*xDz^1&+syIri0M>BhUcG#`DQ&z_aRe|9!B40vo&>72ifz;6pTk zPq7wm4*x|vsM#PHxKVgETHY1?qn2J#J}k=bL=WM(a9RWIzXkK6Utx6#NyLT9)& z^1IMi>L2JpIU6QhQ3&0N>gX19Ko8$#X#cmPFQjqkgl3`bpH7o-1ztq={&jTbZ=wUQ zMi1vlk>7we+=8yyt|;Fh<$s}vE=Qwez~We+d@Zz}OV9}pK-;HpAYsHK(ZewreWgAf z72ZTw;zP9I7Bt}R(R%yCyp5BYRz~aB$M)C;4QLEj$LZ)H|^dI!}mus4=R0A}C&ge`oM6cUGG=RI&0mq<+a0y3ajJ6 zT6B-sp#gk}Rq+ry@M+DGfU2ScwL}N#gsx&3tiGC=#1K-Z^F)KKt02Y(f0k(tr`^G)SUb8KzC4( zjrXJZ=g=*94ZUt_(HU(;XZQoUWrw3YcZ=kCv9MxTJ8TxVLj&o7u4La9+?o;lF5L`C2A3JPi%_bad(Kp}(MXMsLBjSQ{s$N!amn zw8M4i5`Bd>*nu9d6KJ62TO~8Ehwfz?bfpHOKNCja+4vAv!A~%AO|c>Qyk{nVk=qKb zpT0B_H=_YeM3?qabSs`k2U;5CU!Z~fh`u-eLeE6uvy!DP8CF79uvX+7hG#~3$Ha81 zdldAJ3jHHLC>(|cayxnr$D%9qIC^-ONBNg%;J=_td>lQ@Raz%o*a+SGX6Ru(2g`c@ zJCZQcE6^nwjCOPndWs*x8u%D`4OgQtmLJf-vd&Jns1UjpbN@TK~$(--#aL8R!bVh?VdYbgO>B zR+!_QtkfCU8q+Sx4J4fTt>|H!gqANtPxWh&e-G=BUmqSr2dv&UX?GSH*d>@bjOYX& z!fNsSCk(_C-`r>bdt#1K50-4-SZ0QHLQxx@CKc!<5P*Jr1bR80zLxo1v86B`6x`)HU2hhOgpi8?LyW$&YM>#tsGb@B1y839p zJ<;a_(LirN1HU&ZPp77m@V?GQPwl(OgVe6@S9IV%(GGKUP68~AzG7>m_qiE*2F^sc zuq}G6yM*V5eZwm}y?sC2 zfDX77U9lbLRvtxHD*Z1B8|3Vf9F{_8ho#X9RnSvgD{O)e)COIt?&wxsimv1hX#2Y` z8z-QFE<)cgZ$y4Q5?DI*9SN82`|uDt!<;>n^0HxV^pLhfSEMgG@D=EQ!_m`z7dqhm z=u98QEPMi8+1cpUyos5A|93qJ2i$?x@z2OtI6wIz(->X4uGk2#LIatB+4vf^z%Q^d z7P=sL#kRwy3vK^%cp&^M zJaHlS-wL@eN-7o%OJL?6hn3O8Rs&suCRh{OpuYzUMpr0}F7+emiY`L0>-*@Q??eyp zA#|m4^y2<|SPJz@Zb1d~PdaO$hov^!;9T^O_QB>j2;1TuY>hjyCsyj6mFkDXupX|% zTkvnR-LQ+3t$Pl=buXq#7{D_0G`}ByiAKC9Jcc$X*e6-3(rCUS`sS>Ou2|i8-U$80 zqh;hTLRauobjt^!XDdC7g!ghJ+R>zV@JRRsI`jFFUy8nR-$Dcb4DEP3x|P48hx1^R z|AhvYt8dazesqh44%i!QH#8iBuFPX-zfYs}UqJ(T9i703X%a?s5M7e20m(|_3yYuwltu$+fF9B_ zqx_u6UxE&JIl7XA(f)>EGrS#bzZjjs8)#tZ_emJQX7tUs3%%bzgh!*i;1$W<7C}31 zjt~2C&O&~-OsC!@VF3T2dz^n@VmWl6I$>kX%p9{R zKL@?{1Ec(2^l;vf{!EyR{sqjlkza}4t}oDfzvC(1|Dz;~@E;9>Rt3d|KMb+N}~gpN4K~Zdgz*?f8Eh(F!#S9iK{4Z zhL586at_+y6?8_c&=<&Bbf6#5(|iK0cj|S?p(=y^*ggjxcmR54ZbWB396e*VqxBxR zE}bmtvlKYc>;e)wGY0^0GC$iEsc3s;0I!!_Xt;m2tE_2?F+H%7tN;dkMVaCi7)xEG!I zujrfXIJ#m5Z%DSJ9J*4~(dP}&`fbqxFF?2SQlwrwbtMT8#f?$nPPD;T^p!dt-Rp(u z>3~woFv)*WfYcLZS+TnBYdS4!N^C<{;wLol6Ok`8 zD*oURoj@0~-`micPe~uSI9JDa!X@E%JY39jta|GUE%-Lpl#vTN1_8yK|6c`4QzhopGO0F1r7YY@M~l%(y8A`*g+1q;w~(Jc03W?+o#d3cmw?@ zxf#3RZ)m$#_ayZ?pr`+`@H+HN+>Wlm{b>D(=oU}MBHsVGnFJA{1Fk_M-imI;ujm^t zb#F4W{OHycLC-=dw0^sI-Wv_%QgkAN(LnA&&%|W3zh^K%|1Trqz-!P$whRL5ZeB3G=K-jaQ_`(G6gkoc070w zJ@xA%zbW$HpdIas@}ubC%^I7P%EoeN0B4~~eI9z~u0U7lHZw$u#wS0O z&P2DMKeoVe*brBu5&w=J(v}mFfZC()gRbbFjzynOLJ!?cbSoC3fiFh`T#eTM0y&K7 z)HV`TDcFrR$U8BaS?RD^*cct4Ejqw?VSn_n4nsR0g$_6d?e9VK$NCd!`(@#3%>4Ji zJ|^MJzeM-wUv!D9KA8MlaIMk9GZZ~+_hBuZjV|Q}*cf-BGc5T~vIVu#6>Nw8+#i9B za0VLiN0|Bd|2LCx&woQBJ!Mid!%FBLH$)F<8}$BmLuYsa8rUU~AA+8hThW=0Mi1fr zXrMFDv+xQU*bdD6_kW5#oGeu*^g(aT{N*tk`Lk%mAEG}SHlZtY5FMbv1JD&4gdWOA(3N~m5b=EBQz=!FrEy|D9=f3Yy}L=n_4RZEz#H#6_njD^v{~s0nt$ z9_Ug(ir$hrXg@z;b*wloE7co2qGxLscEfkj_Jz{ZlLo!fUn(C&m+bk-zl=8g6kVx< z=u+l*G?`gl^!eH7R$PrvXarh+8rt8}XuU<4SsAQLKD~#8ho;1gONlhCD~9=?Q3nE(C{3HNL_8u8zeKlQOB zkkhd?EJ`tV346K6lv6eso*OG8a4xls3 z`$Y0eE`^@f8t7lKw2Jcn=vECyXY^qB3}%ym8-2HLL$_o`@bDY z7(gGi;ZSr2X)EBvXkc^W`Qj*F75R;5`(5Zt9z_Q(Iy-4s89n{=(FvUw<(FeR^Veb| z9B?ukz*FeJOTu^J`6jgEUEv?-8!yL`N&C`hpw%Pa1nZG+kM?^r+I|dLZ`zY_|L0NQ zwR$-od>j?Gpn?5_UZ*4I3@bjBybqe8*Yiqr1#ZJ^oP-Xv7@hG-wB1Iu-rg`Zhx>2E z(sL4PpoghB`obBAF5M(FfQ9IcKf~7e16IZ=a}ztFGaVF;MEjqBx$yBQpMxICm(!7W z3p-HoA?Cw^^O9>*8hz(iM1ROsL7(?Q0~v@-@HT9RFQ7Bsht|vebn?Tk2)a@&&=u&0 z9>(-lB(h12j)EuA87#y5a4j~#uJe=YbSK(y2Ko!d67+O`imu4d=#TT7&m?ce?&ukt zfd=pfx+0%qSMUFKNg`EqLGtFh1^uOQDjLWPw83-eO1zFPh;Halu}jcjDDFUS!+q!(m>#|v<-5=q)FCv0 zO3x+z)k5E(Ezl)zkG{ArMYrfm<^7WyMZ%?=iXOI?(WP344!i@M;UDNqobr5fc#5N^ zyHeN)-GYwjKx5DeJctH19i8Y?;Y*lyz_&;k;TCiS_M;7sqk-gJm;_Q5eO@F%6u4CN&<>lUThb1FQ(b}1U?@7! zC^V1V)BpW_f3;d%roJ?~d~HFC?7VVKk7eCCO41L*H!G z(CgM2J&fJaKnH}^qd#VEMOS7D+TWAtiY!DY@G83JhtXd|j$=LV|LHF$r~U$TkA|Ru z+=Cv2O-0e_E~fB)wM2_wz( zYO-fV&<<*&uh=uufzOZfo6$oy1|47~I-{jn1GmQWtfk3bmqhozH~Qwh1#9C&IMn<9 zItiDy`fEwW7HFgwV;vlizK~u+U#*+b`bVQY|NoMF9rVz(Mz^dFy5#-QGjVlzV>kjc z|NPJBC>R?)6iyFkqbu?ZdZ_+~9;Q|3lCQ_QxGl=_FG~h4i?*wb2GA&Mg|2wJW!!)F z_B;xl=?HYs=VC2<9UX9Il>dU~lF#vaQokFzw|V6E$D!w(Uq8tuEbO50E^N3Z=vo?GVH=%*;K$m(iI`9E>MRKl4 zZc!O@W!s|TrEehN>AW3%Gd+rp@eB0lcD^^04(p;T(gY2x71}{tbfE6&kJ&4t{AzUT zZo=j`3bXN5bfq>S?~!zBcali$!_28huT}oHlE7+UeexaA>v$`=0u#}tpM}nF5!!ww zx)PtE^|zv1vJc&Yl*xOEo`&WU452~UwX%%)yJGcTfZ#eY+PC;k35M9cp=%M`% zt$zp&DBsE?UjbdQM(B#Q3_D^T@BalPoY5s{WY=S6rsx(-L<4&Xo!M%%!;jFV{4C0M zpn>fT52AtngRWqSRmloR$wEjoortrIPPk12wJIwWd(ylNXz-j2#rn5=7R5hcZJ$f6?Lzj3Ux>O?~KOWt( zS!hSkgfF0hy^2octtelMZq0hMpUqMJ6B0l=wLeMlze<%HrW2S=#rz*61Jp$$ZHx|l zCOS}uut(T8yfVBoye+&ZoET2e$o+eYgdIO04_*o14Brnogj>Vi;cwxQFl%iRV1BgU zl98_%)(ji@-1~o)3G5j52>XOrgx8^OxSP>yI5zT6qbu|pdb;0259vo}zh9y6lO5=m z9Y*UN$IL(fm+!-5kIJEYUKzdDP0$ACU>)p?zTi zoYbp?wrh?~s2ln|=!*t6;$!Z=k&dFkB^-<1hKJCZKZm{-7RU3q(T4AbpP)0_h%WiJ zX#JnjSL{(V;C!DXTUQxdk#8LNp=lDnAnw6zT!8*u{{Zc12O7|RJOfW%m%IU6pab?q zXVf3h#yjHqa`dchKwsrMu{LIXnphXRlTY^{;nFNX2Yv-z+E38;z)z9?7u||->ysJR zN87auJE1FiA)bf*&;XuC&&Ue2|98=TzC%_hojMQ&SsRj$ONQC#3e-UlU8^WRJ3JTN zieBiUy%gQTA?VWIif+v~G_Wb*6KG)1U>Se@FC$?G8?Y(vihP;Rk{Q+so1z{{8>aBzz%Ez|4HHa8pwMH1v4`^mo0E=#1||&(Jt@C1#<&CoDh%U$lw)@4)X;;A#F0-Mek* zjP{{RncAETSQxEWF02(cM+4{>`AgAugVC+M9UX9DJfDwF;1&O7vWd4T$i|PN!p~?R ze}#F!NCqy0c3eGdiq`88`CjORu0mhYH=!%~Fj{W`IU=H4Bd*AXkh6NN!V~Z8bH=p$ssC* z4%`53*c3gKtmEOuQmzyv^5%O zx9}=-2BYHn40LZ7paH&$cJy96-;SR4edr4-=hsO9dC|bK(V5pkCvpyE{{5dzNw_E1 zqo;cW+R=UJ3?9SU_%eF^zCi;!h6Y~ho8-Mw4b6AQ%=-f!=qmKr?YkmB7oETgOj}_c ziI(^yHp1+0lbKx<4n^N=6VL$`M)`8ANq!UB&v9&rrM^pk8@>eHs=LrLF&=$oKN8OT zj{9Gif+s03;*Zh2+lU^@UFeGB+?E`&V(1D~L<4G#*6)w5*if8`W6^<1Z%?+Y0(!=3 zqxD;(Tis)OI{By7uA#sI2cv;ZL?eDAd;(pW`IrO0M3;0c*2m-MlGfdk{HAm^8tC=t z7EZugI1j7gC+Nx@NRx0TWp^e^*a|%)z0hkl1YLnU(ChO6+Tm>U$MkEMjT_Ow0Qm#! zV5wb6z8(7fT6BUBptoirdgjuvknmK$iO&2(bcr^g1MWa)b{Jj4JiC()%Ax_DjxKdQ zH1H;9Ki$#m)+_RZ(SC=a_3ugY>D2usjAUjw54}Dwpph;?JA54tbY=KSxCL$h1G-ZC z(ZK&f11$D^(yk(!uY(@q=9u~4|LqhHF31#cn9vRfqcgu5oyk}y)`>EDMAd=w2Z*AGd*#WC~m|5hVm#rk2Zuw!_Bco{n2wc$V{skKIoPVMOShRx&<@$aR2S#SqcnfIo85Y&@*rtUD~5)VE>{^T;ZqWu$_Sh z+6g`VgVE;?Mfq&3N`56ek=qbjF?0t-BUID!>lQ7ce=;6Br zZEy`5$V9A(PouxpeuD1xUi47qJCLkUDfFjeZ8U)HXh0XD*Yi>|pu5p6e&7K2---`X zpi|J({%GW9qbo2E4fF*xkWJ{BIgWOm=a1wt)us^zmL(wh151rubKe+$( zNW4RV{*DGv>0q+A)zLj`fezRM4d@cI-c{%dT#p{U+oOB}8pxE$KZeeH4%*N2;nH*@ zR-$|J5xNy$p?i81J&bt|C5N;U+Clxuw+g$W?Jo@nhqr}e!>Qq1Jd^tA#Uz~h&*;*e zb~v#yb|Bv!y>?U4J$nodXf}E_mZE3olPLcRGq(f{DC^H;D+*&a`E2z4&=z?Q@ZbNA zg0X1Fi_j%~2km%0x>sML9iKqAq}Y*UfSOo`d^5ECO7x73#Itc;#AKli% zO5XorBx>_uGJ2R+pznii=$mREx)u44CIgj41L=gWz$IwC;pm<}j0QdTD7izB~0 ze9v<4|7TI*>+pNDqkWP8GfW*z0yz~kTZPW3F?ua8LSI>^&p)=@$P4Gf=$sa)9cuUa%K1YAC*p2pg0=*Swk0;l! zF8cf&G{Anxx&NN_TPUc7kD?u}LSH1?(7nw1Cz)w&v|(4Yqk-sQx(huc^U?l3M7Q$i zC@=JH^1N}_7rWZ-U+%vRKcv7J{)R5)k*HYmL~E;0W~j?8t9Slko5zMI)}7l_PWAx}Zzi108SxdMk#YhjSFV*AvkJ=AcXd zCc1@RqStyG+OA-Z9GOE~7X7h(2KpXJcOv0oxB%_Af8>XtZ>&4e0PaIyp;OR6pNaAh z(Ez?g59J?`FK|lIUrn@r3-qw|L+g*m`riM?NO*ldL}&B^I?yq61q$U%0;q)M&j`;( z4`)ww%dQE>poeZA+TT*N-iK%)+t5IB9^|3>Tp7SD<_ULAV~>!Y|Roy*=C;9>mOl|LY$T4wNTv(x6yaF02}!5jG3kpaXV6 zx90rF4@3vNF7mgaKSSCzFP#kh00mx`NAL_>jlLQ8p$!gVcRUv5 zT~1BzcXxEaVdy~jU^dPSm!t22t>NEjz!mZ*6Ks?w;nH_O-*gwDGaQWua1T1bICMp3 zpnLryx`fNo)BFK?Yj&VZeFzQw7}`FoKw>d;rK+HTq#H+~3p#`T;RtkZA4CV57S2OE zT!P-`)#$C+fxcM&Mgu8PFbSY0`bw{l2HFE{KN#show|dBOMfq3gfC+s%vmT$=5M|B zLkAjzo{{-j2VX+p8(Yzp`4gR4fx^j|DUa5#7q&oGq#YW_xtToo|EhR!J-W2R(HY-` zM*1MSq_fejdOCawo#}G)J+Ka4!L8x%QJ$wrGJz6k{U+$rcTvVq^(SFuH>0Qh4)hm} z2hj#kM1C=PJKjd$WS^m1bO>#C9GyU+qDgsKbf%}HXXz}=!nWwjwa2u3a|MaaVL;zh z)3H9jh%WuN;c?6+U%pt5%-_XojUL*OSR3bIOI(KyF?aDCnZHuXK*g|Bhca`qOVTo{L}OK&)CON9JGWyC0j7&v{yo)Oc)(U2qN3 zKmYrWWs?Akpb=F-XV5t8gdWaI!l7uuW6-Ubf}VxP(KqLObj6;-%vr#yCOSQkcq z30Cm_uQGw(p%MR$Haw+#@*>KMb;y^(HrNi`+xyTxofFUB#hT>zqt~xYh2+iJ6xl=B&E;}%b;6UG0Gc8zHvP7 zg!b1BJL381gl1Ia{@d{y3Y_sKbigg>FNr^)OPsS(a=Oc*d)EXVxP5pox^g|yrSB77 zj=tcoLEDW*>rIR2vnr*NQ~xvt&TJX_?q7%Ag0Im4e?U9<6W#k<*~#-_Xdo5PC9M+W zXJ8HTEwC$If%f|XxFwx>O+(I1I`ue-_7uE`M)Z4_s+z1!k+3uxP(?J*X6W_o zjK2BKM?1a_-HKu8%HDyl=soC*XgoTBw=whY|9wcpz1WO)yc=`iA@p7!L06zawPdEX zu>tvd=s*L|fv!VmdJ`JhXl#n(uo}J@m-bO!10 zfp9W<$Y!E%xK(IC-=nu_A9^MZqAOIeMlzA==$Yt%nfre&3HNXqI+I(_nT(43{gI!9 zS(N*k#PTgg%yODzpY$y}@Vu^$C#;aN&A^Zxu2taUnPAW<->V?dX(1*H%DK4Xumh}&jiz8 zE(5iWrLvO&(P<%qdYSKYR6dJ9*HCXU`2o?{LF(O4hpl1~Pf~9N-+TF<{G9CeGTQ7X zb8htQ`)vV#CYG8@hy0~xieIKurAYt9cN?AFaIy!iN?A@CHY9+<)SH5B`T8js$FVcz z^$27#^_nx-BRC(gpu7m_PW1UHmN(#NTi17zp9^WYI0~2O^Vg(is=#*K18B3o%z{9 zgK~86;(wNK2>E(E|BHHK|I?xMf2HgRTtj(lzWG^=oOsE9>itMC-|@XK%J{LB`insL zq*EJtu#wEg3^0s=W>Kjl6)IEy5b3}1@BakTlCp~#bRpjf^l&C^{FI{JJ@^rAC&fT7 zlAge~9CiJCMY<#PFU9(l`QJpyd`_Xk1Uh(*@5xV>B*K%~)ML~cMB`D>*%rK>j$Wi* zJ3RTBMxBSrETgO!{k_1%^3t{r>4`jRiu1`o!lyXl6e3DCGZA z4e0!}2w=Mr{-4k9RJv+f<;TjUk22I!YUW|6k#x7+=6o)rJoB%*kUkMTtdDT6EQ9EJRYBpRP3Ub4NmIF!dIY{*CfSrakg_@$?G1Ur(u@ zjS*HydTkhG$rE;)7MDhEmJKF7gHUoZ;<{*O`PP{JF5JTRJwiSC8AX2WfBM+%OL!TL ze})T zP$xgvQGW7sg1T>0cLLuYq-RsVCSl)47|rl4oJr+BC@;?QCDz4C^s$}t@zK$e#CEB_ zdGG<1$51evU|x^;T<82L_iyiv;X9V^IKKDueSq(HzRyy3(X=OL)ktrMR`m({Duz2A z!|bP4QNqfLezsy2zMl}*X_PNw^n3p^z3H@liD#qeXRxbHzlUkJ7zgluoadL}A-@0l zq*K{cewlFZrBgp2MyGQq|B3-W!~cG+h<0R&O!+A>NJaAg!Nw-~854C& zQ@1i>+{(9u{|?TFRQ{B2ndsyxX5nWyWiJtR$0+}Z^0uTa(3zim=-kf`>Kr6}b&}2e z|0gKh#{jz-^m*E(c|L>uV|?dFa39cLg(m#Ju2Epiesn&S%G3Bx=ldvM{=Rf-CSFLr z$MLIa2c9q9@nyQbmlhXLx{Gf8JVx1OzE?189m=|5F+7c4-@w~>=4UoNj^aCF+NV!e zN*^KE_o=y(zFUxfo*J7;SHhcUS%|XcIEx-`#_s=#_gm`qqNgsj|CM@v&LQuIzkQvm zOZ^d~zvWp?+RdQs6fWm&luxG(AGUzc2RvNM_a(mmwdNukT+O#*bUK;_6B(>L`5n}` zo4gN>KviNhnV75400d#k8l|T0M(M2CYAaBd!nCF)cO77 z&zzG_=koAII-VAlmeAoJRD3rEv)=I-&XPZ<^&|NQ z80%KNkl|O;o1bqIQmrZ9=5zA1rwyN5I{g&=j%VywqQeQq>5BYDY`%H|qjLH4ZD7WEt5i@@xof<>gLdtqY+ZZmLS`!V=iq+~w#W~S%T?9~` zhEr*AAj+GOA5KS``Ti1RSJHkL=|Ac3Jj(ZxZbX~i^wEI)@#z1Z=+gjN$JtL^89@}K zVq+R!8I^J{&`;5@5_N|0yc}gGKi`l(hk)0eEC>fvc53u#Q5O0Bk#C7x=_m8?b(4#4 z$#^&me~4#i()m;xPK(O?p>66}f_eXBW9q%f7WgMf)6tBVxlk7hkv&A0{NY^A4j@4{v2^#Nxm~}KH&LljPpOfCqI`* zA0I|p8egYfTfY1=1ewo+{;$11N{6>o(1{@C6JS-+d#GHE^e4ED=TFh-&*;dOKT;C!{^-g}a^XzNBKlzhpO_V-BrGr$e8u`6+ z_TSHgJZ}@7^uv-2+JHKJDF2i}zQy(g;pZ&Mw?#T1f%+N6_cY4q;8q5I(EfeRR*j|N z4+JxxN69}Q+gY7-0VF=HBvlQ*C z^V~l+`-`$)NjIlW$-^X0eh!cxM2DYDd-9n&CCl@8Iz#;T^WL=Yo~e?)fX-_3WHmu7 zC;bxbKBL`VAew*`8nj@rrnLyTY`Pb7p48fd=K)yjsE}Q znSTs-A^KU8Og8z^bdZkEqu^E=?x4bAI_XbY`J_^69fN&CetI;1gbtff_AL3fNq?z2 zQFkllUohxw+(Er3D6c}lCn#G-AJ0){)m7xn@h9Y|Srp8sqdO_A!}kmFek#)_7lHVB zFCp{)kJ9idI;zg|&w1X6w4Wgic=FSp#CpCP__n0prPNu*sF%^!PZK=P`pNt=WvK_K z)Q8Fq>C`_e9UUDPjewF`{CJ5~c#2Lw<=Ib>uWUWq_KJ3e7_jkw+TKVxf8?L)%ouk> zc`G~35mA}m#rI|^jiu97bT*A=k5c(z*No2yqvrEgF8)%iG{2|kNe?G`jH>miI-m64 zRId`%TTuO3$~Q5lpFE_m;QKD!&!^5I(kDOPN1L;v>`nUlp6|7h?@j#t9sbPcUDBT= zeew^vQ}ieWPxA09Tp5)Q<$k(QXCdiad{;1_p946L z{OSn29BuBQ5C2Gacm$f%oc8bYxzmd%>dB+`qRXB%|BCc;gfNKm(MjD@U)PEB!#sPQ zHuptWKg1l5Qa1;~yh8g*q>DuP^R)A`KOr@lI>&k5k>?}*dk39Kbm1H0r+$nErTJC1 zbh-;w{fvv*O{Muud@tjBjIv*%c1fE5FVYv`fs@@O%~RbN!9VOCPI=F$=cE1faYjs~ z3D5qbtSQfj;`RPy@UxO24)XA(|8$x~hj+PMv1QNGQ8TjTDfja-ZI)1f1>Yug_&ot1 zV4(MSK8-e=$PeRLS@PABCaFdAF@drd$QQ^2#rSLJXc7(T@^BZ0Ptx!mDwT+V`jY>c z?@+$KQl}>6_wc=!?|pn1&}Kr+cq1Ku&bK7_+vu}8ZT#Fwoy+Nye}p;J7>iPNlM{3P z9W#;egPY2iQtrTHInVJbx-_p1PH1xhPBDPGTpCJ8%@=JIzz+|21_cU{w}M7(PFsEH0qrTIo?U z0!4)a7Zer9G6hjn)67H`w*=htDjd_Bb`e)BTyi7R%H;}(Cj=F>a^En?C6wHE(+aOB zaNjx1c^>9@#+mu%n{Vd-K_j7ilZdy$^H}l|hoqB#2!0d4ts=F+kFa1o$EGRfO`S{q zCUg9twP`+cx6u;Ifi_Xd~4*nZyCQ)JE1{{vrm+{|}6O4@zt}gZ&Yht%JULNMEf_a&cpX z!nKZu`y4D!Yte`VOJOdB_#Su#F`UCDgO$KNOUwc5#(`oh=DKil|mjmWSzZC9SIOQrXbN9#_5YtsRn>-lo5ne`a383M?Q*|UR z1`wNs7vqz`>L8rKqI9BIXAa9CzCq6$_rcrXm%-dwexD<9$vdDqkopO8r&!jJx*vHm zTro2`eVq9Ce+OxvKFLwQI!c(&kQco$1V@4mpqI*^J3@8H#a1JD6W(KZC*h^SyG9+S zdh6kofxks`=L@u<;Et;Q89IF0R%~;#gfcFcYJ+%I2NY&7< z`QBkZ1Kx*V6X^NFZvr-e_yOm+m3yP3-6#7LtjDMKwJp;r!1rv z3xh1SM30kv8zL#hOycV-zJ}N$`aZ;I%vLgM*7?z3f2zhZxFg}E5=)u?jh^k#pxz9< zOCuTJ6#fVGDShH%@ZS*_!q9T)>!`)HvLF_o-5!yD4`%{LHD`7){tui7=-mT*LVqec zuaUn-9!|d&exWvCxn7u`w)DTvEgnz|kUgsX0V@mjd0HX27C#H8m?-AS+8%fkGY^Pj zr|9?5Q>89u7A81u$t9)=i~$8%dl7mOUn>V*5#fMbLris_Ze6i_g_S? zJ8?fk{otN~^ME*&ek1Z1@E_4DCyt;_X6a#ih0I-NE|>Tze7kM5{f|><)tb13fpiAN zd~i>O#L^J##qdprQx$u¬vFocI(i277_VMdES}5j)NS@yu=@7NIjv@k8ju$sbB_ zx^O-XPZf1X@M6o)Wrx|5jV)ioXCq19;=#yy$$yj;t6^y=~>`j zqYjl^2n!(BV96JViCGzl)kV=7GxUi1#8=?80G|WTZa&mc=+&ne#-g@FelXMa-THD! z{?vcNIS96zI+DD$EBk+Dc~gqv4AImAh*+TF3ze6|0ij@d)QRx>>Oom(wZxav z8^O+8^41;rWjux5ennhtF?eV4dBiRB3v^*=TGUQYOFdn=oE3dxeMEhjshTjK>KRVp z8RT_%tVvA&0w;((hkU$pPLtne!ynY=;Qv71Ztqhs)IEjZU8p~<>RU_+46LNsg1{sM zvS`{({+w+|{~hq@fX5NJuM359nR1Vj$vk5&E9y8w|K{z=M0h z)F-HeiA$+BFc-`bVwn~tyV1CUdoi?`#yIdj5XG{H-y$xyU$J}yhQh6jHw8<<_prQ~ z3b*FSTl6M@KO+|_!u{#Hg4-?a>t!yMBLMewP`<@5n}LqHuu#cIRYV4lkq@CCNX#eJ z2QzbgDMyci-<#ZSHNgHFZn$&sBl+pW)Re_3k;)Eue%WMvL5d9GFSTrlBkMj7<Jw!GZ|L>s4?r0#4MslotZ`q8>V%*ok^CJuCCh%(~#NxY!AuIZv;HZ72ID0=89g zA(cY@mTTj{TafRj7YioFna?`>?!zR`Fn&eG(0GLl~~oT`t=-wpCHtmw{c0AjiI#$ zZaPa_Fgp#-6#BnaA0%G|Zicr>=i0!1h&QBOtw-2?n}tDq%s>XwZmx(o!n@;QMa1@q zo#riwMXA6#7N5WyBOIagH*}%!8Z#FMehf||Gj96(V=#Pg^s0WFL%a&`L?*E24E)2Q z*+i?5h;11Tqc;uSe#9P<2eRlCbpiRSED9iRNj?U=i2O^i1mXmIFuB-Qcw_ok@w@Wz z&k~Y0UxpaKvOP3OOr|?!159613bI;&+(+^cE z-rO^t8BH!$KzstWUB2>}K`~tyRkit~BZ*h?N@5-!rcb_zJfa#u5e*OOefVQ?`4YGt z2aF;=Q;nCyaUo!R!CvS=maPzvuuMJ?rYkrO;xY1_Ji*)Gt>Dzu-V}NP9MTgZF+ao# zsSkiVb66DkO=36Y_otVyZ=y3CvC67oYQuj|ZA%a9lX);`g5=NeX1zQBtfh(xxi`m% zh3m|5q6gSyyuB`vemRE};p>=q&pH9In=%`K|O9FtbS?qCI&y2Q~yx)LDOeJ>?s(V!>S29FZ?XNQW}X zm$2|6PyvSpC@%b$@rQ`s0lP)7C){0V9K#1G?|LJL;u7hZvKs z`60$}vzwo#}GguBFv^o-xtMx;VvXThB8zA%052)Je7_=1{Vz`1H)x zMya*nYoo1$_4!(3n~QbNX2aL9c6F-t&JV^p!+LzHvD(q2*VuS-bTu7o+z#WQk^X+B y;gLQo%W$!d$};A>UUg&1d1FfbbZ+#pCfzei8ln4d-R|Jv;q`wmqmK~) diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 89ed5d43cb..2c1154c5a4 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2008-01-26 16:17+0100\n" +"PO-Revision-Date: 2008-02-01 22:30+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -373,8 +373,8 @@ msgstr "OK" #: pcbnew/dialog_edit_module.cpp:122 #: pcbnew/muonde.cpp:352 #: pcbnew/pcbtexte.cpp:116 -#: pcbnew/modedit_onclick.cpp:203 -#: pcbnew/modedit_onclick.cpp:235 +#: pcbnew/modedit_onclick.cpp:202 +#: pcbnew/modedit_onclick.cpp:234 #: pcbnew/onrightclick.cpp:157 #: pcbnew/onrightclick.cpp:171 #: pcbnew/block.cpp:154 @@ -407,7 +407,7 @@ msgid "Change module(s)" msgstr "Change module(s)" #: pcbnew/dialog_edit_module.cpp:186 -#: pcbnew/modedit_onclick.cpp:261 +#: pcbnew/modedit_onclick.cpp:260 msgid "Edit Module" msgstr "Edit Module" @@ -458,8 +458,7 @@ msgstr "Cuivre" #: pcbnew/sel_layer.cpp:145 #: pcbnew/class_pad.cpp:970 #: pcbnew/class_drawsegment.cpp:175 -#: pcbnew/class_zone.cpp:61 -#: pcbnew/class_zone.cpp:523 +#: pcbnew/class_zone.cpp:555 #: gerbview/affiche.cpp:109 msgid "Layer" msgstr "Couche" @@ -600,6 +599,30 @@ msgstr "Filtre pour nets:" msgid "List Nets" msgstr "Liste équipots" +#: pcbnew/dsn.cpp:502 +msgid "Line length exceeded" +msgstr "Longueur de ligne dépassée" + +#: pcbnew/dsn.cpp:616 +msgid "in file" +msgstr "dans le fichier" + +#: pcbnew/dsn.cpp:617 +msgid "on line" +msgstr "en ligne" + +#: pcbnew/dsn.cpp:618 +msgid "at offset" +msgstr "a l'offset" + +#: pcbnew/dsn.cpp:666 +msgid "String delimiter must be a single character of ', \", or $" +msgstr "Le caractère de délimitation de ligne doit être un seul caractère ', \", or $" + +#: pcbnew/dsn.cpp:756 +msgid "Un-terminated delimited string" +msgstr "Ligne délimitée non terminée" + #: pcbnew/loadcmp.cpp:103 msgid "Module name:" msgstr "Nom module:" @@ -634,36 +657,36 @@ msgstr "Librairie: " msgid "Modules (%d items)" msgstr "Modules (%d éléments)" -#: pcbnew/edit.cpp:177 +#: pcbnew/edit.cpp:179 #: pcbnew/editmod.cpp:45 msgid "Module Editor" msgstr "Ouvrir Editeur de modules" -#: pcbnew/edit.cpp:257 +#: pcbnew/edit.cpp:259 msgid "Add Tracks" msgstr "Addition de pistes" -#: pcbnew/edit.cpp:266 +#: pcbnew/edit.cpp:268 msgid "Add Zones" msgstr "Addition de Zones" -#: pcbnew/edit.cpp:268 +#: pcbnew/edit.cpp:270 msgid "Warning: Display Zone is OFF!!!" msgstr "Attention: Affichage zones désactivé !!!" -#: pcbnew/edit.cpp:275 +#: pcbnew/edit.cpp:276 msgid "Add Layer Alignment Target" msgstr "Ajouter Mire de superposition" -#: pcbnew/edit.cpp:279 +#: pcbnew/edit.cpp:280 msgid "Adjust Zero" msgstr "Ajuster Zéro" -#: pcbnew/edit.cpp:285 +#: pcbnew/edit.cpp:286 msgid "Add Graphic" msgstr "Addition éléments graphiques" -#: pcbnew/edit.cpp:289 +#: pcbnew/edit.cpp:290 #: pcbnew/tool_modedit.cpp:180 #: eeschema/schedit.cpp:315 #: eeschema/libframe.cpp:503 @@ -671,23 +694,23 @@ msgstr "Addition msgid "Add Text" msgstr "Ajout de Texte" -#: pcbnew/edit.cpp:293 +#: pcbnew/edit.cpp:294 msgid "Add Modules" msgstr "Addition de Modules" -#: pcbnew/edit.cpp:297 +#: pcbnew/edit.cpp:298 msgid "Add Dimension" msgstr "Ajout de cotes" -#: pcbnew/edit.cpp:305 +#: pcbnew/edit.cpp:306 msgid "Net Highlight" msgstr "Surbrillance des équipotentielles" -#: pcbnew/edit.cpp:309 +#: pcbnew/edit.cpp:310 msgid "Local Ratsnest" msgstr "Monter le chevelu général" -#: pcbnew/edit.cpp:533 +#: pcbnew/edit.cpp:552 #: pcbnew/modedit.cpp:424 #: eeschema/schedit.cpp:455 #: eeschema/libframe.cpp:579 @@ -1217,7 +1240,7 @@ msgstr "Echelle" #: pcbnew/dialog_display_options.cpp:221 #: pcbnew/dialog_display_options.cpp:229 #: pcbnew/dialog_display_options.cpp:266 -#: pcbnew/class_board_item.cpp:98 +#: pcbnew/class_board_item.cpp:99 #: pcbnew/dialog_zones_by_polygon.cpp:168 #: gerbview/options.cpp:321 msgid "Line" @@ -1317,8 +1340,7 @@ msgstr "Module" #: pcbnew/class_marker.cpp:133 #: pcbnew/class_track.cpp:776 #: pcbnew/class_drawsegment.cpp:159 -#: pcbnew/class_zone.cpp:59 -#: pcbnew/class_zone.cpp:494 +#: pcbnew/class_zone.cpp:526 #: gerbview/affiche.cpp:93 msgid "Type" msgstr "Type" @@ -1342,7 +1364,7 @@ msgstr "Oui" #: pcbnew/class_text_mod.cpp:380 #: pcbnew/pcbtexte.cpp:176 #: pcbnew/class_pcb_text.cpp:181 -#: pcbnew/modedit_onclick.cpp:254 +#: pcbnew/modedit_onclick.cpp:253 #: pcbnew/cotation.cpp:113 #: gerbview/affiche.cpp:40 #: share/dialog_print.cpp:178 @@ -1533,7 +1555,7 @@ msgstr "NetName Pad:" #: pcbnew/dialog_pad_edit.cpp:176 #: pcbnew/dialog_pad_edit.cpp:196 -#: pcbnew/class_board_item.cpp:107 +#: pcbnew/class_board_item.cpp:108 #: pcbnew/class_track.cpp:802 #: pcbnew/class_drawsegment.cpp:164 msgid "Circle" @@ -1567,7 +1589,7 @@ msgid "Pad Orient:" msgstr "Orient pad:" #: pcbnew/dialog_pad_edit.cpp:198 -#: pcbnew/class_board_item.cpp:101 +#: pcbnew/class_board_item.cpp:102 msgid "Rect" msgstr "Rect" @@ -1961,29 +1983,33 @@ msgstr "Valeur incorrecte pour offset du pad" msgid "Unknown netname, no change" msgstr "Net inconnu, pas de changement" -#: pcbnew/specctra.cpp:92 -#: pcbnew/specctra.cpp:99 +#: pcbnew/specctra.cpp:94 +#: pcbnew/specctra.cpp:101 msgid "Expecting" msgstr "Attendu" -#: pcbnew/specctra.cpp:106 -#: pcbnew/specctra.cpp:113 +#: pcbnew/specctra.cpp:108 +#: pcbnew/specctra.cpp:115 msgid "Unexpected" msgstr "Inattendu" -#: pcbnew/specctra.cpp:272 -#: pcbnew/specctra.cpp:302 -#: pcbnew/specctra.cpp:3395 -#: pcbnew/specctra.cpp:3420 +#: pcbnew/specctra.cpp:274 +#: pcbnew/specctra.cpp:304 +#: pcbnew/specctra.cpp:3429 +#: pcbnew/specctra.cpp:3454 #, c-format msgid "Unable to open file \"%s\"" msgstr "Ne peut pas ouvrirle fichier \"%s\"" -#: pcbnew/specctra.cpp:3348 +#: pcbnew/specctra.cpp:3375 #, c-format msgid "System file error writing to file \"%s\"" msgstr "Erreur système sur écriture fichier \"%s\"" +#: pcbnew/specctra.cpp:3550 +msgid "Error writing to STRINGFORMATTER" +msgstr "Error writing to STRINGFORMATTER" + #: pcbnew/class_pcb_text.cpp:173 #: gerbview/affiche.cpp:29 msgid "COTATION" @@ -2017,9 +2043,9 @@ msgid "Keep" msgstr "Garder" #: pcbnew/dialog_netlist.cpp:143 -#: pcbnew/onrightclick.cpp:612 -#: pcbnew/onrightclick.cpp:785 -#: pcbnew/onrightclick.cpp:882 +#: pcbnew/onrightclick.cpp:618 +#: pcbnew/onrightclick.cpp:799 +#: pcbnew/onrightclick.cpp:896 #: eeschema/edit_component_in_lib.cpp:239 #: eeschema/edit_component_in_lib.cpp:320 msgid "Delete" @@ -2154,56 +2180,32 @@ msgstr "Valeur:" msgid "Current Board will be lost ?" msgstr "Le C.I. courant sera perdu ?" -#: pcbnew/initpcb.cpp:215 +#: pcbnew/initpcb.cpp:213 msgid "Delete Zones ?" msgstr "Effacer Zones ?" -#: pcbnew/initpcb.cpp:243 +#: pcbnew/initpcb.cpp:240 msgid "Delete Board edges ?" msgstr "Effacement contour PCB" -#: pcbnew/initpcb.cpp:248 +#: pcbnew/initpcb.cpp:245 msgid "Delete draw items?" msgstr "Suppression éléments graphiques?" -#: pcbnew/initpcb.cpp:290 +#: pcbnew/initpcb.cpp:287 #: gerbview/initpcb.cpp:150 msgid "Delete Tracks?" msgstr "Effacer Pistes ?" -#: pcbnew/initpcb.cpp:313 +#: pcbnew/initpcb.cpp:310 msgid "Delete Modules?" msgstr "Effacement des Modules?" -#: pcbnew/initpcb.cpp:336 +#: pcbnew/initpcb.cpp:333 #: gerbview/initpcb.cpp:173 msgid "Delete Pcb Texts" msgstr "Effacer Textes Pcb" -#: pcbnew/dsn.cpp:501 -msgid "Line length exceeded" -msgstr "Longueur de ligne dépassée" - -#: pcbnew/dsn.cpp:615 -msgid "in file" -msgstr "dans le fichier" - -#: pcbnew/dsn.cpp:616 -msgid "on line" -msgstr "en ligne" - -#: pcbnew/dsn.cpp:617 -msgid "at offset" -msgstr "a l'offset" - -#: pcbnew/dsn.cpp:665 -msgid "String delimiter must be a single character of ', \", or $" -msgstr "Le caractère de délimitation de ligne doit être un seul caractère ', \", or $" - -#: pcbnew/dsn.cpp:755 -msgid "Un-terminated delimited string" -msgstr "Ligne délimitée non terminée" - #: pcbnew/modedit.cpp:77 #: pcbnew/controle.cpp:172 msgid "Selection Clarification" @@ -2242,7 +2244,7 @@ msgstr "Ajouter Pastilles" msgid "Add Drawing" msgstr "Ajout d'éléments graphiques" -#: pcbnew/modedit_onclick.cpp:207 +#: pcbnew/modedit_onclick.cpp:206 #: pcbnew/onrightclick.cpp:162 #: eeschema/onrightclick.cpp:126 #: eeschema/libedit_onrightclick.cpp:53 @@ -2250,156 +2252,156 @@ msgstr "Ajout d' msgid "End Tool" msgstr "Fin Outil" -#: pcbnew/modedit_onclick.cpp:217 -#: pcbnew/onrightclick.cpp:486 +#: pcbnew/modedit_onclick.cpp:216 +#: pcbnew/onrightclick.cpp:484 #: eeschema/onrightclick.cpp:587 #: eeschema/libedit_onrightclick.cpp:237 #: gerbview/onrightclick.cpp:51 msgid "Cancel Block" msgstr "Annuler Bloc" -#: pcbnew/modedit_onclick.cpp:219 -#: pcbnew/onrightclick.cpp:488 +#: pcbnew/modedit_onclick.cpp:218 +#: pcbnew/onrightclick.cpp:486 #: gerbview/onrightclick.cpp:52 msgid "Zoom Block (Midd butt drag)" msgstr "Zoom Bloc (drag+bouton milieu)" -#: pcbnew/modedit_onclick.cpp:222 -#: pcbnew/onrightclick.cpp:491 +#: pcbnew/modedit_onclick.cpp:221 +#: pcbnew/onrightclick.cpp:489 #: eeschema/onrightclick.cpp:595 #: eeschema/libedit_onrightclick.cpp:245 #: gerbview/onrightclick.cpp:54 msgid "Place Block" msgstr "Place Bloc" -#: pcbnew/modedit_onclick.cpp:224 -#: pcbnew/onrightclick.cpp:493 +#: pcbnew/modedit_onclick.cpp:223 +#: pcbnew/onrightclick.cpp:491 #: eeschema/onrightclick.cpp:604 #: eeschema/libedit_onrightclick.cpp:251 msgid "Copy Block (shift + drag mouse)" msgstr "Copie Bloc (shift + drag mouse)" -#: pcbnew/modedit_onclick.cpp:226 +#: pcbnew/modedit_onclick.cpp:225 msgid "Mirror Block (alt + drag mouse)" msgstr "Bloc Miroir (alt + drag mouse)" -#: pcbnew/modedit_onclick.cpp:228 -#: pcbnew/onrightclick.cpp:497 +#: pcbnew/modedit_onclick.cpp:227 +#: pcbnew/onrightclick.cpp:495 msgid "Rotate Block (ctrl + drag mouse)" msgstr "Rotation Bloc (ctrl + drag mouse)" -#: pcbnew/modedit_onclick.cpp:230 -#: pcbnew/onrightclick.cpp:499 +#: pcbnew/modedit_onclick.cpp:229 +#: pcbnew/onrightclick.cpp:497 msgid "Delete Block (shift+ctrl + drag mouse)" msgstr "Effacement Bloc (shift+ctrl + drag mouse)" -#: pcbnew/modedit_onclick.cpp:252 -#: pcbnew/onrightclick.cpp:779 -#: pcbnew/onrightclick.cpp:876 +#: pcbnew/modedit_onclick.cpp:251 +#: pcbnew/onrightclick.cpp:793 +#: pcbnew/onrightclick.cpp:890 msgid "Rotate" msgstr "Rotation" -#: pcbnew/modedit_onclick.cpp:256 +#: pcbnew/modedit_onclick.cpp:255 msgid "Scale" msgstr "Echelle" -#: pcbnew/modedit_onclick.cpp:257 +#: pcbnew/modedit_onclick.cpp:256 msgid "Scale X" msgstr "Echelle X" -#: pcbnew/modedit_onclick.cpp:258 +#: pcbnew/modedit_onclick.cpp:257 msgid "Scale Y" msgstr "Echelle Y" -#: pcbnew/modedit_onclick.cpp:264 +#: pcbnew/modedit_onclick.cpp:263 msgid "Transform Module" msgstr "Transforme Module" -#: pcbnew/modedit_onclick.cpp:272 +#: pcbnew/modedit_onclick.cpp:271 msgid "Move Pad" msgstr "Déplace Pad" -#: pcbnew/modedit_onclick.cpp:274 -#: pcbnew/onrightclick.cpp:818 +#: pcbnew/modedit_onclick.cpp:273 +#: pcbnew/onrightclick.cpp:832 msgid "Edit Pad" msgstr "Edit Pad" -#: pcbnew/modedit_onclick.cpp:276 -#: pcbnew/onrightclick.cpp:822 +#: pcbnew/modedit_onclick.cpp:275 +#: pcbnew/onrightclick.cpp:836 msgid "New Pad Settings" msgstr "Nouvelles Caract. Pads" -#: pcbnew/modedit_onclick.cpp:278 -#: pcbnew/onrightclick.cpp:824 +#: pcbnew/modedit_onclick.cpp:277 +#: pcbnew/onrightclick.cpp:838 msgid "Export Pad Settings" msgstr "Exporte Caract. Pads" -#: pcbnew/modedit_onclick.cpp:280 +#: pcbnew/modedit_onclick.cpp:279 msgid "delete Pad" msgstr "Supprimer Pad" -#: pcbnew/modedit_onclick.cpp:285 -#: pcbnew/onrightclick.cpp:829 +#: pcbnew/modedit_onclick.cpp:284 +#: pcbnew/onrightclick.cpp:843 msgid "Global Pad Settings" msgstr "Edition Globale des pads" -#: pcbnew/modedit_onclick.cpp:293 +#: pcbnew/modedit_onclick.cpp:292 msgid "Move Text Mod." msgstr "Move Texte Mod." -#: pcbnew/modedit_onclick.cpp:296 +#: pcbnew/modedit_onclick.cpp:295 msgid "Rotate Text Mod." msgstr "Rot. Texte Mod." -#: pcbnew/modedit_onclick.cpp:298 +#: pcbnew/modedit_onclick.cpp:297 msgid "Edit Text Mod." msgstr "Edit Texte Mod." -#: pcbnew/modedit_onclick.cpp:301 +#: pcbnew/modedit_onclick.cpp:300 msgid "Delete Text Mod." msgstr "Supprimer Texte Mod." -#: pcbnew/modedit_onclick.cpp:308 +#: pcbnew/modedit_onclick.cpp:307 msgid "End edge" msgstr "Fin contour" -#: pcbnew/modedit_onclick.cpp:311 +#: pcbnew/modedit_onclick.cpp:310 msgid "Move edge" msgstr "Déplace contour" -#: pcbnew/modedit_onclick.cpp:314 +#: pcbnew/modedit_onclick.cpp:313 msgid "Place edge" msgstr "Place contour" -#: pcbnew/modedit_onclick.cpp:317 -#: pcbnew/onrightclick.cpp:747 -#: pcbnew/onrightclick.cpp:781 -#: pcbnew/onrightclick.cpp:878 +#: pcbnew/modedit_onclick.cpp:316 +#: pcbnew/onrightclick.cpp:761 +#: pcbnew/onrightclick.cpp:795 +#: pcbnew/onrightclick.cpp:892 #: eeschema/onrightclick.cpp:313 msgid "Edit" msgstr "Editer" -#: pcbnew/modedit_onclick.cpp:319 +#: pcbnew/modedit_onclick.cpp:318 msgid "Edit Width (Current)" msgstr "Edit Epaisseur (Courant)" -#: pcbnew/modedit_onclick.cpp:321 +#: pcbnew/modedit_onclick.cpp:320 msgid "Edit Width (All)" msgstr "Edit Epaisseur (Tous)" -#: pcbnew/modedit_onclick.cpp:323 +#: pcbnew/modedit_onclick.cpp:322 msgid "Edit Layer (Current)" msgstr "Edit Couche (Courant)" -#: pcbnew/modedit_onclick.cpp:325 +#: pcbnew/modedit_onclick.cpp:324 msgid "Edit Layer (All)" msgstr "Edit Couche (Tous)" -#: pcbnew/modedit_onclick.cpp:327 +#: pcbnew/modedit_onclick.cpp:326 msgid "Delete edge" msgstr "Effacement contour" -#: pcbnew/modedit_onclick.cpp:368 +#: pcbnew/modedit_onclick.cpp:367 msgid "Set Width" msgstr "Ajuste Epaiss" @@ -2419,6 +2421,113 @@ msgstr "Vias" msgid "Tracks" msgstr "Pistes" +#: pcbnew/pcbframe.cpp:269 +msgid "Board modified, Save before exit ?" +msgstr "Circuit Imprimé modifiée, Sauver avant de quitter ?" + +#: pcbnew/pcbframe.cpp:270 +#: eeschema/schframe.cpp:184 +#: cvpcb/cvframe.cpp:178 +#: common/confirm.cpp:119 +msgid "Confirmation" +msgstr "Confirmation" + +#: pcbnew/pcbframe.cpp:370 +msgid "DRC Off (Disable !!!), Currently: DRC is active" +msgstr "DRC off (désactivée !!!), actuellement DRC active" + +#: pcbnew/pcbframe.cpp:371 +msgid "DRC On (Currently: DRC is inactive !!!)" +msgstr "DRC On (Actuellement, DRC désactivée !!!)" + +#: pcbnew/pcbframe.cpp:382 +msgid "Polar Coords not show" +msgstr "Coord Polaires non affichées" + +#: pcbnew/pcbframe.cpp:383 +msgid "Display Polar Coords" +msgstr "Affichage coord Polaires" + +#: pcbnew/pcbframe.cpp:388 +#: eeschema/schframe.cpp:275 +msgid "Grid not show" +msgstr "Grille non montrée" + +#: pcbnew/pcbframe.cpp:388 +#: eeschema/schframe.cpp:275 +msgid "Show Grid" +msgstr "Afficher grille" + +#: pcbnew/pcbframe.cpp:397 +msgid "General ratsnest not show" +msgstr "Chevelu général non affiché" + +#: pcbnew/pcbframe.cpp:397 +msgid "Show General ratsnest" +msgstr "Afficher le chevelu général" + +#: pcbnew/pcbframe.cpp:403 +msgid "Module ratsnest not show" +msgstr "Ne pas montrer le chevelu du module pendant déplacement" + +#: pcbnew/pcbframe.cpp:404 +msgid "Show Module ratsnest" +msgstr "Montrer le chevelu du module" + +#: pcbnew/pcbframe.cpp:411 +msgid "Disable Auto Delete old Track" +msgstr "Ne pas Autoriser l'effacement automatique des pistes" + +#: pcbnew/pcbframe.cpp:412 +msgid "Enable Auto Delete old Track" +msgstr "Autoriser l'effacement automatique des pistes" + +#: pcbnew/pcbframe.cpp:419 +msgid "Do not Show Zones" +msgstr "Ne pas monter Zones" + +#: pcbnew/pcbframe.cpp:419 +#: pcbnew/tool_pcb.cpp:361 +#: pcbnew/set_color.h:423 +msgid "Show Zones" +msgstr "Monter Zones" + +#: pcbnew/pcbframe.cpp:425 +msgid "Show Pads Sketch mode" +msgstr "Afficher pastilles en contour" + +#: pcbnew/pcbframe.cpp:426 +msgid "Show pads filled mode" +msgstr "Afficher pastilles en mode plein" + +#: pcbnew/pcbframe.cpp:432 +msgid "Show Tracks Sketch mode" +msgstr "Afficher pistes en contour" + +#: pcbnew/pcbframe.cpp:433 +msgid "Show Tracks filled mode" +msgstr "Afficher pistes en mode plein" + +#: pcbnew/pcbframe.cpp:439 +msgid "Normal Contrast Mode Display" +msgstr "Mode d'affichage Contraste normal" + +#: pcbnew/pcbframe.cpp:440 +#: pcbnew/tool_pcb.cpp:374 +msgid "Hight Contrast Mode Display" +msgstr "Mode d'affichage Haut Contraste" + +#: pcbnew/pcbframe.cpp:452 +#: pcbnew/class_board_item.cpp:142 +#: pcbnew/class_track.cpp:765 +msgid "Track" +msgstr "Piste" + +#: pcbnew/pcbframe.cpp:484 +#: pcbnew/class_board_item.cpp:202 +msgid "Via" +msgstr "Via" + #: pcbnew/plotgerb.cpp:72 msgid "unable to create file " msgstr "Impossible de créer fichier " @@ -2428,15 +2537,15 @@ msgstr "Impossible de cr msgid "unable to reopen file <%s>" msgstr "Ne peut pas réouvrir fichier <%s>" -#: pcbnew/onleftclick.cpp:173 +#: pcbnew/onleftclick.cpp:176 msgid "Graphic not authorized on Copper layers" msgstr "Graphique non autorisé sur Couches Cuivre" -#: pcbnew/onleftclick.cpp:196 +#: pcbnew/onleftclick.cpp:199 msgid "Tracks on Copper layers only " msgstr "Pistes sur couches cuivre seulement" -#: pcbnew/onleftclick.cpp:272 +#: pcbnew/onleftclick.cpp:281 msgid "Cotation not authorized on Copper layers" msgstr "Cotation non autorisée sur Couches Cuivre" @@ -2501,358 +2610,382 @@ msgid "Delete Drawing" msgstr "Supprimer Tracé" #: pcbnew/onrightclick.cpp:281 -msgid "Delete Zone" -msgstr "Supprimer Zone" +msgid "Delete Zone Filling" +msgstr "Supprimer Remplissage de Zone" #: pcbnew/onrightclick.cpp:288 -msgid "End edge zone" -msgstr "Fin contour Zone" +msgid "Close Zone Outline" +msgstr "Fermer Contour de Zone" -#: pcbnew/onrightclick.cpp:291 -msgid "Delete Current Edge" -msgstr "Effacer Contour Zone Courant" +#: pcbnew/onrightclick.cpp:290 +msgid "Delete Last Corner" +msgstr "Supprimer Dernier Sommet" -#: pcbnew/onrightclick.cpp:310 +#: pcbnew/onrightclick.cpp:308 msgid "Delete Marker" msgstr "Effacer Marqueur" -#: pcbnew/onrightclick.cpp:317 +#: pcbnew/onrightclick.cpp:315 msgid "Edit Dimension" msgstr "Edit Cote" -#: pcbnew/onrightclick.cpp:320 +#: pcbnew/onrightclick.cpp:318 msgid "Delete Dimension" msgstr "Suppression Cote" -#: pcbnew/onrightclick.cpp:327 +#: pcbnew/onrightclick.cpp:325 msgid "Move Target" msgstr "Déplacer Mire" -#: pcbnew/onrightclick.cpp:330 +#: pcbnew/onrightclick.cpp:328 msgid "Edit Target" msgstr "Editer Mire" -#: pcbnew/onrightclick.cpp:332 +#: pcbnew/onrightclick.cpp:330 msgid "Delete Target" msgstr "Supprimer Mire" -#: pcbnew/onrightclick.cpp:364 +#: pcbnew/onrightclick.cpp:362 msgid "Get and Move Footprint" msgstr "Sel et Dépl.t module" -#: pcbnew/onrightclick.cpp:378 +#: pcbnew/onrightclick.cpp:376 msgid "Fill or Refill All Zones" msgstr "Remplir ou Re-remplir Toutes les Zones" -#: pcbnew/onrightclick.cpp:383 -#: pcbnew/onrightclick.cpp:394 -#: pcbnew/onrightclick.cpp:407 -#: pcbnew/onrightclick.cpp:468 +#: pcbnew/onrightclick.cpp:381 +#: pcbnew/onrightclick.cpp:392 +#: pcbnew/onrightclick.cpp:405 +#: pcbnew/onrightclick.cpp:466 msgid "Select Working Layer" msgstr "Sélection de la couche de travail" -#: pcbnew/onrightclick.cpp:392 -#: pcbnew/onrightclick.cpp:465 -#: pcbnew/onrightclick.cpp:593 +#: pcbnew/onrightclick.cpp:390 +#: pcbnew/onrightclick.cpp:463 msgid "Select Track Width" msgstr "Sélection Epais. Piste" -#: pcbnew/onrightclick.cpp:396 +#: pcbnew/onrightclick.cpp:394 msgid "Select layer pair for vias" msgstr "Selection couple de couches pour Vias" -#: pcbnew/onrightclick.cpp:413 +#: pcbnew/onrightclick.cpp:411 msgid "Footprint documentation" msgstr "Documentation des modules" -#: pcbnew/onrightclick.cpp:423 +#: pcbnew/onrightclick.cpp:421 msgid "Glob Move and Place" msgstr "Move et Place Globaux" -#: pcbnew/onrightclick.cpp:425 +#: pcbnew/onrightclick.cpp:423 msgid "Unlock All Modules" msgstr "Déverrouiller tous les Modules" -#: pcbnew/onrightclick.cpp:427 +#: pcbnew/onrightclick.cpp:425 msgid "Lock All Modules" msgstr "Verrouiller tous les Modules" -#: pcbnew/onrightclick.cpp:430 +#: pcbnew/onrightclick.cpp:428 msgid "Move All Modules" msgstr "Déplace tous les Modules" -#: pcbnew/onrightclick.cpp:431 +#: pcbnew/onrightclick.cpp:429 msgid "Move New Modules" msgstr "Déplace nouveaux Modules" -#: pcbnew/onrightclick.cpp:433 +#: pcbnew/onrightclick.cpp:431 msgid "Autoplace All Modules" msgstr "Autoplace Tous Modules" -#: pcbnew/onrightclick.cpp:434 +#: pcbnew/onrightclick.cpp:432 msgid "Autoplace New Modules" msgstr "AutoPlace nouveaux Modules" -#: pcbnew/onrightclick.cpp:435 +#: pcbnew/onrightclick.cpp:433 msgid "Autoplace Next Module" msgstr "Autoplace Module suivant" -#: pcbnew/onrightclick.cpp:438 +#: pcbnew/onrightclick.cpp:436 msgid "Orient All Modules" msgstr "Oriente Tous Modules" -#: pcbnew/onrightclick.cpp:445 +#: pcbnew/onrightclick.cpp:443 msgid "Global Autoroute" msgstr "Autoroutage global" -#: pcbnew/onrightclick.cpp:447 +#: pcbnew/onrightclick.cpp:445 msgid "Select layer pair" msgstr "Selection couple de couches" -#: pcbnew/onrightclick.cpp:449 +#: pcbnew/onrightclick.cpp:447 msgid "Autoroute All Modules" msgstr "Autoroute Tous Modules" -#: pcbnew/onrightclick.cpp:451 +#: pcbnew/onrightclick.cpp:449 msgid "Reset Unrouted" msgstr "Réinit Non routés" -#: pcbnew/onrightclick.cpp:456 +#: pcbnew/onrightclick.cpp:454 msgid "Global AutoRouter" msgstr "Autorouteur Global" -#: pcbnew/onrightclick.cpp:458 +#: pcbnew/onrightclick.cpp:456 msgid "Read Global AutoRouter Data" msgstr "Lire Données de L'autorouteur global" -#: pcbnew/onrightclick.cpp:495 +#: pcbnew/onrightclick.cpp:493 msgid "Flip Block (alt + drag mouse)" msgstr "Inversion Bloc (alt + drag mouse)" -#: pcbnew/onrightclick.cpp:518 +#: pcbnew/onrightclick.cpp:516 msgid "Drag Via" msgstr "Drag Via" -#: pcbnew/onrightclick.cpp:522 +#: pcbnew/onrightclick.cpp:520 +#: pcbnew/onrightclick.cpp:601 msgid "Edit Via" msgstr "Edit Via" -#: pcbnew/onrightclick.cpp:524 +#: pcbnew/onrightclick.cpp:522 msgid "Set via hole to Default" msgstr "Ajuste perçage via à défaut" +#: pcbnew/onrightclick.cpp:523 +msgid "Set via hole to a specific value. This specfic value is currently" +msgstr "Ajuste diametre perçage via a une valeur sécifique. Cette valeur spécifique est actuellement" + #: pcbnew/onrightclick.cpp:526 msgid "Set via hole to alt value" msgstr "Ajuste perçage via à valeur alternative" #: pcbnew/onrightclick.cpp:528 +msgid "Set alt via hole value. This value is currently" +msgstr "Ajuste la valeur alt. perçage via Cette valeur est actuellement" + +#: pcbnew/onrightclick.cpp:531 msgid "Set the via hole alt value" msgstr "Ajuste la valeur alt. perçage via" -#: pcbnew/onrightclick.cpp:530 +#: pcbnew/onrightclick.cpp:533 msgid "Export Via hole to alt value" msgstr "Exporte perçage via à valeur alt." -#: pcbnew/onrightclick.cpp:532 +#: pcbnew/onrightclick.cpp:535 msgid "Export via hole to others id vias" msgstr "Exporte perçage via aux autres semblables." -#: pcbnew/onrightclick.cpp:534 +#: pcbnew/onrightclick.cpp:537 msgid "Set ALL via holes to default" msgstr "Ajuste perçage TOUTES vias au défaut" -#: pcbnew/onrightclick.cpp:547 +#: pcbnew/onrightclick.cpp:550 msgid "Move Node" msgstr "Déplace Noeud" -#: pcbnew/onrightclick.cpp:552 +#: pcbnew/onrightclick.cpp:555 msgid "Drag Segments, keep slope" msgstr "Drag Segments, garder direction" -#: pcbnew/onrightclick.cpp:554 +#: pcbnew/onrightclick.cpp:557 msgid "Drag Segment" msgstr "Drag Segment" -#: pcbnew/onrightclick.cpp:557 +#: pcbnew/onrightclick.cpp:560 msgid "Move Segment" msgstr "Déplace Segment" -#: pcbnew/onrightclick.cpp:560 +#: pcbnew/onrightclick.cpp:563 msgid "Break Track" msgstr "Briser piste" -#: pcbnew/onrightclick.cpp:567 +#: pcbnew/onrightclick.cpp:570 msgid "Place Node" msgstr "Place noeud" -#: pcbnew/onrightclick.cpp:574 +#: pcbnew/onrightclick.cpp:577 msgid "End Track" msgstr "Terminer Piste" -#: pcbnew/onrightclick.cpp:577 +#: pcbnew/onrightclick.cpp:580 msgid "Place Via" msgstr "Place Via" -#: pcbnew/onrightclick.cpp:584 +#: pcbnew/onrightclick.cpp:587 msgid "Place Micro Via" msgstr "Place Micro Via" -#: pcbnew/onrightclick.cpp:598 +#: pcbnew/onrightclick.cpp:599 +msgid "Change Width" +msgstr "Change Largeur" + +#: pcbnew/onrightclick.cpp:601 +msgid "Edit Segment" +msgstr "Edite Segment" + +#: pcbnew/onrightclick.cpp:604 msgid "Edit Track" msgstr "Editer Piste" -#: pcbnew/onrightclick.cpp:600 +#: pcbnew/onrightclick.cpp:606 msgid "Edit Net" msgstr "Edit Net" -#: pcbnew/onrightclick.cpp:602 +#: pcbnew/onrightclick.cpp:608 msgid "Edit ALL Tracks and Vias" msgstr "Editer TOUTES Pistes et Vias" -#: pcbnew/onrightclick.cpp:604 +#: pcbnew/onrightclick.cpp:610 msgid "Edit ALL Vias (no track)" msgstr "Editer TOUTES Vias (pas les pistes)" -#: pcbnew/onrightclick.cpp:606 +#: pcbnew/onrightclick.cpp:612 msgid "Edit ALL Tracks (no via)" msgstr "Editer TOUTES Pistes (pas les vias)" -#: pcbnew/onrightclick.cpp:614 +#: pcbnew/onrightclick.cpp:620 msgid "Delete Via" msgstr "Suppression Via" -#: pcbnew/onrightclick.cpp:614 +#: pcbnew/onrightclick.cpp:620 msgid "Delete Segment" msgstr "SupprimerSegment" -#: pcbnew/onrightclick.cpp:621 +#: pcbnew/onrightclick.cpp:627 msgid "Delete Track" msgstr "Effacer Piste" -#: pcbnew/onrightclick.cpp:625 +#: pcbnew/onrightclick.cpp:631 msgid "Delete Net" msgstr "Supprimer Net" -#: pcbnew/onrightclick.cpp:630 +#: pcbnew/onrightclick.cpp:636 msgid "Set Flags" msgstr "Ajust. Flags" -#: pcbnew/onrightclick.cpp:631 +#: pcbnew/onrightclick.cpp:637 msgid "Locked: Yes" msgstr "Verrou: Oui" -#: pcbnew/onrightclick.cpp:632 +#: pcbnew/onrightclick.cpp:638 msgid "Locked: No" msgstr "Verrou: Non" -#: pcbnew/onrightclick.cpp:642 +#: pcbnew/onrightclick.cpp:648 msgid "Track Locked: Yes" msgstr "Piste verrouillée: Oui" -#: pcbnew/onrightclick.cpp:643 +#: pcbnew/onrightclick.cpp:649 msgid "Track Locked: No" msgstr "Piste verrouillée: Non" -#: pcbnew/onrightclick.cpp:645 +#: pcbnew/onrightclick.cpp:651 msgid "Net Locked: Yes" msgstr "Net verrouillé: Oui" -#: pcbnew/onrightclick.cpp:646 +#: pcbnew/onrightclick.cpp:652 msgid "Net Locked: No" msgstr "Net verrouillé: Non" -#: pcbnew/onrightclick.cpp:662 +#: pcbnew/onrightclick.cpp:668 +msgid "Place Edge Outline" +msgstr "Place Segment de Contour" + +#: pcbnew/onrightclick.cpp:674 msgid "Place Corner" msgstr "Place Sommet" -#: pcbnew/onrightclick.cpp:665 +#: pcbnew/onrightclick.cpp:677 msgid "Place Zone" msgstr "Place Zone" -#: pcbnew/onrightclick.cpp:671 +#: pcbnew/onrightclick.cpp:683 #: pcbnew/dialog_drc.cpp:477 msgid "Zones" msgstr "Zones" -#: pcbnew/onrightclick.cpp:676 +#: pcbnew/onrightclick.cpp:688 msgid "Move Corner" msgstr "Déplace Sommet" -#: pcbnew/onrightclick.cpp:678 +#: pcbnew/onrightclick.cpp:690 msgid "Delete Corner" msgstr "Supprimer Sommet" -#: pcbnew/onrightclick.cpp:683 +#: pcbnew/onrightclick.cpp:695 msgid "Create Corner" msgstr "Créer Sommet" -#: pcbnew/onrightclick.cpp:688 +#: pcbnew/onrightclick.cpp:697 +msgid "Drag Outline Segment" +msgstr "Drag Segment Contour" + +#: pcbnew/onrightclick.cpp:702 msgid "Add Similar Zone" msgstr "Addition d'une Zone Semblable" -#: pcbnew/onrightclick.cpp:691 +#: pcbnew/onrightclick.cpp:705 msgid "Add Cutout Area" msgstr "Addition d'une Zone Interdite" -#: pcbnew/onrightclick.cpp:695 +#: pcbnew/onrightclick.cpp:709 msgid "Fill Zone" msgstr "Remplir Zone" -#: pcbnew/onrightclick.cpp:698 +#: pcbnew/onrightclick.cpp:712 msgid "Move Zone" msgstr "Déplace Zone" -#: pcbnew/onrightclick.cpp:701 +#: pcbnew/onrightclick.cpp:715 msgid "Edit Zone Params" msgstr "Editer Paramètres de la Zone" -#: pcbnew/onrightclick.cpp:706 +#: pcbnew/onrightclick.cpp:720 msgid "Delete Cutout" msgstr "Supprimer Zone Interdite" -#: pcbnew/onrightclick.cpp:709 +#: pcbnew/onrightclick.cpp:723 msgid "Delete Zone Outline" msgstr "Supprimer Contour de Zone" -#: pcbnew/onrightclick.cpp:731 -#: pcbnew/onrightclick.cpp:776 -#: pcbnew/onrightclick.cpp:814 -#: pcbnew/onrightclick.cpp:873 +#: pcbnew/onrightclick.cpp:745 +#: pcbnew/onrightclick.cpp:790 +#: pcbnew/onrightclick.cpp:828 +#: pcbnew/onrightclick.cpp:887 msgid "Move" msgstr "Move" -#: pcbnew/onrightclick.cpp:734 -#: pcbnew/onrightclick.cpp:816 +#: pcbnew/onrightclick.cpp:748 +#: pcbnew/onrightclick.cpp:830 msgid "Drag" msgstr "Drag" -#: pcbnew/onrightclick.cpp:738 +#: pcbnew/onrightclick.cpp:752 msgid "Rotate +" msgstr "Rotation +" -#: pcbnew/onrightclick.cpp:742 +#: pcbnew/onrightclick.cpp:756 #: eeschema/onrightclick.cpp:301 msgid "Rotate -" msgstr "Rotation -" -#: pcbnew/onrightclick.cpp:743 +#: pcbnew/onrightclick.cpp:757 msgid "Flip" msgstr "Change côté" -#: pcbnew/onrightclick.cpp:753 +#: pcbnew/onrightclick.cpp:767 #: pcbnew/modules.cpp:281 msgid "Delete Module" msgstr "Supprimer Module" -#: pcbnew/onrightclick.cpp:833 +#: pcbnew/onrightclick.cpp:847 msgid "delete" msgstr "Effacer" -#: pcbnew/onrightclick.cpp:840 +#: pcbnew/onrightclick.cpp:854 msgid "Autoroute Pad" msgstr "Autoroute Pad" -#: pcbnew/onrightclick.cpp:841 +#: pcbnew/onrightclick.cpp:855 msgid "Autoroute Net" msgstr "Autoroute Net" @@ -3030,113 +3163,6 @@ msgstr "Nom Module: " msgid "Value " msgstr "Valeur " -#: pcbnew/pcbframe.cpp:268 -msgid "Board modified, Save before exit ?" -msgstr "Circuit Imprimé modifiée, Sauver avant de quitter ?" - -#: pcbnew/pcbframe.cpp:269 -#: eeschema/schframe.cpp:183 -#: cvpcb/cvframe.cpp:177 -#: common/confirm.cpp:119 -msgid "Confirmation" -msgstr "Confirmation" - -#: pcbnew/pcbframe.cpp:369 -msgid "DRC Off (Disable !!!), Currently: DRC is active" -msgstr "DRC off (désactivée !!!), actuellement DRC active" - -#: pcbnew/pcbframe.cpp:370 -msgid "DRC On (Currently: DRC is inactive !!!)" -msgstr "DRC On (Actuellement, DRC désactivée !!!)" - -#: pcbnew/pcbframe.cpp:381 -msgid "Polar Coords not show" -msgstr "Coord Polaires non affichées" - -#: pcbnew/pcbframe.cpp:382 -msgid "Display Polar Coords" -msgstr "Affichage coord Polaires" - -#: pcbnew/pcbframe.cpp:387 -#: eeschema/schframe.cpp:274 -msgid "Grid not show" -msgstr "Grille non montrée" - -#: pcbnew/pcbframe.cpp:387 -#: eeschema/schframe.cpp:274 -msgid "Show Grid" -msgstr "Afficher grille" - -#: pcbnew/pcbframe.cpp:396 -msgid "General ratsnest not show" -msgstr "Chevelu général non affiché" - -#: pcbnew/pcbframe.cpp:396 -msgid "Show General ratsnest" -msgstr "Afficher le chevelu général" - -#: pcbnew/pcbframe.cpp:402 -msgid "Module ratsnest not show" -msgstr "Ne pas montrer le chevelu du module pendant déplacement" - -#: pcbnew/pcbframe.cpp:403 -msgid "Show Module ratsnest" -msgstr "Montrer le chevelu du module" - -#: pcbnew/pcbframe.cpp:410 -msgid "Disable Auto Delete old Track" -msgstr "Ne pas Autoriser l'effacement automatique des pistes" - -#: pcbnew/pcbframe.cpp:411 -msgid "Enable Auto Delete old Track" -msgstr "Autoriser l'effacement automatique des pistes" - -#: pcbnew/pcbframe.cpp:418 -msgid "Do not Show Zones" -msgstr "Ne pas monter Zones" - -#: pcbnew/pcbframe.cpp:418 -#: pcbnew/tool_pcb.cpp:361 -#: pcbnew/set_color.h:423 -msgid "Show Zones" -msgstr "Monter Zones" - -#: pcbnew/pcbframe.cpp:424 -msgid "Show Pads Sketch mode" -msgstr "Afficher pastilles en contour" - -#: pcbnew/pcbframe.cpp:425 -msgid "Show pads filled mode" -msgstr "Afficher pastilles en mode plein" - -#: pcbnew/pcbframe.cpp:431 -msgid "Show Tracks Sketch mode" -msgstr "Afficher pistes en contour" - -#: pcbnew/pcbframe.cpp:432 -msgid "Show Tracks filled mode" -msgstr "Afficher pistes en mode plein" - -#: pcbnew/pcbframe.cpp:438 -msgid "Normal Contrast Mode Display" -msgstr "Mode d'affichage Contraste normal" - -#: pcbnew/pcbframe.cpp:439 -#: pcbnew/tool_pcb.cpp:374 -msgid "Hight Contrast Mode Display" -msgstr "Mode d'affichage Haut Contraste" - -#: pcbnew/pcbframe.cpp:451 -#: pcbnew/class_board_item.cpp:139 -#: pcbnew/class_track.cpp:765 -msgid "Track" -msgstr "Piste" - -#: pcbnew/pcbframe.cpp:483 -#: pcbnew/class_board_item.cpp:199 -msgid "Via" -msgstr "Via" - #: pcbnew/block.cpp:122 msgid "Include Modules" msgstr "Inclure Modules" @@ -3329,12 +3355,11 @@ msgstr "Pcb Graphic" #: pcbnew/class_board_item.cpp:59 #: pcbnew/class_board_item.cpp:68 -#: pcbnew/class_board_item.cpp:145 -#: pcbnew/class_board_item.cpp:177 -#: pcbnew/class_board_item.cpp:193 -#: pcbnew/class_board_item.cpp:220 -#: pcbnew/class_board_item.cpp:237 -#: pcbnew/class_board_item.cpp:243 +#: pcbnew/class_board_item.cpp:148 +#: pcbnew/class_board_item.cpp:180 +#: pcbnew/class_board_item.cpp:196 +#: pcbnew/class_board_item.cpp:223 +#: pcbnew/class_board_item.cpp:240 msgid " on " msgstr " sur " @@ -3344,77 +3369,73 @@ msgstr "Texte Pcb" #: pcbnew/class_board_item.cpp:79 #: pcbnew/class_board_item.cpp:85 -#: pcbnew/class_board_item.cpp:129 +#: pcbnew/class_board_item.cpp:132 msgid " of " msgstr " de " -#: pcbnew/class_board_item.cpp:92 +#: pcbnew/class_board_item.cpp:93 msgid "Graphic" msgstr "Graphique" -#: pcbnew/class_board_item.cpp:104 +#: pcbnew/class_board_item.cpp:105 msgid "Arc" msgstr "Arc" -#: pcbnew/class_board_item.cpp:146 +#: pcbnew/class_board_item.cpp:149 #: pcbnew/dialog_zones_by_polygon.cpp:229 msgid "Net:" msgstr "Net:" -#: pcbnew/class_board_item.cpp:147 +#: pcbnew/class_board_item.cpp:150 msgid "Length:" msgstr "Long.:" -#: pcbnew/class_board_item.cpp:152 -#: pcbnew/class_zone.cpp:488 +#: pcbnew/class_board_item.cpp:155 +#: pcbnew/class_zone.cpp:519 msgid "Zone Outline" msgstr "Contour de Zone" -#: pcbnew/class_board_item.cpp:156 -#: pcbnew/class_zone.cpp:491 +#: pcbnew/class_board_item.cpp:159 +#: pcbnew/class_zone.cpp:523 msgid "(Cutout)" msgstr "(Cutout)" -#: pcbnew/class_board_item.cpp:175 -#: pcbnew/class_zone.cpp:511 +#: pcbnew/class_board_item.cpp:178 +#: pcbnew/class_zone.cpp:543 msgid "Not Found" msgstr " Non Trouvé" -#: pcbnew/class_board_item.cpp:181 +#: pcbnew/class_board_item.cpp:184 #: pcbnew/class_track.cpp:769 msgid "Zone" msgstr "Zone" -#: pcbnew/class_board_item.cpp:203 +#: pcbnew/class_board_item.cpp:206 msgid "Blind/Buried" msgstr "Borgne/Aveugle" -#: pcbnew/class_board_item.cpp:205 +#: pcbnew/class_board_item.cpp:208 #: pcbnew/pcbnew.h:289 msgid "Micro Via" msgstr "Micro Via" -#: pcbnew/class_board_item.cpp:227 +#: pcbnew/class_board_item.cpp:230 #: pcbnew/class_marker.cpp:133 msgid "Marker" msgstr "Marqueur" -#: pcbnew/class_board_item.cpp:232 +#: pcbnew/class_board_item.cpp:235 msgid "Dimension" msgstr "Dimension" -#: pcbnew/class_board_item.cpp:237 +#: pcbnew/class_board_item.cpp:240 msgid "Target" msgstr "Mire" -#: pcbnew/class_board_item.cpp:238 +#: pcbnew/class_board_item.cpp:241 msgid "size" msgstr "dimension" -#: pcbnew/class_board_item.cpp:243 -msgid "Edge Zone" -msgstr "Contour Zone" - #: pcbnew/moduleframe.cpp:182 msgid "Module Editor: module modified!, Continue ?" msgstr "Editeur de Module: module modifié! Continuer ?" @@ -3465,13 +3486,13 @@ msgid "Pads" msgstr "Pads" #: pcbnew/class_track.cpp:791 -#: pcbnew/zones_by_polygon.cpp:906 -#: pcbnew/class_zone.cpp:514 +#: pcbnew/zones_by_polygon.cpp:851 +#: pcbnew/class_zone.cpp:546 msgid "NetName" msgstr "NetName" #: pcbnew/class_track.cpp:796 -#: pcbnew/class_zone.cpp:519 +#: pcbnew/class_zone.cpp:551 msgid "NetCode" msgstr "NetCode" @@ -3973,21 +3994,21 @@ msgstr "Grille" msgid "+/- to switch" msgstr "+/- pour commuter" -#: pcbnew/zones_by_polygon.cpp:342 -#: pcbnew/zones_by_polygon.cpp:381 -#: pcbnew/zones_by_polygon.cpp:719 +#: pcbnew/zones_by_polygon.cpp:337 +#: pcbnew/zones_by_polygon.cpp:378 +#: pcbnew/zones_by_polygon.cpp:672 msgid "Area: DRC outline error" msgstr "Zone; Erreur DRC sur contour" -#: pcbnew/zones_by_polygon.cpp:544 +#: pcbnew/zones_by_polygon.cpp:561 msgid "DRC error: this start point is inside or too close an other area" msgstr "Erreur DRC: ce point de départ est a l'intérieur d'une autre zone ou trop proche" -#: pcbnew/zones_by_polygon.cpp:644 +#: pcbnew/zones_by_polygon.cpp:620 msgid "DRC error: closing this area creates a drc error with an other area" msgstr "Erreur DRC: la fermeture de cette zone crée une erreur DRC avec une autre zone" -#: pcbnew/zones_by_polygon.cpp:904 +#: pcbnew/zones_by_polygon.cpp:849 msgid "No Net" msgstr "No Net" @@ -4091,27 +4112,6 @@ msgstr "Erreur. Vous devez choisir une couche" msgid "Error : you must choose a net name" msgstr "Erreur. Vous devez choisir une équipotentielle" -#: pcbnew/class_board.cpp:427 -msgid "Nodes" -msgstr "Nodes" - -#: pcbnew/class_board.cpp:430 -msgid "Links" -msgstr "Liens" - -#: pcbnew/class_board.cpp:433 -msgid "Nets" -msgstr "Nets" - -#: pcbnew/class_board.cpp:436 -msgid "Connect" -msgstr "Connect" - -#: pcbnew/class_board.cpp:439 -#: eeschema/eelayer.h:116 -msgid "NoConn" -msgstr "Non Conn" - #: pcbnew/sel_layer.cpp:92 msgid "Select Layer:" msgstr "Selection couche:" @@ -4201,11 +4201,11 @@ msgstr "Change Per msgid "Change Orient" msgstr "Change Orientation" -#: pcbnew/zone_filling_algorithm.cpp:163 +#: pcbnew/zone_filling_algorithm.cpp:200 msgid "No pads or starting point found to fill this zone outline" msgstr "Pas de pads ou de points de départ pour remplir ce contour de zone" -#: pcbnew/zone_filling_algorithm.cpp:205 +#: pcbnew/zone_filling_algorithm.cpp:246 msgid "Ok" msgstr "Ok" @@ -4348,6 +4348,31 @@ msgstr "Chercher Marqueur" msgid "Find Next Marker" msgstr "Marqueur Suivant" +#: pcbnew/specctra_export.cpp:54 +msgid "Specctra DSN file:" +msgstr "Fichier Specctra DSN" + +#: pcbnew/class_board.cpp:427 +msgid "Nodes" +msgstr "Nodes" + +#: pcbnew/class_board.cpp:430 +msgid "Links" +msgstr "Liens" + +#: pcbnew/class_board.cpp:433 +msgid "Nets" +msgstr "Nets" + +#: pcbnew/class_board.cpp:436 +msgid "Connect" +msgstr "Connect" + +#: pcbnew/class_board.cpp:439 +#: eeschema/eelayer.h:116 +msgid "NoConn" +msgstr "Non Conn" + #: pcbnew/menubarpcb.cpp:42 msgid "Load Board Ctrl-O" msgstr "Charger Circuit Imprimé (Ctrl O)" @@ -4923,10 +4948,6 @@ msgstr "Fichier rapport termin msgid "DRC Report file" msgstr "Fichier rapport de contrôle DRC:" -#: pcbnew/specctra_export.cpp:52 -msgid "Specctra DSN file:" -msgstr "Fichier Specctra DSN" - #: pcbnew/gen_drill_report_files.cpp:388 msgid "" " Drill map: Too many diameter values to draw to draw one symbol per drill value (max 13)\n" @@ -4935,20 +4956,11 @@ msgstr "" "Plan de perçage: trop de diametres différents pour tracer 1 symbole par diametre\n" "Le tracé utilise des cercles pour quelques valeurs " -#: pcbnew/class_zone.cpp:65 -msgid "Netcode" -msgstr "Netcode" - -#: pcbnew/class_zone.cpp:74 -#: eeschema/eelayer.h:104 -msgid "Netname" -msgstr "NetName" - -#: pcbnew/class_zone.cpp:527 +#: pcbnew/class_zone.cpp:559 msgid "Corners" msgstr "Sommets" -#: pcbnew/class_zone.cpp:531 +#: pcbnew/class_zone.cpp:563 msgid "Hatch lines" msgstr "Lignes de Hachure" @@ -5510,7 +5522,7 @@ msgid "Add graphic text (comment)" msgstr "Addition de textes graphiques (commentaires)" #: eeschema/tool_sch.cpp:274 -#: eeschema/schframe.cpp:284 +#: eeschema/schframe.cpp:285 msgid "Show Hidden Pins" msgstr "Force affichage des pins invisibles" @@ -7186,22 +7198,6 @@ msgstr "Ok pour effacer la LISTE des filtres de modules" msgid "New FootprintFilter:" msgstr "Nouveau \"Filtre de Modules" -#: eeschema/schframe.cpp:182 -msgid "Schematic modified, Save before exit ?" -msgstr "Schematique modifiée, Sauver avant de quitter ?" - -#: eeschema/schframe.cpp:284 -msgid "No show Hidden Pins" -msgstr "N'affichage pas les pins invisibles" - -#: eeschema/schframe.cpp:287 -msgid "Draw lines at any direction" -msgstr "Tracer traits de direction quelconque" - -#: eeschema/schframe.cpp:288 -msgid "Draw lines H, V or 45 deg only" -msgstr "Tracer traits H, V ou 45 deg seulement" - #: eeschema/menubar.cpp:39 msgid "&Load Schematic Project" msgstr "&Charger Projet schématique" @@ -7988,6 +7984,22 @@ msgstr "Tri" msgid "Bad Bus Label: " msgstr "Mauvais label de Bus: " +#: eeschema/schframe.cpp:183 +msgid "Schematic modified, Save before exit ?" +msgstr "Schematique modifiée, Sauver avant de quitter ?" + +#: eeschema/schframe.cpp:285 +msgid "No show Hidden Pins" +msgstr "N'affichage pas les pins invisibles" + +#: eeschema/schframe.cpp:288 +msgid "Draw lines at any direction" +msgstr "Tracer traits de direction quelconque" + +#: eeschema/schframe.cpp:289 +msgid "Draw lines H, V or 45 deg only" +msgstr "Tracer traits H, V ou 45 deg seulement" + #: eeschema/eelibs_read_libraryfiles.cpp:115 msgid "Start loading schematic libs" msgstr "Demarre chargement des librairies schématiques" @@ -8231,7 +8243,7 @@ msgid "Unknown Netlist Format" msgstr " Format NetListe inconnu" #: cvpcb/init.cpp:134 -#: cvpcb/cvframe.cpp:339 +#: cvpcb/cvframe.cpp:340 #, c-format msgid "Componants: %d (free: %d)" msgstr "Composants: %d (libres: %d)" @@ -8359,59 +8371,42 @@ msgstr "Librairie %s non trouv msgid "Library file <%s> is not a module library" msgstr "Le fichier %s n'est pas une librairie eeschema" -#: cvpcb/cvframe.cpp:175 +#: cvpcb/cvframe.cpp:176 msgid "Netlist and Cmp list modified, Save before exit ?" msgstr "Netlist et liste composants modifiés, Sauver avant de quitter ?" -#: cvpcb/cvframe.cpp:198 +#: cvpcb/cvframe.cpp:199 msgid "Problem when saving files, Exit anyway" msgstr "Problemes en sauvant les fichiers, quitter quand même" -#: cvpcb/cvframe.cpp:325 +#: cvpcb/cvframe.cpp:326 msgid "Delete selections" msgstr "Effacement des associations existantes" -#: cvpcb/cvframe.cpp:423 +#: cvpcb/cvframe.cpp:424 #: share/drawframe.cpp:134 msgid "font for dialog boxes" msgstr "fonte pour boites de dialogue" -#: cvpcb/cvframe.cpp:425 +#: cvpcb/cvframe.cpp:426 msgid "font for Lists" msgstr "fonte pour listes" -#: cvpcb/cvframe.cpp:427 +#: cvpcb/cvframe.cpp:428 #: share/drawframe.cpp:138 msgid "font for Status Line" msgstr "fonte pour Ligne d'état" -#: cvpcb/cvframe.cpp:430 +#: cvpcb/cvframe.cpp:431 #: share/drawframe.cpp:141 msgid "&Font selection" msgstr "Sélection Fonte" -#: cvpcb/cvframe.cpp:432 +#: cvpcb/cvframe.cpp:433 #: share/drawframe.cpp:142 msgid "Choose font type and size for dialogs, infos and status box" msgstr "Choisir les fontes et leur taille pour les dialogues, infos et ligne d'état" -#: kicad/mainframe.cpp:102 -#, c-format -msgid "" -"Ready\n" -"Working dir: %s\n" -msgstr "" -"Pret\n" -"Répertoire de travail: %s\n" - -#: kicad/mainframe.cpp:330 -msgid "Execute Python Script:" -msgstr "Executer le Script Python:" - -#: kicad/mainframe.cpp:353 -msgid "Load file:" -msgstr "Charger Fichiers:" - #: kicad/preferences.cpp:33 msgid "Prefered Pdf Browser:" msgstr "Visualisateur PDF préféré:" @@ -8802,6 +8797,23 @@ msgstr "Supprimer Fichier" msgid "no kicad files found in this directory" msgstr "Pas de fichier Kicad tropuvés dans ce répertoire" +#: kicad/mainframe.cpp:103 +#, c-format +msgid "" +"Ready\n" +"Working dir: %s\n" +msgstr "" +"Pret\n" +"Répertoire de travail: %s\n" + +#: kicad/mainframe.cpp:331 +msgid "Execute Python Script:" +msgstr "Executer le Script Python:" + +#: kicad/mainframe.cpp:354 +msgid "Load file:" +msgstr "Charger Fichiers:" + #: gerbview/gerbview_config.cpp:127 #: gerbview/process_config.cpp:117 msgid "Save config file" @@ -9124,10 +9136,6 @@ msgstr "Nom Fichier C.I.:" msgid "Ok to change the existing file ?" msgstr "D'accord pour changer le fichier existant ?" -#: gerbview/gerberframe.cpp:177 -msgid "Layer modified, Continue ?" -msgstr "Couche modifiée, Continuer ?" - #: gerbview/select_layers_to_pcb.cpp:89 msgid "Layer selection:" msgstr "Sélection couche:" @@ -9162,6 +9170,10 @@ msgstr "Affiche toutes les couches Gerber" msgid "Switch off all of the Gerber layers" msgstr "N'affiche pas les couches Gerber" +#: gerbview/gerberframe.cpp:178 +msgid "Layer modified, Continue ?" +msgstr "Couche modifiée, Continuer ?" + #: common/get_component_dialog.cpp:105 msgid "History list:" msgstr "Historique:" @@ -9191,11 +9203,6 @@ msgstr "X" msgid "Y" msgstr "Y" -#: common/basicframe.cpp:216 -#, c-format -msgid "Help file %s not found" -msgstr "Fichier d'aide %s non trouvé" - #: common/edaappl.cpp:498 msgid "Default" msgstr "Defaut" @@ -9310,6 +9317,48 @@ msgstr "Inversion Bloc" msgid "Block Mirror" msgstr "Bloc Miroir" +#: common/infospgm.cpp:34 +msgid "Build Version:" +msgstr "Build Version:" + +#: common/infospgm.cpp:49 +msgid "Author:" +msgstr "Autheur:" + +#: common/infospgm.cpp:50 +msgid "Based on wxWidgets " +msgstr "Based on wxWidgets " + +#: common/infospgm.cpp:55 +msgid "" +"\n" +"\n" +"GPL License" +msgstr "" +"\n" +"\n" +"GPL Licence" + +#: common/infospgm.cpp:56 +msgid "" +"\n" +"\n" +"Author's sites:\n" +msgstr "" +"\n" +"\n" +"Sites Web de l'auteur:\n" + +#: common/infospgm.cpp:59 +msgid "" +"\n" +"\n" +"International wiki:\n" +msgstr "" +"\n" +"\n" +"International wiki:\n" + #: common/common.cpp:49 msgid " (\"):" msgstr " (\"):" @@ -9510,6 +9559,11 @@ msgstr "--- " msgid "No default editor found, you must choose it" msgstr "Pas d'éditeur par défaut trouvé, vous devez en choisir un" +#: common/basicframe.cpp:216 +#, c-format +msgid "Help file %s not found" +msgstr "Fichier d'aide %s non trouvé" + #: common/confirm.cpp:106 msgid "Infos:" msgstr "Infos:" @@ -9824,48 +9878,6 @@ msgstr "Pre&visualisation" msgid "&Print" msgstr "Imp&rimer" -#: share/infospgm.cpp:47 -msgid "Build Version:" -msgstr "Build Version:" - -#: share/infospgm.cpp:62 -msgid "Author:" -msgstr "Autheur:" - -#: share/infospgm.cpp:63 -msgid "Based on wxWidgets " -msgstr "Based on wxWidgets " - -#: share/infospgm.cpp:68 -msgid "" -"\n" -"\n" -"GPL License" -msgstr "" -"\n" -"\n" -"GPL Licence" - -#: share/infospgm.cpp:69 -msgid "" -"\n" -"\n" -"Author's sites:\n" -msgstr "" -"\n" -"\n" -"Sites Web de l'auteur:\n" - -#: share/infospgm.cpp:72 -msgid "" -"\n" -"\n" -"International wiki:\n" -msgstr "" -"\n" -"\n" -"International wiki:\n" - #: share/setpage.cpp:274 msgid "Size A4" msgstr "Format A4 " @@ -10175,6 +10187,10 @@ msgstr "Label" msgid "GlobLabel" msgstr "Lab Global" +#: eeschema/eelayer.h:104 +msgid "Netname" +msgstr "NetName" + #: eeschema/eelayer.h:110 msgid "Notes" msgstr "Notes" diff --git a/pcbnew/bitmaps/Drag_Outline_Segment.xpm b/pcbnew/bitmaps/Drag_Outline_Segment.xpm new file mode 100644 index 0000000000..92e95c217c --- /dev/null +++ b/pcbnew/bitmaps/Drag_Outline_Segment.xpm @@ -0,0 +1,59 @@ +/* XPM */ +static const char * drag_outline_segment_xpm[] = { +"16 16 40 1", +" c None", +"! c black", +"# c #C00000", +"$ c #5C6A00", +"% c #800028", +"& c #0D0D1E", +"' c #9B9B9B", +"( c #565656", +") c #32323E", +"* c #DCDCEF", +"+ c #4A4A4A", +", c #D2D2D2", +"- c #84849B", +". c white", +"0 c #F1F1FF", +"1 c #31313D", +"2 c #E7E5FF", +"3 c #646489", +"4 c #232332", +"5 c #FBFBFF", +"6 c #EAEAFF", +"7 c #E2E1FF", +"8 c #DBDBFF", +"9 c #D5D3FF", +": c #CDCDFF", +"; c #C8C6FF", +"< c #C1C1FF", +"= c #9F9DDB", +"> c #30303B", +"? c #7A7A96", +"@ c #D2D0FF", +"A c #5A5981", +"B c #20202F", +"C c #C8C8FF", +"D c #C0BFFF", +"E c #5C5C82", +"F c #B8B8FF", +"G c #56557D", +"H c #9493D6", +"I c #1D1D2C", +" ", +" %%########$ ", +" %%#########$ ", +" %#$ #$", +" %#$''()*)+ ,,,", +" %#$ !-.-!! ", +"%#$ !.! ", +"#$ ! !0! ! ", +"$ 1-!!!2!!!34 ", +" !*506789:;<=!", +" >?!!!@!!!AB ", +" ! !C! !! ", +" ! !D! ! ", +" !EFG!! ", +" BHI! ", +" ! "}; diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp index 9fec8815b6..89733c475f 100644 --- a/pcbnew/class_zone.cpp +++ b/pcbnew/class_zone.cpp @@ -564,7 +564,7 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame ) } -/* Geometric transformations: */ +/* Geometric transforms: */ /** * Function Move @@ -575,16 +575,40 @@ void ZONE_CONTAINER::Move( const wxPoint& offset ) { for( unsigned ii = 0; ii < m_Poly->corner.size(); ii++ ) { - m_Poly->corner[ii].x += offset.x; - m_Poly->corner[ii].y += offset.y; + SetCornerPosition(ii, GetCornerPosition(ii) + offset); } m_Poly->Hatch(); } +/** + * Function MoveEdge + * Move the outline Edge. m_CornerSelection is the start point of the outline edge + * @param offset = moving vector + */ +void ZONE_CONTAINER::MoveEdge( const wxPoint& offset ) +{ + int ii = m_CornerSelection; + + // Move the start point of the selected edge: + SetCornerPosition(ii, GetCornerPosition(ii) + offset); + + // Move the end point of the selected edge: + if ( m_Poly->corner[ii].end_contour || ii == GetNumCorners() - 1) + { + int icont = m_Poly->GetContour( ii ); + ii = m_Poly->GetContourStart( icont ); + } + else + ii++; + SetCornerPosition(ii, GetCornerPosition(ii) + offset); + + m_Poly->Hatch(); +} + /** - * Function Move + * Function Rotate * Move the outlines * @param centre = rot centre * @param angle = in 0.1 degree diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h index 84ea1ba203..0fe35a2aaa 100644 --- a/pcbnew/class_zone.h +++ b/pcbnew/class_zone.h @@ -147,7 +147,14 @@ public: void Move( const wxPoint& offset ); /** - * Function Move + * Function MoveEdge + * Move the outline Edge. m_CornerSelection is the start point of the outline edge + * @param offset = moving vector + */ + void MoveEdge( const wxPoint& offset ); + + /** + * Function Rotate * Move the outlines * @param centre = rot centre * @param angle = in 0.1 degree diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index 812a125b67..48006054b5 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -68,13 +68,14 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE: case ID_POPUP_PCB_DELETE_ZONE_LAST_CREATED_CORNER: case ID_POPUP_PCB_FILL_ALL_ZONES: - case ID_POPUP_PCB_PLACE_ZONE_CORNER: - case ID_POPUP_PCB_PLACE_ZONE_OUTLINES: + case ID_POPUP_PCB_PLACE_ZONE_CORNER: + case ID_POPUP_PCB_PLACE_ZONE_OUTLINES: case ID_POPUP_PCB_EDIT_ZONE_PARAMS: case ID_POPUP_PCB_DELETE_ZONE: - case ID_POPUP_PCB_MOVE_ZONE_CORNER: - case ID_POPUP_PCB_MOVE_ZONE_OUTLINES: - case ID_POPUP_PCB_ADD_ZONE_CORNER: + case ID_POPUP_PCB_MOVE_ZONE_CORNER: + case ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT: + case ID_POPUP_PCB_MOVE_ZONE_OUTLINES: + case ID_POPUP_PCB_ADD_ZONE_CORNER: case ID_POPUP_PCB_DELETE_TRACKSEG: case ID_POPUP_PCB_DELETE_TRACK: case ID_POPUP_PCB_DELETE_TRACKNET: @@ -84,8 +85,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_SELECT_LAYER_PAIR: case ID_POPUP_PCB_SELECT_NO_CU_LAYER: case ID_POPUP_PCB_SELECT_WIDTH: - case ID_POPUP_PCB_SELECT_AUTO_WIDTH: - case ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH: + case ID_POPUP_PCB_SELECT_AUTO_WIDTH: + case ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH: case ID_POPUP_PCB_SELECT_WIDTH1: case ID_POPUP_PCB_SELECT_WIDTH2: case ID_POPUP_PCB_SELECT_WIDTH3: @@ -340,7 +341,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) GetScreen()->SetModify(); break; - case ID_POPUP_PCB_EDIT_NET: + case ID_POPUP_PCB_EDIT_NET: if( GetCurItem() == NULL ) break; Edit_Net_Width( &dc, ( (TRACK*) GetCurItem() )->GetNet() ); @@ -379,8 +380,9 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_POPUP_PCB_PLACE_MICROVIA: - if ( ! GetScreen()->IsMicroViaAcceptable() ) - break; + if( !GetScreen()->IsMicroViaAcceptable() ) + break; + case ID_POPUP_PCB_PLACE_VIA: DrawPanel->MouseToCursorSchema(); if( GetCurItem()->m_Flags & IS_DRAGGED ) @@ -389,17 +391,17 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) } else { - int v_type = g_DesignSettings.m_CurrentViaType; - if ( id == ID_POPUP_PCB_PLACE_MICROVIA ) - g_DesignSettings.m_CurrentViaType = VIA_MICROVIA; // place micro via and switch layer + int v_type = g_DesignSettings.m_CurrentViaType; + if( id == ID_POPUP_PCB_PLACE_MICROVIA ) + g_DesignSettings.m_CurrentViaType = VIA_MICROVIA; // place micro via and switch layer Other_Layer_Route( (TRACK*) GetCurItem(), &dc ); - g_DesignSettings.m_CurrentViaType = v_type; + g_DesignSettings.m_CurrentViaType = v_type; if( DisplayOpt.ContrastModeDisplay ) GetScreen()->SetRefreshReq(); } break; - case ID_POPUP_PCB_DELETE_TRACKSEG: + case ID_POPUP_PCB_DELETE_TRACKSEG: if( GetCurItem() == NULL ) break; DrawPanel->MouseToCursorSchema(); @@ -460,73 +462,82 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_EDIT_ZONE_PARAMS: Edit_Zone_Params( &dc, (ZONE_CONTAINER*) GetCurItem() ); - SetCurItem( NULL ); // Outlines can have changed + SetCurItem( NULL ); // Outlines can have changed break; - case ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE: + case ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE: DrawPanel->MouseToCursorSchema(); Add_Similar_Zone( &dc, (ZONE_CONTAINER*) GetCurItem() ); - break; + break; - case ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE: + case ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE: DrawPanel->MouseToCursorSchema(); Add_Zone_Cutout( &dc, (ZONE_CONTAINER*) GetCurItem() ); - break; + break; case ID_POPUP_PCB_DELETE_ZONE_CONTAINER: - case ID_POPUP_PCB_DELETE_ZONE_CUTOUT: + case ID_POPUP_PCB_DELETE_ZONE_CUTOUT: DrawPanel->MouseToCursorSchema(); - Delete_Zone_Contour( &dc, (ZONE_CONTAINER*)GetCurItem() ); - SetCurItem( NULL ); - break; - - case ID_POPUP_PCB_DELETE_ZONE_CORNER: - Remove_Zone_Corner( &dc, (ZONE_CONTAINER*)GetCurItem() ); + Delete_Zone_Contour( &dc, (ZONE_CONTAINER*) GetCurItem() ); SetCurItem( NULL ); break; - - case ID_POPUP_PCB_MOVE_ZONE_CORNER: - { - DrawPanel->MouseToCursorSchema(); - ZONE_CONTAINER * zone_cont = (ZONE_CONTAINER*)GetCurItem(); - Start_Move_Zone_Corner(&dc, zone_cont, zone_cont->m_CornerSelection, false); - break; - } - case ID_POPUP_PCB_MOVE_ZONE_OUTLINES: - { - DrawPanel->MouseToCursorSchema(); - ZONE_CONTAINER * zone_cont = (ZONE_CONTAINER*)GetCurItem(); - Start_Move_Zone_Outlines(&dc, zone_cont); + case ID_POPUP_PCB_DELETE_ZONE_CORNER: + Remove_Zone_Corner( &dc, (ZONE_CONTAINER*) GetCurItem() ); + SetCurItem( NULL ); break; - } - case ID_POPUP_PCB_ADD_ZONE_CORNER: - { + case ID_POPUP_PCB_MOVE_ZONE_CORNER: + { DrawPanel->MouseToCursorSchema(); - ZONE_CONTAINER * zone_cont = (ZONE_CONTAINER*)GetCurItem(); - wxPoint pos = GetScreen()->m_Curseur; - /* add corner between zone_cont->m_CornerSelection - * and zone_cont->m_CornerSelection+1 - * and start move the new corner - */ - zone_cont->Draw(DrawPanel, &dc, wxPoint(0,0), GR_XOR); - zone_cont->m_Poly->InsertCorner( zone_cont->m_CornerSelection, pos.x, pos.y ); - zone_cont->m_CornerSelection++; - zone_cont->Draw(DrawPanel, &dc, wxPoint(0,0), GR_XOR); - Start_Move_Zone_Corner(&dc, zone_cont, zone_cont->m_CornerSelection, true); + ZONE_CONTAINER* zone_cont = (ZONE_CONTAINER*) GetCurItem(); + Start_Move_Zone_Corner( &dc, zone_cont, zone_cont->m_CornerSelection, false ); break; - } + } - case ID_POPUP_PCB_PLACE_ZONE_OUTLINES: - case ID_POPUP_PCB_PLACE_ZONE_CORNER: - { + case ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT: + { DrawPanel->MouseToCursorSchema(); - ZONE_CONTAINER * zone_cont = (ZONE_CONTAINER*)GetCurItem(); - End_Move_Zone_Corner_Or_Outlines(&dc, zone_cont); + ZONE_CONTAINER* zone_cont = (ZONE_CONTAINER*) GetCurItem(); + Start_Move_Zone_Drag_Outline_Edge( &dc, zone_cont, zone_cont->m_CornerSelection ); break; - } - + } + + case ID_POPUP_PCB_MOVE_ZONE_OUTLINES: + { + DrawPanel->MouseToCursorSchema(); + ZONE_CONTAINER* zone_cont = (ZONE_CONTAINER*) GetCurItem(); + Start_Move_Zone_Outlines( &dc, zone_cont ); + break; + } + + case ID_POPUP_PCB_ADD_ZONE_CORNER: + { + DrawPanel->MouseToCursorSchema(); + ZONE_CONTAINER* zone_cont = (ZONE_CONTAINER*) GetCurItem(); + wxPoint pos = GetScreen()->m_Curseur; + + /* add corner between zone_cont->m_CornerSelection + * and zone_cont->m_CornerSelection+1 + * and start move the new corner + */ + zone_cont->Draw( DrawPanel, &dc, wxPoint( 0, 0 ), GR_XOR ); + zone_cont->m_Poly->InsertCorner( zone_cont->m_CornerSelection, pos.x, pos.y ); + zone_cont->m_CornerSelection++; + zone_cont->Draw( DrawPanel, &dc, wxPoint( 0, 0 ), GR_XOR ); + Start_Move_Zone_Corner( &dc, zone_cont, zone_cont->m_CornerSelection, true ); + break; + } + + case ID_POPUP_PCB_PLACE_ZONE_OUTLINES: + case ID_POPUP_PCB_PLACE_ZONE_CORNER: + { + DrawPanel->MouseToCursorSchema(); + ZONE_CONTAINER* zone_cont = (ZONE_CONTAINER*) GetCurItem(); + End_Move_Zone_Corner_Or_Outlines( &dc, zone_cont ); + break; + } + case ID_POPUP_PCB_FILL_ALL_ZONES: DrawPanel->MouseToCursorSchema(); Fill_All_Zones( &dc ); @@ -534,7 +545,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_FILL_ZONE: DrawPanel->MouseToCursorSchema(); - Fill_Zone( &dc, (ZONE_CONTAINER*)GetCurItem() ); + Fill_Zone( &dc, (ZONE_CONTAINER*) GetCurItem() ); break; case ID_PCB_DELETE_ITEM_BUTT: @@ -811,8 +822,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) DrawPanel->MouseToCursorSchema(); if( GetCurItem() && (GetCurItem()->m_Flags & IS_NEW) ) { - if ( End_Zone( &dc ) ) - SetCurItem( NULL ); + if( End_Zone( &dc ) ) + SetCurItem( NULL ); } break; @@ -820,8 +831,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) DrawPanel->MouseToCursorSchema(); if( GetCurItem() && (GetCurItem()->m_Flags & IS_NEW) ) { - if ( Delete_LastCreatedCorner( &dc ) == 0) // No more segment in outline, - SetCurItem(NULL); + if( Delete_LastCreatedCorner( &dc ) == 0 ) // No more segment in outline, + SetCurItem( NULL ); } break; @@ -835,8 +846,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) DisplayTrackSettings(); m_SelTrackWidthBox_Changed = FALSE; m_SelViaSizeBox_Changed = FALSE; - g_DesignSettings.m_UseConnectedTrackWidth = false; - } + g_DesignSettings.m_UseConnectedTrackWidth = false; + } break; case ID_POPUP_PCB_SELECT_WIDTH1: @@ -848,7 +859,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_SELECT_WIDTH7: case ID_POPUP_PCB_SELECT_WIDTH8: DrawPanel->MouseToCursorSchema(); - g_DesignSettings.m_UseConnectedTrackWidth = false; + g_DesignSettings.m_UseConnectedTrackWidth = false; { int ii = id - ID_POPUP_PCB_SELECT_WIDTH1; g_DesignSettings.m_CurrentTrackWidth = g_DesignSettings.m_TrackWidthHistory[ii]; @@ -856,13 +867,13 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) } break; - case ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH: - g_DesignSettings.m_UseConnectedTrackWidth = not g_DesignSettings.m_UseConnectedTrackWidth; - break; - - case ID_POPUP_PCB_SELECT_AUTO_WIDTH: + case ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH: + g_DesignSettings.m_UseConnectedTrackWidth = not g_DesignSettings.m_UseConnectedTrackWidth; + break; + + case ID_POPUP_PCB_SELECT_AUTO_WIDTH: DrawPanel->MouseToCursorSchema(); - g_DesignSettings.m_UseConnectedTrackWidth = true; + g_DesignSettings.m_UseConnectedTrackWidth = true; break; case ID_POPUP_PCB_SELECT_VIASIZE: @@ -1132,15 +1143,15 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer ) GetScreen()->m_Route_Layer_TOP = preslayer; GetScreen()->m_Route_Layer_BOTTOM = layer; GetScreen()->m_Active_Layer = preslayer; - + if( Other_Layer_Route( (TRACK*) GetScreen()->GetCurItem(), DC ) ) { if( DisplayOpt.ContrastModeDisplay ) GetScreen()->SetRefreshReq(); } - + // if the via was allowed by DRC, then the layer swap has already - // been done by Other_Layer_Route(). if via not allowed, then + // been done by Other_Layer_Route(). if via not allowed, then // return now so assignment to m_Active_Layer below doesn't happen. return; } diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index 6dccf22e0c..be7bf9721e 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -50,6 +50,7 @@ #include "Width_Net.xpm" #include "Width_Track_Via.xpm" #include "Select_Layer_Pair.xpm" +#include "Drag_Outline_Segment.xpm" #include "Flag.xpm" @@ -660,7 +661,13 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu /* Create the wxMenuitem list for zone outlines editing and zone filling */ { - if( edge_zone->m_Flags ) + + if( edge_zone->m_Flags == IS_DRAGGED) + { + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_DRAGGED_ZONE_OUTLINE_SEGMENT, + _( "Place Edge Outline" ), apply_xpm ); + } + else if( edge_zone->m_Flags ) { if( (edge_zone->m_Flags & IN_EDIT ) ) ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_CORNER, @@ -686,6 +693,8 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu { ADD_MENUITEM( zones_menu, ID_POPUP_PCB_ADD_ZONE_CORNER, _( "Create Corner" ), Add_Corner_xpm ); + ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT, + _( "Drag Outline Segment" ), drag_outline_segment_xpm ); } zones_menu->AppendSeparator(); diff --git a/pcbnew/router.cpp b/pcbnew/router.cpp index f370026b49..4f26a68e91 100644 --- a/pcbnew/router.cpp +++ b/pcbnew/router.cpp @@ -14,13 +14,13 @@ #include "protos.h" -#define ROUTER - #define PSCALE 1 /* routines internes */ +#ifdef ROUTER static void Out_Pads( BOARD* Pcb, FILE* outfile ); static int GenEdges( BOARD* Pcb, FILE* outfile ); +#endif static void GenExistantTracks( BOARD* Pcb, FILE* outfile, int current_net_code, int type ); static void ReturnNbViasAndTracks( BOARD* Pcb, int netcode, int* nb_vias, int* nb_tracks ); @@ -143,7 +143,7 @@ void WinEDA_PcbFrame::GlobalRoute( wxDC* DC ) /************************************************/ -static void Out_Pads( BOARD* Pcb, FILE* outfile ) +void Out_Pads( BOARD* Pcb, FILE* outfile ) /************************************************/ { D_PAD* pt_pad; @@ -314,7 +314,7 @@ static void Out_Pads( BOARD* Pcb, FILE* outfile ) /**************************************************************************/ -static void ReturnNbViasAndTracks( BOARD* Pcb, int netcode, int* nb_vias, +void ReturnNbViasAndTracks( BOARD* Pcb, int netcode, int* nb_vias, int* nb_tracks ) /**************************************************************************/ @@ -345,7 +345,7 @@ static void ReturnNbViasAndTracks( BOARD* Pcb, int netcode, int* nb_vias, /*************************************************************/ -static void GenExistantTracks( BOARD* Pcb, FILE* outfile, +void GenExistantTracks( BOARD* Pcb, FILE* outfile, int current_net_code, int type ) /*************************************************************/ /* generation des pistes existantes */ @@ -429,7 +429,7 @@ static void GenExistantTracks( BOARD* Pcb, FILE* outfile, /***********************************************/ -static int GenEdges( BOARD* Pcb, FILE* outfile ) +int GenEdges( BOARD* Pcb, FILE* outfile ) /***********************************************/ /* Generation des contours (edges). diff --git a/pcbnew/zones_by_polygon.cpp b/pcbnew/zones_by_polygon.cpp index 61865b6a43..5cbee326f7 100644 --- a/pcbnew/zones_by_polygon.cpp +++ b/pcbnew/zones_by_polygon.cpp @@ -37,7 +37,7 @@ bool verbose = false; // false if zone outline diags mst not be shown // Outline creation: static void Abort_Zone_Create_Outline( WinEDA_DrawPanel* Panel, wxDC* DC ); -static void Show_New_Zone_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); +static void Show_New_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); // Corner moving static void Abort_Zone_Move_Corner_Or_Outlines( WinEDA_DrawPanel* Panel, wxDC* DC ); @@ -175,8 +175,8 @@ int WinEDA_PcbFrame::Delete_LastCreatedCorner( wxDC* DC ) if( zone->GetNumCorners() > 2 ) { zone->m_Poly->DeleteCorner( zone->GetNumCorners() - 1 ); - if ( DrawPanel->ManageCurseur ) - DrawPanel->ManageCurseur(DrawPanel, DC, false); + if( DrawPanel->ManageCurseur ) + DrawPanel->ManageCurseur( DrawPanel, DC, false ); } else { @@ -184,7 +184,7 @@ int WinEDA_PcbFrame::Delete_LastCreatedCorner( wxDC* DC ) DrawPanel->ForceCloseManageCurseur = NULL; SetCurItem( NULL ); zone->RemoveAllContours(); - zone->m_Flags = 0; + zone->m_Flags = 0; } return zone->GetNumCorners(); } @@ -241,14 +241,34 @@ void WinEDA_PcbFrame::Start_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_con zone_container->m_Flags = IN_EDIT; DrawPanel->ManageCurseur = Show_Zone_Corner_Or_Outline_While_Move_Mouse; DrawPanel->ForceCloseManageCurseur = Abort_Zone_Move_Corner_Or_Outlines; - s_CornerInitialPosition.x = zone_container->m_Poly->GetX( corner_id ); - s_CornerInitialPosition.y = zone_container->m_Poly->GetY( corner_id ); + s_CornerInitialPosition = zone_container->GetCornerPosition( corner_id ); s_CornerIsNew = IsNewCorner; s_AddCutoutToCurrentZone = false; s_CurrentZone = NULL; } +/**************************************************************************************/ +void WinEDA_PcbFrame::Start_Move_Zone_Drag_Outline_Edge( wxDC* DC, + ZONE_CONTAINER* zone_container, + int corner_id ) +/**************************************************************************************/ + +/** + * Function Start_Move_Zone_Corner + * Prepares a drag edge for an existing zone outline, + */ +{ + zone_container->m_Flags = IS_DRAGGED; + zone_container->m_CornerSelection = corner_id; + DrawPanel->ManageCurseur = Show_Zone_Corner_Or_Outline_While_Move_Mouse; + DrawPanel->ForceCloseManageCurseur = Abort_Zone_Move_Corner_Or_Outlines; + s_CursorLastPosition = s_CornerInitialPosition = GetScreen()->m_Curseur; + s_AddCutoutToCurrentZone = false; + s_CurrentZone = NULL; +} + + /*******************************************************************************************************/ void WinEDA_PcbFrame::Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container ) /*******************************************************************************************************/ @@ -380,6 +400,12 @@ void Abort_Zone_Move_Corner_Or_Outlines( WinEDA_DrawPanel* Panel, wxDC* DC ) offset = s_CornerInitialPosition - s_CursorLastPosition; zone_container->Move( offset ); } + else if( zone_container->m_Flags == IS_DRAGGED ) + { + wxPoint offset; + offset = s_CornerInitialPosition - s_CursorLastPosition; + zone_container->MoveEdge( offset ); + } else { if( s_CornerIsNew ) @@ -411,26 +437,32 @@ void Show_Zone_Corner_Or_Outline_While_Move_Mouse( WinEDA_DrawPanel* Panel, wxDC */ { WinEDA_PcbFrame* pcbframe = (WinEDA_PcbFrame*) Panel->m_Parent; - ZONE_CONTAINER* zone_container = (ZONE_CONTAINER*) pcbframe->GetCurItem(); + ZONE_CONTAINER* zone = (ZONE_CONTAINER*) pcbframe->GetCurItem(); if( erase ) /* Undraw edge in old position*/ { - zone_container->Draw( Panel, DC, wxPoint(0,0), GR_XOR ); + zone->Draw( Panel, DC, wxPoint( 0, 0 ), GR_XOR ); } wxPoint pos = pcbframe->GetScreen()->m_Curseur; - if( zone_container->m_Flags == IS_MOVED ) + if( zone->m_Flags == IS_MOVED ) { wxPoint offset; - offset.x = pos.x - s_CursorLastPosition.x; - offset.y = pos.y - s_CursorLastPosition.y; - zone_container->Move( offset ); + offset = pos - s_CursorLastPosition; + zone->Move( offset ); + s_CursorLastPosition = pos; + } + else if( zone->m_Flags == IS_DRAGGED ) + { + wxPoint offset; + offset = pos - s_CursorLastPosition; + zone->MoveEdge( offset ); s_CursorLastPosition = pos; } else - zone_container->m_Poly->MoveCorner( zone_container->m_CornerSelection, pos.x, pos.y ); + zone->m_Poly->MoveCorner( zone->m_CornerSelection, pos.x, pos.y ); - zone_container->Draw( Panel, DC, wxPoint(0,0), GR_XOR ); + zone->Draw( Panel, DC, wxPoint( 0, 0 ), GR_XOR ); } @@ -531,7 +563,7 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) } SetCurItem( zone ); - DrawPanel->ManageCurseur = Show_New_Zone_Edge_While_Move_Mouse; + DrawPanel->ManageCurseur = Show_New_Edge_While_Move_Mouse; DrawPanel->ForceCloseManageCurseur = Abort_Zone_Create_Outline; } // edge in progress: @@ -539,14 +571,14 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) { ii = zone->GetNumCorners() - 1; - /* edge in progress : the current corner coordinate was set by Show_New_Zone_Edge_While_Move_Mouse */ + /* edge in progress : the current corner coordinate was set by Show_New_Edge_While_Move_Mouse */ if( zone->GetCornerPosition( ii - 1 ) != zone->GetCornerPosition( ii ) ) { if( Drc_On && m_drc->Drc( zone, ii - 1 ) == OK_DRC ) // Ok, we can add a new corner - { + { zone->AppendCorner( GetScreen()->m_Curseur ); - SetCurItem( zone ); // calls Display_Infos(). - } + SetCurItem( zone ); // calls Display_Infos(). + } } } @@ -592,7 +624,7 @@ bool WinEDA_PcbFrame::End_Zone( wxDC* DC ) zone->m_Flags = 0; - zone->DrawWhileCreateOutline( DrawPanel, DC, GR_XOR ); + zone->DrawWhileCreateOutline( DrawPanel, DC, GR_XOR ); DrawPanel->ManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL; @@ -646,7 +678,7 @@ bool WinEDA_PcbFrame::End_Zone( wxDC* DC ) /******************************************************************************************/ -static void Show_New_Zone_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) +static void Show_New_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) /******************************************************************************************/ /* Redraws the edge zone when moving mouse @@ -663,7 +695,7 @@ static void Show_New_Zone_Edge_While_Move_Mouse( WinEDA_DrawPanel* panel, wxDC* if( erase ) /* Undraw edge in old position*/ { - zone->DrawWhileCreateOutline( panel, DC ); + zone->DrawWhileCreateOutline( panel, DC ); } /* Redraw the curent edge in its new position */ diff --git a/version.txt b/version.txt index 354613fda8..2423836f10 100644 --- a/version.txt +++ b/version.txt @@ -1,4 +1,4 @@ release version: -19 nov 2007 +01 feb 2008 files (.zip,.tgz): -kicad-2007-11-19 +kicad-2007-02-01