From ffca52398023f96f8c24b51e8db14af23ea9dfd0 Mon Sep 17 00:00:00 2001 From: charras Date: Thu, 23 Oct 2008 10:26:06 +0000 Subject: [PATCH] code cleaning in zones functions --- cvpcb/CMakeLists.txt | 1 + cvpcb/makefile.include | 4 + eeschema/schframe.cpp | 4 +- gerbview/CMakeLists.txt | 1 + gerbview/makefile.include | 4 + include/pcbstruct.h | 1 - internat/fr/kicad.mo | Bin 163349 -> 163336 bytes internat/fr/kicad.po | 2095 +++++++++++++------- pcbnew/CMakeLists.txt | 1 + pcbnew/class_zone.cpp | 27 +- pcbnew/class_zone.h | 21 +- pcbnew/class_zone_setting.cpp | 79 + pcbnew/class_zone_setting.h | 48 + pcbnew/classpcb.cpp | 1 - pcbnew/dialog_copper_zones.cpp | 300 ++- pcbnew/dialog_copper_zones.h | 5 +- pcbnew/dialog_copper_zones_frame.cpp | 4 - pcbnew/dialog_copper_zones_frame.fbp | 52 - pcbnew/dialog_copper_zones_frame.h | 4 - pcbnew/ioascii.cpp | 4 +- pcbnew/makefile.include | 1 + pcbnew/zone_filling_algorithm.cpp | 2 +- pcbnew/zones.h | 47 +- pcbnew/zones_by_polygon.cpp | 91 +- pcbnew/zones_non_copper_type_functions.cpp | 16 +- pcbnew/zones_test_and_combine_areas.cpp | 5 +- 26 files changed, 1710 insertions(+), 1108 deletions(-) create mode 100644 pcbnew/class_zone_setting.cpp create mode 100644 pcbnew/class_zone_setting.h diff --git a/cvpcb/CMakeLists.txt b/cvpcb/CMakeLists.txt index a7b4886c08..bcfeab765c 100644 --- a/cvpcb/CMakeLists.txt +++ b/cvpcb/CMakeLists.txt @@ -43,6 +43,7 @@ set(CVPCB_EXTRA_SRCS ../pcbnew/class_text_mod.cpp ../pcbnew/class_track.cpp ../pcbnew/class_zone.cpp + ../pcbnew/class_zone_setting.cpp ../pcbnew/classpcb.cpp ../pcbnew/collectors.cpp ../pcbnew/ioascii.cpp diff --git a/cvpcb/makefile.include b/cvpcb/makefile.include index 405d620ec7..86dcd0698e 100644 --- a/cvpcb/makefile.include +++ b/cvpcb/makefile.include @@ -17,6 +17,7 @@ LIBVIEWER3D = ../3d-viewer/3d-viewer.a OBJECTS = $(TARGET).o \ class_cvpcb.o\ class_zone.o\ + class_zone_setting.o\ memoire.o \ cvframe.o\ listboxes.o\ @@ -81,6 +82,9 @@ class_mire.o: ../pcbnew/class_mire.cpp ../pcbnew/class_mire.h $(COMMON) class_zone.o: ../pcbnew/class_zone.cpp ../pcbnew/class_zone.h $(COMMON) $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp +class_zone_setting.o: ../pcbnew/class_zone_setting.cpp ../pcbnew/class_zone_setting.h $(COMMON) + $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp + class_cotation.o: ../pcbnew/class_cotation.cpp ../pcbnew/class_cotation.h $(COMMON) $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 93d29f0d4c..da0d5fd992 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -419,8 +419,8 @@ void WinEDA_SchematicFrame::SetToolbars() m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_BUS_WIRES_ORIENT, g_HVLines ); m_OptionsToolBar->SetToolShortHelp( ID_TB_OPTIONS_BUS_WIRES_ORIENT, - g_HVLines ? _( "Snap Grid (OFF)" ) : - _( "Snap Grid (ON)" ) ); + g_HVLines ? _( "Allows any direction for wires and busses" ) : + _( "Allows horizontal and vertical wires and busses only" ) ); } DisplayUnitsMsg(); diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index 51a0abe4f5..abc25d55f0 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -48,6 +48,7 @@ set(GERBVIEW_EXTRA_SRCS ../pcbnew/class_pcb_text.cpp ../pcbnew/class_track.cpp ../pcbnew/class_zone.cpp + ../pcbnew/class_zone_setting.cpp ../pcbnew/classpcb.cpp ../pcbnew/collectors.cpp ../pcbnew/sel_layer.cpp diff --git a/gerbview/makefile.include b/gerbview/makefile.include index c800604537..92ebc486a4 100644 --- a/gerbview/makefile.include +++ b/gerbview/makefile.include @@ -13,6 +13,7 @@ OBJECTS= \ $(TARGET).o\ classpcb.o\ class_zone.o\ + class_zone_setting.o\ select_layers_to_pcb.o\ sel_layer.o\ lay2plot.o\ @@ -78,6 +79,9 @@ class_marker.o: ../pcbnew/class_marker.cpp ../pcbnew/class_marker.h $(COMMON) class_zone.o: ../pcbnew/class_zone.cpp ../pcbnew/class_zone.h $(COMMON) $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp +class_zone_setting.o: ../pcbnew/class_zone_setting.cpp ../pcbnew/class_zone_setting.h $(COMMON) + $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp + class_drawsegment.o: ../pcbnew/class_drawsegment.cpp ../pcbnew/class_drawsegment.h $(DEPEND) $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp diff --git a/include/pcbstruct.h b/include/pcbstruct.h index 6cec771068..4b6257d7ed 100644 --- a/include/pcbstruct.h +++ b/include/pcbstruct.h @@ -158,7 +158,6 @@ public: int m_PcbTextWidth; // current Pcb (not module) Text width wxSize m_PcbTextSize; // current Pcb (not module) Text size int m_TrackClearence; // track to track and track to pads clearance - int m_ZoneClearence; // zone to track and zone to pads clearance int m_MaskMargin; // Solder mask margin // Color options for screen display of the Printed Board: diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index e881aa8f57bdc53abf1fe7b333bfdec5223401ce..c9869c6e92a0da369b829aa8312ab740c0d8648b 100644 GIT binary patch delta 55010 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 delta 55018 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\n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,21 +36,25 @@ msgstr "Net Code" #: pcbnew/affiche.cpp:53 #: pcbnew/class_board.cpp:551 +#: pcbnew/class_module.cpp:1092 +#: pcbnew/menubarpcb.cpp:240 msgid "Pads" msgstr "Pads" #: pcbnew/affiche.cpp:67 #: pcbnew/class_board.cpp:561 +#: pcbnew/plotps.cpp:363 msgid "Vias" msgstr "Vias" #: pcbnew/affiche.cpp:70 msgid "Net Length" -msgstr "Long. Net:" +msgstr "Long. Net" #: pcbnew/automove.cpp:207 +#: pcbnew/xchgmod.cpp:612 msgid "No Modules!" -msgstr "Pas de Modules" +msgstr "Pas de Modules!" #: pcbnew/automove.cpp:211 msgid "Move Modules ?" @@ -60,55 +64,55 @@ msgstr "Déplacer Modules ?" msgid "Autoplace modules: No boad edges detected, unable to place modules" msgstr "Autoplace modules: pas de contours sur pcb, impossible de placer les modules" -#: pcbnew/autoplac.cpp:106 +#: pcbnew/autoplac.cpp:107 msgid "Footprints NOT LOCKED will be moved" msgstr "Les modules NON FIXES vont être déplacés" -#: pcbnew/autoplac.cpp:111 +#: pcbnew/autoplac.cpp:112 msgid "Footprints NOT PLACED will be moved" msgstr "Les modules NON PLACES vont être déplacés" -#: pcbnew/autoplac.cpp:402 +#: pcbnew/autoplac.cpp:403 msgid "No edge PCB, Unknown board size!" msgstr "Pas de contour PCB, la taille du PCB est inconnue!" -#: pcbnew/autoplac.cpp:423 +#: pcbnew/autoplac.cpp:424 msgid "Cols" msgstr "Cols" -#: pcbnew/autoplac.cpp:425 +#: pcbnew/autoplac.cpp:426 msgid "Lines" msgstr "Lignes" -#: pcbnew/autoplac.cpp:427 +#: pcbnew/autoplac.cpp:428 msgid "Cells." msgstr "Cells." -#: pcbnew/autoplac.cpp:488 +#: pcbnew/autoplac.cpp:489 msgid "Loop" msgstr "Itération" -#: pcbnew/autoplac.cpp:642 +#: pcbnew/autoplac.cpp:643 msgid "Ok to abort ?" msgstr "Ok pour arrêter ?" -#: pcbnew/autorout.cpp:59 +#: pcbnew/autorout.cpp:60 msgid "Net not selected" -msgstr " Net non sélectionné" +msgstr "Net non sélectionné" -#: pcbnew/autorout.cpp:67 +#: pcbnew/autorout.cpp:68 msgid "Module not selected" msgstr "Module non selectionné" -#: pcbnew/autorout.cpp:75 +#: pcbnew/autorout.cpp:76 msgid "Pad not selected" msgstr "Pad non sélectionné" -#: pcbnew/autorout.cpp:143 +#: pcbnew/autorout.cpp:144 msgid "No memory for autorouting" msgstr "Pas de memoire pour autoroutage" -#: pcbnew/autorout.cpp:148 +#: pcbnew/autorout.cpp:149 msgid "Place Cells" msgstr "Place Cells" @@ -146,14 +150,69 @@ msgid "Include egde layer" msgstr "Inclure couche Edge" #: pcbnew/block.cpp:154 +#: pcbnew/cotation.cpp:109 +#: pcbnew/dialog_edit_module.cpp:122 +#: pcbnew/dialog_copper_zones_frame.cpp:154 +#: pcbnew/dialog_orient_footprints.cpp:177 +#: pcbnew/onrightclick.cpp:122 +#: pcbnew/onrightclick.cpp:136 +#: pcbnew/globaleditpad.cpp:108 +#: pcbnew/muonde.cpp:352 +#: pcbnew/mirepcb.cpp:103 +#: pcbnew/modedit_onclick.cpp:192 +#: pcbnew/modedit_onclick.cpp:224 +#: pcbnew/pcbtexte.cpp:119 +#: pcbnew/sel_layer.cpp:163 +#: pcbnew/sel_layer.cpp:322 +#: pcbnew/set_color.cpp:357 +#: pcbnew/dialog_gendrill.cpp:297 +#: pcbnew/dialog_non_copper_zones_properties.cpp:47 +#: eeschema/onrightclick.cpp:98 +#: eeschema/onrightclick.cpp:110 +#: eeschema/sheetlab.cpp:98 +#: eeschema/eelayer.cpp:255 +#: eeschema/libedit_onrightclick.cpp:42 +#: eeschema/libedit_onrightclick.cpp:57 +#: gerbview/onrightclick.cpp:39 +#: gerbview/onrightclick.cpp:58 +#: gerbview/options.cpp:169 +#: gerbview/options.cpp:293 +#: gerbview/reglage.cpp:112 +#: gerbview/set_color.cpp:329 +#: common/displlst.cpp:111 +#: common/selcolor.cpp:171 +#: common/get_component_dialog.cpp:121 +#: share/svg_print.cpp:239 msgid "Cancel" msgstr "Annuler" #: pcbnew/block.cpp:157 +#: pcbnew/cotation.cpp:105 +#: pcbnew/dialog_edit_module.cpp:118 +#: pcbnew/dialog_orient_footprints.cpp:174 +#: pcbnew/muonde.cpp:348 +#: pcbnew/mirepcb.cpp:99 +#: pcbnew/pcbtexte.cpp:114 +#: pcbnew/sel_layer.cpp:159 +#: pcbnew/sel_layer.cpp:318 +#: pcbnew/set_color.cpp:353 +#: pcbnew/dialog_gendrill.cpp:292 +#: pcbnew/dialog_non_copper_zones_properties.cpp:43 +#: eeschema/sheetlab.cpp:94 +#: eeschema/eelayer.cpp:251 +#: gerbview/options.cpp:165 +#: gerbview/options.cpp:289 +#: gerbview/reglage.cpp:108 +#: gerbview/set_color.cpp:325 +#: common/displlst.cpp:106 +#: common/get_component_dialog.cpp:112 msgid "OK" msgstr "OK" #: pcbnew/block.cpp:450 +#: pcbnew/onrightclick.cpp:463 +#: eeschema/onrightclick.cpp:630 +#: eeschema/libedit_onrightclick.cpp:247 msgid "Delete Block" msgstr "Effacer Bloc" @@ -162,6 +221,7 @@ msgid "Delete zones" msgstr "SuppressionZones" #: pcbnew/block.cpp:602 +#: pcbnew/onrightclick.cpp:461 msgid "Rotate Block" msgstr "Rotation Bloc" @@ -178,6 +238,9 @@ msgid "Move Block" msgstr "Déplacer Bloc" #: pcbnew/block.cpp:1110 +#: pcbnew/onrightclick.cpp:457 +#: eeschema/onrightclick.cpp:626 +#: eeschema/libedit_onrightclick.cpp:244 msgid "Copy Block" msgstr "Copie Bloc" @@ -198,30 +261,48 @@ msgid "Connect" msgstr "Connect" #: pcbnew/class_board.cpp:576 +#: eeschema/eelayer.h:115 msgid "NoConn" msgstr "Non Conn" #: pcbnew/class_board_item.cpp:23 +#: pcbnew/dialog_display_options.cpp:221 +#: pcbnew/dialog_display_options.cpp:229 +#: pcbnew/dialog_display_options.cpp:266 +#: pcbnew/dialog_copper_zones_frame.cpp:97 +#: pcbnew/pcbplot.cpp:415 +#: pcbnew/dialog_non_copper_zones_properties.cpp:28 +#: gerbview/options.cpp:321 msgid "Line" msgstr "Ligne" #: pcbnew/class_board_item.cpp:24 +#: pcbnew/dialog_pad_edit.cpp:198 msgid "Rect" msgstr "Rect" #: pcbnew/class_board_item.cpp:25 +#: pcbnew/class_drawsegment.cpp:311 msgid "Arc" msgstr "Arc" #: pcbnew/class_board_item.cpp:26 +#: pcbnew/class_drawsegment.cpp:307 +#: pcbnew/class_track.cpp:879 +#: pcbnew/dialog_pad_edit.cpp:176 +#: pcbnew/dialog_pad_edit.cpp:196 msgid "Circle" msgstr "Cercle" #: pcbnew/class_board_item.cpp:57 +#: pcbnew/class_pad.cpp:909 msgid "Net" msgstr "Net" #: pcbnew/class_board_item.cpp:62 +#: eeschema/dialog_build_BOM.cpp:298 +#: eeschema/component_class.cpp:130 +#: eeschema/edit_component_in_schematic.cpp:837 msgid "Footprint" msgstr "Module" @@ -265,10 +346,20 @@ msgid "Pcb Text" msgstr "Texte Pcb" #: pcbnew/class_board_item.cpp:100 +#: pcbnew/dialog_netlist.cpp:162 +#: eeschema/dialog_create_component.cpp:167 +#: eeschema/onrightclick.cpp:307 +#: eeschema/edit_component_in_schematic.cpp:759 +#: eeschema/eelayer.h:152 msgid "Reference" msgstr "Référence" #: pcbnew/class_board_item.cpp:104 +#: pcbnew/class_edge_mod.cpp:287 +#: pcbnew/class_text_mod.cpp:488 +#: eeschema/component_class.cpp:129 +#: eeschema/edit_component_in_schematic.cpp:797 +#: eeschema/eelayer.h:158 msgid "Value" msgstr "Valeur" @@ -279,6 +370,8 @@ msgid " of " msgstr " de " #: pcbnew/class_board_item.cpp:109 +#: pcbnew/class_text_mod.cpp:488 +#: pcbnew/class_text_mod.cpp:497 msgid "Text" msgstr "Texte" @@ -287,19 +380,24 @@ msgid "Graphic" msgstr "Graphique" #: pcbnew/class_board_item.cpp:127 +#: pcbnew/class_track.cpp:841 +#: pcbnew/pcbframe.cpp:467 msgid "Track" msgstr "Piste" #: pcbnew/class_board_item.cpp:134 #: pcbnew/class_board_item.cpp:205 +#: pcbnew/dialog_copper_zones_frame.cpp:187 msgid "Net:" msgstr "Net:" #: pcbnew/class_board_item.cpp:139 +#: pcbnew/class_zone.cpp:768 msgid "Zone Outline" msgstr "Contour de Zone" #: pcbnew/class_board_item.cpp:144 +#: pcbnew/class_zone.cpp:772 msgid "(Cutout)" msgstr "(Cutout)" @@ -308,14 +406,17 @@ msgid "Not on copper layer" msgstr "Pas sur Couches Cuivre" #: pcbnew/class_board_item.cpp:167 +#: pcbnew/class_zone.cpp:794 msgid "Not Found" msgstr " Non Trouvé" #: pcbnew/class_board_item.cpp:173 +#: pcbnew/class_track.cpp:845 msgid "Zone" msgstr "Zone" #: pcbnew/class_board_item.cpp:191 +#: pcbnew/pcbframe.cpp:499 msgid "Via" msgstr "Via" @@ -324,10 +425,12 @@ msgid "Blind/Buried" msgstr "Borgne/Aveugle" #: pcbnew/class_board_item.cpp:197 +#: pcbnew/pcbnew.h:292 msgid "Micro Via" msgstr "Micro Via" #: pcbnew/class_board_item.cpp:220 +#: pcbnew/class_marker.cpp:133 msgid "Marker" msgstr "Marqueur" @@ -347,7 +450,8 @@ msgstr "dimension" #: pcbnew/class_marker.cpp:133 #: pcbnew/class_text_mod.cpp:503 #: pcbnew/class_track.cpp:852 -#: pcbnew/class_zone.cpp:779 +#: pcbnew/class_zone.cpp:775 +#: gerbview/affiche.cpp:94 msgid "Type" msgstr "Type" @@ -370,7 +474,10 @@ msgstr "Segment" #: pcbnew/class_pcb_text.cpp:190 #: pcbnew/class_text_mod.cpp:516 #: pcbnew/class_track.cpp:909 -#: pcbnew/class_zone.cpp:813 +#: pcbnew/class_zone.cpp:809 +#: pcbnew/dialog_edit_module.cpp:262 +#: pcbnew/sel_layer.cpp:146 +#: gerbview/affiche.cpp:110 msgid "Layer" msgstr "Couche" @@ -379,10 +486,19 @@ msgstr "Couche" #: pcbnew/class_pcb_text.cpp:204 #: pcbnew/class_text_mod.cpp:528 #: pcbnew/class_track.cpp:932 +#: pcbnew/cotation.cpp:129 +#: pcbnew/dialog_edit_mod_text.cpp:254 +#: pcbnew/mirepcb.cpp:113 +#: pcbnew/pcbtexte.cpp:133 +#: eeschema/affiche.cpp:188 +#: eeschema/dialog_cmp_graphic_properties.cpp:189 +#: gerbview/affiche.cpp:52 +#: gerbview/affiche.cpp:114 msgid "Width" msgstr "Epaisseur" #: pcbnew/class_drc_item.cpp:39 +#: pcbnew/dialog_drc.cpp:484 msgid "Unconnected pads" msgstr "Pads non connectés" @@ -450,6 +566,7 @@ msgstr "Seg" #: pcbnew/class_module.cpp:1107 #: pcbnew/class_pad.cpp:903 #: pcbnew/class_text_mod.cpp:494 +#: cvpcb/setvisu.cpp:31 msgid "Module" msgstr "Module" @@ -486,6 +603,9 @@ msgstr "Stat" #: pcbnew/class_pad.cpp:1035 #: pcbnew/class_pcb_text.cpp:201 #: pcbnew/class_text_mod.cpp:525 +#: pcbnew/dialog_edit_module.cpp:273 +#: eeschema/affiche.cpp:117 +#: gerbview/affiche.cpp:49 msgid "Orient" msgstr "Orient" @@ -503,7 +623,7 @@ msgstr "KeyW: " #: pcbnew/class_pad.cpp:820 msgid "Unknown Pad shape" -msgstr "Forme pad inconnue" +msgstr "Forme Pad inconnue" #: pcbnew/class_pad.cpp:906 msgid "RefP" @@ -512,12 +632,14 @@ msgstr "RefP" #: pcbnew/class_pad.cpp:1006 #: pcbnew/class_pcb_text.cpp:207 #: pcbnew/class_text_mod.cpp:531 +#: gerbview/affiche.cpp:55 msgid "H Size" msgstr "Taille H" #: pcbnew/class_pad.cpp:1010 #: pcbnew/class_pcb_text.cpp:210 #: pcbnew/class_text_mod.cpp:534 +#: gerbview/affiche.cpp:58 msgid "V Size" msgstr "Taille V" @@ -540,25 +662,38 @@ msgid "Y pos" msgstr "Y pos" #: pcbnew/class_pcb_text.cpp:186 +#: gerbview/affiche.cpp:29 msgid "COTATION" msgstr "COTATION" #: pcbnew/class_pcb_text.cpp:188 +#: gerbview/affiche.cpp:32 msgid "PCB Text" msgstr "Texte Pcb" #: pcbnew/class_pcb_text.cpp:194 #: pcbnew/class_text_mod.cpp:522 +#: pcbnew/cotation.cpp:113 +#: pcbnew/modedit_onclick.cpp:243 +#: pcbnew/pcbtexte.cpp:180 +#: gerbview/affiche.cpp:40 +#: share/dialog_print.cpp:198 msgid "Mirror" msgstr "Miroir" #: pcbnew/class_pcb_text.cpp:196 #: pcbnew/class_text_mod.cpp:506 +#: pcbnew/dialog_display_options.cpp:275 +#: eeschema/dialog_options.cpp:280 +#: gerbview/affiche.cpp:43 msgid "No" msgstr "Non" #: pcbnew/class_pcb_text.cpp:198 #: pcbnew/class_text_mod.cpp:508 +#: pcbnew/dialog_display_options.cpp:274 +#: eeschema/dialog_options.cpp:279 +#: gerbview/affiche.cpp:45 msgid "Yes" msgstr "Oui" @@ -567,20 +702,29 @@ msgid "Ref." msgstr "Ref." #: pcbnew/class_text_mod.cpp:509 +#: pcbnew/cotation.cpp:114 +#: pcbnew/dialog_edit_mod_text.cpp:291 +#: pcbnew/pcbtexte.cpp:181 +#: pcbnew/dialog_general_options.cpp:289 +#: eeschema/affiche.cpp:92 +#: gerbview/options.cpp:176 +#: gerbview/tool_gerber.cpp:113 msgid "Display" msgstr "Affichage" #: pcbnew/class_track.cpp:868 -#: pcbnew/class_zone.cpp:801 +#: pcbnew/class_zone.cpp:797 +#: pcbnew/zones_by_polygon.cpp:905 msgid "NetName" msgstr "NetName" #: pcbnew/class_track.cpp:873 -#: pcbnew/class_zone.cpp:809 +#: pcbnew/class_zone.cpp:805 msgid "NetCode" msgstr "NetCode" #: pcbnew/class_track.cpp:881 +#: pcbnew/dialog_pad_edit.cpp:205 msgid "Standard" msgstr "Standard" @@ -588,27 +732,27 @@ msgstr "Standard" msgid "Diam" msgstr "Diam" -#: pcbnew/class_zone.cpp:804 +#: pcbnew/class_zone.cpp:800 msgid "Non Copper Zone" msgstr "Zone non Cuivre" -#: pcbnew/class_zone.cpp:817 +#: pcbnew/class_zone.cpp:813 msgid "Corners" msgstr "Sommets" -#: pcbnew/class_zone.cpp:823 +#: pcbnew/class_zone.cpp:819 msgid "No Grid" msgstr "Pas de Grille" -#: pcbnew/class_zone.cpp:824 +#: pcbnew/class_zone.cpp:820 msgid "Fill Grid" msgstr "Grille de Remplissage" -#: pcbnew/class_zone.cpp:829 +#: pcbnew/class_zone.cpp:825 msgid "Hatch lines" msgstr "Lignes de Hachure" -#: pcbnew/class_zone.cpp:835 +#: pcbnew/class_zone.cpp:831 msgid "Corners in DrawList" msgstr "Sommets en Liste de dessin" @@ -626,19 +770,23 @@ msgstr "Nettoyage segments nulls" #: pcbnew/clean.cpp:462 msgid "Merging Segments:" -msgstr "Associe Segment" +msgstr "Fusionner Segments:" #: pcbnew/clean.cpp:464 msgid "Merge" -msgstr "Merge" +msgstr "Fusionner" #: pcbnew/clean.cpp:464 +#: pcbnew/dialog_pad_edit.cpp:186 +#: eeschema/dialog_edit_component_in_schematic.cpp:172 +#: eeschema/dialog_erc.cpp:193 +#: eeschema/dialog_erc.cpp:197 msgid "0" msgstr "0" #: pcbnew/clean.cpp:480 msgid "Merge: " -msgstr "Merge: " +msgstr "Fusionner: " #: pcbnew/clean.cpp:710 msgid "DRC Control:" @@ -736,6 +884,7 @@ msgstr "" " %s's \"texte module\" de %s." #: pcbnew/controle.cpp:172 +#: pcbnew/modedit.cpp:76 msgid "Selection Clarification" msgstr "Clarification de la Sélection" @@ -746,15 +895,30 @@ msgstr "Propriétés des Cotes" #: pcbnew/cotation.cpp:113 #: pcbnew/dialog_edit_module.cpp:270 #: pcbnew/dialog_edit_module.cpp:316 +#: pcbnew/muonde.cpp:360 +#: pcbnew/pcbtexte.cpp:180 +#: eeschema/dialog_edit_component_in_schematic.cpp:181 +#: eeschema/onrightclick.cpp:293 +#: eeschema/dialog_options.cpp:247 +#: eeschema/component_wizard/component_setup_frame.cpp:50 msgid "Normal" msgstr "Normal" #: pcbnew/cotation.cpp:125 +#: pcbnew/muonde.cpp:367 +#: pcbnew/mirepcb.cpp:108 +#: pcbnew/pcbtexte.cpp:129 +#: eeschema/pinedit-dialog.cpp:208 +#: eeschema/pinedit-dialog.cpp:214 +#: eeschema/sheet.cpp:177 +#: eeschema/sheet.cpp:183 +#: common/wxwineda.cpp:91 msgid "Size" msgstr "Taille " #: pcbnew/cotation.cpp:133 -#: pcbnew/dialog_copper_zones_frame.cpp:198 +#: pcbnew/dialog_copper_zones_frame.cpp:194 +#: gerbview/affiche.cpp:37 msgid "Layer:" msgstr "Couche:" @@ -792,6 +956,9 @@ msgstr "Pistes et vias" #: pcbnew/dialog_display_options.cpp:231 #: pcbnew/dialog_display_options.cpp:244 #: pcbnew/dialog_display_options.cpp:268 +#: pcbnew/pcbplot.cpp:415 +#: gerbview/options.cpp:298 +#: gerbview/options.cpp:321 msgid "Sketch" msgstr "Contour" @@ -800,6 +967,10 @@ msgstr "Contour" #: pcbnew/dialog_display_options.cpp:230 #: pcbnew/dialog_display_options.cpp:245 #: pcbnew/dialog_display_options.cpp:267 +#: pcbnew/pcbplot.cpp:415 +#: eeschema/dialog_cmp_graphic_properties.cpp:169 +#: gerbview/options.cpp:298 +#: gerbview/options.cpp:321 msgid "Filled" msgstr "Plein" @@ -809,6 +980,8 @@ msgstr "Pistes:" #: pcbnew/dialog_display_options.cpp:198 #: pcbnew/dialog_display_options.cpp:208 +#: pcbnew/dialog_general_options.cpp:451 +#: pcbnew/dialog_general_options.cpp:466 msgid "Always" msgstr "Toujours" @@ -818,6 +991,8 @@ msgstr "Nouvelle piste" #: pcbnew/dialog_display_options.cpp:200 #: pcbnew/dialog_display_options.cpp:206 +#: pcbnew/dialog_general_options.cpp:449 +#: pcbnew/dialog_general_options.cpp:464 msgid "Never" msgstr "Jamais" @@ -866,10 +1041,12 @@ msgid "Show Pad NoConnect" msgstr "Montrer non conn" #: pcbnew/dialog_display_options.cpp:269 +#: gerbview/options.cpp:322 msgid "Display other items:" msgstr "Afficher autres éléments" #: pcbnew/dialog_display_options.cpp:276 +#: eeschema/dialog_options.cpp:281 msgid "Show page limits" msgstr " Afficher limites de page" @@ -879,6 +1056,24 @@ msgstr " Afficher limites de page" #: pcbnew/dialog_track_options.cpp:322 #: pcbnew/dialog_graphic_items_options.cpp:263 #: pcbnew/dialog_initpcb.cpp:161 +#: pcbnew/set_grid.cpp:171 +#: pcbnew/swap_layers.cpp:223 +#: pcbnew/dialog_general_options.cpp:479 +#: pcbnew/dialog_pad_edit.cpp:215 +#: eeschema/dialog_create_component.cpp:198 +#: eeschema/dialog_cmp_graphic_properties.cpp:178 +#: eeschema/pinedit-dialog.cpp:242 +#: eeschema/dialog_edit_component_in_schematic.cpp:241 +#: eeschema/dialog_edit_label.cpp:181 +#: eeschema/dialog_options.cpp:288 +#: eeschema/symbtext.cpp:177 +#: eeschema/dialog_build_BOM.cpp:344 +#: eeschema/sheet.cpp:198 +#: eeschema/dialog_edit_component_in_lib.cpp:221 +#: cvpcb/dialog_display_options.cpp:187 +#: cvpcb/dialog_cvpcb_config.cpp:138 +#: gerbview/select_layers_to_pcb.cpp:285 +#: share/setpage.cpp:444 msgid "&OK" msgstr "&OK" @@ -888,11 +1083,33 @@ msgstr "&OK" #: pcbnew/dialog_track_options.cpp:328 #: pcbnew/dialog_graphic_items_options.cpp:267 #: pcbnew/dialog_initpcb.cpp:164 +#: pcbnew/set_grid.cpp:176 +#: pcbnew/swap_layers.cpp:227 +#: pcbnew/dialog_general_options.cpp:485 +#: pcbnew/dialog_pad_edit.cpp:219 +#: eeschema/dialog_create_component.cpp:203 +#: eeschema/dialog_cmp_graphic_properties.cpp:183 +#: eeschema/pinedit-dialog.cpp:238 +#: eeschema/dialog_edit_component_in_schematic.cpp:233 +#: eeschema/dialog_edit_label.cpp:186 +#: eeschema/dialog_options.cpp:293 +#: eeschema/symbtext.cpp:182 +#: eeschema/netlist_control.cpp:144 +#: eeschema/netlist_control.cpp:267 +#: eeschema/sheet.cpp:194 +#: eeschema/dialog_edit_component_in_lib.cpp:217 +#: cvpcb/dialog_display_options.cpp:192 +#: gerbview/select_layers_to_pcb.cpp:289 +#: share/setpage.cpp:448 msgid "&Cancel" msgstr "&Annuler" #: pcbnew/dialog_drc.cpp:430 #: pcbnew/dialog_netlist.cpp:193 +#: eeschema/dialog_create_component.cpp:179 +#: eeschema/dialog_edit_component_in_schematic.cpp:202 +#: eeschema/dialog_erc.cpp:239 +#: eeschema/dialog_edit_component_in_lib.cpp:169 msgid "Options" msgstr "Options" @@ -938,6 +1155,7 @@ msgid "Include tests for clearances between pad to pads" msgstr "Inclure test de l'isolation entre pads" #: pcbnew/dialog_drc.cpp:478 +#: pcbnew/onrightclick.cpp:649 msgid "Zones" msgstr "Zones" @@ -1031,10 +1249,12 @@ msgid "3D settings" msgstr "3D Caract" #: pcbnew/dialog_edit_module.cpp:184 +#: common/wxwineda.cpp:171 msgid "X" msgstr "X" #: pcbnew/dialog_edit_module.cpp:185 +#: common/wxwineda.cpp:180 msgid "Y" msgstr "Y" @@ -1043,14 +1263,18 @@ msgid "Change module(s)" msgstr "Change module(s)" #: pcbnew/dialog_edit_module.cpp:191 +#: pcbnew/modedit_onclick.cpp:250 msgid "Edit Module" msgstr "Edit Module" #: pcbnew/dialog_edit_module.cpp:195 +#: pcbnew/pcbtexte.cpp:137 msgid "Position" msgstr "Position" #: pcbnew/dialog_edit_module.cpp:220 +#: eeschema/onrightclick.cpp:343 +#: eeschema/dialog_edit_component_in_lib.cpp:206 msgid "Doc" msgstr "Doc" @@ -1067,6 +1291,7 @@ msgid "Add Field" msgstr "Ajouter Champ" #: pcbnew/dialog_edit_module.cpp:249 +#: eeschema/onrightclick.cpp:248 msgid "Edit Field" msgstr "Editer Champ" @@ -1075,6 +1300,7 @@ msgid "Delete Field" msgstr "Supprimer Champ" #: pcbnew/dialog_edit_module.cpp:261 +#: common/common.cpp:376 msgid "Component" msgstr "Composant" @@ -1083,6 +1309,7 @@ msgid "Copper" msgstr "Cuivre" #: pcbnew/dialog_edit_module.cpp:270 +#: pcbnew/dialog_pad_edit.cpp:190 msgid "User" msgstr "User" @@ -1151,6 +1378,7 @@ msgid "3D Shape Name" msgstr "3D forme" #: pcbnew/dialog_edit_module.cpp:422 +#: eeschema/dialog_eeschema_config.cpp:231 msgid "Browse" msgstr "Examiner" @@ -1221,6 +1449,7 @@ msgid "vertical" msgstr "Vertical" #: pcbnew/dialog_edit_mod_text.cpp:282 +#: pcbnew/pcbtexte.cpp:156 msgid "Orientation" msgstr "Orientation" @@ -1237,94 +1466,98 @@ msgid "Value:" msgstr "Valeur:" #: pcbnew/dialog_edit_mod_text.cpp:384 +#: pcbnew/pcbtexte.cpp:123 +#: eeschema/sheetlab.cpp:102 msgid "Text:" msgstr "Texte:" -#: pcbnew/dialog_copper_zones_frame.cpp:33 +#: pcbnew/dialog_copper_zones_frame.cpp:32 msgid "Zone Setup:" msgstr "Options Zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:39 +#: pcbnew/dialog_copper_zones_frame.cpp:38 msgid "Zone Fill Options:" msgstr "Options Remplissage Zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:41 +#: pcbnew/dialog_copper_zones_frame.cpp:40 msgid "0.00000" msgstr "0.00000" -#: pcbnew/dialog_copper_zones_frame.cpp:41 +#: pcbnew/dialog_copper_zones_frame.cpp:40 msgid "No grid (For tests only!)" msgstr "Pas de grille (pour tests)" -#: pcbnew/dialog_copper_zones_frame.cpp:43 +#: pcbnew/dialog_copper_zones_frame.cpp:42 msgid "Grid Size for Filling:" msgstr "Taille de Grille pour Remplissage:" -#: pcbnew/dialog_copper_zones_frame.cpp:47 +#: pcbnew/dialog_copper_zones_frame.cpp:46 msgid "Include pads" msgstr "Inclure pads" -#: pcbnew/dialog_copper_zones_frame.cpp:47 +#: pcbnew/dialog_copper_zones_frame.cpp:46 msgid "Thermal relief" msgstr "Frein thermique" -#: pcbnew/dialog_copper_zones_frame.cpp:47 +#: pcbnew/dialog_copper_zones_frame.cpp:46 msgid "Exclude pads" msgstr "Exclure pads" -#: pcbnew/dialog_copper_zones_frame.cpp:49 +#: pcbnew/dialog_copper_zones_frame.cpp:48 msgid "Pad in Zone:" msgstr "Pad en Zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:54 +#: pcbnew/dialog_copper_zones_frame.cpp:53 msgid "Thermal Reliefs Parameters" msgstr "Pramètres FreinsThermiques" -#: pcbnew/dialog_copper_zones_frame.cpp:56 +#: pcbnew/dialog_copper_zones_frame.cpp:55 msgid "Antipad Size" msgstr "Taille AntiPad" -#: pcbnew/dialog_copper_zones_frame.cpp:61 +#: pcbnew/dialog_copper_zones_frame.cpp:60 msgid "Define the gap around the pad" msgstr "Definit l'espace autour du pad" -#: pcbnew/dialog_copper_zones_frame.cpp:65 +#: pcbnew/dialog_copper_zones_frame.cpp:64 msgid "Copper Width" msgstr "Epaisseur Cuivre" -#: pcbnew/dialog_copper_zones_frame.cpp:70 +#: pcbnew/dialog_copper_zones_frame.cpp:69 msgid "Define the tickness of copper in therma reliefs" msgstr "Définit l'épaisseur du cuivre dans les freins thermiques" -#: pcbnew/dialog_copper_zones_frame.cpp:90 +#: pcbnew/dialog_copper_zones_frame.cpp:89 msgid "Outlines Options:" msgstr "Options des Contours:" -#: pcbnew/dialog_copper_zones_frame.cpp:92 +#: pcbnew/dialog_copper_zones_frame.cpp:91 +#: pcbnew/dialog_non_copper_zones_properties.cpp:34 +#: eeschema/dialog_options.cpp:273 msgid "Any" msgstr "Tout" -#: pcbnew/dialog_copper_zones_frame.cpp:92 +#: pcbnew/dialog_copper_zones_frame.cpp:91 msgid "H , V and 45 deg" msgstr "H, V et 45 deg" -#: pcbnew/dialog_copper_zones_frame.cpp:94 +#: pcbnew/dialog_copper_zones_frame.cpp:93 msgid "Zone edges orient:" msgstr "Direction contours zone:" -#: pcbnew/dialog_copper_zones_frame.cpp:98 +#: pcbnew/dialog_copper_zones_frame.cpp:97 msgid "Hatched outline" msgstr "Contour hachuré" -#: pcbnew/dialog_copper_zones_frame.cpp:98 +#: pcbnew/dialog_copper_zones_frame.cpp:97 msgid "Full hatched" msgstr "Pleinement hachuré" -#: pcbnew/dialog_copper_zones_frame.cpp:100 +#: pcbnew/dialog_copper_zones_frame.cpp:99 msgid "Outlines Appearance" msgstr "Aspect des Contours" -#: pcbnew/dialog_copper_zones_frame.cpp:102 +#: pcbnew/dialog_copper_zones_frame.cpp:101 msgid "" "Choose how a zone outline is displayed\n" "- Single line\n" @@ -1336,19 +1569,19 @@ msgstr "" "- Hachures courtes\n" "- Hachures sur toute la surface" -#: pcbnew/dialog_copper_zones_frame.cpp:106 +#: pcbnew/dialog_copper_zones_frame.cpp:105 msgid "16 segments / 360 deg" msgstr "16 segments / 360 deg" -#: pcbnew/dialog_copper_zones_frame.cpp:106 +#: pcbnew/dialog_copper_zones_frame.cpp:105 msgid "32 segments / 360 deg" msgstr "32 segments / 360 deg" -#: pcbnew/dialog_copper_zones_frame.cpp:108 +#: pcbnew/dialog_copper_zones_frame.cpp:107 msgid "Arcs Approximation:" msgstr "Approximations des arcs:" -#: pcbnew/dialog_copper_zones_frame.cpp:110 +#: pcbnew/dialog_copper_zones_frame.cpp:109 msgid "" "Number of segments to approximate a circle in filling calculations.\n" "16 segment is faster to calculate and when redraw screen.\n" @@ -1358,57 +1591,54 @@ msgstr "" "16 segments est plus rapide à calculer et pour redessiner l'écran\n" "32 segments donnent une meilleure qualité" -#: pcbnew/dialog_copper_zones_frame.cpp:115 +#: pcbnew/dialog_copper_zones_frame.cpp:114 msgid "Others Options:" msgstr "Autres Options:" -#: pcbnew/dialog_copper_zones_frame.cpp:117 +#: pcbnew/dialog_copper_zones_frame.cpp:116 msgid "Show filled areas in sketch mode" msgstr "Affichersurfaces remplies en mode contour" -#: pcbnew/dialog_copper_zones_frame.cpp:119 +#: pcbnew/dialog_copper_zones_frame.cpp:118 msgid "" "If enabled, filled areas in is this zone will be displayed as non filled polygons.\n" "If disabled, filled areas in is this zone will be displayed as \"solid\" areas (normal mode)." msgstr "" -#: pcbnew/dialog_copper_zones_frame.cpp:123 +#: pcbnew/dialog_copper_zones_frame.cpp:122 msgid "Zone clearance value (mm):" msgstr "Valeur isolation zone (mm):" -#: pcbnew/dialog_copper_zones_frame.cpp:134 +#: pcbnew/dialog_copper_zones_frame.cpp:133 msgid "Export to others zones" msgstr "Exporter vers autres zones" -#: pcbnew/dialog_copper_zones_frame.cpp:135 +#: pcbnew/dialog_copper_zones_frame.cpp:134 msgid "Export this zone setup to all others copper zones" msgstr "Exporter ces options vers les autres zones de cuivre" -#: pcbnew/dialog_copper_zones_frame.cpp:151 +#: pcbnew/dialog_copper_zones_frame.cpp:150 +#: pcbnew/zone_filling_algorithm.cpp:248 msgid "Ok" msgstr "Ok" -#: pcbnew/dialog_copper_zones_frame.cpp:158 -msgid "Remove Filling" -msgstr "Supprimer Remplissage de Zone" - -#: pcbnew/dialog_copper_zones_frame.cpp:165 +#: pcbnew/dialog_copper_zones_frame.cpp:161 msgid "Nets Display Options:" msgstr "Options d'Affichage des Nets" -#: pcbnew/dialog_copper_zones_frame.cpp:167 +#: pcbnew/dialog_copper_zones_frame.cpp:163 msgid "Alphabetic" msgstr "Alphabetique" -#: pcbnew/dialog_copper_zones_frame.cpp:167 +#: pcbnew/dialog_copper_zones_frame.cpp:163 msgid "Advanced" msgstr "Avancé" -#: pcbnew/dialog_copper_zones_frame.cpp:169 +#: pcbnew/dialog_copper_zones_frame.cpp:165 msgid "Net sorting:" msgstr "Tri des Equipotentielles:" -#: pcbnew/dialog_copper_zones_frame.cpp:171 +#: pcbnew/dialog_copper_zones_frame.cpp:167 msgid "" "Nets can be sorted:\n" "By alphabetic order\n" @@ -1418,7 +1648,7 @@ msgstr "" "Paur ordre alphabétique\n" "Par nombre de pads dans les équipotentielles (avancé)" -#: pcbnew/dialog_copper_zones_frame.cpp:175 +#: pcbnew/dialog_copper_zones_frame.cpp:171 msgid "Filter" msgstr "Filtre" @@ -1439,6 +1669,7 @@ msgid "Alternate Via Drill" msgstr "Perçage vias alternatif" #: pcbnew/dialog_track_options.cpp:208 +#: pcbnew/pcbnew.h:294 msgid "Through Via" msgstr "Via Traversante" @@ -1451,6 +1682,7 @@ msgid "Default Via Type" msgstr "Via par Défaut" #: pcbnew/dialog_track_options.cpp:223 +#: pcbnew/dialog_gendrill.cpp:284 msgid "Micro Vias:" msgstr "Micro Vias:" @@ -1611,6 +1843,13 @@ msgid "Keep or change an existing footprint when the netlist gives a different f msgstr "Garder ou changer une empreinte existante quand la netliste donne une empreinte différente" #: pcbnew/dialog_netlist.cpp:186 +#: pcbnew/onrightclick.cpp:584 +#: pcbnew/onrightclick.cpp:765 +#: pcbnew/onrightclick.cpp:820 +#: pcbnew/onrightclick.cpp:869 +#: eeschema/edit_component_in_lib.cpp:239 +#: eeschema/edit_component_in_lib.cpp:320 +#: eeschema/menubar.cpp:146 msgid "Delete" msgstr "Supprimer" @@ -1663,6 +1902,10 @@ msgid "Rebuild the full ratsnest (usefull after a manual pad netname edition)" msgstr "Recalculer le chevelu complet ( utile après une edition manuelle de nom de net sur pad)" #: pcbnew/dialog_netlist.cpp:232 +#: pcbnew/pcbplot.cpp:284 +#: pcbnew/xchgmod.cpp:137 +#: eeschema/annotate_dialog.cpp:230 +#: share/zoom.cpp:449 msgid "Close" msgstr "Fermer" @@ -1671,6 +1914,12 @@ msgid "Netlist File:" msgstr "Fichier Netliste:" #: pcbnew/dialog_netlist.cpp:253 +#: pcbnew/dialog_freeroute_exchange.cpp:222 +#: eeschema/plotps.cpp:227 +#: eeschema/dialog_erc.cpp:219 +#: eeschema/dialog_build_BOM.cpp:348 +#: eeschema/plothpgl.cpp:292 +#: share/dialog_print.cpp:242 msgid "&Close" msgstr "&Fermer" @@ -1715,174 +1964,6 @@ msgstr "Ok pour ajuster l'orientation des modules à %g degrés ?" msgid "Bad value for footprints orientation" msgstr "Mauvaise valeur pour l'orientation des empreintes" -#: pcbnew/tool_modedit.cpp:44 -msgid "Select working library" -msgstr "Sélection de la librairie de travail" - -#: pcbnew/tool_modedit.cpp:47 -msgid "Save Module in working library" -msgstr "Sauver Module en librairie de travail" - -#: pcbnew/tool_modedit.cpp:51 -msgid "Create new library and save current module" -msgstr "Créer une nouvelle librairie et y sauver le composant" - -#: pcbnew/tool_modedit.cpp:56 -msgid "Delete part in current library" -msgstr "Supprimer composant en librairie de travail" - -#: pcbnew/tool_modedit.cpp:61 -msgid "New Module" -msgstr "Nouveau Module" - -#: pcbnew/tool_modedit.cpp:65 -msgid "Load module from lib" -msgstr "Charger un module a partir d'une librairie" - -#: pcbnew/tool_modedit.cpp:70 -msgid "Load module from current board" -msgstr "Charger module a partir du C.I." - -#: pcbnew/tool_modedit.cpp:74 -msgid "Update module in current board" -msgstr "Remplacer module dans le C.I." - -#: pcbnew/tool_modedit.cpp:78 -msgid "Insert module into current board" -msgstr "Placer module dans le C.I." - -#: pcbnew/tool_modedit.cpp:83 -msgid "import module" -msgstr "Importer Module" - -#: pcbnew/tool_modedit.cpp:87 -msgid "export module" -msgstr "Exporter Module" - -#: pcbnew/tool_modedit.cpp:92 -msgid "Undo last edition" -msgstr "Defait dernière édition" - -#: pcbnew/tool_modedit.cpp:94 -msgid "Redo the last undo command" -msgstr "Refait la dernière commande defaite" - -#: pcbnew/tool_modedit.cpp:99 -msgid "Module Properties" -msgstr "Propriétés du Module" - -#: pcbnew/tool_modedit.cpp:103 -msgid "Print Module" -msgstr "Imprimer Module" - -#: pcbnew/tool_modedit.cpp:106 -msgid "Zoom in" -msgstr "Zoom +" - -#: pcbnew/tool_modedit.cpp:110 -msgid "Zoom out" -msgstr "Zoom -" - -#: pcbnew/tool_modedit.cpp:114 -msgid "Redraw view" -msgstr "Redessin de l'écran" - -#: pcbnew/tool_modedit.cpp:119 -msgid "Zoom auto" -msgstr "Zoom Automatique" - -#: pcbnew/tool_modedit.cpp:124 -msgid "Pad Settings" -msgstr "Caract pads" - -#: pcbnew/tool_modedit.cpp:128 -msgid "Module Check" -msgstr "Test module" - -#: pcbnew/tool_modedit.cpp:154 -msgid "Add Pads" -msgstr "Addition de \"pins\"" - -#: pcbnew/tool_modedit.cpp:159 -msgid "Add graphic line or polygon" -msgstr "Addition de lignes ou polygones graphiques" - -#: pcbnew/tool_modedit.cpp:163 -msgid "Add graphic circle" -msgstr "Addition de graphiques (Cercle)" - -#: pcbnew/tool_modedit.cpp:167 -msgid "Add graphic arc" -msgstr "Addition de graphiques (Arc de Cercle)" - -#: pcbnew/tool_modedit.cpp:171 -#: pcbnew/edit.cpp:291 -msgid "Add Text" -msgstr "Ajout de Texte" - -#: pcbnew/tool_modedit.cpp:176 -msgid "Place anchor" -msgstr "Place Ancre" - -#: pcbnew/tool_modedit.cpp:181 -msgid "Delete items" -msgstr "Suppression d'éléments" - -#: pcbnew/tool_modedit.cpp:203 -msgid "Display Grid OFF" -msgstr "Suppression de l'affichage de la grille" - -#: pcbnew/tool_modedit.cpp:207 -msgid "Display Polar Coord ON" -msgstr "Activer affichage coord Polaires" - -#: pcbnew/tool_modedit.cpp:211 -msgid "Units = Inch" -msgstr "Unités = pouce" - -#: pcbnew/tool_modedit.cpp:215 -msgid "Units = mm" -msgstr "Unités = mm" - -#: pcbnew/tool_modedit.cpp:221 -msgid "Change Cursor Shape" -msgstr "Sélection de la forme du curseur" - -#: pcbnew/tool_modedit.cpp:229 -msgid "Show Pads Sketch" -msgstr "Afficher pastilles en contour" - -#: pcbnew/tool_modedit.cpp:236 -msgid "Show Texts Sketch" -msgstr "Afficher textes en contour" - -#: pcbnew/tool_modedit.cpp:243 -msgid "Show Edges Sketch" -msgstr "Afficher Modules en contour" - -#: pcbnew/tool_modedit.cpp:276 -msgid "Auto" -msgstr "Auto" - -#: pcbnew/tool_modedit.cpp:280 -#, c-format -msgid "Zoom %d" -msgstr "Zoom %d" - -#: pcbnew/tool_modedit.cpp:299 -#, c-format -msgid "Grid %.1f" -msgstr "Grille %.1f" - -#: pcbnew/tool_modedit.cpp:301 -#, c-format -msgid "Grid %.3f" -msgstr "Grille %.3f" - -#: pcbnew/tool_modedit.cpp:305 -msgid "User Grid" -msgstr "Grille perso" - #: pcbnew/onrightclick.cpp:41 msgid "Auto Width" msgstr "Epaisseur Automatique" @@ -1912,6 +1993,10 @@ msgid "Via %.3f" msgstr "Via %.3f" #: pcbnew/onrightclick.cpp:127 +#: pcbnew/modedit_onclick.cpp:196 +#: eeschema/onrightclick.cpp:102 +#: eeschema/libedit_onrightclick.cpp:47 +#: gerbview/onrightclick.cpp:41 msgid "End Tool" msgstr "Fin Outil" @@ -1936,6 +2021,7 @@ msgid "Move Drawing" msgstr "Déplace Tracé" #: pcbnew/onrightclick.cpp:238 +#: eeschema/onrightclick.cpp:208 msgid "End Drawing" msgstr "Fin tracé" @@ -1944,6 +2030,7 @@ msgid "Edit Drawing" msgstr "Edit Tracé" #: pcbnew/onrightclick.cpp:243 +#: eeschema/onrightclick.cpp:210 msgid "Delete Drawing" msgstr "Supprimer Tracé" @@ -1960,6 +2047,7 @@ msgid "Delete Last Corner" msgstr "Supprimer Dernier Sommet" #: pcbnew/onrightclick.cpp:275 +#: eeschema/onrightclick.cpp:155 msgid "Delete Marker" msgstr "Effacer Marqueur" @@ -2076,14 +2164,23 @@ msgid "Read Global AutoRouter Data" msgstr "Lire Données de L'autorouteur global" #: pcbnew/onrightclick.cpp:450 +#: pcbnew/modedit_onclick.cpp:206 +#: eeschema/onrightclick.cpp:609 +#: eeschema/libedit_onrightclick.cpp:231 +#: gerbview/onrightclick.cpp:50 msgid "Cancel Block" msgstr "Annuler Bloc" #: pcbnew/onrightclick.cpp:452 +#: eeschema/onrightclick.cpp:615 msgid "Zoom Block" msgstr "Zoom Bloc" #: pcbnew/onrightclick.cpp:455 +#: pcbnew/modedit_onclick.cpp:211 +#: eeschema/onrightclick.cpp:617 +#: eeschema/libedit_onrightclick.cpp:238 +#: gerbview/onrightclick.cpp:53 msgid "Place Block" msgstr "Place Bloc" @@ -2316,6 +2413,7 @@ msgid "Rotate +" msgstr "Rotation +" #: pcbnew/onrightclick.cpp:722 +#: eeschema/onrightclick.cpp:288 msgid "Rotate -" msgstr "Rotation -" @@ -2326,23 +2424,29 @@ msgstr "Change côté" #: pcbnew/onrightclick.cpp:727 #: pcbnew/onrightclick.cpp:761 #: pcbnew/onrightclick.cpp:865 +#: pcbnew/modedit_onclick.cpp:306 +#: eeschema/onrightclick.cpp:300 msgid "Edit" msgstr "Editer" #: pcbnew/onrightclick.cpp:733 +#: pcbnew/modules.cpp:305 msgid "Delete Module" msgstr "Supprimer Module" #: pcbnew/onrightclick.cpp:759 #: pcbnew/onrightclick.cpp:863 +#: pcbnew/modedit_onclick.cpp:241 msgid "Rotate" msgstr "Rotation" #: pcbnew/onrightclick.cpp:798 +#: pcbnew/modedit_onclick.cpp:263 msgid "Edit Pad" msgstr "Edit Pad" #: pcbnew/onrightclick.cpp:802 +#: pcbnew/modedit_onclick.cpp:265 msgid "New Pad Settings" msgstr "Nouvelles Caract. Pads" @@ -2351,6 +2455,7 @@ msgid "Copy current pad settings to this pad" msgstr "Copier les réglages courants pour ce pad" #: pcbnew/onrightclick.cpp:806 +#: pcbnew/modedit_onclick.cpp:267 msgid "Export Pad Settings" msgstr "Exporte Caract. Pads" @@ -2359,6 +2464,7 @@ msgid "Copy this pad settings to current pad settings" msgstr "Copier les caractéristiques de ce pad vers les caractéristiques courantes" #: pcbnew/onrightclick.cpp:813 +#: pcbnew/modedit_onclick.cpp:274 msgid "Global Pad Settings" msgstr "Edition Globale des pads" @@ -2376,6 +2482,7 @@ msgstr "Autoroute Net" #: pcbnew/pcbplot.cpp:147 #: pcbnew/pcbplot.cpp:272 +#: gerbview/tool_gerber.cpp:90 msgid "Plot" msgstr "Tracer" @@ -2432,6 +2539,7 @@ msgid "X scale adjust" msgstr "Ajustage Echelle X" #: pcbnew/pcbplot.cpp:259 +#: share/wxprint.cpp:189 msgid "Set X scale adjust for exact scale plotting" msgstr "Ajuster échelle X pour traçage à l'échelle exacte" @@ -2440,6 +2548,7 @@ msgid "Y scale adjust" msgstr "Ajustage Echelle Y" #: pcbnew/pcbplot.cpp:264 +#: share/wxprint.cpp:190 msgid "Set Y scale adjust for exact scale plotting" msgstr "Ajuster échelle Y pour traçage à l'échelle exacte" @@ -2460,6 +2569,7 @@ msgid "Exclude Edges_Pcb layer" msgstr "Exclure Couche Contours PCB" #: pcbnew/pcbplot.cpp:332 +#: share/dialog_print.cpp:149 msgid "Exclude contents of Edges_Pcb layer from all other layers" msgstr "Exclure les tracés contour PCB des autres couches" @@ -2544,10 +2654,12 @@ msgid "Scale 1.5" msgstr "Echelle 1,5" #: pcbnew/pcbplot.cpp:406 +#: share/dialog_print.cpp:163 msgid "Scale 2" msgstr "Echelle 2" #: pcbnew/pcbplot.cpp:406 +#: share/dialog_print.cpp:164 msgid "Scale 3" msgstr "Echelle 3" @@ -2635,6 +2747,14 @@ msgstr "Ajuster Zéro" msgid "Add Graphic" msgstr "Addition éléments graphiques" +#: pcbnew/edit.cpp:291 +#: pcbnew/tool_modedit.cpp:171 +#: eeschema/libframe.cpp:501 +#: eeschema/schedit.cpp:217 +#: gerbview/tool_gerber.cpp:387 +msgid "Add Text" +msgstr "Ajout de Texte" + #: pcbnew/edit.cpp:295 msgid "Add Modules" msgstr "Addition de Modules" @@ -2652,6 +2772,9 @@ msgid "Local Ratsnest" msgstr "Monter le chevelu général" #: pcbnew/edit.cpp:569 +#: pcbnew/modedit.cpp:427 +#: eeschema/libframe.cpp:577 +#: eeschema/schedit.cpp:366 msgid "Delete item" msgstr "Suppression d'éléments" @@ -2706,6 +2829,19 @@ msgstr "Fichier GenCAD:" #: pcbnew/export_gencad.cpp:83 #: pcbnew/files.cpp:352 +#: pcbnew/plothpgl.cpp:67 +#: pcbnew/librairi.cpp:308 +#: pcbnew/librairi.cpp:454 +#: pcbnew/librairi.cpp:604 +#: pcbnew/librairi.cpp:808 +#: pcbnew/gen_modules_placefile.cpp:145 +#: pcbnew/gen_modules_placefile.cpp:161 +#: pcbnew/gen_modules_placefile.cpp:330 +#: eeschema/plotps.cpp:433 +#: eeschema/plothpgl.cpp:601 +#: cvpcb/genequiv.cpp:42 +#: gerbview/export_to_pcbnew.cpp:75 +#: common/hotkeys_basic.cpp:385 msgid "Unable to create " msgstr "Impossible de créer " @@ -2714,6 +2850,13 @@ msgid "Recovery file " msgstr "Fichier de secours " #: pcbnew/files.cpp:56 +#: pcbnew/librairi.cpp:256 +#: eeschema/find.cpp:241 +#: eeschema/find.cpp:249 +#: eeschema/find.cpp:695 +#: gerbview/dcode.cpp:266 +#: gerbview/readgerb.cpp:145 +#: common/eda_doc.cpp:150 msgid " not found" msgstr " non trouvé" @@ -2730,6 +2873,8 @@ msgid "Load board files:" msgstr "Charger Fichiers C.I.:" #: pcbnew/files.cpp:188 +#: pcbnew/librairi.cpp:77 +#: cvpcb/readschematicnetlist.cpp:110 #, c-format msgid "File <%s> not found" msgstr " fichier %s non trouvé" @@ -2781,6 +2926,7 @@ msgid "<%s> Not Found" msgstr "<%s> Non trouvé" #: pcbnew/find.cpp:238 +#: eeschema/dialog_find.cpp:117 msgid "Item to find:" msgstr "Elément a chercher:" @@ -2806,14 +2952,18 @@ msgstr "Fichier de percage" #: pcbnew/gendrill.cpp:322 #: pcbnew/gendrill.cpp:810 +#: pcbnew/plotps.cpp:51 +#: pcbnew/xchgmod.cpp:637 msgid "Unable to create file " msgstr "Impossible de créer le fichier " #: pcbnew/gendrill.cpp:378 +#: pcbnew/dialog_gendrill.cpp:184 msgid "2:3" msgstr "2:3" #: pcbnew/gendrill.cpp:379 +#: pcbnew/dialog_gendrill.cpp:185 msgid "2:4" msgstr "2:4" @@ -2935,6 +3085,7 @@ msgid "Delete draw items?" msgstr "Suppression éléments graphiques?" #: pcbnew/initpcb.cpp:249 +#: gerbview/initpcb.cpp:150 msgid "Delete Tracks?" msgstr "Effacer Pistes ?" @@ -2943,10 +3094,11 @@ msgid "Delete Modules?" msgstr "Effacement des Modules?" #: pcbnew/initpcb.cpp:295 +#: gerbview/initpcb.cpp:173 msgid "Delete Pcb Texts" msgstr "Effacer Textes Pcb" -#: pcbnew/ioascii.cpp:167 +#: pcbnew/ioascii.cpp:168 msgid "Error: Unexpected end of file !" msgstr "Erreur: Fin de fichier inattendue !" @@ -2963,6 +3115,7 @@ msgid "Arc Stub" msgstr "Arc Stub" #: pcbnew/muonde.cpp:175 +#: common/common.cpp:102 msgid " (mm):" msgstr " (mm):" @@ -2978,6 +3131,7 @@ msgstr " (pouce):" #: pcbnew/muonde.cpp:189 #: pcbnew/muonde.cpp:202 +#: pcbnew/gen_self.h:231 msgid "Incorrect number, abort" msgstr "Nombre incorrect, arret" @@ -3043,6 +3197,8 @@ msgid "Gap (inch):" msgstr "Gap (inch):" #: pcbnew/modules.cpp:81 +#: pcbnew/librairi.cpp:527 +#: common/get_component_dialog.cpp:98 msgid "Name:" msgstr "Nom:" @@ -3051,197 +3207,11 @@ msgid "Search footprint" msgstr "Cherche Module" #: pcbnew/modules.cpp:306 +#: eeschema/find.cpp:220 +#: eeschema/onrightclick.cpp:304 msgid "Value " msgstr "Valeur " -#: pcbnew/tool_pcb.cpp:33 -msgid "" -"Show active layer selections\n" -"and select layer pair for route and place via" -msgstr "" -"Affiche selections couche active\n" -"et selection paire de couches pour routage and placement via" - -#: pcbnew/tool_pcb.cpp:224 -msgid "New board" -msgstr "Nouveau Circuit Imprimé" - -#: pcbnew/tool_pcb.cpp:226 -msgid "Open existing board" -msgstr "Ouvrir C.I. existant" - -#: pcbnew/tool_pcb.cpp:227 -msgid "Save board" -msgstr "Sauver Circuit Imprimé" - -#: pcbnew/tool_pcb.cpp:231 -msgid "Page settings (size, texts)" -msgstr "Ajustage de la feuille de dessin (dimensions, textes)" - -#: pcbnew/tool_pcb.cpp:235 -msgid "Open module editor" -msgstr "Ouvrir Editeur de modules" - -#: pcbnew/tool_pcb.cpp:238 -msgid "Cut selected item" -msgstr "Suppression des éléments sélectionnés" - -#: pcbnew/tool_pcb.cpp:242 -msgid "Copy selected item" -msgstr "Copie des éléments sélectionnés" - -#: pcbnew/tool_pcb.cpp:244 -msgid "Paste" -msgstr "Copie des éléments sauvegardés" - -#: pcbnew/tool_pcb.cpp:247 -msgid "Undelete" -msgstr "Annulation du dernier effacement" - -#: pcbnew/tool_pcb.cpp:250 -msgid "Print board" -msgstr "Imprimer C.I." - -#: pcbnew/tool_pcb.cpp:252 -msgid "Plot (HPGL, PostScript, or GERBER format)" -msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" - -#: pcbnew/tool_pcb.cpp:272 -msgid "Find components and texts" -msgstr "Recherche de composants et textes" - -#: pcbnew/tool_pcb.cpp:279 -msgid "Read netlist" -msgstr "Lire Netliste" - -#: pcbnew/tool_pcb.cpp:281 -msgid "Pcb Design Rules Check" -msgstr "Controle des règles de conception" - -#: pcbnew/tool_pcb.cpp:293 -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:296 -msgid "Mode Track and Autorouting" -msgstr "Mode Pistes and Autoroutage" - -#: pcbnew/tool_pcb.cpp:301 -msgid "Fast access to theWeb Based FreeROUTE advanced routed" -msgstr "Acces raipde au routeur avancé FreeROUTE sur le Web" - -#: pcbnew/tool_pcb.cpp:326 -msgid "Drc OFF" -msgstr "Drc DESACTIVEE" - -#: pcbnew/tool_pcb.cpp:343 -msgid "Show General Ratsnest" -msgstr "Monter le chevelu général" - -#: pcbnew/tool_pcb.cpp:346 -msgid "Show Module Ratsnest when moving" -msgstr "Monter le chevelu du module pendant déplacement" - -#: pcbnew/tool_pcb.cpp:351 -msgid "Enable Auto Del Track" -msgstr "Autoriser l'effacement automatique des pistes" - -#: pcbnew/tool_pcb.cpp:355 -msgid "Show Zones" -msgstr "Monter Zones" - -#: pcbnew/tool_pcb.cpp:364 -msgid "Show Tracks Sketch" -msgstr "Afficher Pistes en Contour" - -#: pcbnew/tool_pcb.cpp:368 -msgid "Hight Contrast Mode Display" -msgstr "Mode d'affichage Haut Contraste" - -#: pcbnew/tool_pcb.cpp:377 -msgid "" -"Display auxiliary vertical toolbar (tools for micro wave applications)\n" -" This is a very experimental feature (under development)" -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:407 -msgid "Net highlight" -msgstr "Surbrillance des équipotentielles" - -#: pcbnew/tool_pcb.cpp:411 -msgid "Display local ratsnest (pad or module)" -msgstr "Afficher le chevelu local (pastilles ou modules)" - -#: pcbnew/tool_pcb.cpp:416 -msgid "Add modules" -msgstr "Addition de Modules" - -#: pcbnew/tool_pcb.cpp:420 -msgid "Add tracks and vias" -msgstr "Ajouter pistes et vias" - -#: pcbnew/tool_pcb.cpp:424 -msgid "Add zones" -msgstr "Addition de Zones" - -#: pcbnew/tool_pcb.cpp:441 -msgid "Add text" -msgstr "Ajout de Texte" - -#: pcbnew/tool_pcb.cpp:446 -msgid "Add dimension" -msgstr "Ajout des cotes" - -#: pcbnew/tool_pcb.cpp:450 -msgid "Add layer alignment target" -msgstr "Ajouter Mire de superposition" - -#: pcbnew/tool_pcb.cpp:460 -msgid "Offset adjust for drill and place files" -msgstr "Ajuste offset pour fichier de perçage et placement" - -#: pcbnew/tool_pcb.cpp:486 -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:492 -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:500 -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:506 -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:513 -msgid "Create a polynomial shape for microwave applications" -msgstr "Creation de formes polynomiales (pour applications micro-ondes)" - -#: pcbnew/tool_pcb.cpp:555 -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:581 -msgid "Zoom " -msgstr "Zoom " - -#: pcbnew/tool_pcb.cpp:595 -msgid "Grid" -msgstr "Grille" - -#: pcbnew/tool_pcb.cpp:721 -msgid "+/- to switch" -msgstr "+/- pour commuter" - #: pcbnew/mirepcb.cpp:78 msgid "Target Properties" msgstr "Propriétés de la mire" @@ -3259,6 +3229,8 @@ msgid "Target Shape:" msgstr "Forme Mire:" #: pcbnew/modedit_onclick.cpp:208 +#: eeschema/libedit_onrightclick.cpp:234 +#: gerbview/onrightclick.cpp:51 msgid "Zoom Block (drag middle mouse)" msgstr "Zoom Bloc (drag bouton du milieu souris)" @@ -3372,6 +3344,7 @@ msgid "Unable to drag this segment: two collinear segments" msgstr "Impossible de drag ce segment: 2 segments alignés" #: pcbnew/muwave_command.cpp:52 +#: eeschema/libframe.cpp:517 msgid "Add Line" msgstr "Addition de lignes" @@ -3474,15 +3447,20 @@ msgid "Cotation not authorized on Copper layers" msgstr "Cotation non autorisée sur Couches Cuivre" #: pcbnew/pcbcfg.cpp:71 +#: eeschema/eeconfig.cpp:60 +#: cvpcb/menucfg.cpp:140 msgid "Read config file" msgstr "Lire config" #: pcbnew/pcbcfg.cpp:85 +#: cvpcb/menucfg.cpp:152 #, c-format msgid "File %s not found" msgstr " fichier %s non trouvé" #: pcbnew/pcbcfg.cpp:205 +#: eeschema/eeconfig.cpp:200 +#: cvpcb/cfg.cpp:75 msgid "Save preferences" msgstr "Sauver préférences" @@ -3509,19 +3487,19 @@ msgstr "Ne peut pas réouvrir fichier <%s>" msgid "Tracks" msgstr "Pistes" -#: pcbnew/router.cpp:60 +#: pcbnew/router.cpp:61 msgid "Unable to create temporary file " msgstr "Impossible de créer le fichier temporaire " -#: pcbnew/router.cpp:65 +#: pcbnew/router.cpp:66 msgid "Create temporary file " msgstr "Creation fichier temporaire " -#: pcbnew/router.cpp:565 +#: pcbnew/router.cpp:566 msgid "Unable to find data file " msgstr "Impossible de trouver le fichier de données " -#: pcbnew/router.cpp:571 +#: pcbnew/router.cpp:572 msgid "Reading autorouter data file " msgstr "Lecture fichier données de l'autorouteur" @@ -3559,10 +3537,13 @@ msgstr "Attention: Les couches dessus et dessous sont les mêmes" #: pcbnew/set_color.cpp:269 #: pcbnew/set_color.cpp:296 +#: gerbview/set_color.cpp:258 +#: gerbview/set_color.cpp:285 msgid "Show None" msgstr "Rien Afficher" #: pcbnew/set_color.cpp:278 +#: gerbview/set_color.cpp:267 msgid "Show All" msgstr "Tout Afficher" @@ -3575,14 +3556,20 @@ msgid "Switch off all of the copper layers" msgstr "N'affiche pas les couches cuivre" #: pcbnew/set_color.cpp:361 +#: eeschema/eelayer.cpp:260 +#: gerbview/set_color.cpp:333 msgid "Apply" msgstr "Appliquer" #: pcbnew/set_grid.cpp:147 +#: pcbnew/dialog_gendrill.cpp:167 +#: pcbnew/dialog_general_options.cpp:299 +#: gerbview/options.cpp:185 msgid "Inches" msgstr "Pouces" #: pcbnew/set_grid.cpp:148 +#: share/drawframe.cpp:388 msgid "mm" msgstr "mm" @@ -3598,7 +3585,7 @@ msgstr "Grille perso dim X" msgid "User Grid Size Y" msgstr "Grille perso dim Y" -#: pcbnew/solve.cpp:233 +#: pcbnew/solve.cpp:234 msgid "Abort routing?" msgstr "Stopper routage?" @@ -3630,10 +3617,22 @@ msgstr "" msgid "Add Pad" msgstr "Ajouter Pastilles" +#: pcbnew/modedit.cpp:399 +#: pcbnew/menubarmodedit.cpp:45 +#: pcbnew/tool_modedit.cpp:124 +msgid "Pad Settings" +msgstr "Caract pads" + #: pcbnew/modedit.cpp:409 +#: eeschema/schedit.cpp:197 msgid "Add Drawing" msgstr "Ajout d'éléments graphiques" +#: pcbnew/modedit.cpp:413 +#: pcbnew/tool_modedit.cpp:176 +msgid "Place anchor" +msgstr "Place Ancre" + #: pcbnew/edgemod.cpp:204 msgid "The graphic item will be on a copper layer.It is very dangerous. Are you sure" msgstr "L'élément graphique sera sur une couche cuivre. C'est très dangereux. Etes vous sûr" @@ -3700,6 +3699,11 @@ msgstr "Module courant" msgid "Current Value" msgstr "Valeur courante" +#: pcbnew/xchgmod.cpp:156 +#: pcbnew/tool_modedit.cpp:61 +msgid "New Module" +msgstr "Nouveau Module" + #: pcbnew/xchgmod.cpp:223 #, c-format msgid "file %s not found" @@ -3733,25 +3737,25 @@ msgstr "Change module %s (%s) " msgid "Cmp files:" msgstr "Fichiers Cmp: " -#: pcbnew/zones_by_polygon.cpp:328 -#: pcbnew/zones_by_polygon.cpp:384 -#: pcbnew/zones_by_polygon.cpp:716 +#: pcbnew/zones_by_polygon.cpp:335 +#: pcbnew/zones_by_polygon.cpp:391 +#: pcbnew/zones_by_polygon.cpp:721 msgid "Area: DRC outline error" msgstr "Zone; Erreur DRC sur contour" -#: pcbnew/zones_by_polygon.cpp:599 +#: pcbnew/zones_by_polygon.cpp:604 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:661 +#: pcbnew/zones_by_polygon.cpp:666 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:906 +#: pcbnew/zones_by_polygon.cpp:903 msgid "No Net" msgstr "No Net" -#: pcbnew/zone_filling_algorithm.cpp:201 +#: pcbnew/zone_filling_algorithm.cpp:202 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" @@ -3760,6 +3764,7 @@ msgid "Place module" msgstr "Place module" #: pcbnew/loadcmp.cpp:215 +#: eeschema/eelibs_read_libraryfiles.cpp:64 #, c-format msgid "Library <%s> not found" msgstr "Librairie %s non trouvée" @@ -3780,10 +3785,12 @@ msgstr "Module <%s> non trouvé" #: pcbnew/loadcmp.cpp:369 #: pcbnew/librairi.cpp:256 +#: eeschema/eelibs_read_libraryfiles.cpp:144 msgid "Library " msgstr "Librairie " #: pcbnew/loadcmp.cpp:369 +#: eeschema/eelibs_read_libraryfiles.cpp:148 msgid " loaded" msgstr " chargé" @@ -3852,6 +3859,7 @@ msgid "File %s exists, OK to replace ?" msgstr "Fichier %s existant, OK pour remplacer ?" #: pcbnew/librairi.cpp:203 +#: eeschema/symbedit.cpp:165 #, c-format msgid "Unable to create <%s>" msgstr "Incapable de créer <%s>" @@ -3947,6 +3955,102 @@ msgstr "Librairie existante " msgid "Create error " msgstr "Erreur en création " +#: pcbnew/pcbframe.cpp:280 +msgid "Board modified, Save before exit ?" +msgstr "Circuit Imprimé modifiée, Sauver avant de quitter ?" + +#: pcbnew/pcbframe.cpp:281 +#: eeschema/schframe.cpp:309 +#: cvpcb/cvframe.cpp:178 +#: common/confirm.cpp:119 +msgid "Confirmation" +msgstr "Confirmation" + +#: pcbnew/pcbframe.cpp:383 +msgid "DRC Off (Disable !!!), Currently: DRC is active" +msgstr "DRC off (désactivée !!!), actuellement DRC active" + +#: pcbnew/pcbframe.cpp:385 +msgid "DRC On (Currently: DRC is inactive !!!)" +msgstr "DRC On (Actuellement, DRC désactivée !!!)" + +#: pcbnew/pcbframe.cpp:396 +msgid "Polar Coords not show" +msgstr "Coord Polaires non affichées" + +#: pcbnew/pcbframe.cpp:397 +msgid "Display Polar Coords" +msgstr "Affichage coord Polaires" + +#: pcbnew/pcbframe.cpp:402 +#: eeschema/schframe.cpp:407 +msgid "Grid not show" +msgstr "Grille non montrée" + +#: pcbnew/pcbframe.cpp:402 +#: eeschema/schframe.cpp:407 +msgid "Show Grid" +msgstr "Afficher grille" + +#: pcbnew/pcbframe.cpp:411 +msgid "Hide General ratsnest" +msgstr "Ne pas afficher le chevelu général" + +#: pcbnew/pcbframe.cpp:412 +msgid "Show General ratsnest" +msgstr "Afficher le chevelu général" + +#: pcbnew/pcbframe.cpp:418 +msgid "Hide Module ratsnest" +msgstr "Ne pas montrer le chevelu du module" + +#: pcbnew/pcbframe.cpp:419 +msgid "Show Module ratsnest" +msgstr "Montrer le chevelu du module" + +#: pcbnew/pcbframe.cpp:426 +msgid "Disable Auto Delete old Track" +msgstr "Ne pas Autoriser l'effacement automatique des pistes" + +#: pcbnew/pcbframe.cpp:427 +msgid "Enable Auto Delete old Track" +msgstr "Autoriser l'effacement automatique des pistes" + +#: pcbnew/pcbframe.cpp:434 +msgid "Do not Show Zones" +msgstr "Ne pas monter Zones" + +#: pcbnew/pcbframe.cpp:434 +#: pcbnew/tool_pcb.cpp:355 +#: pcbnew/set_color.h:423 +msgid "Show Zones" +msgstr "Monter Zones" + +#: pcbnew/pcbframe.cpp:440 +msgid "Show Pads Sketch mode" +msgstr "Afficher pastilles en contour" + +#: pcbnew/pcbframe.cpp:441 +msgid "Show pads filled mode" +msgstr "Afficher pastilles en mode plein" + +#: pcbnew/pcbframe.cpp:447 +msgid "Show Tracks Sketch mode" +msgstr "Afficher pistes en contour" + +#: pcbnew/pcbframe.cpp:448 +msgid "Show Tracks filled mode" +msgstr "Afficher pistes en mode plein" + +#: pcbnew/pcbframe.cpp:454 +msgid "Normal Contrast Mode Display" +msgstr "Mode d'affichage Contraste normal" + +#: pcbnew/pcbframe.cpp:455 +#: pcbnew/tool_pcb.cpp:368 +msgid "Hight Contrast Mode Display" +msgstr "Mode d'affichage Haut Contraste" + #: pcbnew/specctra_import.cpp:73 msgid "Merge Specctra Session file:" msgstr "Fichier Specctra Session à Fusionner:" @@ -4030,6 +4134,325 @@ msgstr "Le caractère de délimitation de ligne doit être un seul caractère ' msgid "Un-terminated delimited string" msgstr "Ligne délimitée non terminée" +#: pcbnew/tool_pcb.cpp:33 +msgid "" +"Show active layer selections\n" +"and select layer pair for route and place via" +msgstr "" +"Affiche selections couche active\n" +"et selection paire de couches pour routage and placement via" + +#: pcbnew/tool_pcb.cpp:224 +msgid "New board" +msgstr "Nouveau Circuit Imprimé" + +#: pcbnew/tool_pcb.cpp:226 +msgid "Open existing board" +msgstr "Ouvrir C.I. existant" + +#: pcbnew/tool_pcb.cpp:227 +msgid "Save board" +msgstr "Sauver Circuit Imprimé" + +#: pcbnew/tool_pcb.cpp:231 +msgid "Page settings (size, texts)" +msgstr "Ajustage de la feuille de dessin (dimensions, textes)" + +#: pcbnew/tool_pcb.cpp:235 +msgid "Open module editor" +msgstr "Ouvrir Editeur de modules" + +#: pcbnew/tool_pcb.cpp:238 +#: eeschema/tool_sch.cpp:65 +#: gerbview/tool_gerber.cpp:245 +msgid "Cut selected item" +msgstr "Suppression des éléments sélectionnés" + +#: pcbnew/tool_pcb.cpp:242 +#: eeschema/tool_sch.cpp:68 +#: gerbview/tool_gerber.cpp:250 +msgid "Copy selected item" +msgstr "Copie des éléments sélectionnés" + +#: pcbnew/tool_pcb.cpp:244 +#: eeschema/tool_sch.cpp:71 +#: gerbview/tool_gerber.cpp:256 +msgid "Paste" +msgstr "Copie des éléments sauvegardés" + +#: pcbnew/tool_pcb.cpp:247 +#: gerbview/tool_gerber.cpp:263 +msgid "Undelete" +msgstr "Annulation du dernier effacement" + +#: pcbnew/tool_pcb.cpp:250 +msgid "Print board" +msgstr "Imprimer C.I." + +#: pcbnew/tool_pcb.cpp:252 +msgid "Plot (HPGL, PostScript, or GERBER format)" +msgstr "Tracer en format HPGL, POSTSCRIPT ou GERBER" + +#: pcbnew/tool_pcb.cpp:255 +#: pcbnew/tool_modedit.cpp:106 +#: eeschema/menubar.cpp:169 +#: eeschema/menubar.cpp:172 +#: eeschema/tool_lib.cpp:167 +#: eeschema/tool_sch.cpp:92 +#: eeschema/tool_viewlib.cpp:67 +#: gerbview/tool_gerber.cpp:273 +#: 3d-viewer/3d_toolbar.cpp:43 +#: share/zoom.cpp:361 +msgid "Zoom in" +msgstr "Zoom +" + +#: pcbnew/tool_pcb.cpp:259 +#: pcbnew/tool_modedit.cpp:110 +#: eeschema/menubar.cpp:177 +#: eeschema/menubar.cpp:180 +#: eeschema/tool_lib.cpp:171 +#: eeschema/tool_sch.cpp:96 +#: eeschema/tool_viewlib.cpp:71 +#: gerbview/tool_gerber.cpp:280 +#: 3d-viewer/3d_toolbar.cpp:46 +#: share/zoom.cpp:362 +msgid "Zoom out" +msgstr "Zoom -" + +#: pcbnew/tool_pcb.cpp:263 +#: pcbnew/tool_modedit.cpp:114 +#: eeschema/menubar.cpp:193 +#: eeschema/tool_lib.cpp:175 +#: eeschema/tool_sch.cpp:100 +#: eeschema/tool_viewlib.cpp:75 +#: gerbview/tool_gerber.cpp:287 +#: 3d-viewer/3d_toolbar.cpp:49 +#: share/zoom.cpp:369 +msgid "Redraw view" +msgstr "Redessin de l'écran" + +#: pcbnew/tool_pcb.cpp:268 +#: pcbnew/tool_modedit.cpp:119 +#: eeschema/menubar.cpp:186 +#: eeschema/menubar.cpp:196 +#: eeschema/tool_lib.cpp:181 +#: eeschema/tool_sch.cpp:105 +#: gerbview/tool_gerber.cpp:298 +#: 3d-viewer/3d_toolbar.cpp:52 +#: share/zoom.cpp:363 +msgid "Zoom auto" +msgstr "Zoom Automatique" + +#: pcbnew/tool_pcb.cpp:272 +#: eeschema/menubar.cpp:154 +#: eeschema/tool_sch.cpp:109 +msgid "Find components and texts" +msgstr "Recherche de composants et textes" + +#: pcbnew/tool_pcb.cpp:279 +msgid "Read netlist" +msgstr "Lire Netliste" + +#: pcbnew/tool_pcb.cpp:281 +msgid "Pcb Design Rules Check" +msgstr "Controle des règles de conception" + +#: pcbnew/tool_pcb.cpp:293 +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:296 +msgid "Mode Track and Autorouting" +msgstr "Mode Pistes and Autoroutage" + +#: pcbnew/tool_pcb.cpp:301 +msgid "Fast access to theWeb Based FreeROUTE advanced routed" +msgstr "Acces raipde au routeur avancé FreeROUTE sur le Web" + +#: pcbnew/tool_pcb.cpp:326 +msgid "Drc OFF" +msgstr "Drc DESACTIVEE" + +#: pcbnew/tool_pcb.cpp:328 +#: pcbnew/tool_modedit.cpp:203 +#: eeschema/tool_sch.cpp:250 +#: gerbview/tool_gerber.cpp:419 +msgid "Display Grid OFF" +msgstr "Suppression de l'affichage de la grille" + +#: pcbnew/tool_pcb.cpp:331 +#: pcbnew/tool_modedit.cpp:207 +#: gerbview/tool_gerber.cpp:425 +msgid "Display Polar Coord ON" +msgstr "Activer affichage coord Polaires" + +#: pcbnew/tool_pcb.cpp:333 +#: pcbnew/tool_modedit.cpp:211 +#: eeschema/tool_sch.cpp:254 +#: gerbview/tool_gerber.cpp:429 +msgid "Units in inches" +msgstr "Unités en pouces" + +#: pcbnew/tool_pcb.cpp:335 +#: pcbnew/tool_modedit.cpp:215 +#: eeschema/tool_sch.cpp:258 +#: gerbview/tool_gerber.cpp:433 +msgid "Units in millimeters" +msgstr "Unités en millimètres" + +#: pcbnew/tool_pcb.cpp:338 +#: pcbnew/tool_modedit.cpp:221 +#: eeschema/tool_sch.cpp:262 +#: gerbview/tool_gerber.cpp:439 +msgid "Change Cursor Shape" +msgstr "Sélection de la forme du curseur" + +#: pcbnew/tool_pcb.cpp:343 +msgid "Show General Ratsnest" +msgstr "Monter le chevelu général" + +#: pcbnew/tool_pcb.cpp:346 +msgid "Show Module Ratsnest when moving" +msgstr "Monter le chevelu du module pendant déplacement" + +#: pcbnew/tool_pcb.cpp:351 +msgid "Enable Auto Del Track" +msgstr "Autoriser l'effacement automatique des pistes" + +#: pcbnew/tool_pcb.cpp:360 +#: pcbnew/tool_modedit.cpp:229 +msgid "Show Pads Sketch" +msgstr "Afficher pastilles en contour" + +#: pcbnew/tool_pcb.cpp:364 +msgid "Show Tracks Sketch" +msgstr "Afficher Pistes en Contour" + +#: pcbnew/tool_pcb.cpp:377 +msgid "" +"Display auxiliary vertical toolbar (tools for micro wave applications)\n" +" This is a very experimental feature (under development)" +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:407 +msgid "Net highlight" +msgstr "Surbrillance des équipotentielles" + +#: pcbnew/tool_pcb.cpp:411 +msgid "Display local ratsnest (pad or module)" +msgstr "Afficher le chevelu local (pastilles ou modules)" + +#: pcbnew/tool_pcb.cpp:416 +msgid "Add modules" +msgstr "Addition de Modules" + +#: pcbnew/tool_pcb.cpp:420 +msgid "Add tracks and vias" +msgstr "Ajouter pistes et vias" + +#: pcbnew/tool_pcb.cpp:424 +msgid "Add zones" +msgstr "Addition de Zones" + +#: pcbnew/tool_pcb.cpp:429 +#: pcbnew/tool_modedit.cpp:159 +msgid "Add graphic line or polygon" +msgstr "Addition de lignes ou polygones graphiques" + +#: pcbnew/tool_pcb.cpp:433 +#: pcbnew/tool_modedit.cpp:163 +msgid "Add graphic circle" +msgstr "Addition de graphiques (Cercle)" + +#: pcbnew/tool_pcb.cpp:437 +#: pcbnew/tool_modedit.cpp:167 +msgid "Add graphic arc" +msgstr "Addition de graphiques (Arc de Cercle)" + +#: pcbnew/tool_pcb.cpp:441 +msgid "Add text" +msgstr "Ajout de Texte" + +#: pcbnew/tool_pcb.cpp:446 +msgid "Add dimension" +msgstr "Ajout des cotes" + +#: pcbnew/tool_pcb.cpp:450 +#: gerbview/tool_gerber.cpp:380 +msgid "Add layer alignment target" +msgstr "Ajouter Mire de superposition" + +#: pcbnew/tool_pcb.cpp:455 +#: pcbnew/tool_modedit.cpp:181 +#: eeschema/menubar.cpp:146 +#: eeschema/tool_lib.cpp:90 +#: eeschema/tool_sch.cpp:228 +#: gerbview/tool_gerber.cpp:395 +msgid "Delete items" +msgstr "Suppression d'éléments" + +#: pcbnew/tool_pcb.cpp:460 +msgid "Offset adjust for drill and place files" +msgstr "Ajuste offset pour fichier de perçage et placement" + +#: pcbnew/tool_pcb.cpp:486 +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:492 +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:500 +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:506 +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:513 +msgid "Create a polynomial shape for microwave applications" +msgstr "Creation de formes polynomiales (pour applications micro-ondes)" + +#: pcbnew/tool_pcb.cpp:555 +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:577 +#: pcbnew/tool_modedit.cpp:276 +#: eeschema/plotps.cpp:189 +msgid "Auto" +msgstr "Auto" + +#: pcbnew/tool_pcb.cpp:581 +msgid "Zoom " +msgstr "Zoom " + +#: pcbnew/tool_pcb.cpp:595 +#: pcbnew/menubarpcb.cpp:230 +#: eeschema/eelayer.cpp:223 +#: pcbnew/set_color.h:414 +#: eeschema/eelayer.h:214 +#: gerbview/set_color.h:324 +msgid "Grid" +msgstr "Grille" + +#: pcbnew/tool_pcb.cpp:611 +#: pcbnew/tool_modedit.cpp:305 +msgid "User Grid" +msgstr "Grille perso" + +#: pcbnew/tool_pcb.cpp:721 +msgid "+/- to switch" +msgstr "+/- pour commuter" + #: pcbnew/pcbnew.cpp:44 msgid "Pcbnew is already running, Continue?" msgstr "Pcbnew est est cours d'exécution. Continuer ?" @@ -4092,6 +4515,7 @@ msgstr "Choisir l'origine des coordonnées: absolue ou relative à l'axe auxilia #: pcbnew/dialog_gendrill.cpp:205 #: pcbnew/dialog_gendrill.cpp:215 +#: eeschema/libedit.cpp:41 msgid "None" msgstr "Aucun" @@ -4132,10 +4556,15 @@ msgid "Speed (cm/s)" msgstr "Vitesse plume ( cm/s )" #: pcbnew/dialog_gendrill.cpp:233 +#: eeschema/plothpgl.cpp:256 msgid "Pen Number" msgstr "Numéro de plume" #: pcbnew/dialog_gendrill.cpp:239 +#: pcbnew/dialog_general_options.cpp:376 +#: eeschema/dialog_build_BOM.cpp:283 +#: eeschema/netlist_control.cpp:121 +#: share/dialog_print.cpp:187 msgid "Options:" msgstr "Options :" @@ -4227,6 +4656,7 @@ msgid "Sizes and Widths" msgstr "Dims. et Epaiss." #: pcbnew/menubarmodedit.cpp:41 +#: pcbnew/menubarpcb.cpp:236 msgid "Adjust width for texts and drawings" msgstr "Ajuster dims pour textes et graphiques" @@ -4235,14 +4665,21 @@ msgid "Adjust size,shape,layers... for Pads" msgstr "Ajuster taille, forme, couches... pour pads" #: pcbnew/menubarmodedit.cpp:50 +#: pcbnew/set_grid.h:39 msgid "User Grid Size" msgstr "Dim Grille utilisteur" #: pcbnew/menubarmodedit.cpp:51 +#: pcbnew/menubarpcb.cpp:231 msgid "Adjust User Grid" msgstr "Ajuster Grille utilisateur" #: pcbnew/menubarmodedit.cpp:64 +#: pcbnew/menubarpcb.cpp:299 +#: eeschema/menubar.cpp:397 +#: cvpcb/tool_cvpcb.cpp:155 +#: kicad/buildmnu.cpp:190 +#: gerbview/tool_gerber.cpp:149 msgid "&Contents" msgstr "&Contenu" @@ -4259,25 +4696,128 @@ msgid "About pcbnew PCB designer" msgstr "Au sujet de Pcbnew, concption de PCB" #: pcbnew/menubarmodedit.cpp:82 +#: pcbnew/menubarpcb.cpp:311 msgid "3D Display" msgstr "3D Visu" #: pcbnew/menubarmodedit.cpp:82 +#: pcbnew/menubarpcb.cpp:311 msgid "Show board in 3D viewer" msgstr "Visualisation du circuit en 3D" #: pcbnew/menubarmodedit.cpp:86 +#: pcbnew/menubarpcb.cpp:317 msgid "&Dimensions" msgstr "&Dimensions" #: pcbnew/menubarmodedit.cpp:87 +#: pcbnew/menubarpcb.cpp:320 msgid "&3D Display" msgstr "&3D Visu" #: pcbnew/menubarmodedit.cpp:88 +#: pcbnew/menubarpcb.cpp:321 +#: eeschema/menubar.cpp:412 +#: cvpcb/tool_cvpcb.cpp:166 +#: kicad/buildmnu.cpp:203 +#: gerbview/tool_gerber.cpp:161 msgid "&Help" msgstr "&Aide" +#: pcbnew/tool_modedit.cpp:44 +#: eeschema/tool_lib.cpp:120 +msgid "Select working library" +msgstr "Sélection de la librairie de travail" + +#: pcbnew/tool_modedit.cpp:47 +msgid "Save Module in working library" +msgstr "Sauver Module en librairie de travail" + +#: pcbnew/tool_modedit.cpp:51 +msgid "Create new library and save current module" +msgstr "Créer une nouvelle librairie et y sauver le composant" + +#: pcbnew/tool_modedit.cpp:56 +msgid "Delete part in current library" +msgstr "Supprimer composant en librairie de travail" + +#: pcbnew/tool_modedit.cpp:65 +msgid "Load module from lib" +msgstr "Charger un module a partir d'une librairie" + +#: pcbnew/tool_modedit.cpp:70 +msgid "Load module from current board" +msgstr "Charger module a partir du C.I." + +#: pcbnew/tool_modedit.cpp:74 +msgid "Update module in current board" +msgstr "Remplacer module dans le C.I." + +#: pcbnew/tool_modedit.cpp:78 +msgid "Insert module into current board" +msgstr "Placer module dans le C.I." + +#: pcbnew/tool_modedit.cpp:83 +msgid "import module" +msgstr "Importer Module" + +#: pcbnew/tool_modedit.cpp:87 +msgid "export module" +msgstr "Exporter Module" + +#: pcbnew/tool_modedit.cpp:92 +#: eeschema/menubar.cpp:130 +#: eeschema/tool_lib.cpp:147 +#: eeschema/tool_sch.cpp:74 +msgid "Undo last edition" +msgstr "Defait dernière édition" + +#: pcbnew/tool_modedit.cpp:94 +#: eeschema/menubar.cpp:138 +#: eeschema/tool_lib.cpp:149 +#: eeschema/tool_sch.cpp:77 +msgid "Redo the last undo command" +msgstr "Refait la dernière commande defaite" + +#: pcbnew/tool_modedit.cpp:99 +msgid "Module Properties" +msgstr "Propriétés du Module" + +#: pcbnew/tool_modedit.cpp:103 +msgid "Print Module" +msgstr "Imprimer Module" + +#: pcbnew/tool_modedit.cpp:128 +msgid "Module Check" +msgstr "Test module" + +#: pcbnew/tool_modedit.cpp:154 +msgid "Add Pads" +msgstr "Addition de \"pins\"" + +#: pcbnew/tool_modedit.cpp:236 +msgid "Show Texts Sketch" +msgstr "Afficher textes en contour" + +#: pcbnew/tool_modedit.cpp:243 +msgid "Show Edges Sketch" +msgstr "Afficher Modules en contour" + +#: pcbnew/tool_modedit.cpp:280 +#, c-format +msgid "Zoom %d" +msgstr "Zoom %d" + +#: pcbnew/tool_modedit.cpp:299 +#, c-format +msgid "Grid %.1f" +msgstr "Grille %.1f" + +#: pcbnew/tool_modedit.cpp:301 +#, c-format +msgid "Grid %.3f" +msgstr "Grille %.3f" + #: pcbnew/dialog_freeroute_exchange.cpp:187 msgid "Export a Specctra Design (*.dsn) File" msgstr "Exporter un fichier de conception Specctra (*.dsn)" @@ -4339,51 +4879,72 @@ msgid "Zone Edges Orient" msgstr "Direction contours zone" #: pcbnew/dialog_non_copper_zones_properties.cpp:54 +#: gerbview/select_layers_to_pcb.cpp:91 msgid "Layer selection:" msgstr "Sélection couche:" #: pcbnew/zones_non_copper_type_functions.cpp:152 -#: pcbnew/dialog_copper_zones.cpp:382 +#: pcbnew/dialog_copper_zones.cpp:348 msgid "Error : you must choose a layer" msgstr "Erreur. Vous devez choisir une couche" -#: pcbnew/dialog_copper_zones.cpp:64 +#: pcbnew/dialog_copper_zones.cpp:66 msgid "Zone clearance value:" msgstr "Valeur isolation zone:" -#: pcbnew/dialog_copper_zones.cpp:67 +#: pcbnew/dialog_copper_zones.cpp:69 msgid "Grid :" msgstr "Grille:" -#: pcbnew/dialog_copper_zones.cpp:394 +#: pcbnew/dialog_copper_zones.cpp:360 msgid "Error : you must choose a net name" msgstr "Erreur. Vous devez choisir une équipotentielle" #: pcbnew/dialog_setup_libs.cpp:97 +#: eeschema/dialog_eeschema_config.cpp:105 +#: cvpcb/dialog_cvpcb_config.cpp:75 +#: gerbview/reglage.cpp:90 msgid "from " msgstr "De " #: pcbnew/dialog_setup_libs.cpp:153 +#: eeschema/dialog_eeschema_config.cpp:161 +#: cvpcb/dialog_display_options.cpp:178 +#: cvpcb/dialog_cvpcb_config.cpp:128 msgid "Save Cfg" msgstr "Sauver config" #: pcbnew/dialog_setup_libs.cpp:159 +#: eeschema/dialog_eeschema_config.cpp:178 +#: cvpcb/dialog_cvpcb_config.cpp:143 msgid "Files ext:" msgstr "Ext. Fichiers" #: pcbnew/dialog_setup_libs.cpp:175 +#: cvpcb/dialog_cvpcb_config.cpp:162 +#: cvpcb/dialog_cvpcb_config.cpp:194 msgid "Del" msgstr "Supprimer" #: pcbnew/dialog_setup_libs.cpp:179 +#: eeschema/edit_component_in_lib.cpp:233 +#: eeschema/edit_component_in_lib.cpp:312 +#: eeschema/dialog_eeschema_config.cpp:197 +#: cvpcb/dialog_cvpcb_config.cpp:166 +#: cvpcb/dialog_cvpcb_config.cpp:198 msgid "Add" msgstr "Ajouter" #: pcbnew/dialog_setup_libs.cpp:183 +#: eeschema/dialog_eeschema_config.cpp:203 +#: cvpcb/dialog_cvpcb_config.cpp:170 +#: cvpcb/dialog_cvpcb_config.cpp:202 msgid "Ins" msgstr "Insérer" #: pcbnew/dialog_setup_libs.cpp:191 +#: eeschema/dialog_eeschema_config.cpp:213 +#: cvpcb/dialog_cvpcb_config.cpp:177 msgid "Libraries" msgstr "Librairies" @@ -4392,6 +4953,7 @@ msgid "Lib Modules Dir:" msgstr "Repertoire Lib Modules:" #: pcbnew/dialog_setup_libs.cpp:206 +#: cvpcb/menucfg.cpp:62 msgid "Module Doc File:" msgstr "Fichiers Doc des Modules" @@ -4412,10 +4974,15 @@ msgid "Net ext: " msgstr "Net ext: " #: pcbnew/dialog_setup_libs.cpp:367 +#: eeschema/dialog_eeschema_config.cpp:368 +#: cvpcb/menucfg.cpp:202 msgid "Library files:" msgstr "Fichiers Librairies:" #: pcbnew/dialog_setup_libs.cpp:392 +#: eeschema/dialog_eeschema_config.cpp:394 +#: cvpcb/menucfg.cpp:227 +#: cvpcb/menucfg.cpp:295 msgid "Library already in use" msgstr "Librairie déjà en usage" @@ -4436,30 +5003,38 @@ msgid "Module count" msgstr "Nb Modules" #: pcbnew/dialog_general_options.cpp:288 +#: gerbview/options.cpp:175 msgid "No Display" msgstr "Pas d'affichage" #: pcbnew/dialog_general_options.cpp:291 +#: gerbview/options.cpp:177 msgid "Display Polar Coord" msgstr "Affichage coord Polaires" #: pcbnew/dialog_general_options.cpp:300 +#: gerbview/options.cpp:186 msgid "millimeters" msgstr "millimetres" #: pcbnew/dialog_general_options.cpp:302 +#: eeschema/dialog_options.cpp:264 +#: gerbview/options.cpp:187 msgid "Units" msgstr "Unités" #: pcbnew/dialog_general_options.cpp:309 +#: gerbview/options.cpp:193 msgid "Small" msgstr "Petit" #: pcbnew/dialog_general_options.cpp:310 +#: gerbview/options.cpp:193 msgid "Big" msgstr "Grand" #: pcbnew/dialog_general_options.cpp:312 +#: gerbview/options.cpp:194 msgid "Cursor" msgstr "Curseur" @@ -4500,6 +5075,7 @@ msgid "Segments 45 Only" msgstr "Segments 45 seulement" #: pcbnew/dialog_general_options.cpp:429 +#: eeschema/dialog_options.cpp:256 msgid "Auto PAN" msgstr "Auto PAN" @@ -4550,10 +5126,12 @@ msgid "90" msgstr "90" #: pcbnew/dialog_pad_edit.cpp:188 +#: eeschema/dialog_edit_component_in_schematic.cpp:175 msgid "-90" msgstr "-90" #: pcbnew/dialog_pad_edit.cpp:189 +#: eeschema/dialog_edit_component_in_schematic.cpp:174 msgid "180" msgstr "180" @@ -4574,6 +5152,7 @@ msgid "SMD" msgstr "CMS" #: pcbnew/dialog_pad_edit.cpp:207 +#: eeschema/netlist.cpp:245 msgid "Conn" msgstr "Conn" @@ -4694,14 +5273,19 @@ msgid "Save current board as.." msgstr "Sauver le Circuit Imprimé courant sous.." #: pcbnew/menubarpcb.cpp:91 +#: eeschema/menubar.cpp:75 +#: gerbview/tool_gerber.cpp:88 msgid "P&rint" msgstr "Imp&rimer" #: pcbnew/menubarpcb.cpp:91 +#: eeschema/menubar.cpp:75 +#: gerbview/tool_gerber.cpp:88 msgid "Print on current printer" msgstr "Imprimer sur l'imprimante par défaut" #: pcbnew/menubarpcb.cpp:96 +#: eeschema/menubar.cpp:105 msgid "&Plot" msgstr "&Tracer" @@ -4750,6 +5334,7 @@ msgid "Import a routed \"Specctra Session\" (*.ses) file" msgstr "Importer un fichier de routage \"Specctra Session\" (*.ses) " #: pcbnew/menubarpcb.cpp:140 +#: eeschema/libframe.cpp:525 msgid "Import" msgstr "Importer" @@ -4782,6 +5367,10 @@ msgid "Archive or add footprints in a library file" msgstr "Archiver ou ajouter les modules dans un fichier librairie" #: pcbnew/menubarpcb.cpp:163 +#: eeschema/menubar.cpp:109 +#: cvpcb/tool_cvpcb.cpp:122 +#: kicad/buildmnu.cpp:122 +#: gerbview/tool_gerber.cpp:93 msgid "E&xit" msgstr "&Quitter" @@ -4790,6 +5379,7 @@ msgid "Quit PCBNEW" msgstr "Quitter PCBNEW" #: pcbnew/menubarpcb.cpp:181 +#: eeschema/menubar.cpp:358 msgid "&Library" msgstr "&Librairie" @@ -4798,6 +5388,8 @@ msgid "Setting libraries, directories and others..." msgstr "Sélectionner les librairies , répertoires et autres" #: pcbnew/menubarpcb.cpp:186 +#: eeschema/menubar.cpp:364 +#: gerbview/tool_gerber.cpp:108 msgid "&Colors" msgstr "&Couleurs" @@ -4826,6 +5418,8 @@ msgid "&Save Preferences" msgstr "&Sauver Préférences" #: pcbnew/menubarpcb.cpp:208 +#: eeschema/menubar.cpp:383 +#: gerbview/tool_gerber.cpp:123 msgid "Save application preferences" msgstr "Sauver préférences" @@ -4834,6 +5428,7 @@ msgid "&Read Preferences" msgstr "&Lire Préférences" #: pcbnew/menubarpcb.cpp:213 +#: eeschema/menubar.cpp:387 msgid "Read application preferences" msgstr "Lire préférences de l'application" @@ -4846,6 +5441,7 @@ msgid "Adjust size and width for tracks, vias" msgstr "Ajuster dims et taille des pistes et vias" #: pcbnew/menubarpcb.cpp:235 +#: pcbnew/dialog_graphic_items_options.h:47 msgid "Texts and Drawings" msgstr "Textes et Tracés" @@ -4854,6 +5450,7 @@ msgid "Adjust size,shape,layers... for pads" msgstr "Ajuster taille, forme, couches... pour pads" #: pcbnew/menubarpcb.cpp:246 +#: gerbview/tool_gerber.cpp:122 msgid "&Save Setup" msgstr "&Sauver Options" @@ -4930,14 +5527,24 @@ msgid "About PCBNEW printed circuit board designer" msgstr "Au Sujet de PCBNEW outil de conception de C.I." #: pcbnew/menubarpcb.cpp:315 +#: eeschema/menubar.cpp:407 +#: cvpcb/tool_cvpcb.cpp:164 +#: gerbview/tool_gerber.cpp:156 +#: 3d-viewer/3d_toolbar.cpp:116 msgid "&File" msgstr "&Fichiers" #: pcbnew/menubarpcb.cpp:316 +#: eeschema/menubar.cpp:411 +#: cvpcb/tool_cvpcb.cpp:165 +#: kicad/buildmnu.cpp:202 +#: gerbview/tool_gerber.cpp:157 +#: 3d-viewer/3d_toolbar.cpp:124 msgid "&Preferences" msgstr "&Préférences" #: pcbnew/menubarpcb.cpp:318 +#: gerbview/tool_gerber.cpp:158 msgid "&Miscellaneous" msgstr "&Divers" @@ -4945,86 +5552,6 @@ msgstr "&Divers" msgid "P&ostprocess" msgstr "P&ostprocesseurs" -#: pcbnew/pcbframe.cpp:280 -msgid "Board modified, Save before exit ?" -msgstr "Circuit Imprimé modifiée, Sauver avant de quitter ?" - -#: pcbnew/pcbframe.cpp:281 -msgid "Confirmation" -msgstr "Confirmation" - -#: pcbnew/pcbframe.cpp:383 -msgid "DRC Off (Disable !!!), Currently: DRC is active" -msgstr "DRC off (désactivée !!!), actuellement DRC active" - -#: pcbnew/pcbframe.cpp:385 -msgid "DRC On (Currently: DRC is inactive !!!)" -msgstr "DRC On (Actuellement, DRC désactivée !!!)" - -#: pcbnew/pcbframe.cpp:396 -msgid "Polar Coords not show" -msgstr "Coord Polaires non affichées" - -#: pcbnew/pcbframe.cpp:397 -msgid "Display Polar Coords" -msgstr "Affichage coord Polaires" - -#: pcbnew/pcbframe.cpp:402 -msgid "Grid not show" -msgstr "Grille non montrée" - -#: pcbnew/pcbframe.cpp:402 -msgid "Show Grid" -msgstr "Afficher grille" - -#: pcbnew/pcbframe.cpp:411 -msgid "General ratsnest not show" -msgstr "Chevelu général non affiché" - -#: pcbnew/pcbframe.cpp:412 -msgid "Show General ratsnest" -msgstr "Afficher le chevelu général" - -#: pcbnew/pcbframe.cpp:418 -msgid "Module ratsnest not show" -msgstr "Ne pas montrer le chevelu du module pendant déplacement" - -#: pcbnew/pcbframe.cpp:419 -msgid "Show Module ratsnest" -msgstr "Montrer le chevelu du module" - -#: pcbnew/pcbframe.cpp:426 -msgid "Disable Auto Delete old Track" -msgstr "Ne pas Autoriser l'effacement automatique des pistes" - -#: pcbnew/pcbframe.cpp:427 -msgid "Enable Auto Delete old Track" -msgstr "Autoriser l'effacement automatique des pistes" - -#: pcbnew/pcbframe.cpp:434 -msgid "Do not Show Zones" -msgstr "Ne pas monter Zones" - -#: pcbnew/pcbframe.cpp:440 -msgid "Show Pads Sketch mode" -msgstr "Afficher pastilles en contour" - -#: pcbnew/pcbframe.cpp:441 -msgid "Show pads filled mode" -msgstr "Afficher pastilles en mode plein" - -#: pcbnew/pcbframe.cpp:447 -msgid "Show Tracks Sketch mode" -msgstr "Afficher pistes en contour" - -#: pcbnew/pcbframe.cpp:448 -msgid "Show Tracks filled mode" -msgstr "Afficher pistes en mode plein" - -#: pcbnew/pcbframe.cpp:454 -msgid "Normal Contrast Mode Display" -msgstr "Mode d'affichage Contraste normal" - #: eeschema/backanno.cpp:135 msgid "Load Stuff File" msgstr "Charger Fichier d'échange" @@ -5194,6 +5721,7 @@ msgid "FileName" msgstr "Nom Fichier" #: eeschema/affiche.cpp:37 +#: eeschema/component_class.cpp:128 msgid "Ref" msgstr "Ref" @@ -5218,6 +5746,7 @@ msgid "PinName" msgstr "Nom Pin" #: eeschema/affiche.cpp:80 +#: eeschema/eelayer.h:140 msgid "PinNum" msgstr "Num Pin" @@ -5240,31 +5769,44 @@ msgid "Length" msgstr "Longueur" #: eeschema/affiche.cpp:102 +#: eeschema/pinedit-dialog.cpp:225 +#: eeschema/dialog_edit_label.cpp:150 msgid "Up" msgstr "Haut" #: eeschema/affiche.cpp:105 +#: eeschema/pinedit-dialog.cpp:226 +#: eeschema/dialog_edit_label.cpp:152 msgid "Down" msgstr "Bas" #: eeschema/affiche.cpp:108 +#: eeschema/pinedit-dialog.cpp:224 +#: eeschema/dialog_edit_label.cpp:151 msgid "Left" msgstr "Gauche" #: eeschema/affiche.cpp:111 +#: eeschema/pinedit-dialog.cpp:223 +#: eeschema/dialog_edit_label.cpp:149 msgid "Right" msgstr "Droite" #: eeschema/affiche.cpp:169 #: eeschema/affiche.cpp:175 +#: share/dialog_print.cpp:218 +#: share/svg_print.cpp:229 msgid "All" msgstr "Tout" #: eeschema/affiche.cpp:172 +#: eeschema/onrightclick.cpp:328 msgid "Unit" msgstr "Unité" #: eeschema/affiche.cpp:182 +#: eeschema/dialog_edit_component_in_schematic.cpp:191 +#: eeschema/onrightclick.cpp:315 msgid "Convert" msgstr "Convert" @@ -5307,6 +5849,7 @@ msgid " Not Found" msgstr " Non trouvé" #: eeschema/find.cpp:653 +#: eeschema/selpart.cpp:39 msgid "No libraries are loaded" msgstr "Pas de librairies chargées" @@ -5339,18 +5882,23 @@ msgid "Nothing found" msgstr " Rien trouvé" #: eeschema/dialog_create_component.cpp:171 +#: eeschema/component_class.cpp:60 msgid "U" msgstr "U" #: eeschema/dialog_create_component.cpp:183 +#: eeschema/edit_component_in_lib.cpp:401 msgid "As Convert" msgstr "A une forme \"convertie\"" #: eeschema/dialog_create_component.cpp:187 +#: eeschema/dialog_edit_component_in_lib.cpp:161 msgid "Power symbol" msgstr "Symbole alimentation" #: eeschema/dialog_create_component.cpp:191 +#: eeschema/dialog_edit_component_in_schematic.cpp:188 +#: eeschema/dialog_edit_component_in_lib.cpp:165 msgid "Parts are locked" msgstr "Les parts sont verrouillées" @@ -5471,14 +6019,17 @@ msgid "Show Pin Number" msgstr "Montrer Numéro de Pin" #: eeschema/dialog_create_component.cpp:254 +#: eeschema/edit_component_in_lib.cpp:418 msgid "Show Pin Name" msgstr "Montre Nom de Pin" #: eeschema/dialog_create_component.cpp:258 +#: eeschema/edit_component_in_lib.cpp:429 msgid "Pin Name Inside" msgstr "Nom de pin a l'intérieur" #: eeschema/dialog_create_component.cpp:262 +#: eeschema/dialog_edit_component_in_lib.cpp:155 msgid "Skew:" msgstr "Décalage:" @@ -5501,10 +6052,12 @@ msgstr "Feuille %s (fichier %s) modifiée. La sauver?" #: eeschema/netform.cpp:60 #: eeschema/netform.cpp:278 +#: eeschema/save_schemas.cpp:86 msgid "Failed to create file " msgstr "Impossible de créer le fichier " #: eeschema/edit_component_in_lib.cpp:168 +#: eeschema/dialog_edit_component_in_lib.h:56 msgid "Lib Component Properties" msgstr "Propriétés du composant librairie" @@ -5517,6 +6070,7 @@ msgid "(alias of " msgstr "(alias de " #: eeschema/edit_component_in_lib.cpp:216 +#: eeschema/dialog_edit_component_in_lib.cpp:210 msgid "Alias" msgstr "Alias" @@ -5561,6 +6115,7 @@ msgstr "Alignement au sommet" #: eeschema/edit_component_in_lib.cpp:486 #: eeschema/dialog_edit_component_in_schematic.cpp:226 +#: eeschema/eelayer.h:164 msgid "Fields" msgstr "Champs" @@ -5571,18 +6126,22 @@ msgstr "Texte visible" #: eeschema/edit_component_in_lib.cpp:504 #: eeschema/dialog_edit_component_in_schematic.cpp:216 +#: eeschema/symbtext.cpp:170 msgid "Vertical" msgstr "Vertical" #: eeschema/edit_component_in_lib.cpp:510 +#: eeschema/edit_component_in_schematic.cpp:206 msgid "Field Name:" msgstr "Nom Champ" #: eeschema/edit_component_in_lib.cpp:520 +#: eeschema/edit_component_in_schematic.cpp:216 msgid "Field Text:" msgstr "Texte du Champ:" #: eeschema/edit_component_in_lib.cpp:526 +#: eeschema/edit_component_in_schematic.cpp:224 msgid "Pos" msgstr "Pos" @@ -5599,6 +6158,7 @@ msgid "Chip Name" msgstr "Nom en librairie" #: eeschema/edit_component_in_lib.cpp:556 +#: eeschema/edit_component_in_schematic.cpp:200 msgid "Field to edit" msgstr "Champ à éditer" @@ -5644,6 +6204,7 @@ msgid "Delete Convert items" msgstr "Suppression des éléments convertis" #: eeschema/edit_component_in_lib.cpp:1146 +#: common/eda_doc.cpp:134 msgid "Doc Files" msgstr "Fichiers de Doc" @@ -5660,11 +6221,13 @@ msgid "Options :" msgstr "Options :" #: eeschema/dialog_cmp_graphic_properties.cpp:156 +#: eeschema/symbtext.cpp:162 msgid "Common to Units" msgstr "Commun aux Unités" #: eeschema/dialog_cmp_graphic_properties.cpp:160 #: eeschema/pinedit-dialog.cpp:197 +#: eeschema/symbtext.cpp:166 msgid "Common to convert" msgstr "Commun a converti" @@ -5709,30 +6272,37 @@ msgid "Pin Orient:" msgstr "Pin Orient:" #: eeschema/pinedit-dialog.cpp:251 +#: eeschema/pinedit.cpp:22 msgid "line" msgstr "Ligne" #: eeschema/pinedit-dialog.cpp:252 +#: eeschema/pinedit.cpp:22 msgid "invert" msgstr "invert" #: eeschema/pinedit-dialog.cpp:253 +#: eeschema/pinedit.cpp:22 msgid "clock" msgstr "clock" #: eeschema/pinedit-dialog.cpp:254 +#: eeschema/pinedit.cpp:22 msgid "clock inv" msgstr "clock inv" #: eeschema/pinedit-dialog.cpp:255 +#: eeschema/pinedit.cpp:23 msgid "low in" msgstr "low in" #: eeschema/pinedit-dialog.cpp:256 +#: eeschema/pinedit.cpp:23 msgid "low clock" msgstr "low clock" #: eeschema/pinedit-dialog.cpp:257 +#: eeschema/pinedit.cpp:23 msgid "low out" msgstr "low out" @@ -5742,11 +6312,13 @@ msgstr "Forme Pin:" #: eeschema/pinedit-dialog.cpp:264 #: eeschema/dialog_edit_label.cpp:160 +#: eeschema/component_wizard/dialog_component_setup.cpp:201 msgid "Input" msgstr "Entrée" #: eeschema/pinedit-dialog.cpp:265 #: eeschema/dialog_edit_label.cpp:161 +#: eeschema/component_wizard/dialog_component_setup.cpp:202 msgid "Output" msgstr "Sortie" @@ -5761,10 +6333,12 @@ msgstr "3 Etats" #: eeschema/pinedit-dialog.cpp:268 #: eeschema/dialog_edit_label.cpp:164 +#: eeschema/component_wizard/dialog_component_setup.cpp:205 msgid "Passive" msgstr "Passive" #: eeschema/pinedit-dialog.cpp:269 +#: eeschema/component_wizard/dialog_component_setup.cpp:206 msgid "Unspecified" msgstr "Non specifié" @@ -5789,14 +6363,17 @@ msgid "Electrical Type:" msgstr "Type électrique:" #: eeschema/plotps.cpp:190 +#: eeschema/plothpgl.cpp:223 msgid "Page Size A4" msgstr "Feuille A4" #: eeschema/plotps.cpp:191 +#: eeschema/plothpgl.cpp:228 msgid "Page Size A" msgstr "Feuille A" #: eeschema/plotps.cpp:192 +#: eeschema/plothpgl.cpp:233 msgid "Plot page size:" msgstr "Format de la feuille:" @@ -5809,6 +6386,8 @@ msgid "B/W" msgstr "N/B" #: eeschema/plotps.cpp:204 +#: share/dialog_print.cpp:203 +#: share/svg_print.cpp:212 msgid "Color" msgstr "Couleur" @@ -5817,14 +6396,18 @@ msgid "Plot Color:" msgstr "Tracé et Couleurs:" #: eeschema/plotps.cpp:209 +#: share/dialog_print.cpp:194 +#: share/svg_print.cpp:218 msgid "Print Sheet Ref" msgstr "Imprimer cartouche" #: eeschema/plotps.cpp:218 +#: eeschema/plothpgl.cpp:283 msgid "&Plot page" msgstr "&Tracer Page" #: eeschema/plotps.cpp:223 +#: eeschema/plothpgl.cpp:288 msgid "Plot a&ll" msgstr "&Tout tracer" @@ -5843,6 +6426,7 @@ msgid "Plot: %s\n" msgstr "Trace: %s\n" #: eeschema/menubar.cpp:41 +#: gerbview/tool_gerber.cpp:63 msgid "&New" msgstr "&Nouveau" @@ -5851,6 +6435,7 @@ msgid "New schematic" msgstr "Nouvelle schématique" #: eeschema/menubar.cpp:47 +#: cvpcb/tool_cvpcb.cpp:109 msgid "&Open" msgstr "&Ouvrir " @@ -5863,6 +6448,7 @@ msgid "&Save" msgstr "&Sauver" #: eeschema/menubar.cpp:55 +#: eeschema/tool_sch.cpp:45 msgid "Save schematic project" msgstr "Sauver le Projet schématique" @@ -5931,6 +6517,7 @@ msgid "&Redo\t" msgstr "&Redo\t" #: eeschema/menubar.cpp:154 +#: pcbnew/find.h:38 msgid "Find" msgstr "Chercher" @@ -5947,6 +6534,7 @@ msgid "&Component" msgstr "&Composant" #: eeschema/menubar.cpp:206 +#: eeschema/tool_sch.cpp:156 msgid "Place the component" msgstr "Placer le Composant" @@ -5955,6 +6543,7 @@ msgid "&Power port" msgstr "Power Symbole" #: eeschema/menubar.cpp:212 +#: eeschema/tool_sch.cpp:160 msgid "Place the power port" msgstr "Placer le Symbole Power" @@ -5963,6 +6552,7 @@ msgid "&Wire" msgstr "&Fil" #: eeschema/menubar.cpp:218 +#: eeschema/tool_sch.cpp:165 msgid "Place the wire" msgstr "Place fil" @@ -5971,6 +6561,7 @@ msgid "&Bus" msgstr "&Bus" #: eeschema/menubar.cpp:227 +#: eeschema/tool_sch.cpp:169 msgid "Place bus" msgstr "Place bus" @@ -6003,6 +6594,7 @@ msgid "Net name" msgstr "Net Name" #: eeschema/menubar.cpp:267 +#: eeschema/tool_sch.cpp:186 msgid "Place net name" msgstr "Place nom de net" @@ -6015,10 +6607,12 @@ msgid "Place a global label. Warning: all global labels with the same name are c msgstr "Placer un label global. Attention: tous les labels globaux avec le même nom sont connectés dans toute la hierarchie" #: eeschema/menubar.cpp:284 +#: eeschema/eelayer.h:85 msgid "Junction" msgstr "Jonction" #: eeschema/menubar.cpp:285 +#: eeschema/tool_sch.cpp:195 msgid "Place junction" msgstr "Place jonction" @@ -6067,6 +6661,7 @@ msgid "Graphic text (comment)" msgstr "Ttextes graphiques (commentaires)" #: eeschema/menubar.cpp:349 +#: eeschema/tool_sch.cpp:223 msgid "Place graphic text (comment)" msgstr "Placer textes graphiques (commentaires)" @@ -6079,6 +6674,7 @@ msgid "Color preferences" msgstr "Préférences de couleurs" #: eeschema/menubar.cpp:371 +#: gerbview/tool_gerber.cpp:110 msgid "&Options" msgstr "&Options" @@ -6416,6 +7012,7 @@ msgid "Move Text" msgstr "Déplacer Texte" #: eeschema/onrightclick.cpp:439 +#: eeschema/libedit_onrightclick.cpp:128 msgid "Rotate Text" msgstr "Rot. Texte" @@ -6460,11 +7057,13 @@ msgstr "Supprimer Fil" #: eeschema/onrightclick.cpp:513 #: eeschema/onrightclick.cpp:545 +#: eeschema/schedit.cpp:201 msgid "Add Junction" msgstr "Ajout jonctions" #: eeschema/onrightclick.cpp:514 #: eeschema/onrightclick.cpp:546 +#: eeschema/schedit.cpp:205 msgid "Add Label" msgstr "Ajout Label" @@ -6538,6 +7137,7 @@ msgid "Drag Block" msgstr "Drag Bloc" #: eeschema/onrightclick.cpp:632 +#: eeschema/libedit_onrightclick.cpp:245 msgid "Mirror Block ||" msgstr "Miroir Bloc ||" @@ -6825,6 +7425,8 @@ msgid "Select component (%d items)" msgstr "Selection composant (%d items)" #: eeschema/viewlibs.cpp:118 +#: eeschema/viewlib_frame.cpp:53 +#: eeschema/tool_sch.cpp:56 msgid "Library browser" msgstr "Visualisateur des librairies" @@ -6852,6 +7454,9 @@ msgid "Empty Text!" msgstr "Texte vide" #: eeschema/eeconfig.cpp:73 +#: kicad/files-io.cpp:131 +#: gerbview/dcode.cpp:266 +#: gerbview/readgerb.cpp:145 msgid "File " msgstr "Fichier " @@ -6864,6 +7469,7 @@ msgid "White" msgstr "Blanc" #: eeschema/eelayer.cpp:234 +#: share/dialog_print.cpp:204 msgid "Black" msgstr "Noir" @@ -6877,6 +7483,7 @@ msgid "Arc %.1f deg" msgstr "Arc %.1f deg" #: eeschema/eeredraw.cpp:130 +#: eeschema/eelayer.h:171 msgid "Sheet" msgstr "Feuille" @@ -6917,10 +7524,12 @@ msgid "Warning More than 1 Pin connected to UnConnect symbol" msgstr "Warning: plus que 1 Pin connectée a un symbole de non connexion" #: eeschema/erc.cpp:595 +#: common/confirm.cpp:84 msgid "Warning" msgstr "Avertissement" #: eeschema/erc.cpp:598 +#: common/confirm.cpp:88 msgid "Error" msgstr "Erreur" @@ -6989,10 +7598,12 @@ msgid "Root" msgstr "Racine" #: eeschema/hotkeys.cpp:249 +#: eeschema/schedit.cpp:241 msgid "Add Component" msgstr "Ajout Composant" #: eeschema/hotkeys.cpp:271 +#: eeschema/schedit.cpp:189 msgid "Add Wire" msgstr "Ajouter Fils" @@ -7029,6 +7640,7 @@ msgid "Hierachy Pins by Sheets" msgstr "Pins de hiérarchie par feuilles" #: eeschema/dialog_build_BOM.cpp:269 +#: eeschema/netlist.cpp:197 msgid "List" msgstr "Liste" @@ -7101,6 +7713,7 @@ msgid "Create &List" msgstr "Créer &Liste" #: eeschema/dialog_build_BOM.cpp:352 +#: cvpcb/dialog_display_options.cpp:196 msgid "&Apply" msgstr "&Appliquer" @@ -7231,6 +7844,7 @@ msgstr "" "#End List\n" #: eeschema/build_BOM.cpp:694 +#: eeschema/component_class.cpp:139 msgid "Field" msgstr "Champ" @@ -7276,6 +7890,7 @@ msgstr "#End labels\n" #: eeschema/netlist_control.cpp:124 #: eeschema/netlist_control.cpp:240 +#: gerbview/options.cpp:201 msgid "Default format" msgstr "Format par défaut" @@ -7329,6 +7944,7 @@ msgid "Netlist command:" msgstr "Commande netliste:" #: eeschema/netlist_control.cpp:320 +#: share/setpage.cpp:354 msgid "Title:" msgstr "Titre:" @@ -7379,6 +7995,7 @@ msgid " Normal" msgstr " Normal" #: eeschema/save_schemas.cpp:61 +#: eeschema/files-io.cpp:82 msgid "Schematic files:" msgstr "Fichiers schématiques:" @@ -7431,6 +8048,7 @@ msgid "Add Power" msgstr "Add Alims" #: eeschema/sheet.cpp:162 +#: share/svg_print.cpp:251 msgid "Filename:" msgstr "Nom Fichier:" @@ -7678,82 +8296,11 @@ msgid "Edit pins part per part (Carefully use!)" msgstr "Editer pins unité par unité (Utiliser en connaissance de cause)" #: eeschema/tool_lib.cpp:238 +#: eeschema/tool_viewlib.cpp:128 #, c-format msgid "Part %c" msgstr "Composant %c" -#: eeschema/plothpgl.cpp:222 -msgid "Sheet Size" -msgstr "Dim. feuille" - -#: eeschema/plothpgl.cpp:224 -msgid "Page Size A3" -msgstr "Feuille A3" - -#: eeschema/plothpgl.cpp:225 -msgid "Page Size A2" -msgstr "Feuille A2" - -#: eeschema/plothpgl.cpp:226 -msgid "Page Size A1" -msgstr "Feuille A1" - -#: eeschema/plothpgl.cpp:227 -msgid "Page Size A0" -msgstr "Feuille A0" - -#: eeschema/plothpgl.cpp:229 -msgid "Page Size B" -msgstr "Feuille B" - -#: eeschema/plothpgl.cpp:230 -msgid "Page Size C" -msgstr "Feuille C" - -#: eeschema/plothpgl.cpp:231 -msgid "Page Size D" -msgstr "Feuille D" - -#: eeschema/plothpgl.cpp:232 -msgid "Page Size E" -msgstr "Feuille E" - -#: eeschema/plothpgl.cpp:240 -msgid "Pen control:" -msgstr "Controle plume" - -#: eeschema/plothpgl.cpp:244 -msgid "Pen Width ( mils )" -msgstr "Epaiss plume (mils)" - -#: eeschema/plothpgl.cpp:250 -msgid "Pen Speed ( cm/s )" -msgstr "Vitesse plume ( cm/s )" - -#: eeschema/plothpgl.cpp:262 -msgid "Page offset:" -msgstr "Offset page:" - -#: eeschema/plothpgl.cpp:266 -msgid "Plot Offset X" -msgstr "Offset de tracé X" - -#: eeschema/plothpgl.cpp:272 -msgid "Plot Offset Y" -msgstr "Offset de tracé Y" - -#: eeschema/plothpgl.cpp:298 -msgid "&Accept Offset" -msgstr "&Accepter Offset" - -#: eeschema/plothpgl.cpp:580 -msgid "** Plot End **\n" -msgstr "** Fin de Tracé **\n" - -#: eeschema/plothpgl.cpp:605 -msgid "Plot " -msgstr "Trace " - #: eeschema/tool_sch.cpp:39 msgid "New schematic project" msgstr "Nouveau Projet schématique" @@ -7851,6 +8398,7 @@ msgid "Place graphic line or polygon" msgstr "Placer ligne ou polygone graphique" #: eeschema/tool_sch.cpp:267 +#: eeschema/schframe.cpp:418 msgid "Show Hidden Pins" msgstr "Force affichage des pins invisibles" @@ -7858,6 +8406,94 @@ msgstr "Force affichage des pins invisibles" msgid "HV orientation for Wires and Bus" msgstr "Force direction H, V et X pour les fils et bus" +#: eeschema/plothpgl.cpp:222 +msgid "Sheet Size" +msgstr "Dim. feuille" + +#: eeschema/plothpgl.cpp:224 +msgid "Page Size A3" +msgstr "Feuille A3" + +#: eeschema/plothpgl.cpp:225 +msgid "Page Size A2" +msgstr "Feuille A2" + +#: eeschema/plothpgl.cpp:226 +msgid "Page Size A1" +msgstr "Feuille A1" + +#: eeschema/plothpgl.cpp:227 +msgid "Page Size A0" +msgstr "Feuille A0" + +#: eeschema/plothpgl.cpp:229 +msgid "Page Size B" +msgstr "Feuille B" + +#: eeschema/plothpgl.cpp:230 +msgid "Page Size C" +msgstr "Feuille C" + +#: eeschema/plothpgl.cpp:231 +msgid "Page Size D" +msgstr "Feuille D" + +#: eeschema/plothpgl.cpp:232 +msgid "Page Size E" +msgstr "Feuille E" + +#: eeschema/plothpgl.cpp:240 +msgid "Pen control:" +msgstr "Controle plume" + +#: eeschema/plothpgl.cpp:244 +msgid "Pen Width ( mils )" +msgstr "Epaiss plume (mils)" + +#: eeschema/plothpgl.cpp:250 +msgid "Pen Speed ( cm/s )" +msgstr "Vitesse plume ( cm/s )" + +#: eeschema/plothpgl.cpp:262 +msgid "Page offset:" +msgstr "Offset page:" + +#: eeschema/plothpgl.cpp:266 +msgid "Plot Offset X" +msgstr "Offset de tracé X" + +#: eeschema/plothpgl.cpp:272 +msgid "Plot Offset Y" +msgstr "Offset de tracé Y" + +#: eeschema/plothpgl.cpp:298 +msgid "&Accept Offset" +msgstr "&Accepter Offset" + +#: eeschema/plothpgl.cpp:580 +msgid "** Plot End **\n" +msgstr "** Fin de Tracé **\n" + +#: eeschema/plothpgl.cpp:605 +msgid "Plot " +msgstr "Trace " + +#: eeschema/schframe.cpp:308 +msgid "Schematic modified, Save before exit ?" +msgstr "Schematique modifiée, Sauver avant de quitter ?" + +#: eeschema/schframe.cpp:418 +msgid "No show Hidden Pins" +msgstr "N'affichage pas les pins invisibles" + +#: eeschema/schframe.cpp:422 +msgid "Allows any direction for wires and busses" +msgstr "Autorise les directions quelconques pour les fils et bus" + +#: eeschema/schframe.cpp:423 +msgid "Allows horizontal and vertical wires and busses only" +msgstr "" + #: eeschema/files-io.cpp:72 msgid "Clear Schematic Hierarchy (modified!)?" msgstr "Effacer la hiérarchie schématique (modifiée!)?" @@ -7875,7 +8511,7 @@ msgstr "" msgid "File <%s> not found." msgstr "Fichier <%s> non trouvé" -#: eeschema/component_class.cpp:111 +#: eeschema/component_class.cpp:131 msgid "Datasheet" msgstr "Documentation" @@ -8012,71 +8648,6 @@ msgstr "Copie Doc" msgid "Browse DocFiles" msgstr "Examen Fichiers de Doc" -#: eeschema/tool_viewlib.cpp:49 -msgid "Select library to browse" -msgstr "Sélection de la librairie a examiner" - -#: eeschema/tool_viewlib.cpp:53 -msgid "Select part to browse" -msgstr "Sélectionner composant à visualiser" - -#: eeschema/tool_viewlib.cpp:58 -msgid "Display previous part" -msgstr "Afficher composant précédent" - -#: eeschema/tool_viewlib.cpp:62 -msgid "Display next part" -msgstr "Afficher composant suivant" - -#: eeschema/tool_viewlib.cpp:79 -msgid "Best zoom" -msgstr "Meilleur Zoom" - -#: eeschema/tool_viewlib.cpp:84 -msgid "Show as \"De Morgan\" normal part" -msgstr "Afficher sous représentation normale" - -#: eeschema/tool_viewlib.cpp:88 -msgid "Show as \"De Morgan\" convert part" -msgstr "Afficher sous présentation \" De Morgan\"" - -#: eeschema/tool_viewlib.cpp:98 -msgid "View component documents" -msgstr "Voir documents des composants" - -#: eeschema/tool_viewlib.cpp:106 -msgid "Insert component in schematic" -msgstr "Placer composant en schématique" - -#: eeschema/eelibs_read_libraryfiles.cpp:115 -msgid "Start loading schematic libs" -msgstr "Demarre chargement des librairies schématiques" - -#: eeschema/eelibs_read_libraryfiles.cpp:150 -msgid " error!" -msgstr " erreur!" - -#: eeschema/eelibs_read_libraryfiles.cpp:306 -#: eeschema/eelibs_read_libraryfiles.cpp:313 -msgid "File <" -msgstr "Fichier <" - -#: eeschema/eelibs_read_libraryfiles.cpp:306 -msgid "> is empty!" -msgstr "> est vide" - -#: eeschema/eelibs_read_libraryfiles.cpp:313 -msgid "> is NOT EESCHEMA library!" -msgstr "> nest PAS une librairie EESCHEMA !" - -#: eeschema/eelibs_read_libraryfiles.cpp:332 -msgid "Library <" -msgstr "Librairie <" - -#: eeschema/eelibs_read_libraryfiles.cpp:332 -msgid "> header read error" -msgstr "> erreur lecture entête" - #: eeschema/libedit_onrightclick.cpp:77 msgid "Move Arc " msgstr "Déplacer arc" @@ -8118,6 +8689,7 @@ msgid "Move Text " msgstr "Déplacer Texte" #: eeschema/libedit_onrightclick.cpp:126 +#: eeschema/dialog_edit_label.h:44 msgid "Text Editor" msgstr "Editeur de Texte" @@ -8201,9 +8773,70 @@ msgstr "Change Taille Num Pin autres Pins" msgid "Select Items" msgstr "Sélection des Eléments" -#: eeschema/libedit_onrightclick.cpp:245 -msgid "Mirror Block" -msgstr "Miroir Bloc" +#: eeschema/tool_viewlib.cpp:49 +msgid "Select library to browse" +msgstr "Sélection de la librairie a examiner" + +#: eeschema/tool_viewlib.cpp:53 +msgid "Select part to browse" +msgstr "Sélectionner composant à visualiser" + +#: eeschema/tool_viewlib.cpp:58 +msgid "Display previous part" +msgstr "Afficher composant précédent" + +#: eeschema/tool_viewlib.cpp:62 +msgid "Display next part" +msgstr "Afficher composant suivant" + +#: eeschema/tool_viewlib.cpp:79 +msgid "Best zoom" +msgstr "Meilleur Zoom" + +#: eeschema/tool_viewlib.cpp:84 +msgid "Show as \"De Morgan\" normal part" +msgstr "Afficher sous représentation normale" + +#: eeschema/tool_viewlib.cpp:88 +msgid "Show as \"De Morgan\" convert part" +msgstr "Afficher sous présentation \" De Morgan\"" + +#: eeschema/tool_viewlib.cpp:98 +msgid "View component documents" +msgstr "Voir documents des composants" + +#: eeschema/tool_viewlib.cpp:106 +msgid "Insert component in schematic" +msgstr "Placer composant en schématique" + +#: eeschema/eelibs_read_libraryfiles.cpp:115 +msgid "Start loading schematic libs" +msgstr "Demarre chargement des librairies schématiques" + +#: eeschema/eelibs_read_libraryfiles.cpp:150 +msgid " error!" +msgstr " erreur!" + +#: eeschema/eelibs_read_libraryfiles.cpp:306 +#: eeschema/eelibs_read_libraryfiles.cpp:313 +msgid "File <" +msgstr "Fichier <" + +#: eeschema/eelibs_read_libraryfiles.cpp:306 +msgid "> is empty!" +msgstr "> est vide" + +#: eeschema/eelibs_read_libraryfiles.cpp:313 +msgid "> is NOT EESCHEMA library!" +msgstr "> nest PAS une librairie EESCHEMA !" + +#: eeschema/eelibs_read_libraryfiles.cpp:332 +msgid "Library <" +msgstr "Librairie <" + +#: eeschema/eelibs_read_libraryfiles.cpp:332 +msgid "> header read error" +msgstr "> erreur lecture entête" #: eeschema/netlist.cpp:217 msgid "No component" @@ -8236,22 +8869,6 @@ msgstr "Tri des Nets" msgid "Bad Bus Label: " msgstr "Mauvais label de Bus: " -#: eeschema/schframe.cpp:308 -msgid "Schematic modified, Save before exit ?" -msgstr "Schematique modifiée, Sauver avant de quitter ?" - -#: eeschema/schframe.cpp:418 -msgid "No show Hidden Pins" -msgstr "N'affichage pas les pins invisibles" - -#: eeschema/schframe.cpp:422 -msgid "Draw lines at any direction" -msgstr "Tracer traits de direction quelconque" - -#: eeschema/schframe.cpp:423 -msgid "Draw lines H, V or 45 deg only" -msgstr "Tracer traits H, V ou 45 deg seulement" - #: eeschema/component_wizard/dialog_component_setup.cpp:137 msgid "Quick KICAD Library Component Builder" msgstr "" @@ -8381,11 +8998,13 @@ msgstr "%d équivalences" msgid "Component %s: Footprint %s not found in libraries" msgstr "Composant %s: Module %s non trouvé en librairies" -#: cvpcb/cvpcb.cpp:41 +#: cvpcb/cvpcb.cpp:42 msgid "Cvpcb is already running, Continue?" msgstr "Cvpcb est est cours d'exécution. Continuer ?" #: cvpcb/displayframe.cpp:118 +#: pcbnew/dialog_display_options.h:54 +#: cvpcb/dialog_display_options.h:51 msgid "Display Options" msgstr "Options d'Affichage" @@ -8629,22 +9248,27 @@ msgid "Delete selections" msgstr "Effacement des associations existantes" #: cvpcb/cvframe.cpp:426 +#: share/drawframe.cpp:136 msgid "Dialog boxes" msgstr "Fenêtres de dialogue" #: cvpcb/cvframe.cpp:431 +#: share/drawframe.cpp:141 msgid "Lists" msgstr "Listes" #: cvpcb/cvframe.cpp:436 +#: share/drawframe.cpp:146 msgid "Status box" msgstr "Fenetre d'état" #: cvpcb/cvframe.cpp:442 +#: share/drawframe.cpp:152 msgid "&Font" msgstr "&Fonte" #: cvpcb/cvframe.cpp:444 +#: share/drawframe.cpp:154 msgid "Choose font type and size for dialogs, infos and status box" msgstr "Choisir les fontes et leur taille pour les dialogues, infos et ligne d'état" @@ -8764,6 +9388,7 @@ msgid "You must choose a PDF viewer before use this option" msgstr "Vous devez choisir un Visualisateur PDF avant d'utiliser cette option" #: kicad/preferences.cpp:97 +#: common/gestfich.cpp:685 msgid "Prefered Editor:" msgstr "Editeur préféré:" @@ -8997,20 +9622,20 @@ msgid "Save current project" msgstr "Sauver le projet courrant" #: kicad/buildmnu.cpp:111 -msgid "Save &Project Files" -msgstr "Sauver Fichiers &Projet" +msgid "&Archive project" +msgstr "Archiver fichiers projet" #: kicad/buildmnu.cpp:112 -msgid "Save and Zip all project files" -msgstr "Compresser et sauver fichiers Projet" +msgid "Archive project files in zip file" +msgstr "Archive fichiers projet dans un fichier zip" #: kicad/buildmnu.cpp:116 -msgid "&Unzip Archive" -msgstr "&Unzip Archive" +msgid "&Unarchive project" +msgstr "&Désarchiver pProjet" #: kicad/buildmnu.cpp:117 -msgid "UnZip archive file" -msgstr "Décompresser fichier d'archive" +msgid "Unarchive project files from zip file" +msgstr "Désarchiver les fichiers du projet" #: kicad/buildmnu.cpp:122 msgid "Quit KiCad" @@ -9041,8 +9666,8 @@ msgid "Select your prefered editor for file browsing" msgstr "Choisir son pour examen de fichiers" #: kicad/buildmnu.cpp:153 -msgid "Select Fonts" -msgstr "Sélection Fontes" +msgid "Fonts" +msgstr "Fonte" #: kicad/buildmnu.cpp:153 msgid "Font preferences" @@ -9140,20 +9765,8 @@ msgstr "Nom Fichier C.I.:" msgid "Ok to change the existing file ?" msgstr "D'accord pour changer le fichier existant ?" -#: gerbview/files.cpp:86 -msgid "Not yet available..." -msgstr "non encore disponible" - -#: gerbview/files.cpp:134 -#: gerbview/files.cpp:220 -msgid "Gerber files:" -msgstr "Fichiers Gerber:" - -#: gerbview/files.cpp:187 -msgid "D codes files:" -msgstr "Fichiers D-Codes:" - #: gerbview/gerbview_config.cpp:147 +#: gerbview/process_config.cpp:117 msgid "Save config file" msgstr "Sauver config" @@ -9219,6 +9832,11 @@ msgstr "Monter DCodes" msgid "%d errors while reading Gerber file [%s]" msgstr "%d erreurs pendant lecture fichier gerber [%s]" +#: gerbview/readgerb.cpp:273 +#: gerbview/files.cpp:187 +msgid "D codes files:" +msgstr "Fichiers D-Codes:" + #: gerbview/reglage.cpp:102 msgid "Save Cfg..." msgstr "Sauver config..." @@ -9261,7 +9879,7 @@ msgstr "Affiche toutes les couches Gerber" msgid "Switch off all of the Gerber layers" msgstr "N'affiche pas les couches Gerber" -#: gerbview/gerbview.cpp:37 +#: gerbview/gerbview.cpp:38 msgid "GerbView is already running. Continue?" msgstr "Gerbview est est cours d'exécution. Continuer ?" @@ -9286,6 +9904,18 @@ msgstr "D-type" msgid "????" msgstr "????" +#: gerbview/files.cpp:86 +msgid "Not yet available..." +msgstr "non encore disponible" + +#: gerbview/files.cpp:134 +msgid "Load gerber file" +msgstr "Charger fichier gerber" + +#: gerbview/files.cpp:220 +msgid "Save gerber file" +msgstr "Charger fichier gerber" + #: gerbview/tool_gerber.cpp:37 msgid "Clear and Load Gerber file" msgstr "Effacer et charger fichier Gerber" @@ -10274,6 +10904,7 @@ msgid "dialog_freeroute_exchange" msgstr "dialog_freeroute_exchange" #: pcbnew/dialog_general_options.h:60 +#: eeschema/dialog_options.h:55 msgid "General Options" msgstr "Options Générales" @@ -10290,6 +10921,7 @@ msgid "Footprints Orientation" msgstr "Orientation des Modules" #: pcbnew/dialog_setup_libs.h:43 +#: eeschema/dialog_eeschema_config.h:50 msgid "Dialog" msgstr "Dialog" @@ -10397,7 +11029,7 @@ msgstr "Afficher Modules Cu" msgid "Pad properties" msgstr "Propriétés des Pads" -#: pcbnew/dialog_copper_zones_frame.h:103 +#: pcbnew/dialog_copper_zones_frame.h:99 msgid "Fill Zones Options" msgstr "Options de Remplissage de Zone" @@ -10713,42 +11345,3 @@ msgstr "Imprimer" msgid "Create SVG file" msgstr "Créer Fichier SVG" -#~ msgid "Quit pcbnew" -#~ msgstr "Quitter Pcbnew" -#~ msgid "Texts and drawings" -#~ msgstr "&Textes et Tracés" -#~ msgid "&List nets" -#~ msgstr "&Liste équipots" -#~ msgid "End tool" -#~ msgstr "Fin Outil" -#~ msgid "Select layer pair" -#~ msgstr "Selection couple de couches" -#~ msgid "Cancel block" -#~ msgstr "Annuler bloc" -#~ msgid "Place block" -#~ msgstr "Place bloc" -#~ msgid "Copy block" -#~ msgstr "Copie bloc" -#~ msgid "Rotate block" -#~ msgstr "Rotation bloc" -#~ msgid "Delete block" -#~ msgstr "Effacer bloc" -#~ msgid "Delete track" -#~ msgstr "Effacer piste" -#~ msgid "Move text" -#~ msgstr "Déplacer texte" -#~ msgid "Rotate text" -#~ msgstr "Rot. texte" -#~ msgid "Delete text" -#~ msgstr "Supprimer texte" -#~ msgid "Add junction" -#~ msgstr "Ajout jonction" -#~ msgid "Add label" -#~ msgstr "Ajout label" -#~ msgid "Add global label" -#~ msgstr "Ajout de labels globaux" -#~ msgid "Move field " -#~ msgstr "Déplace champ" -#~ msgid "Unfill zone" -#~ msgstr "Vider zone" - diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 3b8a365a9b..4a2bf62d20 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -32,6 +32,7 @@ set(PCBNEW_SRCS class_text_mod.cpp class_track.cpp class_zone.cpp + class_zone_setting.cpp clean.cpp # cleaningoptions_dialog.cpp collectors.cpp diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp index 0ac2798a5d..472a7156d9 100644 --- a/pcbnew/class_zone.cpp +++ b/pcbnew/class_zone.cpp @@ -12,7 +12,6 @@ #include "pcbnew.h" #include "trigo.h" #include "zones.h" -#include "autorout.h" /************************/ @@ -25,16 +24,10 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* parent ) : { m_NetCode = -1; // Net number for fast comparisons m_CornerSelection = -1; - m_ZoneClearance = g_DesignSettings.m_ZoneClearence; // a reasonnable clerance value - m_GridFillValue = g_GridRoutingSize; // a reasonnable grid used for filling - m_PadOption = g_Zone_Pad_Options; utility = 0; // flags used in polygon calculations utility2 = 0; // flags used in polygon calculations m_Poly = new CPolyLine(); // Outlines - m_ArcToSegmentsCount = g_Zone_Arc_Approximation; // Use 16 or 32segment to convert a circle to a polygon - m_DrawOptions = 0; - m_ThermalReliefGapValue = g_ThermalReliefGapValue; // tickness of the gap in thermal reliefs - m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; // tickness of the copper bridge in thermal reliefs + g_Zone_Default_Setting.ExportSetting(*this); } @@ -941,3 +934,21 @@ void ZONE_CONTAINER::Copy( ZONE_CONTAINER* src ) m_PadOption = src->m_PadOption; m_Poly->SetHatch( src->m_Poly->GetHatchStyle() ); } + +/** + * Function SetNetNameFromNetCode + * Fin the nat name corresponding to the net code. + * @param aPcb: the curren board + * @return bool - true if net found, else false + */ +bool ZONE_CONTAINER::SetNetNameFromNetCode( void ) +{ + EQUIPOT* net; + if ( m_Parent && (net = ((BOARD*)m_Parent)->FindNet( GetNet()) ) ) + { + m_Netname = net->m_Netname; + return true; + } + + return false; +} diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h index 808d1eb653..7fe0d62ece 100644 --- a/pcbnew/class_zone.h +++ b/pcbnew/class_zone.h @@ -9,6 +9,7 @@ #include "PolyLine.h" + /************************/ /* class ZONE_CONTAINER */ /************************/ @@ -21,19 +22,13 @@ class ZONE_CONTAINER : public BOARD_ITEM { public: - enum m_PadInZone { // How pads are covered by copper in zone - PAD_NOT_IN_ZONE, // Pads are not covered - THERMAL_PAD, // Use thermal relief for pads - PAD_IN_ZONE // pads are covered by copper - }; - wxString m_Netname; // Net Name CPolyLine* m_Poly; // outlines int m_CornerSelection; // For corner moving, corner index to drag, or -1 if no selection int m_ZoneClearance; // clearance value int m_GridFillValue; // Grid used for filling, 0 = use polygonal areas to fill int m_ArcToSegmentsCount; // number of segments to convert a cirlce to a polygon (uses 16 or 32) - m_PadInZone m_PadOption; // see m_PadInZone + int m_PadOption; // int m_ThermalReliefGapValue; // tickness of the gap in thermal reliefs int m_ThermalReliefCopperBridgeValue; // tickness of the copper bridge in thermal reliefs int utility, utility2; // flags used in polygon calculations @@ -143,6 +138,13 @@ public: void SetNet( int anet_code ); + /** + * Function SetNetNameFromNetCode + * Fin the nat name corresponding to the net code. + * @return bool - true if net found, else false + */ + bool SetNetNameFromNetCode( void); + /** * Function HitTest * tests if the given wxPoint is within the bounds of this object. @@ -286,6 +288,11 @@ public: { m_Poly->AppendCorner( position.x, position.y ); } + + int GetHatchStyle() const + { + return m_Poly->GetHatchStyle(); + } }; diff --git a/pcbnew/class_zone_setting.cpp b/pcbnew/class_zone_setting.cpp new file mode 100644 index 0000000000..d5737837cf --- /dev/null +++ b/pcbnew/class_zone_setting.cpp @@ -0,0 +1,79 @@ +/******************************************************/ +/* class ZONE_SETTING used to handle zones parameters */ +/******************************************************/ + +#ifndef WX_PRECOMP +#include "wx/wx.h" +#endif + +/* For compilers that support precompilation: + */ +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#include "fctsys.h" +#include "PolyLine.h" + +#include "common.h" +#include "pcbnew.h" +#include "zones.h" +#include "class_zone.h" + +ZONE_SETTING::ZONE_SETTING( void ) +{ + m_GridFillValue = 250; // Grid value for filling zone by segments, 0 to used polygons to fill + m_ZoneClearance = 200; // Clearance value + m_NetcodeSelection = 0; // Net code selection for the current zone + m_CurrentZone_Layer = 0; // Layer used to create the current zone + m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE; // Option to show the zone area (outlines only, short hatches or full hatches + m_ArcToSegmentsCount = 16; /* Option to select number of segments to approximate a circle + * 16 or 32 segments */ + m_FilledAreasShowMode = 0; // Used to select draw options for filled areas in a zone (currently normal =0, sketch = 1) + m_ThermalReliefGapValue = 200; // tickness of the gap in thermal reliefs + m_ThermalReliefCopperBridgeValue = 200; // tickness of the copper bridge in thermal reliefs + + m_Zone_Pad_Options = THERMAL_PAD; // How pads are covered by copper in zone +} + + +/** function ImportSetting + * copy settings from a given zone + * @param aSource: the given zone + */ +void ZONE_SETTING::ImportSetting( const ZONE_CONTAINER& aSource ) +{ + m_GridFillValue = aSource.m_GridFillValue; + m_ZoneClearance = aSource.m_ZoneClearance; + m_NetcodeSelection = aSource.GetNet(); + m_CurrentZone_Layer = aSource.GetLayer(); + m_Zone_HatchingStyle = aSource.GetHatchStyle(); + m_ArcToSegmentsCount = aSource.m_ArcToSegmentsCount; + m_FilledAreasShowMode = aSource.m_DrawOptions; + m_ThermalReliefGapValue = aSource.m_ThermalReliefGapValue; + m_ThermalReliefCopperBridgeValue = aSource.m_ThermalReliefCopperBridgeValue; + m_Zone_Pad_Options = aSource.m_PadOption; +} + + +/** function ExportSetting + * copy settings to a given zone + * @param aTarget: the given zone + * Note: parameters NOT exported (because they cannot be safely exported): + * m_NetcodeSelection + */ +void ZONE_SETTING::ExportSetting( ZONE_CONTAINER& aTarget ) +{ + aTarget.m_GridFillValue = m_GridFillValue; + aTarget.m_ZoneClearance = m_ZoneClearance; + aTarget.SetNet(m_NetcodeSelection); + aTarget.SetLayer(m_CurrentZone_Layer); + aTarget.m_Poly->SetHatch(m_Zone_HatchingStyle); + aTarget.m_ArcToSegmentsCount = m_ArcToSegmentsCount; + aTarget.m_DrawOptions = m_FilledAreasShowMode; + aTarget.m_ThermalReliefGapValue = m_ThermalReliefGapValue; + aTarget.m_ThermalReliefCopperBridgeValue = m_ThermalReliefCopperBridgeValue; + aTarget.m_PadOption = m_Zone_Pad_Options; +} diff --git a/pcbnew/class_zone_setting.h b/pcbnew/class_zone_setting.h new file mode 100644 index 0000000000..8d69962bd4 --- /dev/null +++ b/pcbnew/class_zone_setting.h @@ -0,0 +1,48 @@ +/****************************************************************/ +/* class ZONE_SETTING used to handle zones parameters in dialogs */ +/****************************************************************/ + +#ifndef ZONE_SETTING_H +#define ZONE_SETTING_H + + +#ifndef eda_global +#define eda_global extern +#endif + + +/*************************************************/ +/* Class ZONE_SETTING to handle zones parameters */ +/*************************************************/ +class ZONE_SETTING +{ +public: + int m_GridFillValue; // Grid value for filling zone by segments, 0 to used polygons to fill + int m_ZoneClearance; // Clearance value + int m_NetcodeSelection; // Net code selection for the current zone + int m_CurrentZone_Layer; // Layer used to create the current zone + int m_Zone_HatchingStyle; // Option to show the zone area (outlines only, short hatches or full hatches + int m_ArcToSegmentsCount; /* Option to select number of segments to approximate a circle + * 16 or 32 segments */ + int m_FilledAreasShowMode; // Used to select draw options for filled areas in a zone (currently normal =0, sketch = 1) + long m_ThermalReliefGapValue; // tickness of the gap in thermal reliefs + long m_ThermalReliefCopperBridgeValue; // tickness of the copper bridge in thermal reliefs + int m_Zone_Pad_Options; // How pads are covered by copper in zone +public: + ZONE_SETTING( void ); + + /** function ImportSetting + * copy settings from a given zone + * @param aSource: the given zone + */ + void ImportSetting( const ZONE_CONTAINER& aSource ); + + /** function ExportSetting + * copy settings to a given zone + * @param aTarget: the given zone + */ + void ExportSetting( ZONE_CONTAINER& aTarget ); +}; + + +#endif // ifndef ZONE_SETTING_H diff --git a/pcbnew/classpcb.cpp b/pcbnew/classpcb.cpp index 7e40f15835..801e5b20b8 100644 --- a/pcbnew/classpcb.cpp +++ b/pcbnew/classpcb.cpp @@ -157,7 +157,6 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings() m_PcbTextWidth = 100; // current Pcb (not module) Text width m_PcbTextSize = wxSize( 500, 500 ); // current Pcb (not module) Text size m_TrackClearence = 100; // track to track and track to pads clearance - m_ZoneClearence = 150; // zone to track and zone to pads clearance m_MaskMargin = 150; // Solder mask margin /* Color options for screen display of the Printed Board: */ m_PcbGridColor = DARKGRAY; // Grid color diff --git a/pcbnew/dialog_copper_zones.cpp b/pcbnew/dialog_copper_zones.cpp index e17ac8c099..c00950d9dd 100644 --- a/pcbnew/dialog_copper_zones.cpp +++ b/pcbnew/dialog_copper_zones.cpp @@ -35,27 +35,29 @@ /************************************************************************************************/ -dialog_copper_zone::dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_CONTAINER * zone_container ) - :dialog_copper_zone_frame(parent) +dialog_copper_zone::dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING* zone_setting ) : + dialog_copper_zone_frame( parent ) /************************************************************************************************/ { m_Parent = parent; - m_Zone_Container = zone_container; - m_NetSorting =1; // 0 = alphabetic sort, 1 = pad count sort + m_Zone_Setting = zone_setting; + m_NetSorting = 1; // 0 = alphabetic sort, 1 = pad count sort if( m_Parent->m_Parent->m_EDA_Config ) { m_NetSorting = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_SORT_OPTION_KEY, 1l ); } - SetReturnCode(ZONE_ABORT); // Will be changed on buttons click + SetReturnCode( ZONE_ABORT ); // Will be changed on buttons click } + /*****************************************************************/ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) /*****************************************************************/ + // Initialise all dialog options and values in wxTextCtrl { - BOARD* board = m_Parent->m_Pcb; + BOARD* board = m_Parent->m_Pcb; SetFont( *g_DialogFont ); @@ -67,11 +69,9 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) msg = _( "Grid :" ) + ReturnUnitSymbol( g_UnitMetric ); m_GridCtrl->SetLabel( msg ); - if( g_DesignSettings.m_ZoneClearence == 0 ) - g_DesignSettings.m_ZoneClearence = g_DesignSettings.m_TrackClearence; msg = ReturnStringFromValue( g_UnitMetric, - g_DesignSettings.m_ZoneClearence, - m_Parent->m_InternalUnits ); + m_Zone_Setting->m_ZoneClearance, + m_Parent->m_InternalUnits ); m_ZoneClearanceCtrl->SetValue( msg ); if( g_Zone_45_Only ) @@ -80,120 +80,89 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) static const int GridList[4] = { 25, 50, 100, 250 }; int selection = 0; - int grid_routing = g_GridRoutingSize; - - if( m_Zone_Container ) - grid_routing = m_Zone_Container->m_GridFillValue; + int grid_routing = m_Zone_Setting->m_GridFillValue; for( unsigned ii = 0; ii < 4; ii++ ) { msg = ReturnStringFromValue( g_UnitMetric, - GridList[ii], - m_Parent->m_InternalUnits ); + GridList[ii], + m_Parent->m_InternalUnits ); m_GridCtrl->SetString( ii, msg ); if( grid_routing == GridList[ii] ) selection = ii; } - if( grid_routing == 0 ) // No Grid: fill with polygons - selection = 4; + + if( grid_routing == 0 ) // No Grid: fill with polygons + selection = 4; m_GridCtrl->SetSelection( selection ); - if( m_Zone_Container ) + msg = ReturnStringFromValue( g_UnitMetric, + m_Zone_Setting->m_ZoneClearance, + m_Parent->m_InternalUnits ); + m_ZoneClearanceCtrl->SetValue( msg ); + + switch( m_Zone_Setting->m_Zone_Pad_Options ) { - msg = ReturnStringFromValue( g_UnitMetric, - m_Zone_Container->m_ZoneClearance, - m_Parent->m_InternalUnits ); - m_ZoneClearanceCtrl->SetValue( msg ); + case PAD_NOT_IN_ZONE: // Pads are not covered + m_PadInZoneOpt->SetSelection( 2 ); + break; - switch( m_Zone_Container->m_PadOption ) - { - case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered - m_PadInZoneOpt->SetSelection( 2 ); - break; - case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads - m_PadInZoneOpt->SetSelection( 1 ); - break; - case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper - m_PadInZoneOpt->SetSelection( 0 ); - break; - } - g_Zone_Hatching = m_Zone_Container->m_Poly->GetHatchStyle(); - g_Zone_Arc_Approximation = m_Zone_Container->m_ArcToSegmentsCount; - - g_FilledAreasShowMode = m_Zone_Container->m_DrawOptions; - if ( g_FilledAreasShowMode == 1) - m_ShowFilledAreasInSketchOpt->SetValue(true); + case THERMAL_PAD: // Use thermal relief for pads + m_PadInZoneOpt->SetSelection( 1 ); + break; + case PAD_IN_ZONE: // pads are covered by copper + m_PadInZoneOpt->SetSelection( 0 ); + break; + } + + if( m_Zone_Setting->m_FilledAreasShowMode == 1 ) + m_ShowFilledAreasInSketchOpt->SetValue( true ); + if( m_Zone_Setting->m_Zone_Pad_Options != THERMAL_PAD ) + { + m_AntipadSizeValue->Enable( false ); + m_CopperWidthValue->Enable( false ); } else { - switch( g_Zone_Pad_Options ) - { - case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered - m_PadInZoneOpt->SetSelection( 2 ); - break; - case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads - m_PadInZoneOpt->SetSelection( 1 ); - break; - case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper - m_PadInZoneOpt->SetSelection( 0 ); - break; - } - g_Zone_Hatching = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, - (long) CPolyLine::DIAGONAL_EDGE ); + m_AntipadSizeValue->Enable( true ); + m_CopperWidthValue->Enable( true ); } - if ( g_Zone_Pad_Options != ZONE_CONTAINER::THERMAL_PAD ) - { - m_AntipadSizeValue->Enable(false); - m_CopperWidthValue->Enable(false); - } - else - { - m_AntipadSizeValue->Enable(true); - m_CopperWidthValue->Enable(true); - } - - if( m_Zone_Container ) - { - g_ThermalReliefGapValue = m_Zone_Container->m_ThermalReliefGapValue; - g_ThermalReliefCopperBridgeValue = m_Zone_Container->m_ThermalReliefCopperBridgeValue; - } - else - { - m_Parent->m_Parent->m_EDA_Config->Read( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, &g_ThermalReliefGapValue ); - m_Parent->m_Parent->m_EDA_Config->Read( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, &g_ThermalReliefCopperBridgeValue ); - } AddUnitSymbol( *m_AntipadSizeText, g_UnitMetric ); AddUnitSymbol( *m_CopperBridgeWidthText, g_UnitMetric ); - PutValueInLocalUnits( *m_AntipadSizeValue, g_ThermalReliefGapValue, PCB_INTERNAL_UNIT ); - PutValueInLocalUnits( *m_CopperWidthValue, g_ThermalReliefCopperBridgeValue, PCB_INTERNAL_UNIT ); + PutValueInLocalUnits( *m_AntipadSizeValue, + m_Zone_Setting->m_ThermalReliefGapValue, + PCB_INTERNAL_UNIT ); + PutValueInLocalUnits( *m_CopperWidthValue, + m_Zone_Setting->m_ThermalReliefCopperBridgeValue, + PCB_INTERNAL_UNIT ); - switch( g_Zone_Hatching ) + switch( m_Zone_Setting->m_Zone_HatchingStyle ) { case CPolyLine::NO_HATCH: - m_OutlineAppearanceCtrl->SetSelection(0); + m_OutlineAppearanceCtrl->SetSelection( 0 ); break; case CPolyLine::DIAGONAL_EDGE: - m_OutlineAppearanceCtrl->SetSelection(1); + m_OutlineAppearanceCtrl->SetSelection( 1 ); break; case CPolyLine::DIAGONAL_FULL: - m_OutlineAppearanceCtrl->SetSelection(2); + m_OutlineAppearanceCtrl->SetSelection( 2 ); break; } - m_ArcApproximationOpt->SetSelection( g_Zone_Arc_Approximation == 32 ? 1 : 0 ); + m_ArcApproximationOpt->SetSelection( m_Zone_Setting->m_ArcToSegmentsCount == 32 ? 1 : 0 ); /* build copper layers list */ int layer_cnt = board->GetCopperLayerCount(); for( int ii = 0; ii < board->GetCopperLayerCount(); ii++ ) { - int layer_number = COPPER_LAYER_N; + int layer_number = COPPER_LAYER_N; if( layer_cnt <= 1 || ii < layer_cnt - 1 ) layer_number = ii; @@ -205,39 +174,32 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) msg = board->GetLayerName( layer_number ).Trim(); m_LayerSelectionCtrl->InsertItems( 1, &msg, ii ); - if( m_Zone_Container ) - { - if( m_Zone_Container->GetLayer() == layer_number ) - m_LayerSelectionCtrl->SetSelection( ii ); - } - else - { - if( ((PCB_SCREEN*)(m_Parent->GetScreen()))->m_Active_Layer == layer_number ) - m_LayerSelectionCtrl->SetSelection( ii ); - } + if( m_Zone_Setting->m_CurrentZone_Layer == layer_number ) + m_LayerSelectionCtrl->SetSelection( ii ); } - m_NetSortingOption->SetSelection(m_NetSorting); + m_NetSortingOption->SetSelection( m_NetSorting ); - wxString NetNameFilter; + wxString NetNameFilter; if( m_Parent->m_Parent->m_EDA_Config ) { - NetNameFilter = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT("N_0*") ); + NetNameFilter = + m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT( "N_0*" ) ); } - m_NetNameFilter->SetValue(NetNameFilter); + m_NetNameFilter->SetValue( NetNameFilter ); wxArrayString ListNetName; m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName, m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT ); - if ( m_NetSorting != 0 ) + if( m_NetSorting != 0 ) { - wxString Filter = m_NetNameFilter->GetValue(); + wxString Filter = m_NetNameFilter->GetValue(); for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ ) { - if( ListNetName[ii].Matches(Filter.GetData() ) ) + if( ListNetName[ii].Matches( Filter.GetData() ) ) { - ListNetName. RemoveAt(ii); + ListNetName.RemoveAt( ii ); ii--; } } @@ -246,9 +208,7 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) m_ListNetNameSelection->InsertItems( ListNetName, 0 ); // Select net: - int net_select = g_HightLigth_NetCode; - if( m_Zone_Container ) - net_select = m_Zone_Container->GetNet(); + int net_select = m_Zone_Setting->m_NetcodeSelection; if( net_select > 0 ) { @@ -266,9 +226,9 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) } } } - if (GetSizer()) + if( GetSizer() ) { - GetSizer()->SetSizeHints(this); + GetSizer()->SetSizeHints( this ); } Center(); } @@ -283,8 +243,9 @@ void dialog_copper_zone::OnButtonCancelClick( wxCommandEvent& event ) /********************************************************************************************/ -bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportableSetupOnly) +bool dialog_copper_zone::AcceptOptions( bool aPromptForErrors, bool aUseExportableSetupOnly ) /********************************************************************************************/ + /** Function dialog_copper_zone::AcceptOptions( * @return false if incorrect options, true if Ok. * @param aPromptForErrors = true to prompt user on incorrectparams @@ -294,84 +255,90 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl switch( m_PadInZoneOpt->GetSelection() ) { case 2: - g_Zone_Pad_Options = ZONE_CONTAINER::PAD_NOT_IN_ZONE; // Pads are not covered + m_Zone_Setting->m_Zone_Pad_Options = PAD_NOT_IN_ZONE; // Pads are not covered break; case 1: - g_Zone_Pad_Options = ZONE_CONTAINER::THERMAL_PAD; // Use thermal relief for pads + m_Zone_Setting->m_Zone_Pad_Options = THERMAL_PAD; // Use thermal relief for pads break; case 0: - g_Zone_Pad_Options = ZONE_CONTAINER::PAD_IN_ZONE; // pads are covered by copper + m_Zone_Setting->m_Zone_Pad_Options = PAD_IN_ZONE; // pads are covered by copper break; } - switch( m_OutlineAppearanceCtrl->GetSelection() ) + switch( m_OutlineAppearanceCtrl->GetSelection() ) { case 0: - g_Zone_Hatching = CPolyLine::NO_HATCH; + m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::NO_HATCH; break; case 1: - g_Zone_Hatching = CPolyLine::DIAGONAL_EDGE; + m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE; break; case 2: - g_Zone_Hatching = CPolyLine::DIAGONAL_FULL; + m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::DIAGONAL_FULL; break; } - g_Zone_Arc_Approximation = m_ArcApproximationOpt->GetSelection() == 1 ? 32 : 16; + m_Zone_Setting->m_ArcToSegmentsCount = m_ArcApproximationOpt->GetSelection() == 1 ? 32 : 16; if( m_Parent->m_Parent->m_EDA_Config ) { - m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long)g_Zone_Hatching); + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, + (long) m_Zone_Setting->m_Zone_HatchingStyle ); } switch( m_GridCtrl->GetSelection() ) { case 0: - g_GridRoutingSize = 25; + m_Zone_Setting->m_GridFillValue = 25; break; case 1: - g_GridRoutingSize = 50; + m_Zone_Setting->m_GridFillValue = 50; break; default: case 2: - g_GridRoutingSize = 100; + m_Zone_Setting->m_GridFillValue = 100; break; case 3: - g_GridRoutingSize = 250; + m_Zone_Setting->m_GridFillValue = 250; break; case 4: - g_GridRoutingSize = 0; + m_Zone_Setting->m_GridFillValue = 0; DisplayInfo( this, wxT( -"You are using No grid for filling zones\nThis is currently in development and for tests only.\n Do not use for production")); + "You are using No grid for filling zones\nThis is currently in development and for tests only.\n Do not use for production" ) ); break; } wxString txtvalue = m_ZoneClearanceCtrl->GetValue(); - g_DesignSettings.m_ZoneClearence = + m_Zone_Setting->m_ZoneClearance = ReturnValueFromString( g_UnitMetric, txtvalue, m_Parent->m_InternalUnits ); if( m_OrientEdgesOpt->GetSelection() == 0 ) g_Zone_45_Only = FALSE; else g_Zone_45_Only = TRUE; - g_FilledAreasShowMode = m_ShowFilledAreasInSketchOpt->IsChecked() ? 1 : 0; + m_Zone_Setting->m_FilledAreasShowMode = m_ShowFilledAreasInSketchOpt->IsChecked() ? 1 : 0; - g_ThermalReliefGapValue = ReturnValueFromTextCtrl( *m_AntipadSizeValue, PCB_INTERNAL_UNIT ); - g_ThermalReliefCopperBridgeValue = ReturnValueFromTextCtrl( *m_CopperWidthValue, PCB_INTERNAL_UNIT ); + m_Zone_Setting->m_ThermalReliefGapValue = ReturnValueFromTextCtrl( *m_AntipadSizeValue, + PCB_INTERNAL_UNIT ); + m_Zone_Setting->m_ThermalReliefCopperBridgeValue = ReturnValueFromTextCtrl( + *m_CopperWidthValue, + PCB_INTERNAL_UNIT ); - m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, (long) g_ThermalReliefGapValue ); - m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, (long)g_ThermalReliefCopperBridgeValue ); + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, + (long) m_Zone_Setting->m_ThermalReliefGapValue ); + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, + (long) m_Zone_Setting->m_ThermalReliefCopperBridgeValue ); // If we use only exportable to others zones parameters, exit here: - if ( aUseExportableSetupOnly ) + if( aUseExportableSetupOnly ) return true; /* Get the layer selection for this zone */ @@ -383,7 +350,7 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl } - g_CurrentZone_Layer = m_LayerId[ii]; + m_Zone_Setting->m_CurrentZone_Layer = m_LayerId[ii]; /* Get the net name selection for this zone */ @@ -398,12 +365,12 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl /* Search net_code for this net */ EQUIPOT* net; - g_NetcodeSelection = 0; + g_Zone_Default_Setting.m_NetcodeSelection = 0; for( net = m_Parent->m_Pcb->m_Equipots; net; net = net->Next() ) { if( net->m_Netname == net_name ) { - g_NetcodeSelection = net->GetNet(); + g_Zone_Default_Setting.m_NetcodeSelection = net->GetNet(); break; } } @@ -411,22 +378,24 @@ bool dialog_copper_zone::AcceptOptions(bool aPromptForErrors, bool aUseExportabl return true; } + /***************************************************************************/ void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event ) /***************************************************************************/ { wxArrayString ListNetName; + m_NetSorting = m_NetSortingOption->GetSelection(); m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName, m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT ); - if ( m_NetSorting != 0 ) + if( m_NetSorting != 0 ) { - wxString Filter = m_NetNameFilter->GetValue(); - for (unsigned ii = 0; ii < ListNetName.GetCount(); ii ++ ) + wxString Filter = m_NetNameFilter->GetValue(); + for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ ) { - if ( ListNetName[ii].Matches(Filter.GetData() ) ) + if( ListNetName[ii].Matches( Filter.GetData() ) ) { - ListNetName. RemoveAt(ii); + ListNetName.RemoveAt( ii ); ii--; } } @@ -436,14 +405,12 @@ void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event ) if( m_Parent->m_Parent->m_EDA_Config ) { m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting ); - m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY, m_NetNameFilter->GetValue() ); + m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY, + m_NetNameFilter->GetValue() ); } // Select and isplay current zone net name in listbox: - int net_select = g_HightLigth_NetCode; - if( m_Zone_Container ) - net_select = m_Zone_Container->GetNet(); - + int net_select = m_Zone_Setting->m_NetcodeSelection; if( net_select > 0 ) { EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select ); @@ -460,7 +427,6 @@ void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event ) } } } - } @@ -468,40 +434,25 @@ void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event ) void dialog_copper_zone::OnButtonOkClick( wxCommandEvent& event ) /*****************************************************************/ { - if ( AcceptOptions(true) ) + if( AcceptOptions( true ) ) EndModal( ZONE_OK ); } -/****************************************************************************/ -void dialog_copper_zone::OnRemoveFillZoneButtonClick( wxCommandEvent& event ) -/****************************************************************************/ -{ - m_Parent->Delete_Zone_Fill( NULL, NULL, m_Zone_Container->m_TimeStamp ); - m_Zone_Container->m_FilledPolysList.clear(); - m_Parent->DrawPanel->Refresh(); -} /******************************************************************************/ void dialog_copper_zone::ExportSetupToOtherCopperZones( wxCommandEvent& event ) /******************************************************************************/ { - if ( !AcceptOptions(true, true) ) + if( !AcceptOptions( true, true ) ) return; // Export to others zones: - BOARD * pcb = m_Parent->m_Pcb; + BOARD* pcb = m_Parent->m_Pcb; for( int ii = 0; ii < pcb->GetAreaCount(); ii++ ) { - ZONE_CONTAINER* zone = pcb->GetArea(ii); - zone->m_Poly->SetHatch( g_Zone_Hatching ); - zone->m_PadOption = g_Zone_Pad_Options; - zone->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; - zone->m_GridFillValue = g_GridRoutingSize; - zone->m_ArcToSegmentsCount = g_Zone_Arc_Approximation; - zone->m_DrawOptions = g_FilledAreasShowMode; - zone->m_ThermalReliefGapValue = g_ThermalReliefGapValue; - zone->m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; - m_Parent->GetScreen()->SetModify();; + ZONE_CONTAINER* zone = pcb->GetArea( ii ); + m_Zone_Setting->ExportSetting( *zone ); + m_Parent->GetScreen()->SetModify(); } } @@ -510,17 +461,16 @@ void dialog_copper_zone::ExportSetupToOtherCopperZones( wxCommandEvent& event ) void dialog_copper_zone::OnPadsInZoneClick( wxCommandEvent& event ) /******************************************************************/ { - switch ( m_PadInZoneOpt->GetSelection() ) + switch( m_PadInZoneOpt->GetSelection() ) { - default: - m_AntipadSizeValue->Enable(false); - m_CopperWidthValue->Enable(false); - break; - - case 1: - m_AntipadSizeValue->Enable(true); - m_CopperWidthValue->Enable(true); - break; + default: + m_AntipadSizeValue->Enable( false ); + m_CopperWidthValue->Enable( false ); + break; + case 1: + m_AntipadSizeValue->Enable( true ); + m_CopperWidthValue->Enable( true ); + break; } } diff --git a/pcbnew/dialog_copper_zones.h b/pcbnew/dialog_copper_zones.h index 8c6198ce8c..412d8267cc 100644 --- a/pcbnew/dialog_copper_zones.h +++ b/pcbnew/dialog_copper_zones.h @@ -11,17 +11,16 @@ class dialog_copper_zone: public dialog_copper_zone_frame { public: WinEDA_PcbFrame* m_Parent; - ZONE_CONTAINER * m_Zone_Container; + ZONE_SETTING * m_Zone_Setting; long m_NetSorting; int m_LayerId[LAYER_COUNT]; // Handle the real layer number from layer name position in m_LayerSelectionCtrl public: - dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_CONTAINER * zone_container); + dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING * zone_setting); void OnInitDialog( wxInitDialogEvent& event ); void OnButtonOkClick( wxCommandEvent& event ); void OnButtonCancelClick( wxCommandEvent& event ); bool AcceptOptions(bool aPromptForErrors, bool aUseExportableSetupOnly = false); - void OnRemoveFillZoneButtonClick( wxCommandEvent& event ); void OnNetSortingOptionSelected( wxCommandEvent& event ); void ExportSetupToOtherCopperZones( wxCommandEvent& event ); void OnPadsInZoneClick( wxCommandEvent& event ); diff --git a/pcbnew/dialog_copper_zones_frame.cpp b/pcbnew/dialog_copper_zones_frame.cpp index 814f0c8069..65332f31cd 100644 --- a/pcbnew/dialog_copper_zones_frame.cpp +++ b/pcbnew/dialog_copper_zones_frame.cpp @@ -15,7 +15,6 @@ BEGIN_EVENT_TABLE( dialog_copper_zone_frame, wxDialog ) EVT_BUTTON( wxID_BUTTON_EXPORT, dialog_copper_zone_frame::_wxFB_ExportSetupToOtherCopperZones ) EVT_BUTTON( wxID_OK, dialog_copper_zone_frame::_wxFB_OnButtonOkClick ) EVT_BUTTON( wxID_CANCEL, dialog_copper_zone_frame::_wxFB_OnButtonCancelClick ) - EVT_BUTTON( wxID_BUTTON_UNFILL, dialog_copper_zone_frame::_wxFB_OnRemoveFillZoneButtonClick ) EVT_RADIOBOX( ID_NET_SORTING_OPTION, dialog_copper_zone_frame::_wxFB_OnNetSortingOptionSelected ) END_EVENT_TABLE() @@ -155,9 +154,6 @@ dialog_copper_zone_frame::dialog_copper_zone_frame( wxWindow* parent, wxWindowID m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); m_RightBoxSizer->Add( m_ButtonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_UnFillZoneButton = new wxButton( this, wxID_BUTTON_UNFILL, _("Remove Filling"), wxDefaultPosition, wxDefaultSize, 0 ); - m_RightBoxSizer->Add( m_UnFillZoneButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_RightBoxSizer->Add( 5, 20, 0, wxEXPAND, 5 ); diff --git a/pcbnew/dialog_copper_zones_frame.fbp b/pcbnew/dialog_copper_zones_frame.fbp index 49507e5fd5..a7be083d76 100644 --- a/pcbnew/dialog_copper_zones_frame.fbp +++ b/pcbnew/dialog_copper_zones_frame.fbp @@ -1012,58 +1012,6 @@ - - 5 - wxALL|wxALIGN_CENTER_HORIZONTAL - 0 - - - - 0 - 1 - - - 0 - wxID_BUTTON_UNFILL - Remove Filling - - - m_UnFillZoneButton - protected - - - - - - - - - OnRemoveFillZoneButtonClick - - - - - - - - - - - - - - - - - - - - - - - - - 5 wxEXPAND diff --git a/pcbnew/dialog_copper_zones_frame.h b/pcbnew/dialog_copper_zones_frame.h index d90eea83d5..8822018d0e 100644 --- a/pcbnew/dialog_copper_zones_frame.h +++ b/pcbnew/dialog_copper_zones_frame.h @@ -41,7 +41,6 @@ class dialog_copper_zone_frame : public wxDialog void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); } void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); } void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); } - void _wxFB_OnRemoveFillZoneButtonClick( wxCommandEvent& event ){ OnRemoveFillZoneButtonClick( event ); } void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); } @@ -55,7 +54,6 @@ class dialog_copper_zone_frame : public wxDialog ID_RADIOBOX_OUTLINES_OPTION, wxID_ARC_APPROX, wxID_BUTTON_EXPORT, - wxID_BUTTON_UNFILL, ID_NET_SORTING_OPTION, ID_TEXTCTRL_NETNAMES_FILTER, ID_NETNAME_SELECTION, @@ -79,7 +77,6 @@ class dialog_copper_zone_frame : public wxDialog wxButton* m_OkButton; wxButton* m_ButtonCancel; - wxButton* m_UnFillZoneButton; wxRadioBox* m_NetSortingOption; wxStaticText* m_staticText5; @@ -95,7 +92,6 @@ class dialog_copper_zone_frame : public wxDialog virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ){ event.Skip(); } virtual void OnButtonOkClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnButtonCancelClick( wxCommandEvent& event ){ event.Skip(); } - virtual void OnRemoveFillZoneButtonClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnNetSortingOptionSelected( wxCommandEvent& event ){ event.Skip(); } diff --git a/pcbnew/ioascii.cpp b/pcbnew/ioascii.cpp index 12ee364e28..3e1a0edfa3 100644 --- a/pcbnew/ioascii.cpp +++ b/pcbnew/ioascii.cpp @@ -352,7 +352,7 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum ) if( stricmp( Line, "ZoneClearence" ) == 0 ) { - g_DesignSettings.m_ZoneClearence = atoi( data ); + g_Zone_Default_Setting.m_ZoneClearance = atoi( data ); continue; } @@ -543,7 +543,7 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame, BOARD* aBoard ) } fprintf( aFile, "TrackClearence %d\n", g_DesignSettings.m_TrackClearence ); - fprintf( aFile, "ZoneClearence %d\n", g_DesignSettings.m_ZoneClearence ); + fprintf( aFile, "ZoneClearence %d\n", g_Zone_Default_Setting.m_ZoneClearance ); fprintf( aFile, "DrawSegmWidth %d\n", g_DesignSettings.m_DrawSegmentWidth ); fprintf( aFile, "EdgeSegmWidth %d\n", g_DesignSettings.m_EdgeSegmentWidth ); diff --git a/pcbnew/makefile.include b/pcbnew/makefile.include index b91cfbf57a..ac87625ffa 100644 --- a/pcbnew/makefile.include +++ b/pcbnew/makefile.include @@ -57,6 +57,7 @@ OBJECTS= $(TARGET).o classpcb.o\ class_drc_item.o\ class_board.o\ class_zone.o\ + class_zone_setting.o\ drawframe.o\ drawpanel.o\ track.o \ diff --git a/pcbnew/zone_filling_algorithm.cpp b/pcbnew/zone_filling_algorithm.cpp index ad6e5c0d20..f9c6be1d7c 100644 --- a/pcbnew/zone_filling_algorithm.cpp +++ b/pcbnew/zone_filling_algorithm.cpp @@ -47,7 +47,7 @@ int ZONE_CONTAINER::Fill_Zone( WinEDA_PcbFrame* frame, wxDC* DC, bool verbose ) g_GridRoutingSize = 25; // Set the g_DesignSettings.m_TrackClearence (used to fill board map) to the max of m_TrackClearence and m_ZoneClearence - g_DesignSettings.m_TrackClearence = max ( g_DesignSettings.m_TrackClearence, g_DesignSettings.m_ZoneClearence); + g_DesignSettings.m_TrackClearence = max ( g_DesignSettings.m_TrackClearence, m_ZoneClearance); // In order to avoid ends of segments used to fill the zone, and to the clearence the radius of ends // which is g_GridRoutingSize/2 diff --git a/pcbnew/zones.h b/pcbnew/zones.h index eaf2a52c15..ec8a48a1a6 100644 --- a/pcbnew/zones.h +++ b/pcbnew/zones.h @@ -10,12 +10,14 @@ #define eda_global extern #endif +#include "class_zone_setting.h" + // keys used to store net sort option in config file : -#define ZONE_NET_OUTLINES_HATCH_OPTION_KEY wxT( "Zone_Ouline_Hatch_Opt" ) -#define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" ) -#define ZONE_NET_FILTER_STRING_KEY wxT( "Zone_Filter_Opt" ) -#define ZONE_THERMAL_RELIEF_GAP_STRING_KEY wxT( "Zone_TH_Gap" ) +#define ZONE_NET_OUTLINES_HATCH_OPTION_KEY wxT( "Zone_Ouline_Hatch_Opt" ) +#define ZONE_NET_SORT_OPTION_KEY wxT( "Zone_NetSort_Opt" ) +#define ZONE_NET_FILTER_STRING_KEY wxT( "Zone_Filter_Opt" ) +#define ZONE_THERMAL_RELIEF_GAP_STRING_KEY wxT( "Zone_TH_Gap" ) #define ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY wxT( "Zone_TH_Copper_Width" ) enum zone_cmd { @@ -24,44 +26,29 @@ enum zone_cmd { }; +enum { // How pads are covered by copper in zone + PAD_NOT_IN_ZONE, // Pads are not covered + THERMAL_PAD, // Use thermal relief for pads + PAD_IN_ZONE // pads are covered by copper +}; + + /************************************************/ /* variables used in zone dialogs and functions */ /************************************************/ -/* parametre grid size for automatic routing and zone filling */ +/* parametre grid size for automatic routing */ #if defined MAIN -int g_GridRoutingSize = 250; +int g_GridRoutingSize = 250; #else -extern int g_GridRoutingSize; +extern int g_GridRoutingSize; #endif -// @todo: make a class like ZONE_GENERAL_SETTING instead of many global variables eda_global bool g_Zone_45_Only #ifdef MAIN = FALSE #endif ; -eda_global int g_NetcodeSelection; // Net code selection for the current zone -eda_global int g_CurrentZone_Layer; // Layer used to create the current zone -eda_global int g_Zone_Hatching; // Option to show the zone area (outlines only, short hatches or full hatches -eda_global int g_Zone_Arc_Approximation; // Option to select number of segments to approximate a circle - // 16 or 32 segments -eda_global int g_FilledAreasShowMode; // Used to select draw options for filled areas in a zone (currently normal =0, sketch = 1) -eda_global long g_ThermalReliefGapValue // tickness of the gap in thermal reliefs -#ifdef MAIN -= 200 -#endif -; -eda_global long g_ThermalReliefCopperBridgeValue // tickness of the copper bridge in thermal reliefs -#ifdef MAIN -= 200 -#endif -; - -eda_global ZONE_CONTAINER::m_PadInZone g_Zone_Pad_Options -#ifdef MAIN -= ZONE_CONTAINER::THERMAL_PAD -#endif -; +eda_global ZONE_SETTING g_Zone_Default_Setting; // Default setting used when creating a new zone #endif // ifndef ZONES_H diff --git a/pcbnew/zones_by_polygon.cpp b/pcbnew/zones_by_polygon.cpp index 573bac1ffb..e89010eeb0 100644 --- a/pcbnew/zones_by_polygon.cpp +++ b/pcbnew/zones_by_polygon.cpp @@ -19,18 +19,15 @@ using namespace std; #include "fctsys.h" -#include "gr_basic.h" #include "common.h" #include "pcbnew.h" -#include "autorout.h" +#include "zones.h" #include "id.h" #include "protos.h" -#include "zones.h" - bool verbose = false; // false if zone outline diags must not be shown // Outline creation: @@ -70,12 +67,7 @@ void WinEDA_PcbFrame::Add_Similar_Zone( wxDC* DC, ZONE_CONTAINER* zone_container s_CurrentZone = zone_container; /* set zones setup to the current zone */ - g_Zone_Hatching = zone_container->m_Poly->GetHatchStyle(); - g_Zone_Arc_Approximation = zone_container->m_ArcToSegmentsCount; - g_ThermalReliefGapValue = zone_container->m_ThermalReliefGapValue; - g_ThermalReliefCopperBridgeValue = zone_container->m_ThermalReliefCopperBridgeValue; - g_GridRoutingSize = zone_container->m_GridFillValue; - g_Zone_Pad_Options = zone_container->m_PadOption; + g_Zone_Default_Setting.ImportSetting( *zone_container ); // Use the general event handle to set others params (like toolbar) */ wxCommandEvent evt; @@ -101,12 +93,7 @@ void WinEDA_PcbFrame::Add_Zone_Cutout( wxDC* DC, ZONE_CONTAINER* zone_container s_CurrentZone = zone_container; /* set zones setup to the current zone */ - g_Zone_Hatching = zone_container->m_Poly->GetHatchStyle(); - g_Zone_Arc_Approximation = zone_container->m_ArcToSegmentsCount; - g_ThermalReliefGapValue = zone_container->m_ThermalReliefGapValue; - g_ThermalReliefCopperBridgeValue = zone_container->m_ThermalReliefCopperBridgeValue; - g_GridRoutingSize = zone_container->m_GridFillValue; - g_Zone_Pad_Options = zone_container->m_PadOption; + g_Zone_Default_Setting.ImportSetting( *zone_container ); // Use the general event handle to set others params (like toolbar) */ wxCommandEvent evt; @@ -243,7 +230,7 @@ void WinEDA_PcbFrame::Start_Move_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_con Hight_Light( DC ); // Remove old hightlight selection } - g_HightLigth_NetCode = g_NetcodeSelection = zone_container->GetNet(); + g_HightLigth_NetCode = g_Zone_Default_Setting.m_NetcodeSelection = zone_container->GetNet(); if( DC ) Hight_Light( DC ); } @@ -296,7 +283,7 @@ void WinEDA_PcbFrame::Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_c Hight_Light( DC ); // Remove old hightlight selection } - g_HightLigth_NetCode = g_NetcodeSelection = zone_container->GetNet(); + g_HightLigth_NetCode = g_Zone_Default_Setting.m_NetcodeSelection = zone_container->GetNet(); Hight_Light( DC ); } @@ -542,21 +529,24 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) { // Put a zone on a copper layer if ( g_HightLigth_NetCode ) { - g_NetcodeSelection = g_HightLigth_NetCode; - zone->SetNet( g_NetcodeSelection ); - EQUIPOT* net = m_Pcb->FindNet( g_NetcodeSelection ); - if( net ) - zone->m_Netname = net->m_Netname; + g_Zone_Default_Setting.m_NetcodeSelection = g_HightLigth_NetCode; + zone->SetNet( g_Zone_Default_Setting.m_NetcodeSelection ); + zone->SetNetNameFromNetCode( ); } - dialog_copper_zone* frame = new dialog_copper_zone( this, zone ); + m_Parent->m_EDA_Config->Read( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, + &g_Zone_Default_Setting.m_ThermalReliefGapValue ); + m_Parent->m_EDA_Config->Read( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, + &g_Zone_Default_Setting.m_ThermalReliefCopperBridgeValue ); + + dialog_copper_zone* frame = new dialog_copper_zone( this, &g_Zone_Default_Setting ); diag = frame->ShowModal(); frame->Destroy(); } else // Put a zone on a non copper layer (technical layer) { diag = InstallDialogNonCopperZonesEditor( this, zone ); - g_NetcodeSelection = 0; // No net for non copper zones + g_Zone_Default_Setting.m_NetcodeSelection = 0; // No net for non copper zones } DrawPanel->MouseToCursorSchema(); DrawPanel->m_IgnoreMouseEvents = FALSE; @@ -564,26 +554,27 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) if( diag == ZONE_ABORT ) return 0; - ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_CurrentZone_Layer; // Set by the dialog frame + // Switch active layer to the selectec zonz layer + ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_Zone_Default_Setting.m_CurrentZone_Layer; } else // Start a new contour: init zone params (net and layer) from an existing zone (add cutout or similar zone) { - ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_CurrentZone_Layer = + ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_Zone_Default_Setting.m_CurrentZone_Layer = s_CurrentZone->GetLayer(); - g_Zone_Hatching = s_CurrentZone->m_Poly->GetHatchStyle(); + g_Zone_Default_Setting.ImportSetting( * s_CurrentZone); } /* Show the Net for zones on copper layers */ - if( g_CurrentZone_Layer < FIRST_NO_COPPER_LAYER ) + if( g_Zone_Default_Setting.m_CurrentZone_Layer < FIRST_NO_COPPER_LAYER ) { if( s_CurrentZone ) - g_NetcodeSelection = s_CurrentZone->GetNet(); + g_Zone_Default_Setting.m_NetcodeSelection = s_CurrentZone->GetNet(); if( g_HightLigt_Status ) { Hight_Light( DC ); // Remove old hightlight selection } - g_HightLigth_NetCode = g_NetcodeSelection; + g_HightLigth_NetCode = g_Zone_Default_Setting.m_NetcodeSelection; Hight_Light( DC ); } if( !s_AddCutoutToCurrentZone ) @@ -594,17 +585,11 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC ) if( zone->GetNumCorners() == 0 ) { zone->m_Flags = IS_NEW; - zone->SetLayer( g_CurrentZone_Layer ); - zone->SetNet( g_NetcodeSelection ); zone->m_TimeStamp = GetTimeStamp(); - zone->m_PadOption = g_Zone_Pad_Options; - zone->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; - zone->m_ThermalReliefGapValue = g_ThermalReliefGapValue; - zone->m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; - zone->m_GridFillValue = g_GridRoutingSize; - zone->m_Poly->Start( g_CurrentZone_Layer, + g_Zone_Default_Setting.ExportSetting( *zone ); + zone->m_Poly->Start( g_Zone_Default_Setting.m_CurrentZone_Layer, GetScreen()->m_Curseur.x, GetScreen()->m_Curseur.y, - g_Zone_Hatching ); + zone->GetHatchStyle() ); zone->AppendCorner( GetScreen()->m_Curseur ); if( Drc_On && (m_drc->Drc( zone, 0 ) == BAD_DRC) && zone->IsOnCopperLayer() ) { @@ -792,7 +777,8 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container DrawPanel->m_IgnoreMouseEvents = TRUE; if( zone_container->GetLayer() < FIRST_NO_COPPER_LAYER ) { // edit a zone on a copper layer - dialog_copper_zone* frame = new dialog_copper_zone( this, zone_container ); + g_Zone_Default_Setting.ImportSetting(*zone_container); + dialog_copper_zone* frame = new dialog_copper_zone( this, &g_Zone_Default_Setting ); diag = frame->ShowModal(); frame->Destroy(); } @@ -812,19 +798,10 @@ void WinEDA_PcbFrame::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container edge_zone->Draw( DrawPanel, DC, GR_XOR ); } - zone_container->SetLayer( g_CurrentZone_Layer ); - zone_container->SetNet( g_NetcodeSelection ); - EQUIPOT* net = m_Pcb->FindNet( g_NetcodeSelection ); - if( net ) + g_Zone_Default_Setting.ExportSetting( *zone_container); + EQUIPOT* net = m_Pcb->FindNet( g_Zone_Default_Setting.m_NetcodeSelection ); + if( net ) // net === NULL should not occur zone_container->m_Netname = net->m_Netname; - zone_container->m_Poly->SetHatch( g_Zone_Hatching ); - zone_container->m_PadOption = g_Zone_Pad_Options; - zone_container->m_ZoneClearance = g_DesignSettings.m_ZoneClearence; - zone_container->m_GridFillValue = g_GridRoutingSize; - zone_container->m_ArcToSegmentsCount = g_Zone_Arc_Approximation; - zone_container->m_DrawOptions = g_FilledAreasShowMode; - zone_container->m_ThermalReliefGapValue = g_ThermalReliefGapValue; - zone_container->m_ThermalReliefCopperBridgeValue = g_ThermalReliefCopperBridgeValue; // Combine zones if possible : @@ -897,13 +874,13 @@ int WinEDA_PcbFrame::Fill_Zone( wxDC* DC, ZONE_CONTAINER* zone_container, bool v } /* Show the Net */ - g_NetcodeSelection = zone_container->GetNet(); - if( g_HightLigt_Status && (g_HightLigth_NetCode != g_NetcodeSelection) && DC ) + g_Zone_Default_Setting.m_NetcodeSelection = zone_container->GetNet(); + if( g_HightLigt_Status && (g_HightLigth_NetCode != g_Zone_Default_Setting.m_NetcodeSelection) && DC ) { Hight_Light( DC ); // Remove old hightlight selection } - g_HightLigth_NetCode = g_NetcodeSelection; + g_HightLigth_NetCode = g_Zone_Default_Setting.m_NetcodeSelection; if( DC ) Hight_Light( DC ); @@ -988,7 +965,7 @@ int WinEDA_PcbFrame::Fill_All_Zones( wxDC* DC, bool verbose ) /** * Function SetAreasNetCodesFromNetNames * Set the .m_NetCode member of all copper areas, according to the area Net Name - * The SetNetCodesFromNetNames is an equivalent to net name, for fas comparisons. + * The SetNetCodesFromNetNames is an equivalent to net name, for fast comparisons. * However the Netcode is an arbitrary equivalence, it must be set after each netlist read * or net change * Must be called after pad netcodes are calculated diff --git a/pcbnew/zones_non_copper_type_functions.cpp b/pcbnew/zones_non_copper_type_functions.cpp index 4226ae5eee..554bfe1e20 100644 --- a/pcbnew/zones_non_copper_type_functions.cpp +++ b/pcbnew/zones_non_copper_type_functions.cpp @@ -74,7 +74,7 @@ void DialogNonCopperZonesEditor::InitDialog( wxInitDialogEvent& event ) if( g_Zone_45_Only ) m_OrientEdgesOpt->SetSelection( 1 ); - switch( g_Zone_Hatching ) + switch( g_Zone_Default_Setting.m_Zone_HatchingStyle ) { case CPolyLine::NO_HATCH: m_OutlineAppearanceCtrl->SetSelection( 0 ); @@ -122,22 +122,22 @@ void DialogNonCopperZonesEditor::OnOkClick( wxCommandEvent& event ) switch( m_OutlineAppearanceCtrl->GetSelection() ) { case 0: - g_Zone_Hatching = CPolyLine::NO_HATCH; + g_Zone_Default_Setting.m_Zone_HatchingStyle = CPolyLine::NO_HATCH; break; case 1: - g_Zone_Hatching = CPolyLine::DIAGONAL_EDGE; + g_Zone_Default_Setting.m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE; break; case 2: - g_Zone_Hatching = CPolyLine::DIAGONAL_FULL; + g_Zone_Default_Setting.m_Zone_HatchingStyle = CPolyLine::DIAGONAL_FULL; break; } if( m_Parent->m_Parent->m_EDA_Config ) { m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, - (long) g_Zone_Hatching ); + (long) g_Zone_Default_Setting.m_Zone_HatchingStyle ); } if( m_OrientEdgesOpt->GetSelection() == 0 ) @@ -152,7 +152,7 @@ void DialogNonCopperZonesEditor::OnOkClick( wxCommandEvent& event ) DisplayError( this, _( "Error : you must choose a layer" ) ); return; } - g_CurrentZone_Layer = ii + FIRST_NO_COPPER_LAYER; + g_Zone_Default_Setting.m_CurrentZone_Layer = ii + FIRST_NO_COPPER_LAYER; EndModal( ZONE_OK ); } @@ -209,11 +209,11 @@ int ZONE_CONTAINER::BuildFilledPolysListData( BOARD * aPcb ) } m_Poly->FreeKboolEngine(); - + /* For copper layers, we now must add holes in the Polygon list. holes are pads and tracks with their clearance area */ - + if ( IsOnCopperLayer() ) AddClearanceAreasPolygonsToPolysList( aPcb ); diff --git a/pcbnew/zones_test_and_combine_areas.cpp b/pcbnew/zones_test_and_combine_areas.cpp index 77ad12936b..b61d93be78 100644 --- a/pcbnew/zones_test_and_combine_areas.cpp +++ b/pcbnew/zones_test_and_combine_areas.cpp @@ -1059,6 +1059,7 @@ bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex ) for( int ia2 = 0; ia2 < m_pcb->GetAreaCount(); ia2++ ) { ZONE_CONTAINER* Area_To_Test = m_pcb->GetArea( ia2 ); + int zone_clearance = max(Area_To_Test->m_ZoneClearance, aArea->m_ZoneClearance); // test for same layer if( Area_To_Test->GetLayer() != aArea->GetLayer() ) @@ -1111,9 +1112,9 @@ bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex ) 0, ax1, ay1, ax2, ay2, astyle, 0, - g_DesignSettings.m_ZoneClearence, + zone_clearance, &x, &y ); - if( d < g_DesignSettings.m_ZoneClearence ) + if( d < zone_clearance ) { // COPPERAREA_COPPERAREA error : edge intersect or too close m_currentMarker = fillMarker( aArea, wxPoint( x, y ),