From 346914c9e3f4b1fb7e4517d8111d7720e44a046f Mon Sep 17 00:00:00 2001 From: charras Date: Sat, 22 Nov 2008 11:10:40 +0000 Subject: [PATCH] Some cleanup and libraries update --- change_log.txt | 5 + eeschema/classes_body_items.cpp | 4 +- eeschema/menubar.cpp | 6 +- eeschema/tool_sch.cpp | 18 +- internat/fr/kicad.mo | Bin 164095 -> 164455 bytes internat/fr/kicad.po | 1120 +++++++------- pcbnew/CMakeLists.txt | 4 +- pcbnew/dialog_copper_zones.cpp | 63 +- pcbnew/dialog_copper_zones.h | 1 + pcbnew/dialog_module_edit.rc | 1 - pcbnew/dialog_pad_edit.cpp | 409 ----- pcbnew/dialog_pad_edit.h | 178 --- pcbnew/dialog_pad_edit.pjd | 2061 ------------------------- pcbnew/dialog_pad_edit.rc | 1 - pcbnew/dialog_pad_properties.cpp | 585 +++++++ pcbnew/dialog_pad_properties_base.cpp | 190 +++ pcbnew/dialog_pad_properties_base.fbp | 1504 ++++++++++++++++++ pcbnew/dialog_pad_properties_base.h | 95 ++ pcbnew/editpads.cpp | 550 ------- pcbnew/makefile.include | 5 +- pcbnew/pcbcfg.h | 20 +- template/kicad.pro | 5 +- 22 files changed, 3022 insertions(+), 3803 deletions(-) delete mode 100644 pcbnew/dialog_module_edit.rc delete mode 100644 pcbnew/dialog_pad_edit.cpp delete mode 100644 pcbnew/dialog_pad_edit.h delete mode 100644 pcbnew/dialog_pad_edit.pjd delete mode 100644 pcbnew/dialog_pad_edit.rc create mode 100644 pcbnew/dialog_pad_properties.cpp create mode 100644 pcbnew/dialog_pad_properties_base.cpp create mode 100644 pcbnew/dialog_pad_properties_base.fbp create mode 100644 pcbnew/dialog_pad_properties_base.h delete mode 100644 pcbnew/editpads.cpp diff --git a/change_log.txt b/change_log.txt index ee3b79f955..2de3af2b4e 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,6 +5,11 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2008-Nov-22 UPDATE Jean-Pierre Charras +================================================================================ +++pcbnew + Some cleanup in dialog pad edition. + 2008-Nov-19 UPDATE Jerry Jacobs ================================================================================ diff --git a/eeschema/classes_body_items.cpp b/eeschema/classes_body_items.cpp index 617ba724d7..761f468340 100644 --- a/eeschema/classes_body_items.cpp +++ b/eeschema/classes_body_items.cpp @@ -195,11 +195,11 @@ void LibDrawSquare::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aO if( fill == FILLED_WITH_BG_BODYCOLOR && !aData ) GRFilledRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, - color, linewidth, + linewidth, color, ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); else if( m_Fill == FILLED_SHAPE && !aData ) GRFilledRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, - color, color ); + linewidth, color, color ); else GRRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, linewidth, color ); diff --git a/eeschema/menubar.cpp b/eeschema/menubar.cpp index c7f5da6061..8f564fccc4 100644 --- a/eeschema/menubar.cpp +++ b/eeschema/menubar.cpp @@ -39,20 +39,20 @@ void WinEDA_SchematicFrame::ReCreateMenuBar() // Menu File: wxMenuItem* item = new wxMenuItem( m_FilesMenu, ID_NEW_PROJECT, _( "&New" ), - _( "New schematic sheet" ) ); + _( "New schematic project" ) ); item->SetBitmap( new_xpm ); m_FilesMenu->Append( item ); item = new wxMenuItem( m_FilesMenu, ID_LOAD_PROJECT, _( "&Open" ), - _( "Open a schematic sheet" ) ); + _( "Open an existing schematic project" ) ); item->SetBitmap( open_xpm ); m_FilesMenu->Append( item ); m_FilesMenu->AppendSeparator(); item = new wxMenuItem( m_FilesMenu, ID_SAVE_PROJECT, _( "&Save Project" ), - _( "Save project" ) ); + _( "Save all sheets in the schematic project" ) ); item->SetBitmap( save_project_xpm ); m_FilesMenu->Append( item ); diff --git a/eeschema/tool_sch.cpp b/eeschema/tool_sch.cpp index 588a62ddf9..22a0bd69ef 100644 --- a/eeschema/tool_sch.cpp +++ b/eeschema/tool_sch.cpp @@ -153,28 +153,28 @@ void WinEDA_SchematicFrame::ReCreateVToolbar() m_VToolBar->AddSeparator(); m_VToolBar->AddTool( ID_COMPONENT_BUTT, wxEmptyString, BITMAP( add_component_xpm ), - _( "Place the component" ), wxITEM_CHECK ); + _( "Place a component" ), wxITEM_CHECK ); m_VToolBar->AddTool( ID_PLACE_POWER_BUTT, wxEmptyString, BITMAP( add_power_xpm ), - _( "Place the power port" ), wxITEM_CHECK ); + _( "Place a power port" ), wxITEM_CHECK ); m_VToolBar->AddSeparator(); m_VToolBar->AddTool( ID_WIRE_BUTT, wxEmptyString, BITMAP( add_line_xpm ), - _( "Place the wire" ), wxITEM_CHECK ); + _( "Place a wire" ), wxITEM_CHECK ); m_VToolBar->AddTool( ID_BUS_BUTT, wxEmptyString, BITMAP( add_bus_xpm ), - _( "Place bus" ), wxITEM_CHECK ); + _( "Place a bus" ), wxITEM_CHECK ); m_VToolBar->AddTool( ID_WIRETOBUS_ENTRY_BUTT, wxEmptyString, BITMAP( add_line2bus_xpm ), - _( "Place the wire to bus entry" ), wxITEM_CHECK ); + _( "Place a wire to bus entry" ), wxITEM_CHECK ); m_VToolBar->AddTool( ID_BUSTOBUS_ENTRY_BUTT, wxEmptyString, BITMAP( add_bus2bus_xpm ), - _( "Place bus to bus entry" ), wxITEM_CHECK ); + _( "Place a bus to bus entry" ), wxITEM_CHECK ); m_VToolBar->AddSeparator(); m_VToolBar->AddTool( ID_NOCONN_BUTT, wxEmptyString, @@ -187,17 +187,17 @@ void WinEDA_SchematicFrame::ReCreateVToolbar() m_VToolBar->AddTool( ID_GLABEL_BUTT, wxEmptyString, BITMAP( add_glabel_xpm ), - _( "Place the global label.\nWarning: all global labels with the same name are connected in whole hierarchy" ), + _( "Place a global label.\nWarning: all global labels with the same name are connected in whole hierarchy" ), wxITEM_CHECK ); m_VToolBar->AddTool( ID_JUNCTION_BUTT, wxEmptyString, BITMAP( add_junction_xpm ), - _( "Place junction" ), wxITEM_CHECK ); + _( "Place a junction" ), wxITEM_CHECK ); m_VToolBar->AddSeparator(); m_VToolBar->AddTool( ID_HIERLABEL_BUTT, wxEmptyString, BITMAP( add_hierarchical_label_xpm ), - _( "Place the hierarchical label. This label will be seen as a pin sheet in the sheet symbol" ), + _( "Place a hierarchical label. This label will be seen as a pin sheet in the sheet symbol" ), wxITEM_CHECK ); m_VToolBar->AddTool( ID_SHEET_SYMBOL_BUTT, wxEmptyString, diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 8680db5589cea76aea67a365d22839d1bafb971c..fc8da2929f4ac94c87d72fc5e88058f3f94125e0 100644 GIT binary patch delta 51901 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 Zrz^?Fh&9>MXNumV0!_R(r|5>yzX6XDb}Ik? delta 51325 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

3VmbMYL$G%wnS6c7v1gs(SZk}sUD7= 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 J8M@u${{RJP>7D=p diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 9cf49af8fd..31b7803c36 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-16 12:50+0100\n" -"PO-Revision-Date: 2008-11-16 12:53+0100\n" +"POT-Creation-Date: 2008-11-22 11:36+0100\n" +"PO-Revision-Date: 2008-11-22 11:37+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -286,7 +286,7 @@ msgstr "dimension" #: pcbnew/class_drawsegment.cpp:311 #: pcbnew/class_marker.cpp:133 #: pcbnew/class_text_mod.cpp:503 -#: pcbnew/class_track.cpp:853 +#: pcbnew/class_track.cpp:850 #: pcbnew/class_zone.cpp:789 msgid "Type" msgstr "Type" @@ -300,16 +300,16 @@ msgid "Angle" msgstr "Angle" #: pcbnew/class_drawsegment.cpp:326 -#: pcbnew/class_track.cpp:878 +#: pcbnew/class_track.cpp:875 msgid "Segment" msgstr "Segment" #: pcbnew/class_drawsegment.cpp:336 #: pcbnew/class_module.cpp:1081 -#: pcbnew/class_pad.cpp:993 +#: pcbnew/class_pad.cpp:990 #: pcbnew/class_pcb_text.cpp:190 #: pcbnew/class_text_mod.cpp:516 -#: pcbnew/class_track.cpp:910 +#: pcbnew/class_track.cpp:907 #: pcbnew/class_zone.cpp:823 msgid "Layer" msgstr "Couche" @@ -318,7 +318,7 @@ msgstr "Couche" #: pcbnew/class_edge_mod.cpp:297 #: pcbnew/class_pcb_text.cpp:204 #: pcbnew/class_text_mod.cpp:528 -#: pcbnew/class_track.cpp:933 +#: pcbnew/class_track.cpp:930 msgid "Width" msgstr "Epaisseur" @@ -388,7 +388,7 @@ msgstr "Seg" #: pcbnew/class_edge_mod.cpp:286 #: pcbnew/class_module.cpp:1108 -#: pcbnew/class_pad.cpp:903 +#: pcbnew/class_pad.cpp:900 #: pcbnew/class_text_mod.cpp:494 msgid "Module" msgstr "Module" @@ -418,12 +418,12 @@ msgid "Netlist path" msgstr "Chemin Netliste " #: pcbnew/class_module.cpp:1101 -#: pcbnew/class_track.cpp:894 +#: pcbnew/class_track.cpp:891 msgid "Stat" msgstr "Stat" #: pcbnew/class_module.cpp:1105 -#: pcbnew/class_pad.cpp:1035 +#: pcbnew/class_pad.cpp:1028 #: pcbnew/class_pcb_text.cpp:201 #: pcbnew/class_text_mod.cpp:525 msgid "Orient" @@ -441,41 +441,41 @@ msgstr "Doc: " msgid "KeyW: " msgstr "KeyW: " -#: pcbnew/class_pad.cpp:820 +#: pcbnew/class_pad.cpp:817 msgid "Unknown Pad shape" msgstr "Forme Pad inconnue" -#: pcbnew/class_pad.cpp:906 +#: pcbnew/class_pad.cpp:903 msgid "RefP" msgstr "RefP" -#: pcbnew/class_pad.cpp:1006 +#: pcbnew/class_pad.cpp:999 #: pcbnew/class_pcb_text.cpp:207 #: pcbnew/class_text_mod.cpp:531 msgid "H Size" msgstr "Taille H" -#: pcbnew/class_pad.cpp:1010 +#: pcbnew/class_pad.cpp:1003 #: pcbnew/class_pcb_text.cpp:210 #: pcbnew/class_text_mod.cpp:534 msgid "V Size" msgstr "Taille V" -#: pcbnew/class_pad.cpp:1016 -#: pcbnew/class_track.cpp:925 -#: pcbnew/class_track.cpp:930 +#: pcbnew/class_pad.cpp:1009 +#: pcbnew/class_track.cpp:922 +#: pcbnew/class_track.cpp:927 msgid "Drill" msgstr "Perçage" -#: pcbnew/class_pad.cpp:1024 +#: pcbnew/class_pad.cpp:1017 msgid "Drill X / Y" msgstr "Perçage X/Y" -#: pcbnew/class_pad.cpp:1039 +#: pcbnew/class_pad.cpp:1032 msgid "X Pos" msgstr "X Pos" -#: pcbnew/class_pad.cpp:1043 +#: pcbnew/class_pad.cpp:1036 msgid "Y pos" msgstr "Y pos" @@ -510,21 +510,21 @@ msgstr "Ref." msgid "Display" msgstr "Affichage" -#: pcbnew/class_track.cpp:869 +#: pcbnew/class_track.cpp:866 #: pcbnew/class_zone.cpp:811 msgid "NetName" msgstr "NetName" -#: pcbnew/class_track.cpp:874 +#: pcbnew/class_track.cpp:871 #: pcbnew/class_zone.cpp:819 msgid "NetCode" msgstr "NetCode" -#: pcbnew/class_track.cpp:882 +#: pcbnew/class_track.cpp:879 msgid "Standard" msgstr "Standard" -#: pcbnew/class_track.cpp:918 +#: pcbnew/class_track.cpp:915 msgid "Diam" msgstr "Diam" @@ -1799,6 +1799,38 @@ 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/dialog_pad_properties.cpp:120 +msgid "Pad Position" +msgstr "Position Pad" + +#: pcbnew/dialog_pad_properties.cpp:125 +msgid "Pad Size" +msgstr "Taille Pad" + +#: pcbnew/dialog_pad_properties.cpp:130 +msgid "Delta" +msgstr "Delta" + +#: pcbnew/dialog_pad_properties.cpp:135 +msgid "Offset" +msgstr "Offset" + +#: pcbnew/dialog_pad_properties.cpp:141 +msgid "Pad drill" +msgstr "Diam perçage" + +#: pcbnew/dialog_pad_properties.cpp:427 +msgid "Incorrect value for pad drill: pad drill bigger than pad size" +msgstr "Valeur incorrecte pour diamètre de perçage.perçage plus grand que la taille du pad" + +#: pcbnew/dialog_pad_properties.cpp:433 +msgid "Incorrect value for pad offset" +msgstr "Valeur incorrecte pour offset du pad" + +#: pcbnew/dialog_pad_properties.cpp:528 +msgid "Unknown netname, no change" +msgstr "Net inconnu, pas de changement" + #: pcbnew/pcbplot.cpp:149 #: pcbnew/pcbplot.cpp:281 msgid "Plot" @@ -2053,7 +2085,7 @@ msgstr "Surbrillance des équipotentielles" msgid "Local Ratsnest" msgstr "Montrer le chevelu général" -#: pcbnew/edit.cpp:579 +#: pcbnew/edit.cpp:584 msgid "Delete item" msgstr "Suppression d'éléments" @@ -2818,7 +2850,7 @@ msgstr "L'élément graphique sera sur une couche cuivre. C'est très dangereux. #: pcbnew/edgemod.cpp:246 msgid "New Width (1/10000\"):" -msgstr "Novelle largeur (1/10000\"):" +msgstr "Nouvelle largeur (1/10000\"):" #: pcbnew/edgemod.cpp:246 msgid "Edge Width" @@ -2978,19 +3010,19 @@ msgstr " chargé" msgid "Modules [%d items]" msgstr "Modules [%d éléments]" -#: pcbnew/dialog_copper_zones.cpp:66 +#: pcbnew/dialog_copper_zones.cpp:67 msgid "Zone clearance value:" msgstr "Valeur isolation zone:" -#: pcbnew/dialog_copper_zones.cpp:69 +#: pcbnew/dialog_copper_zones.cpp:70 msgid "Grid :" msgstr "Grille:" -#: pcbnew/dialog_copper_zones.cpp:354 +#: pcbnew/dialog_copper_zones.cpp:355 msgid "Error : you must choose a layer" msgstr "Erreur. Vous devez choisir une couche" -#: pcbnew/dialog_copper_zones.cpp:366 +#: pcbnew/dialog_copper_zones.cpp:367 msgid "Error : you must choose a net name" msgstr "Erreur. Vous devez choisir une équipotentielle" @@ -3157,6 +3189,30 @@ msgstr "Référence ou Valeur ne peut etre effacée" msgid "Delete [%s]" msgstr "Supprimer [%s]" +#: pcbnew/dsn.cpp:502 +msgid "Line length exceeded" +msgstr "Longueur de ligne dépassée" + +#: pcbnew/dsn.cpp:616 +msgid "in file" +msgstr "dans le fichier" + +#: pcbnew/dsn.cpp:617 +msgid "on line" +msgstr "en ligne" + +#: pcbnew/dsn.cpp:618 +msgid "at offset" +msgstr "a l'offset" + +#: pcbnew/dsn.cpp:678 +msgid "String delimiter must be a single character of ', \", or $" +msgstr "Le caractère de délimitation de ligne doit être un seul caractère ', \", or $" + +#: pcbnew/dsn.cpp:768 +msgid "Un-terminated delimited string" +msgstr "Ligne délimitée non terminée" + #: pcbnew/tool_pcb.cpp:33 msgid "" "Show active layer selections\n" @@ -3620,42 +3676,6 @@ msgstr "Bloc Miroir" msgid "Move Block" msgstr "Déplacer Bloc" -#: pcbnew/editpads.cpp:81 -msgid "Pad Position" -msgstr "Position Pad" - -#: pcbnew/editpads.cpp:88 -msgid "Pad Size" -msgstr "Taille Pad" - -#: pcbnew/editpads.cpp:95 -msgid "Delta" -msgstr "Delta" - -#: pcbnew/editpads.cpp:102 -msgid "Offset" -msgstr "Offset" - -#: pcbnew/editpads.cpp:111 -msgid "Pad drill" -msgstr "Diam perçage" - -#: pcbnew/editpads.cpp:123 -msgid "Pad Orientation (in 0.1 degrees)" -msgstr "Orientation Pad en (0.1 degrés)" - -#: pcbnew/editpads.cpp:388 -msgid "Incorrect value for pad drill: pad drill bigger than pad size" -msgstr "Valeur incorrecte pour diamètre de perçage.perçage plus grand que la taille du pad" - -#: pcbnew/editpads.cpp:394 -msgid "Incorrect value for pad offset" -msgstr "Valeur incorrecte pour offset du pad" - -#: pcbnew/editpads.cpp:491 -msgid "Unknown netname, no change" -msgstr "Net inconnu, pas de changement" - #: pcbnew/specctra.cpp:133 #: pcbnew/specctra.cpp:140 msgid "Expecting" @@ -3787,14 +3807,14 @@ msgstr "Le Fichier Session utilise une couche invalide n° \"%s\"" #: pcbnew/specctra_import.cpp:241 msgid "Session via padstack has no shapes" -msgstr "Manque dans le Fichier Session file la section " +msgstr "Dans le fichier Session une via n'a pas de forme" #: pcbnew/specctra_import.cpp:248 #: pcbnew/specctra_import.cpp:266 #: pcbnew/specctra_import.cpp:290 #, c-format msgid "Unsupported via shape: \"%s\"" -msgstr "Forme via inconnue: \"%s\"" +msgstr "Forme via non supportée: \"%s\"" #: pcbnew/specctra_import.cpp:347 msgid "Session file is missing the \"session\" section" @@ -3822,30 +3842,6 @@ msgstr "Le fichier Session a une 'reference' a un composant non existant \"%s\"" msgid "A wire_via references a missing padstack \"%s\"" msgstr "Une piste ou via a une référence vers un pad \"%s\" manquant" -#: pcbnew/dsn.cpp:502 -msgid "Line length exceeded" -msgstr "Longueur de ligne dépassée" - -#: pcbnew/dsn.cpp:616 -msgid "in file" -msgstr "dans le fichier" - -#: pcbnew/dsn.cpp:617 -msgid "on line" -msgstr "en ligne" - -#: pcbnew/dsn.cpp:618 -msgid "at offset" -msgstr "a l'offset" - -#: pcbnew/dsn.cpp:666 -msgid "String delimiter must be a single character of ', \", or $" -msgstr "Le caractère de délimitation de ligne doit être un seul caractère ', \", or $" - -#: pcbnew/dsn.cpp:756 -msgid "Un-terminated delimited string" -msgstr "Ligne délimitée non terminée" - #: pcbnew/pcbnew.cpp:44 msgid "Pcbnew is already running, Continue?" msgstr "Pcbnew est en cours d'exécution. Continuer ?" @@ -4380,7 +4376,7 @@ msgstr " Pads magnétiques" #: pcbnew/dialog_general_options.cpp:460 msgid "control the capture of the pcb cursor when the mouse cursor enters a pad area" -msgstr "Contrôle la capture du curseur pcb quand le curseuir souris est sur le pad" +msgstr "Contrôle la capture du curseur pcb quand le curseuir souris est sur un pad" #: pcbnew/dialog_general_options.cpp:468 msgid "Magnetic Tracks" @@ -4388,7 +4384,7 @@ msgstr "Pistes Magnétiques" #: pcbnew/dialog_general_options.cpp:475 msgid "control the capture of the pcb cursor when the mouse cursor enters a track" -msgstr "Contrôle la capture du curseur pcb quand le curseuir souris est sur la piste" +msgstr "Contrôle la capture du curseur pcb quand le curseuir souris est sur une piste" #: pcbnew/dialog_non_copper_zones_properties_base.cpp:28 msgid "Hatched Outline" @@ -4419,115 +4415,6 @@ msgstr "Direction contours zone" msgid "Layer selection:" msgstr "Sélection couche:" -#: pcbnew/dialog_pad_edit.cpp:157 -msgid "Pad Num :" -msgstr "Num Pad :" - -#: pcbnew/dialog_pad_edit.cpp:163 -msgid "Pad Net Name :" -msgstr "NetName Pad:" - -#: pcbnew/dialog_pad_edit.cpp:177 -#: pcbnew/dialog_pad_edit.cpp:197 -msgid "Oval" -msgstr "Ovale" - -#: pcbnew/dialog_pad_edit.cpp:178 -msgid "Drill Shape:" -msgstr "Forme du perçage:" - -#: pcbnew/dialog_pad_edit.cpp:187 -msgid "90" -msgstr "90" - -#: pcbnew/dialog_pad_edit.cpp:188 -msgid "-90" -msgstr "-90" - -#: pcbnew/dialog_pad_edit.cpp:189 -msgid "180" -msgstr "180" - -#: pcbnew/dialog_pad_edit.cpp:191 -msgid "Pad Orient:" -msgstr "Orient pad:" - -#: pcbnew/dialog_pad_edit.cpp:199 -msgid "Trapezoidal" -msgstr "Trapezoidal" - -#: pcbnew/dialog_pad_edit.cpp:200 -msgid "Pad Shape:" -msgstr "Forme Pad:" - -#: pcbnew/dialog_pad_edit.cpp:206 -msgid "SMD" -msgstr "CMS" - -#: pcbnew/dialog_pad_edit.cpp:207 -msgid "Conn" -msgstr "Conn" - -#: pcbnew/dialog_pad_edit.cpp:208 -msgid "Pad Type:" -msgstr "Type Pad:" - -#: pcbnew/dialog_pad_edit.cpp:223 -msgid "Layers:" -msgstr "Couches:" - -#: pcbnew/dialog_pad_edit.cpp:227 -msgid "Copper layer" -msgstr "Couches Cuivre" - -#: pcbnew/dialog_pad_edit.cpp:231 -msgid "Comp layer" -msgstr "Couche Cmp" - -#: pcbnew/dialog_pad_edit.cpp:237 -msgid "Adhesive Cmp" -msgstr "Adhesive Cmp" - -#: pcbnew/dialog_pad_edit.cpp:241 -msgid "Adhesive Copper" -msgstr "Adhesive Cu" - -#: pcbnew/dialog_pad_edit.cpp:245 -msgid "Solder paste Cmp" -msgstr "Pate à souder Cmp" - -#: pcbnew/dialog_pad_edit.cpp:249 -msgid "Solder paste Copper" -msgstr "Pate à souder cuivre" - -#: pcbnew/dialog_pad_edit.cpp:253 -msgid "Silkscreen Cmp" -msgstr "Sérigr Cmp" - -#: pcbnew/dialog_pad_edit.cpp:257 -msgid "Silkscreen Copper" -msgstr "Sérigr Cu " - -#: pcbnew/dialog_pad_edit.cpp:261 -msgid "Solder mask Cmp" -msgstr "Masque soudure Cmp" - -#: pcbnew/dialog_pad_edit.cpp:265 -msgid "Solder mask Copper" -msgstr "Masque soudure cuivre" - -#: pcbnew/dialog_pad_edit.cpp:269 -msgid "E.C.O.1 layer" -msgstr "couche E.C.O.1" - -#: pcbnew/dialog_pad_edit.cpp:273 -msgid "E.C.O.2 layer" -msgstr "couche E.C.O.2" - -#: pcbnew/dialog_pad_edit.cpp:277 -msgid "Draft layer" -msgstr "Couche dessin" - #: pcbnew/dialog_copper_zones_base.cpp:32 msgid "Zone Setup:" msgstr "Options Zone:" @@ -4566,7 +4453,7 @@ msgstr "Pad en Zone:" #: pcbnew/dialog_copper_zones_base.cpp:53 msgid "Thermal Reliefs Parameters" -msgstr "Pramètres FreinsThermiques" +msgstr "Paramètres FreinsThermiques" #: pcbnew/dialog_copper_zones_base.cpp:55 msgid "Antipad Size" @@ -5060,6 +4947,119 @@ msgstr "&Divers" msgid "P&ostprocess" msgstr "P&ostprocesseurs" +#: pcbnew/dialog_pad_properties_base.cpp:22 +msgid "Pad Num :" +msgstr "Num Pad :" + +#: pcbnew/dialog_pad_properties_base.cpp:29 +msgid "Pad Net Name :" +msgstr "NetName Pad:" + +#: pcbnew/dialog_pad_properties_base.cpp:44 +#: pcbnew/dialog_pad_properties_base.cpp:53 +msgid "Oval" +msgstr "Ovale" + +#: pcbnew/dialog_pad_properties_base.cpp:44 +msgid "Trapezoidal" +msgstr "Trapezoidal" + +#: pcbnew/dialog_pad_properties_base.cpp:46 +msgid "Pad Shape:" +msgstr "Forme Pad:" + +#: pcbnew/dialog_pad_properties_base.cpp:55 +msgid "Drill Shape:" +msgstr "Forme du perçage:" + +#: pcbnew/dialog_pad_properties_base.cpp:64 +msgid "90" +msgstr "90" + +#: pcbnew/dialog_pad_properties_base.cpp:64 +msgid "-90" +msgstr "-90" + +#: pcbnew/dialog_pad_properties_base.cpp:64 +msgid "180" +msgstr "180" + +#: pcbnew/dialog_pad_properties_base.cpp:66 +msgid "Pad Orient:" +msgstr "Orient pad:" + +#: pcbnew/dialog_pad_properties_base.cpp:70 +msgid "Pad Orient (0.1 deg)" +msgstr "Orient. Pad (0.1 deg)" + +#: pcbnew/dialog_pad_properties_base.cpp:80 +msgid "SMD" +msgstr "CMS" + +#: pcbnew/dialog_pad_properties_base.cpp:80 +msgid "Conn" +msgstr "Conn" + +#: pcbnew/dialog_pad_properties_base.cpp:82 +msgid "Pad Type:" +msgstr "Type Pad:" + +#: pcbnew/dialog_pad_properties_base.cpp:106 +msgid "Layers:" +msgstr "Couches:" + +#: pcbnew/dialog_pad_properties_base.cpp:108 +msgid "Copper layer" +msgstr "Couches Cuivre" + +#: pcbnew/dialog_pad_properties_base.cpp:112 +msgid "Component layer" +msgstr "Couche composant" + +#: pcbnew/dialog_pad_properties_base.cpp:119 +msgid "Adhesive Cmp" +msgstr "Adhesive Cmp" + +#: pcbnew/dialog_pad_properties_base.cpp:123 +msgid "Adhesive Copper" +msgstr "Adhesive Cu" + +#: pcbnew/dialog_pad_properties_base.cpp:127 +msgid "Solder paste Cmp" +msgstr "Pate à souder Cmp" + +#: pcbnew/dialog_pad_properties_base.cpp:131 +msgid "Solder paste Copper" +msgstr "Pate à souder cuivre" + +#: pcbnew/dialog_pad_properties_base.cpp:135 +msgid "Silkscreen Cmp" +msgstr "Sérigr Cmp" + +#: pcbnew/dialog_pad_properties_base.cpp:139 +msgid "Silkscreen Copper" +msgstr "Sérigr Cu " + +#: pcbnew/dialog_pad_properties_base.cpp:143 +msgid "Solder mask Cmp" +msgstr "Masque soudure Cmp" + +#: pcbnew/dialog_pad_properties_base.cpp:147 +msgid "Solder mask Copper" +msgstr "Masque soudure cuivre" + +#: pcbnew/dialog_pad_properties_base.cpp:151 +msgid "E.C.O.1 layer" +msgstr "couche E.C.O.1" + +#: pcbnew/dialog_pad_properties_base.cpp:155 +msgid "E.C.O.2 layer" +msgstr "couche E.C.O.2" + +#: pcbnew/dialog_pad_properties_base.cpp:159 +msgid "Draft layer" +msgstr "Couche dessin" + #: eeschema/backanno.cpp:135 msgid "Load Stuff File" msgstr "Charger Fichier d'échange" @@ -6267,7 +6267,7 @@ msgstr "Incrément Label:" #: eeschema/dialog_options.cpp:332 msgid "Default Label Size" -msgstr "Taille Label par défaut:" +msgstr "Taille Label par défaut" #: eeschema/libfield.cpp:205 msgid "Edit field" @@ -7088,32 +7088,6 @@ msgstr "Cette opération changera l'annotation actuelle et ne pourra être annul msgid "Ok to continue renaming?" msgstr "Ok pour continuer le changement de nom?" -#: eeschema/symbedit.cpp:52 -msgid "Import symbol drawings:" -msgstr "Importer les symboles:" - -#: eeschema/symbedit.cpp:74 -#, c-format -msgid "Failed to open Symbol File <%s>" -msgstr "Ne peut pas ouvrir fichier <%s>" - -#: eeschema/symbedit.cpp:87 -msgid "Warning: more than 1 part in Symbol File" -msgstr "Attention: plus de 1élément dans le fichier symbole" - -#: eeschema/symbedit.cpp:92 -msgid "Symbol File is void" -msgstr "Fichier Symbole vide" - -#: eeschema/symbedit.cpp:150 -msgid "Export symbol drawings:" -msgstr "Exporter le symbole" - -#: eeschema/symbedit.cpp:170 -#, c-format -msgid "Save Symbol in [%s]" -msgstr "Symbole sauvé en [%s]" - #: eeschema/libedit.cpp:38 msgid " Part: " msgstr "Composant " @@ -7321,6 +7295,7 @@ msgid "Part %c" msgstr "Composant %c" #: eeschema/tool_sch.cpp:39 +#: eeschema/menubar.cpp:42 msgid "New schematic project" msgstr "Nouveau Projet schématique" @@ -7329,7 +7304,6 @@ msgid "Open schematic project" msgstr "Ouvrir un Projet schématique" #: eeschema/tool_sch.cpp:45 -#: eeschema/menubar.cpp:55 msgid "Save schematic project" msgstr "Sauver le Projet schématique" @@ -7346,7 +7320,6 @@ msgid "Schematic hierarchy navigator" msgstr "Navigation dans la hiérarchie" #: eeschema/tool_sch.cpp:82 -#: eeschema/menubar.cpp:75 msgid "Print schematic" msgstr "Impression des feuilles de schéma" @@ -7383,32 +7356,30 @@ msgid "Hierarchy Push/Pop" msgstr "Navigation dans la hiérarchie" #: eeschema/tool_sch.cpp:156 -#: eeschema/menubar.cpp:206 -msgid "Place the component" -msgstr "Placer le Composant" +msgid "Place a component" +msgstr "Placer un Composant" #: eeschema/tool_sch.cpp:160 -#: eeschema/menubar.cpp:212 -msgid "Place the power port" -msgstr "Placer le Symbole Power" +msgid "Place a power port" +msgstr "Placer un Symbole Power" #: eeschema/tool_sch.cpp:165 -#: eeschema/menubar.cpp:218 -msgid "Place the wire" -msgstr "Place fil" +msgid "Place a wire" +msgstr "Placer un fil" #: eeschema/tool_sch.cpp:169 -#: eeschema/menubar.cpp:227 -msgid "Place bus" -msgstr "Place bus" +msgid "Place a bus" +msgstr "Placer un bus" #: eeschema/tool_sch.cpp:173 -msgid "Place the wire to bus entry" -msgstr "Placer des entrées de bus (type fil vers bus)" +#: eeschema/menubar.cpp:237 +msgid "Place a wire to bus entry" +msgstr "Placer une Entrée de Bus (type fil vers bus)" #: eeschema/tool_sch.cpp:177 -msgid "Place bus to bus entry" -msgstr "Placer entrée de bus (type bus vers bus)" +#: eeschema/menubar.cpp:247 +msgid "Place a bus to bus entry" +msgstr "Placer une Entrée de Bus (type bus vers bus)" #: eeschema/tool_sch.cpp:182 msgid "Place no connect flag" @@ -7421,20 +7392,20 @@ msgstr "Place nom de net" #: eeschema/tool_sch.cpp:190 msgid "" -"Place the global label.\n" +"Place a global label.\n" "Warning: all global labels with the same name are connected in whole hierarchy" msgstr "" -"Placer le label global.\n" -"Attention: tous les labels globaux de même nom sont connecté dans toute la hiérarchie" +"Placer un label global.\n" +"Attention: tous les labels globaux avec le même nom sont connectés dans toute la hiérarchie" #: eeschema/tool_sch.cpp:195 -#: eeschema/menubar.cpp:285 -msgid "Place junction" -msgstr "Place jonction" +msgid "Place a junction" +msgstr "Placer une jonction" #: eeschema/tool_sch.cpp:200 -msgid "Place the hierarchical label. This label will be seen as a pin sheet in the sheet symbol" -msgstr "Placer le label hiérachique. Ce label sera vu comme une pin dans la feuille mère symbole" +#: eeschema/menubar.cpp:297 +msgid "Place a hierarchical label. This label will be seen as a pin sheet in the sheet symbol" +msgstr "Placer un label hiérachique. Ce label sera vu comme une pin dans la feuille mère symbole" #: eeschema/tool_sch.cpp:205 msgid "Place hierarchical sheet" @@ -7571,6 +7542,262 @@ msgstr "" msgid "File <%s> not found." msgstr "Fichier <%s> non trouvé" +#: eeschema/menubar.cpp:41 +msgid "&New" +msgstr "&Nouveau" + +#: eeschema/menubar.cpp:47 +msgid "&Open" +msgstr "&Ouvrir " + +#: eeschema/menubar.cpp:48 +msgid "Open an existing schematic project" +msgstr "Ouvrir un projet schématique existant" + +#: eeschema/menubar.cpp:54 +msgid "&Save Project" +msgstr "&Sauver Projet" + +#: eeschema/menubar.cpp:55 +msgid "Save all sheets in the schematic project" +msgstr "Sauver toutes les feuilles du projet schématique" + +#: eeschema/menubar.cpp:61 +msgid "&Save" +msgstr "&Sauver" + +#: eeschema/menubar.cpp:62 +msgid "Save only current schematic sheet" +msgstr "Sauver seulement la feuille active" + +#: eeschema/menubar.cpp:67 +msgid "Save &as.." +msgstr "S&auver Sous..." + +#: eeschema/menubar.cpp:68 +msgid "Save current schematic sheet as.." +msgstr "Sauver la feuille active sous un autre nom" + +#: eeschema/menubar.cpp:75 +msgid "Print schematic sheet" +msgstr "Impression des feuilles de schéma" + +#: eeschema/menubar.cpp:82 +msgid "Plot PostScript" +msgstr "Tracé Postscript" + +#: eeschema/menubar.cpp:82 +msgid "Plot schematic sheet in PostScript format" +msgstr "Tracer les feuilles schématiques en format Postscript" + +#: eeschema/menubar.cpp:87 +msgid "Plot HPGL" +msgstr "Tracé HPGL" + +#: eeschema/menubar.cpp:87 +msgid "Plot schematic sheet in HPGL format" +msgstr "Tracer les feuilles schématiques en format HPGL" + +#: eeschema/menubar.cpp:92 +msgid "Plot SVG" +msgstr "Tracé SVG" + +#: eeschema/menubar.cpp:92 +msgid "Plot schematic sheet in SVG format" +msgstr "Tracer les feuilles schématiques en format SVG" + +#: eeschema/menubar.cpp:99 +msgid "Plot to Clipboard" +msgstr "Tracé dans Presse papier" + +#: eeschema/menubar.cpp:99 +msgid "Export drawings to clipboard" +msgstr " Export du dessin dans le presse-papier" + +#: eeschema/menubar.cpp:106 +msgid "Plot schematic sheet in HPGL, PostScript or SVG format" +msgstr "Tracer les feuilles schématiques en format HPGL, POSTSCRIPT ou SVG" + +#: eeschema/menubar.cpp:109 +msgid "Quit Eeschema" +msgstr "Quitter Eeschema" + +#: eeschema/menubar.cpp:127 +msgid "&Undo\t" +msgstr "&Undo\t" + +#: eeschema/menubar.cpp:135 +msgid "&Redo\t" +msgstr "&Redo\t" + +#: eeschema/menubar.cpp:154 +msgid "Find" +msgstr "Chercher" + +#: eeschema/menubar.cpp:162 +msgid "Backannotate" +msgstr "Rétro Annotation" + +#: eeschema/menubar.cpp:162 +msgid "Back annotated footprint fields" +msgstr "Rétroannotation des champs modules" + +#: eeschema/menubar.cpp:206 +msgid "&Component" +msgstr "&Composant" + +#: eeschema/menubar.cpp:206 +msgid "Place the component" +msgstr "Placer le Composant" + +#: eeschema/menubar.cpp:212 +msgid "&Power port" +msgstr "Power Symbole" + +#: eeschema/menubar.cpp:212 +msgid "Place the power port" +msgstr "Placer le Symbole Power" + +#: eeschema/menubar.cpp:218 +msgid "&Wire" +msgstr "&Fil" + +#: eeschema/menubar.cpp:218 +msgid "Place the wire" +msgstr "Place fil" + +#: eeschema/menubar.cpp:226 +msgid "&Bus" +msgstr "&Bus" + +#: eeschema/menubar.cpp:227 +msgid "Place bus" +msgstr "Place bus" + +#: eeschema/menubar.cpp:236 +msgid "W&ire to bus entry" +msgstr "Entrées de bus (type fil vers bus)" + +#: eeschema/menubar.cpp:246 +msgid "B&us to bus entry" +msgstr "Entrées de bus (type bus vers bus)" + +#: eeschema/menubar.cpp:256 +msgid "No connect flag" +msgstr "Symbole de Non Connexion" + +#: eeschema/menubar.cpp:257 +msgid "Place a no connect flag" +msgstr "Placer un Symbole de Non Connexion" + +#: eeschema/menubar.cpp:266 +msgid "Net name" +msgstr "Net Name" + +#: eeschema/menubar.cpp:274 +msgid "Global label" +msgstr "Label Global" + +#: eeschema/menubar.cpp:275 +msgid "Place a global label. Warning: all global labels with the same name are connected in whole hierarchy" +msgstr "Placer un label global. Attention: tous les labels globaux avec le même nom sont connectés dans toute la hiérarchie" + +#: eeschema/menubar.cpp:284 +msgid "Place Junction" +msgstr "Place Jonction" + +#: eeschema/menubar.cpp:285 +msgid "Place junction" +msgstr "Place jonction" + +#: eeschema/menubar.cpp:296 +msgid "Hierarchical label" +msgstr "Label Hiérarchique" + +#: eeschema/menubar.cpp:306 +msgid "Hierarchical sheet" +msgstr "Feuille Hiérrachique" + +#: eeschema/menubar.cpp:307 +msgid "Create a hierarchical sheet" +msgstr "Créer une Feuille Hiérachique" + +#: eeschema/menubar.cpp:316 +msgid "Import Hierarchical Label" +msgstr "Importer Label Hiérarchique" + +#: eeschema/menubar.cpp:317 +msgid "Place a pin sheet created by importing a hierarchical label from sheet" +msgstr "Placer une pin hiérarchique créée par importation d'un label hiérarchique de la feuille" + +#: eeschema/menubar.cpp:326 +msgid "Add Hierarchical Pin to Sheet" +msgstr "Ajouter Pins de Hiérarchie dans feuille" + +#: eeschema/menubar.cpp:327 +msgid "Place a hierarchical pin to sheet" +msgstr "Addition de pins de hiérarchie dans les feuilles symboles de hiérarchie" + +#: eeschema/menubar.cpp:338 +msgid "Graphic line or polygon" +msgstr "Ligne ou polygone graphique" + +#: eeschema/menubar.cpp:339 +msgid "Place graphic lines or polygons" +msgstr "Placer lignes ou polygones graphiques" + +#: eeschema/menubar.cpp:348 +msgid "Graphic text (comment)" +msgstr "Ttextes graphiques (commentaires)" + +#: eeschema/menubar.cpp:359 +msgid "Library preferences" +msgstr "Préférences pour Librairie" + +#: eeschema/menubar.cpp:365 +msgid "Color preferences" +msgstr "Préférences de couleurs" + +#: eeschema/menubar.cpp:371 +msgid "&Options" +msgstr "&Options" + +#: eeschema/menubar.cpp:372 +msgid "General options..." +msgstr "Options Générales..." + +#: eeschema/menubar.cpp:382 +msgid "&Save preferences" +msgstr "&Sauver Préférences" + +#: eeschema/menubar.cpp:386 +msgid "&Read preferences" +msgstr "&Lire Préférences" + +#: eeschema/menubar.cpp:397 +msgid "Open the eeschema manual" +msgstr "Ouvrir la documentation de eeschema" + +#: eeschema/menubar.cpp:402 +msgid "&About" +msgstr "&Au Sujet de" + +#: eeschema/menubar.cpp:402 +msgid "About eeschema schematic designer" +msgstr "Au sujet de Eeschema (outil de conception schématique)" + +#: eeschema/menubar.cpp:408 +msgid "&Edit" +msgstr "&Editer" + +#: eeschema/menubar.cpp:409 +msgid "&View" +msgstr "&Voir" + +#: eeschema/menubar.cpp:410 +msgid "&Place" +msgstr "&Placer" + #: eeschema/component_class.cpp:131 msgid "Datasheet" msgstr "Documentation" @@ -7726,249 +7953,31 @@ msgstr " a été créé par une version plus ancienne de Eeschema. Il sera enreg msgid "Done Loading " msgstr "Chargement terminé" -#: eeschema/menubar.cpp:41 -msgid "&New" -msgstr "&Nouveau" +#: eeschema/symbedit.cpp:52 +msgid "Import symbol drawings:" +msgstr "Importer les symboles:" -#: eeschema/menubar.cpp:42 -msgid "New schematic" -msgstr "Nouvelle schématique" +#: eeschema/symbedit.cpp:74 +#, c-format +msgid "Failed to open Symbol File <%s>" +msgstr "Ne peut pas ouvrir fichier <%s>" -#: eeschema/menubar.cpp:47 -msgid "&Open" -msgstr "&Ouvrir " +#: eeschema/symbedit.cpp:87 +msgid "Warning: more than 1 part in Symbol File" +msgstr "Attention: plus de 1élément dans le fichier symbole" -#: eeschema/menubar.cpp:48 -msgid "Open a schematic" -msgstr "Ouvrir un Projet schématique" +#: eeschema/symbedit.cpp:92 +msgid "Symbol File is void" +msgstr "Fichier Symbole vide" -#: eeschema/menubar.cpp:54 -msgid "&Save" -msgstr "&Sauver" +#: eeschema/symbedit.cpp:150 +msgid "Export symbol drawings:" +msgstr "Exporter le symbole" -#: eeschema/menubar.cpp:61 -msgid "Save &Current sheet" -msgstr "Sauver &Feuille active" - -#: eeschema/menubar.cpp:62 -msgid "Save current sheet only" -msgstr "Sauver la feuille active uniquement" - -#: eeschema/menubar.cpp:67 -msgid "Save Current sheet &as.." -msgstr "Sauver la feuille &active sous.." - -#: eeschema/menubar.cpp:68 -msgid "Save current sheet as.." -msgstr "Sauver la feuille active sous un autre nom" - -#: eeschema/menubar.cpp:82 -msgid "Plot PostScript" -msgstr "Tracé Postscript" - -#: eeschema/menubar.cpp:82 -msgid "Plot schematic in PostScript format" -msgstr "Générer un tracé en format Postscript" - -#: eeschema/menubar.cpp:87 -msgid "Plot HPGL" -msgstr "Tracé HPGL" - -#: eeschema/menubar.cpp:87 -msgid "Plot schematic in HPGL format" -msgstr "Générer un tracé en format HPGL" - -#: eeschema/menubar.cpp:92 -msgid "Plot SVG" -msgstr "Tracé SVG" - -#: eeschema/menubar.cpp:92 -msgid "Plot schematic in SVG format" -msgstr "Générer un tracé en format SVG" - -#: eeschema/menubar.cpp:99 -msgid "Plot to Clipboard" -msgstr "Tracé dans Presse papier" - -#: eeschema/menubar.cpp:99 -msgid "Export drawings to clipboard" -msgstr " Export du dessin dans le presse-papier" - -#: eeschema/menubar.cpp:106 -msgid "Plot schematic in HPGL, PostScript or SVG format" -msgstr "Tracer schématique ( format HPGL, POSTSCRIPT ou SVG)" - -#: eeschema/menubar.cpp:109 -msgid "Quit Eeschema" -msgstr "Quitter Eeschema" - -#: eeschema/menubar.cpp:127 -msgid "&Undo\t" -msgstr "&Undo\t" - -#: eeschema/menubar.cpp:135 -msgid "&Redo\t" -msgstr "&Redo\t" - -#: eeschema/menubar.cpp:154 -msgid "Find" -msgstr "Chercher" - -#: eeschema/menubar.cpp:162 -msgid "Backannotate" -msgstr "Rétro Annotation" - -#: eeschema/menubar.cpp:162 -msgid "Back annotated footprint fields" -msgstr "Rétroannotation des champs modules" - -#: eeschema/menubar.cpp:206 -msgid "&Component" -msgstr "&Composant" - -#: eeschema/menubar.cpp:212 -msgid "&Power port" -msgstr "Power Symbole" - -#: eeschema/menubar.cpp:218 -msgid "&Wire" -msgstr "&Fil" - -#: eeschema/menubar.cpp:226 -msgid "&Bus" -msgstr "&Bus" - -#: eeschema/menubar.cpp:236 -msgid "W&ire to bus entry" -msgstr "Entrées de bus (type fil vers bus)" - -#: eeschema/menubar.cpp:237 -msgid "Place a wire to bus entry" -msgstr "Placer une Entrée de Bus (type fil vers bus)" - -#: eeschema/menubar.cpp:246 -msgid "B&us to bus entry" -msgstr "Entrées de bus (type bus vers bus)" - -#: eeschema/menubar.cpp:247 -msgid "Place a bus to bus entry" -msgstr "Placer une Entrée de Bus (type bus vers bus)" - -#: eeschema/menubar.cpp:256 -msgid "No connect flag" -msgstr "Symbole de Non Connexion" - -#: eeschema/menubar.cpp:257 -msgid "Place a no connect flag" -msgstr "Placer un Symbole de Non Connexion" - -#: eeschema/menubar.cpp:266 -msgid "Net name" -msgstr "Net Name" - -#: eeschema/menubar.cpp:274 -msgid "Global label" -msgstr "Label Global" - -#: eeschema/menubar.cpp:275 -msgid "Place a global label. Warning: all global labels with the same name are connected in whole hierarchy" -msgstr "Placer un label global. Attention: tous les labels globaux avec le même nom sont connectés dans toute la hiérarchie" - -#: eeschema/menubar.cpp:284 -msgid "Place Junction" -msgstr "Place Jonction" - -#: eeschema/menubar.cpp:296 -msgid "Hierarchical label" -msgstr "Label Hiérarchique" - -#: eeschema/menubar.cpp:297 -msgid "Place a hierarchical label. This label will be seen as a pin sheet in the sheet symbol" -msgstr "Placer un label hiérachique. Ce label sera vu comme une pin dans la feuille mère symbole" - -#: eeschema/menubar.cpp:306 -msgid "Hierarchical sheet" -msgstr "Feuille Hiérrachique" - -#: eeschema/menubar.cpp:307 -msgid "Create a hierarchical sheet" -msgstr "Créer une Feuille Hiérachique" - -#: eeschema/menubar.cpp:316 -msgid "Import Hierarchical Label" -msgstr "Importer Label Hiérarchique" - -#: eeschema/menubar.cpp:317 -msgid "Place a pin sheet created by importing a hierarchical label from sheet" -msgstr "Placer une pin hiérarchique créée par importation d'un label hiérarchique de la feuille" - -#: eeschema/menubar.cpp:326 -msgid "Add Hierarchical Pin to Sheet" -msgstr "Ajouter Pins de Hiérarchie dans feuille" - -#: eeschema/menubar.cpp:327 -msgid "Place a hierarchical pin to sheet" -msgstr "Addition de pins de hiérarchie dans les feuilles symboles de hiérarchie" - -#: eeschema/menubar.cpp:338 -msgid "Graphic line or polygon" -msgstr "Ligne ou polygone graphique" - -#: eeschema/menubar.cpp:339 -msgid "Place graphic lines or polygons" -msgstr "Placer lignes ou polygones graphiques" - -#: eeschema/menubar.cpp:348 -msgid "Graphic text (comment)" -msgstr "Ttextes graphiques (commentaires)" - -#: eeschema/menubar.cpp:359 -msgid "Library preferences" -msgstr "Préférences pour Librairie" - -#: eeschema/menubar.cpp:365 -msgid "Color preferences" -msgstr "Préférences de couleurs" - -#: eeschema/menubar.cpp:371 -msgid "&Options" -msgstr "&Options" - -#: eeschema/menubar.cpp:372 -msgid "General options..." -msgstr "Options Générales..." - -#: eeschema/menubar.cpp:382 -msgid "&Save preferences" -msgstr "&Sauver Préférences" - -#: eeschema/menubar.cpp:386 -msgid "&Read preferences" -msgstr "&Lire Préférences" - -#: eeschema/menubar.cpp:397 -msgid "Open the eeschema manual" -msgstr "Ouvrir la documentation de eeschema" - -#: eeschema/menubar.cpp:402 -msgid "&About" -msgstr "&Au Sujet de" - -#: eeschema/menubar.cpp:402 -msgid "About eeschema schematic designer" -msgstr "Au sujet de Eeschema (outil de conception schématique)" - -#: eeschema/menubar.cpp:408 -msgid "&Edit" -msgstr "&Editer" - -#: eeschema/menubar.cpp:409 -msgid "&View" -msgstr "&Voir" - -#: eeschema/menubar.cpp:410 -msgid "&Place" -msgstr "&Placer" +#: eeschema/symbedit.cpp:170 +#, c-format +msgid "Save Symbol in [%s]" +msgstr "Symbole sauvé en [%s]" #: eeschema/edit_component_in_schematic.cpp:331 msgid "No Component Name!" @@ -8887,12 +8896,12 @@ msgid "Open an existing project" msgstr "Ouvrir un projet existant" #: kicad/buildmnu.cpp:140 -#: kicad/buildmnu.cpp:383 +#: kicad/buildmnu.cpp:379 msgid "Start a new project" msgstr "Créer un nouveau projet" #: kicad/buildmnu.cpp:149 -#: kicad/buildmnu.cpp:402 +#: kicad/buildmnu.cpp:398 msgid "Save current project" msgstr "Sauver le projet courrant" @@ -8917,86 +8926,90 @@ msgid "Quit kicad" msgstr "Quitter KiCad" #: kicad/buildmnu.cpp:209 -msgid "&Editor" -msgstr "&Editeur" +msgid "Text E&ditor" +msgstr "&Editeur de Texte" #: kicad/buildmnu.cpp:210 -msgid "Text editor" -msgstr "Editeur de Texte" +msgid "Open prefered text editor" +msgstr "Lancer l'éditeur de texte préféré" #: kicad/buildmnu.cpp:218 msgid "&Browse Files" msgstr "&Examen Fichiers" #: kicad/buildmnu.cpp:219 -msgid "Read or edit files" -msgstr "Lire ou Editer fichiers" +msgid "Read or edit files with text editor" +msgstr "Lire ou éditer des fichiers avec l'éditeur de texte" #: kicad/buildmnu.cpp:231 -msgid "&Select Editor" -msgstr "&Sélection Editeur" - -#: kicad/buildmnu.cpp:232 -msgid "Select your prefered editor for file browsing" -msgstr "Choisir son pour examen de fichiers" - -#: kicad/buildmnu.cpp:244 msgid "Fonts" msgstr "Fonte" -#: kicad/buildmnu.cpp:245 +#: kicad/buildmnu.cpp:232 msgid "Font preferences" msgstr "Préférences de fontes" -#: kicad/buildmnu.cpp:259 +#: kicad/buildmnu.cpp:240 +msgid "&Text Editor" +msgstr "&Editeur de Texte" + +#: kicad/buildmnu.cpp:241 +msgid "Select your prefered text editor" +msgstr "Choisir son éditeur de texte préféré" + +#: kicad/buildmnu.cpp:255 msgid "Default PDF Viewer" msgstr "Visualisateur PDF par défaut" -#: kicad/buildmnu.cpp:260 +#: kicad/buildmnu.cpp:256 msgid "Use the default (system) PDF viewer used to browse datasheets" msgstr "Utiliser le visualisateur PDF par défaut pour afficher les documentations" -#: kicad/buildmnu.cpp:271 +#: kicad/buildmnu.cpp:267 msgid "Favourite PDF Viewer" msgstr "Visualisateur PDF préféré" -#: kicad/buildmnu.cpp:272 +#: kicad/buildmnu.cpp:268 msgid "Use your favourite PDF viewer used to browse datasheets" msgstr "Utiliser le visualisateur PDF préférét pour afficher les documentations" -#: kicad/buildmnu.cpp:283 +#: kicad/buildmnu.cpp:279 msgid "Select Pdf Viewer" msgstr "Sélection Visualisateur PDF" -#: kicad/buildmnu.cpp:284 +#: kicad/buildmnu.cpp:280 msgid "Select your favourite PDF viewer used to browse datasheets" msgstr "Sélectionner le visualisateur PDF favori pour afficher les documents" -#: kicad/buildmnu.cpp:290 -msgid "Pdf Browser" +#: kicad/buildmnu.cpp:286 +msgid "Pdf Viewer" msgstr "Visualisateur PDF" -#: kicad/buildmnu.cpp:306 +#: kicad/buildmnu.cpp:287 +msgid "Pdf viewer preferences" +msgstr "Préférences pour le visualisateur PDF" + +#: kicad/buildmnu.cpp:302 msgid "Open the kicad manual" msgstr "Ouvrir la documentation de kicad" -#: kicad/buildmnu.cpp:315 +#: kicad/buildmnu.cpp:311 msgid "About kicad project manager" msgstr "Au sujet de Kicad, gestionnaire de projet" -#: kicad/buildmnu.cpp:322 +#: kicad/buildmnu.cpp:318 msgid "&Browse" msgstr "&Examiner" -#: kicad/buildmnu.cpp:392 +#: kicad/buildmnu.cpp:388 msgid "Load existing project" msgstr "Ouvrir un projet existant" -#: kicad/buildmnu.cpp:415 +#: kicad/buildmnu.cpp:411 msgid "Archive all project files" msgstr "Archiver les fichiers du projet" -#: kicad/buildmnu.cpp:428 +#: kicad/buildmnu.cpp:424 msgid "Refresh project tree" msgstr "Mettre a jour l'affichage du projet" @@ -9153,6 +9166,7 @@ msgid "Layer modified, Continue ?" msgstr "Couche modifiée, Continuer ?" #: gerbview/gerbview_config.cpp:147 +#: gerbview/process_config.cpp:117 msgid "Save config file" msgstr "Sauver config" @@ -9713,7 +9727,7 @@ msgstr "Langage" #: common/edaappl.cpp:605 msgid "Select application language (only for testing!)" -msgstr "" +msgstr "Choisir le langage (seulement pour tests!)" #: common/common.cpp:105 msgid " (\"):" @@ -10412,10 +10426,6 @@ msgstr "Afficher Modules Cmp" msgid "Show Modules Cu" msgstr "Afficher Modules Cu" -#: pcbnew/dialog_pad_edit.h:62 -msgid "Pad properties" -msgstr "Propriétés des Pads" - #: pcbnew/dialog_copper_zones_base.h:99 msgid "Fill Zones Options" msgstr "Options de Remplissage de Zone" @@ -10424,6 +10434,10 @@ msgstr "Options de Remplissage de Zone" msgid "Non Copper Zones Properties" msgstr "Propriétés des Zones sur couches non cuivre" +#: pcbnew/dialog_pad_properties_base.h:90 +msgid "Pad Properties" +msgstr "Propriétés du Pad" + #: pcbnew/dialog_gendrill.h:50 msgid "Drill Files Generation" msgstr "Génération Fichiers de Perçagee" @@ -10736,6 +10750,48 @@ msgstr "Imprimer" msgid "Create SVG file" msgstr "Créer Fichier SVG" +#~ msgid "Comp layer" +#~ msgstr "Couche Cmp" +#~ msgid "New schematic sheet" +#~ msgstr "Nouvelle feuille schématique" + +#, fuzzy +#~ msgid "Open a schematic sheet" +#~ msgstr "Ouvrir un Projet schématique" +#~ msgid "Save project" +#~ msgstr "Sauver projet" +#~ msgid "Save &Current sheet" +#~ msgstr "Sauver &Feuille active" +#~ msgid "Save current sheet only" +#~ msgstr "Sauver la feuille active uniquement" +#~ msgid "Save Current sheet &as.." +#~ msgstr "Sauver la feuille &active sous.." +#~ msgid "&Editor" +#~ msgstr "&Editeur" +#~ msgid "Text editor" +#~ msgstr "Editeur de Texte" +#~ msgid "&Select Editor" +#~ msgstr "&Sélection Editeur" +#~ msgid "Pdf Browser" +#~ msgstr "Visualisateur PDF" +#~ msgid "Place the wire to bus entry" +#~ msgstr "Placer des entrées de bus (type fil vers bus)" +#~ msgid "Place bus to bus entry" +#~ msgstr "Placer entrée de bus (type bus vers bus)" +#~ msgid "" +#~ "Place the global label.\n" +#~ "Warning: all global labels with the same name are connected in whole " +#~ "hierarchy" +#~ msgstr "" +#~ "Placer un label global.\n" +#~ "Attention: tous les labels globaux de même nom sont connecté dans toute " +#~ "la hiérarchie" +#~ msgid "" +#~ "Place the hierarchical label. This label will be seen as a pin sheet in " +#~ "the sheet symbol" +#~ msgstr "" +#~ "Placer un label hiérachique. Ce label sera vu comme une pin dans la " +#~ "feuille mère symbole" #~ msgid "Print on current printer" #~ msgstr "Imprimer sur l'imprimante par défaut" #~ msgid "Plot HPGL, PostScript, SVG" @@ -10746,8 +10802,6 @@ msgstr "Créer Fichier SVG" #~ msgstr "&Ouvrir Projet" #~ msgid "&New Project" #~ msgstr "&Nouveau Projet" -#~ msgid "&Save Project" -#~ msgstr "&Sauver Projet" #~ msgid "&About Kicad" #~ msgstr "&Au Sujet de Kicad" #~ msgid "&Projects" diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index a6bda88d3d..179826118a 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -57,7 +57,8 @@ set(PCBNEW_SRCS # dialog_netlist.cpp zones_non_copper_type_functions.cpp dialog_non_copper_zones_properties_base.cpp -# dialog_pad_edit.cpp + dialog_pad_properties.cpp + dialog_pad_properties_base.cpp dialog_setup_libs.cpp dialog_orient_footprints.cpp # dialog_track_options.cpp @@ -70,7 +71,6 @@ set(PCBNEW_SRCS edit.cpp editedge.cpp editmod.cpp - editpads.cpp editrack.cpp editrack-part2.cpp edit_track_width.cpp diff --git a/pcbnew/dialog_copper_zones.cpp b/pcbnew/dialog_copper_zones.cpp index f1b906c05c..4bd0562f47 100644 --- a/pcbnew/dialog_copper_zones.cpp +++ b/pcbnew/dialog_copper_zones.cpp @@ -40,11 +40,12 @@ dialog_copper_zone::dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING* z /************************************************************************************************/ { m_Parent = parent; + m_Config = m_Parent->m_Parent->m_EDA_Config; m_Zone_Setting = zone_setting; m_NetSorting = 1; // 0 = alphabetic sort, 1 = pad count sort - if( m_Parent->m_Parent->m_EDA_Config ) + if( m_Config ) { - m_NetSorting = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_SORT_OPTION_KEY, 1l ); + m_NetSorting = m_Config->Read( ZONE_NET_SORT_OPTION_KEY, 1l ); } SetReturnCode( ZONE_ABORT ); // Will be changed on buttons click @@ -70,8 +71,8 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) m_GridCtrl->SetLabel( msg ); msg = ReturnStringFromValue( g_UnitMetric, - m_Zone_Setting->m_ZoneClearance, - m_Parent->m_InternalUnits ); + m_Zone_Setting->m_ZoneClearance, + m_Parent->m_InternalUnits ); m_ZoneClearanceCtrl->SetValue( msg ); if( g_Zone_45_Only ) @@ -85,8 +86,8 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) 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; @@ -98,8 +99,8 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) m_GridCtrl->SetSelection( selection ); msg = ReturnStringFromValue( g_UnitMetric, - m_Zone_Setting->m_ZoneClearance, - m_Parent->m_InternalUnits ); + m_Zone_Setting->m_ZoneClearance, + m_Parent->m_InternalUnits ); m_ZoneClearanceCtrl->SetValue( msg ); switch( m_Zone_Setting->m_Zone_Pad_Options ) @@ -135,11 +136,11 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) AddUnitSymbol( *m_AntipadSizeText, g_UnitMetric ); AddUnitSymbol( *m_CopperBridgeWidthText, g_UnitMetric ); PutValueInLocalUnits( *m_AntipadSizeValue, - m_Zone_Setting->m_ThermalReliefGapValue, - PCB_INTERNAL_UNIT ); + m_Zone_Setting->m_ThermalReliefGapValue, + PCB_INTERNAL_UNIT ); PutValueInLocalUnits( *m_CopperWidthValue, - m_Zone_Setting->m_ThermalReliefCopperBridgeValue, - PCB_INTERNAL_UNIT ); + m_Zone_Setting->m_ThermalReliefCopperBridgeValue, + PCB_INTERNAL_UNIT ); switch( m_Zone_Setting->m_Zone_HatchingStyle ) { @@ -180,19 +181,17 @@ void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event ) m_NetSortingOption->SetSelection( m_NetSorting ); - wxString NetNameFilter; - if( m_Parent->m_Parent->m_EDA_Config ) + wxString NetNameFilter = wxT( "N_0*" ); + if( m_Config ) { NetNameFilter = - m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT( "N_0*" ) ); + m_Config->Read( ZONE_NET_FILTER_STRING_KEY ); } m_NetNameFilter->SetValue( NetNameFilter ); wxArrayString ListNetName; - m_Parent->m_Pcb->ReturnSortedNetnamesList( - ListNetName, - m_NetSorting == - 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT ); + m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName, + m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT ); if( m_NetSorting != 0 ) { @@ -286,10 +285,12 @@ bool dialog_copper_zone::AcceptOptions( bool aPromptForErrors, bool aUseExportab m_Zone_Setting->m_ArcToSegmentsCount = m_ArcApproximationOpt->GetSelection() == 1 ? 32 : 16; - if( m_Parent->m_Parent->m_EDA_Config ) + if( m_Config ) { - m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, - (long) m_Zone_Setting->m_Zone_HatchingStyle ); + m_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, + (long) m_Zone_Setting->m_Zone_HatchingStyle ); + wxString Filter = m_NetNameFilter->GetValue(); + m_Config->Write( ZONE_NET_FILTER_STRING_KEY, Filter ); } switch( m_GridCtrl->GetSelection() ) @@ -315,7 +316,7 @@ bool dialog_copper_zone::AcceptOptions( bool aPromptForErrors, bool aUseExportab m_Zone_Setting->m_GridFillValue = 0; #if 0 // I hope this feature works fine ( JP Charras) 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" ) ); #endif break; } @@ -331,14 +332,14 @@ bool dialog_copper_zone::AcceptOptions( bool aPromptForErrors, bool aUseExportab m_Zone_Setting->m_FilledAreasShowMode = m_ShowFilledAreasInSketchOpt->IsChecked() ? 1 : 0; m_Zone_Setting->m_ThermalReliefGapValue = ReturnValueFromTextCtrl( *m_AntipadSizeValue, - PCB_INTERNAL_UNIT ); + 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) m_Zone_Setting->m_ThermalReliefGapValue ); - m_Parent->m_Parent->m_EDA_Config->Write( + m_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, + (long) m_Zone_Setting->m_ThermalReliefGapValue ); + m_Config->Write( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, (long) m_Zone_Setting-> m_ThermalReliefCopperBridgeValue ); @@ -410,11 +411,11 @@ void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event ) } m_ListNetNameSelection->Clear(); m_ListNetNameSelection->InsertItems( ListNetName, 0 ); - if( m_Parent->m_Parent->m_EDA_Config ) + if( m_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_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting ); + wxString Filter = m_NetNameFilter->GetValue(); + m_Config->Write( ZONE_NET_FILTER_STRING_KEY, Filter ); } // Select and isplay current zone net name in listbox: diff --git a/pcbnew/dialog_copper_zones.h b/pcbnew/dialog_copper_zones.h index bdd2cfd512..6ed479388a 100644 --- a/pcbnew/dialog_copper_zones.h +++ b/pcbnew/dialog_copper_zones.h @@ -11,6 +11,7 @@ class dialog_copper_zone: public dialog_copper_zone_base { public: WinEDA_PcbFrame* m_Parent; + wxConfig* m_Config; // Current config 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 diff --git a/pcbnew/dialog_module_edit.rc b/pcbnew/dialog_module_edit.rc deleted file mode 100644 index b86c4e2265..0000000000 --- a/pcbnew/dialog_module_edit.rc +++ /dev/null @@ -1 +0,0 @@ -#include "wx/msw/wx.rc" diff --git a/pcbnew/dialog_pad_edit.cpp b/pcbnew/dialog_pad_edit.cpp deleted file mode 100644 index 731306773c..0000000000 --- a/pcbnew/dialog_pad_edit.cpp +++ /dev/null @@ -1,409 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dialog_pad_edit.cpp -// Purpose: -// Author: jean-pierre Charras -// Modified by: -// Created: 28/02/2006 13:34:48 -// RCS-ID: -// Copyright: License GNU -// Licence: -///////////////////////////////////////////////////////////////////////////// - -// Generated by DialogBlocks (unregistered), 28/02/2006 13:34:48 - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "dialog_pad_edit.h" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include "wx/wx.h" -#endif - -////@begin includes -////@end includes - -#include "dialog_pad_edit.h" - -////@begin XPM images -////@end XPM images - -/*! - * WinEDA_PadPropertiesFrame type definition - */ - -IMPLEMENT_DYNAMIC_CLASS( WinEDA_PadPropertiesFrame, wxDialog ) - -/*! - * WinEDA_PadPropertiesFrame event table definition - */ - -BEGIN_EVENT_TABLE( WinEDA_PadPropertiesFrame, wxDialog ) - -////@begin WinEDA_PadPropertiesFrame event table entries - EVT_RADIOBOX( ID_RADIOBOX_DRILL_SHAPE, WinEDA_PadPropertiesFrame::OnRadioboxDrillShapeSelected ) - - EVT_RADIOBOX( ID_LISTBOX_ORIENT_PAD, WinEDA_PadPropertiesFrame::OnListboxOrientPadSelected ) - - EVT_RADIOBOX( ID_LISTBOX_SHAPE_PAD, WinEDA_PadPropertiesFrame::OnListboxShapePadSelected ) - - EVT_RADIOBOX( ID_LISTBOX_TYPE_PAD, WinEDA_PadPropertiesFrame::OnListboxTypePadSelected ) - - EVT_BUTTON( wxID_OK, WinEDA_PadPropertiesFrame::OnOkClick ) - - EVT_BUTTON( wxID_CANCEL, WinEDA_PadPropertiesFrame::OnCancelClick ) - -////@end WinEDA_PadPropertiesFrame event table entries - -END_EVENT_TABLE() - -/*! - * WinEDA_PadPropertiesFrame constructors - */ - -WinEDA_PadPropertiesFrame::WinEDA_PadPropertiesFrame( ) -{ -} - -WinEDA_PadPropertiesFrame::WinEDA_PadPropertiesFrame( WinEDA_BasePcbFrame* parent, - D_PAD * Pad,wxDC * DC, - wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) -{ - m_Parent = parent; - m_DC = DC; - m_Module = NULL; - CurrentPad = Pad; - - if ( CurrentPad ) - { - Current_PadNetName = CurrentPad->m_Netname; - g_Current_PadName = CurrentPad->ReturnStringPadName(); - m_Module = (MODULE*) CurrentPad->m_Parent; - } - - Create(parent, id, caption, pos, size, style); -} - -/*! - * WinEDA_PadPropertiesFrame creator - */ - -bool WinEDA_PadPropertiesFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) -{ -////@begin WinEDA_PadPropertiesFrame member initialisation - m_LeftBoxSizer = NULL; - m_PadNumCtrl = NULL; - m_PadNetNameCtrl = NULL; - m_PadPositionBoxSizer = NULL; - m_DrillShapeBoxSizer = NULL; - m_DrillShapeCtrl = NULL; - m_PadOptSizer = NULL; - m_PadOrient = NULL; - m_PadShape = NULL; - m_PadType = NULL; - m_PadLayerCu = NULL; - m_PadLayerCmp = NULL; - m_PadLayerAdhCmp = NULL; - m_PadLayerAdhCu = NULL; - m_PadLayerPateCmp = NULL; - m_PadLayerPateCu = NULL; - m_PadLayerSilkCmp = NULL; - m_PadLayerSilkCu = NULL; - m_PadLayerMaskCmp = NULL; - m_PadLayerMaskCu = NULL; - m_PadLayerECO1 = NULL; - m_PadLayerECO2 = NULL; - m_PadLayerDraft = NULL; -////@end WinEDA_PadPropertiesFrame member initialisation - -////@begin WinEDA_PadPropertiesFrame creation - SetExtraStyle(wxWS_EX_BLOCK_EVENTS); - wxDialog::Create( parent, id, caption, pos, size, style ); - - CreateControls(); - if (GetSizer()) - { - GetSizer()->SetSizeHints(this); - } - Centre(); -////@end WinEDA_PadPropertiesFrame creation - return true; -} - -/*! - * Control creation for WinEDA_PadPropertiesFrame - */ - -void WinEDA_PadPropertiesFrame::CreateControls() -{ - SetFont(*g_DialogFont); -////@begin WinEDA_PadPropertiesFrame content construction - // Generated by DialogBlocks, 30/07/2008 22:05:19 (unregistered) - - WinEDA_PadPropertiesFrame* itemDialog1 = this; - - wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL); - itemDialog1->SetSizer(itemBoxSizer2); - - m_LeftBoxSizer = new wxBoxSizer(wxVERTICAL); - itemBoxSizer2->Add(m_LeftBoxSizer, 0, wxGROW|wxALL, 5); - - wxStaticText* itemStaticText4 = new wxStaticText( itemDialog1, wxID_STATIC, _("Pad Num :"), wxDefaultPosition, wxDefaultSize, 0 ); - m_LeftBoxSizer->Add(itemStaticText4, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - - m_PadNumCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL_PADNUM, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); - m_LeftBoxSizer->Add(m_PadNumCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); - - wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("Pad Net Name :"), wxDefaultPosition, wxDefaultSize, 0 ); - m_LeftBoxSizer->Add(itemStaticText6, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - - m_PadNetNameCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL_NETNAME, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); - m_LeftBoxSizer->Add(m_PadNetNameCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); - - m_PadPositionBoxSizer = new wxBoxSizer(wxVERTICAL); - m_LeftBoxSizer->Add(m_PadPositionBoxSizer, 0, wxGROW|wxTOP, 5); - - m_DrillShapeBoxSizer = new wxBoxSizer(wxVERTICAL); - itemBoxSizer2->Add(m_DrillShapeBoxSizer, 0, wxGROW|wxTOP, 5); - - wxArrayString m_DrillShapeCtrlStrings; - m_DrillShapeCtrlStrings.Add(_("Circle")); - m_DrillShapeCtrlStrings.Add(_("Oval")); - m_DrillShapeCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX_DRILL_SHAPE, _("Drill Shape:"), wxDefaultPosition, wxDefaultSize, m_DrillShapeCtrlStrings, 1, wxRA_SPECIFY_COLS ); - m_DrillShapeCtrl->SetSelection(0); - m_DrillShapeBoxSizer->Add(m_DrillShapeCtrl, 0, wxGROW|wxALL, 5); - - m_PadOptSizer = new wxBoxSizer(wxVERTICAL); - itemBoxSizer2->Add(m_PadOptSizer, 0, wxGROW|wxALL, 5); - - wxArrayString m_PadOrientStrings; - m_PadOrientStrings.Add(_("0")); - m_PadOrientStrings.Add(_("90")); - m_PadOrientStrings.Add(_("-90")); - m_PadOrientStrings.Add(_("180")); - m_PadOrientStrings.Add(_("User")); - m_PadOrient = new wxRadioBox( itemDialog1, ID_LISTBOX_ORIENT_PAD, _("Pad Orient:"), wxDefaultPosition, wxDefaultSize, m_PadOrientStrings, 1, wxRA_SPECIFY_COLS ); - m_PadOrient->SetSelection(0); - m_PadOptSizer->Add(m_PadOrient, 0, wxGROW|wxALL, 5); - - wxArrayString m_PadShapeStrings; - m_PadShapeStrings.Add(_("Circle")); - m_PadShapeStrings.Add(_("Oval")); - m_PadShapeStrings.Add(_("Rect")); - m_PadShapeStrings.Add(_("Trapezoidal")); - m_PadShape = new wxRadioBox( itemDialog1, ID_LISTBOX_SHAPE_PAD, _("Pad Shape:"), wxDefaultPosition, wxDefaultSize, m_PadShapeStrings, 1, wxRA_SPECIFY_COLS ); - m_PadShape->SetSelection(0); - m_PadOptSizer->Add(m_PadShape, 0, wxGROW|wxALL, 5); - - wxArrayString m_PadTypeStrings; - m_PadTypeStrings.Add(_("Standard")); - m_PadTypeStrings.Add(_("SMD")); - m_PadTypeStrings.Add(_("Conn")); - m_PadType = new wxRadioBox( itemDialog1, ID_LISTBOX_TYPE_PAD, _("Pad Type:"), wxDefaultPosition, wxDefaultSize, m_PadTypeStrings, 1, wxRA_SPECIFY_COLS ); - m_PadType->SetSelection(0); - m_PadOptSizer->Add(m_PadType, 0, wxGROW|wxALL, 5); - - wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer2->Add(itemBoxSizer15, 0, wxGROW|wxALL, 5); - - wxButton* itemButton16 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton16->SetForegroundColour(wxColour(204, 0, 0)); - itemBoxSizer15->Add(itemButton16, 0, wxGROW|wxALL, 5); - - wxButton* itemButton17 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton17->SetForegroundColour(wxColour(0, 0, 255)); - itemBoxSizer15->Add(itemButton17, 0, wxGROW|wxALL, 5); - - wxStaticBox* itemStaticBoxSizer18Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Layers:")); - wxStaticBoxSizer* itemStaticBoxSizer18 = new wxStaticBoxSizer(itemStaticBoxSizer18Static, wxVERTICAL); - itemBoxSizer15->Add(itemStaticBoxSizer18, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT, 5); - - m_PadLayerCu = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Copper layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerCu->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerCu, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); - - m_PadLayerCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Comp layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerCmp->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerCmp, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); - - itemStaticBoxSizer18->Add(5, 5, 0, wxGROW|wxALL, 5); - - m_PadLayerAdhCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX2, _("Adhesive Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerAdhCmp->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerAdhCmp, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); - - m_PadLayerAdhCu = new wxCheckBox( itemDialog1, ID_CHECKBOX3, _("Adhesive Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerAdhCu->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerAdhCu, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerPateCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX4, _("Solder paste Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerPateCmp->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerPateCmp, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerPateCu = new wxCheckBox( itemDialog1, ID_CHECKBOX5, _("Solder paste Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerPateCu->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerPateCu, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerSilkCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX6, _("Silkscreen Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerSilkCmp->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerSilkCmp, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerSilkCu = new wxCheckBox( itemDialog1, ID_CHECKBOX7, _("Silkscreen Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerSilkCu->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerSilkCu, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerMaskCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX8, _("Solder mask Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerMaskCmp->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerMaskCmp, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerMaskCu = new wxCheckBox( itemDialog1, ID_CHECKBOX9, _("Solder mask Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerMaskCu->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerMaskCu, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerECO1 = new wxCheckBox( itemDialog1, ID_CHECKBOX10, _("E.C.O.1 layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerECO1->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerECO1, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerECO2 = new wxCheckBox( itemDialog1, ID_CHECKBOX11, _("E.C.O.2 layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerECO2->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerECO2, 0, wxGROW|wxLEFT|wxRIGHT, 5); - - m_PadLayerDraft = new wxCheckBox( itemDialog1, ID_CHECKBOX12, _("Draft layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_PadLayerDraft->SetValue(false); - itemStaticBoxSizer18->Add(m_PadLayerDraft, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); - -////@end WinEDA_PadPropertiesFrame content construction - - SetOthersControls(); -} - -/*! - * Should we show tooltips? - */ - -bool WinEDA_PadPropertiesFrame::ShowToolTips() -{ - return true; -} - -/*! - * Get bitmap resources - */ - -wxBitmap WinEDA_PadPropertiesFrame::GetBitmapResource( const wxString& name ) -{ - // Bitmap retrieval -////@begin WinEDA_PadPropertiesFrame bitmap retrieval - wxUnusedVar(name); - return wxNullBitmap; -////@end WinEDA_PadPropertiesFrame bitmap retrieval -} - -/*! - * Get icon resources - */ - -wxIcon WinEDA_PadPropertiesFrame::GetIconResource( const wxString& name ) -{ - // Icon retrieval -////@begin WinEDA_PadPropertiesFrame icon retrieval - wxUnusedVar(name); - return wxNullIcon; -////@end WinEDA_PadPropertiesFrame icon retrieval -} -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK - */ - -void WinEDA_PadPropertiesFrame::OnOkClick( wxCommandEvent& event ) -{ - PadPropertiesAccept(event); -} - -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL - */ - -void WinEDA_PadPropertiesFrame::OnCancelClick( wxCommandEvent& event ) -{ -////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_PadPropertiesFrame. - // Before editing this code, remove the block markers. - event.Skip(); -////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_PadPropertiesFrame. -} - - -/*! - * wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_LISTBOX_ORIENT_PAD - */ - -void WinEDA_PadPropertiesFrame::OnListboxOrientPadSelected( wxCommandEvent& event ) -{ - PadOrientEvent(event); -} - -/*! - * wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_LISTBOX_SHAPE_PAD - */ - -void WinEDA_PadPropertiesFrame::OnListboxShapePadSelected( wxCommandEvent& event ) -{ - switch (m_PadShape->GetSelection() ) - { - case 0: //CIRCLE: - m_PadDeltaSizeCtrl->Enable(FALSE, FALSE); - m_PadSizeCtrl->Enable(TRUE, FALSE); - break; - - case 1: //OVALE: - m_PadDeltaSizeCtrl->Enable(FALSE, FALSE); - m_PadSizeCtrl->Enable(TRUE, TRUE); - break; - - case 2: // PAD_RECT: - m_PadDeltaSizeCtrl->Enable(FALSE, FALSE); - m_PadSizeCtrl->Enable(TRUE, TRUE); - break; - - case 3: //TRAPEZE: - m_PadDeltaSizeCtrl->Enable(TRUE, TRUE); - m_PadSizeCtrl->Enable(TRUE, TRUE); - break; - } -} - -/*! - * wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_LISTBOX_TYPE_PAD - */ - -void WinEDA_PadPropertiesFrame::OnListboxTypePadSelected( wxCommandEvent& event ) -{ - PadTypeSelected(); -} - - -/*! - * wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_RADIOBOX_DRILL_SHAPE - */ - -void WinEDA_PadPropertiesFrame::OnRadioboxDrillShapeSelected( wxCommandEvent& event ) -{ - switch ( m_DrillShapeCtrl->GetSelection() ) - { - case 0: //CIRCLE: - m_PadDrillCtrl->Enable(TRUE,FALSE); - break; - - case 1: //OVALE: - m_PadDrillCtrl->Enable(TRUE, TRUE); - break; - } -} - - diff --git a/pcbnew/dialog_pad_edit.h b/pcbnew/dialog_pad_edit.h deleted file mode 100644 index 0e3d117fce..0000000000 --- a/pcbnew/dialog_pad_edit.h +++ /dev/null @@ -1,178 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dialog_pad_edit.h -// Purpose: -// Author: jean-pierre Charras -// Modified by: -// Created: 28/02/2006 13:34:48 -// RCS-ID: -// Copyright: License GNU -// Licence: -///////////////////////////////////////////////////////////////////////////// - -// Generated by DialogBlocks (unregistered), 28/02/2006 13:34:48 - -#ifndef _DIALOG_PAD_EDIT_H_ -#define _DIALOG_PAD_EDIT_H_ - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "dialog_pad_edit.h" -#endif - -/*! - * Includes - */ - -////@begin includes -////@end includes - -/*! - * Forward declarations - */ - -////@begin forward declarations -class wxBoxSizer; -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define ID_DIALOG 10000 -#define ID_TEXTCTRL_PADNUM 10001 -#define ID_TEXTCTRL_NETNAME 10002 -#define ID_RADIOBOX_DRILL_SHAPE 10019 -#define ID_LISTBOX_ORIENT_PAD 10003 -#define ID_LISTBOX_SHAPE_PAD 10004 -#define ID_LISTBOX_TYPE_PAD 10005 -#define ID_CHECKBOX 10006 -#define ID_CHECKBOX1 10007 -#define ID_CHECKBOX2 10008 -#define ID_CHECKBOX3 10009 -#define ID_CHECKBOX4 10010 -#define ID_CHECKBOX5 10011 -#define ID_CHECKBOX6 10012 -#define ID_CHECKBOX7 10013 -#define ID_CHECKBOX8 10014 -#define ID_CHECKBOX9 10015 -#define ID_CHECKBOX10 10016 -#define ID_CHECKBOX11 10017 -#define ID_CHECKBOX12 10018 -#define SYMBOL_WINEDA_PADPROPERTIESFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER -#define SYMBOL_WINEDA_PADPROPERTIESFRAME_TITLE _("Pad properties") -#define SYMBOL_WINEDA_PADPROPERTIESFRAME_IDNAME ID_DIALOG -#define SYMBOL_WINEDA_PADPROPERTIESFRAME_SIZE wxSize(400, 300) -#define SYMBOL_WINEDA_PADPROPERTIESFRAME_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * Compatibility - */ - -#ifndef wxCLOSE_BOX -#define wxCLOSE_BOX 0x1000 -#endif - -/*! - * WinEDA_PadPropertiesFrame class declaration - */ - -class WinEDA_PadPropertiesFrame: public wxDialog -{ - DECLARE_DYNAMIC_CLASS( WinEDA_PadPropertiesFrame ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - WinEDA_PadPropertiesFrame( ); - WinEDA_PadPropertiesFrame( WinEDA_BasePcbFrame* parent, - D_PAD * Pad,wxDC * DC, - wxWindowID id = SYMBOL_WINEDA_PADPROPERTIESFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PADPROPERTIESFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PADPROPERTIESFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PADPROPERTIESFRAME_SIZE, long style = SYMBOL_WINEDA_PADPROPERTIESFRAME_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_PADPROPERTIESFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PADPROPERTIESFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PADPROPERTIESFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PADPROPERTIESFRAME_SIZE, long style = SYMBOL_WINEDA_PADPROPERTIESFRAME_STYLE ); - - /// Creates the controls and sizers - void CreateControls(); - -////@begin WinEDA_PadPropertiesFrame event handler declarations - - /// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_RADIOBOX_DRILL_SHAPE - void OnRadioboxDrillShapeSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_LISTBOX_ORIENT_PAD - void OnListboxOrientPadSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_LISTBOX_SHAPE_PAD - void OnListboxShapePadSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_LISTBOX_TYPE_PAD - void OnListboxTypePadSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK - void OnOkClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL - void OnCancelClick( wxCommandEvent& event ); - -////@end WinEDA_PadPropertiesFrame event handler declarations - -////@begin WinEDA_PadPropertiesFrame member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end WinEDA_PadPropertiesFrame member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - - void PadPropertiesAccept(wxCommandEvent& event); - void PadTypeSelected(); - void PadOrientEvent(wxCommandEvent& event); - void SetPadLayersList(long layer_mask); - void SetOthersControls(); - -////@begin WinEDA_PadPropertiesFrame member variables - wxBoxSizer* m_LeftBoxSizer; - wxTextCtrl* m_PadNumCtrl; - wxTextCtrl* m_PadNetNameCtrl; - wxBoxSizer* m_PadPositionBoxSizer; - wxBoxSizer* m_DrillShapeBoxSizer; - wxRadioBox* m_DrillShapeCtrl; - wxBoxSizer* m_PadOptSizer; - wxRadioBox* m_PadOrient; - wxRadioBox* m_PadShape; - wxRadioBox* m_PadType; - wxCheckBox* m_PadLayerCu; - wxCheckBox* m_PadLayerCmp; - wxCheckBox* m_PadLayerAdhCmp; - wxCheckBox* m_PadLayerAdhCu; - wxCheckBox* m_PadLayerPateCmp; - wxCheckBox* m_PadLayerPateCu; - wxCheckBox* m_PadLayerSilkCmp; - wxCheckBox* m_PadLayerSilkCu; - wxCheckBox* m_PadLayerMaskCmp; - wxCheckBox* m_PadLayerMaskCu; - wxCheckBox* m_PadLayerECO1; - wxCheckBox* m_PadLayerECO2; - wxCheckBox* m_PadLayerDraft; -////@end WinEDA_PadPropertiesFrame member variables - WinEDA_BasePcbFrame * m_Parent; - wxDC * m_DC; - MODULE * m_Module; - D_PAD * CurrentPad; - - WinEDA_SizeCtrl * m_PadSizeCtrl; - WinEDA_PositionCtrl * m_PadPositionCtrl; - WinEDA_SizeCtrl * m_PadDeltaSizeCtrl; - WinEDA_SizeCtrl * m_PadOffsetCtrl; - WinEDA_SizeCtrl * m_PadDrillCtrl; - WinEDA_ValueCtrl * m_PadOrientCtrl; // Pour orientation a 0.1 degre pres - -}; - -#endif - // _DIALOG_PAD_EDIT_H_ diff --git a/pcbnew/dialog_pad_edit.pjd b/pcbnew/dialog_pad_edit.pjd deleted file mode 100644 index b1ccb5599d..0000000000 --- a/pcbnew/dialog_pad_edit.pjd +++ /dev/null @@ -1,2061 +0,0 @@ - - -

- 0 - "" - "" - "" - "" - "" - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 0 - "jean-pierre Charras" - "License GNU" - "" - 0 - 0 - "<All platforms>" - "<Any>" - "///////////////////////////////////////////////////////////////////////////// -// Name: %HEADER-FILENAME% -// Purpose: -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "///////////////////////////////////////////////////////////////////////////// -// Name: %SOURCE-FILENAME% -// Purpose: -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "///////////////////////////////////////////////////////////////////////////// -// Name: %SYMBOLS-FILENAME% -// Purpose: Symbols file -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "%HEADER-FILENAME%" -#endif - -" - "#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "%HEADER-FILENAME%" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include "wx/wx.h" -#endif - -" - " /// %BODY% -" - " -/*! - * %BODY% - */ - -" - "app_resources.h" - "app_resources.cpp" - "AppResources" - "app.h" - "app.cpp" - "Application" - 0 - "" - "<None>" - "<System>" - "utf-8" - "<System>" - "" - 0 - 0 - 4 - " " - "" - 0 - 0 - 1 - 0 - 1 - 1 - 0 - 1 - 0 -
- - - "" - "data-document" - "" - "" - 0 - 1 - 0 - 0 - - "Configurations" - "config-data-document" - "" - "" - 0 - 1 - 0 - 0 - "" - 1 - -8519680 - "" - "Debug" - "ANSI" - "Static" - "Modular" - "GUI" - "wxMSW" - "Dynamic" - "Yes" - "No" - "No" - "%WXVERSION%" - "%EXECUTABLE%" - "" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - 0 - 1 - - - - - - - "Projects" - "root-document" - "" - "project" - 1 - 1 - 0 - 1 - - "Windows" - "html-document" - "" - "dialogsfolder" - 1 - 1 - 0 - 1 - - "Pad properties" - "dialog-document" - "" - "dialog" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbDialogProxy" - 10000 - 0 - "" - 0 - "" - 0 - 0 - "ID_DIALOG" - 10000 - "WinEDA_PadPropertiesFrame" - "wxDialog" - "wxDialog" - "dialog_pad_edit.cpp" - "dialog_pad_edit.h" - "" - "Pad properties" - 1 - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "Tiled" - 0 - 1 - 0 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - "MAYBE_RESIZE_BORDER" - 0 - 1 - -1 - -1 - 400 - 300 - 0 - "" - - "wxBoxSizer H" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "wbBoxSizerProxy" - "Horizontal" - "" - 0 - 0 - 0 - "<Any platform>" - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbBoxSizerProxy" - "Vertical" - "m_LeftBoxSizer" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxStaticText: wxID_STATIC" - "dialog-control-document" - "" - "statictext" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbStaticTextProxy" - "wxID_STATIC" - 5105 - "" - "wxStaticText" - "wxStaticText" - 1 - 0 - "" - "" - "" - "Pad Num :" - -1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - "" - "" - - - "wxTextCtrl: ID_TEXTCTRL_PADNUM" - "dialog-control-document" - "" - "textctrl" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbTextCtrlProxy" - "ID_TEXTCTRL_PADNUM" - 10001 - "" - "wxTextCtrl" - "wxTextCtrl" - 1 - 0 - "" - "" - "m_PadNumCtrl" - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - 0 - - - "wxStaticText: wxID_STATIC" - "dialog-control-document" - "" - "statictext" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbStaticTextProxy" - "wxID_STATIC" - 5105 - "" - "wxStaticText" - "wxStaticText" - 1 - 0 - "" - "" - "" - "Pad Net Name :" - -1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - "" - "" - - - "wxTextCtrl: ID_TEXTCTRL_NETNAME" - "dialog-control-document" - "" - "textctrl" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbTextCtrlProxy" - "ID_TEXTCTRL_NETNAME" - 10002 - "" - "wxTextCtrl" - "wxTextCtrl" - 1 - 0 - "" - "" - "m_PadNetNameCtrl" - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - 0 - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "30/5/2006" - "wbBoxSizerProxy" - "Vertical" - "m_PadPositionBoxSizer" - "Expand" - "Centre" - 0 - 5 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - "<Any platform>" - - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "3/8/2006" - "wbBoxSizerProxy" - "Vertical" - "m_DrillShapeBoxSizer" - "Expand" - "Expand" - 0 - 5 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - "<Any platform>" - - "wxRadioBox: ID_RADIOBOX_DRILL_SHAPE" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "3/8/2006" - "wbRadioBoxProxy" - "wxEVT_COMMAND_RADIOBOX_SELECTED|OnRadioboxDrillShapeSelected" - "ID_RADIOBOX_DRILL_SHAPE" - 10019 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_DrillShapeCtrl" - "Drill Shape:" - 1 - "Circle|Oval" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbBoxSizerProxy" - "Vertical" - "m_PadOptSizer" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxRadioBox: ID_LISTBOX_ORIENT_PAD" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbRadioBoxProxy" - "wxEVT_COMMAND_RADIOBOX_SELECTED|OnListboxOrientPadSelected" - "ID_LISTBOX_ORIENT_PAD" - 10003 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_PadOrient" - "Pad Orient:" - 1 - "0|90|-90|180|User" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxRadioBox: ID_LISTBOX_SHAPE_PAD" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbRadioBoxProxy" - "wxEVT_COMMAND_RADIOBOX_SELECTED|OnListboxShapePadSelected" - "ID_LISTBOX_SHAPE_PAD" - 10004 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_PadShape" - "Pad Shape:" - 1 - "Circle|Oval|Rect|Trapezoidal" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxRadioBox: ID_LISTBOX_TYPE_PAD" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbRadioBoxProxy" - "wxEVT_COMMAND_RADIOBOX_SELECTED|OnListboxTypePadSelected" - "ID_LISTBOX_TYPE_PAD" - 10005 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_PadType" - "Pad Type:" - 1 - "Standard|SMD|Conn" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbBoxSizerProxy" - "Vertical" - "" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxButton: wxID_OK" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnOkClick" - "wxID_OK" - 5100 - "" - "wxButton" - "wxButton" - 1 - 0 - "" - "" - "" - "&OK" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "CC0000" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxButton: wxID_CANCEL" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick" - "wxID_CANCEL" - 5101 - "" - "wxButton" - "wxButton" - 1 - 0 - "" - "" - "" - "&Cancel" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "0000FF" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxStaticBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbStaticBoxSizerProxy" - "wxID_ANY" - "-1" - "Layers:" - "" - "" - "" - "" - 0 - 1 - "wxStaticBox" - "Vertical" - "Centre" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "<Any platform>" - - "wxCheckBox: ID_CHECKBOX" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX" - 10006 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerCu" - "Copper layer" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX1" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX1" - 10007 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerCmp" - "Comp layer" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbSpacerProxy" - 5 - 5 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxCheckBox: ID_CHECKBOX2" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX2" - 10008 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerAdhCmp" - "Adhesive Cmp" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX3" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX3" - 10009 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerAdhCu" - "Adhesive Copper" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX4" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX4" - 10010 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerPateCmp" - "Solder paste Cmp" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX5" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX5" - 10011 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerPateCu" - "Solder paste Copper" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX6" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX6" - 10012 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerSilkCmp" - "Silkscreen Cmp" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX7" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX7" - 10013 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerSilkCu" - "Silkscreen Copper" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX8" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX8" - 10014 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerMaskCmp" - "Solder mask Cmp" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX9" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX9" - 10015 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerMaskCu" - "Solder mask Copper" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX10" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX10" - 10016 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerECO1" - "E.C.O.1 layer" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX11" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX11" - 10017 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerECO2" - "E.C.O.2 layer" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECKBOX12" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "28/7/2006" - "wbCheckBoxProxy" - "ID_CHECKBOX12" - 10018 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_PadLayerDraft" - "Draft layer" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - - - - - - - - "Sources" - "html-document" - "" - "sourcesfolder" - 1 - 1 - 0 - 1 - - "dialog_pad_edit.rc" - "source-editor-document" - "dialog_pad_edit.rc" - "source-editor" - 0 - 0 - 1 - 0 - "28/7/2006" - "" - - - - "Images" - "html-document" - "" - "bitmapsfolder" - 1 - 1 - 0 - 1 - - - - - diff --git a/pcbnew/dialog_pad_edit.rc b/pcbnew/dialog_pad_edit.rc deleted file mode 100644 index b86c4e2265..0000000000 --- a/pcbnew/dialog_pad_edit.rc +++ /dev/null @@ -1 +0,0 @@ -#include "wx/msw/wx.rc" diff --git a/pcbnew/dialog_pad_properties.cpp b/pcbnew/dialog_pad_properties.cpp new file mode 100644 index 0000000000..9078ec0a05 --- /dev/null +++ b/pcbnew/dialog_pad_properties.cpp @@ -0,0 +1,585 @@ +/******************************************************/ +/* editpads.cpp: Pad editing functions and dialog box */ +/******************************************************/ + +#include "fctsys.h" +#include "common.h" +#include "pcbnew.h" +#include "trigo.h" + +/* Local variables */ +static wxString Current_PadNetName; + + +#define NBSHAPES 4 +int CodeShape[NBSHAPES] = /* forme des pads */ +{ + PAD_CIRCLE, PAD_OVAL, PAD_RECT, PAD_TRAPEZOID +}; + + +#define NBTYPES 4 +int CodeType[NBTYPES] = +{ + PAD_STANDARD, PAD_SMD, PAD_CONN, PAD_HOLE_NOT_PLATED +}; + +// Default mask layers for pads according to the pad type +static long Std_Pad_Layers[NBTYPES] = +{ + // PAD_STANDARD: + ALL_CU_LAYERS | SILKSCREEN_LAYER_CMP | SOLDERMASK_LAYER_CU | SOLDERMASK_LAYER_CMP, + + // PAD_CONN: + CMP_LAYER | SOLDERPASTE_LAYER_CMP | SOLDERMASK_LAYER_CMP, + + // PAD_SMD: + CMP_LAYER | SOLDERMASK_LAYER_CMP, + + //PAD_HOLE_NOT_PLATED: + CUIVRE_LAYER | SILKSCREEN_LAYER_CMP | SOLDERMASK_LAYER_CU | SOLDERMASK_LAYER_CMP +}; + + +#include "dialog_pad_properties_base.h" + + +/********************************************************************/ +/* class DialogPadProperties, derived from DialogPadPropertiesBase, */ +/* created by wxFormBuilder */ +/********************************************************************/ +class DialogPadProperties : public DialogPadPropertiesBase +{ +public: + WinEDA_BasePcbFrame* m_Parent; + wxDC* m_DC; + D_PAD* m_CurrentPad; + + WinEDA_SizeCtrl* m_PadSizeCtrl; + WinEDA_PositionCtrl* m_PadPositionCtrl; + WinEDA_SizeCtrl* m_PadDeltaSizeCtrl; + WinEDA_SizeCtrl* m_PadOffsetCtrl; + WinEDA_SizeCtrl* m_PadDrillCtrl; + +public: + DialogPadProperties( WinEDA_BasePcbFrame* parent, D_PAD* Pad, wxDC* DC ); + void InitDialog( wxInitDialogEvent& event ); + void OnPadShapeSelection( wxCommandEvent& event ); + void OnDrillShapeSelected( wxCommandEvent& event ); + void PadOrientEvent( wxCommandEvent& event ); + void PadTypeSelected( wxCommandEvent& event ); + void PadPropertiesAccept( wxCommandEvent& event ); + void SetPadLayersList( long layer_mask ); +}; + + +/*******************************************************************************************/ +DialogPadProperties::DialogPadProperties( WinEDA_BasePcbFrame* parent, D_PAD* Pad, wxDC* DC ) : + DialogPadPropertiesBase( parent ) +/*******************************************************************************************/ +{ + m_Parent = parent; + m_DC = DC; + m_CurrentPad = Pad; + + if( m_CurrentPad ) + { + Current_PadNetName = m_CurrentPad->m_Netname; + g_Current_PadName = m_CurrentPad->ReturnStringPadName(); + } +} + + +/*************************************************************/ +void WinEDA_BasePcbFrame::InstallPadOptionsFrame( D_PAD* Pad, wxDC* DC, const wxPoint& pos ) +/*************************************************************/ +{ + DialogPadProperties* frame = new DialogPadProperties( this, Pad, DC ); + + frame->ShowModal(); frame->Destroy(); +} + + +/**************************************************************/ +void DialogPadProperties::InitDialog( wxInitDialogEvent& event ) +/**************************************************************/ +{ + int tmp; + wxCommandEvent cmd_event; + + SetFont( *g_DialogFont ); + + SetFocus(); // Required under wxGTK if we want to demiss the dialog with the ESC key + + m_PadNumCtrl->SetValue( g_Current_PadName ); + m_PadNetNameCtrl->SetValue( Current_PadNetName ); + D_PAD* pad = m_CurrentPad; + if( pad == NULL ) + pad = &g_Pad_Master; + + m_PadPositionCtrl = new WinEDA_PositionCtrl( this, _( "Pad Position" ), + pad->m_Pos, + g_UnitMetric, m_PadPositionBoxSizer, + m_Parent->m_InternalUnits ); + + m_PadSizeCtrl = new WinEDA_SizeCtrl( this, _( "Pad Size" ), + pad->m_Size, + g_UnitMetric, m_PadPositionBoxSizer, + m_Parent->m_InternalUnits ); + + m_PadDeltaSizeCtrl = new WinEDA_SizeCtrl( this, _( "Delta" ), + pad->m_DeltaSize, + g_UnitMetric, m_PadPositionBoxSizer, + m_Parent->m_InternalUnits ); + + m_PadOffsetCtrl = new WinEDA_SizeCtrl( this, _( "Offset" ), + pad->m_Offset, + g_UnitMetric, m_PadPositionBoxSizer, + m_Parent->m_InternalUnits ); + + /* In second column */ + m_PadDrillCtrl = new WinEDA_SizeCtrl( this, _( "Pad drill" ), + pad->m_Drill, + g_UnitMetric, m_DrillShapeBoxSizer, + m_Parent->m_InternalUnits ); + + if( m_CurrentPad ) + { + MODULE* Module = (MODULE*) m_CurrentPad->m_Parent; + tmp = m_CurrentPad->m_Orient - Module->m_Orient; + } + else + tmp = g_Pad_Master.m_Orient; + wxString msg; msg << tmp; + m_PadOrientCtrl->SetValue( msg ); + + + // Pad Orient + switch( tmp ) + { + case 0: + m_PadOrient->SetSelection( 0 ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + case - 2700: + case 900: + m_PadOrient->SetSelection( 1 ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + case - 900: + case 2700: + m_PadOrient->SetSelection( 2 ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + case 1800: + case - 1800: + m_PadOrient->SetSelection( 3 ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + default: + m_PadOrient->SetSelection( 4 ); + break; + } + + switch( pad->m_PadShape ) + { + default: + case PAD_CIRCLE: + m_PadShape->SetSelection( 0 ); + break; + + case PAD_OVAL: + m_PadShape->SetSelection( 1 ); + break; + + case PAD_RECT: + m_PadShape->SetSelection( 2 ); + break; + + case PAD_TRAPEZOID: + m_PadShape->SetSelection( 3 ); + break; + } + + cmd_event.SetId( m_PadShape->GetSelection() ); + OnPadShapeSelection( cmd_event ); + + // Selection du type + tmp = pad->m_Attribut; + m_PadType->SetSelection( 0 ); + for( int ii = 0; ii < NBTYPES; ii++ ) + { + if( CodeType[ii] == tmp ) + { + m_PadType->SetSelection( ii ); break; + } + } + + if( pad->m_DrillShape != PAD_OVAL ) + m_DrillShapeCtrl->SetSelection( 0 ); + else + m_DrillShapeCtrl->SetSelection( 1 ); + cmd_event.SetId( m_DrillShapeCtrl->GetSelection() ); + OnDrillShapeSelected( cmd_event ); + + // Set layers used by this pad: : + if( m_CurrentPad ) + SetPadLayersList( m_CurrentPad->m_Masque_Layer ); + else + { + cmd_event.SetId( m_PadType->GetSelection() ); + PadTypeSelected( cmd_event ); + } + + if( GetSizer() ) + { + GetSizer()->SetSizeHints( this ); + } +} + + +/*********************************************************************/ +void DialogPadProperties::OnPadShapeSelection( wxCommandEvent& event ) +/*********************************************************************/ +{ + switch( m_PadShape->GetSelection() ) + { + case 0: //CIRCLE: + m_PadDeltaSizeCtrl->Enable( FALSE, FALSE ); + m_PadSizeCtrl->Enable( TRUE, FALSE ); + break; + + case 1: //OVALE: + m_PadDeltaSizeCtrl->Enable( FALSE, FALSE ); + m_PadSizeCtrl->Enable( TRUE, TRUE ); + break; + + case 2: // PAD_RECT: + m_PadDeltaSizeCtrl->Enable( FALSE, FALSE ); + m_PadSizeCtrl->Enable( TRUE, TRUE ); + break; + + case 3: //TRAPEZE: + m_PadDeltaSizeCtrl->Enable( TRUE, TRUE ); + m_PadSizeCtrl->Enable( TRUE, TRUE ); + break; + } +} + + +/**********************************************************************/ +void DialogPadProperties::OnDrillShapeSelected( wxCommandEvent& event ) +/**********************************************************************/ +{ + if ( (m_PadType->GetSelection() == 1) || (m_PadType->GetSelection() == 2) ) + { // pad type = SMD or CONN: no hole allowed + m_PadDrillCtrl->Enable( FALSE, FALSE ); + return; + } + switch( m_DrillShapeCtrl->GetSelection() ) + { + case 0: //CIRCLE: + m_PadDrillCtrl->Enable( TRUE, FALSE ); + break; + + case 1: //OVALE: + m_PadDrillCtrl->Enable( TRUE, TRUE ); + break; + } +} + + +/*******************************************************************/ +void DialogPadProperties::PadOrientEvent( wxCommandEvent& event ) +/********************************************************************/ +{ + switch( m_PadOrient->GetSelection() ) + { + case 0: + m_PadOrientCtrl->SetValue( wxT( "0" ) ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + case 1: + m_PadOrientCtrl->SetValue( wxT( "900" ) ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + case 2: + m_PadOrientCtrl->SetValue( wxT( "2700" ) ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + case 3: + m_PadOrientCtrl->SetValue( wxT( "1800" ) ); + m_PadOrientCtrl->Enable( FALSE ); + break; + + default: + m_PadOrientCtrl->Enable( TRUE ); + break; + } +} + + +/*****************************************************************/ +void DialogPadProperties::PadTypeSelected( wxCommandEvent& event ) +/*****************************************************************/ + +/* Adjust the better mask layer according to the selected pad type + */ +{ + long layer_mask; + int ii; + + ii = m_PadType->GetSelection(); + if( (ii < 0) || ( ii >= NBTYPES) ) + ii = 0; + + layer_mask = Std_Pad_Layers[ii]; + SetPadLayersList( layer_mask ); + + // Enable/disable drill dialog items: + event.SetId(m_DrillShapeCtrl->GetSelection()); + OnDrillShapeSelected( event ); +} + + +/****************************************************************/ +void DialogPadProperties::SetPadLayersList( long layer_mask ) +/****************************************************************/ + +/** SetPadLayersList + * Update the CheckBoxes state in pad layers list, + * @param layer_mask = pad layer mask (ORed layers bit mask) + */ +{ + m_PadLayerCu->SetValue( ( layer_mask & CUIVRE_LAYER ) ); + m_PadLayerCmp->SetValue( ( layer_mask & CMP_LAYER ) ); + + m_PadLayerAdhCmp->SetValue( ( layer_mask & ADHESIVE_LAYER_CMP ) ); + m_PadLayerAdhCu->SetValue( ( layer_mask & ADHESIVE_LAYER_CU ) ); + + m_PadLayerPateCmp->SetValue( ( layer_mask & SOLDERPASTE_LAYER_CMP ) ); + m_PadLayerPateCu->SetValue( ( layer_mask & SOLDERPASTE_LAYER_CU ) ); + + m_PadLayerSilkCmp->SetValue( ( layer_mask & SILKSCREEN_LAYER_CMP ) ); + m_PadLayerSilkCu->SetValue( ( layer_mask & SILKSCREEN_LAYER_CU ) ); + + m_PadLayerMaskCmp->SetValue( ( layer_mask & SOLDERMASK_LAYER_CMP ) ); + m_PadLayerMaskCu->SetValue( ( layer_mask & SOLDERMASK_LAYER_CU ) ); + + m_PadLayerECO1->SetValue( ( layer_mask & ECO1_LAYER ) ); + m_PadLayerECO2->SetValue( ( layer_mask & ECO2_LAYER ) ); + + m_PadLayerDraft->SetValue( ( layer_mask & DRAW_LAYER ) ); +} + + +/*************************************************************************/ +void DialogPadProperties::PadPropertiesAccept( wxCommandEvent& event ) +/*************************************************************************/ + +/* Met a jour les differents parametres pour le composant en cours d'édition + */ +{ + long PadLayerMask; + bool error = FALSE; + bool RastnestIsChanged = false; + + if( m_DC ) + m_Parent->DrawPanel->CursorOff( m_DC ); + + g_Pad_Master.m_Attribut = CodeType[m_PadType->GetSelection()]; + g_Pad_Master.m_PadShape = CodeShape[m_PadShape->GetSelection()]; + g_Pad_Master.m_Pos = m_PadPositionCtrl->GetValue(); + g_Pad_Master.m_Pos0 = g_Pad_Master.m_Pos; + g_Pad_Master.m_Size = m_PadSizeCtrl->GetValue(); + if( g_Pad_Master.m_PadShape == PAD_CIRCLE ) + g_Pad_Master.m_Size.y = g_Pad_Master.m_Size.x; + g_Pad_Master.m_DeltaSize = m_PadDeltaSizeCtrl->GetValue(); + g_Pad_Master.m_Offset = m_PadOffsetCtrl->GetValue(); + g_Pad_Master.m_Drill = m_PadDrillCtrl->GetValue(); + if( m_DrillShapeCtrl->GetSelection() == 0 ) + { + g_Pad_Master.m_DrillShape = PAD_CIRCLE; + g_Pad_Master.m_Drill.y = g_Pad_Master.m_Drill.x; + } + else + g_Pad_Master.m_DrillShape = PAD_OVAL; + long ovalue = 0; + wxString msg = m_PadOrientCtrl->GetValue(); + msg.ToLong( &ovalue ); + g_Pad_Master.m_Orient = ovalue; + + g_Current_PadName = m_PadNumCtrl->GetValue().Left( 4 ); + Current_PadNetName = m_PadNetNameCtrl->GetValue(); + + /* Test for incorrect values */ + if( (g_Pad_Master.m_Size.x < g_Pad_Master.m_Drill.x) + || (g_Pad_Master.m_Size.y < g_Pad_Master.m_Drill.y) ) + { + error = TRUE; + DisplayError( this, _( "Incorrect value for pad drill: pad drill bigger than pad size" ) ); + } + if( ( g_Pad_Master.m_Size.x / 2 <= ABS( g_Pad_Master.m_Offset.x ) ) + || ( g_Pad_Master.m_Size.y / 2 <= ABS( g_Pad_Master.m_Offset.y ) ) ) + { + error = TRUE; + DisplayError( this, _( "Incorrect value for pad offset" ) ); + } + + if( error ) + { + if( m_DC ) + m_Parent->DrawPanel->CursorOn( m_DC ); + return; + } + + PadLayerMask = 0; + if( m_PadLayerCu->GetValue() ) + PadLayerMask |= CUIVRE_LAYER; + if( m_PadLayerCmp->GetValue() ) + PadLayerMask |= CMP_LAYER; + if( ( PadLayerMask & (CUIVRE_LAYER | CMP_LAYER) ) == (CUIVRE_LAYER | CMP_LAYER) ) + PadLayerMask |= ALL_CU_LAYERS; + if( m_PadLayerAdhCmp->GetValue() ) + PadLayerMask |= ADHESIVE_LAYER_CMP; + if( m_PadLayerAdhCu->GetValue() ) + PadLayerMask |= ADHESIVE_LAYER_CU; + if( m_PadLayerPateCmp->GetValue() ) + PadLayerMask |= SOLDERPASTE_LAYER_CMP; + if( m_PadLayerPateCu->GetValue() ) + PadLayerMask |= SOLDERPASTE_LAYER_CU; + if( m_PadLayerSilkCmp->GetValue() ) + PadLayerMask |= SILKSCREEN_LAYER_CMP; + if( m_PadLayerSilkCu->GetValue() ) + PadLayerMask |= SILKSCREEN_LAYER_CU; + if( m_PadLayerMaskCmp->GetValue() ) + PadLayerMask |= SOLDERMASK_LAYER_CMP; + if( m_PadLayerMaskCu->GetValue() ) + PadLayerMask |= SOLDERMASK_LAYER_CU; + if( m_PadLayerECO1->GetValue() ) + PadLayerMask |= ECO1_LAYER; + if( m_PadLayerECO2->GetValue() ) + PadLayerMask |= ECO2_LAYER; + if( m_PadLayerDraft->GetValue() ) + PadLayerMask |= DRAW_LAYER; + + g_Pad_Master.m_Masque_Layer = PadLayerMask; + + if( m_CurrentPad ) // Set Pad Name & Num + { + m_Parent->SaveCopyInUndoList( m_Parent->m_Pcb->m_Modules ); + MODULE* Module = (MODULE*) m_CurrentPad->m_Parent; + Module->m_LastEdit_Time = time( NULL ); + + if( m_DC ) // redraw the area where the pad was, without pad (delete pad on screen) + { + m_CurrentPad->m_Flags |= DO_NOT_DRAW; + m_Parent->DrawPanel->PostDirtyRect( m_CurrentPad->GetBoundingBox() ); + m_CurrentPad->m_Flags &= ~DO_NOT_DRAW; + } + m_CurrentPad->m_PadShape = g_Pad_Master.m_PadShape; + m_CurrentPad->m_Attribut = g_Pad_Master.m_Attribut; + if( m_CurrentPad->m_Pos != g_Pad_Master.m_Pos ) + { + m_CurrentPad->m_Pos = g_Pad_Master.m_Pos; + RastnestIsChanged = true; + } + + /* compute the pos 0 value, i.e. pad position for module orient = 0 i.e. + * refer to module origin (module position) */ + m_CurrentPad->m_Pos0 = m_CurrentPad->m_Pos; + m_CurrentPad->m_Pos0 -= Module->m_Pos; + m_CurrentPad->m_Orient = g_Pad_Master.m_Orient + Module->m_Orient; + RotatePoint( &m_CurrentPad->m_Pos0.x, &m_CurrentPad->m_Pos0.y, -Module->m_Orient ); + + m_CurrentPad->m_Size = g_Pad_Master.m_Size; + m_CurrentPad->m_DeltaSize = g_Pad_Master.m_DeltaSize; + m_CurrentPad->m_Drill = g_Pad_Master.m_Drill; + m_CurrentPad->m_DrillShape = g_Pad_Master.m_DrillShape; + m_CurrentPad->m_Offset = g_Pad_Master.m_Offset; + if( m_CurrentPad->m_Masque_Layer != g_Pad_Master.m_Masque_Layer ) + { + RastnestIsChanged = true; + m_CurrentPad->m_Masque_Layer = g_Pad_Master.m_Masque_Layer; + } + m_CurrentPad->SetPadName( g_Current_PadName ); + + if( m_CurrentPad->m_Netname != Current_PadNetName ) + { + if( Current_PadNetName.IsEmpty() ) + m_CurrentPad->SetNet( 0 ); + else + { + const EQUIPOT* net = m_Parent->m_Pcb->FindNet( Current_PadNetName ); + if( net ) + { + RastnestIsChanged = true; + m_CurrentPad->m_Netname = Current_PadNetName; + m_CurrentPad->SetNet( net->GetNet() ); + } + else + DisplayError( this, _( "Unknown netname, no change" ) ); + } + } + + switch( m_CurrentPad->m_PadShape ) + { + case PAD_CIRCLE: + m_CurrentPad->m_DeltaSize = wxSize( 0, 0 ); + m_CurrentPad->m_Size.y = m_CurrentPad->m_Size.x; + break; + + case PAD_RECT: + m_CurrentPad->m_DeltaSize = wxSize( 0, 0 ); + break; + + case PAD_OVAL: + m_CurrentPad->m_DeltaSize = wxSize( 0, 0 ); + break; + + case PAD_TRAPEZOID: + break; + } + + switch( m_CurrentPad->m_Attribut ) + { + case PAD_STANDARD: + break; + + case PAD_CONN: + case PAD_SMD: + m_CurrentPad->m_Offset = wxSize( 0, 0 ); + m_CurrentPad->m_Drill = wxSize( 0, 0 ); + break; + + case PAD_HOLE_NOT_PLATED: + break; + + default: + DisplayError( this, wxT( "Error: unknown pad type" ) ); + break; + } + + m_CurrentPad->ComputeRayon(); + + Module->Set_Rectangle_Encadrement(); + m_CurrentPad->Display_Infos( m_Parent ); + if( m_DC ) // redraw the area where the pad was + m_Parent->DrawPanel->PostDirtyRect( m_CurrentPad->GetBoundingBox() ); + m_Parent->GetScreen()->SetModify(); + } + + Close(); + + if( m_DC ) + m_Parent->DrawPanel->CursorOn( m_DC ); + if( RastnestIsChanged ) // The net ratsnest must be recalculated + m_Parent->m_Pcb->m_Status_Pcb = 0; +} diff --git a/pcbnew/dialog_pad_properties_base.cpp b/pcbnew/dialog_pad_properties_base.cpp new file mode 100644 index 0000000000..edaad20479 --- /dev/null +++ b/pcbnew/dialog_pad_properties_base.cpp @@ -0,0 +1,190 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_pad_properties_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DialogPadPropertiesBase::DialogPadPropertiesBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* m_MainSizer; + m_MainSizer = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* m_LeftBoxSizer; + m_LeftBoxSizer = new wxBoxSizer( wxVERTICAL ); + + m_PadNumText = new wxStaticText( this, wxID_ANY, _("Pad Num :"), wxDefaultPosition, wxDefaultSize, 0 ); + m_PadNumText->Wrap( -1 ); + m_LeftBoxSizer->Add( m_PadNumText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadNumCtrl = new wxTextCtrl( this, wxID_PADNUMCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_LeftBoxSizer->Add( m_PadNumCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_PadNameText = new wxStaticText( this, wxID_ANY, _("Pad Net Name :"), wxDefaultPosition, wxDefaultSize, 0 ); + m_PadNameText->Wrap( -1 ); + m_LeftBoxSizer->Add( m_PadNameText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadNetNameCtrl = new wxTextCtrl( this, wxID_PADNETNAMECTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_LeftBoxSizer->Add( m_PadNetNameCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_PadPositionBoxSizer = new wxBoxSizer( wxVERTICAL ); + + m_LeftBoxSizer->Add( m_PadPositionBoxSizer, 0, wxEXPAND, 5 ); + + m_MainSizer->Add( m_LeftBoxSizer, 0, wxBOTTOM|wxLEFT, 5 ); + + m_DrillShapeBoxSizer = new wxBoxSizer( wxVERTICAL ); + + wxString m_PadShapeChoices[] = { _("Circle"), _("Oval"), _("Rect"), _("Trapezoidal") }; + int m_PadShapeNChoices = sizeof( m_PadShapeChoices ) / sizeof( wxString ); + m_PadShape = new wxRadioBox( this, ID_LISTBOX_SHAPE_PAD, _("Pad Shape:"), wxDefaultPosition, wxDefaultSize, m_PadShapeNChoices, m_PadShapeChoices, 1, wxRA_SPECIFY_COLS ); + m_PadShape->SetSelection( 0 ); + m_DrillShapeBoxSizer->Add( m_PadShape, 0, wxALL|wxEXPAND, 5 ); + + + m_DrillShapeBoxSizer->Add( 0, 8, 1, wxEXPAND, 5 ); + + wxString m_DrillShapeCtrlChoices[] = { _("Circle"), _("Oval") }; + int m_DrillShapeCtrlNChoices = sizeof( m_DrillShapeCtrlChoices ) / sizeof( wxString ); + m_DrillShapeCtrl = new wxRadioBox( this, ID_RADIOBOX_DRILL_SHAPE, _("Drill Shape:"), wxDefaultPosition, wxDefaultSize, m_DrillShapeCtrlNChoices, m_DrillShapeCtrlChoices, 1, wxRA_SPECIFY_COLS ); + m_DrillShapeCtrl->SetSelection( 1 ); + m_DrillShapeBoxSizer->Add( m_DrillShapeCtrl, 0, wxALL|wxEXPAND, 5 ); + + m_MainSizer->Add( m_DrillShapeBoxSizer, 1, wxBOTTOM, 5 ); + + wxBoxSizer* m_MiddleRightBoxSizer; + m_MiddleRightBoxSizer = new wxBoxSizer( wxVERTICAL ); + + wxString m_PadOrientChoices[] = { _("0"), _("90"), _("-90"), _("180"), _("User") }; + int m_PadOrientNChoices = sizeof( m_PadOrientChoices ) / sizeof( wxString ); + m_PadOrient = new wxRadioBox( this, ID_LISTBOX_ORIENT_PAD, _("Pad Orient:"), wxDefaultPosition, wxDefaultSize, m_PadOrientNChoices, m_PadOrientChoices, 1, wxRA_SPECIFY_COLS ); + m_PadOrient->SetSelection( 0 ); + m_MiddleRightBoxSizer->Add( m_PadOrient, 0, wxALL|wxEXPAND, 5 ); + + m_PadOrientText = new wxStaticText( this, wxID_ANY, _("Pad Orient (0.1 deg)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_PadOrientText->Wrap( -1 ); + m_MiddleRightBoxSizer->Add( m_PadOrientText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadOrientCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_MiddleRightBoxSizer->Add( m_PadOrientCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + m_MiddleRightBoxSizer->Add( 0, 8, 1, wxEXPAND, 5 ); + + wxString m_PadTypeChoices[] = { _("Standard"), _("SMD"), _("Conn") }; + int m_PadTypeNChoices = sizeof( m_PadTypeChoices ) / sizeof( wxString ); + m_PadType = new wxRadioBox( this, ID_LISTBOX_TYPE_PAD, _("Pad Type:"), wxDefaultPosition, wxDefaultSize, m_PadTypeNChoices, m_PadTypeChoices, 1, wxRA_SPECIFY_COLS ); + m_PadType->SetSelection( 0 ); + m_MiddleRightBoxSizer->Add( m_PadType, 0, wxALL|wxEXPAND, 5 ); + + m_MainSizer->Add( m_MiddleRightBoxSizer, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* m_RightBoxSizer; + m_RightBoxSizer = new wxBoxSizer( wxVERTICAL ); + + m_buttonOk = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonOk->SetDefault(); + m_buttonOk->SetForegroundColour( wxColour( 209, 26, 5 ) ); + + m_RightBoxSizer->Add( m_buttonOk, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonCancel->SetForegroundColour( wxColour( 14, 2, 164 ) ); + + m_RightBoxSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + m_RightBoxSizer->Add( 0, 8, 1, wxEXPAND, 5 ); + + wxStaticBoxSizer* m_LayersSizer; + m_LayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Layers:") ), wxVERTICAL ); + + m_PadLayerCu = new wxCheckBox( this, wxID_ANY, _("Copper layer"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerCu, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerCmp = new wxCheckBox( this, wxID_ANY, _("Component layer"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerCmp, 0, wxALL, 5 ); + + + m_LayersSizer->Add( 0, 8, 1, wxEXPAND, 5 ); + + m_PadLayerAdhCmp = new wxCheckBox( this, wxID_ANY, _("Adhesive Cmp"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerAdhCmp, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerAdhCu = new wxCheckBox( this, wxID_ANY, _("Adhesive Copper"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerAdhCu, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerPateCmp = new wxCheckBox( this, wxID_ANY, _("Solder paste Cmp"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerPateCmp, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerPateCu = new wxCheckBox( this, wxID_ANY, _("Solder paste Copper"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerPateCu, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerSilkCmp = new wxCheckBox( this, wxID_ANY, _("Silkscreen Cmp"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerSilkCmp, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerSilkCu = new wxCheckBox( this, wxID_ANY, _("Silkscreen Copper"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerSilkCu, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerMaskCmp = new wxCheckBox( this, wxID_ANY, _("Solder mask Cmp"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerMaskCmp, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerMaskCu = new wxCheckBox( this, wxID_ANY, _("Solder mask Copper"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerMaskCu, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerECO1 = new wxCheckBox( this, wxID_ANY, _("E.C.O.1 layer"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerECO1, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerECO2 = new wxCheckBox( this, wxID_ANY, _("E.C.O.2 layer"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerECO2, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_PadLayerDraft = new wxCheckBox( this, wxID_ANY, _("Draft layer"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_LayersSizer->Add( m_PadLayerDraft, 0, wxALL, 5 ); + + m_RightBoxSizer->Add( m_LayersSizer, 0, 0, 5 ); + + m_MainSizer->Add( m_RightBoxSizer, 0, wxBOTTOM|wxRIGHT, 5 ); + + this->SetSizer( m_MainSizer ); + this->Layout(); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DialogPadPropertiesBase::InitDialog ) ); + m_PadShape->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::OnPadShapeSelection ), NULL, this ); + m_DrillShapeCtrl->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::OnDrillShapeSelected ), NULL, this ); + m_PadOrient->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::PadOrientEvent ), NULL, this ); + m_PadType->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::PadTypeSelected ), NULL, this ); + m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DialogPadPropertiesBase::PadPropertiesAccept ), NULL, this ); +} + +DialogPadPropertiesBase::~DialogPadPropertiesBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DialogPadPropertiesBase::InitDialog ) ); + m_PadShape->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::OnPadShapeSelection ), NULL, this ); + m_DrillShapeCtrl->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::OnDrillShapeSelected ), NULL, this ); + m_PadOrient->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::PadOrientEvent ), NULL, this ); + m_PadType->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DialogPadPropertiesBase::PadTypeSelected ), NULL, this ); + m_buttonOk->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DialogPadPropertiesBase::PadPropertiesAccept ), NULL, this ); +} diff --git a/pcbnew/dialog_pad_properties_base.fbp b/pcbnew/dialog_pad_properties_base.fbp new file mode 100644 index 0000000000..4bce91acff --- /dev/null +++ b/pcbnew/dialog_pad_properties_base.fbp @@ -0,0 +1,1504 @@ + + + + + + C++ + 1 + UTF-8 + connect + dialog_pad_properties_base + 1000 + none + 1 + dialog_pad_properties_base + + . + + 1 + 1 + 0 + + + wxBOTH + + 1 + + + + 0 + wxID_DIALOG_EDIT_PAD + + + DialogPadPropertiesBase + + 520,396 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + + Pad Properties + + + + wxSUNKEN_BORDER + + + + + + + + + + InitDialog + + + + + + + + + + + + + + + + + + + + + + + m_MainSizer + wxHORIZONTAL + none + + 5 + wxBOTTOM|wxLEFT + 0 + + + m_LeftBoxSizer + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Pad Num : + + + m_PadNumText + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_PADNUMCTRL + + 0 + + m_PadNumCtrl + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Pad Net Name : + + + m_PadNameText + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_PADNETNAMECTRL + + 0 + + m_PadNetNameCtrl + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + m_PadPositionBoxSizer + wxVERTICAL + protected + + + + + + 5 + wxBOTTOM + 1 + + + m_DrillShapeBoxSizer + wxVERTICAL + protected + + 5 + wxALL|wxEXPAND + 0 + + + "Circle" "Oval" "Rect" "Trapezoidal" + + 1 + + + 0 + ID_LISTBOX_SHAPE_PAD + Pad Shape: + 1 + + + m_PadShape + protected + + 0 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + OnPadShapeSelection + + + + + + + + + + 5 + wxEXPAND + 1 + + 8 + protected + 0 + + + + 5 + wxALL|wxEXPAND + 0 + + + "Circle" "Oval" + + 1 + + + 0 + ID_RADIOBOX_DRILL_SHAPE + Drill Shape: + 1 + + + m_DrillShapeCtrl + protected + + 1 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + OnDrillShapeSelected + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + + m_MiddleRightBoxSizer + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + + "0" "90" "-90" "180" "User" + + 1 + + + 0 + ID_LISTBOX_ORIENT_PAD + Pad Orient: + 1 + + + m_PadOrient + protected + + 0 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + PadOrientEvent + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Pad Orient (0.1 deg) + + + m_PadOrientText + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + + 0 + + m_PadOrientCtrl + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 8 + protected + 0 + + + + 5 + wxALL|wxEXPAND + 0 + + + "Standard" "SMD" "Conn" + + 1 + + + 0 + ID_LISTBOX_TYPE_PAD + Pad Type: + 1 + + + m_PadType + protected + + 0 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + PadTypeSelected + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT + 0 + + + m_RightBoxSizer + wxVERTICAL + none + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND + 0 + + + + 1 + 1 + 209,26,5 + + 0 + wxID_OK + Ok + + + m_buttonOk + protected + + + + + + + + + PadPropertiesAccept + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND + 0 + + + + 0 + 1 + 14,2,164 + + 0 + wxID_CANCEL + Cancel + + + m_buttonCancel + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 8 + protected + 0 + + + + 5 + + 0 + + wxID_ANY + Layers: + + m_LayersSizer + wxVERTICAL + none + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Copper layer + + + m_PadLayerCu + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Component layer + + + m_PadLayerCmp + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 8 + protected + 0 + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Adhesive Cmp + + + m_PadLayerAdhCmp + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Adhesive Copper + + + m_PadLayerAdhCu + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Solder paste Cmp + + + m_PadLayerPateCmp + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Solder paste Copper + + + m_PadLayerPateCu + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Silkscreen Cmp + + + m_PadLayerSilkCmp + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Silkscreen Copper + + + m_PadLayerSilkCu + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Solder mask Cmp + + + m_PadLayerMaskCmp + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Solder mask Copper + + + m_PadLayerMaskCu + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + E.C.O.1 layer + + + m_PadLayerECO1 + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + E.C.O.2 layer + + + m_PadLayerECO2 + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Draft layer + + + m_PadLayerDraft + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pcbnew/dialog_pad_properties_base.h b/pcbnew/dialog_pad_properties_base.h new file mode 100644 index 0000000000..edd917019d --- /dev/null +++ b/pcbnew/dialog_pad_properties_base.h @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __dialog_pad_properties_base__ +#define __dialog_pad_properties_base__ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class DialogPadPropertiesBase +/////////////////////////////////////////////////////////////////////////////// +class DialogPadPropertiesBase : public wxDialog +{ + private: + + protected: + enum + { + wxID_DIALOG_EDIT_PAD = 1000, + wxID_PADNUMCTRL, + wxID_PADNETNAMECTRL, + ID_LISTBOX_SHAPE_PAD, + ID_RADIOBOX_DRILL_SHAPE, + ID_LISTBOX_ORIENT_PAD, + ID_LISTBOX_TYPE_PAD, + }; + + wxStaticText* m_PadNumText; + wxTextCtrl* m_PadNumCtrl; + wxStaticText* m_PadNameText; + wxTextCtrl* m_PadNetNameCtrl; + wxBoxSizer* m_PadPositionBoxSizer; + wxBoxSizer* m_DrillShapeBoxSizer; + wxRadioBox* m_PadShape; + + wxRadioBox* m_DrillShapeCtrl; + wxRadioBox* m_PadOrient; + wxStaticText* m_PadOrientText; + wxTextCtrl* m_PadOrientCtrl; + + wxRadioBox* m_PadType; + wxButton* m_buttonOk; + wxButton* m_buttonCancel; + + wxCheckBox* m_PadLayerCu; + wxCheckBox* m_PadLayerCmp; + + wxCheckBox* m_PadLayerAdhCmp; + wxCheckBox* m_PadLayerAdhCu; + wxCheckBox* m_PadLayerPateCmp; + wxCheckBox* m_PadLayerPateCu; + wxCheckBox* m_PadLayerSilkCmp; + wxCheckBox* m_PadLayerSilkCu; + wxCheckBox* m_PadLayerMaskCmp; + wxCheckBox* m_PadLayerMaskCu; + wxCheckBox* m_PadLayerECO1; + wxCheckBox* m_PadLayerECO2; + wxCheckBox* m_PadLayerDraft; + + // Virtual event handlers, overide them in your derived class + virtual void InitDialog( wxInitDialogEvent& event ){ event.Skip(); } + virtual void OnPadShapeSelection( wxCommandEvent& event ){ event.Skip(); } + virtual void OnDrillShapeSelected( wxCommandEvent& event ){ event.Skip(); } + virtual void PadOrientEvent( wxCommandEvent& event ){ event.Skip(); } + virtual void PadTypeSelected( wxCommandEvent& event ){ event.Skip(); } + virtual void PadPropertiesAccept( wxCommandEvent& event ){ event.Skip(); } + + + public: + DialogPadPropertiesBase( wxWindow* parent, wxWindowID id = wxID_DIALOG_EDIT_PAD, const wxString& title = _("Pad Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 520,396 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSUNKEN_BORDER ); + ~DialogPadPropertiesBase(); + +}; + +#endif //__dialog_pad_properties_base__ diff --git a/pcbnew/editpads.cpp b/pcbnew/editpads.cpp deleted file mode 100644 index c29de00624..0000000000 --- a/pcbnew/editpads.cpp +++ /dev/null @@ -1,550 +0,0 @@ -/******************************************************/ -/* editpads.cpp: Pad editing functions and dialog box */ -/******************************************************/ - -#include "fctsys.h" -#include "gr_basic.h" -#include "common.h" -#include "pcbnew.h" -#include "autorout.h" -#include "trigo.h" - -#include "drag.h" - -#include "protos.h" - -/* Routines Locales */ - -/* Variables locales */ -static wxString Current_PadNetName; - - -#define NBSHAPES 4 -int CodeShape[NBSHAPES] = /* forme des pads */ -{ - PAD_CIRCLE, PAD_OVAL, PAD_RECT, PAD_TRAPEZOID -}; - - -#define NBTYPES 4 -int CodeType[NBTYPES] = -{ - PAD_STANDARD, PAD_SMD, PAD_CONN, PAD_HOLE_NOT_PLATED -}; - -// Default mask layers for pads according to the pas type -static long Std_Pad_Layers[NBTYPES] = -{ - // PAD_STANDARD: - ALL_CU_LAYERS | SILKSCREEN_LAYER_CMP | SOLDERMASK_LAYER_CU | SOLDERMASK_LAYER_CMP, - - // PAD_CONN: - CMP_LAYER | SOLDERPASTE_LAYER_CMP | SOLDERMASK_LAYER_CMP, - - // PAD_SMD: - CMP_LAYER | SOLDERMASK_LAYER_CMP, - - //PAD_HOLE_NOT_PLATED: - ALL_CU_LAYERS | SILKSCREEN_LAYER_CMP | SOLDERMASK_LAYER_CU | SOLDERMASK_LAYER_CMP -}; - - -/************************************/ -/* class WinEDA_PadPropertiesFrame */ -/************************************/ - -#include "dialog_pad_edit.cpp" - - -/*************************************************************/ -void WinEDA_BasePcbFrame::InstallPadOptionsFrame( D_PAD* Pad, - wxDC* DC, const wxPoint& pos ) -/*************************************************************/ -{ - WinEDA_PadPropertiesFrame* frame = new WinEDA_PadPropertiesFrame( this, - Pad, DC ); - - frame->ShowModal(); frame->Destroy(); -} - - -/********************************************************/ -void WinEDA_PadPropertiesFrame::SetOthersControls() -/********************************************************/ -{ - int tmp; - - m_PadNumCtrl->SetValue( g_Current_PadName ); - m_PadNetNameCtrl->SetValue( Current_PadNetName ); - - m_PadPositionCtrl = new WinEDA_PositionCtrl( this, _( - "Pad Position" ), - CurrentPad ? CurrentPad->m_Pos : g_Pad_Master - .m_Pos, - g_UnitMetric, m_PadPositionBoxSizer, - m_Parent->m_InternalUnits ); - - m_PadSizeCtrl = new WinEDA_SizeCtrl( this, _( - "Pad Size" ), - CurrentPad ? CurrentPad->m_Size : g_Pad_Master. - m_Size, - g_UnitMetric, m_PadPositionBoxSizer, - m_Parent->m_InternalUnits ); - - m_PadDeltaSizeCtrl = new WinEDA_SizeCtrl( this, _( - "Delta" ), - CurrentPad ? CurrentPad->m_DeltaSize : - g_Pad_Master.m_DeltaSize, - g_UnitMetric, m_PadPositionBoxSizer, - m_Parent->m_InternalUnits ); - - m_PadOffsetCtrl = new WinEDA_SizeCtrl( this, _( - "Offset" ), - CurrentPad ? CurrentPad->m_Offset : g_Pad_Master. - m_Offset, - g_UnitMetric, m_PadPositionBoxSizer, - m_Parent->m_InternalUnits ); - - /* In second column */ - - m_PadDrillCtrl = new WinEDA_SizeCtrl( this, _( - "Pad drill" ), - CurrentPad ? CurrentPad->m_Drill : g_Pad_Master.m_Drill, - g_UnitMetric, m_DrillShapeBoxSizer, - m_Parent->m_InternalUnits ); - - if( CurrentPad ) - { - tmp = CurrentPad->m_Orient - m_Module->m_Orient; - } - else - tmp = g_Pad_Master.m_Orient; - m_DrillShapeBoxSizer->Add( 5, 5, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 ); - m_PadOrientCtrl = new WinEDA_ValueCtrl( this, _( "Pad Orientation (in 0.1 degrees)" ), - tmp, 2, m_DrillShapeBoxSizer, 1 ); - - - // Pad Orient - switch( tmp ) - { - case 0: - m_PadOrient->SetSelection( 0 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - case - 2700: - case 900: - m_PadOrient->SetSelection( 1 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - case - 900: - case 2700: - m_PadOrient->SetSelection( 2 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - case 1800: - case - 1800: - m_PadOrient->SetSelection( 3 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - default: - m_PadOrient->SetSelection( 4 ); - break; - } - - tmp = CurrentPad ? CurrentPad->m_PadShape : g_Pad_Master.m_PadShape; - - switch( tmp ) - { - case PAD_CIRCLE: - m_PadDeltaSizeCtrl->Enable( FALSE, FALSE ); - m_PadSizeCtrl->Enable( TRUE, FALSE ); - m_PadShape->SetSelection( 0 ); - break; - - case PAD_OVAL: - m_PadDeltaSizeCtrl->Enable( FALSE, FALSE ); - m_PadSizeCtrl->Enable( TRUE, TRUE ); - m_PadShape->SetSelection( 1 ); - break; - - case PAD_RECT: - m_PadDeltaSizeCtrl->Enable( FALSE, FALSE ); - m_PadSizeCtrl->Enable( TRUE, TRUE ); - m_PadShape->SetSelection( 2 ); - break; - - case PAD_TRAPEZOID: - m_PadDeltaSizeCtrl->Enable( TRUE, TRUE ); - m_PadSizeCtrl->Enable( TRUE, TRUE ); - m_PadShape->SetSelection( 3 ); - break; - } - - // Selection du type - tmp = CurrentPad ? CurrentPad->m_Attribut : g_Pad_Master.m_Attribut; - m_PadType->SetSelection( 0 ); - for( int ii = 0; ii < NBTYPES; ii++ ) - { - if( CodeType[ii] == tmp ) - { - m_PadType->SetSelection( ii ); break; - } - } - - tmp = CurrentPad ? CurrentPad->m_DrillShape : g_Pad_Master.m_DrillShape; - - switch( tmp ) - { - case PAD_CIRCLE: - m_DrillShapeCtrl->SetSelection( 0 ); - m_PadDrillCtrl->Enable( TRUE, FALSE ); - break; - - case PAD_OVAL: - m_DrillShapeCtrl->SetSelection( 1 ); - m_PadDrillCtrl->Enable( TRUE, TRUE ); - break; - } - - // Selection des couches cuivre : - if( CurrentPad ) - SetPadLayersList( CurrentPad->m_Masque_Layer ); - else - PadTypeSelected(); -} - - -/*******************************************************************/ -void WinEDA_PadPropertiesFrame::PadOrientEvent( wxCommandEvent& event ) -/********************************************************************/ -{ - switch( m_PadOrient->GetSelection() ) - { - case 0: - m_PadOrientCtrl->SetValue( 0 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - case 1: - m_PadOrientCtrl->SetValue( 900 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - case 2: - m_PadOrientCtrl->SetValue( 2700 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - case 3: - m_PadOrientCtrl->SetValue( 1800 ); - m_PadOrientCtrl->Enable( FALSE ); - break; - - default: - m_PadOrientCtrl->Enable( TRUE ); - break; - } -} - - - -/************************************************/ -void WinEDA_PadPropertiesFrame::PadTypeSelected() -/************************************************/ -/* Adjust the better mask layer according to the selected pad type - */ -{ - long layer_mask; - int ii; - - ii = m_PadType->GetSelection(); - if( (ii < 0) || ( ii >= NBTYPES) ) - ii = 0; - - layer_mask = Std_Pad_Layers[ii]; - SetPadLayersList( layer_mask ); -} - - -/****************************************************************/ -void WinEDA_PadPropertiesFrame::SetPadLayersList( long layer_mask ) -/****************************************************************/ - -/* Met a jour l'etat des CheckBoxes de la liste des layers actives, - * données bit a bit dans layer_mask - */ -{ - if( layer_mask & CUIVRE_LAYER ) - m_PadLayerCu->SetValue( TRUE ); - else - m_PadLayerCu->SetValue( FALSE ); - - if( layer_mask & CMP_LAYER ) - m_PadLayerCmp->SetValue( TRUE ); - else - m_PadLayerCmp->SetValue( FALSE ); - - if( layer_mask & ADHESIVE_LAYER_CMP ) - m_PadLayerAdhCmp->SetValue( TRUE ); - else - m_PadLayerAdhCmp->SetValue( FALSE ); - - if( layer_mask & ADHESIVE_LAYER_CU ) - m_PadLayerAdhCu->SetValue( TRUE ); - else - m_PadLayerAdhCu->SetValue( FALSE ); - - if( layer_mask & SOLDERPASTE_LAYER_CMP ) - m_PadLayerPateCmp->SetValue( TRUE ); - else - m_PadLayerPateCmp->SetValue( FALSE ); - - if( layer_mask & SOLDERPASTE_LAYER_CU ) - m_PadLayerPateCu->SetValue( TRUE ); - else - m_PadLayerPateCu->SetValue( FALSE ); - - if( layer_mask & SILKSCREEN_LAYER_CMP ) - m_PadLayerSilkCmp->SetValue( TRUE ); - else - m_PadLayerSilkCmp->SetValue( FALSE ); - - if( layer_mask & SILKSCREEN_LAYER_CU ) - m_PadLayerSilkCu->SetValue( TRUE ); - else - m_PadLayerSilkCu->SetValue( FALSE ); - - if( layer_mask & SOLDERMASK_LAYER_CMP ) - m_PadLayerMaskCmp->SetValue( TRUE ); - else - m_PadLayerMaskCmp->SetValue( FALSE ); - - if( layer_mask & SOLDERMASK_LAYER_CU ) - m_PadLayerMaskCu->SetValue( TRUE ); - else - m_PadLayerMaskCu->SetValue( FALSE ); - - if( layer_mask & ECO1_LAYER ) - m_PadLayerECO1->SetValue( TRUE ); - else - m_PadLayerECO1->SetValue( FALSE ); - - if( layer_mask & ECO2_LAYER ) - m_PadLayerECO2->SetValue( TRUE ); - else - m_PadLayerECO2->SetValue( FALSE ); - - if( layer_mask & DRAW_LAYER ) - m_PadLayerDraft->SetValue( TRUE ); - else - m_PadLayerDraft->SetValue( FALSE ); -} - - -/*************************************************************************/ -void WinEDA_PadPropertiesFrame::PadPropertiesAccept( wxCommandEvent& event ) -/*************************************************************************/ - -/* Met a jour les differents parametres pour le composant en cours d'édition - */ -{ - long PadLayerMask; - bool error = FALSE; - bool RastnestIsChanged = false; - - if( m_DC ) - m_Parent->DrawPanel->CursorOff( m_DC ); - - g_Pad_Master.m_Attribut = CodeType[m_PadType->GetSelection()]; - g_Pad_Master.m_PadShape = CodeShape[m_PadShape->GetSelection()]; - g_Pad_Master.m_Pos = m_PadPositionCtrl->GetValue(); - g_Pad_Master.m_Pos0 = g_Pad_Master.m_Pos; - g_Pad_Master.m_Size = m_PadSizeCtrl->GetValue(); - if( g_Pad_Master.m_PadShape == PAD_CIRCLE ) - g_Pad_Master.m_Size.y = g_Pad_Master.m_Size.x; - g_Pad_Master.m_DeltaSize = m_PadDeltaSizeCtrl->GetValue(); - g_Pad_Master.m_Offset = m_PadOffsetCtrl->GetValue(); - g_Pad_Master.m_Drill = m_PadDrillCtrl->GetValue(); - if( m_DrillShapeCtrl->GetSelection() == 0 ) - { - g_Pad_Master.m_DrillShape = PAD_CIRCLE; - g_Pad_Master.m_Drill.y = g_Pad_Master.m_Drill.x; - } - else - g_Pad_Master.m_DrillShape = PAD_OVAL; - g_Pad_Master.m_Orient = m_PadOrientCtrl->GetValue(); - g_Current_PadName = m_PadNumCtrl->GetValue().Left( 4 ); - Current_PadNetName = m_PadNetNameCtrl->GetValue(); - - /* Test for incorrect values */ - if( (g_Pad_Master.m_Size.x < g_Pad_Master.m_Drill.x) - || (g_Pad_Master.m_Size.y < g_Pad_Master.m_Drill.y) ) - { - error = TRUE; - DisplayError( this, _( "Incorrect value for pad drill: pad drill bigger than pad size" ) ); - } - if( ( g_Pad_Master.m_Size.x / 2 <= ABS( g_Pad_Master.m_Offset.x ) ) - || ( g_Pad_Master.m_Size.y / 2 <= ABS( g_Pad_Master.m_Offset.y ) ) ) - { - error = TRUE; - DisplayError( this, _( "Incorrect value for pad offset" ) ); - } - - if( error ) - { - if( m_DC ) - m_Parent->DrawPanel->CursorOn( m_DC ); - return; - } - - PadLayerMask = 0; - if( m_PadLayerCu->GetValue() ) - PadLayerMask |= CUIVRE_LAYER; - if( m_PadLayerCmp->GetValue() ) - PadLayerMask |= CMP_LAYER; - if( ( PadLayerMask & (CUIVRE_LAYER | CMP_LAYER) ) == (CUIVRE_LAYER | CMP_LAYER) ) - PadLayerMask |= ALL_CU_LAYERS; - if( m_PadLayerAdhCmp->GetValue() ) - PadLayerMask |= ADHESIVE_LAYER_CMP; - if( m_PadLayerAdhCu->GetValue() ) - PadLayerMask |= ADHESIVE_LAYER_CU; - if( m_PadLayerPateCmp->GetValue() ) - PadLayerMask |= SOLDERPASTE_LAYER_CMP; - if( m_PadLayerPateCu->GetValue() ) - PadLayerMask |= SOLDERPASTE_LAYER_CU; - if( m_PadLayerSilkCmp->GetValue() ) - PadLayerMask |= SILKSCREEN_LAYER_CMP; - if( m_PadLayerSilkCu->GetValue() ) - PadLayerMask |= SILKSCREEN_LAYER_CU; - if( m_PadLayerMaskCmp->GetValue() ) - PadLayerMask |= SOLDERMASK_LAYER_CMP; - if( m_PadLayerMaskCu->GetValue() ) - PadLayerMask |= SOLDERMASK_LAYER_CU; - if( m_PadLayerECO1->GetValue() ) - PadLayerMask |= ECO1_LAYER; - if( m_PadLayerECO2->GetValue() ) - PadLayerMask |= ECO2_LAYER; - if( m_PadLayerDraft->GetValue() ) - PadLayerMask |= DRAW_LAYER; - - g_Pad_Master.m_Masque_Layer = PadLayerMask; - - if( CurrentPad ) // Set Pad Name & Num - { - m_Parent->SaveCopyInUndoList( m_Parent->m_Pcb->m_Modules ); - MODULE* Module; - Module = (MODULE*) CurrentPad->m_Parent; - Module->m_LastEdit_Time = time( NULL ); - - if( m_DC )// redraw the area where the pas was, without pad - { - CurrentPad->m_Flags |= DO_NOT_DRAW; - m_Parent->DrawPanel->PostDirtyRect( CurrentPad->GetBoundingBox() ); - CurrentPad->m_Flags &= ~DO_NOT_DRAW; - } - CurrentPad->m_PadShape = g_Pad_Master.m_PadShape; - CurrentPad->m_Attribut = g_Pad_Master.m_Attribut; - if (CurrentPad->m_Pos != g_Pad_Master.m_Pos ) - { - CurrentPad->m_Pos = g_Pad_Master.m_Pos; - RastnestIsChanged = true; - } - - /* compute the pos 0 value, i.e. pad position for module orient = 0 i.e. - * refer to module origin (module position) */ - CurrentPad->m_Pos0 = CurrentPad->m_Pos; - CurrentPad->m_Pos0.x -= Module->m_Pos.x; - CurrentPad->m_Pos0.y -= Module->m_Pos.y; - CurrentPad->m_Orient = g_Pad_Master.m_Orient + Module->m_Orient; - RotatePoint( &CurrentPad->m_Pos0.x, &CurrentPad->m_Pos0.y, -Module->m_Orient ); - - CurrentPad->m_Size = g_Pad_Master.m_Size; - CurrentPad->m_DeltaSize = g_Pad_Master.m_DeltaSize; - CurrentPad->m_Drill = g_Pad_Master.m_Drill; - CurrentPad->m_DrillShape = g_Pad_Master.m_DrillShape; - CurrentPad->m_Offset = g_Pad_Master.m_Offset; - if ( CurrentPad->m_Masque_Layer != g_Pad_Master.m_Masque_Layer ) - { - RastnestIsChanged = true; - CurrentPad->m_Masque_Layer = g_Pad_Master.m_Masque_Layer; - } - CurrentPad->SetPadName( g_Current_PadName ); - - if ( CurrentPad->m_Netname != Current_PadNetName ) - { - if( Current_PadNetName.IsEmpty() ) - CurrentPad->SetNet( 0 ); - else - { - const EQUIPOT* net = m_Parent->m_Pcb->FindNet( Current_PadNetName ); - if ( net ) - { - RastnestIsChanged = true; - CurrentPad->m_Netname = Current_PadNetName; - CurrentPad->SetNet(net->GetNet()); - } - else - DisplayError(this, _("Unknown netname, no change")); - } - } - - switch( CurrentPad->m_PadShape ) - { - case PAD_CIRCLE: - CurrentPad->m_DeltaSize = wxSize( 0, 0 ); - CurrentPad->m_Size.y = CurrentPad->m_Size.x; - break; - - case PAD_RECT: - CurrentPad->m_DeltaSize = wxSize( 0, 0 ); - break; - - case PAD_OVAL: - CurrentPad->m_DeltaSize = wxSize( 0, 0 ); - break; - - case PAD_TRAPEZOID: - break; - } - - switch( CurrentPad->m_Attribut ) - { - case PAD_STANDARD: - break; - - case PAD_CONN: - case PAD_SMD: - CurrentPad->m_Offset = wxSize( 0, 0 ); - CurrentPad->m_Drill = wxSize( 0, 0 ); - break; - - case PAD_HOLE_NOT_PLATED: - break; - - default: - DisplayError(this, wxT("Error: unknown pad type")); - break; - } - - CurrentPad->ComputeRayon(); - - Module->Set_Rectangle_Encadrement(); - CurrentPad->Display_Infos( m_Parent ); - if( m_DC )// redraw the area where the pas was - m_Parent->DrawPanel->PostDirtyRect( CurrentPad->GetBoundingBox() ); - m_Parent->GetScreen()->SetModify(); - } - - Close(); - - if( m_DC ) - m_Parent->DrawPanel->CursorOn( m_DC ); - if ( RastnestIsChanged ) // The net ratsnest must be recalculated - m_Parent->m_Pcb->m_Status_Pcb = 0; - - -} diff --git a/pcbnew/makefile.include b/pcbnew/makefile.include index c226373d90..3b85824390 100644 --- a/pcbnew/makefile.include +++ b/pcbnew/makefile.include @@ -30,6 +30,8 @@ OBJECTS= $(TARGET).o classpcb.o\ dialog_freeroute_exchange.o\ modedit_undo_redo.o\ block_module_editor.o\ + dialog_pad_properties.o\ + dialog_pad_properties_base.o\ onrightclick.o\ onleftclick.o\ modedit_onclick.o\ @@ -87,7 +89,6 @@ OBJECTS= $(TARGET).o classpcb.o\ editrack-part2.o \ deltrack.o edit_track_width.o \ editmod.o\ - editpads.o \ move-drag_pads.o\ globaleditpad.o \ editedge.o\ @@ -245,8 +246,6 @@ edit_track_width.o: edit_track_width.cpp $(COMMON) editmod.o: editmod.cpp dialog_edit_module.cpp dialog_edit_module.h $(COMMON) -editpads.o: editpads.cpp dialog_pad_edit.cpp dialog_pad_edit.h $(COMMON) - move-drag_pads.o: move-drag_pads.cpp drag.h $(COMMON) editedge.o: editedge.cpp $(COMMON) diff --git a/pcbnew/pcbcfg.h b/pcbnew/pcbcfg.h index 4b29ca1e57..318e77524f 100644 --- a/pcbnew/pcbcfg.h +++ b/pcbnew/pcbcfg.h @@ -56,21 +56,6 @@ static PARAM_CFG_INT PadDimVCfg ); -static PARAM_CFG_INT PadFormeCfg -( - wxT( "PadForm" ), /* Keyword */ - &g_Pad_Master.m_PadShape, /* Parameter address */ - PAD_CIRCLE, /* Default value */ - 0, 0x7F /* Min and max values*/ -); - -static PARAM_CFG_INT PadMasqueLayerCfg -( - wxT( "PadMask" ), /* Keyword */ - &g_Pad_Master.m_Masque_Layer, /* Parameter address */ - 0x0000FFFF /* Default value */ -); - static PARAM_CFG_INT ViaDiametreCfg ( wxT( "ViaDiam" ), /* Keyword */ @@ -770,6 +755,7 @@ static PARAM_CFG_INT DivGrillePcbCfg static PARAM_CFG_INT TimeOutCfg //Duree entre Sauvegardes auto en secondes ( + INSETUP, wxT( "TimeOut" ), /* Keyword */ &g_TimeOut, /* Parameter address */ 600, /* Default value */ @@ -804,6 +790,7 @@ static PARAM_CFG_INT PrmMaxLinksShowed static PARAM_CFG_BOOL ShowRatsnestCfg ( + INSETUP, wxT( "ShowRat" ), /* Keyword */ &g_Show_Ratsnest, /* Parameter address */ FALSE /* Default value */ @@ -811,6 +798,7 @@ static PARAM_CFG_BOOL ShowRatsnestCfg static PARAM_CFG_BOOL ShowModuleRatsnestCfg ( + INSETUP, wxT( "ShowMRa" ), /* Keyword */ &g_Show_Module_Ratsnest, /* Parameter address */ TRUE /* Default value */ @@ -831,8 +819,6 @@ PARAM_CFG_BASE* ParamCfgList[] = &PadDrillCfg, &PadDimHCfg, &PadDimVCfg, - &PadFormeCfg, - &PadMasqueLayerCfg, &ViaDiametreCfg, &ViaDrillCfg, &MicroViaDiametreCfg, diff --git a/template/kicad.pro b/template/kicad.pro index 76b0185e40..333476ed6a 100644 --- a/template/kicad.pro +++ b/template/kicad.pro @@ -1,4 +1,4 @@ -update=23/9/2008-19:07:03 +update=20/11/2008-19:07:03 version=1 last_client=eeschema [general] @@ -71,7 +71,7 @@ ShowRat=0 ShowMRa=1 [pcbnew/libraries] LibDir= -LibName1=supports +LibName1=sockets LibName2=connect LibName3=discret LibName4=pin_array @@ -145,4 +145,3 @@ LibName27=opto LibName28=atmel LibName29=contrib LibName30=valves -LibName31=atmel