From 44c0105709fb7ae7b1629efcd65051074518f246 Mon Sep 17 00:00:00 2001 From: CHARRAS Date: Mon, 28 Jan 2008 18:44:14 +0000 Subject: [PATCH] some enhancements. See changelog --- {pcbnew/bitmaps => bitmaps}/Add_Tracks.xpm | 76 +- bitmaps/Auto_track_width.xpm | 39 + {pcbnew/bitmaps => bitmaps}/Width_Segment.xpm | 7 +- change_log.txt | 67 +- contrib_makefiles.txt | 309 --- cvpcb/CMakeLists.txt | 2 +- eeschema/CMakeLists.txt | 2 +- gerbview/CMakeLists.txt | 2 +- include/bitmaps.h | 3 + include/id.h | 11 +- include/pcbstruct.h | 88 +- internat/fr/kicad.mo | Bin 140918 -> 141209 bytes internat/fr/kicad.po | 2104 ++++++++--------- kicad/CMakeLists.txt | 2 +- nsis_win_installer/install.nsi | 6 +- pcbnew/CMakeLists.txt | 2 +- pcbnew/class_pad.h | 65 +- pcbnew/classpcb.cpp | 17 +- pcbnew/dialog_track_options.cpp | 4 +- pcbnew/edit.cpp | 17 +- pcbnew/editrack.cpp | 92 +- pcbnew/modedit_onclick.cpp | 1 - pcbnew/onrightclick.cpp | 112 +- pcbnew/pcbframe.cpp | 3 + pcbnew/pcbnew.h | 2 - pcbnew/tool_pcb.cpp | 56 +- pcbnew/via_edit.cpp | 8 +- pcbnew/zone_filling_algorithm.cpp | 38 +- pcbnew/zones.cpp | 878 ------- pcbnew/zones.h | 126 - pcbnew/zones.pjd | 893 ------- pcbnew/zones.rc | 1 - 32 files changed, 1465 insertions(+), 3568 deletions(-) rename {pcbnew/bitmaps => bitmaps}/Add_Tracks.xpm (80%) create mode 100644 bitmaps/Auto_track_width.xpm rename {pcbnew/bitmaps => bitmaps}/Width_Segment.xpm (78%) delete mode 100644 contrib_makefiles.txt delete mode 100644 pcbnew/zones.cpp delete mode 100644 pcbnew/zones.h delete mode 100644 pcbnew/zones.pjd delete mode 100644 pcbnew/zones.rc diff --git a/pcbnew/bitmaps/Add_Tracks.xpm b/bitmaps/Add_Tracks.xpm similarity index 80% rename from pcbnew/bitmaps/Add_Tracks.xpm rename to bitmaps/Add_Tracks.xpm index 0863bcf7bc..05b273f8af 100644 --- a/pcbnew/bitmaps/Add_Tracks.xpm +++ b/bitmaps/Add_Tracks.xpm @@ -1,35 +1,41 @@ -/* XPM */ -static const char * add_tracks_xpm[] = { -"16 16 16 1", -" c None", -". c #007D00", -"+ c #006100", -"@ c #004400", -"# c #007800", -"$ c #007B00", -"% c #004000", -"& c #007C00", -"* c #006500", -"= c #007A00", -"- c #004600", -"; c #D72E2E", -"> c #A32222", -", c #C22929", -"' c #D22D2D", -") c #6D1717", -" ", -"........ ", -"........+ ", -" @.# ", -" $.% ", -" &.* ", -" .= ", -" $.- ", -" ;;; ........", -" ;;;;; .......", -";;> >;, ", -";; ;' ", -";;> ;;, ", -" ;;;;;) ", -" ,',) ", -" "}; +/* XPM */ +#ifndef XPMMAIN +extern const char *add_tracks_xpm[]; + +#else +const char * add_tracks_xpm[] = { +"16 16 16 1", +" c None", +". c #007D00", +"+ c #006100", +"@ c #004400", +"# c #007800", +"$ c #007B00", +"% c #004000", +"& c #007C00", +"* c #006500", +"= c #007A00", +"- c #004600", +"; c #D72E2E", +"> c #A32222", +", c #C22929", +"' c #D22D2D", +") c #6D1717", +" ", +"........ ", +"........+ ", +" @.# ", +" $.% ", +" &.* ", +" .= ", +" $.- ", +" ;;; ........", +" ;;;;; .......", +";;> >;, ", +";; ;' ", +";;> ;;, ", +" ;;;;;) ", +" ,',) ", +" "}; + +#endif diff --git a/bitmaps/Auto_track_width.xpm b/bitmaps/Auto_track_width.xpm new file mode 100644 index 0000000000..31c89d6be0 --- /dev/null +++ b/bitmaps/Auto_track_width.xpm @@ -0,0 +1,39 @@ +/* XPM */ +#ifndef XPMMAIN +extern const char *auto_track_width_xpm[]; + +#else +const char * auto_track_width_xpm[] = { +"16 16 14 1", +" c None", +", c #008080", +". c #00E000", +"+ c #006100", +"@ c #004400", +"# c #007800", +"$ c #007B00", +"% c #004000", +"& c #007C00", +"* c #006500", +"= c #007A00", +"- c #004600", +"x c #FF2D2D", +"o c #0000FF", +" ", +"........+ ", +".........+ ", +" @..# ", +" $.% o o ", +" &..* o ", +" xxxx..= o ", +" x xxx..- o ", +" x x ........", +" x x .......", +"x x , o ", +"x x ,, o ", +"x x,,,,,,,,,,o ", +"x x ,, o ", +"x x , o o ", +"x x "}; + +#endif diff --git a/pcbnew/bitmaps/Width_Segment.xpm b/bitmaps/Width_Segment.xpm similarity index 78% rename from pcbnew/bitmaps/Width_Segment.xpm rename to bitmaps/Width_Segment.xpm index d9a7e396af..e351af0007 100644 --- a/pcbnew/bitmaps/Width_Segment.xpm +++ b/bitmaps/Width_Segment.xpm @@ -1,5 +1,9 @@ /* XPM */ -static const char * width_segment_xpm[] = { +#ifndef XPMMAIN +extern const char *width_segment_xpm[]; + +#else +const char * width_segment_xpm[] = { "16 16 3 1", " c None", "! c black", @@ -20,3 +24,4 @@ static const char * width_segment_xpm[] = { " ! ", " ! ", " "}; +#endif diff --git a/change_log.txt b/change_log.txt index b23c182594..451ac85baa 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,60 +1,3 @@ -Can somebody please come to my rescue on this one: - -This was posted to the developer's list. It would be nice to get an -apology or at least a link to the posting from which he launches such an attack: - - - - -Dick, enough of this whining. The article on gnu.org is more than an opinion -piece - unless -you really don't know what/who gnu.org is. While I and others here do appreciate -contributions made by all involved, your contributions do not entitle you to the -rest of the -code base. The GPL license is not revocable. You can take your lines of the -code (and only -just what you wrote) and do what you want, but you can't take Jean Pierre's -code, even if -you have modified it, without violating the GPL. - -I'm hereby asking Jean Pierre if he could please make it clear to this list if -he has ANY -intent of turning this package away from GPL for Dick or anyone else. I think -all involved -should know here and now if this is going to remain an open GPL project or not. -I don't -think anyone else here is interested in seeing kicad become a proprietary -package. - -If Dick thinks he can just take the entire code base as his, I'm sure that FSF -would help -with the legal costs of stopping him. (To donate to FSF see -http://www.fsf.org/associate/support_freedom/donate ) - -FSF has stepped up to the plate before and stopped people from appropriating GPL -software -for their own ends. The cost of IP litigation is not cheap, so I would recommend -Dick to -talk to an IP attorney before doing something stupid. - - ----------------------------------------------------------------- -Karl Schmidt EMail Karl@... -Transtronics, Inc. WEB http://xtronics.com -3209 West 9th Street Ph (785) 841-3089 -Lawrence, KS 66049 FAX (785) 841-0434 - -A clear conscience is usually the sign of a bad memory. - ----------------------------------------------------------------- - - - - - - - - Change Log for Kicad @@ -63,6 +6,16 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2008-Jan-28 UPDATE Jean-Pierre Charras +================================================================================ ++pcbnew: + - Better criteria to find starting poind in zone filling: the filling alg. uses + pads, vias and track ends to find where start the filling. + - Added a tool + option in popup menu in track mode (select track width): + when creating a track, if activated: if we starts on an existing track, + the new track takes the width of the existing track + + 2008-Jan-27 UPDATE Dick Hollenbeck ================================================================================ diff --git a/contrib_makefiles.txt b/contrib_makefiles.txt deleted file mode 100644 index d3c945da70..0000000000 --- a/contrib_makefiles.txt +++ /dev/null @@ -1,309 +0,0 @@ -libs.dynamic - -CC = `wx-config --cc` -# Note: at least on Debian using gcc gives a smaller binary than using: -# `wx-config --ld` -LD = gcc - -SRCSUFF = .cpp -OBJSUFF = .o -FINAL = 1 - -WXPATH = `wx-config --prefix`/lib -PREFIX_WX_LIBS = `wx-config --basename` -SUFFIX_WX_LIBGL = _gl-$(LIBVERSION) - -LIBSTDC = -lstdc++ -LIBVERSION=`wx-config --release` -WXSYSLIB= `wx-config --libs` - -# attention à l'ordre des libairies -LIBS = -L/usr/local/lib -L/usr/X11R6/lib\ - $(EXTRALIBS) $(WXSYSLIB)\ - $(LIBSTDC) - -LIBS3D = -l$(PREFIX_WX_LIBS)$(SUFFIX_WX_LIBGL) -lGL -lGLU - -# Sub-projects -KICAD_SUBDIRS = common 3d-viewer eeschema pcbnew cvpcb kicad gerbview wxhtml -# How to invoke make -MAKE := $(MAKE) -f makefile.gtk -# File with the libraries definitions -LIBSDEF = libs.dynamic -# Prefix, can be from command line -ifneq ($(strip $(prefix)),) - IPREFIX=$(prefix) -else - IPREFIX=/usr/local/kicad/linux -endif -# Install tool, can be from command line -ifeq ($(INSTALL),) - INSTALL=install -endif -# C Flags, can be from command line -ifeq ($(CFLAGS),) - CFLAGS=-Wall -O2 - #CFLAGS=-Wall -Werror -g3 -endif -CFLAGS:=$(CFLAGS) `wx-config --cxxflags` -# Linker flags (strip) -LDFLAGS = -s -export - -.PHONY: $(KICAD_SUBDIRS) - -all: $(KICAD_SUBDIRS) - -common: - cd $@ ; $(MAKE) - -3d-viewer: - cd $@ ; $(MAKE) - -eeschema: - cd $@ ; $(MAKE) - -pcbnew: - cd $@ ; $(MAKE) - -cvpcb: - cd $@ ; $(MAKE) - -kicad: - cd $@ ; $(MAKE) - -gerbview: - cd $@ ; $(MAKE) - -wxhtml: - cd $@ ; $(MAKE) - -install: - @for d in $(KICAD_SUBDIRS); do (cd $$d && $(MAKE) install); done - -clean: - @for d in $(KICAD_SUBDIRS); do (cd $$d && $(MAKE) clean); done - -3d-viewer/makefile.gtk -## Makefile for 3d-viewer.a ( wxGTK - LINUX ) - -# Compiler flags. -CPPFLAGS = $(CFLAGS) -DPCBNEW -I../pcbnew -I ../include -I../common - -include ../$(LIBSDEF) - -TARGET = 3d-viewer - -all: $(TARGET).a - -include makefile.include - -$(TARGET).a: $(OBJECTS3D) makefile.gtk makefile.include - rm -f $@ - ar -rv $@ $(OBJECTS3D) - ranlib $@ - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj 2> /dev/null - -# No install target - -## Makefile for common.a - -# Compiler flags. -CPPFLAGS = $(CFLAGS) -I./ -I../include -EDACPPFLAGS = $(CPPFLAGS) - -all: common.a - -include makefile.include - -CPPFLAGS += $(EXTRACPPFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - - -common.a: $(OBJECTS) makefile.gtk makefile.include - rm -f $@ - ar -rv $@ $(OBJECTS) - ranlib $@ - - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj 2> /dev/null - -# No install target - -# File: makefile - -# Compiler flags. -CPPFLAGS = $(CFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - -include ../$(LIBSDEF) - - -TARGET = cvpcb - -all: $(TARGET) - -include makefile.include - -CPPFLAGS += $(EXTRACPPFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - - -$(TARGET): $(OBJECTS) makefile.gtk makefile.include $(EXTRALIBS) ../$(LIBSDEF) $(LIBVIEWER3D) - $(LD) $(OBJECTS) $(LDFLAGS) $(LIBS) $(LIBVIEWER3D) $(LIBS3D) -o $(TARGET) - -install: - $(INSTALL) -d -m 0755 $(IPREFIX) - $(INSTALL) -m 0755 $(TARGET) $(IPREFIX) - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj $(TARGET) 2> /dev/null - -## Makefile for eeschema - -include ../$(LIBSDEF) - -TARGET = eeschema - -CPPFLAGS = $(CFLAGS) - -all: $(TARGET) - -include makefile.include - -CPPFLAGS += $(EXTRACPPFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - -$(TARGET): $(OBJECTS) makefile.gtk makefile.include $(EXTRALIBS) ../$(LIBSDEF) - $(LD) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $(TARGET) - -install: - $(INSTALL) -d -m 0755 $(IPREFIX) - $(INSTALL) -m 0755 $(TARGET) $(IPREFIX) - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj $(TARGET) 2> /dev/null - - -## Makefile for GERBVIEW et wxGTK - -# Compiler flags. -CPPFLAGS = $(CFLAGS) - -EXTRALIBS = ../common/common.a -include ../$(LIBSDEF) - - -TARGET = gerbview - -all: $(TARGET) - -include makefile.include - -CPPFLAGS += $(EXTRACPPFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - - -$(TARGET): $(OBJECTS) makefile.gtk makefile.include $(EXTRALIBS) ../$(LIBSDEF) - $(LD) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(TARGET) - -install: - $(INSTALL) -d -m 0755 $(IPREFIX) - $(INSTALL) -m 0755 $(TARGET) $(IPREFIX) - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj $(TARGET) 2> /dev/null - -# File: makefile for kicad, wxGTK - -# Compiler flags. -CPPFLAGS = $(CFLAGS) - -include ../$(LIBSDEF) - -TARGET = kicad - -all: $(TARGET) - -include makefile.include - -CPPFLAGS += $(EXTRACPPFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - - -$(TARGET): $(OBJECTS) makefile.gtk $(EXTRALIBS) ../$(LIBSDEF) - $(LD) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $(TARGET) - -install: - $(INSTALL) -d -m 0755 $(IPREFIX) - $(INSTALL) -m 0755 $(TARGET) $(IPREFIX) - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj $(TARGET) 2> /dev/null - -## Makefile for PCBNEW et wxGTK - -# Compiler flags. -CPPFLAGS = $(CFLAGS) - -include ../$(LIBSDEF) - -TARGET = pcbnew - -all: $(TARGET) - -include makefile.include - -CPPFLAGS += $(EXTRACPPFLAGS) -EDACPPFLAGS = $(CPPFLAGS) - -$(TARGET): $(OBJECTS) makefile.gtk makefile.include $(LIBVIEWER3D) $(EXTRALIBS) ../$(LIBSDEF) - $(LD) $(LDFLAGS) $(OBJECTS) $(LIBS) $(LIBVIEWER3D) $(LIBS3D)\ - -o $(TARGET) - -install: - $(INSTALL) -d -m 0755 $(IPREFIX) - $(INSTALL) -m 0755 $(TARGET) $(IPREFIX) - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj $(TARGET) 2> /dev/null - -######################################################################## -######################################################################## - -# Compiler flags. -CPPFLAGS = $(CFLAGS) -I./ -I../include -I../common - -EXTRALIBS = - -include ../$(LIBSDEF) - -TARGET = wxhtml - -OBJDIR = -OBJSUFF = o - -.SUFFIXES: .cpp .h .o .cc -.cpp.o : - $(CC) -c $< -o $(<:.cpp=.o) $(CPPFLAGS) - - -DEPEND = - - -OBJECTS = $(TARGET).o helpfrm.o - - -$(TARGET): $(OBJECTS) makefile.gtk ../common/common.a ../$(LIBSDEF) - $(LD) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $(TARGET) - -install: - $(INSTALL) -d -m 0755 $(IPREFIX) - $(INSTALL) -m 0755 $(TARGET) $(IPREFIX) - -clean: - -rm *.o *.a *~ .*~ core *.bak *.exe *.obj $(TARGET) 2> /dev/null - diff --git a/cvpcb/CMakeLists.txt b/cvpcb/CMakeLists.txt index b40b944741..0cd7b5a579 100644 --- a/cvpcb/CMakeLists.txt +++ b/cvpcb/CMakeLists.txt @@ -60,7 +60,7 @@ IF(WIN32) IF(MINGW) # resource compilation for mingw (http://www.cmake.org/Bug/view.php?id=4068) ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cvpcb_rc.o - COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR}} -I ${wxWidgets_ROOT_DIR}/include -i ${CMAKE_CURRENT_SOURCE_DIR}/cvpcb.rc -o ${CMAKE_CURRENT_BINARY_DIR}/cvpcb_rc.o) SET(CVPCB_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/cvpcb_rc.o) diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 01936e4a75..7f36ed846d 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -106,7 +106,7 @@ IF(WIN32) IF(MINGW) # resource compilation for mingw (http://www.cmake.org/Bug/view.php?id=4068) ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/eeschema_rc.o - COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR}} -I ${wxWidgets_ROOT_DIR}/include -i ${CMAKE_CURRENT_SOURCE_DIR}/eeschema.rc -o ${CMAKE_CURRENT_BINARY_DIR}/eeschema_rc.o) SET(EESCHEMA_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/eeschema_rc.o) diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index 9a71fd51b9..9068ed37e4 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -62,7 +62,7 @@ IF(WIN32) IF(MINGW) # resource compilation for mingw (http://www.cmake.org/Bug/view.php?id=4068) ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gerbview_rc.o - COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${wxWidgets_ROOT_DIR}/include -i ${CMAKE_CURRENT_SOURCE_DIR}/gerbview.rc -o ${CMAKE_CURRENT_BINARY_DIR}/gerbview_rc.o) SET(GERBVIEW_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/gerbview_rc.o) diff --git a/include/bitmaps.h b/include/bitmaps.h index 6f9bed252f..cf8515729f 100644 --- a/include/bitmaps.h +++ b/include/bitmaps.h @@ -186,7 +186,10 @@ #include "../bitmaps/transistor.xpm" #include "../bitmaps/kicad_icon_small.xpm" #include "../bitmaps/general_ratsnet.xpm" + #include "../bitmaps/Add_Tracks.xpm" + #include "../bitmaps/Auto_track_width.xpm" #include "../bitmaps/fill_zone.xpm" + #include "../bitmaps/Width_Segment.xpm" // Largeur du toolbar vertical #define VTOOLBAR_WIDTH 26 diff --git a/include/id.h b/include/id.h index 8598519fe2..37c9f72366 100644 --- a/include/id.h +++ b/include/id.h @@ -548,17 +548,17 @@ enum main_id { ID_POPUP_PCB_DELETE_TRACKNET, ID_POPUP_PCB_DELETE_TRACK_MNU, - ID_POPUP_PCB_EDIT_ZONE_PARAMS, - ID_POPUP_PCB_DELETE_ZONE, ID_POPUP_PCB_MOVE_ZONE_CORNER, ID_POPUP_PCB_ADD_ZONE_CORNER, ID_POPUP_PCB_DELETE_ZONE_CORNER, - ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE, + ID_POPUP_PCB_PLACE_ZONE_CORNER, ID_POPUP_PCB_DELETE_ZONE_LAST_CREATED_CORNER, + ID_POPUP_PCB_EDIT_ZONE_PARAMS, + ID_POPUP_PCB_DELETE_ZONE, + ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE, ID_POPUP_PCB_FILL_ALL_ZONES, ID_POPUP_PCB_FILL_ZONE, ID_POPUP_PCB_DELETE_ZONE_CONTAINER, - ID_POPUP_PCB_PLACE_ZONE_CORNER, ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE, ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE, ID_POPUP_PCB_DELETE_ZONE_CUTOUT, @@ -587,6 +587,7 @@ enum main_id { ID_POPUP_PCB_EXPORT_PAD_SETTINGS, ID_POPUP_PCB_SELECT_WIDTH, + ID_POPUP_PCB_SELECT_AUTO_WIDTH, ID_POPUP_PCB_SELECT_WIDTH1, ID_POPUP_PCB_SELECT_WIDTH2, ID_POPUP_PCB_SELECT_WIDTH3, @@ -731,7 +732,7 @@ enum main_id { ID_AUX_TOOLBAR_PCB_VIA_SIZE, ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR, - ID_AUX_TOOLBAR_PCB_UNUSED2, + ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, ID_AUX_TOOLBAR_PCB_UNUSED3, ID_AUX_TOOLBAR_PCB_UNUSED4, ID_AUX_TOOLBAR_PCB_UNUSED5, diff --git a/include/pcbstruct.h b/include/pcbstruct.h index cee09c5069..5ff641196d 100644 --- a/include/pcbstruct.h +++ b/include/pcbstruct.h @@ -79,35 +79,36 @@ /*************************************/ /* constantes de gestion des couches */ /*************************************/ -#define CUIVRE_LAYER (1<DLzH=rBW4e zM%PrTdcjnx;KP=tQuE$SrHbQxEQGIMXtkc=kEL)b zR>WtJ@zSZcN!ZbDw1Yn|Hx_=2&ae~~#_Y&9Kw?d`#-i8}^I-2N?~i%O4~qOvn2Y?V zD8C2oe!aY9Rg+iR1*@;{V?r4O4u`CWiS7;=W^DgUe#jFiUgIr<0uuxbG?YLCr%Z3%g?66u`E36kbMB6t-SFT0mJ8WS6 zeb6}y&I!*8dxjTcZtC?$_p~3nGB-r|t(b@WXmqK^q4lOk`Fynf;>f=k&sU~N*wF^G z;TCi&zQH{BGZw?cQJ(v~q+SWEPI(n{MqSXYya;pQ)#x?79_?pLlutzan-cl-d=dt* z2(9=My2r0Y{(ZFLEojGk&_MS^{tq_7oug#-qM=Q~pzljF^5nBIKG{7&>!1kjv{sY~DydNYJE`r6p z|EH4hL0vo*8)qJ*Qs9p#^*?RTU79Sw7S zNC4jdVkGRSDq5j2I#645CS9VuH|8UMB|4)U(ZKIU+mFZmI3t{kuGEsqFAvwCEA>96 z-RsRH9OxU&+*`~d{~J2sp(y_c{aKK;F|lM=6K&TTZFd%WtIkFz(g9tubEEux%pBH@ zasRKTz(@z99Ssj}jq*Dpe{XmnI@3w$Qa^$Q_5wPQb!gz5!tGdq{2p|i189IpH?sal z{1*jwcpP2IJRhY}EwMDVz@F&d-jC&QHrnBea6Q`LCUgQ@(3yXV&irevf_tz&=G>G@ zHOD4t5)ODhdSCBABb!SR9wBN1h)_jBZ_d8ne zuO!d=|Kp^?0_cOXXv9^}8Pr1uYKMjJ+{j;oMaf@5;rm+Z4MQ1n<{c*fJo^M81W*7RK)!$ed z%YKqfxFzQE{&yl_#h#dXXQKm;!Qwa>J$&=fnZ1Grv=$9~Q#}71o#{_u*4AXkWx^_9 z-LM&^-OIKloXL6U%=)1L48a(gWj^PvHhM(b5T2dIbEI|DNl zL??6}8hBrHr3Ze>`nMr5k^~Qri=&qASn{ zU4gUF`W?d_XaIfDcIoR$xO5}YC7ysr{scOcm(ZE5LOWcGHSsO9qo2?%_y_IhlpRSw zCD5g>g`TNq=t^{s@(YrDI(2yzTo>M!JV=d2_w1o4e>}<;p#!~)2CyEzJ=@Uw2hjol z#?!Fi7s&(~pj*`x4eU%T;Qc>`giF>NU8<`y4^pY2XvCw?LpdHD_(61q=AZ+;h_-(d z?f7GKrM`~x-RMgGiuQ91t(W?eGw1y;M8e2wq7@p1&BHe6;prIpOVOS+TkSh z@XkV4W(gYD8|Yqt816vp|A1+i>@W#UeU;3(Alje|mci=iOxvJ)-vj-<|28y$8S(sC zbcJ3+2Yw&@ska@^!N1UcJAR$4^o3uu{w{Gp3LIzK_W@FF~j z2G(I`GUHz8M6Sgecr&_EkD>LJVr^WD<#7K_)<2s>&To=G(NxEJ;WTt<=b(H0 zJUY-CG?4evGxQ0%#9!d4xDV|=$L`o#bcM=b6--wpVI-ZfEDpv-I0ijT%cJ~VtWN$L zwBuZRk`=3rZcSHosr#X4WH`FSk6|r*1r7LXbgTCv?b5tslMYLwdtD!$K^t`G&PA83 zFFM2i=t^7@`CHMYy$hY`IJEsk=t|8&16qoe@UzGt!Gexo@!O)Dqgm)u zFGd4;EAl(hrT!D`xX|~>`=Js#KvQ&ux?pMSgZ4KR?dKl!eKH%xUJ{UybE)47$`$U=@5Go#7^|j=Rwn%kyJ0(^6=@9_Gf@=*-)pD|``F#X<4>fgf3a zmv9;d4zvKh9xq3QHIaV@U5PE&0C!?dEc{cl)XlL2`ObJYPQpC+AsX=3@cZx>8d$;f z&q)B4&O!1@LohGq|0Vh1QUa@yFN4nXOw5lR&;fg30UU@0aR_GPD0Hi5 zqh~0+o`elQM+e@6uE=juA;*DaNz0%CR!0v{t0?b@4%i=UcM}%IG3X(jiUu$*d;tw? z6&CXTzZ(y>B?YP7Xv2e1ej>^X9!xqehcrypj(iI&LcTLP(8cJ4u0mIEC>q#Abl}Ia z2tI?E`@e!jVG7=g2cKjfuoCD%2hoQAM0vhnlMYLx1J(?iqV?NhZS0Bmdj}fO1hk*& z;an`?{eO;x9j!$hY>WzDqA#Q$&?P>Bp5EfWC5NXux`$mcvju4To6v#M=$1VY`MKyg z&!P2JV&>=n1`>9>6@5h>MfbS$@5w;*un76HumSc!UrcwSOZ+I>@$zsTI>1Mm3%`o; zJ>kLd`0wn0BP!%Ol$_!-!uFVx@^i2*_P~5N3Z3yd^u_WR8qlj~AU~kjF2~_yi}Is^ zmydj1EJ6NE^u2TbVb;GSi9u0eG`b~|(Q8uZNU{P=(R!V+I9`UOa45FHao7acV>A2% zePh=9BWd3WJsW+{`qyB4T#zQ=OuolcFz3-^rg_8S=t@*T?|Bt;scWG#Ylf~&C$wHq zEQY-ze=T|zZixKt=oXJgwL<8uB zF8$?bpx2@+HUvEb_o4w$KnH#l=|7!XM8b&wmlUKnpaFdv?g!ibZiBI`A=crn&w~e%cj5 z^R2^Fq z@Ek0Iy`y{xI)RaBzZ21VPoi7A1k)y#lW-<)piA{G+VM8D!8h^zCv@+Q#PgiTla7j@ z1C>PwsvY^W@Ko|Wu@+v3-l}Qw{I%n(zXN= z27ZlRyHo#7_PRUTUvG3`1JQ|HANdjS{I1AP{Fn82#?#`#JT&6x(L?kuy3`xd71@Dy z_$@l)1L!~}(1G)wNCGK|23!H{=W?u!SL10o4&ACnX%b$Gwc%#;bbf>W#&ZZOW2sbD zW(k|2`OCw*(LkOIm!Tc6Lj&KAt?)Z6jg_;qG81Ty9?JCDB;2zu=-&221GoX*iZt5M z9Q2wlMmu^vo_`V^Lrr$fS-F#ZLG-;+8q>asYLhUs_UOP} z!=C7X7o#({5#5U6=%Kq0U6EPnKu@D9wKU3Cp#g3{>wkvct{>2Tv+`u6GaZ-7la=`? zSOM**H5ze8^eps5I~a-{vNSs5S?GX^(E7{K0N0=cZAE`b{Sp?-n*`Jh%TwMlZ#pY= zCW$L3u;LTwDSZ=NiM{B|e~kP=bf7=bnP=t8%KX?aj0RF1oj@h5hqcf^dZYD+p=V+= zT5nvMgfn>vt@tE*>Q`b7+>Flr4|LD-O|e2rV5g%qJOka^v(bUNqo@87?1+QW0bjs! z_%_<_H<;V|zn_E+enlfZf$mL_!pYKBK?7@zP4PnXR@{#U@C>>_&!K1NWpqLt(f;=yP4FAoQYH=_ZJ zMt{q`7qjucV%&fCdJzS#z%q2k>(Lo+L6`6w^p$!LUGhKCnfw#wIg2NO7edR+paWJy zSGZb~H;eK!(f-<}NqA_^MXy<(sBi!m?qNuuj+n?fA^dcMQ9S7svAfiRsj!C>R#r9;Udfq*+1x6%TY3^R}gb~|4$|1UROptIvwqx71qUe z=%E>czUhXeTQLa@WP0SEMhAES-TPM~zZ>1KMsg+V6HO>HW`HDrtBs`l6_c9>Uh) zIZ@shJ&eP`G}b0R1znlf&_nzw+I}Az&{6cdW|dA>;#4${N|^c2|7w!($7WMB@^jFY z=!q`zWl?@5x|D;_4u+shej7T_Sad}uqy0UJ_Ol#axwY|pJNlm4Uz+=G#e8LwH(n*Q zK|}P%?3w6~<1T2&*P&ZA3cW28urba--IqMe?1RmFkLx(E$6P^{+u+#W$k;-HWc+ z^vKUklW^%?3SUP9dIvpp+t2~GhkMa2I)K(Yj2^C2$|WmM0IgpU?YCCg7(F{@q5++U zwohM4!gu;`bP4BUX3xU4=uAFDm+TX?<1f)Y{0_4*SNUXs8tC)pXkcff?Yc(!1$YMe z%aEUj>C`L|M)Wc|(0j>))Mj)mevIe;qDxn@Lb8-q(4}r1o{jEx53GwBEc89#|$!)MT$zlNTX z_2?PcfUeMX%6X;iHFnir!)53|t0KPv9q<#hgPl>n4;|o8l;^0NJTHiDS!winohWaG_S*ps z=zMhCft9)cF4Zs!{Eg&ZbgAZ{r+gtg@N?+W{tvwstI?UfiFWh>I^g#32lTZ6f!52N zo%B-#t#>Ngu2yzBiKsaRM%V=npcgveCFr3Xh(How-iS856J3di(7+zW%t~QqrQ-Q>XuJPK{_V(b zLIe654g7a>%hUgoaDaTLC6QJ@Z^P;6fF00^-O&L1#`A0A`Dk>8_hAm4h2DzCq8a+~pP~!U zm0X3Mg>C2-e~b3>8`kybf1YYtnKxJyH1b~PkIQS(4(>(=d=zcC03G19@MCO6{s;8* zSE-(CQ8P54Hs}_0M7OLP*1?`W_x_I};mpUNFPdrSiY!C7U^Tjg8_)p1Kxgzbx-!S{ zRxDN{8R&kr{baQMY_$Iu(E4l8t=fv|Y!aW5Fw&#wb@?~UQ#1LqUQx6`OLS$ zgbs8oX5(1&^goRbv>L17C+JEZ#d=t*Rx;7EYQ_D(i~^T#C_3YN!v~{$X1D}h`ZefQ ze2NbE6Z-Q$XYC|k6@7jtTK_`y)?9~9a5#DvM%Cv2JM;S~aETs5mwImGUq)y67TUoU z^swzf_w+k-raz(mr0OIS$%E$0qu22?bnhFX12>Q79nvI>s2loby9gbqPgEFyuE@1$ z!<*0!?~3vVqkJYB$O1ILl~Mk7xCK2kJJG{@0IiokM#2Dc)lCK}j1E*5U6JaMZ;lS! z0qx*IbVmK7{7SU`aCBwvMOR<~I?xn!C1*!|F)~g%^}i&MS|4r>zY6!G9sCjIsF&mm zhvm?KYM_BPLRauC^ta;9*cq=x16+)rwN;qM`@e~V5r2jrmaotO51}h_0$tj?rzfYm zBKo{NI&cqkz)R5j1JN^dJv!iBk$(sca6Y<{OD*^QuO{J7zmL%~Z~$G}-_iHMQFNe^ z^^-lUj9$YAXuB@x8My|Xz%aDkeQ2Ny(DuvFz*eEx@gvOq{{I6BBRY)k*(nW@8RbXw z#nBZw6+J}t9L9K?#z>UMR(DH8RU$yj#@?lYaCwd6ShtnH!|1Fpw1EzL3VF6Pk^-e=1GF6?h)q`&ZGKzm5*P z4n3UjM}9Nfa67tUd!qbcl>dnyx*Uy@0ZU*5^0m=^EivH`Dy)kK z8_+%8hz9T(R>Q;Sz^67(0;+}%)CwJ-GrE%9(Us{R`RmXb-+}(vo`&B4S1|1Wn@D&# zenw~XJKAwpi)6sUXh5f;^{PgBZFEVSqBClbz6raa0rd~AD0PN0ESXr0WwKDw7}(UlsA{!AEwXW@fb6+gtxHN{5c^PZ9XA-6SJ zKYeK=Zbk!`gf8tP=vF*~4zxVVKScxi9(`~8iJplfXC_NqDy)pIVC~2^3eSl0PKoJM z_bBKc75YbhP&fcMEZ?DlWu295QDJl|>Y}&eEObTBLszU%JiiW| z$Y`wY{ePH*9lnb0)mC)Le@5?V;kL;@wa|{5p)Zy$X#FcAeCS2r;|k94oQRJ=$=5fUoYUm7`p{KSJ+EFj`P+cAlN9&D42bh5dxDZ{j*Ub&*;E^pdIGwk_1==eZ|&6?{jnX44i>( zVLS9%cMZ=E`-WF!U#M%+aW?w1p%FThPGNVnUT?JH!Dt{O!-?n_cpN>%i_i(a82MMx z0M}vK!|?$LU!^~wOPTAOq(OdcMZOqXelGe~F6W~I+!D|4L4Vk+3U{LQa&$|qj!vX2 zx`qAFtsB~n`|sY5qQD=s^U+8bqBD9PZLk_W-J8*dU!&J?KiYAQbCUo|qgzuRtycwI zq0`Yb)COI-^TGk=a{nFRW(qu=<1n*yXa|eJ<>6ZNRsA8_(GO_Hf1v~AJ1+^~RP=e} zuyNQ4onT+Ag9Fkex|5iM=iqkq7M#{Sxwq}my}um2R@b6|-iHo62MzQ&bcJ3;_x7D| zGdkc7bj5a|TX_s!sr0`jY>=}@a##wZ9hN~WR7Fp1?XW32P+N4Rx}#flDY}w3pzZI% zY@CP&x&(c{ycYRQNMPyI*CbrJZ^Ogr40HBO%FBgy&_mi9U6H=%z*nFH4o6S>UFd-K zp)-91v+!|rW#^z<^Ezh!{ohR_9B>!bz&|2i@%-e6OcQkJx?y9y3Jqi?X5%Z^5lpcS z&^_*juFPfORpAZcE#aNvSWMgCfhd?B&JGu#9X}WOm%~-z`tXDBlkkgh58D36@VD^K z@Wh4Oe=Fp^D5+Q|EQy(W99BUOTTOHYnqn<%i~b%k7+s+>y3`M&E4l=|uJ53Gz8gKf zhtZYJ(Tn@;keR;nKk!}_=p zZ^6IOcEc`Cwr&x6>z+@OFn|^4X?`dC42}4Q@GrDMp+3nb7 z`JZTDx%wvk6hODAJTk#_swoL0>Vh`x8Tnp#I{AL+HJXI(={od>%a`%|U-Zpb?~>$9 zoQFQY6`k0lXaFyS%h8#?hS~o9zn+ALXD=GS5p?PQLbs&QrAfXL`XXtBcGv`6fmTu8 zHS*o!`6cLz4nW@vSE29xS?G$b$IPGqH%GxXbcVap7t(Pwkm8pmhp;+k1`b=HE7ulX z`YvG)^wjsp%$qUF??Puj4h?)Vrk(j55+0_d;mUA5T5%)V(U)ikKcIp9injYBl_mY{*Z){pz|^?H*6XRsN~e}>-kZ_zC{h#taJ|Kxd5bSW#L zD|HUKQUlP#bu+pG51?DH2<_)NwEs8IiGR?a`|r%YqQJ=Zp@-%u+Ht|l6Hh|}YKhkG zfUZDKbim$dyP@G&bY&hz`+W+n{}LL=tLOyYOOr67L+FxZ4MCeMbUg2ypyG= zioR0kUY!K|8amJh^sMYeXMPynvZB`{?Q3Iw^3BlSrmsc=dlJhrerg4YY}|r&^n2v< zUYkT(8(reYXvb$pzIQwy5aol>6&n-JC&u&X=rx>!9>T@(d>N*l`D;;O9lB>9MTOni zjr>oTjm-yTrN&_&bP2ygSLi!*Wqyl%fx*dEl|cutfNpVZ^w70H|J>1eF!#R^iK{4Z zhL524axU87C3Hq>(HF=DbfE9h(|iK0m;butP?bf0Y@dw|JODj2H=;8ij-IjG(R%k^ zmrj=S848^FTC~Hh=xx{?ev1b91KRO#Xh;8|dt3PWrI!YSeO zbR=elv%|UJf^bpz9NO`+$iEz}2v>z`!u8?1;Rk5@P3RV;w?x4g;n(4=aBuj1xF4PQ z&*+=%IJ#nmZb-JIJi1af(B}=&`t8sGFF?2SQlwrwbtMT8#f?$nPPD-|^p!dT-Rs5Z z>3;=%*MEf8+lAHeSM)HJx-n^21s$k4`kpuo4dC){5SH@(-$cTQ??VHbir$L3=m5{4 z9j!nIUV|Q{E$CVJ9IgK?x)ML3?T(@EgM34h_SMl9IUODEEX@4(e|06{%q|G8M-R=| z@P0J%2hbPC46KLGNBItPh4!F<{t_NRZ___$phbozhr9wBKts&@`#-HoSg`{-liuj{ z=!b5>o$-7s8o*O%K&#M>-a?oDBXs6F(0cpPYnwGJDX)xfMFVuDdk*9N+u(8vynaK` zCB7G3%16+F7DWDeG|*M(z#GwlK0^aPfOdQYU6GtOC4m(|`zeq1TMd2Q_$KbZd)bBp z1L%Mb&(Jl%hM)rui}E|rmAMOTH!XZ7p07gNtqIqmTeBX0A$@>e!_8?D4)_T= z;J0X``y&5acm(a>Smd*YC-rlo<@wN+D2DzFsg3s277e^BTJOThUmDNTSCcT3A!x)m zp?i5Vx;1xWYkUa(>GeK3&?z@3f9F#kUCOrT(so1p>x)k4GIZbp=*$P9%zSGpnE+S4fJ+&EAB@R@9ZdFg{PDM06klOMtOk| zj>G*gPr{B`q4%{bI+Lr>fp11vWE?v4spwCyXVHP*iRYi9r+qg%(2214tw~_ju?pp_ z(0(t&%zyqr!~_NRpfi{r`9)}8tI&bpNB43!`isX;=!)gIEg8538h9hLU0bx@9_ala zh_1v?G=MpnK9|H&68aa~u=DN7%zC2@uE9)TXorj9`6~2Rst>RReuv)gf+LgPZtI~h zsy^X3Jd6BGSRa2K$^G}VR=y)y;%4X)w!=C&03CP|`g8wDtd1+umDq`{#6C3e6Ok`G zD*oaToj_N#-`mic&p_KhGm86f;zbHvqE+Z#Z$M|ZHOdcQZSsF(U95g*GUE%-LplldbBMCgI**gx=R1&;}#W4kw@kJcJ&$N6-~phz|5R z+I}56k?rUf?Lp7R5%e17zAG6xKYDx0pyQ=0lW=Kkp=Y2yx`z*;9W2FxxE8(tRqjqs z|7GaFBhi7Uq8&bt2DTvb&!Pdnga-b0_yw{R>C~?z>>vkQaTgXuJD!B@?NjJhyoUai z+=l1jFKD~g_ayZ?qNo3|@H+HN+>WlmeQ5nj=oZhwqTc^`nFJA{1FlCS-hpn#&*&R2 zH71!^0d#AMqGzErTEBff?~Mj>DLRqCXdw5XXJQK4-_uxt@l(r47}@J+#dmyw+oF6I zdT4$`J3fkbkn7&0UQsmA3h3=<808nEr~OK7iX+giS&W{6rI`8m|5uQ3;PvPs+ky_T z8y)!P$R9)ZIOo`8r3#?|RYO;xG1^b3uot@YSD`CA2yK5i8o>Qyx&IC@g@T$mCmy_w zp8AcE-x~QZ(T?^+`7!kHW{t~AWn+0XfHTphJ{LW7SD-6&8yfH=G~h?aafl4yxp=S= zUHW&!PojJ$x|ctrw<72GB;Zo$i=_?P;bmxmL(!ESA3lO^%|h&oAENz~Oy8Fzs)xN|G+#i9B zaV8q@`@BbkY(-b-5IR7?Dan8p(C0PK z=bh0&2cRo92tAY!qbvFJ6z;!!w1xs__)%2&BJ#hW9sPyAYD-K_0&0udFiC)8x(X;XcTJIRzU#W+a3D$p@`|nJQjaB`!8CS)uCaKuxhT z_CS~V5%iYKMf=%@HL%k3tWOy{!;k>x@6Br{zbImN9al& zLYFefBgxF_q0i4kx8iDaLL<=n)6xE(LhCKT%*tRr^64K)cxXz_Ob%grbjcc_d)@(k z-UHpD-sqvc5p3wMI-(@^7$W4 z0yz!qP~H?*;Q(|-66e2%*3j=0Big6e*+1Z!Un#UKYL?&$pr-?+JfL-*`EmNZOY{1FaGHrdXeR2ejXt(e`7}defhX`#+xo zuhon3;De~R9Sv+BdYz7X677E?=EBFKd@gz@Ura~h z4eUt4dzcRk%}=gP8T6fB3H>2c6@A_Z4P+oT#oMqwK8Mcq09r5iQ^^mvqUcJsL|5QE z^f0EcB9TpEbQC;+&R_-JiyN>Zc3Y5Kr#sPxGtpltmZ7KnBXmW6M1P#udOCR{c1O?H zOf-Pk&=vUzyLtb=P7q74?IEAcA2ly5}&dbHjr=#2NG^?pHr zs{W4lm-m_E&=o|Vm&44T|0|R5khMWy5a*#k#V$dAp|}IR4fmpFU`F_Ql0a~ zDlbadI0>X2`n+D)3Y~dp zwEpn$&Uii^-GXW8X@54Jzk>cuS+kh?@4NUN3Oq#n(R}VD$?2|xmbXP`+7DfUVd#Kq zbcrXTfz3bzo{y*F|Dt>^+WuEGpi`bp0y_1%bh1R%DR8OkqaC(Dx1>G#rn&;1!BBLd zQD`9dM}8LC{%Lf87tj~lTj&J7M*I5<{k@{>^T|J!-#1Ody`6v#{1_Vf)8QxRy-vN5 zH0XdAlf4Cd;|F*VW-m?t7HtH&_bbsAS{HtR?)|oSzBkI#Kap@|N6=jq+#k%mQ5q0{=_$bMe*>+z34Jf@ zMpxu0dZzNGUrSD79W>HT=z|N;fp3ZOQBi&$+QGBvUcZJ0ycG>>7rNB@(Sd(MS0v}E z98KUB2Cf2TB9AbLkH@P{+PWY%CAPZ z?j~%3qc9s^MptSp@*YX2_9ltc0nD6g^jZ~oBMGb~HXz>#y^gn{D=-ON`q}6Vm!R#} zpeyk)T7L(+B?r(gIF7!+im!Ge+`oz>d{7OYN$apX+QAi=dBdUicPcuw#pqHlM-T1S zX#K-zK>5}r`HJX@HAYvgRoDshc>gaT;fyXpBfB0mGex&x5*pYG=*-rk9lnn)<;PLJ z3k__4cnA&bA9Mvvu1!{`Biim_%>47e*OF*S!B}*rZ=f%n&(Xtl6b1pR$s9eOywMOWrWbRxf@XQ|-&WX847+tL#4x6}G`R_0V*LV*#FiU$+Xy?p{} z;D&g906k3qU?(i_R`R>t1!y4G;h8uYFT@Yf8CQHexdrXf07r#m(j?ro3Fs0}3!ey| z4VQ;&(E9I(Tf?uzAHv_lzr$SbB<+fz0i23%Z91ETOI0fhI-s}VTy%*CqDwU*@)OW4 zn~iq#bod+^*vsfd-iY!I=+E{O00+7$*22}aA_8z1HXhW?T6@lU|;0_MYp2-rewwq z&~~lE&ge>Bi05KIG=OK(GqMWp|1GqiuaOl>r+$lqtj$TsrNV4<1?r-Qu62~36`q4` zMKAQwUW#tv5OnEpMYm==8ranEaWt@}v8+G;SCFuS&Dae0M853D$qeg;EzmR30i98| z@FMhwQ$KX6??eNijSjp7GuIPs{|35pZ(&#O|7H^IVc9LoA0V2d75kxke-(O)??!+6 zO-DOef}ZvjnAvM|iFb#8V*~P~K1telLVvnm8s31JfB%0p310{kG4taUv&p}JF5xCL zfF0;e51;`Q+M3iq6@A_i{avpUI^(<0Gc+DuiP`Ay2@BD{mu%(!JMdc+c$z;(_iiUT zqXXztrnV&m7D4Nk4{L`l&;U9`{!+BvV03G5M+ck~&ljK*c**}T*~DrJvhn?>@FN4Iu0DB5s7v zpcDG)>=XH6=;e4oB{RDy9E!f#CZYo@j`EdQi~Lr!pX1mbOMjjGHhc-XRd=ChVgmZgemI=< zHTSr9umK)Nm$crlevQhn>Rn!^_YCuMKYsM}_0UhcFXp zxDe~o?qwW=JJI(?=kK}y?&*~zT>&EW`fFc0xgI6=CwtQjjj#i{B7MRE;UILtVd!ap z7=2GH374Y-ynzn50bP-;Xkfdd{8#iW98Z&QY4iV>G%SfWtc+Hui=O^gXh3IUJ?t9Z ziVpA;x`NBlf!3pee1g7czDDci{we9V1bQ9QRY=o{`Bx@DDrPTrJfq2mlhUtG5!E0<19C1J;pp)2t;y7x=by?+^9;#biZ z$GXVBi`L(a9A+Zr!!$Ss8);be)N=+{f4qzsI7CpQ>;$S%K5hrEZD7 zGh9CQWdqk%q$2C@}BGsn@6^ZcG1#=7W$9nqCMFYJ$Q;ZSso??op#=XdUZ zeG+d{pueI4R6dmKZ4GqKTA~B?Km)o2t#=i=0@tI5@AfF4hz2q>@{gi3pNsbMY`8of zi8binypL|h=jfguLl0x#!^t77jCRl<@~y*eX!}dU!QpM;xNurH56_@}dMOEK{v*0H zryfacf*r|sN3Y#9bk80|1Db=LjpgW>`7p{q$ILB31Iqd%*@_~VO+FiaKeR*M1N`@Y zN5MF><0a^lzKM3c3EitN(2h@_TT=XJGC(b?OTIZ;ekFQFM&emGKk~cKL!0l<M2}8>2JmicRrCbjj~W-+0T>0X{*0vDl0DcLKc?<&G!U zuO9mRY&5`r$GQKW_FE{ZjgO!mu0>xYJJG$&`X`xb9kgLLw4;IOVY&-FBMZ>}-b1(Y z$0#rSZ}PlJ*cZFm?qBY|4d0`{8UBJU<O^uFTcZPaK~MGN*a&Y7pG24XV|0c5 zQ-XmsM+5DPHE{&`d`{%Iq)B-Aj-e4(%gT|tZe7tO?ST$B0KFAM(8D8}=Aza@HD`=RwmV*~I1qa?gO@1ZmL4jt$(bOj3MOaiEk=1&jL zLJwz8bjz*@$D)UBKHA@MwBCDYAUn}ObL280?q3BG&hSih3A>?teNE&?hqKUuUPkZz z$LP}T!~S>#?dPK0$zBgc&(=h={!(;>-^FbF3^V`xzeh>91;z5@$oyJeF+3ODqdUTJ z;gs-kbcPGj_N&mne>dEOZsBL>;r=GvA0EQYfB)A%BpfJD-lReCuzXl8JUwh4wnYc* zif+yMkspW-cwOXgL4StaiLSsHbfq57n_h2^83Rj}8#L=t@;Z14%cDL|1eM{lgLH-add1G(DV; zcDM|^&+E`zvkQH({EY@uvQQF0E%cS%01dPU+I}$7e>!ys3738hUW6}VAIw=eN9I3z z?S~FD7Cj>iur9uUzBhKDEAt0Bvw}sEGgASrUq5V#u1I?{kaIG5?*CQs;CggvhodvT z3yt&vbV=u+TlG}<0y@)`=zCxzx`I2xU!y!v(PRQ8(fUo%rSGbYpXyJ-$ZkeY`yJ>n z91oxk9*_J|^meR9-((-7TXYz0cO0ES;bKX7IdrC{p=aq#%))l)%5}iBdvgVe%wa&^ zR5P#vK94T_SK)EYCSRd=j?90G)doGZBe4$7$5yxz8)5DeIWm7(ZHZ@)zXtuWJ|7+D z?GoI73%;VjnVvv@o|h<@ENLsu{Hlf7lwX229EI-fG|X%bI`gN{6k|$L2c;u1EWABDS$;ox z&&HH+CVDoWKxh0s*29(P_4^K8v47D$E>=3Ze)Z8a(>?OT(OZ+AO2X6o47vr&(Nn$w zJv5)7KlMJ3=SR>}p07-f%>RyGHu}?VG@gTB;6SWaHb>@P=erM^lFxZ+j?@Hfg?2I1HOTwXOz+=&^n2Mf-$Iv(D0(8X|VdgAgHS#MW|0TMD zdoy|N-|r;s=r44jQ_3eDl|{=dgw@gaL47oUw&+Tnhqk*a9Ek=n8C}5{=!@ww^sp|D z{4%WQ{ah2%w)7weKQjcu_#y0`bDdpb9szlF8PA4IQT*^0@VwHvy! zcc1}GL09Y%%>4WRb4g@V@GSZwc^_TMFVV=qL1%st?I=|#d6ASxJ1mQCS*0j%6!|9c zyffP0dDschM<+D168GPZ*Hhq(x1s}XM}JA&hc0o>%E{?2kM3Plbl?u*Iq1suM3=r# zcscrly9RAH4y`vmp3knFPEP$(6gaaL=(~R-dJDcl1N;u{;16`~b7d#bi=%;5M3=N` zl%I|@$+yIAcm>+;bLbYmhW587O~QzOiwb|D5$3LvENNl1VHNbv*C5KfME+82LHW(- zyM76}VsE2o!Sk=KnJ=Go#{qcwdX(=*xAaG>>iz$dgnL+_MiN;sbR`Ca!_XO| z!~4T2=pmbhzTwuQ0ey?!rUU4iIE1cHp_<7=YM^JLBWCXZwItlbVdzY5L1!{5^7lo4 zGG8QVVSt z&wgRFm9))r;rSe(kNLFyV*2oDCDQNmg;<009g*~1M#Z-!ZT&RiSz*#olRk%X{^OC%XFvU|&CRdXWl5}|(grI15Q8s| z(0B6eouq!MB+msjet`56T3*U`9bsKWua(fxINILMw?B0+ zp*&ZF-_Iz&oB9>Wzd#=skiL+9xn%tB&idzZK2Onb3D)GhGQyri#bq=a$@gyt zc!dU~=wKI(`^P{9DL=yZa?1Xs9)G8q`iiul$&~v!#`k5?=TbhL=ch$^-HeRCEjs&w z4)({xc?{Gh*3C`^M5l!b>P5bbsCy=XuBYBo@&lsXA?n>nf30H@Pf%|r-!Xhoeol6K z8Ep=x$(<9O`?gz1<9T$*pF30hW|b;U`cJ+)DZk-l4_J+|oV06107s}d72EOkQz*`6 z7s~4s$Q0_eV6caA0bW6QQPQ31GyM^X3Pv1_>m_}pE~MeoD7%J6_t9t}KEg~cpv^lx zyO{5JwDohCfO7ME2KD^>%J&zZHzZ%3Itxg@PTAwsJNYS|m;E11XOm;Ox?xEMco4hL znV;=6C{G8^|7Qt@kgw14KdCqFKOI{CXUZPO^^~{aTY%NbiI@DR-uDFaHQ#%4b+8GC zf++ta5I_vyqF^#-5u1k6n&zj)^@=x>ib2Qeu938zudSm2$){;T`($8Va{LxsD z_NUYCYWkSX67-57SLNkw{zzc~8XUk0|6lZ*W4#t)8J>SfN5}p%P<_hyzf?mye_=2|I@!Zb@%B#|54*e|3 z&979oc#wyRkI`r*mH(RF>9NYq29sMz^CmOOrazro%~!!`N_`->aM2lM7}*p z&!K)T!oHU%n&TTdi^{)KUV`V#tc#WD;~UB+L`TaKTc`f!!Mju*OTiq1c{QeUozth> z|DaZ0f$~e~soCI`#8jbUK#@pEKac_}|YJ zQO~k1@vLE#-M}=fP<~1bQi;5OC$W`&#zx&T)UCo8xAN`C_dV)<#2+J5WuucPnT4Od zJa~bqJ4N~Xl(!>Yk3MuNkoH&nlb@pm@(z8hVbqqSpXI?e(v_J* z>LxlZOkoS0O-DCl_n3_xd_~1xblQ~;ex{zEv&sA6KZZ`#qy7leU-7IK?PgMT3K#P> z%4g8#Ny^gVHqkAfA59Krhk2&r%v4 z#Zu8Yn`iU*&S$^@5!kKdn??ZD|1(qD{}BC*q7MH&#Q*b|$FmzLn~uz%w*VdfPQ|zW zQ}K8V@)niO;aOgyEkJrAE+b!@x@X0pi+oN$QARJ6t{#Xl(vdH(3d@I~RKba5XoNP?Jw^@AuMrb_sD*6nk@|{4PdehrIRU&Ip@>BECoYQZ7DzE

OF=V@P%?{nmL({?=R68K{Td?ooVw0W23uQ0~{_@4Y+9(}wQWnSD@Y1fV~ z|2#nE^8jU!(BJL+6AY=&Okx4SRpa3gJg83kL)=M)Cu#Ht>64%Dsgsx2MLibcYuXjy z*;4A8~ke&ya7IbeF0db$3wy zDPzvTUDSJ=@~ZTEg0hYDv4}FOt|ecdIT&?pyy_<1`a^Z$?0 z@JTwV!Shde-k7wXA#`@~(}Bb$zMJ{BqTZ#{S;456(bi8>Joo?B&-@(X%u=Zjl^fBi zf9p9qIxZFgWm@w8y2UCyNhcriY+vN7SdX^7qFrGIZ1SJBH&V{u-lw`S#vT7D&*7gp zPk#20xS2}h=yWZeP3PGoRDQ@c<1-?nej^uuwkpH#>3Pz_DgKM94XC<+^xssk8r54; z{Ta%)GNzwAq_5!n7TqtP&SBCgKi@{1Go$Qv`uUdcwUO^l{QQUYna^9KKTi7OpI4{o z5elB*;pey}Dt$muEl9u5V9!zBmI1a>cOe~SV@}HbbfwN>(z*DqVn9FqV~nZ!U_xpNb&m7A6VFHb9|LqD(UotEpZY!;l;IcMGU={V z^)o(ZH;v{m@V$)hUzGh6wM)_bf04cje>>S-(mZt@Bl!2$!zu3>^?Y=YK2DFRH09Z! zlr`hIzu{b;EBQq$wT2)L@$jbqbectnce!1$WzW)4bFvjE_wyocmQjBd-==ific3bSc^4e0@~HG`-#jPDT|^G}9nKAjo(JKEidL--Em`xVd5!Qp)C)6XsV zB7J>Ki(3qa=T9chQ@8Rg7iH<&N$e(Z2ae)lJ1WG2E<#!~dPYud*0DpJ*j_8?;HYiq5& zVymU7eJRzbCA^_xC&rY2*~~`{0*2SF}k<@ZAg;!m?S4 zg^{l%Z;b9111F)oLNBqE@Z-V6Y;Z7sqz>={2qO@5#XqHi*k#TR9#t6lCPb~^?dN<6 z=Cg6+V)DmYBzP?P+UV2Jw9(o~e0Lq{A?q)H;akc-=~704z6iU~V2ldu=^|Y;-_ORC zXcVJ)0^CPn>ou1)abT0tO~$_i{sbSxVh*r#aF5{gz*@7Q*lc73IX2Uuwu=P)Q6FV=#^a`3NH3*&@y>Tu401u^^vORObsNY8lkyXX!utQmP% z;?Z!$4El8TF+!v`^6*sviXQr}p?1Zhv@F@vZ_I9HS`K z3DMgWMw1`l{7!yAZ+sg3HyZRp^cma*k!LWqG-l5+yEP&eG5TL&^^FsChNjc)?JEMhaI!LpUP-leth(v27FADllaeAMC=z9up?fC z&!^E~#dp$ZAoYPda1wa1HVvZ3Blwx*HxzpcHXcmu8r;(4r|IXWx7qvi7JRuyl22os zHWhLQ$W`(CsLi3~LU@6^z20OBTz`gqLNhUU)}j@`t{ffv622;x8jK#Ns|zcf{4TYZ zs72GcE}oyd^!!zPA@xS&_uy;?n@1i;T#85ZGt*us?u)hz`F6G#OuadNJ9tZUy#x54 zsoo$6eqrD&NESqg!NX}P_A&Jjhzs?)2dRw$+k~%=uc-QxSz}iQyN)R98@iZ?ci=5B z&eCBiqpy2<@^Q*_KG%3YzCI@c?s9mIIJ2lPMb{V2ci;=jcXGsrQh!SCXlgC+iEOe4 z40D;-wVpgZLCp*W>%)r|`Vm3r}q=JtK&> zsb;Re-J0|Xr8cT4zbn2>(u)BTvgYT8xY{XYG-Jh{K+D&7Cw_~znx?!_jB5|Jo;(eH z7ahNnb!u`xmDQNAmbf-&2(iz8rMK7&@D{`q<@;1iA#Bls1^5$Qj_22LQ7@V}=n@55v70!-6Ehbcso zf9N6b#Ug?^#7k+APJ@-yd{zp)CiS<#GXa00#|<4QoHOK$l%IzmO8yhvy}kxAe~|AH z5*KC2Ke9F0F>Yvqd{!6x2;Y?E<7xCAwb$VXvcM4V9x{~Aq(0yksXsx#liFfxPl?Y_ zHxsAQuO%F@1z@gI6k7xA1Bk-UB430siY3HWC^-=PEGHDvH{gT8H^LKJiT|4BVp|p4 zfW9}}GMtyeCUZ72yt?+S&61b>_-J`J6@&O7LB_@-CFumHh^O45Vf{FM%0sT)?JD@H-Lv%pdGe?KKzQpUrl2#A?I6O1;AnhDIPd4p;zK zPlv7r?+Iavht8v7;38@VblLaS4+Q@!tC~B+6{n+Ta@V~YFGszE(IYkANjwfL5xrZ}2(j2r{Li}f2;xt5azEyT%eMGp@=3ObVnvACSV?RTL%WjK zQo%5=_S8NEn*i5|(5{OO!2ilZYiL-T_$cvIj@V}Oi#apVl||>Xn*{mvJCCMiQ9j7~ zBj^EeQky1_{|IRo!YF(YM1uwobfHIJC*X93ABrylPwXN25BOLX{0h7;`DS!|h%4v< z@?(!;6X6tqdwxndgyaz9*(_1Wd6R}K z`(0Y9ZAY;V?osk{x?%wNdNdEIjb&0(#hbH1WsOCiN8FNnJ8&yKpOEk2`qky@c(LWW zp2X83iG_jrLEOiHSjY>t;dmPOk*`)>JGdux(J}bu zWd2aVy4qYw1(3gH+kxOUh}TiGf=6=BXoF(>1|+tCdIKH4oTUP&7n0kk9nqdWba)x% ziLM246!_aNNYzP7G4QbpHVH#5-m@hOs9&hfq#Of3f=8c%kHnW?_~-QLNWUd4a}Ulv z;`Y=Q;TLOC64X~| z9>naWa7M$O4wgtf8-EDjTl<8gX^8d@FtPjKyXYASUY59?m*@RR_fq&YqG2+PI`IHb z>98b<^C4$5vkY6al4{n{W`w!ua+WWH`I`7}g};SYy52fvGRiYNB~ zertVIwRmz5R5OTJYzzJ_*pKK(5NGNf{;TfRra-ej>%pc_R~p5#6gG425I4lvr||&d zL(c^KzRl2fU|ql->!4-ub~8v`XQpC<;q4_}#bO=6YrzT7nv+@+o>*J@h(*XB(uV=I zQ7FcS77CZ}tyR#C+6KL03pip=z0OpJn%FM&Wzm`7G(!80F5U#JruGtUCzcV5QOz&% z-|l4r9h?R_KnR5_lFwOyIDsaIIp4C#Bq?G|IHjof(MCP-BhbIj;1o2g6&LQ8@Z!kh zbdhZ@)c6+>wgk)n65KQe))HO20dWi)RRm8{b|Y$Sb^Rzdd4-KW;h0pjf_NqqP6BOV zlO~GG230t>=y?_FGPSmFSJPuJr-$!v&3^)%0ZD8#@wXhGeFPq>c@b^A2Y(H$s^YC! z^eos_mYf1sS$hQ#H)pXxy}tCkK&`l5>|s&XyZFMhFA8z4HjT;Mz167T-^-ThOv>&% z+8mZu>R3>M;Y_zA3^6hVjWjZotaiiUw4^(2_CZFf-LTjV>u{UHlX{sM4y$2vI=qU& zRA-VkJ=5l})-|M%kddBlwL85KXO|m5<87USgzh>H;Nrp4Y<}jSr;m*2-jdc=-S?mecL?b0NF?T{i zfnV+?kN)v9cgY)TZtd^h?r*;A@6Ib}o>kHPVNLU)+GP^h*@%vhH3r&}t&!QSix+9^ z?)SDiyJWWCyXJeHtS{dFe_Y;Mu4_EICF?xD<81 zBcf?!L^F4(0p@O1D|AS+*c=XPM!L~9!(W&Ng>f{r131QhUGaU z(s0=1EhJt|vG8CG2fPfskLYL%6_E{}{-=2&0ci$Xu-dn+abdLGsz;|M;p0~mni^E9frPxzb9I_v;$zcr5upws~M_Q^q zQC{{rBY_9WD`F8oe0VinLf+F=_j`-Ycm3VHzBhkS%Kc!qc}IYI&qj0oD(L@&Etz>l*)c|71(D@6kNJfA*u0BH`}zkRr1K K+`PQ*#s33+3rRKr delta 49755 zcmZ793AmNh-|+E$(x`bZ8cy?EnkQ70(qJegB{GzRM3M#@g+fIU8W5!kB_TsaREnfR zMI?VEAxWB$_xs)VulMr4`+D~Ov(~!T@LR)u?|qKL^Yq5Nhd;@i{U6AtrLh&}$L?4k`(h)UfF&R-hU?J4K0{~xb>#oRoa9fS{hYEo z>9=554y|7YE8@ABm+@2Al5i$Bp&gG#2O5WEa1y#g^U#?sN0)dF8sKJhY4@Y;bFN7O zDIAtSx2`N!#u{k-&X{)Kt4XlssUesH?+))pXEHXfPsGCHr(;cAi0K7; zSk(K!9SJ+?5f`pO2O5kn^_@|EKN|UDbVf7K8NGtGe;rT755tY{E|w z|Bq8(q)(w|U{*LM%I8OZN%#gj)3?#3UX2F!4LXqnXy7Npyc?1&Du#|z0S&Om2G-w* zYg1r{bsJkZ{Nhz@MFx6d%}ZghbPbpWPO^;TQVSQ|Z&G6bZ zi9#f%q4(>2G{X1LC0d6L^cC9i9xQR`G3*&1vVz-RnX6jI_SjOVnOVJg|S!U z(*sF3z@6xljfwmObbzPPKxRex5;TAnX#J1T75M@U{6Lf+L;F4Dvt(-uqy1Gz>(x&3 z=~QD9cGx;DbV4J(7@a{Mbf6*V3`RzNJQg881?_Nl_%ho5jmW=`-oES6e!jz&xDQ+V z`CoNY(!teegagrmhoCcf01M${G=N!H1Q%gpd=EW*pP?Ve|BLJYqAOEmbMnoq4pt=J z37zl_n9uwF4iZ*OW9FHS4*V(>!{zAV`wX4g4`@KYp))@b*Yj*iW_o(q5S?+y@Zzv{ zcs-_#WH1S5G76p9BWM6Ku{zGjs`wdJ!9US~%YL3bNGhX;vnCo?T`Y>N@h0qs2L5(j zUya4dfBre^?-Oh<1vdB%&1Zd)Y(-u)up(Fjv(bT?qJg(WpJeBu^}3<~^g-(l!psEG z35`MnABV2=V_&fTXOWmkfzSRuSPWBN(is%TI(Rkupm_wH$?R|udS>26@AFmY0Bg}1 zeugFS2XunR(e?$lCgr8mk*F7*8}`C;s5lti!zEGvE_w(zhu@(y-jB}sAGChfw#5AC zz$MXkHPDr6imqt70|_I&0*(9@bS8JA9ge~pcn{jqJaoz5Mmu^B?dUUfsduAi=pZ`N zQ?@7Nh0y%zk*}V}{T~(GG)qXDGRyX7&o{!8e9%dj%8LnrVHx;4L} zfgMBZ=l&{Lv0|9d`@a$iFVsOJY>pnnbI^g$M^~s9I?&DNlHZMXJON#)X;J^Gzpn)_-JM4%a)=SWp8Gr_M7rNKu z!l`Ke+2}-H4VPo){$EGJnSY5k+=Zp_H+05%b|hz@4ElY)EgDE)^!jb+N{vASn1X)V zJ&)((hiJcrzDW*cIdr`0-?07;)R2PKcs{xk_oE#>f(|qtJ=Ke_2fl?4T=3gu<`vMH zoq^TyOmxMrMe7a6S~wn0!`CnyKmC^VuSw!J3hH8+oyq5Y2Xw&E=xKj2$|s$~Jo7C;YaQMCUi=}4R%b_%bf9r)AXCu8 zGy`4Y+2|o#f)4NrX0{exp zZcVZ8lclbXJ||kEOMER_?`|}Jx#(6eLEEiI`b($2CE*etMQ4!bf63C7MDOFu=nQM1 zE72hGZP2Cdh|cr^wEgAiO7%wr8jcn4xyY|Xx8}!8KAlP(B4K3Zen=v3f<}BHR>Ui? z435Ce=|-3Sd32=~q64l#1N{u0`8M?MW$jMt6+;KE7B<4-jGt;l!pM7|9rZ((`gU|F zCq#Z8da75U9dAXS6MNA>PM|APbWif>RtfE|1=>$%wEp$j7)N5dI*COjn&6jcAo+hx zA}x!~ygIhTHt5RSg{^Qb*2a}s9{1rnn0IfI?}BZ~4@B!Pz*@K)OJU)k*#A5vs{fRH zMXHadlkb8q^#H7d!_XN%h1GB&8t5jpqn(jIjJe6@+?UKeKYG~8V-;+OUcVGw!9M#~ ze+Rmm0&kB|QDI!b9UI_0tbyCmrB40KkK#}S+u|kYgq}bHo*6Cz4lfzjSz1|odxE2pxdr$cs%m?4SFF^;o7TvnR zkspJOGYPFX1JhPqNWzZaL?4x3qkDZEi(-+3$&yvZ2IL!|52$O_UMJu0|ipL(tphcXS2H{F&6Njm5~fL070do`pAH zV|)>t;#cUCv&iA3eJ%8Cv_|Wnk51shGzstPIp_@Mhp(Y4upC{PRp=70Lud3QT7M5( z?*JO;pOMdVBsl{G(CcN;tu2pk&6#L_=`JMP%gfOR&24C;Bhd!q(MR$;w84kyS=odJ z@F%+D|Du8BIhw3gA$0GnpaIuH2X2Y>-w6pgow_UvZa@bZ7LExYMGxsr^fsCwR2*hel(z>=s;z|8d#isQ#7FSF?0X-ih};=-VQ_0!gzGxY3NK}#M-zx@?VF$ z!{5;M$0A?gc(Nj;&@CvBWw3JCT0Lx+kSKvSqf34t+R-d@$(Dv6pewW)U5TA&fcvmC z9**)teSaSyh`eE%>D?1HWF zVf40Ji|+YfXn&`iNCGR223{uemC@^UBH#Q3>+j6l#)S*eh_66T?@)9_MxZP5All(% zbOtlf6?hr#_zg6WRcOHL(S8d2n|zlnhEAvvx@DK9Nq8D>4o9P>bOQR#XBJk(56~t2 zU*rq$YfH=PqJeY`uS7e(1r7WGY>88_6mCE#@B@0gruUO@&;CUB_SCGbOaNukt*D1~ z)ERxi^h7%v7}xI!XQBhYjSX=#S}$jgq`%YA2{pjpcrmi_>D0?4?D!pYX*OU5Jb-pk z_>?5T>gYAnnU(o2SPVTwt{rM9;#0 zbPsdn%F5g&XQBgkM+dqZU75k?mZi}{IRoA6Ip{(O_ z_$$njI~h11+CfG1%v41WUrWrK5p=+w=!*4=@|)2>N1*k`qj%Y~+*#?&jFwVh$Lp~? zZbUo!6^;A|dM0w@Njj*69=1m4%sZn4UV+x{j|Mmd9q0k{L+iQlLo}ehdD2;#Pq!l! zoJm3Pyh+82(5)DXuEbO{z?qSM9vx^tI`gII$N2kbAgj>{Y{I(uH5y3Xd`bPv=-FtH zCSk?q=uFz76)#3l{~)Z6_n}KSAKm-6!;jD>=a+H)7c}61FmwBzn$$lXJxjIF@yG?og?`3t%qozKR~ZX4 zeyTnR2Ra+8(e|K$mzY8rV^6f<+1?cSi>_fa}nH2BK%_R&+uS zq5VCF2DlhA_y2Md-gcj%OSvDN;lJpUs#xKy)EU?a4eVNU#aXv3}OgJKtY z2#w~W75cEMdx)k@n6{b?)gJy12T#G*O zcAyRRqtE{1=*M!d(n-fP(5-5L-Yw^$51uQ~_7l){&!XQS7NCKw!|M2LY3~2FByyEW zW^f+5R2QO;&c0~J!_hz=K?9nJuEczFfW=Y%4!R<1u@ioR23WFeQojoND6Wn6*EUVU zCA&BZ`l3rWIJ^rDXbgJjCZhvR4QHWS@e*2Z33|BRM^|7STK{Xb-#y_0^z5XMlQ5!F zPfI$;MxW^o&jLGHyQ>m9p>E+-8TtGj zLc$r2K|7p;1~3Di(UK_Nj0Uh1{hIwplou(Vl$S>bXo#NfbI}?1L2twB(3#(fo{@X7 z2;-;jC*cxKMfd7CG?0bpo-RWJT#MG*64$?p@_lH#!;#ObkmL)7Wzc@Apexk~?dM!f z8&NkBdKtQeSD_u=j0Q41^7o^GJc@QOBg$Vy2Y5Bg-wW5HEB1L@-y7ve(0;Qj#{FNY zVlr?=bgAm0Ur5@bOVt-W<=3JE4@8&tcJ!_oiB2GmPGB4w(A01adKj0Y^*%)V*-$Z^ zRNP8|4fmi+bO?v>Q4w@Twb6zx(HV3_1G@|}D}|Yrit7W>cDG0VzQ{j<29%yo z!pIk+d;Tsuz*;oYuh6^UXLP`<%1OQaXn>{A>s8U~tCU^&A?&Yv_ztpaZNyJNi7_jedF^MrTl{N)kX7w0%qT_XzFLi48!v>~{3ibOicn ze+)C<{}+;Quirsu@)6d-Z!sHBt(rt$2Oanldz(tV}WVegBXsFHpfm0jUK`~%hxejO{{*@f zFQEgjLO=Jvj{NbsUc6RPzg8{ofA^#<1*#4-jaK{&4PXa4&~9{~-_RBLJMsnVBmt=23o%bdWPDe<6UCj`~P|pMmQYZ!~4B}kE5T0bI~)f8eQ6T=w0$DI>VpQ zEj)}qpmNtw+EqZe?o4z7=b`PcL?bfD^CBedVM(fVB)aQ_=X@2JopjrcaSd=%Q?!N@<3uE4WsK(nzH zE)2gw+y9FWobQapl4yA)^gCvqC_nEE?td?Ir@%wlC%iEn9zK9}_&6H*bLb2gNB%AJ zk-84;?`w1`cB5PP54r`XH%ty+BXqnA(jD1`)+PF+EwIu{0^hix+2(JZvVOK1S^qBGwZ z*SDb^|1bPK%Kt?JI<-kszZAN16(e62z5nZB=AZwaPr{BaLnFTqy-h}=OEwK%vV~|M z@1uMAIePjJqAQiBX%ct^bRxCTep;XbT#Byj73d)xfSJGlyN`r>JRYq$A)IUl@=r$o z8FY_dKm&LgtK!G#iXA`$`U@SXNVBAUd2}VKqASxR@@+Bgj4vYL=k`GK{(l%9U=Di7 zK0s%*4()gwI^b?JpaW>V<58Y!o~&qobV6m(=SBr|Le;~1&AI>Wpa});?b%^RbfAkc z8?TJ~-RKrPjNWd~pfg&G&hTAy%RY(nZ^EC#Kf|mRNxOnAxc}{-ECmKq4V_s7bbwaq z-gm{ucnvy}spytHgMMZ_AHIRMUmt#f2KF5~!2{@c$Iz9}m2R1QL#cq?1!rMxybkSn z658PlXa}#L-)P=M57(Dypnsq<&($i~%2Mb`wLl+4UGQwY7OUX%XaMOoBpQ;~i50PE z>!d-$@O(6Ye&_%NEJgb zlnbkdb>n)I$e$gahX!&1dg^1s^4X8P~gl*7{dZMTJ2CRXD(cADz^uh8jX6_Pni*}=1k>l*-t|*DFXcf%-`#<$b zSfMRClO9+NZ$LYoi0;(_bjd$JZ`0lAK>wmkU!YAAcm=e6%gA>}5An_D3XMUx`gu&d zSF1?0!tGcOOSDZ^paWb_Qk+BRYX= z+j0Lp)6sF^1*}W{9dt%}G4o(SXPP=ES;B&7{&X~unvrjTPN)OAl6}zjL(p;VM3;Uh zx|Q?JNhgW7;=+3Lw0;rpjPjq*JwJrrhJT?m%z19I)Tf~VHAVw(i(c;@-hlRdH#+b* zbOoMHld!>Sn2oE^$oHTX|3YV2pnY;`%b^|BLC;LnuoGIZH`;Cx8o(&@!)-De;B#ob zm(i_BFOLdep%Lvx2guPO4iy?u1$4m1=pLRI_C;@}Vd&D{kDc*Rw4bjr8+W6JF86s! zztxfJ=~N36MtTk!`Q^!l)Ijupy&XNZ)1v&X@B?(<4d@E)Km**5K4P;vCbx4z^b8b3 zx3CO)TUX4;{a+&r8idWmHfV#6;RWHPVW05Y@J7rWHgqC)M)|lXpM)UyPIIeNW4`XO_7_&oY6nKj{0=mZLM z=Kgo@vO6bx)(ESUKO6mcy&fHSAUdO4(faqIr+Nyy*R#+k-pgpmYtX>ILbqfmT5mVH zLcgPDC#wthze`)BOJWstfM)2S?1Y)6LpvB0-WiTTAJLQ0eiot~uRsUdfClhQT>oEq zILw#sn#`~q)}~?=?1mTM`8WeT{d>@@$<-~{^UCP$R2vPnGdl3qXrP196&i_d?f7sC zx}q~N^Z7rUgiEy?jdT^-;3M>~Y(_i$IDmBE{#S!869vodKll1{4VsvkSj17hhqzT8XMzg z^vRn0;;hWyhGwJfFT>2||KKRN7oGVu^b5!WbSA6OCEbM1=zBEKpV6)O2c22o?n%BN zx{_ru^P~%Fgbl*xn6^TjDCiho81@XW3J0Ja503n>@b2(|aAG($d?tJmZU0L6dUx)B z3*L=_55o1~rf?f(?&EMbdRzXCuE0^OiKp~Pwx}+;Lg%7OeJQ%4x1hJ{cy!C>^x*#Y z^e&^orCx&`md)s0unYYS=g(2TAH5y_LEDwPB-ygs*qnSTY=^huS-2GY;6bd97hal` zx*hLE>mN*$aPMkgmJHYc4WK2u=bge{Xv8;$qtO5#MOScIKs&w$GiL>z;IJqk zi3TD|Qq;WBIR4R-h`n6>YDK@Bi&7aKKB^nO}>}><)CM_o9dAQMBVZ;X7zRo6!0@ z&=uH=4!9p}m#1%HIdo+jqW!i`ldwT&bVe7UGw6o~^a#2l)6kW8KAevZuow+s9eQ>? zkMix2KZp)^1Z|&nRnlKxY(_p^goGV*L}$<)jjS&kz|H6ra3p%4-yKel@)yy)osS0k z89LB5bl{y){u6rmen;I#r2;1J}eF*aZC&*#`|^D!RwB!=>mzABLY`X6Bep z`F8aFKOW_$^-B(CMfBslCi(+Rn@pbjuP2GjhXZ#KR@z|aU@Ig zF8XL~aa|H{cXXhu(X(F+Ykqwa(1n;y{zkN;ha*1= z4RjT{#2=#_e-Zipas6nNXZ253>@>7~Wwd==%>4VmO-XnN&xs11(3y8f@6%rBp7oFG zBd|01v6zh;aV#D{JHBH;GQ+#km3b)gv(c?ujQ0Eb0PcVHcohX6y3f#WxjV5T{*6Xl z|AyqYY=PGAjGlqZ(dWn2=si=*%xiJG=?K8%Bhq(E#s3JAMc~tWRQnoQodDFVVZ?FxtNSjma6yPDi3@STn2} zo)I<)TZCtZZNv6x$DJbICA=`~5%vswhv};#aV^@x0CW#;jQs84u<)*MROke3cON?Q z`_Tv46X=S)h;GSJbfs3t^>s-7bm}V-4!959(?8IPf1zh0*P!Hj33Pz+=p(fr+VMH) zR&_(4_5IO$cVSf=kKS&tpzYp9$JvM#{rzvt&SXD&cl?Pi zWr$T7TTBGfHp#Ahgm%cwb^V`sR_o27#v|G6Uy|9b|Z0Ko3;O8j#BP#rZ29kS75^+9s z$?~IHQyN=g4fMn78g!r;SOu4&OT7(U+5e&a{fg{Y7iOaa zEk!%pjNY%i(3$*$4xE2zvLfZtnb$%;yxO5F)Hkl*g7!B89p|ZVA!h#l-xVY(abYvs z@u8@Y`;MeRS#$<FS?VwF~KKd;0fd+ClIE6^G5Ll0@uk;!wU z40^~bpwEXY=mc7%NsJ}Y6&+|3x>w(#d;1G|zvdj3G$@EZm@1(I)IgWKKDuIOqXS)n zw(o^bXb8IJBhj-l5xou5&ysN97tq^hF*@Kf^eff-=vnw0-NPEAlMXs!Kk}EO_y61I z=|6-HT=ec_;96*ZjnTl)jC?yJpmeG;2_wG}J^i<%5#Nt?Gzs0yx#-fbKtC0?V^=(g znJr^0t#>}Uf>(#Ppl4tdI^&1Y`jarf_y5x*T#`BA8)!#s(Ixv9-K*cxCt9w1l9?1i zx1uDv_ot)vJI3`Z&_J$2Cvr0y$o=RUcpOh<{M39B9nE_5qi!OZXfUL#=u@1O&(MGw`N=m2}rfq#$u z33N~M-IuIXF*KlB=n6DP`{^9^LYMvqbY*Ws+mE@A``<(N2n7!CIM%>fX!$zyly8ds zw#a{ncJyPEpFj_5?lD=JA4sy%0NSBTeGz)bu18mBBpUFfF|o%pDKLP=abY>SA|In2 zZH@e%xPB1b)704H?36(RuZ2EOE=E^kFdFE6=!!la&PTWCtu%>FBzB^Qu;%@VEyK=e zNB&-PYsRB1^(cA> zr=fu^z_f>9H3=g-ghpO{Lb6m>pydP6uTIm^$lpc--hqB5{D=mgXJRryHag%L==E0U z^()XoZ%0>bt9m;E<0rkLayaV0asc3&o z(A)GA^fvqfUCF=DdIcZl{x`B(k0vubC+vq!DZd9@p*OG%?nalm+G9zeEzyBG;dyus zI`jGHUGf^*&)--b8%@qiU5dTXv$ZHqqAQ6n&<-k3Ng519KTe-Tm+alhe~32Rg|1Yd z$CITjh0d%kdc8Zk*Td1R8;91Pi}v>hS}(nVL}qEQE(L#~ho)g+wRsJJi* zo#9M$!1vGqHll%j7aol3IcFpt7Z0nTPrk-z`%dV9JtKcT)+ax72KT=mzd(VJEscsF zM#atO?X@e)|3d5Ko0)W67ORu5iO%ps^tmtqy-lZ}D>xUkaRu6bCpzKZW^(`AFvl}V z#nZxuXvI$9<>=YC0Ucm6x^gSf0KP(Job_z-&;3eaCGwYq!_bL770yTde>+Vg7m4+8 z;WPAf?h1d!_T-OYK0N!m&Kp8()t6r|1lR#QX3lo`EBuPj0K1&~|IlFBadScf|=j3r~L``B?9T zJ{j*u&R9CNmV^Q9Lzm^Jh~+{(T>kUpJ+YMcKxFK zW;CD?k$(v7?@4s#&!G>rH_!=wmL_4xzoK6-@-IyOF24)9$0N}I9zkdDWVjl=um8XX z*zBdO)MeNo{erO^dtmXGli#8ZK+nKJbfsPk)5}S?_iLlVmvP}+bY^?eKn`K%aJ`Z| z*~*}|T`Tk~v_%8$9$txl+}?n$*ci0GN6{6TflMHsnnS|9--~`D`3>u1$wkRwY>y6n zH5$n6=;0iTHE}xnsQnOawDMu?~(zA53$xDy~KA{}SaVB41%?GJ!MDE$fV~_(hoc`M)O# zXM9ySARHXt8K%Pr!%66pK8YTxdFWYMf-d>{SQj@%`3ZF3g0Cm-O1vIF|5u~H0P3Mj z-W1*2v(cFjK=*tK*1`qofS*VCw|GAJKhgSa-bfDJAoT1EN4Mr-%*JQY!}y-R>+y7c zLV@@5_PFpPTK)(6^*Qxs@~p3jmY;_%We;>lz0jq<8lAvx=)fb<6`6>x$V_ycm(lv~ zq)AwD1NwmY4qej2=;6w{8el4C|8n&AD(FX5*{qQf)>bDBp*_qDyuZy}eF-Ckd=NHXz>~y)B2LD=;2i z`f2C{=cDbHqbsoyOZfS}jf8vhE4l@Lp#v9vH}K*a9b@GhTx}fOesQ zX01#D%!i(t66p0t=)}6CU&Z>O0baY3``1 z(7T}vx}-Owx9h#=gq}lJ=1uf_#d`FR?nhVV(0l1*CVx@jp(^!$GUG<*ZF3IV@r9U; z*P?-rjq)kz9?!+yCXjt-QziEKd*$Zqk+APOeCFJ6Bjn2d$SGg=-Vhihz4*h%vzlsrhJ%9 zc}aADW@x>$(1AOk16>ea9$pjPl#%;ySQOk7J`_G4J`>JEJ6;m`cf!@-#&CQ1zwp=a zNSL)I2`s;Q|Cc0T#}(s3&9G5;W?VlnyfC~x>=)h`-j3eBqtM%MV&q>!S7-%#xYuCX zQ@VwO0qjB_Ec?(U{THp6du`HTadeBSp?h8jy|2$k>vzUFcrp5{AC2Cg_oDs3fZhc! zMgGIJ@%?`T1$Mj@J>B1+d$%|82eA?Pf6zzl86PDBpO5A*MbFGF=mhRV2YM2Ha4m}R zPq04uU1+-^>$v}|SZiIBJ}h9Gqj_9Xh6rX9+vnx zc>nVGndG`l5&SI&=%~#LR#HBTd3cC!vu|3umK&y@DQ=_s|ZuV^jPk@|8CxGi(~R zL(fDvbV8SeSE3(I{n3@a9}9W^&mrN!OEGhQq8+S3mu>@g!tLlDR{kvcf#PhmUVn7& zZ$?l5IP}wRCfa@}W+s4{twvY)XH1*OwJG`BuZVVVA^P!pU3drj9C#p{f|-w3%%=QJ zbOpDe?f-|)^e7rY>CH*~D(LlA*c>n19N+&Rq`*To30;Xf=of`WXyi-L05+hf`788H z>_umE6g>l{Zb=3#i`J_aHV)fiW`dEwZVUIn4R52sy}cJ5@bRedGCG5I!nK%9eoI_G zga(r1^TcB4z?IQ{&j{PZ^$Q~37oE_}X%ar8N1#jk6x!h;bY?3t8#hJ%AUcDbUnGy# zvgoOAjjmW5bSv7UXX(PY-V;5Hy|EHrhxVU-fP}Z%Q{hW!!}rjw_y`SbGurScG=ThH zCWj~+9k>fi6P>T#iNj{{JBfJNP2}6YvZ@*ZJ6(?B*2>J1lnT_?17oz|BWQ!fDfSqJ%)bm zUKsgL(V6Ux{BdkazQotb$MOZ}4DStRpij6r(E+zc`5vrEK5IuZPVF7s|L0K9o&uNT zL3Ga+qNnu@^x3^KT#a?fe~bov6n#+riyqD*-y|#22t90V(G}>51~dq*|1i2@Grr;e zpG;y21rF5V+hp&$pnHBf+F%g6=c6zOPC*BpiUzU_4R~ev5jG;f39X-VXR@MsumSnn z=!#yECQ*mPO=zS~p?mly*20Zg4UeHqSMj@KCY{i&x&b{S_n|YMj-H9R=w0+W+TVKg ztN>4pbfi5z889muSXB(&?rww{$Vtrspy_QhfZV(+RvKE zZ$az*h(3sZ$IQR~dzgf$G4~J20Oim?YM^`B811+n+CdLAkSoI*!rQ~U!|`bS$HQmB zdEpYw{QUneiA<#77OX?V?{EMX*quB;hN64=D7w@ypoexLdREq>f&YRId=z~yVn=Sz0p92qKAFzkLjes+i_t%R^`Gk=uC?4O#&;A-flH98_z+v=2|qsA?S+S zA5I9LKnI+O2Cx!+PHYQzrAavRedvIHqAQa1QxaGqw7dd3U~P11TcGXEiR<0sdN1_! z4?qLD1?%Fl@CCI0&(IZ2e?!70I)HYV+Lt_N@}m`-paZuK=-U0`r&gEI?yEa$u$dIx)o^0Ytfb1jPCso z^tSpAt+yL}ZtRczA+-KK=-JBii~aNYTaJVm>Z6gjKxcA3HpA=C4yU6lF&ka6CFq%0 zg&x`+Xvcq`XCm*f$r6`C4{rl>LT96A>>{kd_^CTc*zx1&VR;_?c>NGvx)azGOYBbq z?2N8J@5uK@pYeC16Pbke_jFvJ8!n6Tb(r~B#?0^k_mFVu_Mz!iUia zXP|q$7@gsItdGBi6%Hl=bVK*{5_HS@qgylz4d_8M(8tib>M6AToOE1x6AffVKq>=vL(VBiYj$=wWPz9@1`T`zs@VLpU65pB@*9sp0H!N%&s)DYmA; z4s->|97xq&%I<^=I5BXhaRrtvCy_@dB)d zgVE=}6OmtncDxN;(%;aI|3)>^na_+xJNq9(J#Itc@~1 zPHl7SKzYx|&&1l~m!pSiFS^tPjwS(?LvOE^=s=y&N9|B_1s+5v@+@Zl`Tx5ljQqp! zGxX5xi2R=LV3eN-^Bzm;6+_QXxyV-y>!X3RKo4<8^fv5=-j?@b+9%etBwWg+cm{rq zZo%K^9u_>F1XvWk{mP?H$ja!zXGOjPy3|*r6Bvd~@E&v}UPmACyU_kqe{ui&qf^np zk`C*kw?!xP_PYYTehV7lL+ELrg|+Ylw8LM~=SYFSldWuk&h&D$-Eg#@N$6Qxh@O#6 ze{=ua;b98g%QF8Y7tRd(g%4n78%F*xI>XaXBuiNh?eJXmFy4R;dInVMjlR&ORBYgmC;PdG9^^yMvmUm!S>%qkH&JTwj0<$ge?fpTp>kil34UR1;l+GtmIL zMZR}<6M8sDqo;pLM(+PtNqFcsq8;u+D;`DzDUdT0Y3d9#pw8$3H=;{89Np_FkzWw5 zMhE&1z3)$;D_bg8j?|S{1q(8M>RuA=^(6EVy@@v1fv(6Q%*LF#lR&DWThIpUVVCeO zbc^POOTy*hN9Y8%pzZf!=JWp$3D3aa=pN?GlOuDw3x=h`N?{#zpr&a3w&D3<_po<( zU3fD(&M>%bdtD=0{8INsQ4iIdHrbQpF{_K4*m37fG+)Z^of`!UsAsS zb|YULE$@duU;3j1jzhd0L1C!l*e8y)DS z@NKlekI=hjJ9@VqL!T!l3SV32iKs_i-YLO6fTrZtQuy%|2HLJgO1_FXh6NuK(2}WsBjFrv=5;( zo{9!K8(q@Z(XDzXT!Sw8CiMQ_jjrH9_5ROSIJuCG&Y&LJpc}gM{lZ~rU=O3Gd@}m^ zJ{zt7TIAQFcg2_J1MDYs1q&8Q+Lc5nPy;jfe`6BPv^9E|F2yXo0$sX3=+@kY2J{sA zfO;7l;A%ARKf{tmlhfT4TTy-)dT1ZR+W0oM#N9=?|NU63SS&~8r__tFHTk>I&-1s@ zfxe0SpXf}>6wi_Q9IuNmX?JwSS7A2ZhPIo6ZtX(MYz;c|chD7CTb%pf2g61RbX&M9 z+!y{4{vGBjk<>2~mJYMgj%!7}Vc04>H|!c-nvO)@Z~)rDt>N(So^V|FX!un49C|k9 zg^SR$@di5M)mRrdp|{@&bj8x8OD20<8{OlM=%MK!`G?TkW7p=ai2 zbf5$1r{3Raz0*o1r@cP*Cf@=5^qYm}`}zMbiP03CUphzTo6cGsNB(c@g!h+82KW>W zU<(@1cjycbhxy7ThqGMR5Uqb6y0tyfv(N{9a`wmE{``L<3732bR>iv_{|vf>FGl`# zw4>$dU9bl2=<6uo8SX`&2fw2M9J>S1fl{P%w^BH>%3i3ZRe zU9!v3nO}q1I0$_JJ%X;lGicz?qcdNEZqWzmb7VW(-`D7t?TYe4<+%Sddl(h+l}|b> zj2)<09F4da+VTD9jHjXlPDj5xE<_)xYthsFExL6_&<9)Y3P}LjVRdu`>sH|Y_qJ(5 zfwo5Pf^*Og`bEWC-_Vsfj;<{KA4`&k zr(zBAC9yM}g?2m+-K(i+hbz%QKaJ~OpfmX&x{^Of`3dw1SRgwouZrfIV{^O^U77TQ zBwV^#=(BzqR>CjPy*+|<{1>|9g(@ZWE1)xNik^k@&;c$-59_Vy=lw)V;;QHw zsfW3||IZ`gUUWq}xC~v=E3pY)kIrBk`h=T)F_cEgAYhdQ}7Ij|E%?asEq74$P%+B>+$(<^l?LgbxyGkh zY98&z#6jq>-&RHJ?o7NNT%k{(H&5xiT|)>kvG6(v2J^!b$Y&rLF~pXqN^ZaxG~Bk>-U z)>CP34E|b#{vFp=C-qaMxn3v}^3e#_3qxZ4O&_GjXz~w}eukZ87IT|j&8ob|%u%D&k z5*m%*eS!g&(x5aQd{5&mW1zy6ALZSTvcIUuFE>-)lJ@l|<-U&bex39Mln>^5HPS5^ zqkiT(<8O)1_R+yF(dc;wIy2VIPOgbgixAXnycbaSOgj0HdashdCffZ;y|MJy>f|J- z_Z06jyidMPcH5UW`_tsQM&~~6UZC*{bjS~;DZW{y%8>qx_cxReI@tqOrz{Wc8WX@F z>P^OTdHX67XY)MD>k-Ig>a}99$MHqHit^&5&!f-uMiS*noEeSlCViy3({OQ=-9V!U zXfzL>WG0u;W-Zq)=iQaIzK#%3J_n(muLHb)<9Y+~)u=Ov^gEQzq~6I_iM;IpAUc~6 z%hef6F~B3(na+HDO@q_vV9|e;a1i;1Tt7y=2mjNd^?#*o8m^|i4evs%MsDo=pL%-< zW+(6abDe7w9t}i!oIreS;ldWuy%^wT26~2u?YUls@=2us!4v-pruCGIr$MZgokbG?=-GLr^VSUQ(CG9I0^&h7FeBLKtT_T#3`RUZj$EYKsukARH zeqNzoJ3a_b)=ND`rxVG&!Ntqy@D-+UDvj%r9>=xj_#*kaynP*ybuLdwD@kvRyw{pD zNKg7XLYbe91!&)ZcKzvNCc*TKAeZOmZ2m&wsWdo%5C4DBZ;thvhh@3WKbhv&RSuE7 z&Y+C{OEseNH>3Rf2=HVbJxHbgQ#L($dippcy+O@W8EF{3?Xo$q-jv@Lqvwd8K8t*R zu4OSDU$0X(ns&av<9z|6-A4W)u0KtB8}Hw#@9P4}u8Vd*Q2w63SHC0olp)hfrEj79 zhL~Man{WOn$0eqj^zj<+sni=tz0!>P9pii$Z7NW=5czlLcLIKIU3?j{sdEK=d_~*6 zT=zAO^6IpCmVOrG<||e0xbP&6o}%*KQ%XKvvFQMEbEv+b>W@>SANe0L9Z-w(+jO}B zeSIFGbeuBq=^E*$={y(xY>ZNC?1%~N#;h?KG$2&zKNfCQ|_5oAbk^~Tu#kvD7}MPnQuf;ijhvfZn8XH zIf&?8>ORQ(BHGQM*E)oKA5pZ#ckxN;{y}+3uD?vZhp{q!?4*2L^s^|jRq7uutflf8 z3Z5aDH)A@3Nav#bUc8_81H2#PJ&yNy-VaUbFui%YAz@xm_kTyXzjLJoVVrz@O}-lM z^@LH5@|PHG?0=>+m9`7HHi~|3Dy`wmv$2 zo(tOT}y>;UceFz7u`_p2lrcX3Z;}evOXqrPf81{y;~* zrc<_+_caVupR%r45>F?{cW?yPd`+Xr;k@sp>=*LQNI%1SEor~vpL`uBkdNqNC8M?? zJ&y}tkgmuaQn%4*5ei%4Gjuc*yT)wn;2SDlLZ_YS;5X{|YD?Z1|6Dp%pZY^d@8nty z+C5HLZf=9&ls`$Eldm;gTg&@p-u}$^GWGlW{~Ebtbb2=p9%8Tx-4y`^HrL zsB@eSCo%gk8RUMvD$1?bn0J4!pT@P}q;nBOekSx4`IE0I^q-4%xp@~MJupp!^>OtF z26~MKzFwly5iA*v`AIwV9PbwxuwMi=lzg)YpvHe@YWts}pS!5TA4dE?uNSy>BV|*O z`Sab74u7ZOs{d3x5reFzQYWtEA=*Nu$KxXM#i-jh2AxaZI3_cz613|^y`0p0Hu`8x zdI|Mk#~i%-QJ>#i`MM?Zzh6?Zeo~P7l}>yOq~gg}EfP0HaOcEzuN|V@Pvpll`f$92 zfZmUGUq|D%l<(sD9ps;xQt7$V(+|+ot8sNytl#B~J}kohK1Rx71EnWLg}E z@|NUpr=zXB_fa+nucQ6m6tH}b!dZbX~i^wEg?ztR5((We2N<^QCnw3>Blx;RxD z(d4?goQolTjwTi8atPNeP zxpqNnI*HxMwba>k{sax5h|2u3H8r1LK8n26K49_v71B8BRrDH8;r$SG>Q5>9eDSP- z$*1O1Ij5ZYd|vEdr)FAyS?xMmoG&)B5;y3{-Q`j%_k9f$g>GKJjN4^inLm8wRq zpSk$o*F>(L9i8;X(hS;|I#*D>kwJFixdh>>4dpu{U4TG+jo@95@@H`ygHMe9tGiM@ zSF)q?Cn;DMTUnEIVJeQK^PV*NiSjpiKTi2#@?Xaw*Aq;8>W!rzUz4dbi2mM>KFiX+ z7T5jF(Gkk_lWs|yBk0RtWu^WgGk^|1oziV~ost!}JeeW>`&v6?!t5&POX#dNS5^_k zJERxUZWHZ}li$z4RcTqC@*||jlJ<2!>Aew*`B~&w(rz&IUd1cO7pMKBy#M4ql>YzX zT65}NioO;llbzCFPOkJ}`t3sgPTKvC>x=2*D#}hz>ZCqltZ&Ib8Eq%gUt`MVlW&)F zm#Q6gw^P2AF=yaT>P@4(8vSO`ek1QWlv(wC>YPTMr#-LF($Po?>+t@Z3cjk)C@+Ed z`Y<8$zkkti79G{(`sZA4LfY3&bawJ}E{RWhZ{*#YdVQ$#CZk?STVKtv^Z%`%`5fZR zQmGe}o6xDh_VnY?SJ4P4$??RCRd|k0KH=KWk+0;;XnR?-E69M2|I_vs%K3GD>U_qy z^FQUM_`Uw*>w6MIsPrJ6zE5XQaBT{eC%R_5ZjY!}=Hh3o(tJ#PJdH3C*3ZheI?SxqI?1EeEpV?noOO4x!#fMclvw(^GS5(9pk6=MuSp(u`QkM zOjTcFVm43Ed@=7Uc^{+f*Qi~F=5I#&GCXv$yQF#Q0!Hxn)I%xn9`(G$pRK0q##EYf z?I>j}xb8Qan=-%iC-FW(9OmNf|LHUb9gbqT|D}Wcq+i5l)U80;*K4#{LjC2uo73Ts z1bmQz)^L3a?K+Xajcet|S5KPw-^fWlLfJy{`7=RrL#?Kx2{fq7#s5+G91TCDQmGi| z3i2Cx-^!c6S5DQY{65}ec#q{hhc=JIj5pEoX5MAU-$9=>Y2)iA>hz<}Uz`LMrEDKlI~6U9^U__ zi8Fz&`B1|6{b!dTk~Egm_S#A;6{)-uOKnN@kWElZ5y_Rr%O)G8+^DvyC|+vkJxMKX zwOW$6C=p6uBcc+-Qj{u6(Z*ID;r-@jZjU)<%*;36d^7)>Riyn*MH+yYvmk|I^T5_o zccR`!9mL!X7S3Vr8d_q-^kcxp{s{-Onp^iXre(ab_FlvrD_kpo1s47m3Tgw z!`@S_d>QKv9>sin4oGLFpY~=Dhw4(toW$EQv{7@p2dw9XZSb)bKjm%19xV-=UV>*W5#6{=fE-UsYY{D0)uS7Y?Ph zaK&1o6Yj#>e-os+`Xq+{y_GPBp#XXV5S#!ujNW_(y%F*z7yCDYSK!@&cNpHs@P4IE zQoXfs9)Ncv`ttqQ7;snBx1uBOeiSxj2gDs~P z3xh27u^uP+H;8;hEF!jL@g=n8)9*~2%B+cFU(oqUV7FD{UvS66n@_afgLjIi*kFbR z(U?VDiT_GnsZV?c{AUD4F!TxBHPm8XvLHd0sof&~98Nk%wPbcNeh-K&;UOp*8z&{)~h{Pl7#oex7W4ofBM05hQC{}k@S!1%!@3_$E)G|Oce9w zpjYu+X08*(s^|~qcb@;Y^IT?OU_0>~qyZu-5zLL;VJGPa>Y)WJtwnUEF871Ci{3TJ zv%tc5u(R;{5x+wx8txG|e-g9lH<9sU6mq zWD)!&%!zft{h1M4itZq|SDF1-vEZk4nlWQ_=e_ql;6p^t5|_y#SOo{9Gn`L6g;0v( zWe82AKT#Kc1n#e*4bgZ6|843&6nhLd8%*pv-1^k#(c38xQTO{5yu1`A5l&Q5ArFGw zf_Q}9Dta>+yht6YPcj#-J4@yvCblDQ@)keqdR_Yr@dY|&R==;O3oC&7E|feSj+_(GMZ+2k*n&7&rd!s(+9)ern-j zNO24u2M<70Y!3Y~fh~} z{QESIvqbYX#Fy}w;eG?JE1pOHE9S;9^Cfrz^+8-Lo&ICA2h!_7OyH93U>JWzXDETf z5AVp}FFLe~ZVf~)2JV9|Aa|m7TF;m1E97So-Ax=zT)^uU2G3zT(CkXFUuRb9Tel55 zFVdUg%xA?G6r))1VO~mM6YD^wyu(_tT4={L|DL!{r4}kLmvv!ayQ$ORN9y{moYN9t zLT@}9c9OTjQ^*~53~jN6;N8hTke^F!hOkE$-X)%@aSjxh|42`G$fvyL0 z5A-N!@O9+gJXSh0KfvitUPzvzoFB=rviKtParj@+w|~Ww5CgDC7agb3gF4nu;BRFN ztS0{)feZw;(sNit@HX^c1D^tT7>%2{P&ntQ^Oavr%%VO3x7;BhpD`ynUP5wbmi&dM zf}Q3GVZIi5Y$N}q5ZyeYh zxH$|?*265sY7W|oV0-ctQ zw3xv@L?4K)5V)@gJp}s+P6Yf8L=SkkII5QVD|%7n8^Fg=?_=&Q@+NwK{GOxOTsZf^ z?Y|$~jN%yN?-CIZUmnBbutfE{deu_e|`9 zdz|_LTrqd*5@u@Y&0`r^$z9rhkHg3olWdcy_en&<~^D9!t3K=M|9>iy&(He_GbciRB<6a zfV`e-6T#b%e@o8-9)e#`0Z;kDj}_1l(&d{u%7gwB>Lhx{RCA;*_fekA^&;;FKFA8G zC50CYYjvPR7;3}qSMsr<@lzF(b~yZ(dFfM#y@*~cUxLo-=&j?JJ8%uq>v9pEt4lf{b^#%=RQg5m#O9HAu1ihfU=I)%>o0vo#p0PW(D}XY z$65VoMMC=;=ow@)RLWP^mQX)tERGvX_0CYZJ>m9aE{7;qNN)zwi#6xSJHzQgT~6JT zxCs9ZEKvEBrunX>yuxpNtZU#0$bNmKE#ybwZ3dsOXYb^Wdh~5t`?7lzoLO)efyI%p zBvukfsZJ+m0@-s3Oza-`K{R`THzMy`$E$l+ucPp(7Qs}6Ugrfkr^^y)u7bRhrL7r$ z8%`Ge6OJK`YrxI$KG(UT<3|F!~udJkeWfu|WAMT?uf2h8q{g(YQ?P zs{_&WO7sbP!4Z2>7fc=LiTzijH*?OifZ2_DcsH=NswLdP93vL4Gv)HPcVED4JV+PV z8N3Id;+O)4Cm>RVf59Ph>`j&s8`6JMg+>tHVZI%U)0rt!T>b)8lS4%>QCH2#)hpt9)@lm6ZJFzh z8dnc>NvSvc;TS zx5ON8$#gtfrd>P4cH@-My34Y}K}L}6je1VG4ZOl*Cz\n" "MIME-Version: 1.0\n" @@ -72,8 +72,8 @@ msgstr "Attention: Impossible de cr #: pcbnew/gen_modules_placefile.cpp:87 #: pcbnew/gen_modules_placefile.cpp:98 #: pcbnew/gen_modules_placefile.cpp:251 -#: pcbnew/export_gencad.cpp:83 #: pcbnew/plothpgl.cpp:67 +#: pcbnew/export_gencad.cpp:83 #: eeschema/plothpgl.cpp:560 #: eeschema/plotps.cpp:389 #: cvpcb/genequiv.cpp:42 @@ -231,10 +231,10 @@ msgstr "Controle la capture du curseur pcb quand le curseuir souris est sur le p #: pcbnew/dialog_pad_edit.cpp:217 #: pcbnew/dialog_initpcb.cpp:161 #: pcbnew/dialog_edit_mod_text.cpp:213 -#: pcbnew/dialog_track_options.cpp:212 #: pcbnew/dialog_display_options.cpp:282 #: pcbnew/swap_layers.cpp:220 #: pcbnew/set_grid.cpp:171 +#: pcbnew/dialog_track_options.cpp:322 #: pcbnew/dialog_drc.cpp:549 #: eeschema/symbtext.cpp:174 #: eeschema/dialog_options.cpp:274 @@ -259,12 +259,11 @@ msgstr "&OK" #: pcbnew/dialog_netlist.cpp:189 #: pcbnew/dialog_initpcb.cpp:164 #: pcbnew/dialog_edit_mod_text.cpp:217 -#: pcbnew/dialog_track_options.cpp:216 #: pcbnew/dialog_display_options.cpp:286 #: pcbnew/swap_layers.cpp:224 #: pcbnew/set_grid.cpp:176 -#: pcbnew/zones.cpp:219 -#: pcbnew/dialog_zones_by_polygon.cpp:204 +#: pcbnew/dialog_zones_by_polygon.cpp:205 +#: pcbnew/dialog_track_options.cpp:328 #: pcbnew/dialog_drc.cpp:545 #: eeschema/plothpgl.cpp:274 #: eeschema/symbtext.cpp:178 @@ -356,7 +355,7 @@ msgstr "3D Caract" #: pcbnew/cotation.cpp:105 #: pcbnew/mirepcb.cpp:99 #: pcbnew/set_color.cpp:353 -#: pcbnew/dialog_zones_by_polygon.cpp:201 +#: pcbnew/dialog_zones_by_polygon.cpp:202 #: pcbnew/sel_layer.cpp:158 #: pcbnew/sel_layer.cpp:316 #: pcbnew/dialog_gendrill.cpp:278 @@ -376,8 +375,8 @@ msgstr "OK" #: pcbnew/pcbtexte.cpp:116 #: pcbnew/modedit_onclick.cpp:203 #: pcbnew/modedit_onclick.cpp:235 -#: pcbnew/onrightclick.cpp:145 -#: pcbnew/onrightclick.cpp:159 +#: pcbnew/onrightclick.cpp:157 +#: pcbnew/onrightclick.cpp:171 #: pcbnew/block.cpp:154 #: pcbnew/cotation.cpp:109 #: pcbnew/mirepcb.cpp:103 @@ -454,13 +453,13 @@ msgstr "Cuivre" #: pcbnew/class_text_mod.cpp:369 #: pcbnew/class_text_mod.cpp:373 #: pcbnew/class_pcb_text.cpp:177 -#: pcbnew/class_pad.cpp:1062 #: pcbnew/class_track.cpp:832 #: pcbnew/class_module.cpp:1217 #: pcbnew/sel_layer.cpp:145 +#: pcbnew/class_pad.cpp:970 #: pcbnew/class_drawsegment.cpp:175 #: pcbnew/class_zone.cpp:61 -#: pcbnew/class_zone.cpp:512 +#: pcbnew/class_zone.cpp:523 #: gerbview/affiche.cpp:109 msgid "Layer" msgstr "Couche" @@ -484,8 +483,8 @@ msgstr "User" #: pcbnew/dialog_edit_module.cpp:246 #: pcbnew/class_text_mod.cpp:383 #: pcbnew/class_pcb_text.cpp:188 -#: pcbnew/class_pad.cpp:1104 #: pcbnew/class_module.cpp:1240 +#: pcbnew/class_pad.cpp:1012 #: eeschema/affiche.cpp:117 #: gerbview/affiche.cpp:49 msgid "Orient" @@ -635,23 +634,65 @@ msgstr "Librairie: " msgid "Modules (%d items)" msgstr "Modules (%d éléments)" -#: pcbnew/pcbcfg.cpp:68 -#: eeschema/eeconfig.cpp:58 -#: cvpcb/menucfg.cpp:170 -msgid "Read config file" -msgstr "Lire config" +#: pcbnew/edit.cpp:177 +#: pcbnew/editmod.cpp:45 +msgid "Module Editor" +msgstr "Ouvrir Editeur de modules" -#: pcbnew/pcbcfg.cpp:81 -#: cvpcb/menucfg.cpp:182 -#, c-format -msgid "File %s not found" -msgstr " fichier %s non trouvé" +#: pcbnew/edit.cpp:257 +msgid "Add Tracks" +msgstr "Addition de pistes" -#: pcbnew/pcbcfg.cpp:196 -#: eeschema/eeconfig.cpp:192 -#: cvpcb/cfg.cpp:71 -msgid "Save preferences" -msgstr "Sauver préférences" +#: pcbnew/edit.cpp:266 +msgid "Add Zones" +msgstr "Addition de Zones" + +#: pcbnew/edit.cpp:268 +msgid "Warning: Display Zone is OFF!!!" +msgstr "Attention: Affichage zones désactivé !!!" + +#: pcbnew/edit.cpp:275 +msgid "Add Layer Alignment Target" +msgstr "Ajouter Mire de superposition" + +#: pcbnew/edit.cpp:279 +msgid "Adjust Zero" +msgstr "Ajuster Zéro" + +#: pcbnew/edit.cpp:285 +msgid "Add Graphic" +msgstr "Addition éléments graphiques" + +#: pcbnew/edit.cpp:289 +#: pcbnew/tool_modedit.cpp:180 +#: eeschema/schedit.cpp:315 +#: eeschema/libframe.cpp:503 +#: gerbview/tool_gerber.cpp:385 +msgid "Add Text" +msgstr "Ajout de Texte" + +#: pcbnew/edit.cpp:293 +msgid "Add Modules" +msgstr "Addition de Modules" + +#: pcbnew/edit.cpp:297 +msgid "Add Dimension" +msgstr "Ajout de cotes" + +#: pcbnew/edit.cpp:305 +msgid "Net Highlight" +msgstr "Surbrillance des équipotentielles" + +#: pcbnew/edit.cpp:309 +msgid "Local Ratsnest" +msgstr "Monter le chevelu général" + +#: pcbnew/edit.cpp:533 +#: pcbnew/modedit.cpp:424 +#: eeschema/schedit.cpp:455 +#: eeschema/libframe.cpp:579 +msgid "Delete item" +msgstr "Suppression d'éléments" #: pcbnew/dialog_setup_libs.cpp:97 #: eeschema/dialog_eeschema_config.cpp:105 @@ -975,214 +1016,214 @@ msgstr "Ajout de stub (arc)" msgid "Add Polynomial Shape" msgstr "Ajout Forme polynomiale" -#: pcbnew/pcbplot.cpp:115 -#: pcbnew/pcbplot.cpp:205 +#: pcbnew/pcbplot.cpp:120 +#: pcbnew/pcbplot.cpp:210 #: gerbview/tool_gerber.cpp:90 msgid "Plot" msgstr "Tracer" -#: pcbnew/pcbplot.cpp:145 +#: pcbnew/pcbplot.cpp:150 msgid "Plot Format" msgstr "Format de tracé" -#: pcbnew/pcbplot.cpp:171 +#: pcbnew/pcbplot.cpp:176 msgid "Spot min" msgstr "Spot min" -#: pcbnew/pcbplot.cpp:175 +#: pcbnew/pcbplot.cpp:180 msgid "Pen Size" msgstr "Diam plume" -#: pcbnew/pcbplot.cpp:179 +#: pcbnew/pcbplot.cpp:184 msgid "Pen Speed (cm/s)" msgstr "Vitesse plume (cm/s)" -#: pcbnew/pcbplot.cpp:181 +#: pcbnew/pcbplot.cpp:186 msgid "Set pen speed in cm/s" msgstr "Ajuster Vitesse plume en centimetres par seconde" -#: pcbnew/pcbplot.cpp:183 +#: pcbnew/pcbplot.cpp:188 msgid "Pen Ovr" msgstr "Recouvrement" -#: pcbnew/pcbplot.cpp:185 +#: pcbnew/pcbplot.cpp:190 msgid "Set plot overlay for filling" msgstr "Ajuste recouvrement des tracés pour les remplissages" -#: pcbnew/pcbplot.cpp:187 +#: pcbnew/pcbplot.cpp:192 msgid "Lines Width" msgstr "Epaiss. lignes" -#: pcbnew/pcbplot.cpp:189 +#: pcbnew/pcbplot.cpp:194 msgid "Set width for lines in Line plot mode" msgstr "Ajuster l'épaisseur des traits en Mode tracé filaire" -#: pcbnew/pcbplot.cpp:193 +#: pcbnew/pcbplot.cpp:198 msgid "Absolute" msgstr "Absolu" -#: pcbnew/pcbplot.cpp:193 +#: pcbnew/pcbplot.cpp:198 msgid "Auxiliary axis" msgstr "Axe Auxiliaire" -#: pcbnew/pcbplot.cpp:195 +#: pcbnew/pcbplot.cpp:200 msgid "Plot Origin" msgstr "Origine des coord de tracé" -#: pcbnew/pcbplot.cpp:209 +#: pcbnew/pcbplot.cpp:214 #: pcbnew/xchgmod.cpp:137 #: share/zoom.cpp:448 msgid "Close" msgstr "Fermer" -#: pcbnew/pcbplot.cpp:213 +#: pcbnew/pcbplot.cpp:218 msgid "Save options" msgstr "Sauver options" -#: pcbnew/pcbplot.cpp:217 +#: pcbnew/pcbplot.cpp:222 msgid "Create Drill File" msgstr "Créer Fichier de percage" -#: pcbnew/pcbplot.cpp:228 +#: pcbnew/pcbplot.cpp:234 #: share/dialog_print.cpp:150 msgid "X Scale Adjust" msgstr "Ajustage Echelle X" -#: pcbnew/pcbplot.cpp:229 +#: pcbnew/pcbplot.cpp:235 #: share/wxprint.cpp:170 msgid "Set X scale adjust for exact scale plotting" msgstr "Ajuster échelle X pour traçage à l'échelle exacte" -#: pcbnew/pcbplot.cpp:230 +#: pcbnew/pcbplot.cpp:236 #: share/dialog_print.cpp:156 msgid "Y Scale Adjust" msgstr "Ajustage Echelle Y" -#: pcbnew/pcbplot.cpp:231 +#: pcbnew/pcbplot.cpp:237 #: share/wxprint.cpp:171 msgid "Set Y scale adjust for exact scale plotting" msgstr "Ajuster échelle Y pour traçage à l'échelle exacte" -#: pcbnew/pcbplot.cpp:233 +#: pcbnew/pcbplot.cpp:239 msgid "Plot Negative" msgstr "Tracé en Negatif" -#: pcbnew/pcbplot.cpp:257 -msgid "Exclude Edges Pcb layer" +#: pcbnew/pcbplot.cpp:264 +msgid "Exclude Edges Pcb Layer" msgstr "Exclure Couche Contours PCB" -#: pcbnew/pcbplot.cpp:260 +#: pcbnew/pcbplot.cpp:267 msgid "Exclude contents of Edges Pcb layer from all other layers" msgstr "Exclure les tracés contour PCB des autres couches" -#: pcbnew/pcbplot.cpp:266 +#: pcbnew/pcbplot.cpp:273 #: eeschema/plotps.cpp:191 #: share/svg_print.cpp:200 #: share/dialog_print.cpp:174 msgid "Print Sheet Ref" msgstr "Imprimer cartouche" -#: pcbnew/pcbplot.cpp:275 +#: pcbnew/pcbplot.cpp:282 msgid "Print Pads on Silkscreen" msgstr "Pads sur Sérigraphie" -#: pcbnew/pcbplot.cpp:278 +#: pcbnew/pcbplot.cpp:285 msgid "Enable/disable print/plot pads on Silkscreen layers" msgstr "Active/désactive tracé des pastilles sur les couches de sérigraphie" -#: pcbnew/pcbplot.cpp:282 +#: pcbnew/pcbplot.cpp:289 msgid "Always Print Pads" msgstr "Toujour tracer pads" -#: pcbnew/pcbplot.cpp:284 +#: pcbnew/pcbplot.cpp:291 msgid "Force print/plot pads on ALL layers" msgstr "Force le tracé des pastilles sur TOUTES les couches" -#: pcbnew/pcbplot.cpp:288 +#: pcbnew/pcbplot.cpp:295 msgid "Print Module Value" msgstr "Imprimer Valeur Module" -#: pcbnew/pcbplot.cpp:291 +#: pcbnew/pcbplot.cpp:298 msgid "Enable/disable print/plot module value on Silkscreen layers" msgstr "Active/désactive le tracé des textes valeurs des modules sur couches de sérigraphie" -#: pcbnew/pcbplot.cpp:294 +#: pcbnew/pcbplot.cpp:301 msgid "Print Module Reference" msgstr "Imprimer Référence Module" -#: pcbnew/pcbplot.cpp:297 +#: pcbnew/pcbplot.cpp:304 msgid "Enable/disable print/plot module reference on Silkscreen layers" msgstr "Active/désactive le tracé des textes référence des modules sur couches de sérigraphie" -#: pcbnew/pcbplot.cpp:301 +#: pcbnew/pcbplot.cpp:308 msgid "Print other Module texts" msgstr "Imprimer autres textes module" -#: pcbnew/pcbplot.cpp:304 +#: pcbnew/pcbplot.cpp:311 msgid "Enable/disable print/plot module field texts on Silkscreen layers" msgstr "Active/désactive le tracé des textes des champs des modules sur couches de sérigraphie" -#: pcbnew/pcbplot.cpp:308 +#: pcbnew/pcbplot.cpp:315 msgid "Force Print Invisible Texts" msgstr "Force tracé textes invisibles" -#: pcbnew/pcbplot.cpp:311 +#: pcbnew/pcbplot.cpp:318 msgid "Force print/plot module invisible texts on Silkscreen layers" msgstr "Force le tracé des textes invisibles sur couches de sérigraphie" -#: pcbnew/pcbplot.cpp:315 +#: pcbnew/pcbplot.cpp:322 msgid "No Drill mark" msgstr "Pas de marque" -#: pcbnew/pcbplot.cpp:315 +#: pcbnew/pcbplot.cpp:322 msgid "Small mark" msgstr "Petite marque" -#: pcbnew/pcbplot.cpp:315 +#: pcbnew/pcbplot.cpp:322 msgid "Real Drill" msgstr "Perçage réel" -#: pcbnew/pcbplot.cpp:317 +#: pcbnew/pcbplot.cpp:324 msgid "Pads Drill Opt" msgstr "Options perçage" -#: pcbnew/pcbplot.cpp:323 +#: pcbnew/pcbplot.cpp:330 msgid "Auto scale" msgstr "Ech. auto" -#: pcbnew/pcbplot.cpp:323 +#: pcbnew/pcbplot.cpp:330 msgid "Scale 1" msgstr "Echelle 1" -#: pcbnew/pcbplot.cpp:323 +#: pcbnew/pcbplot.cpp:330 msgid "Scale 1.5" msgstr "Echelle 1,5" -#: pcbnew/pcbplot.cpp:323 +#: pcbnew/pcbplot.cpp:330 #: share/dialog_print.cpp:142 msgid "Scale 2" msgstr "Echelle 2" -#: pcbnew/pcbplot.cpp:323 +#: pcbnew/pcbplot.cpp:330 #: share/dialog_print.cpp:143 msgid "Scale 3" msgstr "Echelle 3" -#: pcbnew/pcbplot.cpp:325 +#: pcbnew/pcbplot.cpp:332 msgid "Scale Opt" msgstr "Echelle" -#: pcbnew/pcbplot.cpp:330 +#: pcbnew/pcbplot.cpp:337 #: 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/dialog_zones_by_polygon.cpp:167 +#: pcbnew/dialog_zones_by_polygon.cpp:168 #: gerbview/options.cpp:321 msgid "Line" msgstr "Ligne" -#: pcbnew/pcbplot.cpp:330 +#: pcbnew/pcbplot.cpp:337 #: pcbnew/dialog_display_options.cpp:192 #: pcbnew/dialog_display_options.cpp:222 #: pcbnew/dialog_display_options.cpp:230 @@ -1194,7 +1235,7 @@ msgstr "Ligne" msgid "Filled" msgstr "Plein" -#: pcbnew/pcbplot.cpp:330 +#: pcbnew/pcbplot.cpp:337 #: pcbnew/dialog_display_options.cpp:191 #: pcbnew/dialog_display_options.cpp:223 #: pcbnew/dialog_display_options.cpp:231 @@ -1205,27 +1246,27 @@ msgstr "Plein" msgid "Sketch" msgstr "Contour" -#: pcbnew/pcbplot.cpp:331 +#: pcbnew/pcbplot.cpp:338 msgid "Plot Mode" msgstr "Mode de Tracé" -#: pcbnew/pcbplot.cpp:338 +#: pcbnew/pcbplot.cpp:345 msgid "Plot Mirror" msgstr "Tracé Miroir" -#: pcbnew/pcbplot.cpp:343 +#: pcbnew/pcbplot.cpp:350 msgid "Vias on Mask" msgstr "Vias sur masque" -#: pcbnew/pcbplot.cpp:346 +#: pcbnew/pcbplot.cpp:353 msgid "Print/plot vias on mask layers. They are in this case not protected" msgstr "Trace vias sur vernis épargne. Elles seront non protégées" -#: pcbnew/pcbplot.cpp:350 +#: pcbnew/pcbplot.cpp:357 msgid "Org = Centre" msgstr "Org = Centre" -#: pcbnew/pcbplot.cpp:352 +#: pcbnew/pcbplot.cpp:359 msgid "Draw origin ( 0,0 ) in sheet center" msgstr "Origine des tracés au centre de la feuille" @@ -1265,9 +1306,9 @@ msgid "Text" msgstr "Texte" #: pcbnew/class_text_mod.cpp:350 -#: pcbnew/class_pad.cpp:973 #: pcbnew/class_module.cpp:1243 #: pcbnew/class_edge_mod.cpp:285 +#: pcbnew/class_pad.cpp:881 #: cvpcb/setvisu.cpp:31 msgid "Module" msgstr "Module" @@ -1277,7 +1318,7 @@ msgstr "Module" #: pcbnew/class_track.cpp:776 #: pcbnew/class_drawsegment.cpp:159 #: pcbnew/class_zone.cpp:59 -#: pcbnew/class_zone.cpp:483 +#: pcbnew/class_zone.cpp:494 #: gerbview/affiche.cpp:93 msgid "Type" msgstr "Type" @@ -1326,14 +1367,14 @@ msgstr "Epaisseur" #: pcbnew/class_text_mod.cpp:389 #: pcbnew/class_pcb_text.cpp:194 -#: pcbnew/class_pad.cpp:1075 +#: pcbnew/class_pad.cpp:983 #: gerbview/affiche.cpp:55 msgid "H Size" msgstr "Taille H" #: pcbnew/class_text_mod.cpp:392 #: pcbnew/class_pcb_text.cpp:197 -#: pcbnew/class_pad.cpp:1079 +#: pcbnew/class_pad.cpp:987 #: gerbview/affiche.cpp:58 msgid "V Size" msgstr "Taille V" @@ -1689,7 +1730,7 @@ msgid "Print Module" msgstr "Imprimer Module" #: pcbnew/tool_modedit.cpp:115 -#: pcbnew/tool_pcb.cpp:269 +#: pcbnew/tool_pcb.cpp:268 #: eeschema/tool_sch.cpp:108 #: eeschema/tool_lib.cpp:170 #: gerbview/tool_gerber.cpp:271 @@ -1697,7 +1738,7 @@ msgid "zoom +" msgstr "zoom +" #: pcbnew/tool_modedit.cpp:119 -#: pcbnew/tool_pcb.cpp:273 +#: pcbnew/tool_pcb.cpp:272 #: eeschema/tool_sch.cpp:112 #: eeschema/tool_lib.cpp:174 #: gerbview/tool_gerber.cpp:278 @@ -1705,7 +1746,7 @@ msgid "zoom -" msgstr "zoom -" #: pcbnew/tool_modedit.cpp:123 -#: pcbnew/tool_pcb.cpp:277 +#: pcbnew/tool_pcb.cpp:276 #: eeschema/tool_sch.cpp:116 #: eeschema/tool_lib.cpp:178 #: gerbview/tool_gerber.cpp:285 @@ -1713,7 +1754,7 @@ msgid "redraw" msgstr "Redessin" #: pcbnew/tool_modedit.cpp:128 -#: pcbnew/tool_pcb.cpp:282 +#: pcbnew/tool_pcb.cpp:281 #: eeschema/tool_sch.cpp:121 #: eeschema/tool_lib.cpp:184 #: gerbview/tool_gerber.cpp:296 @@ -1737,36 +1778,28 @@ msgid "Add Pads" msgstr "Addition de \"pins\"" #: pcbnew/tool_modedit.cpp:168 -#: pcbnew/tool_pcb.cpp:433 +#: pcbnew/tool_pcb.cpp:434 #: eeschema/tool_sch.cpp:226 msgid "Add graphic line or polygon" msgstr "Addition de lignes ou polygones graphiques" #: pcbnew/tool_modedit.cpp:172 -#: pcbnew/tool_pcb.cpp:437 +#: pcbnew/tool_pcb.cpp:438 msgid "Add graphic circle" msgstr "Addition de graphiques (Cercle)" #: pcbnew/tool_modedit.cpp:176 -#: pcbnew/tool_pcb.cpp:441 +#: pcbnew/tool_pcb.cpp:442 msgid "Add graphic arc" msgstr "Addition de graphiques (Arc de Cercle)" -#: pcbnew/tool_modedit.cpp:180 -#: pcbnew/edit.cpp:288 -#: eeschema/schedit.cpp:315 -#: eeschema/libframe.cpp:503 -#: gerbview/tool_gerber.cpp:385 -msgid "Add Text" -msgstr "Ajout de Texte" - #: pcbnew/tool_modedit.cpp:185 #: pcbnew/modedit.cpp:410 msgid "Place anchor" msgstr "Place Ancre" #: pcbnew/tool_modedit.cpp:190 -#: pcbnew/tool_pcb.cpp:459 +#: pcbnew/tool_pcb.cpp:460 #: eeschema/tool_sch.cpp:235 #: eeschema/tool_lib.cpp:93 #: gerbview/tool_gerber.cpp:393 @@ -1774,41 +1807,41 @@ msgid "Delete items" msgstr "Suppression d'éléments" #: pcbnew/tool_modedit.cpp:212 -#: pcbnew/tool_pcb.cpp:333 +#: pcbnew/tool_pcb.cpp:334 #: eeschema/tool_sch.cpp:257 #: gerbview/tool_gerber.cpp:417 msgid "Display Grid OFF" msgstr "Suppression de l'affichage de la grille" #: pcbnew/tool_modedit.cpp:216 -#: pcbnew/tool_pcb.cpp:336 +#: pcbnew/tool_pcb.cpp:337 #: gerbview/tool_gerber.cpp:423 msgid "Display Polar Coord ON" msgstr "Activer affichage coord Polaires" #: pcbnew/tool_modedit.cpp:220 -#: pcbnew/tool_pcb.cpp:338 +#: pcbnew/tool_pcb.cpp:339 #: eeschema/tool_sch.cpp:261 #: gerbview/tool_gerber.cpp:427 msgid "Units = Inch" msgstr "Unités = pouce" #: pcbnew/tool_modedit.cpp:224 -#: pcbnew/tool_pcb.cpp:340 +#: pcbnew/tool_pcb.cpp:341 #: eeschema/tool_sch.cpp:265 #: gerbview/tool_gerber.cpp:431 msgid "Units = mm" msgstr "Unités = mm" #: pcbnew/tool_modedit.cpp:230 -#: pcbnew/tool_pcb.cpp:343 +#: pcbnew/tool_pcb.cpp:344 #: eeschema/tool_sch.cpp:269 #: gerbview/tool_gerber.cpp:437 msgid "Change Cursor Shape" msgstr "Sélection de la forme du curseur" #: pcbnew/tool_modedit.cpp:238 -#: pcbnew/tool_pcb.cpp:365 +#: pcbnew/tool_pcb.cpp:366 msgid "Show Pads Sketch" msgstr "Afficher pastilles en contour" @@ -1821,7 +1854,7 @@ msgid "Show Edges Sketch" msgstr "Afficher Modules en contour" #: pcbnew/tool_modedit.cpp:285 -#: pcbnew/tool_pcb.cpp:566 +#: pcbnew/tool_pcb.cpp:580 #: eeschema/plotps.cpp:169 #: share/zoom.cpp:367 msgid "Auto" @@ -1843,48 +1876,48 @@ msgid "Grid %.3f" msgstr "Grille %.3f" #: pcbnew/tool_modedit.cpp:314 -#: pcbnew/tool_pcb.cpp:600 +#: pcbnew/tool_pcb.cpp:614 msgid "User Grid" msgstr "Grille perso" -#: pcbnew/gendrill.cpp:298 +#: pcbnew/gendrill.cpp:308 msgid "Drill file" msgstr "Fichier de percage" -#: pcbnew/gendrill.cpp:316 -#: pcbnew/gendrill.cpp:779 +#: pcbnew/gendrill.cpp:323 +#: pcbnew/gendrill.cpp:789 #: pcbnew/plotps.cpp:51 #: pcbnew/xchgmod.cpp:642 msgid "Unable to create file " msgstr "Impossible de créer le fichier " -#: pcbnew/gendrill.cpp:368 +#: pcbnew/gendrill.cpp:378 #: pcbnew/dialog_gendrill.cpp:180 msgid "2:3" msgstr "2:3" -#: pcbnew/gendrill.cpp:369 +#: pcbnew/gendrill.cpp:379 #: pcbnew/dialog_gendrill.cpp:181 msgid "2:4" msgstr "2:4" -#: pcbnew/gendrill.cpp:374 +#: pcbnew/gendrill.cpp:384 msgid "3:2" msgstr "3:2" -#: pcbnew/gendrill.cpp:375 +#: pcbnew/gendrill.cpp:385 msgid "3:3" msgstr "3:3" -#: pcbnew/gendrill.cpp:718 +#: pcbnew/gendrill.cpp:728 msgid "Drill Map file" msgstr "Fichier Plan de perçage" -#: pcbnew/gendrill.cpp:733 +#: pcbnew/gendrill.cpp:743 msgid "Unable to create file" msgstr "Impossible de créer le fichier " -#: pcbnew/gendrill.cpp:764 +#: pcbnew/gendrill.cpp:774 msgid "Drill Report file" msgstr "Fichier rapport de perçage:" @@ -1928,9 +1961,28 @@ msgstr "Valeur incorrecte pour offset du pad" msgid "Unknown netname, no change" msgstr "Net inconnu, pas de changement" -#: pcbnew/export_gencad.cpp:69 -msgid "GenCAD file:" -msgstr "Fichier GenCAD:" +#: pcbnew/specctra.cpp:92 +#: pcbnew/specctra.cpp:99 +msgid "Expecting" +msgstr "Attendu" + +#: pcbnew/specctra.cpp:106 +#: pcbnew/specctra.cpp:113 +msgid "Unexpected" +msgstr "Inattendu" + +#: pcbnew/specctra.cpp:272 +#: pcbnew/specctra.cpp:302 +#: pcbnew/specctra.cpp:3395 +#: pcbnew/specctra.cpp:3420 +#, c-format +msgid "Unable to open file \"%s\"" +msgstr "Ne peut pas ouvrirle fichier \"%s\"" + +#: pcbnew/specctra.cpp:3348 +#, c-format +msgid "System file error writing to file \"%s\"" +msgstr "Erreur système sur écriture fichier \"%s\"" #: pcbnew/class_pcb_text.cpp:173 #: gerbview/affiche.cpp:29 @@ -1942,10 +1994,6 @@ msgstr "COTATION" msgid "PCB Text" msgstr "Texte Pcb" -#: pcbnew/ioascii.cpp:167 -msgid "Error: Unexpected end of file !" -msgstr "Erreur: Fin de fichier inattendue !" - #: pcbnew/dialog_netlist.cpp:135 #: pcbnew/class_board_item.cpp:75 #: eeschema/onrightclick.cpp:320 @@ -1969,9 +2017,9 @@ msgid "Keep" msgstr "Garder" #: pcbnew/dialog_netlist.cpp:143 -#: pcbnew/onrightclick.cpp:599 -#: pcbnew/onrightclick.cpp:772 -#: pcbnew/onrightclick.cpp:869 +#: pcbnew/onrightclick.cpp:612 +#: pcbnew/onrightclick.cpp:785 +#: pcbnew/onrightclick.cpp:882 #: eeschema/edit_component_in_lib.cpp:239 #: eeschema/edit_component_in_lib.cpp:320 msgid "Delete" @@ -2102,37 +2150,59 @@ msgstr "Invisible" msgid "Value:" msgstr "Valeur:" -#: pcbnew/class_pad.cpp:801 -#: pcbnew/class_pad.cpp:887 -msgid "Unknown Pad shape" -msgstr "Forme pad inconnue" +#: pcbnew/initpcb.cpp:125 +msgid "Current Board will be lost ?" +msgstr "Le C.I. courant sera perdu ?" -#: pcbnew/class_pad.cpp:976 -msgid "RefP" -msgstr "RefP" +#: pcbnew/initpcb.cpp:215 +msgid "Delete Zones ?" +msgstr "Effacer Zones ?" -#: pcbnew/class_pad.cpp:979 -#: pcbnew/class_board_item.cpp:35 -msgid "Net" -msgstr "Net" +#: pcbnew/initpcb.cpp:243 +msgid "Delete Board edges ?" +msgstr "Effacement contour PCB" -#: pcbnew/class_pad.cpp:1085 -#: pcbnew/class_track.cpp:847 -#: pcbnew/class_track.cpp:852 -msgid "Drill" -msgstr "Perçage" +#: pcbnew/initpcb.cpp:248 +msgid "Delete draw items?" +msgstr "Suppression éléments graphiques?" -#: pcbnew/class_pad.cpp:1093 -msgid "Drill X / Y" -msgstr "Perçage X/Y" +#: pcbnew/initpcb.cpp:290 +#: gerbview/initpcb.cpp:150 +msgid "Delete Tracks?" +msgstr "Effacer Pistes ?" -#: pcbnew/class_pad.cpp:1108 -msgid "X Pos" -msgstr "X Pos" +#: pcbnew/initpcb.cpp:313 +msgid "Delete Modules?" +msgstr "Effacement des Modules?" -#: pcbnew/class_pad.cpp:1112 -msgid "Y pos" -msgstr "Y pos" +#: pcbnew/initpcb.cpp:336 +#: 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 @@ -2172,15 +2242,8 @@ msgstr "Ajouter Pastilles" msgid "Add Drawing" msgstr "Ajout d'éléments graphiques" -#: pcbnew/modedit.cpp:424 -#: pcbnew/edit.cpp:540 -#: eeschema/schedit.cpp:455 -#: eeschema/libframe.cpp:579 -msgid "Delete item" -msgstr "Suppression d'éléments" - #: pcbnew/modedit_onclick.cpp:207 -#: pcbnew/onrightclick.cpp:150 +#: pcbnew/onrightclick.cpp:162 #: eeschema/onrightclick.cpp:126 #: eeschema/libedit_onrightclick.cpp:53 #: gerbview/onrightclick.cpp:42 @@ -2188,7 +2251,7 @@ msgid "End Tool" msgstr "Fin Outil" #: pcbnew/modedit_onclick.cpp:217 -#: pcbnew/onrightclick.cpp:473 +#: pcbnew/onrightclick.cpp:486 #: eeschema/onrightclick.cpp:587 #: eeschema/libedit_onrightclick.cpp:237 #: gerbview/onrightclick.cpp:51 @@ -2196,13 +2259,13 @@ msgid "Cancel Block" msgstr "Annuler Bloc" #: pcbnew/modedit_onclick.cpp:219 -#: pcbnew/onrightclick.cpp:475 +#: pcbnew/onrightclick.cpp:488 #: gerbview/onrightclick.cpp:52 msgid "Zoom Block (Midd butt drag)" msgstr "Zoom Bloc (drag+bouton milieu)" #: pcbnew/modedit_onclick.cpp:222 -#: pcbnew/onrightclick.cpp:478 +#: pcbnew/onrightclick.cpp:491 #: eeschema/onrightclick.cpp:595 #: eeschema/libedit_onrightclick.cpp:245 #: gerbview/onrightclick.cpp:54 @@ -2210,7 +2273,7 @@ msgid "Place Block" msgstr "Place Bloc" #: pcbnew/modedit_onclick.cpp:224 -#: pcbnew/onrightclick.cpp:480 +#: pcbnew/onrightclick.cpp:493 #: eeschema/onrightclick.cpp:604 #: eeschema/libedit_onrightclick.cpp:251 msgid "Copy Block (shift + drag mouse)" @@ -2221,18 +2284,18 @@ msgid "Mirror Block (alt + drag mouse)" msgstr "Bloc Miroir (alt + drag mouse)" #: pcbnew/modedit_onclick.cpp:228 -#: pcbnew/onrightclick.cpp:484 +#: pcbnew/onrightclick.cpp:497 msgid "Rotate Block (ctrl + drag mouse)" msgstr "Rotation Bloc (ctrl + drag mouse)" #: pcbnew/modedit_onclick.cpp:230 -#: pcbnew/onrightclick.cpp:486 +#: pcbnew/onrightclick.cpp:499 msgid "Delete Block (shift+ctrl + drag mouse)" msgstr "Effacement Bloc (shift+ctrl + drag mouse)" #: pcbnew/modedit_onclick.cpp:252 -#: pcbnew/onrightclick.cpp:766 -#: pcbnew/onrightclick.cpp:863 +#: pcbnew/onrightclick.cpp:779 +#: pcbnew/onrightclick.cpp:876 msgid "Rotate" msgstr "Rotation" @@ -2257,17 +2320,17 @@ msgid "Move Pad" msgstr "Déplace Pad" #: pcbnew/modedit_onclick.cpp:274 -#: pcbnew/onrightclick.cpp:805 +#: pcbnew/onrightclick.cpp:818 msgid "Edit Pad" msgstr "Edit Pad" #: pcbnew/modedit_onclick.cpp:276 -#: pcbnew/onrightclick.cpp:809 +#: pcbnew/onrightclick.cpp:822 msgid "New Pad Settings" msgstr "Nouvelles Caract. Pads" #: pcbnew/modedit_onclick.cpp:278 -#: pcbnew/onrightclick.cpp:811 +#: pcbnew/onrightclick.cpp:824 msgid "Export Pad Settings" msgstr "Exporte Caract. Pads" @@ -2276,7 +2339,7 @@ msgid "delete Pad" msgstr "Supprimer Pad" #: pcbnew/modedit_onclick.cpp:285 -#: pcbnew/onrightclick.cpp:816 +#: pcbnew/onrightclick.cpp:829 msgid "Global Pad Settings" msgstr "Edition Globale des pads" @@ -2309,9 +2372,9 @@ msgid "Place edge" msgstr "Place contour" #: pcbnew/modedit_onclick.cpp:317 -#: pcbnew/onrightclick.cpp:734 -#: pcbnew/onrightclick.cpp:768 -#: pcbnew/onrightclick.cpp:865 +#: pcbnew/onrightclick.cpp:747 +#: pcbnew/onrightclick.cpp:781 +#: pcbnew/onrightclick.cpp:878 #: eeschema/onrightclick.cpp:313 msgid "Edit" msgstr "Editer" @@ -2348,7 +2411,7 @@ msgstr "Fichier" #: pcbnew/plotps.cpp:361 #: pcbnew/affiche.cpp:63 -#: pcbnew/class_board.cpp:412 +#: pcbnew/class_board.cpp:424 msgid "Vias" msgstr "Vias" @@ -2377,73 +2440,421 @@ msgstr "Pistes sur couches cuivre seulement" msgid "Cotation not authorized on Copper layers" msgstr "Cotation non autorisée sur Couches Cuivre" -#: pcbnew/dialog_track_options.cpp:134 -msgid "Vias:" -msgstr "Vias:" +#: pcbnew/onrightclick.cpp:76 +msgid "Auto Width" +msgstr "Epaisseur Automatique" -#: pcbnew/dialog_track_options.cpp:138 -msgid "Via Size" -msgstr "Diametre Via" +#: pcbnew/onrightclick.cpp:78 +msgid "Use the track width when starting on a track, otherwise the current track width" +msgstr "Ssi on démarre sur une piste existante, utiliser sa largeur, sinon utiliserlal largeur courante" -#: pcbnew/dialog_track_options.cpp:144 -msgid "Default Via Drill" -msgstr "Perçage vias par défaut" +#: pcbnew/onrightclick.cpp:92 +#, c-format +msgid "Track %.1f" +msgstr "Piste %.1f" -#: pcbnew/dialog_track_options.cpp:150 -msgid "Alternate Via Drill" -msgstr "Perçage vias alternatif" +#: pcbnew/onrightclick.cpp:94 +#, c-format +msgid "Track %.3f" +msgstr "Piste %.3f" -#: pcbnew/dialog_track_options.cpp:157 -#: pcbnew/pcbnew.h:291 -msgid "Through Via" -msgstr "Via Traversante" +#: pcbnew/onrightclick.cpp:112 +#, c-format +msgid "Via %.1f" +msgstr "Via %.1f" -#: pcbnew/dialog_track_options.cpp:158 -msgid "Blind or Buried Via " -msgstr "Via enterrée ou Aveugle" +#: pcbnew/onrightclick.cpp:114 +#, c-format +msgid "Via %.3f" +msgstr "Via %.3f" -#: pcbnew/dialog_track_options.cpp:159 -msgid "Default Via Type" -msgstr "Via par Défaut" +#: pcbnew/onrightclick.cpp:230 +msgid "Lock Module" +msgstr "Verrouiller Modules" -#: pcbnew/dialog_track_options.cpp:163 -#: pcbnew/dialog_gendrill.cpp:270 -msgid "Micro Vias:" -msgstr "Micro Vias:" +#: pcbnew/onrightclick.cpp:238 +msgid "Unlock Module" +msgstr "Déverrouiller Modules" -#: pcbnew/dialog_track_options.cpp:167 -msgid "Micro Via Size" -msgstr "Diametre Micro Via" +#: pcbnew/onrightclick.cpp:246 +msgid "Auto place Module" +msgstr "Auto place Module" -#: pcbnew/dialog_track_options.cpp:173 -msgid "Micro Via Drill" -msgstr "Perçage Micro Via" +#: pcbnew/onrightclick.cpp:252 +msgid "Autoroute" +msgstr "Autoroute" -#: pcbnew/dialog_track_options.cpp:181 -msgid "Allows Micro Vias" -msgstr "Autorise Micro Vias" +#: pcbnew/onrightclick.cpp:268 +msgid "Move Drawing" +msgstr "Déplace Tracé" -#: pcbnew/dialog_track_options.cpp:183 -#: pcbnew/dialog_track_options.cpp:185 -msgid "" -"Allows use of micro vias\n" -"They are very small vias only from an external copper layer to its near neightbour\n" -msgstr "" -"Autorise l'utilisation de micro vias\n" -"Ce sont de petites vias allant d'une couche externe a la plus proche couche interne uniquement\n" +#: pcbnew/onrightclick.cpp:273 +msgid "End Drawing" +msgstr "Fin tracé" -#: pcbnew/dialog_track_options.cpp:191 -msgid "Track Width" -msgstr "Epais. Piste" +#: pcbnew/onrightclick.cpp:275 +msgid "Edit Drawing" +msgstr "Edit Tracé" -#: pcbnew/dialog_track_options.cpp:197 -#: pcbnew/dialog_drc.cpp:439 -msgid "Clearance" -msgstr "Isolation" +#: pcbnew/onrightclick.cpp:276 +msgid "Delete Drawing" +msgstr "Supprimer Tracé" -#: pcbnew/dialog_track_options.cpp:203 -msgid "Mask clearance" -msgstr "Retrait Masque" +#: pcbnew/onrightclick.cpp:281 +msgid "Delete Zone" +msgstr "Supprimer Zone" + +#: pcbnew/onrightclick.cpp:288 +msgid "End edge zone" +msgstr "Fin contour Zone" + +#: pcbnew/onrightclick.cpp:291 +msgid "Delete Current Edge" +msgstr "Effacer Contour Zone Courant" + +#: pcbnew/onrightclick.cpp:310 +msgid "Delete Marker" +msgstr "Effacer Marqueur" + +#: pcbnew/onrightclick.cpp:317 +msgid "Edit Dimension" +msgstr "Edit Cote" + +#: pcbnew/onrightclick.cpp:320 +msgid "Delete Dimension" +msgstr "Suppression Cote" + +#: pcbnew/onrightclick.cpp:327 +msgid "Move Target" +msgstr "Déplacer Mire" + +#: pcbnew/onrightclick.cpp:330 +msgid "Edit Target" +msgstr "Editer Mire" + +#: pcbnew/onrightclick.cpp:332 +msgid "Delete Target" +msgstr "Supprimer Mire" + +#: pcbnew/onrightclick.cpp:364 +msgid "Get and Move Footprint" +msgstr "Sel et Dépl.t module" + +#: pcbnew/onrightclick.cpp:378 +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 +msgid "Select Working Layer" +msgstr "Sélection de la couche de travail" + +#: pcbnew/onrightclick.cpp:392 +#: pcbnew/onrightclick.cpp:465 +#: pcbnew/onrightclick.cpp:593 +msgid "Select Track Width" +msgstr "Sélection Epais. Piste" + +#: pcbnew/onrightclick.cpp:396 +msgid "Select layer pair for vias" +msgstr "Selection couple de couches pour Vias" + +#: pcbnew/onrightclick.cpp:413 +msgid "Footprint documentation" +msgstr "Documentation des modules" + +#: pcbnew/onrightclick.cpp:423 +msgid "Glob Move and Place" +msgstr "Move et Place Globaux" + +#: pcbnew/onrightclick.cpp:425 +msgid "Unlock All Modules" +msgstr "Déverrouiller tous les Modules" + +#: pcbnew/onrightclick.cpp:427 +msgid "Lock All Modules" +msgstr "Verrouiller tous les Modules" + +#: pcbnew/onrightclick.cpp:430 +msgid "Move All Modules" +msgstr "Déplace tous les Modules" + +#: pcbnew/onrightclick.cpp:431 +msgid "Move New Modules" +msgstr "Déplace nouveaux Modules" + +#: pcbnew/onrightclick.cpp:433 +msgid "Autoplace All Modules" +msgstr "Autoplace Tous Modules" + +#: pcbnew/onrightclick.cpp:434 +msgid "Autoplace New Modules" +msgstr "AutoPlace nouveaux Modules" + +#: pcbnew/onrightclick.cpp:435 +msgid "Autoplace Next Module" +msgstr "Autoplace Module suivant" + +#: pcbnew/onrightclick.cpp:438 +msgid "Orient All Modules" +msgstr "Oriente Tous Modules" + +#: pcbnew/onrightclick.cpp:445 +msgid "Global Autoroute" +msgstr "Autoroutage global" + +#: pcbnew/onrightclick.cpp:447 +msgid "Select layer pair" +msgstr "Selection couple de couches" + +#: pcbnew/onrightclick.cpp:449 +msgid "Autoroute All Modules" +msgstr "Autoroute Tous Modules" + +#: pcbnew/onrightclick.cpp:451 +msgid "Reset Unrouted" +msgstr "Réinit Non routés" + +#: pcbnew/onrightclick.cpp:456 +msgid "Global AutoRouter" +msgstr "Autorouteur Global" + +#: pcbnew/onrightclick.cpp:458 +msgid "Read Global AutoRouter Data" +msgstr "Lire Données de L'autorouteur global" + +#: pcbnew/onrightclick.cpp:495 +msgid "Flip Block (alt + drag mouse)" +msgstr "Inversion Bloc (alt + drag mouse)" + +#: pcbnew/onrightclick.cpp:518 +msgid "Drag Via" +msgstr "Drag Via" + +#: pcbnew/onrightclick.cpp:522 +msgid "Edit Via" +msgstr "Edit Via" + +#: pcbnew/onrightclick.cpp:524 +msgid "Set via hole to Default" +msgstr "Ajuste perçage via à défaut" + +#: pcbnew/onrightclick.cpp:526 +msgid "Set via hole to alt value" +msgstr "Ajuste perçage via à valeur alternative" + +#: pcbnew/onrightclick.cpp:528 +msgid "Set the via hole alt value" +msgstr "Ajuste la valeur alt. perçage via" + +#: pcbnew/onrightclick.cpp:530 +msgid "Export Via hole to alt value" +msgstr "Exporte perçage via à valeur alt." + +#: pcbnew/onrightclick.cpp:532 +msgid "Export via hole to others id vias" +msgstr "Exporte perçage via aux autres semblables." + +#: pcbnew/onrightclick.cpp:534 +msgid "Set ALL via holes to default" +msgstr "Ajuste perçage TOUTES vias au défaut" + +#: pcbnew/onrightclick.cpp:547 +msgid "Move Node" +msgstr "Déplace Noeud" + +#: pcbnew/onrightclick.cpp:552 +msgid "Drag Segments, keep slope" +msgstr "Drag Segments, garder direction" + +#: pcbnew/onrightclick.cpp:554 +msgid "Drag Segment" +msgstr "Drag Segment" + +#: pcbnew/onrightclick.cpp:557 +msgid "Move Segment" +msgstr "Déplace Segment" + +#: pcbnew/onrightclick.cpp:560 +msgid "Break Track" +msgstr "Briser piste" + +#: pcbnew/onrightclick.cpp:567 +msgid "Place Node" +msgstr "Place noeud" + +#: pcbnew/onrightclick.cpp:574 +msgid "End Track" +msgstr "Terminer Piste" + +#: pcbnew/onrightclick.cpp:577 +msgid "Place Via" +msgstr "Place Via" + +#: pcbnew/onrightclick.cpp:584 +msgid "Place Micro Via" +msgstr "Place Micro Via" + +#: pcbnew/onrightclick.cpp:598 +msgid "Edit Track" +msgstr "Editer Piste" + +#: pcbnew/onrightclick.cpp:600 +msgid "Edit Net" +msgstr "Edit Net" + +#: pcbnew/onrightclick.cpp:602 +msgid "Edit ALL Tracks and Vias" +msgstr "Editer TOUTES Pistes et Vias" + +#: pcbnew/onrightclick.cpp:604 +msgid "Edit ALL Vias (no track)" +msgstr "Editer TOUTES Vias (pas les pistes)" + +#: pcbnew/onrightclick.cpp:606 +msgid "Edit ALL Tracks (no via)" +msgstr "Editer TOUTES Pistes (pas les vias)" + +#: pcbnew/onrightclick.cpp:614 +msgid "Delete Via" +msgstr "Suppression Via" + +#: pcbnew/onrightclick.cpp:614 +msgid "Delete Segment" +msgstr "SupprimerSegment" + +#: pcbnew/onrightclick.cpp:621 +msgid "Delete Track" +msgstr "Effacer Piste" + +#: pcbnew/onrightclick.cpp:625 +msgid "Delete Net" +msgstr "Supprimer Net" + +#: pcbnew/onrightclick.cpp:630 +msgid "Set Flags" +msgstr "Ajust. Flags" + +#: pcbnew/onrightclick.cpp:631 +msgid "Locked: Yes" +msgstr "Verrou: Oui" + +#: pcbnew/onrightclick.cpp:632 +msgid "Locked: No" +msgstr "Verrou: Non" + +#: pcbnew/onrightclick.cpp:642 +msgid "Track Locked: Yes" +msgstr "Piste verrouillée: Oui" + +#: pcbnew/onrightclick.cpp:643 +msgid "Track Locked: No" +msgstr "Piste verrouillée: Non" + +#: pcbnew/onrightclick.cpp:645 +msgid "Net Locked: Yes" +msgstr "Net verrouillé: Oui" + +#: pcbnew/onrightclick.cpp:646 +msgid "Net Locked: No" +msgstr "Net verrouillé: Non" + +#: pcbnew/onrightclick.cpp:662 +msgid "Place Corner" +msgstr "Place Sommet" + +#: pcbnew/onrightclick.cpp:665 +msgid "Place Zone" +msgstr "Place Zone" + +#: pcbnew/onrightclick.cpp:671 +#: pcbnew/dialog_drc.cpp:477 +msgid "Zones" +msgstr "Zones" + +#: pcbnew/onrightclick.cpp:676 +msgid "Move Corner" +msgstr "Déplace Sommet" + +#: pcbnew/onrightclick.cpp:678 +msgid "Delete Corner" +msgstr "Supprimer Sommet" + +#: pcbnew/onrightclick.cpp:683 +msgid "Create Corner" +msgstr "Créer Sommet" + +#: pcbnew/onrightclick.cpp:688 +msgid "Add Similar Zone" +msgstr "Addition d'une Zone Semblable" + +#: pcbnew/onrightclick.cpp:691 +msgid "Add Cutout Area" +msgstr "Addition d'une Zone Interdite" + +#: pcbnew/onrightclick.cpp:695 +msgid "Fill Zone" +msgstr "Remplir Zone" + +#: pcbnew/onrightclick.cpp:698 +msgid "Move Zone" +msgstr "Déplace Zone" + +#: pcbnew/onrightclick.cpp:701 +msgid "Edit Zone Params" +msgstr "Editer Paramètres de la Zone" + +#: pcbnew/onrightclick.cpp:706 +msgid "Delete Cutout" +msgstr "Supprimer Zone Interdite" + +#: pcbnew/onrightclick.cpp:709 +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 +msgid "Move" +msgstr "Move" + +#: pcbnew/onrightclick.cpp:734 +#: pcbnew/onrightclick.cpp:816 +msgid "Drag" +msgstr "Drag" + +#: pcbnew/onrightclick.cpp:738 +msgid "Rotate +" +msgstr "Rotation +" + +#: pcbnew/onrightclick.cpp:742 +#: eeschema/onrightclick.cpp:301 +msgid "Rotate -" +msgstr "Rotation -" + +#: pcbnew/onrightclick.cpp:743 +msgid "Flip" +msgstr "Change côté" + +#: pcbnew/onrightclick.cpp:753 +#: pcbnew/modules.cpp:281 +msgid "Delete Module" +msgstr "Supprimer Module" + +#: pcbnew/onrightclick.cpp:833 +msgid "delete" +msgstr "Effacer" + +#: pcbnew/onrightclick.cpp:840 +msgid "Autoroute Pad" +msgstr "Autoroute Pad" + +#: pcbnew/onrightclick.cpp:841 +msgid "Autoroute Net" +msgstr "Autoroute Net" #: pcbnew/dialog_display_options.cpp:186 msgid "Tracks and vias" @@ -2613,474 +3024,118 @@ msgstr "Nombre incorrect, pas de changement" msgid "Footprint name:" msgstr "Nom Module: " -#: pcbnew/modules.cpp:281 -#: pcbnew/onrightclick.cpp:740 -msgid "Delete Module" -msgstr "Supprimer Module" - #: pcbnew/modules.cpp:282 #: eeschema/onrightclick.cpp:317 #: eeschema/find.cpp:229 msgid "Value " msgstr "Valeur " -#: pcbnew/dsn.cpp:489 -msgid "Line length exceeded" -msgstr "Longueur de ligne dépassée" - -#: pcbnew/dsn.cpp:603 -msgid "in file" -msgstr "dans le fichier" - -#: pcbnew/dsn.cpp:604 -msgid "on line" -msgstr "en ligne" - -#: pcbnew/dsn.cpp:605 -msgid "at offset" -msgstr "a l'offset" - -#: pcbnew/dsn.cpp:653 -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:743 -msgid "Un-terminated delimited string" -msgstr "Ligne délimitée non terminée" - -#: pcbnew/specctra.cpp:93 -#: pcbnew/specctra.cpp:100 -msgid "Expecting" -msgstr "Attendu" - -#: pcbnew/specctra.cpp:107 -#: pcbnew/specctra.cpp:114 -msgid "Unexpected" -msgstr "Inattendu" - -#: pcbnew/specctra.cpp:274 -#: pcbnew/specctra.cpp:304 -#: pcbnew/specctra.cpp:3335 -#: pcbnew/specctra.cpp:3352 -#, c-format -msgid "Unable to open file \"%s\"" -msgstr "Ne peut pas ouvrirle fichier \"%s\"" - -#: pcbnew/specctra.cpp:3288 -#, c-format -msgid "System file error writing to file \"%s\"" -msgstr "Erreur système sur écriture fichier \"%s\"" - -#: pcbnew/onrightclick.cpp:82 -#, c-format -msgid "Track %.1f" -msgstr "Piste %.1f" - -#: pcbnew/onrightclick.cpp:84 -#, c-format -msgid "Track %.3f" -msgstr "Piste %.3f" - -#: pcbnew/onrightclick.cpp:100 -#, c-format -msgid "Via %.1f" -msgstr "Via %.1f" - -#: pcbnew/onrightclick.cpp:102 -#, c-format -msgid "Via %.3f" -msgstr "Via %.3f" - -#: pcbnew/onrightclick.cpp:218 -msgid "Lock Module" -msgstr "Verrouiller Modules" - -#: pcbnew/onrightclick.cpp:226 -msgid "Unlock Module" -msgstr "Déverrouiller Modules" - -#: pcbnew/onrightclick.cpp:234 -msgid "Auto place Module" -msgstr "Auto place Module" - -#: pcbnew/onrightclick.cpp:240 -msgid "Autoroute" -msgstr "Autoroute" - -#: pcbnew/onrightclick.cpp:256 -msgid "Move Drawing" -msgstr "Déplace Tracé" - -#: pcbnew/onrightclick.cpp:261 -msgid "End Drawing" -msgstr "Fin tracé" - -#: pcbnew/onrightclick.cpp:263 -msgid "Edit Drawing" -msgstr "Edit Tracé" - -#: pcbnew/onrightclick.cpp:264 -msgid "Delete Drawing" -msgstr "Supprimer Tracé" - -#: pcbnew/onrightclick.cpp:269 -msgid "Delete Zone" -msgstr "Supprimer Zone" - -#: pcbnew/onrightclick.cpp:276 -msgid "End edge zone" -msgstr "Fin contour Zone" - -#: pcbnew/onrightclick.cpp:279 -msgid "Delete Current Edge" -msgstr "Effacer Contour Zone Courant" - -#: pcbnew/onrightclick.cpp:298 -msgid "Delete Marker" -msgstr "Effacer Marqueur" - -#: pcbnew/onrightclick.cpp:305 -msgid "Edit Dimension" -msgstr "Edit Cote" - -#: pcbnew/onrightclick.cpp:308 -msgid "Delete Dimension" -msgstr "Suppression Cote" - -#: pcbnew/onrightclick.cpp:315 -msgid "Move Target" -msgstr "Déplacer Mire" - -#: pcbnew/onrightclick.cpp:318 -msgid "Edit Target" -msgstr "Editer Mire" - -#: pcbnew/onrightclick.cpp:320 -msgid "Delete Target" -msgstr "Supprimer Mire" - -#: pcbnew/onrightclick.cpp:351 -msgid "Get and Move Footprint" -msgstr "Sel et Dépl.t module" - -#: pcbnew/onrightclick.cpp:365 -msgid "Fill or Refill All Zones" -msgstr "Remplir ou Re-remplir Toutes les Zones" - -#: pcbnew/onrightclick.cpp:370 -#: pcbnew/onrightclick.cpp:381 -#: pcbnew/onrightclick.cpp:394 -#: pcbnew/onrightclick.cpp:455 -msgid "Select Working Layer" -msgstr "Sélection de la couche de travail" - -#: pcbnew/onrightclick.cpp:379 -#: pcbnew/onrightclick.cpp:452 -msgid "Select Track Width" -msgstr "Sélection Epais. Piste" - -#: pcbnew/onrightclick.cpp:383 -msgid "Select layer pair for vias" -msgstr "Selection couple de couches pour Vias" - -#: pcbnew/onrightclick.cpp:400 -msgid "Footprint documentation" -msgstr "Documentation des modules" - -#: pcbnew/onrightclick.cpp:410 -msgid "Glob Move and Place" -msgstr "Move et Place Globaux" - -#: pcbnew/onrightclick.cpp:412 -msgid "Unlock All Modules" -msgstr "Déverrouiller tous les Modules" - -#: pcbnew/onrightclick.cpp:414 -msgid "Lock All Modules" -msgstr "Verrouiller tous les Modules" - -#: pcbnew/onrightclick.cpp:417 -msgid "Move All Modules" -msgstr "Déplace tous les Modules" - -#: pcbnew/onrightclick.cpp:418 -msgid "Move New Modules" -msgstr "Déplace nouveaux Modules" - -#: pcbnew/onrightclick.cpp:420 -msgid "Autoplace All Modules" -msgstr "Autoplace Tous Modules" - -#: pcbnew/onrightclick.cpp:421 -msgid "Autoplace New Modules" -msgstr "AutoPlace nouveaux Modules" - -#: pcbnew/onrightclick.cpp:422 -msgid "Autoplace Next Module" -msgstr "Autoplace Module suivant" - -#: pcbnew/onrightclick.cpp:425 -msgid "Orient All Modules" -msgstr "Oriente Tous Modules" - -#: pcbnew/onrightclick.cpp:432 -msgid "Global Autoroute" -msgstr "Autoroutage global" - -#: pcbnew/onrightclick.cpp:434 -msgid "Select layer pair" -msgstr "Selection couple de couches" - -#: pcbnew/onrightclick.cpp:436 -msgid "Autoroute All Modules" -msgstr "Autoroute Tous Modules" - -#: pcbnew/onrightclick.cpp:438 -msgid "Reset Unrouted" -msgstr "Réinit Non routés" - -#: pcbnew/onrightclick.cpp:443 -msgid "Global AutoRouter" -msgstr "Autorouteur Global" - -#: pcbnew/onrightclick.cpp:445 -msgid "Read Global AutoRouter Data" -msgstr "Lire Données de L'autorouteur global" - -#: pcbnew/onrightclick.cpp:482 -msgid "Flip Block (alt + drag mouse)" -msgstr "Inversion Bloc (alt + drag mouse)" - -#: pcbnew/onrightclick.cpp:505 -msgid "Drag Via" -msgstr "Drag Via" - -#: pcbnew/onrightclick.cpp:509 -#: pcbnew/onrightclick.cpp:579 -msgid "Edit Via" -msgstr "Edit Via" - -#: pcbnew/onrightclick.cpp:511 -msgid "Set via hole to Default" -msgstr "Ajuste perçage via à défaut" - -#: pcbnew/onrightclick.cpp:513 -msgid "Set via hole to alt value" -msgstr "Ajuste perçage via à valeur alternative" - -#: pcbnew/onrightclick.cpp:515 -msgid "Set the via hole alt value" -msgstr "Ajuste la valeur alt. perçage via" - -#: pcbnew/onrightclick.cpp:517 -msgid "Export Via hole to alt value" -msgstr "Exporte perçage via à valeur alt." - -#: pcbnew/onrightclick.cpp:519 -msgid "Export via hole to others id vias" -msgstr "Exporte perçage via aux autres semblables." - -#: pcbnew/onrightclick.cpp:521 -msgid "Set ALL via holes to default" -msgstr "Ajuste perçage TOUTES vias au défaut" - -#: pcbnew/onrightclick.cpp:534 -msgid "Move Node" -msgstr "Déplace Noeud" - -#: pcbnew/onrightclick.cpp:539 -msgid "Drag Segments, keep slope" -msgstr "Drag Segments, garder direction" - -#: pcbnew/onrightclick.cpp:541 -msgid "Drag Segment" -msgstr "Drag Segment" - -#: pcbnew/onrightclick.cpp:544 -msgid "Move Segment" -msgstr "Déplace Segment" - -#: pcbnew/onrightclick.cpp:547 -msgid "Break Track" -msgstr "Briser piste" - -#: pcbnew/onrightclick.cpp:554 -msgid "Place Node" -msgstr "Place noeud" - -#: pcbnew/onrightclick.cpp:561 -msgid "End Track" -msgstr "Terminer Piste" - -#: pcbnew/onrightclick.cpp:564 -msgid "Place Via" -msgstr "Place Via" - -#: pcbnew/onrightclick.cpp:569 -msgid "Place Micro Via" -msgstr "Place Micro Via" - -#: pcbnew/onrightclick.cpp:577 -msgid "Change Width" -msgstr "Change Largeur" - -#: pcbnew/onrightclick.cpp:580 -msgid "Edit Segment" -msgstr "Edit Segment" - -#: pcbnew/onrightclick.cpp:585 -msgid "Edit Track" -msgstr "Editer Piste" - -#: pcbnew/onrightclick.cpp:587 -msgid "Edit Net" -msgstr "Edit Net" - -#: pcbnew/onrightclick.cpp:589 -msgid "Edit ALL Tracks and Vias" -msgstr "Editer TOUTES Pistes et Vias" - -#: pcbnew/onrightclick.cpp:591 -msgid "Edit ALL Vias (no track)" -msgstr "Editer TOUTES Vias (pas les pistes)" - -#: pcbnew/onrightclick.cpp:593 -msgid "Edit ALL Tracks (no via)" -msgstr "Editer TOUTES Pistes (pas les vias)" - -#: pcbnew/onrightclick.cpp:601 -msgid "Delete Via" -msgstr "Suppression Via" - -#: pcbnew/onrightclick.cpp:601 -msgid "Delete Segment" -msgstr "SupprimerSegment" - -#: pcbnew/onrightclick.cpp:608 -msgid "Delete Track" -msgstr "Effacer Piste" - -#: pcbnew/onrightclick.cpp:612 -msgid "Delete Net" -msgstr "Supprimer Net" - -#: pcbnew/onrightclick.cpp:617 -msgid "Set Flags" -msgstr "Ajust. Flags" - -#: pcbnew/onrightclick.cpp:618 -msgid "Locked: Yes" -msgstr "Verrou: Oui" - -#: pcbnew/onrightclick.cpp:619 -msgid "Locked: No" -msgstr "Verrou: Non" - -#: pcbnew/onrightclick.cpp:629 -msgid "Track Locked: Yes" -msgstr "Piste verrouillée: Oui" - -#: pcbnew/onrightclick.cpp:630 -msgid "Track Locked: No" -msgstr "Piste verrouillée: Non" - -#: pcbnew/onrightclick.cpp:632 -msgid "Net Locked: Yes" -msgstr "Net verrouillé: Oui" - -#: pcbnew/onrightclick.cpp:633 -msgid "Net Locked: No" -msgstr "Net verrouillé: Non" - -#: pcbnew/onrightclick.cpp:649 -msgid "Place Corner" -msgstr "Place Sommet" - -#: pcbnew/onrightclick.cpp:652 -msgid "Place Zone" -msgstr "Place Zone" - -#: pcbnew/onrightclick.cpp:658 -#: pcbnew/dialog_drc.cpp:477 -msgid "Zones" -msgstr "Zones" - -#: pcbnew/onrightclick.cpp:663 -msgid "Move Corner" -msgstr "Déplace Sommet" - -#: pcbnew/onrightclick.cpp:665 -msgid "Delete Corner" -msgstr "Supprimer Sommet" - -#: pcbnew/onrightclick.cpp:670 -msgid "Create Corner" -msgstr "Créer Sommet" - -#: pcbnew/onrightclick.cpp:675 -msgid "Add Similar Zone" -msgstr "Addition d'une Zone Semblable" - -#: pcbnew/onrightclick.cpp:678 -msgid "Add Cutout Area" -msgstr "Addition d'une Zone Interdite" - -#: pcbnew/onrightclick.cpp:682 -msgid "Fill Zone" -msgstr "Remplir Zone" - -#: pcbnew/onrightclick.cpp:685 -msgid "Move Zone" -msgstr "Déplace Zone" - -#: pcbnew/onrightclick.cpp:688 -msgid "Edit Zone Params" -msgstr "Editer Paramètres de la Zone" - -#: pcbnew/onrightclick.cpp:693 -msgid "Delete Cutout" -msgstr "Supprimer Zone Interdite" - -#: pcbnew/onrightclick.cpp:696 -msgid "Delete Zone Outline" -msgstr "Supprimer Contour de Zone" - -#: pcbnew/onrightclick.cpp:718 -#: pcbnew/onrightclick.cpp:763 -#: pcbnew/onrightclick.cpp:801 -#: pcbnew/onrightclick.cpp:860 -msgid "Move" -msgstr "Move" - -#: pcbnew/onrightclick.cpp:721 -#: pcbnew/onrightclick.cpp:803 -msgid "Drag" -msgstr "Drag" - -#: pcbnew/onrightclick.cpp:725 -msgid "Rotate +" -msgstr "Rotation +" - -#: pcbnew/onrightclick.cpp:729 -#: eeschema/onrightclick.cpp:301 -msgid "Rotate -" -msgstr "Rotation -" - -#: pcbnew/onrightclick.cpp:730 -msgid "Flip" -msgstr "Change côté" - -#: pcbnew/onrightclick.cpp:820 -msgid "delete" -msgstr "Effacer" - -#: pcbnew/onrightclick.cpp:827 -msgid "Autoroute Pad" -msgstr "Autoroute Pad" - -#: pcbnew/onrightclick.cpp:828 -msgid "Autoroute Net" -msgstr "Autoroute Net" +#: 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" @@ -3114,70 +3169,29 @@ msgstr "Effacer Bloc" msgid "Delete zones" msgstr "SuppressionZones" -#: pcbnew/block.cpp:601 +#: pcbnew/block.cpp:607 msgid "Rotate Block" msgstr "Rotation Bloc" -#: pcbnew/block.cpp:658 +#: pcbnew/block.cpp:664 msgid "Zone rotation" msgstr "Rotation Zones" -#: pcbnew/block.cpp:766 +#: pcbnew/block.cpp:772 msgid "Block mirroring" msgstr "Bloc Miroir" -#: pcbnew/block.cpp:954 +#: pcbnew/block.cpp:960 msgid "Move Block" msgstr "Déplacer Bloc" -#: pcbnew/block.cpp:1109 +#: pcbnew/block.cpp:1115 msgid "Copy Block" msgstr "Copie Bloc" -#: pcbnew/edit.cpp:176 -#: pcbnew/editmod.cpp:45 -msgid "Module Editor" -msgstr "Ouvrir Editeur de modules" - -#: pcbnew/edit.cpp:256 -msgid "Add Tracks" -msgstr "Addition de pistes" - -#: pcbnew/edit.cpp:265 -msgid "Add Zones" -msgstr "Addition de Zones" - -#: pcbnew/edit.cpp:267 -msgid "Warning: Display Zone is OFF!!!" -msgstr "Attention: Affichage zones désactivé !!!" - -#: pcbnew/edit.cpp:274 -msgid "Add Layer Alignment Target" -msgstr "Ajouter Mire de superposition" - -#: pcbnew/edit.cpp:278 -msgid "Adjust Zero" -msgstr "Ajuster Zéro" - -#: pcbnew/edit.cpp:284 -msgid "Add Graphic" -msgstr "Addition éléments graphiques" - -#: pcbnew/edit.cpp:292 -msgid "Add Modules" -msgstr "Addition de Modules" - -#: pcbnew/edit.cpp:296 -msgid "Add Dimension" -msgstr "Ajout de cotes" - -#: pcbnew/edit.cpp:304 -msgid "Net Highlight" -msgstr "Surbrillance des équipotentielles" - -#: pcbnew/edit.cpp:308 -msgid "Local Ratsnest" -msgstr "Monter le chevelu général" +#: pcbnew/ioascii.cpp:167 +msgid "Error: Unexpected end of file !" +msgstr "Erreur: Fin de fichier inattendue !" #: pcbnew/router.cpp:60 msgid "Unable to create temporary file " @@ -3273,6 +3287,11 @@ msgstr "Le texte est la REFERENCE!" msgid "Text is VALUE!" msgstr "Le texte est la VALEUR!" +#: pcbnew/class_board_item.cpp:35 +#: pcbnew/class_pad.cpp:887 +msgid "Net" +msgstr "Net" + #: pcbnew/class_board_item.cpp:40 #: eeschema/dialog_build_BOM.cpp:300 #: eeschema/component_class.cpp:56 @@ -3337,14 +3356,8 @@ msgstr "Graphique" msgid "Arc" msgstr "Arc" -#: pcbnew/class_board_item.cpp:139 -#: pcbnew/pcbframe.cpp:447 -#: pcbnew/class_track.cpp:765 -msgid "Track" -msgstr "Piste" - #: pcbnew/class_board_item.cpp:146 -#: pcbnew/dialog_zones_by_polygon.cpp:228 +#: pcbnew/dialog_zones_by_polygon.cpp:229 msgid "Net:" msgstr "Net:" @@ -3353,17 +3366,17 @@ msgid "Length:" msgstr "Long.:" #: pcbnew/class_board_item.cpp:152 -#: pcbnew/class_zone.cpp:477 +#: pcbnew/class_zone.cpp:488 msgid "Zone Outline" msgstr "Contour de Zone" #: pcbnew/class_board_item.cpp:156 -#: pcbnew/class_zone.cpp:480 +#: pcbnew/class_zone.cpp:491 msgid "(Cutout)" msgstr "(Cutout)" #: pcbnew/class_board_item.cpp:175 -#: pcbnew/class_zone.cpp:500 +#: pcbnew/class_zone.cpp:511 msgid "Not Found" msgstr " Non Trouvé" @@ -3372,11 +3385,6 @@ msgstr " Non Trouv msgid "Zone" msgstr "Zone" -#: pcbnew/class_board_item.cpp:199 -#: pcbnew/pcbframe.cpp:479 -msgid "Via" -msgstr "Via" - #: pcbnew/class_board_item.cpp:203 msgid "Blind/Buried" msgstr "Borgne/Aveugle" @@ -3419,108 +3427,12 @@ msgstr "Type Err" msgid "Pcbnew is already running, Continue?" msgstr "Pcbnew est est cours d'exécution. Continuer ?" -#: pcbnew/pcbframe.cpp:266 -msgid "Board modified, Save before exit ?" -msgstr "Circuit Imprimé modifiée, Sauver avant de quitter ?" - -#: pcbnew/pcbframe.cpp:267 -#: eeschema/schframe.cpp:183 -#: cvpcb/cvframe.cpp:177 -#: common/confirm.cpp:119 -msgid "Confirmation" -msgstr "Confirmation" - -#: pcbnew/pcbframe.cpp:367 -msgid "DRC Off (Disable !!!), Currently: DRC is active" -msgstr "DRC off (désactivée !!!), actuellement DRC active" - -#: pcbnew/pcbframe.cpp:368 -msgid "DRC On (Currently: DRC is inactive !!!)" -msgstr "DRC On (Actuellement, DRC désactivée !!!)" - -#: pcbnew/pcbframe.cpp:379 -msgid "Polar Coords not show" -msgstr "Coord Polaires non affichées" - -#: pcbnew/pcbframe.cpp:380 -msgid "Display Polar Coords" -msgstr "Affichage coord Polaires" - -#: pcbnew/pcbframe.cpp:385 -#: eeschema/schframe.cpp:274 -msgid "Grid not show" -msgstr "Grille non montrée" - -#: pcbnew/pcbframe.cpp:385 -#: eeschema/schframe.cpp:274 -msgid "Show Grid" -msgstr "Afficher grille" - -#: pcbnew/pcbframe.cpp:394 -msgid "General ratsnest not show" -msgstr "Chevelu général non affiché" - -#: pcbnew/pcbframe.cpp:394 -msgid "Show General ratsnest" -msgstr "Afficher le chevelu général" - -#: pcbnew/pcbframe.cpp:400 -msgid "Module ratsnest not show" -msgstr "Ne pas montrer le chevelu du module pendant déplacement" - -#: pcbnew/pcbframe.cpp:401 -msgid "Show Module ratsnest" -msgstr "Montrer le chevelu du module" - -#: pcbnew/pcbframe.cpp:408 -msgid "Disable Auto Delete old Track" -msgstr "Ne pas Autoriser l'effacement automatique des pistes" - -#: pcbnew/pcbframe.cpp:409 -msgid "Enable Auto Delete old Track" -msgstr "Autoriser l'effacement automatique des pistes" - -#: pcbnew/pcbframe.cpp:416 -msgid "Do not Show Zones" -msgstr "Ne pas monter Zones" - -#: pcbnew/pcbframe.cpp:416 -#: pcbnew/tool_pcb.cpp:360 -#: pcbnew/set_color.h:423 -msgid "Show Zones" -msgstr "Monter Zones" - -#: pcbnew/pcbframe.cpp:422 -msgid "Show Pads Sketch mode" -msgstr "Afficher pastilles en contour" - -#: pcbnew/pcbframe.cpp:423 -msgid "Show pads filled mode" -msgstr "Afficher pastilles en mode plein" - -#: pcbnew/pcbframe.cpp:429 -msgid "Show Tracks Sketch mode" -msgstr "Afficher pistes en contour" - -#: pcbnew/pcbframe.cpp:430 -msgid "Show Tracks filled mode" -msgstr "Afficher pistes en mode plein" - -#: pcbnew/pcbframe.cpp:436 -msgid "Normal Contrast Mode Display" -msgstr "Mode d'affichage Contraste normal" - -#: pcbnew/pcbframe.cpp:437 -#: pcbnew/tool_pcb.cpp:373 -msgid "Hight Contrast Mode Display" -msgstr "Mode d'affichage Haut Contraste" - #: pcbnew/cotation.cpp:85 msgid "Dimension properties" msgstr "Propriétés des Cotes" #: pcbnew/cotation.cpp:133 -#: pcbnew/dialog_zones_by_polygon.cpp:235 +#: pcbnew/dialog_zones_by_polygon.cpp:236 #: gerbview/affiche.cpp:37 msgid "Layer:" msgstr "Couche:" @@ -3548,19 +3460,18 @@ msgstr "Net Code" #: pcbnew/affiche.cpp:52 #: pcbnew/class_module.cpp:1228 -#: pcbnew/class_board.cpp:402 +#: pcbnew/class_board.cpp:414 msgid "Pads" msgstr "Pads" #: pcbnew/class_track.cpp:791 -#: pcbnew/zones.cpp:873 -#: pcbnew/zones_by_polygon.cpp:900 -#: pcbnew/class_zone.cpp:503 +#: pcbnew/zones_by_polygon.cpp:906 +#: pcbnew/class_zone.cpp:514 msgid "NetName" msgstr "NetName" #: pcbnew/class_track.cpp:796 -#: pcbnew/class_zone.cpp:508 +#: pcbnew/class_zone.cpp:519 msgid "NetCode" msgstr "NetCode" @@ -3578,6 +3489,12 @@ msgstr "Stat" msgid "Diam" msgstr "Diam" +#: pcbnew/class_track.cpp:847 +#: pcbnew/class_track.cpp:852 +#: pcbnew/class_pad.cpp:993 +msgid "Drill" +msgstr "Perçage" + #: pcbnew/deltrack.cpp:161 msgid "Delete NET ?" msgstr "Supprimer Net ?" @@ -3847,97 +3764,25 @@ msgstr "Change module %s (%s) " msgid "Cmp files:" msgstr "Fichiers Cmp: " -#: pcbnew/zones.cpp:155 -#: pcbnew/zones.cpp:156 -#: pcbnew/zones.cpp:157 -#: pcbnew/zones.cpp:158 -#: pcbnew/dialog_zones_by_polygon.cpp:153 -#: pcbnew/dialog_zones_by_polygon.cpp:154 -#: pcbnew/dialog_zones_by_polygon.cpp:155 -msgid "0.00000" -msgstr "0.00000" +#: pcbnew/pcbcfg.cpp:68 +#: eeschema/eeconfig.cpp:58 +#: cvpcb/menucfg.cpp:170 +msgid "Read config file" +msgstr "Lire config" -#: pcbnew/zones.cpp:162 -msgid "Grid size:" -msgstr "Dim Grille" +#: pcbnew/pcbcfg.cpp:81 +#: cvpcb/menucfg.cpp:182 +#, c-format +msgid "File %s not found" +msgstr " fichier %s non trouvé" -#: pcbnew/zones.cpp:167 -#: pcbnew/dialog_zones_by_polygon.cpp:160 -msgid "Zone clearance value (mm):" -msgstr "Valeur isolation zone (mm):" +#: pcbnew/pcbcfg.cpp:196 +#: eeschema/eeconfig.cpp:192 +#: cvpcb/cfg.cpp:71 +msgid "Save preferences" +msgstr "Sauver préférences" -#: pcbnew/zones.cpp:184 -#: pcbnew/dialog_zones_by_polygon.cpp:180 -msgid "Include Pads" -msgstr "Inclure Pads" - -#: pcbnew/zones.cpp:185 -#: pcbnew/dialog_zones_by_polygon.cpp:181 -msgid "Thermal" -msgstr "Thermique" - -#: pcbnew/zones.cpp:186 -#: pcbnew/dialog_zones_by_polygon.cpp:182 -msgid "Exclude Pads" -msgstr "Exclure Pads" - -#: pcbnew/zones.cpp:190 -#: pcbnew/dialog_zones_by_polygon.cpp:183 -msgid "Pad options:" -msgstr "Options pads" - -#: pcbnew/zones.cpp:195 -#: pcbnew/dialog_zones_by_polygon.cpp:190 -#: eeschema/dialog_options.cpp:257 -msgid "Any" -msgstr "Tout" - -#: pcbnew/zones.cpp:196 -#: pcbnew/dialog_zones_by_polygon.cpp:191 -msgid "H , V and 45 deg" -msgstr "H, V et 45 deg" - -#: pcbnew/zones.cpp:200 -#: pcbnew/dialog_zones_by_polygon.cpp:192 -msgid "Zone edges orient:" -msgstr "Direction contours zone:" - -#: pcbnew/zones.cpp:212 -msgid "Fill" -msgstr "Remplissage" - -#: pcbnew/zones.cpp:226 -msgid "Update Options" -msgstr "Maj Options" - -#: pcbnew/zones.cpp:235 -#: pcbnew/dialog_zones_by_polygon.cpp:247 -msgid "Zone clearance value:" -msgstr "Valeur isolation zone:" - -#: pcbnew/zones.cpp:238 -#: pcbnew/dialog_zones_by_polygon.cpp:250 -msgid "Grid :" -msgstr "Grille:" - -#: pcbnew/zones.cpp:401 -msgid "New zone segment width: " -msgstr "Nouvelle largeur des segments zone:" - -#: pcbnew/zones.cpp:599 -msgid "Zone: No net selected" -msgstr "Zone: Net non sélectionné" - -#: pcbnew/zones.cpp:641 -msgid "Delete Current Zone Edges" -msgstr "Effacer contour zone courant" - -#: pcbnew/zones.cpp:871 -#: pcbnew/zones_by_polygon.cpp:898 -msgid "No Net" -msgstr "No Net" - -#: pcbnew/tool_pcb.cpp:50 +#: pcbnew/tool_pcb.cpp:49 msgid "" "Show active layer selections\n" "and select layer pair for route and place via" @@ -3945,56 +3790,56 @@ msgstr "" "Affiche selections couche active\n" "et selection paire de couches pour routage and placement via" -#: pcbnew/tool_pcb.cpp:238 +#: pcbnew/tool_pcb.cpp:237 msgid "New Board" msgstr "Nouveau Circuit Imprimé" -#: pcbnew/tool_pcb.cpp:240 +#: pcbnew/tool_pcb.cpp:239 msgid "Open existing Board" msgstr "Ouvrir C.I. existant" -#: pcbnew/tool_pcb.cpp:241 +#: pcbnew/tool_pcb.cpp:240 msgid "Save Board" msgstr "Sauver Circuit Imprimé" -#: pcbnew/tool_pcb.cpp:245 +#: pcbnew/tool_pcb.cpp:244 #: eeschema/tool_sch.cpp:65 #: gerbview/tool_gerber.cpp:232 msgid "page settings (size, texts)" msgstr "Ajustage de la feuille de dessin (dimensions, textes)" -#: pcbnew/tool_pcb.cpp:249 +#: pcbnew/tool_pcb.cpp:248 msgid "Open Module Editor" msgstr "Ouvrir Editeur de modules" -#: pcbnew/tool_pcb.cpp:252 +#: pcbnew/tool_pcb.cpp:251 #: eeschema/tool_sch.cpp:81 #: gerbview/tool_gerber.cpp:243 msgid "Cut selected item" msgstr "Suppression des éléments sélectionnés" -#: pcbnew/tool_pcb.cpp:256 +#: pcbnew/tool_pcb.cpp:255 #: eeschema/tool_sch.cpp:84 #: gerbview/tool_gerber.cpp:248 msgid "Copy selected item" msgstr "Copie des éléments sélectionnés" -#: pcbnew/tool_pcb.cpp:258 +#: pcbnew/tool_pcb.cpp:257 #: eeschema/tool_sch.cpp:87 #: gerbview/tool_gerber.cpp:254 msgid "Paste" msgstr "Copie des éléments sauvegardés" -#: pcbnew/tool_pcb.cpp:261 +#: pcbnew/tool_pcb.cpp:260 #: gerbview/tool_gerber.cpp:261 msgid "Undelete" msgstr "Annulation du dernier effacement" -#: pcbnew/tool_pcb.cpp:264 +#: pcbnew/tool_pcb.cpp:263 msgid "Print Board" msgstr "Imprimer C.I." -#: pcbnew/tool_pcb.cpp:266 +#: pcbnew/tool_pcb.cpp:265 msgid "Plot (HPGL, PostScript, or GERBER format)" msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" @@ -4003,43 +3848,43 @@ msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" msgid "Find components and texts" msgstr "Recherche de composants et textes" -#: pcbnew/tool_pcb.cpp:291 +#: pcbnew/tool_pcb.cpp:292 msgid "Read Netlist" msgstr "Lire Netliste" -#: pcbnew/tool_pcb.cpp:293 +#: pcbnew/tool_pcb.cpp:294 msgid "Pcb Design Rules Check" msgstr "Controle des règles de conception" -#: pcbnew/tool_pcb.cpp:304 +#: pcbnew/tool_pcb.cpp:305 msgid "Mode Module: Manual and Automatic Move or Place for modules" msgstr "Mode Module: Déplacements ou Placement Manuel ou Automatique des modules" -#: pcbnew/tool_pcb.cpp:307 +#: pcbnew/tool_pcb.cpp:308 msgid "Mode Track and Autorouting" msgstr "Mode Pistes and Autoroutage" -#: pcbnew/tool_pcb.cpp:331 +#: pcbnew/tool_pcb.cpp:332 msgid "Drc OFF" msgstr "Drc DESACTIVEE" -#: pcbnew/tool_pcb.cpp:348 +#: pcbnew/tool_pcb.cpp:349 msgid "Show General Ratsnest" msgstr "Monter le chevelu général" -#: pcbnew/tool_pcb.cpp:351 +#: pcbnew/tool_pcb.cpp:352 msgid "Show Module Ratsnest when moving" msgstr "Monter le chevelu du module pendant déplacement" -#: pcbnew/tool_pcb.cpp:356 +#: pcbnew/tool_pcb.cpp:357 msgid "Enable Auto Del Track" msgstr "Autoriser l'effacement automatique des pistes" -#: pcbnew/tool_pcb.cpp:369 +#: pcbnew/tool_pcb.cpp:370 msgid "Show Tracks Sketch" msgstr "Afficher pistes en contour" -#: pcbnew/tool_pcb.cpp:382 +#: pcbnew/tool_pcb.cpp:383 msgid "" "Display auxiliary vertical toolbar (tools for micro wave applications)\n" " This is a very experimental feature (under development)" @@ -4047,68 +3892,76 @@ msgstr "" "Affiche toolbar vertical auxiliaire (outils pour applications micro-ondes)\n" "C'est un outil expérimental (en cours de développement)" -#: pcbnew/tool_pcb.cpp:411 +#: pcbnew/tool_pcb.cpp:412 msgid "Net highlight" msgstr "Surbrillance des équipotentielles" -#: pcbnew/tool_pcb.cpp:415 +#: pcbnew/tool_pcb.cpp:416 msgid "Display local ratsnest (pad or module)" msgstr "Afficher le chevelu local (pastilles ou modules)" -#: pcbnew/tool_pcb.cpp:420 +#: pcbnew/tool_pcb.cpp:421 msgid "Add modules" msgstr "Addition de Modules" -#: pcbnew/tool_pcb.cpp:424 +#: pcbnew/tool_pcb.cpp:425 msgid "Add tracks and vias" msgstr "Ajouter pistes et vias" -#: pcbnew/tool_pcb.cpp:428 +#: pcbnew/tool_pcb.cpp:429 msgid "Add zones" msgstr "Addition de Zones" -#: pcbnew/tool_pcb.cpp:445 +#: pcbnew/tool_pcb.cpp:446 msgid "Add text" msgstr "Ajout de Texte" -#: pcbnew/tool_pcb.cpp:450 +#: pcbnew/tool_pcb.cpp:451 msgid "Add dimension" msgstr "Ajout des cotes" -#: pcbnew/tool_pcb.cpp:454 +#: pcbnew/tool_pcb.cpp:455 #: gerbview/tool_gerber.cpp:378 msgid "Add layer alignment target" msgstr "Ajouter Mire de superposition" -#: pcbnew/tool_pcb.cpp:464 +#: pcbnew/tool_pcb.cpp:465 msgid "Offset adjust for drill and place files" msgstr "Ajuste offset pour fichier de perçage et placement" -#: pcbnew/tool_pcb.cpp:489 +#: pcbnew/tool_pcb.cpp:490 msgid "Create line of specified length for microwave applications" msgstr "Creation de lignes de longueur spécifiée (pour applications micro-ondes)" -#: pcbnew/tool_pcb.cpp:495 +#: pcbnew/tool_pcb.cpp:496 msgid "Create gap of specified length for microwave applications" msgstr "Creation de gaps de longueur spécifiée (pour applications micro-ondes)" -#: pcbnew/tool_pcb.cpp:503 +#: pcbnew/tool_pcb.cpp:504 msgid "Create stub of specified length for microwave applications" msgstr "Creation de stub de longueur spécifiée (pour applications micro-ondes)" -#: pcbnew/tool_pcb.cpp:509 +#: pcbnew/tool_pcb.cpp:510 msgid "Create stub (arc) of specified length for microwave applications" msgstr "Creation de stub (arc) de longueur spécifiée (pour applications micro-ondes)" -#: pcbnew/tool_pcb.cpp:516 +#: pcbnew/tool_pcb.cpp:517 msgid "Create a polynomial shape for microwave applications" msgstr "Creation de formes polynomiales (pour applications micro-ondes)" -#: pcbnew/tool_pcb.cpp:570 +#: pcbnew/tool_pcb.cpp:558 +msgid "" +"Auto track width: when starting on an existing track use its width\n" +"otherwise, use current width setting" +msgstr "" +"Largeur de piste automatique: si on démarre sur une piste existante, utiliser sa largeur\n" +" sinon utiliser la largeur courante" + +#: pcbnew/tool_pcb.cpp:584 msgid "Zoom " msgstr "Zoom " -#: pcbnew/tool_pcb.cpp:584 +#: pcbnew/tool_pcb.cpp:598 #: eeschema/eelayer.cpp:223 #: pcbnew/set_color.h:414 #: eeschema/eelayer.h:210 @@ -4116,24 +3969,28 @@ msgstr "Zoom " msgid "Grid" msgstr "Grille" -#: pcbnew/tool_pcb.cpp:691 +#: pcbnew/tool_pcb.cpp:707 msgid "+/- to switch" msgstr "+/- pour commuter" #: pcbnew/zones_by_polygon.cpp:342 -#: pcbnew/zones_by_polygon.cpp:380 -#: pcbnew/zones_by_polygon.cpp:713 +#: pcbnew/zones_by_polygon.cpp:381 +#: pcbnew/zones_by_polygon.cpp:719 msgid "Area: DRC outline error" msgstr "Zone; Erreur DRC sur contour" -#: pcbnew/zones_by_polygon.cpp:540 +#: pcbnew/zones_by_polygon.cpp:544 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:638 +#: pcbnew/zones_by_polygon.cpp:644 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 +msgid "No Net" +msgstr "No Net" + #: pcbnew/move_or_drag_track.cpp:714 msgid "Unable to drag this segment: too many segments connected" msgstr "Impossible de drag ce segment: trop de segments connectés" @@ -4142,79 +3999,118 @@ msgstr "Impossible de drag ce segment: trop de segments connect msgid "Unable to drag this segment: two collinear segments" msgstr "Impossible de drag ce segment: 2 segments alignés" +#: pcbnew/dialog_zones_by_polygon.cpp:153 +#: pcbnew/dialog_zones_by_polygon.cpp:154 +#: pcbnew/dialog_zones_by_polygon.cpp:155 #: pcbnew/dialog_zones_by_polygon.cpp:156 +msgid "0.00000" +msgstr "0.00000" + +#: pcbnew/dialog_zones_by_polygon.cpp:157 msgid "Grid Size for Filling:" msgstr "Taille de Grille pour Remplissage:" -#: pcbnew/dialog_zones_by_polygon.cpp:168 +#: pcbnew/dialog_zones_by_polygon.cpp:161 +msgid "Zone clearance value (mm):" +msgstr "Valeur isolation zone (mm):" + +#: pcbnew/dialog_zones_by_polygon.cpp:169 msgid "Hatched Outline" msgstr "Contour Hachuré" -#: pcbnew/dialog_zones_by_polygon.cpp:169 +#: pcbnew/dialog_zones_by_polygon.cpp:170 msgid "Full Hatched" msgstr "Pleinement Hachuré" -#: pcbnew/dialog_zones_by_polygon.cpp:170 +#: pcbnew/dialog_zones_by_polygon.cpp:171 msgid "Outlines Appearance" msgstr "Aspect des Contours" -#: pcbnew/dialog_zones_by_polygon.cpp:211 +#: pcbnew/dialog_zones_by_polygon.cpp:181 +msgid "Include Pads" +msgstr "Inclure Pads" + +#: pcbnew/dialog_zones_by_polygon.cpp:182 +msgid "Thermal" +msgstr "Thermique" + +#: pcbnew/dialog_zones_by_polygon.cpp:183 +msgid "Exclude Pads" +msgstr "Exclure Pads" + +#: pcbnew/dialog_zones_by_polygon.cpp:184 +msgid "Pad options:" +msgstr "Options pads" + +#: pcbnew/dialog_zones_by_polygon.cpp:191 +#: eeschema/dialog_options.cpp:257 +msgid "Any" +msgstr "Tout" + +#: pcbnew/dialog_zones_by_polygon.cpp:192 +msgid "H , V and 45 deg" +msgstr "H, V et 45 deg" + +#: pcbnew/dialog_zones_by_polygon.cpp:193 +msgid "Zone edges orient:" +msgstr "Direction contours zone:" + +#: pcbnew/dialog_zones_by_polygon.cpp:212 msgid "Alphabetic" msgstr "Alphabetique" -#: pcbnew/dialog_zones_by_polygon.cpp:212 +#: pcbnew/dialog_zones_by_polygon.cpp:213 msgid "Advanced" msgstr "Avancé" -#: pcbnew/dialog_zones_by_polygon.cpp:213 +#: pcbnew/dialog_zones_by_polygon.cpp:214 msgid "Net sorting:" msgstr "Tri des Equipotentielles:" -#: pcbnew/dialog_zones_by_polygon.cpp:217 +#: pcbnew/dialog_zones_by_polygon.cpp:218 msgid "Filter" msgstr "Filtre" -#: pcbnew/dialog_zones_by_polygon.cpp:222 +#: pcbnew/dialog_zones_by_polygon.cpp:223 msgid "Do not list net names which match with this text, in advanced mode" -msgstr "" +msgstr "Ne liste pas les noms de nets qui correspondent à ce texte, en mode avancé" -#: pcbnew/dialog_zones_by_polygon.cpp:501 +#: pcbnew/dialog_zones_by_polygon.cpp:248 +msgid "Zone clearance value:" +msgstr "Valeur isolation zone:" + +#: pcbnew/dialog_zones_by_polygon.cpp:251 +msgid "Grid :" +msgstr "Grille:" + +#: pcbnew/dialog_zones_by_polygon.cpp:506 msgid "Error : you must choose a layer" msgstr "Erreur. Vous devez choisir une couche" -#: pcbnew/dialog_zones_by_polygon.cpp:510 +#: pcbnew/dialog_zones_by_polygon.cpp:515 msgid "Error : you must choose a net name" msgstr "Erreur. Vous devez choisir une équipotentielle" -#: pcbnew/initpcb.cpp:125 -msgid "Current Board will be lost ?" -msgstr "Le C.I. courant sera perdu ?" +#: pcbnew/class_board.cpp:427 +msgid "Nodes" +msgstr "Nodes" -#: pcbnew/initpcb.cpp:215 -msgid "Delete Zones ?" -msgstr "Effacer Zones ?" +#: pcbnew/class_board.cpp:430 +msgid "Links" +msgstr "Liens" -#: pcbnew/initpcb.cpp:243 -msgid "Delete Board edges ?" -msgstr "Effacement contour PCB" +#: pcbnew/class_board.cpp:433 +msgid "Nets" +msgstr "Nets" -#: pcbnew/initpcb.cpp:248 -msgid "Delete draw items?" -msgstr "Suppression éléments graphiques?" +#: pcbnew/class_board.cpp:436 +msgid "Connect" +msgstr "Connect" -#: pcbnew/initpcb.cpp:290 -#: gerbview/initpcb.cpp:150 -msgid "Delete Tracks?" -msgstr "Effacer Pistes ?" - -#: pcbnew/initpcb.cpp:313 -msgid "Delete Modules?" -msgstr "Effacement des Modules?" - -#: pcbnew/initpcb.cpp:336 -#: gerbview/initpcb.cpp:173 -msgid "Delete Pcb Texts" -msgstr "Effacer Textes Pcb" +#: pcbnew/class_board.cpp:439 +#: eeschema/eelayer.h:116 +msgid "NoConn" +msgstr "Non Conn" #: pcbnew/sel_layer.cpp:92 msgid "Select Layer:" @@ -4305,14 +4201,114 @@ msgstr "Change Per msgid "Change Orient" msgstr "Change Orientation" -#: pcbnew/zone_filling_algorithm.cpp:155 +#: pcbnew/zone_filling_algorithm.cpp:163 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:193 +#: pcbnew/zone_filling_algorithm.cpp:205 msgid "Ok" msgstr "Ok" +#: pcbnew/class_pad.cpp:795 +msgid "Unknown Pad shape" +msgstr "Forme pad inconnue" + +#: pcbnew/class_pad.cpp:884 +msgid "RefP" +msgstr "RefP" + +#: pcbnew/class_pad.cpp:1001 +msgid "Drill X / Y" +msgstr "Perçage X/Y" + +#: pcbnew/class_pad.cpp:1016 +msgid "X Pos" +msgstr "X Pos" + +#: pcbnew/class_pad.cpp:1020 +msgid "Y pos" +msgstr "Y pos" + +#: pcbnew/class_drawsegment.cpp:161 +msgid "Shape" +msgstr "Forme" + +#: pcbnew/class_drawsegment.cpp:168 +msgid " Arc " +msgstr " Arc " + +#: pcbnew/export_gencad.cpp:69 +msgid "GenCAD file:" +msgstr "Fichier GenCAD:" + +#: pcbnew/dialog_track_options.cpp:151 +msgid "Vias:" +msgstr "Vias:" + +#: pcbnew/dialog_track_options.cpp:160 +msgid "Via Size" +msgstr "Diametre Via" + +#: pcbnew/dialog_track_options.cpp:176 +msgid "Default Via Drill" +msgstr "Perçage vias par défaut" + +#: pcbnew/dialog_track_options.cpp:192 +msgid "Alternate Via Drill" +msgstr "Perçage vias alternatif" + +#: pcbnew/dialog_track_options.cpp:208 +#: pcbnew/pcbnew.h:291 +msgid "Through Via" +msgstr "Via Traversante" + +#: pcbnew/dialog_track_options.cpp:209 +msgid "Blind or Buried Via " +msgstr "Via enterrée ou Aveugle" + +#: pcbnew/dialog_track_options.cpp:212 +msgid "Default Via Type" +msgstr "Via par Défaut" + +#: pcbnew/dialog_track_options.cpp:223 +#: pcbnew/dialog_gendrill.cpp:270 +msgid "Micro Vias:" +msgstr "Micro Vias:" + +#: pcbnew/dialog_track_options.cpp:232 +msgid "Micro Via Size" +msgstr "Diametre Micro Via" + +#: pcbnew/dialog_track_options.cpp:245 +msgid "Micro Via Drill" +msgstr "Perçage Micro Via" + +#: pcbnew/dialog_track_options.cpp:260 +msgid "Allows Micro Vias" +msgstr "Autorise Micro Vias" + +#: pcbnew/dialog_track_options.cpp:265 +#: pcbnew/dialog_track_options.cpp:268 +msgid "" +"Allows use of micro vias\n" +"They are very small vias only from an external copper layer to its near neightbour\n" +msgstr "" +"Autorise l'utilisation de micro vias\n" +"Ce sont de petites vias allant d'une couche externe a la plus proche couche interne uniquement\n" + +#: pcbnew/dialog_track_options.cpp:276 +msgid "Track Width" +msgstr "Epais. Piste" + +#: pcbnew/dialog_track_options.cpp:290 +#: pcbnew/dialog_drc.cpp:439 +msgid "Clearance" +msgstr "Isolation" + +#: pcbnew/dialog_track_options.cpp:304 +msgid "Mask clearance" +msgstr "Retrait Masque" + #: pcbnew/find.cpp:114 msgid "Marker found" msgstr "Marqueur trouvé" @@ -4352,35 +4348,6 @@ msgstr "Chercher Marqueur" msgid "Find Next Marker" msgstr "Marqueur Suivant" -#: pcbnew/class_board.cpp:415 -msgid "Nodes" -msgstr "Nodes" - -#: pcbnew/class_board.cpp:418 -msgid "Links" -msgstr "Liens" - -#: pcbnew/class_board.cpp:421 -msgid "Nets" -msgstr "Nets" - -#: pcbnew/class_board.cpp:424 -msgid "Connect" -msgstr "Connect" - -#: pcbnew/class_board.cpp:427 -#: eeschema/eelayer.h:116 -msgid "NoConn" -msgstr "Non Conn" - -#: pcbnew/class_drawsegment.cpp:161 -msgid "Shape" -msgstr "Forme" - -#: pcbnew/class_drawsegment.cpp:168 -msgid " Arc " -msgstr " Arc " - #: pcbnew/menubarpcb.cpp:42 msgid "Load Board Ctrl-O" msgstr "Charger Circuit Imprimé (Ctrl O)" @@ -4956,6 +4923,10 @@ 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" @@ -4973,11 +4944,11 @@ msgstr "Netcode" msgid "Netname" msgstr "NetName" -#: pcbnew/class_zone.cpp:516 +#: pcbnew/class_zone.cpp:527 msgid "Corners" msgstr "Sommets" -#: pcbnew/class_zone.cpp:520 +#: pcbnew/class_zone.cpp:531 msgid "Hatch lines" msgstr "Lignes de Hachure" @@ -10031,11 +10002,6 @@ msgstr "S msgid "grid user" msgstr "grille user" -#: pcbnew/zones.h:59 -#: pcbnew/dialog_zones_by_polygon.h:53 -msgid "Fill Zones Options" -msgstr "Options de remplissage de Zone" - #: pcbnew/gen_self.h:217 msgid "Length(inch):" msgstr "Longueur (pouces):" @@ -10156,6 +10122,10 @@ msgstr "Afficher Modules Cmp" msgid "Show Modules Cu" msgstr "Afficher Modules Cu" +#: pcbnew/dialog_zones_by_polygon.h:53 +msgid "Fill Zones Options" +msgstr "Options de remplissage de Zone" + #: pcbnew/dialog_gendrill.h:50 msgid "WinEDA_DrillFrame" msgstr "WinEDA_DrillFrame" diff --git a/kicad/CMakeLists.txt b/kicad/CMakeLists.txt index b0e91e2b58..01ddbae1e6 100644 --- a/kicad/CMakeLists.txt +++ b/kicad/CMakeLists.txt @@ -17,7 +17,7 @@ IF(WIN32) IF(MINGW) # resource compilation for mingw (http://www.cmake.org/Bug/view.php?id=4068) ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/kicad_rc.o - COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR}} -I ${wxWidgets_ROOT_DIR}/include -i ${CMAKE_CURRENT_SOURCE_DIR}/kicad.rc -o ${CMAKE_CURRENT_BINARY_DIR}/kicad_rc.o) SET(KICAD_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/kicad_rc.o) diff --git a/nsis_win_installer/install.nsi b/nsis_win_installer/install.nsi index bb6ff821ba..88c8244ebf 100644 --- a/nsis_win_installer/install.nsi +++ b/nsis_win_installer/install.nsi @@ -17,8 +17,8 @@ ; General Product Description Definitions !define PRODUCT_NAME "KiCad" -!define PRODUCT_VERSION "2007.07.09" -!define PRODUCT_WEB_SITE "http://www.lis.inpg.fr/realise_au_lis/kicad/" +!define PRODUCT_VERSION "2008.01.25" +!define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/" !define COMPANY_NAME "" !define TRADE_MARKS "" !define COPYRIGHT "Jean-Pierre Charras" @@ -272,4 +272,4 @@ Function CheckAlreadyInstalled StrCmp $R0 "" +3 MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(ALREADY_INSTALLED) /SD IDOK IDOK +2 Abort -FunctionEnd \ No newline at end of file +FunctionEnd diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 82df4bf3e8..6ec3d006f5 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -153,7 +153,7 @@ IF(WIN32) IF(MINGW) # resource compilation for mingw (http://www.cmake.org/Bug/view.php?id=4068) ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pcbnew_rc.o - COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND windres.exe -I ${CMAKE_CURRENT_SOURCE_DIR}} -I ${wxWidgets_ROOT_DIR}/include -i ${CMAKE_CURRENT_SOURCE_DIR}/pcbnew.rc -o ${CMAKE_CURRENT_BINARY_DIR}/pcbnew_rc.o) SET(PCBNEW_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/pcbnew_rc.o) diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h index efed1c5a1a..9090925576 100644 --- a/pcbnew/class_pad.h +++ b/pcbnew/class_pad.h @@ -11,9 +11,9 @@ class Pcb3D_GLCanvas; class D_PAD : public BOARD_ITEM { private: - int m_NetCode; // Net number for fast comparisons + int m_NetCode; // Net number for fast comparisons + - public: wxPoint m_Pos; // pad Position on board @@ -27,7 +27,7 @@ public: wxString m_Netname; /* Net Name */ - int m_Masque_Layer; // Bitwise layer :1= copper layer, 15= cmp, + int m_Masque_Layer; // Bitwise layer :1= copper layer, 15= cmp, // 2..14 = internal layers // 16 .. 31 = technical layers @@ -37,7 +37,19 @@ public: wxSize m_Drill; // Drill diam (drill shape = PAD_CIRCLE) or drill size(shape = OVAL) // for drill shape = PAD_CIRCLE, drill diam = m_Drill.x - wxSize m_Offset; // Offset de la forme (pastilles excentrees) + wxSize m_Offset; /*This parameter is usefull only for oblong pads (it can be used for other + * shapes, but without any interest). + * this is the offset between the pad hole and the pad shape (you must + * understand here pad shape = copper area around the hole) + * Most of cases, the hole is the centre of the shape (m_Offset = 0). + * But some board designers use oblong pads with a hole moved to one of the + * oblong pad shape ends. + * In all cases the pad position is the pad hole. + * The physical shape position (used to draw it for instance) is pad + * position (m_Pos) + m_Offset. + * D_PAD::ReturnShapePos() returns the physical shape position according to + * the offset and the pad rotation.*/ + wxSize m_Size; // X and Y size ( relative to orient 0) wxSize m_DeltaSize; // delta sur formes rectangle -> trapezes @@ -54,6 +66,9 @@ public: int m_physical_connexion; // variable used in rastnest computations // handle block number in track connection + int m_zone_connexion; // variable used in rastnest computations + // handle block number in zone connection + public: D_PAD( MODULE* parent ); D_PAD( D_PAD* pad ); @@ -72,58 +87,59 @@ public: { return m_Pos; } + + void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; } - - + + /* remove from linked list */ void UnLink(); /* Reading and writing data on files */ int ReadDescr( FILE* File, int* LineNum = NULL ); - + /** * Function Save * writes the data structures for this object out to a FILE in "*.brd" format. * @param aFile The FILE to write to. * @return bool - true if success writing else false. - */ - bool Save( FILE* aFile ) const; - + */ + bool Save( FILE* aFile ) const; + - /* drawing functions */ void Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int draw_mode ); void Draw3D( Pcb3D_GLCanvas* glcanvas ); // others void SetPadName( const wxString& name ); // Change pad name - wxString ReturnStringPadName(); // Return pad name as string in a wxString + wxString ReturnStringPadName(); // Return pad name as string in a wxString void ReturnStringPadName( wxString& text ); // Return pad name as string in a buffer - void ComputeRayon(); // compute m_Rayon, rayon du cercle exinscrit - const wxPoint ReturnShapePos(); // retourne la position + void ComputeRayon(); // compute m_Rayon, rayon du cercle exinscrit + const wxPoint ReturnShapePos(); // retourne la position + - /** * Function GetNet * @return int - the netcode */ int GetNet() const { return m_NetCode; } void SetNet( int aNetCode ) { m_NetCode = aNetCode; } - - + + /** * Function Display_Infos * has knowledge about the frame and how and where to put status information * about this object into the frame's message panel. * Is virtual from EDA_BaseStruct. * @param frame A WinEDA_DrawFrame in which to print status information. - */ + */ void Display_Infos( WinEDA_DrawFrame* frame ); - + /** * Function IsOnLayer * tests to see if this object is on the given layer. Is virtual so @@ -132,9 +148,9 @@ public: * @param aLayer The layer to test for. * @return bool - true if on given layer, else false. */ - bool IsOnLayer( int aLayer ) const; + bool IsOnLayer( int aLayer ) const; + - /** * Function HitTest * tests if the given wxPoint is within the bounds of this object. @@ -152,17 +168,18 @@ public: { return wxT( "PAD" ); } - - + + /** * Function Compare * compares two pads and return 0 if they are equal. * @return int - <0 if left less than right, 0 if equal, >0 if left greater than right. */ - static int Compare( const D_PAD* padref, const D_PAD* padcmp ); + static int Compare( const D_PAD* padref, const D_PAD* padcmp ); #if defined (DEBUG) + /** * Function Show * is used to output the object tree, currently for debugging only. diff --git a/pcbnew/classpcb.cpp b/pcbnew/classpcb.cpp index 366efbde58..8f29076f77 100644 --- a/pcbnew/classpcb.cpp +++ b/pcbnew/classpcb.cpp @@ -127,7 +127,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings() // Default values for designing boards { int ii; - + static const int default_layer_color[32] = { GREEN, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, LIGHTGRAY, @@ -146,11 +146,16 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings() LIGHTGRAY }; - m_CopperLayerCount = 2; // Default design is a double sided board - m_ViaDrill = 250; // via drill (for the entire board) - m_CurrentViaSize = 450; // Current via size - m_CurrentViaType = VIA_THROUGH; /* via type (BLIND, TROUGHT ...), bits 1 and 2 (not 0 and 1)*/ - m_CurrentTrackWidth = 170; // current track width + m_CopperLayerCount = 2; // Default design is a double sided board + m_ViaDrill = 250; // defualt via drill (for the entire board) + m_ViaDrillCustomValue = 250; // via drill for vias which must have a defined drill value + m_CurrentViaSize = 450; // Current via size + m_CurrentViaType = VIA_THROUGH; // via type (VIA_BLIND_BURIED, VIA_TROUGHT VIA_MICROVIA) + m_CurrentTrackWidth = 170; // current track width + m_UseConnectedTrackWidth = false; // if true, when creating a new track starting on an existing track, use this track width + m_MicroViaDrill = 50; // micro via drill (for the entire board) + m_CurrentMicroViaSize = 150; // Current micro via size + m_MicroViasAllowed = false; // true to allow micro vias for( ii = 0; ii < HISTORY_NUMBER; ii++ ) { m_TrackWidthHistory[ii] = 0; // Last HISTORY_NUMBER used track widths diff --git a/pcbnew/dialog_track_options.cpp b/pcbnew/dialog_track_options.cpp index 7e2a9199bd..a4cdb9fd9d 100644 --- a/pcbnew/dialog_track_options.cpp +++ b/pcbnew/dialog_track_options.cpp @@ -399,7 +399,7 @@ void WinEDA_PcbTracksDialog::SetDisplayValue() Internal_Unit ); PutValueInLocalUnits( *m_OptViaDrill, g_DesignSettings.m_ViaDrill, Internal_Unit ); PutValueInLocalUnits( *m_MicroViaDrillCtrl, g_DesignSettings.m_MicroViaDrill, Internal_Unit ); - PutValueInLocalUnits( *m_OptCustomViaDrill, g_ViaHoleLastValue, Internal_Unit ); + PutValueInLocalUnits( *m_OptCustomViaDrill, g_DesignSettings.m_ViaDrillCustomValue, Internal_Unit ); PutValueInLocalUnits( *m_OptTrackWidth, g_DesignSettings.m_CurrentTrackWidth, Internal_Unit ); PutValueInLocalUnits( *m_OptTrackClearance, g_DesignSettings.m_TrackClearence, Internal_Unit ); PutValueInLocalUnits( *m_OptMaskMargin, g_DesignSettings.m_MaskMargin, Internal_Unit ); @@ -431,7 +431,7 @@ void WinEDA_PcbTracksDialog::AcceptPcbOptions( wxCommandEvent& event ) ReturnValueFromTextCtrl( *m_MicroViaDrillCtrl, m_Parent->m_InternalUnits ); g_DesignSettings.m_ViaDrill = ReturnValueFromTextCtrl( *m_OptViaDrill, m_Parent->m_InternalUnits ); - g_ViaHoleLastValue = + g_DesignSettings.m_ViaDrillCustomValue = ReturnValueFromTextCtrl( *m_OptCustomViaDrill, m_Parent->m_InternalUnits ); g_DesignSettings.m_MicroViasAllowed = m_AllowMicroViaCtrl->IsChecked(); diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index e6a127e0af..7e71e4d457 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -84,6 +84,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_WIDTH1: case ID_POPUP_PCB_SELECT_WIDTH2: case ID_POPUP_PCB_SELECT_WIDTH3: @@ -339,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() ); @@ -833,7 +835,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) DisplayTrackSettings(); m_SelTrackWidthBox_Changed = FALSE; m_SelViaSizeBox_Changed = FALSE; - } + g_DesignSettings.m_UseConnectedTrackWidth = false; + } break; case ID_POPUP_PCB_SELECT_WIDTH1: @@ -845,6 +848,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; { int ii = id - ID_POPUP_PCB_SELECT_WIDTH1; g_DesignSettings.m_CurrentTrackWidth = g_DesignSettings.m_TrackWidthHistory[ii]; @@ -852,6 +856,15 @@ 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: + DrawPanel->MouseToCursorSchema(); + g_DesignSettings.m_UseConnectedTrackWidth = true; + break; + case ID_POPUP_PCB_SELECT_VIASIZE: break; diff --git a/pcbnew/editrack.cpp b/pcbnew/editrack.cpp index 05402060c0..3937b24e20 100644 --- a/pcbnew/editrack.cpp +++ b/pcbnew/editrack.cpp @@ -44,7 +44,7 @@ static void Exit_Editrack( WinEDA_DrawPanel* Panel, wxDC* DC ) ShowNewTrackWhenMovingCursor( Panel, DC, FALSE ); if( g_HightLigt_Status ) frame->Hight_Light( DC ); - + g_HightLigth_NetCode = OldNetCodeSurbrillance; if( OldEtatSurbrillance ) frame->Hight_Light( DC ); @@ -59,7 +59,7 @@ static void Exit_Editrack( WinEDA_DrawPanel* Panel, wxDC* DC ) delete track; } } - + Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; frame->SetCurItem( NULL ); @@ -73,7 +73,7 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) /* * Routine d'initialisation d'un trace de piste et/ou de mise en place d'un * nouveau point piste - * + * * Si pas de piste en cours de trace: * - Recherche de netname de la nouvelle piste ( pad de depart out netname * de la piste si depart sur une ancienne piste @@ -84,58 +84,69 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) * - si DRC OK : addition d'un nouveau point piste */ { - D_PAD* pt_pad = NULL; - TRACK* adr_buf = NULL, * Track; + D_PAD* pt_pad = NULL; + TRACK* TrackOnStartPoint = NULL, * Track; int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer]; EDA_BaseStruct* LockPoint; wxPoint pos = GetScreen()->m_Curseur; + static int InitialTrackWidthValue; /* first track segment width. + * used when we are in the auto tack width mode */ DrawPanel->ManageCurseur = ShowNewTrackWhenMovingCursor; DrawPanel->ForceCloseManageCurseur = Exit_Editrack; - if( track == NULL ) /* debut reel du trace */ + if( track == NULL ) /* Starting a new track */ { - /* effacement surbrillance ancienne */ + /* undrw old hightlight */ OldNetCodeSurbrillance = g_HightLigth_NetCode; OldEtatSurbrillance = g_HightLigt_Status; if( g_HightLigt_Status ) Hight_Light( DC ); - g_FirstTrackSegment = g_CurrentTrackSegment = new TRACK( m_Pcb ); + InitialTrackWidthValue = -1; // Set to "no value" + g_FirstTrackSegment = g_CurrentTrackSegment = new TRACK( m_Pcb ); g_CurrentTrackSegment->m_Flags = IS_NEW; g_TrackSegmentCount = 1; g_HightLigth_NetCode = 0; - /* Localisation de la pastille de reference de la piste: */ + /* Search for a pad at starting point of the new track: */ LockPoint = LocateLockPoint( m_Pcb, pos, masquelayer ); - if( LockPoint ) + if( LockPoint ) // An item (pad or track) is found { if( LockPoint->Type() == TYPEPAD ) { pt_pad = (D_PAD*) LockPoint; - - /* le debut de la piste est remis sur le centre du pad */ + + /* A pad is found: put the starting point on pad centre */ pos = pt_pad->m_Pos; g_HightLigth_NetCode = pt_pad->GetNet(); } - else /* le point d'accrochage est un segment */ + else /* A track segment is found */ { - adr_buf = (TRACK*) LockPoint; - g_HightLigth_NetCode = adr_buf->GetNet(); - CreateLockPoint( &pos.x, &pos.y, adr_buf, NULL ); + TrackOnStartPoint = (TRACK*) LockPoint; + g_HightLigth_NetCode = TrackOnStartPoint->GetNet(); + CreateLockPoint( &pos.x, &pos.y, TrackOnStartPoint, NULL ); } } build_ratsnest_pad( LockPoint, wxPoint( 0, 0 ), TRUE ); Hight_Light( DC ); - g_CurrentTrackSegment->m_Flags = IS_NEW; + g_CurrentTrackSegment->m_Flags = IS_NEW; g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer ); - g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; - g_CurrentTrackSegment->m_Start = pos; - g_CurrentTrackSegment->m_End = g_CurrentTrackSegment->m_Start; + g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; + if( g_DesignSettings.m_UseConnectedTrackWidth ) + { + if( TrackOnStartPoint && TrackOnStartPoint->Type() == TYPETRACK ) + { + InitialTrackWidthValue = TrackOnStartPoint->m_Width; + g_CurrentTrackSegment->m_Width = InitialTrackWidthValue; + } + } + g_CurrentTrackSegment->m_Start = pos; + g_CurrentTrackSegment->m_End = g_CurrentTrackSegment->m_Start; g_CurrentTrackSegment->SetNet( g_HightLigth_NetCode ); if( pt_pad ) { @@ -143,10 +154,10 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) g_CurrentTrackSegment->SetState( BEGIN_ONPAD, ON ); } else - g_CurrentTrackSegment->start = adr_buf; + g_CurrentTrackSegment->start = TrackOnStartPoint; if( g_TwoSegmentTrackBuild ) - { + { // Create 2 segments g_CurrentTrackSegment = g_CurrentTrackSegment->Copy(); g_TrackSegmentCount++; @@ -159,7 +170,7 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) g_CurrentTrackSegment->Display_Infos( this ); SetCurItem( g_CurrentTrackSegment ); DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); - + if( Drc_On ) { if( BAD_DRC == m_drc->Drc( g_CurrentTrackSegment, m_Pcb->m_Track ) ) @@ -175,7 +186,7 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) { if( BAD_DRC == m_drc->Drc( g_CurrentTrackSegment, m_Pcb->m_Track ) ) return NULL; - + if( g_TwoSegmentTrackBuild // We must handle 2 segments && g_CurrentTrackSegment->Back() ) { @@ -220,7 +231,10 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) g_TrackSegmentCount++; g_CurrentTrackSegment->m_Start = g_CurrentTrackSegment->m_End; g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer ); - g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; + if( !g_DesignSettings.m_UseConnectedTrackWidth ) + { + g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; + } /* Show the new position */ ShowNewTrackWhenMovingCursor( DrawPanel, DC, FALSE ); } @@ -238,7 +252,7 @@ int WinEDA_PcbFrame::Add_45_degrees_Segment( wxDC* DC, TRACK* pt_segm ) /* rectifie un virage a 90 et le modifie par 2 coudes a 45 * n'opere que sur des segments horizontaux ou verticaux. - * + * * entree : pointeur sur le segment qui vient d'etre trace * On suppose que le segment precedent est celui qui a ete * precedement trace @@ -279,7 +293,7 @@ int WinEDA_PcbFrame::Add_45_degrees_Segment( wxDC* DC, TRACK* pt_segm ) // les segments doivent etre de longueur suffisante: if( MAX( abs( dx0 ), abs( dy0 ) ) < (pas_45 * 2) ) return 0; - + if( MAX( abs( dx1 ), abs( dy1 ) ) < (pas_45 * 2) ) return 0; @@ -382,7 +396,7 @@ void WinEDA_PcbFrame::End_Route( TRACK* track, wxDC* DC ) if( track == NULL ) return; - if( Drc_On && BAD_DRC==m_drc->Drc( g_CurrentTrackSegment, m_Pcb->m_Track) ) + if( Drc_On && BAD_DRC==m_drc->Drc( g_CurrentTrackSegment, m_Pcb->m_Track ) ) return; /* Sauvegarde des coord du point terminal de la piste */ @@ -512,15 +526,17 @@ void ShowNewTrackWhenMovingCursor( WinEDA_DrawPanel* panel, wxDC* DC, bool erase /* dessin de la nouvelle piste : mise a jour du point d'arrivee */ g_CurrentTrackSegment->SetLayer( screen->m_Active_Layer ); - g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; + if( ! g_DesignSettings.m_UseConnectedTrackWidth ) + g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; if( g_TwoSegmentTrackBuild ) { TRACK* previous_track = (TRACK*) g_CurrentTrackSegment->Pback; if( previous_track && (previous_track->Type() == TYPETRACK) ) { previous_track->SetLayer( screen->m_Active_Layer ); - previous_track->m_Width = g_DesignSettings.m_CurrentTrackWidth; - } + if( ! g_DesignSettings.m_UseConnectedTrackWidth ) + previous_track->m_Width = g_DesignSettings.m_CurrentTrackWidth; + } } if( Track_45_Only ) @@ -713,10 +729,10 @@ TRACK* DeleteNullTrackSegments( BOARD* pcb, TRACK* track, int* segmcount ) * return a pointer on the first segment (start of track list) */ { - TRACK* firsttrack = track; - TRACK* oldtrack; - int nn = 0; - BOARD_ITEM* LockPoint; + TRACK* firsttrack = track; + TRACK* oldtrack; + int nn = 0; + BOARD_ITEM* LockPoint; if( track == 0 ) return NULL; @@ -742,7 +758,7 @@ TRACK* DeleteNullTrackSegments( BOARD* pcb, TRACK* track, int* segmcount ) *segmcount = nn; if( nn == 0 ) - return NULL; // all the new track segments have been deleted + return NULL; // all the new track segments have been deleted // we must set the pointers on connected items and the connection status @@ -802,7 +818,7 @@ void EnsureEndTrackOnPad( D_PAD* Pad ) TRACK* lasttrack = g_CurrentTrackSegment; if( !g_CurrentTrackSegment->IsNull() ) - { + { /* Must create a new segment, from track end to pad center */ g_CurrentTrackSegment = lasttrack->Copy(); g_TrackSegmentCount++; @@ -810,7 +826,7 @@ void EnsureEndTrackOnPad( D_PAD* Pad ) g_CurrentTrackSegment->Pback = lasttrack; lasttrack->end = g_CurrentTrackSegment; } - + g_CurrentTrackSegment->m_End = Pad->m_Pos; g_CurrentTrackSegment->SetState( END_ONPAD, OFF ); diff --git a/pcbnew/modedit_onclick.cpp b/pcbnew/modedit_onclick.cpp index 50985bd8da..1a398216dd 100644 --- a/pcbnew/modedit_onclick.cpp +++ b/pcbnew/modedit_onclick.cpp @@ -23,7 +23,6 @@ #include "Global_Options_Pad.xpm" #include "Delete_Pad.xpm" #include "Export_Options_Pad.xpm" -#include "Width_Segment.xpm" #include "Select_Layer_Pair.xpm" /*************************************************************************/ diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index 1cc94668fb..4bb0cc4d07 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -47,7 +47,6 @@ #include "Select_W_Layer.xpm" #include "Width_Track.xpm" #include "Width_Vias.xpm" -#include "Width_Segment.xpm" #include "Width_Net.xpm" #include "Width_Track_Via.xpm" #include "Select_Layer_Pair.xpm" @@ -71,6 +70,16 @@ static wxMenu* Append_Track_Width_List() double value; trackwidth_menu = new wxMenu; + + trackwidth_menu->Append( ID_POPUP_PCB_SELECT_AUTO_WIDTH, + _( "Auto Width" ), + _( + "Use the track width when starting on a track, otherwise the current track width" ), + TRUE ); + + if( g_DesignSettings.m_UseConnectedTrackWidth ) + trackwidth_menu->Check( ID_POPUP_PCB_SELECT_AUTO_WIDTH, TRUE ); + for( ii = 0; (ii < HISTORY_NUMBER) && (ii < TRACK_HISTORY_NUMBER_MAX); ii++ ) { if( g_DesignSettings.m_TrackWidthHistory[ii] == 0 ) @@ -84,7 +93,9 @@ static wxMenu* Append_Track_Width_List() msg.Printf( _( "Track %.3f" ), value ); trackwidth_menu->Append( ID_POPUP_PCB_SELECT_WIDTH1 + ii, msg, wxEmptyString, TRUE ); - if( g_DesignSettings.m_TrackWidthHistory[ii] == g_DesignSettings.m_CurrentTrackWidth ) + + if( (g_DesignSettings.m_TrackWidthHistory[ii] == g_DesignSettings.m_CurrentTrackWidth) + && ! g_DesignSettings.m_UseConnectedTrackWidth ) trackwidth_menu->Check( ID_POPUP_PCB_SELECT_WIDTH1 + ii, TRUE ); } @@ -172,12 +183,12 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) // printf( "cursor=(%d, %d) select=(%d,%d)\n", cursorPos.x, cursorPos.y, selectPos.x, selectPos.y ); /* We can reselect another item only if there are no item being edited - * because ALL moving functions use GetCurItem(), therefore GetCurItem() - * must return the same item during moving. We know an item is moving - * if( item && (item->m_Flags != 0)) is true and after calling - * PcbGeneralLocateAndDisplay(), GetCurItem() is any arbitrary BOARD_ITEM, - * not the current item being edited. In such case we cannot call - * PcbGeneralLocateAndDisplay(). + * because ALL moving functions use GetCurItem(), therefore GetCurItem() + * must return the same item during moving. We know an item is moving + * if( item && (item->m_Flags != 0)) is true and after calling + * PcbGeneralLocateAndDisplay(), GetCurItem() is any arbitrary BOARD_ITEM, + * not the current item being edited. In such case we cannot call + * PcbGeneralLocateAndDisplay(). */ if( !item || (item->m_Flags == 0) ) { @@ -329,7 +340,7 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) wxT( "WinEDA_PcbFrame::OnRightClick() Error: illegal DrawType %d" ), item->Type() ); DisplayError( this, msg ); - SetCurItem(NULL); + SetCurItem( NULL ); break; default: @@ -337,9 +348,10 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) wxT( "WinEDA_PcbFrame::OnRightClick() Error: unknown DrawType %d" ), item->Type() ); DisplayError( this, msg ); - // Attempt to clear error (but should no occurs ) - if ( item->Type() >= MAX_STRUCT_TYPE_ID ) - SetCurItem(NULL); + + // Attempt to clear error (but should no occurs ) + if( item->Type() >= MAX_STRUCT_TYPE_ID ) + SetCurItem( NULL ); break; } @@ -509,21 +521,26 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) ID_POPUP_PCB_VIA_EDITING, _( "Edit Via" ), edit_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT, _( "Set via hole to Default" ), apply_xpm ); - ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_TO_VALUE, _( - "Set via hole to alt value" ), options_new_pad_xpm ); - ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE, - _( "Set the via hole alt value" ), edit_xpm ); + msg = _( "Set via hole to a specific value. This specfic value is currently" ); + msg << wxT(" ") << ReturnStringFromValue( g_UnitMetric, g_DesignSettings.m_ViaDrillCustomValue, m_InternalUnits ); + ADD_MENUITEM_WITH_HELP( via_mnu, ID_POPUP_PCB_VIA_HOLE_TO_VALUE, + _( "Set via hole to alt value" ), msg, + options_new_pad_xpm ); + msg = _( "Set alt via hole value. This value is currently" ); + msg << wxT(" ") << ReturnStringFromValue( g_UnitMetric, g_DesignSettings.m_ViaDrillCustomValue, m_InternalUnits ); + ADD_MENUITEM_WITH_HELP( via_mnu, ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE, + _( "Set the via hole alt value" ), msg, edit_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_EXPORT, _( "Export Via hole to alt value" ), Export_Options_Pad_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS, _( "Export via hole to others id vias" ), global_options_pad_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT, _( "Set ALL via holes to default" ), apply_xpm ); - if( ! Track->IsDrillDefault() ) + if( !Track->IsDrillDefault() ) { via_mnu->Enable( ID_POPUP_PCB_VIA_HOLE_EXPORT, FALSE ); } - if( g_ViaHoleLastValue <= 0 ) + if( g_DesignSettings.m_ViaDrillCustomValue <= 0 ) via_mnu->Enable( ID_POPUP_PCB_VIA_HOLE_TO_VALUE, FALSE ); } else @@ -563,24 +580,27 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) } msg = AddHotkeyName( _( "Place Via" ), s_Board_Editor_Hokeys_Descr, HK_ADD_VIA ); PopMenu->Append( ID_POPUP_PCB_PLACE_VIA, msg ); - // See if we can place a Micro Via (4 or more layers, and start from an external layer): - if ( GetScreen()->IsMicroViaAcceptable() ) - { - msg = AddHotkeyName( _( "Place Micro Via" ), s_Board_Editor_Hokeys_Descr, HK_ADD_MICROVIA ); - PopMenu->Append( ID_POPUP_PCB_PLACE_MICROVIA, msg ); - } + + // See if we can place a Micro Via (4 or more layers, and start from an external layer): + if( GetScreen()->IsMicroViaAcceptable() ) + { + msg = AddHotkeyName( _( + "Place Micro Via" ), s_Board_Editor_Hokeys_Descr, + HK_ADD_MICROVIA ); + PopMenu->Append( ID_POPUP_PCB_PLACE_MICROVIA, msg ); + } } // track Width control : - wxMenu* track_mnu = new wxMenu; - ADD_MENUITEM_WITH_SUBMENU( PopMenu, track_mnu, - ID_POPUP_PCB_EDIT_TRACK_MNU, _( "Change Width" ), width_track_xpm ); - ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_TRACKSEG, - Track->Type()==TYPEVIA ? _( "Edit Via" ) : _( - "Edit Segment" ), width_segment_xpm ); - - if( !flags ) + wxMenu* track_mnu; + if( !flags ) // track Width control : { + track_mnu = new wxMenu; + ADD_MENUITEM_WITH_SUBMENU( PopMenu, track_mnu, + ID_POPUP_PCB_EDIT_TRACK_MNU, _( "Change Width" ), width_track_xpm ); + ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_TRACKSEG, + Track->Type()==TYPEVIA ? _( "Edit Via" ) : _( "Edit Segment" ), width_segment_xpm ); + ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_TRACK, _( "Edit Track" ), width_track_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_NET, @@ -644,19 +664,19 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu { if( edge_zone->m_Flags ) { - if( (edge_zone->m_Flags & IN_EDIT ) ) - ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_CORNER, - _( "Place Corner" ), apply_xpm ); - else - ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_OUTLINES, - _( "Place Zone" ), apply_xpm ); + if( (edge_zone->m_Flags & IN_EDIT ) ) + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_CORNER, + _( "Place Corner" ), apply_xpm ); + else + ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_OUTLINES, + _( "Place Zone" ), apply_xpm ); } else { - wxMenu * zones_menu = new wxMenu(); - ADD_MENUITEM_WITH_SUBMENU( aPopMenu, zones_menu, - -1, _( "Zones" ), add_zone_xpm ); - int index; + wxMenu* zones_menu = new wxMenu(); + ADD_MENUITEM_WITH_SUBMENU( aPopMenu, zones_menu, + -1, _( "Zones" ), add_zone_xpm ); + int index; if( ( index = edge_zone->HitTestForCorner( GetScreen()->RefPos( true ) ) ) >= 0 ) { ADD_MENUITEM( zones_menu, ID_POPUP_PCB_MOVE_ZONE_CORNER, @@ -688,10 +708,10 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu _( "Edit Zone Params" ), edit_xpm ); zones_menu->AppendSeparator(); - if ( index >= 0 && edge_zone->m_Poly->IsCutoutContour( edge_zone->m_CornerSelection ) ) - ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DELETE_ZONE_CUTOUT, - _( "Delete Cutout" ), delete_xpm ); - + if( index >= 0 && edge_zone->m_Poly->IsCutoutContour( edge_zone->m_CornerSelection ) ) + ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DELETE_ZONE_CUTOUT, + _( "Delete Cutout" ), delete_xpm ); + ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DELETE_ZONE_CONTAINER, _( "Delete Zone Outline" ), delete_xpm ); } diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 4529392ae2..efc7a525fe 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -114,6 +114,7 @@ BEGIN_EVENT_TABLE( WinEDA_PcbFrame, WinEDA_BasePcbFrame ) EVT_TOOL( ID_GET_NETLIST, WinEDA_PcbFrame::Process_Special_Functions ) EVT_TOOL( ID_DRC_CONTROL, WinEDA_PcbFrame::Process_Special_Functions ) EVT_TOOL( ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR, WinEDA_PcbFrame::Process_Special_Functions ) + EVT_TOOL( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, WinEDA_PcbFrame::Process_Special_Functions ) EVT_KICAD_CHOICEBOX( ID_TOOLBARH_PCB_SELECT_LAYER, WinEDA_PcbFrame::Process_Special_Functions ) EVT_KICAD_CHOICEBOX( ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, @@ -442,6 +443,8 @@ void WinEDA_PcbFrame::SetToolbars() if( m_AuxiliaryToolBar ) { wxString msg; + m_AuxiliaryToolBar->ToggleTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, + g_DesignSettings.m_UseConnectedTrackWidth ); if( m_SelTrackWidthBox && m_SelTrackWidthBox_Changed ) { m_SelTrackWidthBox_Changed = FALSE; diff --git a/pcbnew/pcbnew.h b/pcbnew/pcbnew.h index 4a397db8e1..b499d93df0 100644 --- a/pcbnew/pcbnew.h +++ b/pcbnew/pcbnew.h @@ -294,8 +294,6 @@ eda_global wxString g_ViaType_Name[4] #endif ; -eda_global int g_ViaHoleLastValue; // Last value for non default value via hole - /* couleurs des autres items des empreintes */ #if defined MAIN int g_PadCMPColor = RED; diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index c05423279b..7c8cbfe093 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -35,7 +35,6 @@ #include "mw_Add_Line.xpm" #include "mw_Add_Gap.xpm" #include "mw_toolbar.xpm" -#include "Add_Tracks.xpm" #include "Show_Zone.xpm" #include "net_hightlight.xpm" #include "PcbOffset.xpm" @@ -282,7 +281,9 @@ void WinEDA_PcbFrame::ReCreateHToolbar() _( "auto zoom" ) ); m_HToolBar->AddSeparator(); - msg = AddHotkeyName( _( "Find components and texts" ), s_Board_Editor_Hokeys_Descr, HK_FIND_ITEM ); + msg = AddHotkeyName( _( + "Find components and texts" ), s_Board_Editor_Hokeys_Descr, + HK_FIND_ITEM ); m_HToolBar->AddTool( ID_FIND_ITEMS, wxEmptyString, BITMAP( find_xpm ), msg ); @@ -526,6 +527,12 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() /****************************************************/ /* Create auxiliary horizontal toolbar + * displays: + * existing track width choice + * selection for auto track width + * existing via size choice + * grid size choice + * zoom level choice */ { int ii; @@ -544,6 +551,13 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() m_AuxiliaryToolBar->AddControl( m_SelTrackWidthBox ); m_SelTrackWidthBox_Changed = TRUE; + m_AuxiliaryToolBar->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, + wxEmptyString, + BITMAP( auto_track_width_xpm ), + _( + "Auto track width: when starting on an existing track use its width\notherwise, use current width setting" ), + wxITEM_CHECK ); + m_AuxiliaryToolBar->AddSeparator(); m_SelViaSizeBox = new WinEDAChoiceBox( m_AuxiliaryToolBar, ID_AUX_TOOLBAR_PCB_VIA_SIZE, @@ -610,28 +624,29 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) /**************************************************************************/ { - int ii, jj, ll; - unsigned lenght = 0; - bool rebuild = FALSE; - long current_mask_layer; + int ii, jj, ll; + unsigned lenght = 0; + bool rebuild = FALSE; + long current_mask_layer; if( m_SelLayerBox == NULL ) { if( parent == NULL ) return NULL; - + m_SelLayerBox = new WinEDAChoiceBox( parent, ID_TOOLBARH_PCB_SELECT_LAYER, - - wxPoint( -1, -1 ), -#if defined(__UNIX__) - // Width enough for the longest string: "Component (Page Down)" - // Maybe that string is too long? - wxSize( 230, -1 ) + + wxPoint( -1, -1 ), +#if defined (__UNIX__) + + // Width enough for the longest string: "Component (Page Down)" + // Maybe that string is too long? + wxSize( 230, -1 ) #else - wxSize( LISTBOX_WIDTH+40, -1 ) + wxSize( LISTBOX_WIDTH + 40, -1 ) #endif - ); - + ); + parent->AddControl( m_SelLayerBox ); } @@ -654,8 +669,8 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) m_SelLayerBox->Clear(); for( ii = 0, jj = 0; ii <= EDGE_N; ii++ ) { - // List to append hotkeys in layer box selection - static int HK_SwitchLayer[EDGE_N+1] = { + // List to append hotkeys in layer box selection + static int HK_SwitchLayer[EDGE_N + 1] = { HK_SWITCH_LAYER_TO_COPPER, HK_SWITCH_LAYER_TO_INNER1, HK_SWITCH_LAYER_TO_INNER2, @@ -672,7 +687,7 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) HK_SWITCH_LAYER_TO_INNER13, HK_SWITCH_LAYER_TO_INNER14, HK_SWITCH_LAYER_TO_COMPONENT - }; + }; if( (g_TabOneLayerMask[ii] & Masque_Layer) ) { @@ -680,10 +695,11 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) msg = AddHotkeyName( msg, s_Board_Editor_Hokeys_Descr, HK_SwitchLayer[ii] ); m_SelLayerBox->Append( msg ); m_SelLayerBox->SetClientData( jj, (void*) ii ); - lenght = max(lenght, msg.Len() ); + lenght = max( lenght, msg.Len() ); jj++; } } + // Test me: // int lchar = m_SelLayerBox->GetFont().GetPointSize(); // m_SelLayerBox->SetSize(wxSize(lenght * lchar,-1)); diff --git a/pcbnew/via_edit.cpp b/pcbnew/via_edit.cpp index d879f0672a..fe4cab67a6 100644 --- a/pcbnew/via_edit.cpp +++ b/pcbnew/via_edit.cpp @@ -43,10 +43,10 @@ void WinEDA_PcbFrame::Via_Edit_Control( wxDC* DC, int command_type, SEGVIA* via DrawPanel->MouseToCursorSchema(); case ID_POPUP_PCB_VIA_HOLE_TO_VALUE: // Set the drill via to custom - if( (g_ViaHoleLastValue > 0) && (g_ViaHoleLastValue < via->m_Width) ) + if( (g_DesignSettings.m_ViaDrillCustomValue > 0) && (g_DesignSettings.m_ViaDrillCustomValue < via->m_Width) ) { via->Draw( DrawPanel, DC, GR_XOR ); - via->SetDrillValue( g_ViaHoleLastValue ); + via->SetDrillValue( g_DesignSettings.m_ViaDrillCustomValue ); via->Draw( DrawPanel, DC, GR_OR ); GetScreen()->SetModify(); } @@ -57,12 +57,12 @@ void WinEDA_PcbFrame::Via_Edit_Control( wxDC* DC, int command_type, SEGVIA* via case ID_POPUP_PCB_VIA_HOLE_EXPORT: // Export the current drill value as the new custom value if( via->GetDrillValue() > 0 ) - g_ViaHoleLastValue = via->GetDrillValue(); + g_DesignSettings.m_ViaDrillCustomValue = via->GetDrillValue(); break; case ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS: // Export the current drill value to via which héave the same size if( via->GetDrillValue() > 0 ) - g_ViaHoleLastValue = via->GetDrillValue(); + g_DesignSettings.m_ViaDrillCustomValue = via->GetDrillValue(); via_struct = m_Pcb->m_Track; for( ; via_struct != NULL; via_struct = (TRACK*) via_struct->Pnext ) { diff --git a/pcbnew/zone_filling_algorithm.cpp b/pcbnew/zone_filling_algorithm.cpp index f1bc8fbbe4..438bad27fd 100644 --- a/pcbnew/zone_filling_algorithm.cpp +++ b/pcbnew/zone_filling_algorithm.cpp @@ -134,7 +134,7 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose ) TraceLignePcb( xi, yi, xf, yf, -1, HOLE | CELL_is_EDGE, WRITE_CELL ); } - /* Create a starting point to create the zone filling */ + /* Create a starting point to create the zone filling, from pads */ LISTE_PAD* pad; int cells_count = 0; for( ii = 0, pad = frame->m_Pcb->m_Pads; ii < frame->m_Pcb->m_NbPads; ii++, pad++ ) @@ -157,6 +157,42 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose ) } } + /* Create a starting point to create the zone filling, from vias and tracks */ + TRACK* track; + for( track = frame->m_Pcb->m_Track; track != NULL; track = track->Next() ) + { + if ( ! track->IsOnLayer( GetLayer() ) ) continue; + if ( track->GetNet() != GetNet() ) continue; + wxPoint pos = track->m_Start; + if( m_Poly->TestPointInside( pos.x, pos.y ) ) + { + pos -= Pcb->m_BoundaryBox.m_Pos; + ZoneStartFill.x = ( pos.x + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + + ZoneStartFill.y = ( pos.y + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + BoardCell cell = GetCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM ); + if ( (cell & CELL_is_EDGE) == 0 ) + { + OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); + cells_count++; + } + } + pos = track->m_End; + if( m_Poly->TestPointInside( pos.x, pos.y ) ) + { + pos -= Pcb->m_BoundaryBox.m_Pos; + ZoneStartFill.x = ( pos.x + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + + ZoneStartFill.y = ( pos.y + (g_GridRoutingSize / 2) ) / g_GridRoutingSize; + BoardCell cell = GetCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM ); + if ( (cell & CELL_is_EDGE) == 0 ) + { + OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); + cells_count++; + } + } + } + if( cells_count == 0 ) { if( verbose ) diff --git a/pcbnew/zones.cpp b/pcbnew/zones.cpp deleted file mode 100644 index 4ac77ff4be..0000000000 --- a/pcbnew/zones.cpp +++ /dev/null @@ -1,878 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// - -// Name: zones.cpp -// Purpose: -// Author: jean-pierre Charras -// Modified by: -// Created: 25/01/2006 11:35:19 -// RCS-ID: -// Copyright: GNU License -// Licence: GNU License -///////////////////////////////////////////////////////////////////////////// - -// Generated by DialogBlocks (unregistered), 25/01/2006 11:35:19 - -#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA) -#pragma implementation "zones.h" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include "wx/wx.h" -#endif - -////@begin includes -////@end includes - -#include "zones.h" - -////@begin XPM images -////@end XPM images - -/* Imported functions */ -void Build_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code, - bool Zone_Exclude_Pads, bool Zone_Create_Thermal_Relief ); - - -/* Local functions */ -static void Display_Zone_Netname( WinEDA_PcbFrame* frame ); -static void Exit_Zones( WinEDA_DrawPanel* Panel, wxDC* DC ); -static void Show_Zone_Edge_While_MoveMouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); - -/* Local variables */ -static bool Zone_45_Only = FALSE; -static bool Zone_Exclude_Pads = TRUE; -static bool s_Zone_Create_Thermal_Relief = TRUE; - -/* Time stamp common to all segments relative to the new created zone */ -static unsigned long s_TimeStamp; - -/*! - * WinEDA_ZoneFrame type definition - */ - -IMPLEMENT_DYNAMIC_CLASS( WinEDA_ZoneFrame, wxDialog ) - -/*! - * WinEDA_ZoneFrame event table definition - */ - -BEGIN_EVENT_TABLE( WinEDA_ZoneFrame, wxDialog ) - -////@begin WinEDA_ZoneFrame event table entries -EVT_BUTTON( ID_FILL_ZONE, WinEDA_ZoneFrame::ExecFillZone ) - -EVT_BUTTON( wxID_CANCEL, WinEDA_ZoneFrame::OnCancelClick ) - -EVT_BUTTON( ID_SET_OPTIONS_ZONE, WinEDA_ZoneFrame::ExecFillZone ) - -////@end WinEDA_ZoneFrame event table entries - -END_EVENT_TABLE() - -/*! - * WinEDA_ZoneFrame constructors - */ - -WinEDA_ZoneFrame::WinEDA_ZoneFrame() -{ -} - - -WinEDA_ZoneFrame::WinEDA_ZoneFrame( WinEDA_PcbFrame* parent, - wxWindowID id, - const wxString& caption, - const wxPoint& pos, - const wxSize& size, - long style ) -{ - m_Parent = parent; - Create( parent, id, caption, pos, size, style ); -} - - -/*! - * WinEDA_ZoneFrame creator - */ - -bool WinEDA_ZoneFrame::Create( wxWindow* parent, - wxWindowID id, - const wxString& caption, - const wxPoint& pos, - const wxSize& size, - long style ) -{ -////@begin WinEDA_ZoneFrame member initialisation - m_GridCtrl = NULL; - m_ClearanceValueTitle = NULL; - m_ZoneClearanceCtrl = NULL; - m_FillOpt = NULL; - m_OrientEdgesOpt = NULL; - -////@end WinEDA_ZoneFrame member initialisation - -////@begin WinEDA_ZoneFrame creation - SetExtraStyle( GetExtraStyle() | wxWS_EX_BLOCK_EVENTS ); - wxDialog::Create( parent, id, caption, pos, size, style ); - - CreateControls(); - GetSizer()->Fit( this ); - GetSizer()->SetSizeHints( this ); - Centre(); - -////@end WinEDA_ZoneFrame creation - - return true; -} - - -/*! - * Control creation for WinEDA_ZoneFrame - */ - -void WinEDA_ZoneFrame::CreateControls() -{ - SetFont( *g_DialogFont ); - -////@begin WinEDA_ZoneFrame content construction - // Generated by DialogBlocks, 03/03/2006 13:36:21 (unregistered) - - WinEDA_ZoneFrame* itemDialog1 = this; - - wxBoxSizer* itemBoxSizer2 = new wxBoxSizer( wxHORIZONTAL ); - itemDialog1->SetSizer( itemBoxSizer2 ); - - wxBoxSizer* itemBoxSizer3 = new wxBoxSizer( wxVERTICAL ); - itemBoxSizer2->Add( itemBoxSizer3, 0, wxGROW | wxALL, 5 ); - - static const wxString m_GridCtrlStrings[] = { - _( "0.00000" ), - _( "0.00000" ), - _( "0.00000" ), - _( "0.00000" ) - }; - - m_GridCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX, _( - "Grid size:" ), wxDefaultPosition, wxDefaultSize, 4, - m_GridCtrlStrings, 1, wxRA_SPECIFY_COLS ); - itemBoxSizer3->Add( m_GridCtrl, 0, wxALIGN_LEFT | wxALL, 5 ); - - m_ClearanceValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, - _( "Zone clearance value (mm):" ), - wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer3->Add( m_ClearanceValueTitle, - 0, - wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, - 5 ); - - m_ZoneClearanceCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T( - "" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer3->Add( m_ZoneClearanceCtrl, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); - - itemBoxSizer2->Add( 5, 5, 0, wxGROW | wxALL, 5 ); - - wxBoxSizer* itemBoxSizer8 = new wxBoxSizer( wxVERTICAL ); - itemBoxSizer2->Add( itemBoxSizer8, 0, wxGROW | wxALL, 5 ); - - static const wxString m_FillOptStrings[] = { - _( "Include Pads" ), - _( "Thermal" ), - _( "Exclude Pads" ) - }; - - m_FillOpt = new wxRadioBox( itemDialog1, ID_RADIOBOX1, _( - "Pad options:" ), wxDefaultPosition, wxDefaultSize, 3, - m_FillOptStrings, 1, wxRA_SPECIFY_COLS ); - itemBoxSizer8->Add( m_FillOpt, 0, wxALIGN_LEFT | wxALL, 5 ); - - static const wxString m_OrientEdgesOptStrings[] = { - _( "Any" ), - _( "H , V and 45 deg" ) - }; - - m_OrientEdgesOpt = new wxRadioBox( itemDialog1, ID_RADIOBOX2, - _( "Zone edges orient:" ), wxDefaultPosition, - wxDefaultSize, 2, m_OrientEdgesOptStrings, 1, - wxRA_SPECIFY_COLS ); - - itemBoxSizer8->Add( m_OrientEdgesOpt, 0, wxALIGN_RIGHT | wxALL, 5 ); - - itemBoxSizer2->Add( 5, 5, 0, wxGROW | wxALL, 5 ); - - wxBoxSizer* itemBoxSizer12 = new wxBoxSizer( wxVERTICAL ); - itemBoxSizer2->Add( itemBoxSizer12, 0, wxALIGN_TOP | wxALL, 5 ); - - wxButton* itemButton13 = new wxButton( itemDialog1, ID_FILL_ZONE, - _( "Fill" ), wxDefaultPosition, wxDefaultSize, 0 ); - - itemButton13->SetDefault(); - itemButton13->SetForegroundColour( wxColour( 204, 0, 0 ) ); - itemBoxSizer12->Add( itemButton13, 0, wxGROW | wxALL, 5 ); - - wxButton* itemButton14 = new wxButton( itemDialog1, wxID_CANCEL, - _( "&Cancel" ), wxDefaultPosition, wxDefaultSize, 0 ); - - itemButton14->SetForegroundColour( wxColour( 0, 0, 255 ) ); - itemBoxSizer12->Add( itemButton14, 0, wxGROW | wxALL, 5 ); - - wxButton* itemButton15 = new wxButton( itemDialog1, ID_SET_OPTIONS_ZONE, - _( - "Update Options" ), wxDefaultPosition, - wxDefaultSize, 0 ); - - itemButton15->SetForegroundColour( wxColour( 0, 100, 0 ) ); - itemBoxSizer12->Add( itemButton15, 0, wxGROW | wxALL, 5 ); - - itemBoxSizer2->Add( 5, 5, 0, wxGROW | wxALL, 5 ); - -////@end WinEDA_ZoneFrame content construction - wxString title = _( "Zone clearance value:" ) + ReturnUnitSymbol( g_UnitMetric ); - m_ClearanceValueTitle->SetLabel( title ); - - title = _( "Grid :" ) + ReturnUnitSymbol( g_UnitMetric );; - m_GridCtrl->SetLabel( title ); - - if( g_DesignSettings.m_ZoneClearence == 0 ) - g_DesignSettings.m_ZoneClearence = g_DesignSettings.m_TrackClearence; - title = ReturnStringFromValue( g_UnitMetric, - g_DesignSettings.m_ZoneClearence, - m_Parent->m_InternalUnits ); - m_ZoneClearanceCtrl->SetValue( title ); - - if( Zone_45_Only ) - m_OrientEdgesOpt->SetSelection( 1 ); - - static const int GridList[4] = { 50, 100, 250, 500 }; - int selection = 0; - - for( unsigned ii = 0; ii < (unsigned)m_GridCtrl->GetCount(); ii++ ) - { - wxString msg = ReturnStringFromValue( g_UnitMetric, - GridList[ii], - m_Parent->m_InternalUnits ); - m_GridCtrl->SetString( ii, msg ); - if( g_GridRoutingSize == GridList[ii] ) - selection = ii; - } - - m_GridCtrl->SetSelection( selection ); - - if( Zone_Exclude_Pads ) - { - if( s_Zone_Create_Thermal_Relief ) - m_FillOpt->SetSelection( 1 ); - else - m_FillOpt->SetSelection( 2 ); - } -} - - -/*! - * Should we show tooltips? - */ - -bool WinEDA_ZoneFrame::ShowToolTips() -{ - return true; -} - - -/*! - * Get bitmap resources - */ - -wxBitmap WinEDA_ZoneFrame::GetBitmapResource( const wxString& name ) -{ - // Bitmap retrieval -////@begin WinEDA_ZoneFrame bitmap retrieval - wxUnusedVar( name ); - return wxNullBitmap; - -////@end WinEDA_ZoneFrame bitmap retrieval -} - - -/*! - * Get icon resources - */ - -wxIcon WinEDA_ZoneFrame::GetIconResource( const wxString& name ) -{ - // Icon retrieval -////@begin WinEDA_ZoneFrame icon retrieval - wxUnusedVar( name ); - return wxNullIcon; - -////@end WinEDA_ZoneFrame icon retrieval -} - - -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL - */ - -void WinEDA_ZoneFrame::OnCancelClick( wxCommandEvent& event ) -{ -////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_ZoneFrame. - // Before editing this code, remove the block markers. - event.Skip(); - -////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_ZoneFrame. -} - - -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON2 - */ -/***********************************************************/ -void WinEDA_ZoneFrame::ExecFillZone( wxCommandEvent& event ) -/***********************************************************/ -{ - switch( m_FillOpt->GetSelection() ) - { - case 0: - Zone_Exclude_Pads = FALSE; - s_Zone_Create_Thermal_Relief = FALSE; - break; - - case 1: - Zone_Exclude_Pads = TRUE; - s_Zone_Create_Thermal_Relief = TRUE; - break; - - case 2: - Zone_Exclude_Pads = TRUE; - s_Zone_Create_Thermal_Relief = FALSE; - break; - } - - switch( m_GridCtrl->GetSelection() ) - { - case 0: - g_GridRoutingSize = 50; - break; - - case 1: - g_GridRoutingSize = 100; - break; - - case 2: - g_GridRoutingSize = 250; - break; - - case 3: - g_GridRoutingSize = 500; - break; - } - - wxString txtvalue = m_ZoneClearanceCtrl->GetValue(); - g_DesignSettings.m_ZoneClearence = - ReturnValueFromString( g_UnitMetric, txtvalue, m_Parent->m_InternalUnits ); - if( m_OrientEdgesOpt->GetSelection() == 0 ) - Zone_45_Only = FALSE; - else - Zone_45_Only = TRUE; - - if( event.GetId() == ID_SET_OPTIONS_ZONE ) - EndModal( 1 ); - else - EndModal( 0 ); -} - - -/**************************************************************/ -void WinEDA_PcbFrame::Edit_Zone_Width( wxDC* DC, SEGZONE* aZone ) -/**************************************************************/ - -/* Edite (change la largeur des segments) la zone Zone. - * La zone est constituee des segments zones de meme TimeStamp - */ -{ - bool modify = FALSE; - double f_new_width; - int w_tmp; - wxString Line; - wxString Msg( _( "New zone segment width: " ) ); - - if( aZone == NULL ) - return; - - f_new_width = To_User_Unit( g_UnitMetric, aZone->m_Width, GetScreen()->GetInternalUnits() ); - - Line.Printf( wxT( "%.4f" ), f_new_width ); - - Msg += g_UnitMetric ? wxT( "(mm)" ) : wxT( "(\")" ); - if( Get_Message( Msg, Line, this ) != 0 ) - return; - - w_tmp = g_DesignSettings.m_CurrentTrackWidth; - Line.ToDouble( &f_new_width ); - - g_DesignSettings.m_CurrentTrackWidth = From_User_Unit( g_UnitMetric, - f_new_width, GetScreen()->GetInternalUnits() ); - - for( SEGZONE* zone = m_Pcb->m_Zone; zone; zone = zone->Next() ) - { - if( zone->m_TimeStamp == aZone->m_TimeStamp ) - { - modify = TRUE; - Edit_TrackSegm_Width( DC, zone ); - } - } - - g_DesignSettings.m_CurrentTrackWidth = w_tmp; - if( modify ) - { - GetScreen()->SetModify(); - DrawPanel->Refresh(); - } -} - - -/**********************************************************/ -void WinEDA_PcbFrame::Delete_Zone( wxDC* DC, SEGZONE* aZone ) -/**********************************************************/ - -/* Remove the zone which include the segment aZone. - * A zone is a group of segments which have the same TimeStamp - */ -{ - if ( aZone == NULL ) return; - - int nb_segm = 0; - bool modify = FALSE; - unsigned long TimeStamp = aZone->m_TimeStamp; // Save reference time stamp (aZone will be deleted) - - SEGZONE* next; - for( SEGZONE* zone = m_Pcb->m_Zone; zone != NULL; zone = next ) - { - next = zone->Next(); - if( zone->m_TimeStamp == TimeStamp ) - { - modify = TRUE; - - /* Erase segment from screen */ - Trace_Une_Piste( DrawPanel, DC, zone, nb_segm, GR_XOR ); - /* remove item from linked list and free memory */ - zone->DeleteStructure(); - } - } - - if( modify ) - { - GetScreen()->SetModify(); - GetScreen()->SetRefreshReq(); - } -} - - -/*****************************************************************************/ -EDGE_ZONE* WinEDA_PcbFrame::Del_SegmEdgeZone( wxDC* DC, EDGE_ZONE* edge_zone ) -/*****************************************************************************/ -/* Routine d'effacement du segment de limite zone en cours de trace */ -{ - EDGE_ZONE* segm; - - if( m_Pcb->m_CurrentLimitZone ) - segm = m_Pcb->m_CurrentLimitZone; - else - segm = edge_zone; - - if( segm == NULL ) - return NULL; - - Trace_DrawSegmentPcb( DrawPanel, DC, segm, GR_XOR ); - - m_Pcb->m_CurrentLimitZone = segm->Next(); - delete segm; - - segm = m_Pcb->m_CurrentLimitZone; - SetCurItem( segm ); - - if( segm ) - { - segm->Pback = NULL; - if( DrawPanel->ManageCurseur ) - DrawPanel->ManageCurseur( DrawPanel, DC, TRUE ); - } - else - { - DrawPanel->ManageCurseur = NULL; - DrawPanel->ForceCloseManageCurseur = NULL; - SetCurItem( NULL ); - } - return segm; -} - - -/*********************************************/ -void WinEDA_PcbFrame::CaptureNetName( wxDC* DC ) -/*********************************************/ - -/* routine permettant de capturer le nom net net (netcode) d'un pad - * ou d'une piste pour l'utiliser comme netcode de zone - */ -{ - D_PAD* pt_pad = 0; - TRACK* adrpiste; - MODULE* Module; - int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer]; - int netcode; - - netcode = -1; - MsgPanel->EraseMsgBox(); - adrpiste = Locate_Pistes( m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE ); - if( adrpiste == NULL ) - { - pt_pad = Locate_Any_Pad( m_Pcb, CURSEUR_OFF_GRILLE ); - - if( pt_pad ) /* Verif qu'il est bien sur la couche active */ - { - Module = (MODULE*) pt_pad->m_Parent; - pt_pad = Locate_Pads( Module, g_TabOneLayerMask[GetScreen()->m_Active_Layer], - CURSEUR_OFF_GRILLE ); - } - if( pt_pad ) - { - pt_pad->Display_Infos( this ); - netcode = pt_pad->GetNet(); - } - } - else - { - adrpiste->Display_Infos( this ); - netcode = adrpiste->GetNet(); - } - - // Mise en surbrillance du net - if( g_HightLigt_Status ) - Hight_Light( DC ); - - g_HightLigth_NetCode = netcode; - if( g_HightLigth_NetCode >= 0 ) - { - Hight_Light( DC ); - } - - /* Affichage du net selectionne pour la zone a tracer */ - Display_Zone_Netname( this ); -} - - -/*******************************************************/ -static void Display_Zone_Netname( WinEDA_PcbFrame* frame ) -/*******************************************************/ - -/* - * Affiche le net_code et le nom de net couramment selectionne - */ -{ - EQUIPOT* pt_equipot; - wxString line; - - pt_equipot = frame->m_Pcb->m_Equipots; - - if( g_HightLigth_NetCode > 0 ) - { - for( ; pt_equipot != NULL; pt_equipot = (EQUIPOT*) pt_equipot->Pnext ) - { - if( pt_equipot->GetNet() == g_HightLigth_NetCode ) - break; - } - - if( pt_equipot ) - { - line.Printf( wxT( "Zone: Net[%d] <%s>" ), g_HightLigth_NetCode, - pt_equipot->m_Netname.GetData() ); - } - else - line.Printf( wxT( "Zone: NetCode[%d], Equipot not found" ), - g_HightLigth_NetCode ); - } - - line = _( "Zone: No net selected" ); - - frame->Affiche_Message( line ); -} - - -/********************************************************/ -static void Exit_Zones( WinEDA_DrawPanel* Panel, wxDC* DC ) -/********************************************************/ - -/** - * Function Exit_Zones - * cancels the Begin_Zone state if at least one EDGE_ZONE has been created. - */ -{ - WinEDA_PcbFrame* pcbframe = (WinEDA_PcbFrame*) Panel->m_Parent; - - if( pcbframe->m_Pcb->m_CurrentLimitZone ) - { - if( Panel->ManageCurseur ) // trace in progress - { - Panel->ManageCurseur( Panel, DC, 0 ); - } - pcbframe->DelLimitesZone( DC, TRUE ); - } - - Panel->ManageCurseur = NULL; - Panel->ForceCloseManageCurseur = NULL; - pcbframe->SetCurItem( NULL ); -} - - -/**************************************************************/ -void WinEDA_BasePcbFrame::DelLimitesZone( wxDC* DC, bool Redraw ) -/**************************************************************/ -{ - EDGE_ZONE* segment; - EDGE_ZONE* next; - - if( m_Pcb->m_CurrentLimitZone == NULL ) - return; - - if( !IsOK( this, _( "Delete Current Zone Edges" ) ) ) - return; - - // erase the old zone border, one segment at a time - for( segment = m_Pcb->m_CurrentLimitZone; segment; segment = next ) - { - next = segment->Next(); - - if( Redraw && DC ) - Trace_DrawSegmentPcb( DrawPanel, DC, segment, GR_XOR ); - - delete segment; - } - m_Pcb->m_CurrentLimitZone = NULL; - - SetCurItem( NULL ); -} - - -/** - * Function Begin_Zone - * either initializes the first segment of a new zone, or adds an - * intermediate segment. - */ -EDGE_ZONE* WinEDA_PcbFrame::Begin_Zone() -{ - EDGE_ZONE* oldedge; - EDGE_ZONE* newedge = NULL; - - oldedge = m_Pcb->m_CurrentLimitZone; - - // if first segment - if( (m_Pcb->m_CurrentLimitZone == NULL ) /* debut reel du trace */ - || (DrawPanel->ManageCurseur == NULL) ) /* reprise d'un trace complementaire */ - { - newedge = new EDGE_ZONE( m_Pcb ); - newedge->m_Flags = IS_NEW | STARTPOINT | IS_MOVED; - newedge->m_Start = newedge->m_End = GetScreen()->m_Curseur; - newedge->SetLayer( GetScreen()->m_Active_Layer ); - - // link into list: - newedge->Pnext = oldedge; - - if( oldedge ) - oldedge->Pback = newedge; - - m_Pcb->m_CurrentLimitZone = newedge; - - DrawPanel->ManageCurseur = Show_Zone_Edge_While_MoveMouse; - DrawPanel->ForceCloseManageCurseur = Exit_Zones; - } - - // edge in progress: - else /* piste en cours : les coord du point d'arrivee ont ete mises - * a jour par la routine Show_Zone_Edge_While_MoveMouse*/ - { - if( oldedge->m_Start != oldedge->m_End ) - { - oldedge->m_Flags &= ~(IS_NEW | IS_MOVED); - - newedge = new EDGE_ZONE( oldedge ); - newedge->m_Flags = IS_NEW | IS_MOVED; - newedge->m_Start = newedge->m_End = oldedge->m_End; - newedge->SetLayer( GetScreen()->m_Active_Layer ); - - // link into list: - newedge->Pnext = oldedge; - oldedge->Pback = newedge; - m_Pcb->m_CurrentLimitZone = newedge; - } - } - - return newedge; -} - - -/*********************************************/ -void WinEDA_PcbFrame::End_Zone( wxDC* DC ) -/*********************************************/ - -/* - * Routine de fin de trace d'une zone (succession de segments) - */ -{ - EDGE_ZONE* edge; - - if( m_Pcb->m_CurrentLimitZone ) - { - Begin_Zone(); - - /* le dernier point genere est de longueur tj nulle donc inutile. */ - /* il sera raccorde au point de depart */ - edge = m_Pcb->m_CurrentLimitZone; - edge->m_Flags &= ~(IS_NEW | IS_MOVED); - - while( edge && edge->Next() ) - { - edge = edge->Next(); - if( edge->m_Flags & STARTPOINT ) - break; - - edge->m_Flags &= ~(IS_NEW | IS_MOVED); - } - - if( edge ) - { - edge->m_Flags &= ~(IS_NEW | IS_MOVED); - m_Pcb->m_CurrentLimitZone->m_End = edge->m_Start; - } - Trace_DrawSegmentPcb( DrawPanel, DC, m_Pcb->m_CurrentLimitZone, GR_XOR ); - } - - DrawPanel->ManageCurseur = NULL; - DrawPanel->ForceCloseManageCurseur = NULL; -} - - -/******************************************************************************************/ -static void Show_Zone_Edge_While_MoveMouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) -/******************************************************************************************/ - -/* redessin du contour de la piste lors des deplacements de la souris - */ -{ - EDGE_ZONE* edge; - EDGE_ZONE* currentEdge; - WinEDA_PcbFrame* pcbframe = (WinEDA_PcbFrame*) panel->m_Parent; - - if( pcbframe->m_Pcb->m_CurrentLimitZone == NULL ) - return; - - /* efface ancienne position si elle a ete deja dessinee */ - if( erase ) - { - edge = pcbframe->m_Pcb->m_CurrentLimitZone; - // for( ; edge; edge = edge->Next() ) - { - Trace_DrawSegmentPcb( panel, DC, edge, GR_XOR ); - } - } - - /* mise a jour de la couche */ - for( edge = pcbframe->m_Pcb->m_CurrentLimitZone; edge; edge = edge->Next() ) - { - edge->SetLayer( pcbframe->GetScreen()->m_Active_Layer ); - } - - /* dessin de la nouvelle piste : mise a jour du point d'arrivee */ - currentEdge = pcbframe->m_Pcb->m_CurrentLimitZone; - if( Zone_45_Only ) - { - // Calcul de l'extremite de la piste pour orientations permises: - // horiz,vertical ou 45 degre - currentEdge->m_End = pcbframe->GetScreen()->m_Curseur; - Calcule_Coord_Extremite_45( currentEdge->m_Start.x, currentEdge->m_Start.y, - ¤tEdge->m_End.x, ¤tEdge->m_End.y ); - } - else /* ici l'angle d'inclinaison est quelconque */ - { - currentEdge->m_End = pcbframe->GetScreen()->m_Curseur; - } - - // for( ; currentEdge; currentEdge = currentEdge->Next() ) - { - Trace_DrawSegmentPcb( panel, DC, currentEdge, GR_XOR ); - } -} - - -/**********************************************/ -void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) -/**********************************************/ - -/** Function Fill_Zone() - * Init the zone filling - * If a zone edge is found, it is used. - * Otherwise the whole board is filled by the zone - * The zone edge is a frontier, and can be complex. So non filled zones can be achieved - * The zone is put on the active layer - * If a net is hightlighted, the zone will be attached to this net - * The filling start from a starting point. - * If a net is selected, all tracks attached to this net are also starting points - */ -{ - EQUIPOT* pt_equipot; - wxPoint ZoneStartFill; - wxString msg; - - MsgPanel->EraseMsgBox(); - if( m_Pcb->ComputeBoundaryBox() == FALSE ) - { - DisplayError( this, wxT( "Board is empty!" ), 10 ); - return; - } - - DrawPanel->m_IgnoreMouseEvents = TRUE; - WinEDA_ZoneFrame* frame = new WinEDA_ZoneFrame( this ); - - int abrd = frame->ShowModal(); - frame->Destroy(); - DrawPanel->MouseToCursorSchema(); - DrawPanel->m_IgnoreMouseEvents = FALSE; - - if( abrd ) - return; - - - // set all the EDGE_ZONEs to the currently active layer and redraw them - // on that layer. - EDGE_ZONE* PtLim = m_Pcb->m_CurrentLimitZone; - for( ; PtLim != NULL; PtLim = PtLim->Next() ) - { - Trace_DrawSegmentPcb( DrawPanel, DC, PtLim, GR_XOR ); - PtLim->SetLayer( GetScreen()->m_Active_Layer ); - Trace_DrawSegmentPcb( DrawPanel, DC, PtLim, GR_XOR ); - } - - /* Show the NetName */ - if( g_HightLigth_NetCode > 0 ) - { - pt_equipot = m_Pcb->FindNet( g_HightLigth_NetCode ); - if( pt_equipot == NULL ) - { - if( g_HightLigth_NetCode > 0 ) - DisplayError( this, wxT( "Unable to find Net name" ) ); - } - else - msg = pt_equipot->m_Netname; - } - else - msg = _( "No Net" ); - - Affiche_1_Parametre( this, 22, _( "NetName" ), msg, RED ); - - Build_Zone( this, DC, g_HightLigth_NetCode, Zone_Exclude_Pads, s_Zone_Create_Thermal_Relief ); - - GetScreen()->SetModify(); -} diff --git a/pcbnew/zones.h b/pcbnew/zones.h deleted file mode 100644 index 2acbff8c74..0000000000 --- a/pcbnew/zones.h +++ /dev/null @@ -1,126 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: zones.h -// Purpose: -// Author: jean-pierre Charras -// Modified by: -// Created: 25/01/2006 11:35:19 -// RCS-ID: -// Copyright: GNU License -// Licence: -///////////////////////////////////////////////////////////////////////////// - -// Generated by DialogBlocks (unregistered), 25/01/2006 11:35:19 - -#ifndef _ZONES_H_ -#define _ZONES_H_ - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "zones.h" -#endif - -/*! - * Includes - */ -#include "fctsys.h" -#include "gr_basic.h" - -#include "common.h" -#include "pcbnew.h" - -#include "autorout.h" -#include "cell.h" -#include "trigo.h" - -#include "protos.h" - -////@begin includes -////@end includes - -/*! - * Forward declarations - */ - -////@begin forward declarations -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define ID_DIALOG 10000 -#define ID_RADIOBOX 10001 -#define ID_TEXTCTRL 10006 -#define ID_RADIOBOX1 10004 -#define ID_RADIOBOX2 10005 -#define ID_FILL_ZONE 10002 -#define ID_SET_OPTIONS_ZONE 10003 -#define SYMBOL_WINEDA_ZONEFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER -#define SYMBOL_WINEDA_ZONEFRAME_TITLE _("Fill Zones Options") -#define SYMBOL_WINEDA_ZONEFRAME_IDNAME ID_DIALOG -#define SYMBOL_WINEDA_ZONEFRAME_SIZE wxSize(400, 300) -#define SYMBOL_WINEDA_ZONEFRAME_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * Compatibility - */ - -#ifndef wxCLOSE_BOX -#define wxCLOSE_BOX 0x1000 -#endif - -/*! - * WinEDA_ZoneFrame class declaration - */ - -class WinEDA_ZoneFrame: public wxDialog -{ - DECLARE_DYNAMIC_CLASS( WinEDA_ZoneFrame ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - WinEDA_ZoneFrame( ); - WinEDA_ZoneFrame( WinEDA_PcbFrame* parent, wxWindowID id = SYMBOL_WINEDA_ZONEFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_ZONEFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_ZONEFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_ZONEFRAME_SIZE, long style = SYMBOL_WINEDA_ZONEFRAME_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_ZONEFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_ZONEFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_ZONEFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_ZONEFRAME_SIZE, long style = SYMBOL_WINEDA_ZONEFRAME_STYLE ); - - /// Creates the controls and sizers - void CreateControls(); - -////@begin WinEDA_ZoneFrame event handler declarations - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_FILL_ZONE - void ExecFillZone( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL - void OnCancelClick( wxCommandEvent& event ); - -////@end WinEDA_ZoneFrame event handler declarations - -////@begin WinEDA_ZoneFrame member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end WinEDA_ZoneFrame member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin WinEDA_ZoneFrame member variables - wxRadioBox* m_GridCtrl; - wxStaticText* m_ClearanceValueTitle; - wxTextCtrl* m_ZoneClearanceCtrl; - wxRadioBox* m_FillOpt; - wxRadioBox* m_OrientEdgesOpt; -////@end WinEDA_ZoneFrame member variables - WinEDA_PcbFrame * m_Parent; -}; - -#endif // _ZONES_H_ - diff --git a/pcbnew/zones.pjd b/pcbnew/zones.pjd deleted file mode 100644 index 6d10ad703b..0000000000 --- a/pcbnew/zones.pjd +++ /dev/null @@ -1,893 +0,0 @@ - - -

- 0 - "" - "" - "" - "" - 23 - "" - 0 - 0 - 0 - 1 - 1 - 0 - "jean-pierre Charras" - "GNU License" - "" - 0 - "<All platforms>" - "<Any>" - "///////////////////////////////////////////////////////////////////////////// -// Name: %HEADER-FILENAME% -// Purpose: -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "///////////////////////////////////////////////////////////////////////////// -// Name: %SOURCE-FILENAME% -// Purpose: -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - " -/*! - * %BODY% - */ - -" - "///////////////////////////////////////////////////////////////////////////// -// Name: %SYMBOLS-FILENAME% -// Purpose: Symbols file -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "%HEADER-FILENAME%" -#endif - -" - "#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "%HEADER-FILENAME%" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include "wx/wx.h" -#endif - -" - "app_resources.h" - "app_resources.cpp" - "AppResources" - "app.h" - "app.cpp" - "Application" - 0 - "" - "<None>" - "<System>" - "<System>" - "" - 0 - 1 - 1 -
- - - "" - "data-document" - "" - "" - 0 - 1 - 0 - 0 - - "Configurations" - "config-data-document" - "" - "" - 0 - 1 - 0 - 0 - "" - 1 - "" - "Debug" - "ANSI" - "Static" - "Modular" - "GUI" - "wxMSW" - "Dynamic" - "Yes" - "No" - "No" - "%WXVERSION%" - "%EXECUTABLE%" - "" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - - - - - - - "Projects" - "root-document" - "" - "project" - 1 - 1 - 0 - 0 - - "Windows" - "html-document" - "" - "dialogsfolder" - 1 - 1 - 0 - 1 - - "Fill Zones Options" - "dialog-document" - "" - "dialog" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbDialogProxy" - 10000 - 0 - "" - 0 - "ID_DIALOG" - 10000 - "WinEDA_ZoneFrame" - "wxDialog" - "wxDialog" - "zones.cpp" - "zones.h" - "" - "Fill Zones Options" - 1 - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - "MAYBE_RESIZE_BORDER" - 0 - 1 - -1 - -1 - 400 - 300 - "" - - "wxBoxSizer H" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "wbBoxSizerProxy" - "Horizontal" - "" - 0 - 0 - 0 - "<Any platform>" - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbBoxSizerProxy" - "Vertical" - "" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxRadioBox: ID_RADIOBOX" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbRadioBoxProxy" - "ID_RADIOBOX" - 10001 - "wxRadioBox" - "m_GridCtrl" - "Grid size:" - 1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - 0 - 1 - "0.00000|0.00000|0.00000|0.00000" - 0 - "" - -1 - -1 - -1 - -1 - "Left" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxStaticText: wxID_STATIC" - "dialog-control-document" - "" - "statictext" - 0 - 1 - 0 - 0 - "25/12/2006" - "wbStaticTextProxy" - "wxID_STATIC" - 5105 - "wxStaticText" - "m_ClearanceValueTitle" - "Zone clearance value (mm):" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Left" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - "" - "" - - - "wxTextCtrl: ID_TEXTCTRL" - "dialog-control-document" - "" - "textctrl" - 0 - 1 - 0 - 0 - "25/12/2006" - "wbTextCtrlProxy" - "ID_TEXTCTRL" - 10006 - "wxTextCtrl" - "m_ZoneClearanceCtrl" - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Left" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - - - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbSpacerProxy" - 5 - 5 - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbBoxSizerProxy" - "Vertical" - "" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxRadioBox: ID_RADIOBOX1" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbRadioBoxProxy" - "ID_RADIOBOX1" - 10004 - "wxRadioBox" - "m_FillOpt" - "Pad options:" - 1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - 0 - 1 - "Include Pads|Thermal|Exclude Pads" - 0 - "" - -1 - -1 - -1 - -1 - "Left" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxRadioBox: ID_RADIOBOX2" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbRadioBoxProxy" - "ID_RADIOBOX2" - 10005 - "wxRadioBox" - "m_OrientEdgesOpt" - "Zone edges orient:" - 1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - 0 - 1 - "Any|H , V and 45 deg" - 0 - "" - -1 - -1 - -1 - -1 - "Right" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbSpacerProxy" - 5 - 5 - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbBoxSizerProxy" - "Vertical" - "" - "Centre" - "Top" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxButton: ID_FILL_ZONE" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|ExecFillZone" - "ID_FILL_ZONE" - 10002 - "wxButton" - "" - "Fill" - 1 - "" - "" - "" - "CC0000" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxButton: wxID_CANCEL" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick" - "wxID_CANCEL" - 5101 - "wxButton" - "" - "&Cancel" - 0 - "" - "" - "" - "0000FF" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxButton: ID_SET_OPTIONS_ZONE" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "25/4/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|ExecFillZone" - "ID_SET_OPTIONS_ZONE" - 10003 - "wxButton" - "" - "Update Options" - 0 - "" - "" - "" - "006400" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "25/9/2006" - "wbSpacerProxy" - 5 - 5 - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - - - - "Sources" - "html-document" - "" - "sourcesfolder" - 1 - 1 - 0 - 1 - - "zones.rc" - "source-editor-document" - "zones.rc" - "source-editor" - 0 - 0 - 1 - 0 - "25/4/2006" - "" - - - - "Images" - "html-document" - "" - "bitmapsfolder" - 1 - 1 - 0 - 1 - - - - - diff --git a/pcbnew/zones.rc b/pcbnew/zones.rc deleted file mode 100644 index b86c4e2265..0000000000 --- a/pcbnew/zones.rc +++ /dev/null @@ -1 +0,0 @@ -#include "wx/msw/wx.rc"