Commit f27208a1 authored by CHARRAS's avatar CHARRAS

pcbnew: better messages in drc control and some other enhancements

parent d84960f3
......@@ -4,6 +4,16 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-Jul-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
** Some minor enhancements
+ pcbnew
In Drc diags, better (more explicit) messages
Change (and simplify) code in 'update' as well as 'insert' modules into main PCB from within the module editor,
because it had a bug (crashes when there was no footprint in pcb)
2007-June-21 UPDATE Tim Hanson <tim@hardcarve.com>
================================================================================
+ pcbnew
......
......@@ -15,7 +15,7 @@
#include "colors.h"
// Define print format d to display a schematic component line
#define CMP_FORMAT wxT("%3d %8.8s - %16.16s : %-.32s")
#define CMP_FORMAT wxT("%3d %+8s - %+16s : %-.32s")
#define FILTERFOOTPRINTKEY "FilterFootprint"
......
/*****************************************************************/
/** options.cpp: options pour la visualisation des composants **/
/****************************************************************/
#include "fctsys.h"
#include "wxstruct.h"
#include "common.h"
#include "cvpcb.h"
#include "protos.h"
enum {
SET_OPTION = 8000,
SET_EDGE_FORMAT,
SET_TEXTE_FORMAT,
PADFILL_OPT,
PADNUM_OPT,
EDGE_SELECT,
TEXT_SELECT,
ID_SAVE_CONFIG
};
/********************************************/
/* Classes derivees pour la fenetre Options */
/********************************************/
class wxMyCheckBox: public wxCheckBox
{
private:
protected:
public:
bool * BoolVar;
// Constructor and destructor
wxMyCheckBox(wxWindow *parent, int id, const wxString & Title,
bool * RefVar, wxPoint& pos);
~wxMyCheckBox(void) { };
};
/************************************************************/
/* classe derivee pour la fenetre de selection des options */
/* d'affichage du module */
/************************************************************/
class wxOptionsBox: public wxDialog
{
private:
protected:
public:
WinEDA_BasePcbFrame * m_Parent;
wxMyCheckBox * IsShowPadFill;
wxMyCheckBox * IsShowPadNum;
wxRadioBox * EdgeRadioBox;
wxRadioBox *TextRadioBox;
// Constructor and destructor
wxOptionsBox(WinEDA_BasePcbFrame * parent, wxPoint& pos);
~wxOptionsBox(void);
bool OnClose(void);
void SetOptPadFill( wxCommandEvent& event);
void SetOptPadNum( wxCommandEvent& event);
void ReturnDisplayEdgeFormat(wxCommandEvent& event);
void ReturnDisplayTexteFormat(wxCommandEvent& event);
void SaveConfig(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxOptionsBox, wxDialog )
EVT_CHECKBOX(PADFILL_OPT, wxOptionsBox::SetOptPadFill)
EVT_CHECKBOX(PADNUM_OPT, wxOptionsBox::SetOptPadNum)
EVT_RADIOBOX(EDGE_SELECT, wxOptionsBox::ReturnDisplayEdgeFormat)
EVT_RADIOBOX(TEXT_SELECT, wxOptionsBox::ReturnDisplayTexteFormat)
EVT_BUTTON(ID_SAVE_CONFIG, wxOptionsBox::SaveConfig)
END_EVENT_TABLE()
/*********************************************************************/
void WinEDA_DisplayFrame::InstallOptionsDisplay(wxCommandEvent& event)
/*********************************************************************/
/* Creation de la fenetre d'options de la fenetre de visu */
{
wxPoint pos;
GetPosition(&pos.x, &pos.y);
pos.x += 10; if (pos.x < 0 ) pos.x = 0;
pos.y += 50; if (pos.y < 0 ) pos.y = 0;
wxOptionsBox * OptionWindow = new wxOptionsBox(this, pos);
OptionWindow->ShowModal(); OptionWindow->Destroy();
}
/********************************/
/* Constructeur de wxMyCheckBox */
/********************************/
wxMyCheckBox::wxMyCheckBox(wxWindow *parent, int id, const wxString & Title,
bool * RefVar, wxPoint& pos):
wxCheckBox(parent, id, Title, pos)
{
BoolVar = RefVar;
if( * BoolVar ) this->SetValue(TRUE);
else this->SetValue(FALSE);
}
/******************************************************/
void wxOptionsBox::SetOptPadFill(wxCommandEvent& event)
/******************************************************/
{
*IsShowPadFill->BoolVar == 0 ?
* IsShowPadFill->BoolVar = 1 : * IsShowPadFill->BoolVar = 0;
DisplayOpt.DisplayPadFill = m_Parent->m_DisplayPadFill = IsShowPadFill->BoolVar;
m_Parent->ReDrawPanel();
}
/******************************************************/
void wxOptionsBox::SetOptPadNum(wxCommandEvent& event)
/******************************************************/
{
*IsShowPadNum->BoolVar == 0 ?
*IsShowPadNum->BoolVar = TRUE : *IsShowPadNum->BoolVar = FALSE;
DisplayOpt.DisplayPadNum = m_Parent->m_DisplayPadNum = IsShowPadNum->BoolVar;
m_Parent->ReDrawPanel();
}
/********************************/
/* Constructeur de wxOptionsBox */
/********************************/
wxOptionsBox::wxOptionsBox(WinEDA_BasePcbFrame * parent, wxPoint& bpos):
wxDialog(parent, -1, _("Options"), bpos, wxSize(220, 195),
DIALOG_STYLE)
{
wxPoint pos;
m_Parent = parent;
SetFont(*g_DialogFont);
pos.x = 100; pos.y = 15;
new wxButton(this, ID_SAVE_CONFIG, _("Save Cfg"), pos);
pos.x = 10; pos.y = 10;
IsShowPadFill = new wxMyCheckBox(this,
PADFILL_OPT,
_("&Pad Fill"),
&DisplayOpt.DisplayPadFill, pos);
pos.y += 20;
IsShowPadNum = new wxMyCheckBox(this,
PADNUM_OPT,
_("Pad &Num"),
&DisplayOpt.DisplayPadNum, pos);
pos.y += 25;
wxString DrawOpt[] = { _("&Filaire"), _("&Filled"), _("&Sketch")};
EdgeRadioBox = new wxRadioBox(this, EDGE_SELECT,
_("Edges:"),
pos, wxSize(-1,-1),
3,DrawOpt,1,wxRA_SPECIFY_COLS);
EdgeRadioBox->SetSelection(DisplayOpt.DisplayModEdge);
pos.x += 100;
TextRadioBox = new wxRadioBox(this, TEXT_SELECT,
_("Texts:"),
pos,wxSize(-1,-1),
3, DrawOpt, 1,wxRA_SPECIFY_COLS);
TextRadioBox->SetSelection(DisplayOpt.DisplayModText);
}
/*****************************/
/* Destructeur de OptionsBox */
/*****************************/
wxOptionsBox::~wxOptionsBox(void)
{
}
/**************************************/
/* Fonctions de base de wxMyDialogBox */
/**************************************/
/*******************************/
bool wxOptionsBox::OnClose(void)
/*******************************/
{
Show(FALSE);
return TRUE;
}
/****************************************************************/
void wxOptionsBox::ReturnDisplayEdgeFormat(wxCommandEvent& event)
/****************************************************************/
{
DisplayOpt.DisplayModEdge = m_Parent->m_DisplayModEdge = EdgeRadioBox->GetSelection();
m_Parent->ReDrawPanel();
}
/****************************************************************/
void wxOptionsBox::ReturnDisplayTexteFormat(wxCommandEvent& event)
/****************************************************************/
{
DisplayOpt.DisplayModText = m_Parent->m_DisplayModText = TextRadioBox->GetSelection();
m_Parent->ReDrawPanel();
}
/***************************************************/
void wxOptionsBox::SaveConfig(wxCommandEvent& event)
/***************************************************/
{
Save_Config(this);
}
/************/
/* rdorcad()*/
/************/
/* convertit la netliste ORCADPCB en netliste ORCADPCB (fichier temporaire)
assure la raffectation des alimentations selon le format :
( XXXXXX VALEUR|(pin1,pin2,...=newalim) ID VALEUR
*/
#include "fctsys.h"
#include "wxstruct.h"
#include "common.h"
#include "cvpcb.h"
#include "protos.h"
#define SEPARATEUR '|' /* caractere separateur dans netliste */
/* routines locales : */
int pin_orcad(STORECMP * CurrentCmp);
/****************************************/
/* int WinEDA_CvpcbFrame::rdorcad(void) */
/****************************************/
int WinEDA_CvpcbFrame::rdorcad(void)
{
int i , j , k ,l ;
char * LibName;
char Line[1024];
int FlagEESchema = 0;
char label[80] ; /* buffer des references composants */
char ref_schema[80] ; /* buffer de la ref schematique */
char val[80] ; /* buffer des valeurs/ref.lib */
char postval[80] ; /* buffer de la valeur de fin de ligne (vraie valeur) */
char *ptchar ; /* pointeur de service */
STORECMP * Cmp;
modified = 0;
Rjustify = 0;
/* Raz buffer et variable de gestion */
if( BaseListeCmp ) FreeMemoryComponants();
/* Ouverture du fichier source */
source = wxFopen(FFileName, wxT("rt"));
if (source == 0)
{
wxString msg;
msg.Printf( _("File <%s> not found"),FFileName.GetData());
DisplayError(this, msg); return(-1);
}
/* Read the file header (must be "( { OrCAD PCB" or "({ OrCAD PCB" ) */
/* or "# EESchema Netliste"*/
fgets(Line,255,source) ;
/* test for netlist type PCB2 */
i = strnicmp(Line,"( {",3) ;
if( i != 0 )
i = strnicmp(Line,"({",2) ;
if( i != 0 )
{
i = strnicmp(Line,"# EESchema",7) ; /* net type EESchema */
if( i == 0 ) FlagEESchema = 1;
}
if ( i != 0 )
{
wxString msg, Lineconv = CONV_FROM_UTF8(Line);
msg.Printf( _("Unknown file format <%s>"), Lineconv.GetData());
DisplayError(this, msg);
fclose(source); return(-3) ;
}
SetStatusText( _("Netlist Format: EESchema"), 0);
/* Lecture de la liste */
for (;;)
{
/* recherche du debut de la description d'un composant */
if( fgets(Line,80,source) == 0 ) break;
/* suppression des blancs en dbut de ligne */
i = 0 ; while (Line[i] == ' ') i++ ;
/* elimination des lignes vides : */
if (Line[i] < ' ') continue ;
if (strnicmp(&Line[i],"( ",2) != 0) continue ;
/****************************/
/* debut description trouve */
/****************************/
/* memo ident schema */
while ( Line[i] != ' ') i++ ;
while ( Line[i] == ' ') i++ ; /* i pointe 1er caractere de l'ident schema */
j = 0 ; while ( Line[i] != ' ') ref_schema[j++] = Line[i++] ;
ref_schema[j] = 0 ;
/* recherche val/ref.lib */
while ( Line[i] == ' ') i++ ; /* i pointe la valeur du composant */
LibName = Line + i;
memset(label, 0, sizeof(label));
memset(val, 0, sizeof(val) ) ;
memset(postval, 0, sizeof(postval) ) ;
memset(alim, 0, sizeof(alim) ) ;
/* lecture valeur du composant */
/* recherche fin de valeur (' ') */
ptchar = strstr(&Line[i]," ") ;
if (ptchar == 0)
{
wxString msg;
msg.Printf( _("Netlist error: %s"),Line) ;
DisplayError(NULL, msg);
k = 0 ;
}
else k = ptchar - Line ;
for (j = 0 ; i < k ; i++)
{
if ( Line[i] == SEPARATEUR ) break ;
if ( j < 8 ) val[j++] = Line[i] ;
}
if ( (Line[++i] == '(') && (Line[k-1] == ')' ) )
{
i++ ; l = 0 ; while ( k-1 > i ) alim[l++] = Line[i++] ;
}
else i = k ;
/* recherche reference du composant */
while(Line[i] != ' ') i++ ; /* elimination fin valeur */
while(Line[i] == ' ') i++ ; /* recherche debut reference */
/* debut reference trouv */
for ( k = 0 ; k < 8 ; i++ , k++ )
{
if ( Line[i] <= ' ' ) break ;
label[k] = Line[i] ;
}
/* recherche vraie valeur du composant */
while(Line[i] != ' ') i++ ; /* elimination fin reference */
while(Line[i] == ' ') i++ ; /* recherche debut vraie valeur */
/* debut vraie valeur trouve */
for ( k = 0 ; k < 16 ; i++ , k++ )
{
if ( Line[i] <= ' ' ) break ;
postval[k] = Line[i] ;
}
/* classement du composant ,suivi de sa valeur */
Cmp = new STORECMP();
Cmp->Pnext = BaseListeCmp;
BaseListeCmp = Cmp;
Cmp->m_Reference = CONV_FROM_UTF8(label);
Cmp->m_Valeur = CONV_FROM_UTF8(postval) ;
if( FlagEESchema ) /* Copie du nom module: */
{
if( strnicmp(LibName, "$noname", 7 ) != 0 )
{
while( *LibName > ' ' )
{
Cmp->m_Module.Append(*LibName);
LibName++;
}
}
}
/* classement du TimeStamp */
Cmp->m_TimeStamp = CONV_FROM_UTF8(ref_schema);
pin_orcad( Cmp) ;
nbcomp++ ;
}
fclose(source);
/* reclassement alpabtique : */
BaseListeCmp = TriListeComposantss( BaseListeCmp, nbcomp);
return(0);
}
/***********************************/
int pin_orcad(STORECMP * Cmp)
/***********************************/
{
int i , jj;
char numpin[9] , net[1024] ;
char Line[1024];
STOREPIN * Pin = NULL;
STOREPIN ** LastPin = & Cmp->m_Pins;
for ( ;; )
{
/* debut description trouv */
for ( ;; )
{
if ( fgets(Line,80,source) == 0 ) return(-1) ;
/* suppression des blancs en dbut de ligne */
i = 0 ; while (Line[i] == ' ') i++ ;
while (Line[i] == '(') i++ ;
while (Line[i] == ' ') i++ ;
/* elimination des lignes vides : */
if (Line[i] < ' ') continue ;
/* fin de description ? */
if (Line[i] == ')' ) return(0) ;
memset( net, 0, sizeof(net) );
memset( numpin, 0, sizeof(numpin) );
/* lecture name pin , 4 lettres */
for (jj = 0 ; jj < 4 ; jj++ , i++)
{
if ( Line[i] == ' ' ) break ;
numpin[jj] = Line[i] ;
}
/* recherche affectation force de net */
if ( reaffect(numpin,net) != 0)
{
Pin = new STOREPIN();
*LastPin = Pin; LastPin = &Pin->Pnext;
Pin->m_PinNum = CONV_FROM_UTF8(numpin);
Pin->m_PinNet = CONV_FROM_UTF8(net);
continue ;
}
/* recherche netname */
while(Line[i] == ' ') i++ ; /* recherche debut reference */
/* debut netname trouv */
for ( jj = 0 ; jj < (int)sizeof(net)-1 ; i++ , jj++ )
{
if ( Line[i] <= ' ' ) break ;
net[jj] = Line[i] ;
}
Pin = new STOREPIN();
*LastPin = Pin; LastPin = &Pin->Pnext;
Pin->m_PinNum = CONV_FROM_UTF8(numpin);
Pin->m_PinNet = CONV_FROM_UTF8(net);
}
}
}
/****************************************************************/
STORECMP * TriListeComposantss(STORECMP * BaseListe, int nbitems)
/****************************************************************/
/* Tri la liste des composants par ordre alphabetique et me a jour
le nouveau chainage avant/arriere
retourne un pointeur sur le 1er element de la liste
*/
{
STORECMP ** bufferptr, * Item;
int ii;
if (nbitems <= 0 ) return(NULL);
bufferptr = (STORECMP**)MyZMalloc( (nbitems+2) * sizeof(STORECMP*) );
for( ii= 1, Item = BaseListe; Item != NULL; Item = Item->Pnext, ii++)
{
bufferptr[ii] = Item;
}
/* ici bufferptr[0] = NULL et bufferptr[nbitem+1] = NULL et ces 2 valeurs
representent le chainage arriere du 1er element, et le chainage avant
du dernier element */
qsort(bufferptr+1,nbitems,sizeof(STORECMP*),
(int(*)(const void*,const void*))CmpCompare) ;
/* Mise a jour du chainage */
for( ii = 1; ii <= nbitems; ii++ )
{
Item = bufferptr[ii];
Item->m_Num = ii;
Item->Pnext = bufferptr[ii+1];
Item->Pback = bufferptr[ii-1];
}
return(bufferptr[1]);
}
/****************************************/
int CmpCompare(void * mod1, void * mod2)
/****************************************/
/*
routine compare() pour qsort() en classement alphabetique des composants
*/
{
int ii;
STORECMP *pt1 , *pt2 ;
pt1 = * ((STORECMP**)mod1);
pt2 = * ((STORECMP**)mod2);
//FIXME:
ii = StrNumICmp( (const wxChar*) pt1->m_Reference, (const wxChar*) pt2->m_Reference );
return(ii);
}
......@@ -29,10 +29,10 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist(void)
int i , j , k ,l ;
char * LibName;
char Line[1024];
char label[80] ; /* buffer des references composants */
char ref_schema[80] ; /* buffer de la ref schematique */
char val[80] ; /* buffer des valeurs/ref.lib */
char postval[80] ; /* buffer de la valeur de fin de ligne (vraie valeur) */
char component_reference[80] ; /* buffer des references composants */
char ref_schema[80] ; /* buffer de la ref schematique */
char footprint_name[80] ; /* buffer des ref.lib */
char component_value[80] ; /* buffer des valeurs */
char *ptchar ; /* pointeur de service */
STORECMP * Cmp;
......@@ -111,9 +111,9 @@ STORECMP * Cmp;
while ( Line[i] == ' ') i++ ; /* i pointe la valeur du composant */
LibName = Line + i;
memset(label, 0, sizeof(label));
memset(val, 0, sizeof(val) ) ;
memset(postval, 0, sizeof(postval) ) ;
memset(component_reference, 0, sizeof(component_reference));
memset(footprint_name, 0, sizeof(footprint_name) ) ;
memset(component_value, 0, sizeof(component_value) ) ;
memset(alim, 0, sizeof(alim) ) ;
/* lecture valeur du composant */
......@@ -131,8 +131,9 @@ STORECMP * Cmp;
for (j = 0 ; i < k ; i++)
{
if ( Line[i] == SEPARATEUR ) break ;
if ( j < 8 ) val[j++] = Line[i] ;
if ( Line[i] == SEPARATEUR ) break ;
if ( j < (int)(sizeof(footprint_name)-1) )
footprint_name[j++] = Line[i] ;
}
if ( (Line[++i] == '(') && (Line[k-1] == ')' ) )
......@@ -147,21 +148,20 @@ STORECMP * Cmp;
while(Line[i] == ' ') i++ ; /* recherche debut reference */
/* debut reference trouv */
for ( k = 0 ; k < 8 ; i++ , k++ )
for ( k = 0 ; k < (int)(sizeof(component_reference)-1) ; i++ , k++ )
{
if ( Line[i] <= ' ' ) break ;
label[k] = Line[i] ;
component_reference[k] = Line[i] ;
}
/* recherche vraie valeur du composant */
while(Line[i] != ' ') i++ ; /* elimination fin reference */
while(Line[i] == ' ') i++ ; /* recherche debut vraie valeur */
/* recherche valeur du composant */
while(Line[i] == ' ') i++ ; /* recherche debut valeur */
/* debut vraie valeur trouve */
for ( k = 0 ; k < 16 ; i++ , k++ )
/* debut vraie valeur trouvee */
for ( k = 0 ; k < (int)(sizeof(component_value)-1) ; i++ , k++ )
{
if ( Line[i] <= ' ' ) break ;
postval[k] = Line[i] ;
component_value[k] = Line[i] ;
}
......@@ -169,8 +169,8 @@ STORECMP * Cmp;
Cmp = new STORECMP();
Cmp->Pnext = g_BaseListeCmp;
g_BaseListeCmp = Cmp;
Cmp->m_Reference = CONV_FROM_UTF8(label);
Cmp->m_Valeur = CONV_FROM_UTF8(postval) ;
Cmp->m_Reference = CONV_FROM_UTF8(component_reference);
Cmp->m_Valeur = CONV_FROM_UTF8(component_value) ;
if( g_FlagEESchema ) /* Copie du nom module: */
{
......
......@@ -5,7 +5,7 @@
COMMON_GLOBL wxString g_BuildVersion
#ifdef EDA_BASE
(wxT("(2007-07-09)"))
(wxT("(2007-07-24)"))
#endif
;
......
......@@ -12,17 +12,17 @@ enum main_id {
ID_PROJECT_TREE_REFRESH,
ID_PROJECT_RUNPY,
ID_PROJECT_NEWFILE,
ID_PROJECT_NEWSCH,
ID_PROJECT_NEWBRD,
ID_PROJECT_UNUSED0,
ID_PROJECT_UNUSED1,
ID_PROJECT_NEWPY,
ID_PROJECT_NEWGERBER,
ID_PROJECT_UNUSED2,
ID_PROJECT_NEWTXT,
ID_PROJECT_NEWNET,
ID_PROJECT_UNUSED3,
ID_PROJECT_NEWDIR,
ID_PROJECT_DELETE,
ID_PROJECT_RENAME,
ID_PROJECT_UNUSED0,
ID_PROJECT_UNUSED1,
ID_PROJECT_OPEN_FILE_WITH_TEXT_EDITOR,
ID_PROJECT_UNUSED4,
ID_MAIN_COMMAND,
ID_TO_EDITOR,
......
No preview for this file type
......@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: kicad\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2007-07-09 11:49+0100\n"
"Last-Translator: jp charras <jean-pierre.charras@inpg.fr>\n"
"PO-Revision-Date: 2007-07-25 10:24+0100\n"
"Last-Translator: \n"
"Language-Team: kicad team <jean-pierre.charras@ujf-grenoble.fr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
......@@ -66,7 +66,6 @@ msgstr "Fichiers C.I.:"
#: pcbnew/files.cpp:181
#: pcbnew/librairi.cpp:62
#: cvpcb/readschematicnetlist.cpp:51
#: cvpcb/rdorcad.cpp:53
#: cvpcb/rdpcad.cpp:45
#, c-format
msgid "File <%s> not found"
......@@ -141,256 +140,6 @@ msgstr "It
msgid "Ok to abort ?"
msgstr "Ok pour arrter ?"
#: pcbnew/dialog_edit_module.cpp:41
msgid "Module properties"
msgstr "Proprits du Module"
#: pcbnew/dialog_edit_module.cpp:94
msgid "Properties"
msgstr "Proprits"
#: pcbnew/dialog_edit_module.cpp:98
#: pcbnew/dialog_edit_module.cpp:107
#: pcbnew/dialog_edit_module.cpp:138
msgid "3D settings"
msgstr "3D Caract"
#: pcbnew/dialog_edit_module.cpp:119
#: pcbnew/pcbtexte.cpp:113
#: pcbnew/muonde.cpp:341
#: pcbnew/block.cpp:117
#: pcbnew/cotation.cpp:109
#: pcbnew/zones.cpp:873
#: pcbnew/mirepcb.cpp:102
#: eeschema/fieldedi.cpp:208
#: eeschema/sheetlab.cpp:99
#: eeschema/libedpart.cpp:230
#: eeschema/editpart.cpp:193
#: common/displlst.cpp:102
msgid "Ok"
msgstr "Ok"
#: pcbnew/dialog_edit_module.cpp:124
#: pcbnew/pcbtexte.cpp:118
#: pcbnew/muonde.cpp:345
#: pcbnew/modedit_onclick.cpp:195
#: pcbnew/modedit_onclick.cpp:228
#: pcbnew/onrightclick.cpp:153
#: pcbnew/onrightclick.cpp:172
#: pcbnew/block.cpp:122
#: pcbnew/globaleditpad.cpp:111
#: pcbnew/cotation.cpp:114
#: pcbnew/swap_layers.cpp:86
#: pcbnew/pcbpiste.cpp:87
#: pcbnew/mirepcb.cpp:106
#: pcbnew/sel_layer.cpp:123
#: pcbnew/sel_layer.cpp:250
#: eeschema/libedit_onrightclick.cpp:68
#: eeschema/libedit_onrightclick.cpp:83
#: eeschema/optionsframe.cpp:155
#: eeschema/onrightclick.cpp:111
#: eeschema/onrightclick.cpp:125
#: eeschema/sheetlab.cpp:104
#: eeschema/options.cpp:114
#: eeschema/libedpart.cpp:219
#: gerbview/onrightclick.cpp:39
#: gerbview/onrightclick.cpp:57
#: gerbview/options.cpp:175
#: gerbview/options.cpp:305
#: gerbview/select_layers_to_pcb.cpp:127
#: common/get_component_dialog.cpp:121
#: common/displlst.cpp:106
msgid "Cancel"
msgstr "Annuler"
#: pcbnew/dialog_edit_module.cpp:179
msgid "Change module(s)"
msgstr "Change module(s)"
#: pcbnew/dialog_edit_module.cpp:183
msgid "Goto Module Editor"
msgstr "Ouvrir Editeur de modules"
#: pcbnew/dialog_edit_module.cpp:189
#: eeschema/fieldedi.cpp:283
#: eeschema/onrightclick.cpp:315
#: eeschema/dialog_edit_component_in_lib.cpp:203
#: eeschema/libedpart.cpp:246
msgid "Doc"
msgstr "Doc"
#: pcbnew/dialog_edit_module.cpp:195
msgid "Keywords"
msgstr "Mots Cles"
#: pcbnew/dialog_edit_module.cpp:202
msgid "Fields:"
msgstr "Champs:"
#: pcbnew/dialog_edit_module.cpp:212
msgid "Add Field"
msgstr "Ajouter Champ"
#: pcbnew/dialog_edit_module.cpp:217
#: eeschema/onrightclick.cpp:253
msgid "Edit Field"
msgstr "Editer Champ"
#: pcbnew/dialog_edit_module.cpp:222
msgid "Delete Field"
msgstr "Supprimer Champ"
#: pcbnew/dialog_edit_module.cpp:229
#: common/common.cpp:242
msgid "Component"
msgstr "Composant"
#: pcbnew/dialog_edit_module.cpp:229
msgid "Copper"
msgstr "Cuivre"
#: pcbnew/dialog_edit_module.cpp:230
#: pcbnew/class_pad.cpp:769
#: pcbnew/affiche.cpp:36
#: pcbnew/affiche.cpp:91
#: pcbnew/affiche.cpp:95
#: pcbnew/affiche.cpp:195
#: pcbnew/affiche.cpp:244
#: pcbnew/class_module.cpp:1040
#: pcbnew/sel_layer.cpp:109
#: gerbview/affiche.cpp:102
msgid "Layer"
msgstr "Couche"
#: pcbnew/dialog_edit_module.cpp:237
#: pcbnew/dialog_edit_module.cpp:279
#: pcbnew/pcbtexte.cpp:177
#: pcbnew/muonde.cpp:353
#: pcbnew/cotation.cpp:118
#: eeschema/dialog_options.cpp:229
#: eeschema/options.cpp:177
#: eeschema/dialog_edit_component_in_schematic.cpp:182
#: eeschema/editpart.cpp:312
msgid "Normal"
msgstr "Normal"
#: pcbnew/dialog_edit_module.cpp:237
#: pcbnew/dialog_pad_edit.cpp:191
msgid "User"
msgstr "User"
#: pcbnew/dialog_edit_module.cpp:238
#: pcbnew/class_pad.cpp:810
#: pcbnew/affiche.cpp:47
#: pcbnew/affiche.cpp:103
#: pcbnew/class_module.cpp:1057
#: eeschema/affiche.cpp:101
#: gerbview/affiche.cpp:43
msgid "Orient"
msgstr "Orient"
#: pcbnew/dialog_edit_module.cpp:270
msgid "Orient (0.1 deg)"
msgstr "Orient (0.1 deg)"
#: pcbnew/dialog_edit_module.cpp:279
msgid "Normal+Insert"
msgstr "Normal+Insert"
#: pcbnew/dialog_edit_module.cpp:279
msgid "Virtual"
msgstr "Virtuel"
#: pcbnew/dialog_edit_module.cpp:280
msgid "Attributs"
msgstr "Attributs"
#: pcbnew/dialog_edit_module.cpp:282
msgid "Use this attribute for most non smd components"
msgstr "Utiliser cet attribut pour la plupart des composants"
#: pcbnew/dialog_edit_module.cpp:284
msgid ""
"Use this attribute for smd components.\n"
"Only components with this option are put in the footprint position list file"
msgstr ""
"Uiliser cet attribut pour les composants CMS.\n"
"Seuls les composantsavec cette option sont mis dans le fichier de position des composants"
#: pcbnew/dialog_edit_module.cpp:286
msgid "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)"
msgstr "Uiliser cet attribut pour les composants \"virtuels\" directement dessins sur le PCB (tel que les vieux connecteurs ISA de PC)"
#: pcbnew/dialog_edit_module.cpp:309
msgid "Free"
msgstr "Libre"
#: pcbnew/dialog_edit_module.cpp:309
msgid "Locked"
msgstr "Verrouill"
#: pcbnew/dialog_edit_module.cpp:310
msgid "Move and Auto Place"
msgstr "Move et Placement Automatique"
#: pcbnew/dialog_edit_module.cpp:314
msgid "Enable hotkey move commands and Auto Placement"
msgstr "Autoriser les commandes clavier de dplacement et l'auto placement"
#: pcbnew/dialog_edit_module.cpp:315
msgid "Disable hotkey move commands and Auto Placement"
msgstr "Interdire les commandes clavier de dplacement et l'auto placement"
#: pcbnew/dialog_edit_module.cpp:318
msgid "Rot 90"
msgstr "Rot 90"
#: pcbnew/dialog_edit_module.cpp:325
msgid "Rot 180"
msgstr "Rot 180"
#: pcbnew/dialog_edit_module.cpp:355
msgid "3D Shape Name"
msgstr "3D forme"
#: pcbnew/dialog_edit_module.cpp:371
#: eeschema/dialog_eeschema_config.cpp:227
msgid "Browse"
msgstr "Examiner"
#: pcbnew/dialog_edit_module.cpp:375
msgid "Add 3D Shape"
msgstr "Ajout Forme 3D"
#: pcbnew/dialog_edit_module.cpp:381
msgid "Remove 3D Shape"
msgstr "Suppr. Forme 3D:"
#: pcbnew/dialog_edit_module.cpp:387
msgid "Shape Scale:"
msgstr "Echelle de la forme:"
#: pcbnew/dialog_edit_module.cpp:393
msgid "Shape Offset:"
msgstr "Offset forme:"
#: pcbnew/dialog_edit_module.cpp:400
msgid "Shape Rotation:"
msgstr "Rot de la forme"
#: pcbnew/dialog_edit_module.cpp:437
msgid "3D Shape:"
msgstr "Forme 3D:"
#: pcbnew/dialog_edit_module.cpp:726
msgid "Reference or Value cannot be deleted"
msgstr "Rfrence ou Valeur ne peut etre efface"
#: pcbnew/dialog_edit_module.cpp:730
#, c-format
msgid "Delete [%s]"
msgstr "Supprimer [%s]"
#: pcbnew/loadcmp.cpp:94
msgid "Module name:"
msgstr "Nom module:"
......@@ -461,7 +210,6 @@ msgstr "De "
#: eeschema/dialog_eeschema_config.cpp:161
#: eeschema/eestatus.cpp:116
#: cvpcb/dialog_display_options.cpp:145
#: cvpcb/options.cpp:148
#: cvpcb/dialog_cvpcb_config.cpp:127
#: gerbview/reglage.cpp:110
msgid "Save Cfg"
......@@ -966,6 +714,54 @@ msgstr "Nb Modules"
msgid "TextPCB properties"
msgstr "Proprits des textes PCB"
#: pcbnew/pcbtexte.cpp:113
#: pcbnew/muonde.cpp:341
#: pcbnew/block.cpp:117
#: pcbnew/cotation.cpp:109
#: pcbnew/zones.cpp:873
#: pcbnew/mirepcb.cpp:102
#: pcbnew/dialog_edit_module.cpp:119
#: eeschema/fieldedi.cpp:208
#: eeschema/sheetlab.cpp:99
#: eeschema/libedpart.cpp:230
#: eeschema/editpart.cpp:193
#: common/displlst.cpp:102
msgid "Ok"
msgstr "Ok"
#: pcbnew/pcbtexte.cpp:118
#: pcbnew/muonde.cpp:345
#: pcbnew/modedit_onclick.cpp:195
#: pcbnew/modedit_onclick.cpp:228
#: pcbnew/onrightclick.cpp:153
#: pcbnew/onrightclick.cpp:172
#: pcbnew/block.cpp:122
#: pcbnew/globaleditpad.cpp:111
#: pcbnew/cotation.cpp:114
#: pcbnew/swap_layers.cpp:86
#: pcbnew/pcbpiste.cpp:87
#: pcbnew/mirepcb.cpp:106
#: pcbnew/dialog_edit_module.cpp:124
#: pcbnew/sel_layer.cpp:123
#: pcbnew/sel_layer.cpp:250
#: eeschema/libedit_onrightclick.cpp:68
#: eeschema/libedit_onrightclick.cpp:83
#: eeschema/optionsframe.cpp:155
#: eeschema/onrightclick.cpp:111
#: eeschema/onrightclick.cpp:125
#: eeschema/sheetlab.cpp:104
#: eeschema/options.cpp:114
#: eeschema/libedpart.cpp:219
#: gerbview/onrightclick.cpp:39
#: gerbview/onrightclick.cpp:57
#: gerbview/options.cpp:175
#: gerbview/options.cpp:305
#: gerbview/select_layers_to_pcb.cpp:127
#: common/get_component_dialog.cpp:121
#: common/displlst.cpp:106
msgid "Cancel"
msgstr "Annuler"
#: pcbnew/pcbtexte.cpp:122
#: pcbnew/dialog_edit_mod_text.cpp:314
#: eeschema/sheetlab.cpp:108
......@@ -1010,6 +806,18 @@ msgstr "Position"
msgid "Orientation"
msgstr "Orientation"
#: pcbnew/pcbtexte.cpp:177
#: pcbnew/muonde.cpp:353
#: pcbnew/cotation.cpp:118
#: pcbnew/dialog_edit_module.cpp:237
#: pcbnew/dialog_edit_module.cpp:279
#: eeschema/dialog_options.cpp:229
#: eeschema/options.cpp:177
#: eeschema/dialog_edit_component_in_schematic.cpp:182
#: eeschema/editpart.cpp:312
msgid "Normal"
msgstr "Normal"
#: pcbnew/pcbtexte.cpp:177
#: pcbnew/modedit_onclick.cpp:246
#: pcbnew/cotation.cpp:118
......@@ -1794,75 +1602,78 @@ msgstr "Inclure pistes autorout
msgid "Include Locked Tracks"
msgstr "Inclure pistes verrouilles"
#: pcbnew/drc.cpp:72
#: pcbnew/drc.cpp:65
msgid "Look for active routes\n"
msgstr "Recherche des chevelus actifs\n"
#: pcbnew/drc.cpp:71
msgid "Unconnected found:\n"
msgstr "Non connect trouv:\n"
#: pcbnew/drc.cpp:76
#, c-format
msgid ""
"Unconnected:\n"
"Pad @ %.4f,%.4f and\n"
"Pad @ %.4f,%.4f\n"
msgstr ""
"Non connect:\n"
"Pad @ %.4f,%.4f et\n"
"Pad @ %.4f,%.4f\n"
msgid "%d > Pad %s (%s) @ %.4f,%.4f and "
msgstr "%d > Pad %s (%s) @ %.4f,%.4f et "
#: pcbnew/drc.cpp:78
#: pcbnew/drc.cpp:84
#, c-format
msgid "Pad %s (%s) @ %.4f,%.4f\n"
msgstr "Pad %s (%s) @ %.4f,%.4f\n"
#: pcbnew/drc.cpp:89
#, c-format
msgid "Active routes: %d\n"
msgstr "Active routes: %d\n"
#: pcbnew/drc.cpp:79
msgid "OK! (No unconnect)\n"
msgstr "OK! (Pas de non connect)\n"
#: pcbnew/drc.cpp:81
msgid "End tst"
msgstr "Fin tst"
#: pcbnew/drc.cpp:90
msgid "OK! (No active routes)\n"
msgstr "OK! (Pas de chevelu actif)\n"
#: pcbnew/drc.cpp:99
#: pcbnew/drc.cpp:112
#, c-format
msgid "** End Drc: %d errors **\n"
msgstr "** FinDrc: %d erreurs **\n"
#: pcbnew/drc.cpp:100
#: pcbnew/drc.cpp:114
msgid "** End Drc: No Error **\n"
msgstr "** Fin Drc: Aucune Erreur **\n"
#: pcbnew/drc.cpp:215
#: pcbnew/drc.cpp:229
msgid "SegmNb"
msgstr "SegmNb"
#: pcbnew/drc.cpp:216
#: pcbnew/drc.cpp:230
msgid "Track Err"
msgstr "Err Pistes"
#: pcbnew/drc.cpp:219
#: pcbnew/drc.cpp:233
msgid "Tst Tracks\n"
msgstr "Tst Pistes\n"
#: pcbnew/drc.cpp:238
#: pcbnew/drc.cpp:252
#: eeschema/eelayer.cpp:141
msgid "Netname"
msgstr "NetName"
#: pcbnew/drc.cpp:934
#: pcbnew/drc.cpp:950
#, c-format
msgid "%d Err type %d sur PAD @ %d,%d\n"
msgstr "%d Err type %d sur PAD @ %d,%d\n"
msgid "%d Drc Err %d PAD %s (%s) @ %d,%d\n"
msgstr "%d Err Drc %d PAD %s (%s) @ %d,%d\n"
#: pcbnew/drc.cpp:943
#: pcbnew/drc.cpp:961
#, c-format
msgid "%d Err type %d: sur VIA @ %d,%d\n"
msgstr "%d Err type %d: sur VIA @ %d,%d\n"
#: pcbnew/drc.cpp:954
#: pcbnew/drc.cpp:972
#, c-format
msgid "%d Err type %d: sur SEGMENT @ %d,%d\n"
msgstr "%d Err type %d: sur SEGMENT @ %d,%d\n"
#: pcbnew/drc.cpp:986
#: pcbnew/drc.cpp:1007
#, c-format
msgid "%d Err pad to pad (PAD @ %d,%d and PAD @ %d,%d\n"
msgstr "%d Err pad to pad (PAD @ %d,%d and PAD @ %d,%d\n"
msgid "%d Drc Err: PAD %s (%s) @ %d,%d and PAD %s (%s) @ %d,%d\n"
msgstr "%d Err Drc: PAD %s (%s) @ %d,%d et PAD %s (%s) @ %d,%d\n"
#: pcbnew/editrack-part2.cpp:31
#, c-format
......@@ -2066,6 +1877,19 @@ msgstr "RefP"
msgid "Net"
msgstr "Net"
#: pcbnew/class_pad.cpp:769
#: pcbnew/affiche.cpp:36
#: pcbnew/affiche.cpp:91
#: pcbnew/affiche.cpp:95
#: pcbnew/affiche.cpp:195
#: pcbnew/affiche.cpp:244
#: pcbnew/class_module.cpp:1040
#: pcbnew/dialog_edit_module.cpp:230
#: pcbnew/sel_layer.cpp:109
#: gerbview/affiche.cpp:102
msgid "Layer"
msgstr "Couche"
#: pcbnew/class_pad.cpp:781
#: pcbnew/affiche.cpp:53
#: pcbnew/affiche.cpp:109
......@@ -2092,6 +1916,16 @@ msgstr "Per
msgid "Drill X / Y"
msgstr "Perage X/Y"
#: pcbnew/class_pad.cpp:810
#: pcbnew/affiche.cpp:47
#: pcbnew/affiche.cpp:103
#: pcbnew/class_module.cpp:1057
#: pcbnew/dialog_edit_module.cpp:238
#: eeschema/affiche.cpp:101
#: gerbview/affiche.cpp:43
msgid "Orient"
msgstr "Orient"
#: pcbnew/class_pad.cpp:814
msgid "X Pos"
msgstr "X Pos"
......@@ -3360,6 +3194,11 @@ msgstr "-90"
msgid "180"
msgstr "180"
#: pcbnew/dialog_pad_edit.cpp:191
#: pcbnew/dialog_edit_module.cpp:237
msgid "User"
msgstr "User"
#: pcbnew/dialog_pad_edit.cpp:193
msgid "Pad Orient:"
msgstr "Orient pad:"
......@@ -4049,14 +3888,176 @@ msgstr "P&ostprocesseurs"
msgid "&3D Display"
msgstr "&3D Visu"
#: pcbnew/menubarpcb.cpp:286
#: pcbnew/menubarmodedit.cpp:78
#: eeschema/menubar.cpp:164
#: cvpcb/tool_cvpcb.cpp:169
#: kicad/buildmnu.cpp:212
#: gerbview/tool_gerber.cpp:148
msgid "&Help"
msgstr "&Aide"
#: pcbnew/menubarpcb.cpp:286
#: pcbnew/menubarmodedit.cpp:78
#: eeschema/menubar.cpp:164
#: cvpcb/tool_cvpcb.cpp:169
#: kicad/buildmnu.cpp:212
#: gerbview/tool_gerber.cpp:148
msgid "&Help"
msgstr "&Aide"
#: pcbnew/dialog_edit_module.cpp:41
msgid "Module properties"
msgstr "Proprits du Module"
#: pcbnew/dialog_edit_module.cpp:94
msgid "Properties"
msgstr "Proprits"
#: pcbnew/dialog_edit_module.cpp:98
#: pcbnew/dialog_edit_module.cpp:107
#: pcbnew/dialog_edit_module.cpp:138
msgid "3D settings"
msgstr "3D Caract"
#: pcbnew/dialog_edit_module.cpp:179
msgid "Change module(s)"
msgstr "Change module(s)"
#: pcbnew/dialog_edit_module.cpp:183
msgid "Goto Module Editor"
msgstr "Ouvrir Editeur de modules"
#: pcbnew/dialog_edit_module.cpp:189
#: eeschema/fieldedi.cpp:283
#: eeschema/onrightclick.cpp:315
#: eeschema/dialog_edit_component_in_lib.cpp:203
#: eeschema/libedpart.cpp:246
msgid "Doc"
msgstr "Doc"
#: pcbnew/dialog_edit_module.cpp:195
msgid "Keywords"
msgstr "Mots Cles"
#: pcbnew/dialog_edit_module.cpp:202
msgid "Fields:"
msgstr "Champs:"
#: pcbnew/dialog_edit_module.cpp:212
msgid "Add Field"
msgstr "Ajouter Champ"
#: pcbnew/dialog_edit_module.cpp:217
#: eeschema/onrightclick.cpp:253
msgid "Edit Field"
msgstr "Editer Champ"
#: pcbnew/dialog_edit_module.cpp:222
msgid "Delete Field"
msgstr "Supprimer Champ"
#: pcbnew/dialog_edit_module.cpp:229
#: common/common.cpp:242
msgid "Component"
msgstr "Composant"
#: pcbnew/dialog_edit_module.cpp:229
msgid "Copper"
msgstr "Cuivre"
#: pcbnew/dialog_edit_module.cpp:270
msgid "Orient (0.1 deg)"
msgstr "Orient (0.1 deg)"
#: pcbnew/dialog_edit_module.cpp:279
msgid "Normal+Insert"
msgstr "Normal+Insert"
#: pcbnew/dialog_edit_module.cpp:279
msgid "Virtual"
msgstr "Virtuel"
#: pcbnew/dialog_edit_module.cpp:280
msgid "Attributs"
msgstr "Attributs"
#: pcbnew/dialog_edit_module.cpp:283
msgid "Use this attribute for most non smd components"
msgstr "Utiliser cet attribut pour la plupart des composants"
#: pcbnew/dialog_edit_module.cpp:285
msgid ""
"Use this attribute for smd components.\n"
"Only components with this option are put in the footprint position list file"
msgstr ""
"Uiliser cet attribut pour les composants CMS.\n"
"Seuls les composantsavec cette option sont mis dans le fichier de position des composants"
#: pcbnew/dialog_edit_module.cpp:287
msgid "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)"
msgstr "Uiliser cet attribut pour les composants \"virtuels\" directement dessins sur le PCB (tel que les vieux connecteurs ISA de PC)"
#: pcbnew/dialog_edit_module.cpp:311
msgid "Free"
msgstr "Libre"
#: pcbnew/dialog_edit_module.cpp:311
msgid "Locked"
msgstr "Verrouill"
#: pcbnew/dialog_edit_module.cpp:312
msgid "Move and Auto Place"
msgstr "Move et Placement Automatique"
#: pcbnew/dialog_edit_module.cpp:317
msgid "Enable hotkey move commands and Auto Placement"
msgstr "Autoriser les commandes clavier de dplacement et l'auto placement"
#: pcbnew/dialog_edit_module.cpp:318
msgid "Disable hotkey move commands and Auto Placement"
msgstr "Interdire les commandes clavier de dplacement et l'auto placement"
#: pcbnew/dialog_edit_module.cpp:322
msgid "Rot 90"
msgstr "Rot 90"
#: pcbnew/dialog_edit_module.cpp:329
msgid "Rot 180"
msgstr "Rot 180"
#: pcbnew/dialog_edit_module.cpp:359
msgid "3D Shape Name"
msgstr "3D forme"
#: pcbnew/dialog_edit_module.cpp:375
#: eeschema/dialog_eeschema_config.cpp:227
msgid "Browse"
msgstr "Examiner"
#: pcbnew/dialog_edit_module.cpp:379
msgid "Add 3D Shape"
msgstr "Ajout Forme 3D"
#: pcbnew/dialog_edit_module.cpp:385
msgid "Remove 3D Shape"
msgstr "Suppr. Forme 3D:"
#: pcbnew/dialog_edit_module.cpp:391
msgid "Shape Scale:"
msgstr "Echelle de la forme:"
#: pcbnew/dialog_edit_module.cpp:397
msgid "Shape Offset:"
msgstr "Offset forme:"
#: pcbnew/dialog_edit_module.cpp:404
msgid "Shape Rotation:"
msgstr "Rot de la forme"
#: pcbnew/dialog_edit_module.cpp:441
msgid "3D Shape:"
msgstr "Forme 3D:"
#: pcbnew/dialog_edit_module.cpp:730
msgid "Reference or Value cannot be deleted"
msgstr "Rfrence ou Valeur ne peut etre efface"
#: pcbnew/dialog_edit_module.cpp:734
#, c-format
msgid "Delete [%s]"
msgstr "Supprimer [%s]"
#: pcbnew/edit.cpp:154
msgid "Graphic not autorized on Copper layers"
......@@ -4725,7 +4726,6 @@ msgstr "Propri
#: eeschema/dialog_edit_component_in_schematic.cpp:204
#: eeschema/editpart.cpp:204
#: eeschema/dialog_build_BOM.cpp:279
#: cvpcb/options.cpp:138
#: cvpcb/dialog_display_options.h:43
msgid "Options"
msgstr "Options"
......@@ -7943,58 +7943,48 @@ msgid "&Del Annotate"
msgstr "&Dnumrotation"
#: cvpcb/dialog_display_options.cpp:141
#: cvpcb/options.cpp:159
msgid "Pad &Num"
msgstr "Pad &Num"
#: cvpcb/dialog_display_options.cpp:148
#: cvpcb/options.cpp:153
msgid "&Pad Fill"
msgstr "&Pad plein"
#: cvpcb/dialog_display_options.cpp:155
#: cvpcb/dialog_display_options.cpp:163
#: cvpcb/options.cpp:163
msgid "&Filaire"
msgstr "&Filaire"
#: cvpcb/dialog_display_options.cpp:156
#: cvpcb/dialog_display_options.cpp:164
#: cvpcb/options.cpp:163
msgid "&Filled"
msgstr "&Plein"
#: cvpcb/dialog_display_options.cpp:157
#: cvpcb/dialog_display_options.cpp:165
#: cvpcb/options.cpp:163
msgid "&Sketch"
msgstr "&Contour"
#: cvpcb/dialog_display_options.cpp:159
#: cvpcb/options.cpp:165
msgid "Edges:"
msgstr "Contours:"
#: cvpcb/dialog_display_options.cpp:167
#: cvpcb/options.cpp:173
msgid "Texts:"
msgstr "Textes:"
#: cvpcb/readschematicnetlist.cpp:71
#: cvpcb/viewlogi.cpp:72
#: cvpcb/rdorcad.cpp:73
#: cvpcb/rdpcad.cpp:56
#, c-format
msgid "Unknown file format <%s>"
msgstr " Format fichier inconnu <%s>"
#: cvpcb/readschematicnetlist.cpp:76
#: cvpcb/rdorcad.cpp:78
msgid "Netlist Format: EESchema"
msgstr " Formats NetListe: EESchema"
#: cvpcb/readschematicnetlist.cpp:126
#: cvpcb/rdorcad.cpp:122
#, c-format
msgid "Netlist error: %s"
msgstr "Erreur Netliste: %s"
......@@ -8427,112 +8417,117 @@ msgstr "Executer le Script Python:"
msgid "Load file:"
msgstr "Charger Fichiers:"
#: kicad/treeprj_frame.cpp:63
#: kicad/treeprj_frame.cpp:65
msgid "&Run"
msgstr "Excute&r"
#: kicad/treeprj_frame.cpp:64
#: kicad/treeprj_frame.cpp:66
msgid "Run the Python Script"
msgstr "Excuter le Script Python"
#: kicad/treeprj_frame.cpp:70
#: kicad/treeprj_frame.cpp:72
#: kicad/treeprj_frame.cpp:118
msgid "&Edit in a text editor"
msgstr "Editer avec un diteur de Texte"
#: kicad/treeprj_frame.cpp:71
msgid "Edit the Python Script in a Text Editor"
msgstr "Editer le script python"
#: kicad/treeprj_frame.cpp:73
msgid "&Open the file in a Text Editor"
msgstr "&Ouvrir le fichier avec un Editeur de texte"
#: kicad/treeprj_frame.cpp:84
#: kicad/treeprj_frame.cpp:86
msgid "New D&irectory"
msgstr "&Nouveau Rpertoire"
#: kicad/treeprj_frame.cpp:84
#: kicad/treeprj_frame.cpp:86
msgid "Create a New Directory"
msgstr "Crer un nouveau Rpertoire"
#: kicad/treeprj_frame.cpp:89
#: kicad/treeprj_frame.cpp:91
msgid "New P&ython Script"
msgstr "Nouveau Script P&ython"
#: kicad/treeprj_frame.cpp:89
#: kicad/treeprj_frame.cpp:91
msgid "Create a New Python Script"
msgstr "Crer un nouveau script Python"
#: kicad/treeprj_frame.cpp:94
#: kicad/treeprj_frame.cpp:96
msgid "New &Text File"
msgstr "Nouveau Fichier &Texte"
#: kicad/treeprj_frame.cpp:94
#: kicad/treeprj_frame.cpp:96
msgid "Create a New Txt File"
msgstr "Crer un nouveau Fichier texte"
#: kicad/treeprj_frame.cpp:98
#: kicad/treeprj_frame.cpp:100
msgid "New &File"
msgstr "Nouveau &Fichier"
#: kicad/treeprj_frame.cpp:98
#: kicad/treeprj_frame.cpp:100
msgid "Create a New File"
msgstr "Crer un nouveau Fichier"
#: kicad/treeprj_frame.cpp:109
#: kicad/treeprj_frame.cpp:111
msgid "&Rename File"
msgstr "&Renommer Fichier"
#: kicad/treeprj_frame.cpp:109
#: kicad/treeprj_frame.cpp:111
msgid "&Rename Directory"
msgstr "&Renommer Rpertoire"
#: kicad/treeprj_frame.cpp:110
#: kicad/treeprj_frame.cpp:112
msgid "Rename the File"
msgstr "Renommer le Fichier"
#: kicad/treeprj_frame.cpp:110
#: kicad/treeprj_frame.cpp:112
msgid "&Rename the Directory"
msgstr "&Renommer le Rpertoire"
#: kicad/treeprj_frame.cpp:114
#: kicad/treeprj_frame.cpp:119
msgid "Open the file in a Text Editor"
msgstr "Ouvrir le fichier avec un Editeur de texte"
#: kicad/treeprj_frame.cpp:124
msgid "&Delete File"
msgstr "&Supprimer Fichier"
#: kicad/treeprj_frame.cpp:114
#: kicad/treeprj_frame.cpp:124
msgid "&Delete Directory"
msgstr "&Supprimer le Rpertoire"
#: kicad/treeprj_frame.cpp:115
#: kicad/treeprj_frame.cpp:125
msgid "Delete the File"
msgstr "Supprimer le fichier"
#: kicad/treeprj_frame.cpp:115
#: kicad/treeprj_frame.cpp:125
msgid "&Delete the Directory and its content"
msgstr "Effacer le Rpertoire et son contenu"
#: kicad/treeprj_frame.cpp:342
#: kicad/treeprj_frame.cpp:344
msgid "Create New File:"
msgstr "Crer un nouveau Fichier"
#: kicad/treeprj_frame.cpp:342
#: kicad/treeprj_frame.cpp:344
msgid "Create New Directory"
msgstr "Crer un nouveau Rpertoire"
#: kicad/treeprj_frame.cpp:344
#: kicad/treeprj_frame.cpp:346
msgid "noname"
msgstr "noname"
#: kicad/treeprj_frame.cpp:643
#: kicad/treeprj_frame.cpp:663
msgid "Change File Name: "
msgstr "ChangerNom Fichier: "
#: kicad/treeprj_datas.cpp:186
#: kicad/treeprj_datas.cpp:182
msgid "Unable to move file ... "
msgstr "Impossible de dplacer le fichier "
#: kicad/treeprj_datas.cpp:186
#: kicad/treeprj_datas.cpp:257
#: kicad/treeprj_datas.cpp:182
#: kicad/treeprj_datas.cpp:253
msgid "Permission error ?"
msgstr ""
#: kicad/treeprj_datas.cpp:244
#: kicad/treeprj_datas.cpp:240
msgid ""
"Changing file extension will change file type.\n"
" Do you want to continue ?"
......@@ -8540,19 +8535,19 @@ msgstr ""
"Changer l'extension changera le type de fichier.\n"
"Voulez vous continuer ?"
#: kicad/treeprj_datas.cpp:245
#: kicad/treeprj_datas.cpp:241
msgid "Rename File"
msgstr "Renommer Fichier"
#: kicad/treeprj_datas.cpp:257
#: kicad/treeprj_datas.cpp:253
msgid "Unable to rename file ... "
msgstr "Impossible de renommer le fichier... "
#: kicad/treeprj_datas.cpp:275
#: kicad/treeprj_datas.cpp:271
msgid "Do you really want to delete "
msgstr "Voulez vous rellemant effacer"
#: kicad/treeprj_datas.cpp:275
#: kicad/treeprj_datas.cpp:271
msgid "Delete File"
msgstr "Supprimer Fichier"
......@@ -9077,126 +9072,6 @@ msgstr "X"
msgid "Y"
msgstr "Y"
#: common/common.cpp:44
msgid " (\"):"
msgstr " (\"):"
#: common/common.cpp:239
msgid "Copper "
msgstr "Cuivre "
#: common/common.cpp:239
msgid "Inner L1 "
msgstr "Interne 1"
#: common/common.cpp:239
msgid "Inner L2 "
msgstr "Interne 2"
#: common/common.cpp:239
msgid "Inner L3 "
msgstr "Interne 3"
#: common/common.cpp:240
msgid "Inner L4 "
msgstr "Interne 4"
#: common/common.cpp:240
msgid "Inner L5 "
msgstr "Interne 5"
#: common/common.cpp:240
msgid "Inner L6 "
msgstr "Interne 6"
#: common/common.cpp:240
msgid "Inner L7 "
msgstr "Interne 7"
#: common/common.cpp:241
msgid "Inner L8 "
msgstr "Interne 8"
#: common/common.cpp:241
msgid "Inner L9 "
msgstr "Interne 9"
#: common/common.cpp:241
msgid "Inner L10"
msgstr "Interne 10"
#: common/common.cpp:241
msgid "Inner L11"
msgstr "Interne 11"
#: common/common.cpp:242
msgid "Inner L12"
msgstr "Interne 12"
#: common/common.cpp:242
msgid "Inner L13"
msgstr "Interne 13"
#: common/common.cpp:242
msgid "Inner L14"
msgstr "Interne 14"
#: common/common.cpp:243
msgid "Adhes Cop"
msgstr "Adhes Cu "
#: common/common.cpp:243
msgid "Adhes Cmp"
msgstr "Adhe Cmp"
#: common/common.cpp:243
msgid "SoldP Cop"
msgstr "SoldP Cu "
#: common/common.cpp:243
msgid "SoldP Cmp"
msgstr "SoldP Cmp"
#: common/common.cpp:244
msgid "SilkS Cop"
msgstr "Srigr Cu "
#: common/common.cpp:244
msgid "SilkS Cmp"
msgstr "Srigr Cmp"
#: common/common.cpp:244
msgid "Mask Copp"
msgstr "Masque Cu "
#: common/common.cpp:244
msgid "Mask Cmp "
msgstr "Masque Cmp"
#: common/common.cpp:245
msgid "Drawings "
msgstr "Drawings "
#: common/common.cpp:245
msgid "Comments "
msgstr "Comments "
#: common/common.cpp:245
msgid "Eco1 "
msgstr "Eco1 "
#: common/common.cpp:245
msgid "Eco2 "
msgstr "Eco2 "
#: common/common.cpp:246
msgid "Edges Pcb"
msgstr "Contour Pcb"
#: common/common.cpp:246
msgid "--- "
msgstr "--- "
#: common/basicframe.cpp:217
#, c-format
msgid "Help file %s not found"
......@@ -9365,6 +9240,126 @@ msgstr "Langage"
msgid "No default editor found, you must choose it"
msgstr "Pas d'diteur par dfaut trouv, vous devez en choisir un"
#: common/common.cpp:44
msgid " (\"):"
msgstr " (\"):"
#: common/common.cpp:239
msgid "Copper "
msgstr "Cuivre "
#: common/common.cpp:239
msgid "Inner L1 "
msgstr "Interne 1"
#: common/common.cpp:239
msgid "Inner L2 "
msgstr "Interne 2"
#: common/common.cpp:239
msgid "Inner L3 "
msgstr "Interne 3"
#: common/common.cpp:240
msgid "Inner L4 "
msgstr "Interne 4"
#: common/common.cpp:240
msgid "Inner L5 "
msgstr "Interne 5"
#: common/common.cpp:240
msgid "Inner L6 "
msgstr "Interne 6"
#: common/common.cpp:240
msgid "Inner L7 "
msgstr "Interne 7"
#: common/common.cpp:241
msgid "Inner L8 "
msgstr "Interne 8"
#: common/common.cpp:241
msgid "Inner L9 "
msgstr "Interne 9"
#: common/common.cpp:241
msgid "Inner L10"
msgstr "Interne 10"
#: common/common.cpp:241
msgid "Inner L11"
msgstr "Interne 11"
#: common/common.cpp:242
msgid "Inner L12"
msgstr "Interne 12"
#: common/common.cpp:242
msgid "Inner L13"
msgstr "Interne 13"
#: common/common.cpp:242
msgid "Inner L14"
msgstr "Interne 14"
#: common/common.cpp:243
msgid "Adhes Cop"
msgstr "Adhes Cu "
#: common/common.cpp:243
msgid "Adhes Cmp"
msgstr "Adhe Cmp"
#: common/common.cpp:243
msgid "SoldP Cop"
msgstr "SoldP Cu "
#: common/common.cpp:243
msgid "SoldP Cmp"
msgstr "SoldP Cmp"
#: common/common.cpp:244
msgid "SilkS Cop"
msgstr "Srigr Cu "
#: common/common.cpp:244
msgid "SilkS Cmp"
msgstr "Srigr Cmp"
#: common/common.cpp:244
msgid "Mask Cop "
msgstr "Masque Cu "
#: common/common.cpp:244
msgid "Mask Cmp "
msgstr "Masque Cmp"
#: common/common.cpp:245
msgid "Drawings "
msgstr "Drawings "
#: common/common.cpp:245
msgid "Comments "
msgstr "Comments "
#: common/common.cpp:245
msgid "Eco1 "
msgstr "Eco1 "
#: common/common.cpp:245
msgid "Eco2 "
msgstr "Eco2 "
#: common/common.cpp:246
msgid "Edges Pcb"
msgstr "Contour Pcb"
#: common/common.cpp:246
msgid "--- "
msgstr "--- "
#: 3d-viewer/3d_canvas.cpp:290
#: share/zoom.cpp:346
msgid "Zoom +"
......
......@@ -23,10 +23,6 @@
#include "bitmaps/icon_gerbview_small.xpm"
#include "bitmaps/icon_cvpcb_small.xpm"
#include "bitmaps/unknown.xpm"
//#include "bitmaps/new_gerb.xpm"
//#include "bitmaps/new_pcb.xpm"
//#include "bitmaps/new_sch.xpm"
//#include "bitmaps/new_cvpcb.xpm"
#include "id.h"
......
......@@ -20,7 +20,9 @@
#include "wx/dir.h"
#include "bitmaps.h"
#ifdef KICAD_PYTHON
#include "bitmaps/new_python.xpm"
#endif
#include "id.h"
......@@ -68,7 +70,7 @@ WinEDA_PrjFrame::WinEDA_PrjFrame(WinEDA_MainFrame * parent,
item = new wxMenuItem(menu, ID_PROJECT_TXTEDIT,
_("&Edit in a text editor"),
_("Edit the Python Script in a Text Editor") );
_("&Open the file in a Text Editor") );
item->SetBitmap( icon_txt_xpm );
menu->Append( item );
......@@ -110,6 +112,14 @@ WinEDA_PrjFrame::WinEDA_PrjFrame(WinEDA_MainFrame * parent,
, TREE_DIRECTORY != i ? _("Rename the File") : _("&Rename the Directory") );
item->SetBitmap( right_xpm );
menu->Append( item );
if ( TREE_DIRECTORY != i )
{
item = new wxMenuItem(menu, ID_PROJECT_TXTEDIT
, _("&Edit in a text editor")
, _("Open the file in a Text Editor"));
item->SetBitmap( icon_txt_xpm );
menu->Append( item );
}
item = new wxMenuItem(menu, ID_PROJECT_DELETE
, TREE_DIRECTORY != i ? _("&Delete File") : _("&Delete Directory")
, TREE_DIRECTORY != i ? _("Delete the File") : _("&Delete the Directory and its content") );
......@@ -132,12 +142,8 @@ BEGIN_EVENT_TABLE(WinEDA_PrjFrame, wxSashLayoutWindow)
EVT_MENU(ID_PROJECT_TXTEDIT, WinEDA_PrjFrame::OnTxtEdit)
EVT_MENU(ID_PROJECT_NEWFILE, WinEDA_PrjFrame::OnNewFile)
EVT_MENU(ID_PROJECT_NEWDIR, WinEDA_PrjFrame::OnNewDirectory)
EVT_MENU(ID_PROJECT_NEWSCH, WinEDA_PrjFrame::OnNewSchFile)
EVT_MENU(ID_PROJECT_NEWBRD, WinEDA_PrjFrame::OnNewBrdFile)
EVT_MENU(ID_PROJECT_NEWPY, WinEDA_PrjFrame::OnNewPyFile)
EVT_MENU(ID_PROJECT_NEWGERBER, WinEDA_PrjFrame::OnNewGerberFile)
EVT_MENU(ID_PROJECT_NEWTXT, WinEDA_PrjFrame::OnNewTxtFile)
EVT_MENU(ID_PROJECT_NEWNET, WinEDA_PrjFrame::OnNewNetFile)
EVT_MENU(ID_PROJECT_DELETE, WinEDA_PrjFrame::OnDeleteFile)
EVT_MENU(ID_PROJECT_RENAME, WinEDA_PrjFrame::OnRenameFile)
......@@ -312,12 +318,8 @@ wxMenu * WinEDA_PrjFrame::GetContextMenu( int type )
void WinEDA_PrjFrame::OnNewDirectory(wxCommandEvent & event) { NewFile( TREE_DIRECTORY ); }
void WinEDA_PrjFrame::OnNewFile(wxCommandEvent & event) { NewFile( TREE_UNKNOWN ); }
void WinEDA_PrjFrame::OnNewSchFile(wxCommandEvent & event) { NewFile( TREE_SCHEMA ); }
void WinEDA_PrjFrame::OnNewBrdFile(wxCommandEvent & event) { NewFile( TREE_PCB ); }
void WinEDA_PrjFrame::OnNewPyFile(wxCommandEvent & event) { NewFile( TREE_PY ); }
void WinEDA_PrjFrame::OnNewGerberFile(wxCommandEvent & event) { NewFile( TREE_GERBER ); }
void WinEDA_PrjFrame::OnNewTxtFile(wxCommandEvent & event) { NewFile( TREE_TXT ); }
void WinEDA_PrjFrame::OnNewNetFile(wxCommandEvent & event) { NewFile( TREE_NET ); }
/******************************************************************/
void WinEDA_PrjFrame::NewFile( enum TreeFileType type )
......@@ -393,30 +395,48 @@ void WinEDA_PrjFrame::NewFile( const wxString & name,
wxString WinEDA_PrjFrame::GetFileExt( enum TreeFileType type )
/******************************************************************/
{
wxString extensions[] =
{
wxT( "" ), // 0 is not used
wxT( ".pro" ), // TREE_PROJECT
g_SchExtBuffer, // TREE_SCHEMA
g_BoardExtBuffer, // TREE_PCB
wxT( ".py" ), // TREE_PY
g_GerberExtBuffer, // TREE_GERBER
wxT( ".pdf" ), // TREE_PDF
wxT( ".txt" ), // TREE_TXT
wxT( ".net" ), // TREE_NET
wxT( "" ), // TREE_UNKNOWN
wxT( "" ), // TREE_DIRECTORY
wxString ext;
switch ( type )
{
case 0 :
break; // 0 is not used
case TREE_PROJECT:
ext = wxT( ".pro" );
break;
case TREE_SCHEMA:
ext = g_SchExtBuffer;
break;
case TREE_PCB:
ext = g_BoardExtBuffer;
break;
case TREE_PY:
ext = wxT( ".py" );
break;
case TREE_GERBER:
ext = g_GerberExtBuffer;
break;
case TREE_PDF:
ext = wxT( ".pdf" );
break;
case TREE_TXT:
ext = wxT( ".txt" );
break;
case TREE_NET:
ext = wxT( ".net" );
break;
default:
break;
};
if ( type < TREE_MAX ) return extensions[type];
return wxEmptyString;
return ext;
}
/**************************************************************************/
void WinEDA_PrjFrame::AddFile( const wxString & name, wxTreeItemId & root )
/**************************************************************************/
/* add filename "name" to the tree
if name is adirectory, add the sub directory file names
if name is a directory, add the sub directory file names
*/
{
wxTreeItemId cellule;
......
......@@ -17,7 +17,7 @@ KICAD_BIN = /f/kicad/winexe
#Define the wxWidget path (if not found in environment variables):
ifndef WXWIN
WXWIN=/f/wxMSW-2.8.4
WXWIN=f:/wxMSW-2.8.4
endif
LIBVERSION = 2.8
......
......@@ -17,7 +17,7 @@
; General Product Description Definitions
!define PRODUCT_NAME "KiCad"
!define PRODUCT_VERSION "2007.05.25"
!define PRODUCT_VERSION "2007.07.09"
!define PRODUCT_WEB_SITE "http://www.lis.inpg.fr/realise_au_lis/kicad/"
!define COMPANY_NAME ""
!define TRADE_MARKS ""
......
......@@ -78,7 +78,7 @@ void D_PAD::ComputeRayon(void)
}
/*********************************************/
const wxPoint D_PAD::ReturnShapePos(void) const
const wxPoint D_PAD::ReturnShapePos(void)
/*********************************************/
// retourne la position de la forme (pastilles excentrees)
{
......
......@@ -76,7 +76,7 @@ public:
wxString ReturnStringPadName(void); // Return pad name as string in a wxString
void ReturnStringPadName(wxString & text); // Return pad name as string in a buffer
void ComputeRayon(void); // met a jour m_Rayon, rayon du cercle exinscrit
const wxPoint ReturnShapePos(void) const; // retourne la position
const wxPoint ReturnShapePos(void); // retourne la position
// de la forme (pastilles excentrees)
void Display_Infos(WinEDA_BasePcbFrame * frame);
};
......
......@@ -125,6 +125,7 @@ public:
////@end WinEDA_DrcFrame member variables
WinEDA_PcbFrame * m_Parent;
wxDC * m_DC;
int m_UnconnectedCount;
};
#endif
......
/*******************************/
/* Edition des pistes */
/* Routines DRC */
/*******************************/
/****************************/
/* DRC control */
/****************************/
#include "fctsys.h"
#include "gr_basic.h"
......@@ -28,7 +27,7 @@ static int segm_long; // longueur du segment de reference
static int xcliplo,ycliplo,xcliphi,ycliphi ; /* coord de la surface de securite du segment a comparer */
/* Routines Locales */
static int Pad_to_Pad_Isol(const D_PAD * pad_ref, const D_PAD * pad, const int dist_min);
static int Pad_to_Pad_Isol(D_PAD * pad_ref, D_PAD * pad, const int dist_min);
static bool TestPadDrc(WinEDA_BasePcbFrame *frame, wxDC * DC, D_PAD * pad_ref,
LISTE_PAD * start_buffer, LISTE_PAD * end_buffer, int max_size, bool show_err);
static int distance_a_pad(const D_PAD* pad_to_test, int seg_width, int isol);
......@@ -37,7 +36,7 @@ static int Tst_Ligne(int x1,int y1,int x2,int y2);
static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
TRACK * pt_ref, void * pt_item, int errnumber);
static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC,
BOARD * Pcb, const D_PAD * pad1, const D_PAD * pad2);
BOARD * Pcb, D_PAD * pad1, D_PAD * pad2);
......@@ -51,9 +50,9 @@ void WinEDA_DrcFrame::ListUnconnectedPads(wxCommandEvent & event)
/***************************************************************/
{
if( (m_Parent->m_Pcb->m_Status_Pcb & LISTE_CHEVELU_OK) == 0 )
{
{
m_Parent->Compile_Ratsnest( m_DC, TRUE);
}
}
if( m_Parent->m_Pcb->m_Ratsnest == NULL ) return;
CHEVELU* Ratsnest = m_Parent->m_Pcb->m_Ratsnest;
......@@ -62,23 +61,34 @@ WinEDA_DrawPanel * panel = m_Parent->DrawPanel;
int ii;
wxString msg;
float convert = 0.0001;
int unconnect = 0;
m_logWindow->AppendText(_("Look for active routes\n"));
m_UnconnectedCount = 0;
for( ii = m_Parent->m_Pcb->GetNumRatsnests() ;ii > 0; Ratsnest++, ii--)
{
{
if( (Ratsnest->status & CH_ACTIF) == 0) continue;
unconnect++;
Ratsnest->pad_start->Draw(panel, m_DC, wxPoint(0,0),draw_mode);
Ratsnest->pad_end->Draw(panel, m_DC, wxPoint(0,0),draw_mode);
msg.Printf(_("Unconnected:\nPad @ %.4f,%.4f and\nPad @ %.4f,%.4f\n"),
Ratsnest->pad_start->m_Pos.x * convert, Ratsnest->pad_start->m_Pos.y * convert,
Ratsnest->pad_end->m_Pos.x * convert, Ratsnest->pad_end->m_Pos.y * convert);
m_UnconnectedCount++;
if ( m_UnconnectedCount == 1 ) m_logWindow->AppendText(_("Unconnected found:\n") );
D_PAD * pad = Ratsnest->pad_start;
pad->Draw(panel, m_DC, wxPoint(0,0),draw_mode);
wxString pad_name = pad->ReturnStringPadName();
wxString module_name = ((MODULE*)(pad->m_Parent))->m_Reference->m_Text;
msg.Printf(_("%d > Pad %s (%s) @ %.4f,%.4f and "), m_UnconnectedCount,
pad_name.GetData(), module_name.GetData(), pad->m_Pos.x * convert, pad->m_Pos.y * convert);
m_logWindow->AppendText(msg);
}
if ( unconnect ) msg.Printf(_("Active routes: %d\n"), unconnect);
else msg = _("OK! (No unconnect)\n");
pad = Ratsnest->pad_end;
pad->Draw(panel, m_DC, wxPoint(0,0),draw_mode);
pad_name = pad->ReturnStringPadName();
module_name = ((MODULE*)(pad->m_Parent))->m_Reference->m_Text;
msg.Printf(_("Pad %s (%s) @ %.4f,%.4f\n"),
pad_name.GetData(), module_name.GetData(), pad->m_Pos.x * convert, pad->m_Pos.y * convert);
m_logWindow->AppendText(msg);
}
if ( m_UnconnectedCount ) msg.Printf(_("Active routes: %d\n"), m_UnconnectedCount);
else msg = _("OK! (No active routes)\n");
m_logWindow->AppendText(msg);
m_logWindow->AppendText(_("End tst"));
}
......@@ -94,10 +104,14 @@ wxString msg;
m_logWindow->Clear();
g_DesignSettings.m_TrackClearence =
ReturnValueFromTextCtrl(*m_SetClearance, m_Parent->m_InternalUnits);
/* Test DRC errors (clearance errors, bad connections .. */
errors = m_Parent->Test_DRC(m_DC);
/* Serach for active routes (unconnected pads) */
ListUnconnectedPads(event);
if ( errors )
msg.Printf(_("** End Drc: %d errors **\n"),errors);
else msg = _("** End Drc: No Error **\n");
else if ( m_UnconnectedCount == 0 )
msg = _("** End Drc: No Error **\n");
m_logWindow->AppendText(msg);
}
else wxBell();
......@@ -655,7 +669,7 @@ LISTE_PAD * pad_list = start_buffer;
}
/**************************************************************************************/
static int Pad_to_Pad_Isol(const D_PAD * pad_ref, const D_PAD * pad, const int dist_min)
static int Pad_to_Pad_Isol(D_PAD * pad_ref, D_PAD * pad, const int dist_min)
/***************************************************************************************/
/* Return OK_DRC si distance entre pad_ref et pas >= dist_min
et BAD_DRC sinon */
......@@ -922,45 +936,49 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
number = numero d'identification
*/
{
int ercx, ercy;
D_PAD * pt_pad;
wxPoint erc_pos;
D_PAD * pad;
TRACK * pt_segm;
wxString msg;
if( ((EDA_BaseStruct*)pt_item)->m_StructType == TYPEPAD )
{
pt_pad = (D_PAD*) pt_item;
ercx = pt_pad->m_Pos.x; ercy = pt_pad->m_Pos.y;
msg.Printf(_("%d Err type %d sur PAD @ %d,%d\n"),
NumberOfErrors, errnumber, ercx,ercy);
}
{
pad = (D_PAD*) pt_item;
erc_pos = pad->m_Pos;
wxString pad_name = pad->ReturnStringPadName();
wxString module_name = ((MODULE*)(pad->m_Parent))->m_Reference->m_Text;
msg.Printf(_("%d Drc Err %d PAD %s (%s) @ %d,%d\n"),
NumberOfErrors, errnumber,
pad_name.GetData(), module_name.GetData(),
erc_pos.x, erc_pos.y);
}
else /* erreur sur segment de piste */
{
{
pt_segm = (TRACK *) pt_item;
ercx = pt_segm->m_Start.x; ercy = pt_segm->m_Start.y;
erc_pos = pt_segm->m_Start;
if(pt_segm->m_StructType == TYPEVIA)
{
{
msg.Printf(_("%d Err type %d: sur VIA @ %d,%d\n"),
NumberOfErrors, errnumber,ercx,ercy);
}
NumberOfErrors, errnumber,erc_pos.x,erc_pos.y);
}
else
{
wxPoint erc_pos_f = pt_segm->m_End;
if(hypot( (double)(erc_pos_f.x - pt_ref->m_End.x),(double)(erc_pos_f.y - pt_ref->m_End.y) )
< hypot( (double)(erc_pos.x - pt_ref->m_End.x),(double)(erc_pos.y - pt_ref->m_End.y) ) )
{
int ercfx = pt_segm->m_End.x, ercfy = pt_segm->m_End.y;
if(hypot( (double)(ercfx - pt_ref->m_End.x),(double)(ercfy - pt_ref->m_End.y) )
< hypot( (double)(ercx - pt_ref->m_End.x),(double)(ercy - pt_ref->m_End.y) ) )
{
EXCHG(ercfx, ercx); EXCHG(ercfy, ercy);
}
msg.Printf(_("%d Err type %d: sur SEGMENT @ %d,%d\n"),
NumberOfErrors, errnumber,ercx,ercy);
EXCHG(erc_pos_f.x, erc_pos.x); EXCHG(erc_pos_f.y, erc_pos.y);
}
msg.Printf(_("%d Err type %d: sur SEGMENT @ %d,%d\n"),
NumberOfErrors, errnumber,erc_pos.x,erc_pos.y);
}
}
if ( DrcFrame ) DrcFrame->m_logWindow->AppendText(msg);
else panel->m_Parent->Affiche_Message(msg);
if(current_marqueur == NULL) current_marqueur = new MARQUEUR(Pcb);
current_marqueur->m_Pos = wxPoint(ercx, ercy);
current_marqueur->m_Pos = wxPoint(erc_pos.x, erc_pos.y);
current_marqueur->m_Color = WHITE;
current_marqueur->m_Diag = msg;
current_marqueur->Draw(panel, DC, GR_OR);
......@@ -969,7 +987,7 @@ wxString msg;
/******************************************************************************/
static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
const D_PAD * pad1, const D_PAD * pad2)
D_PAD * pad1, D_PAD * pad2)
/******************************************************************************/
/* affiche les erreurs de DRC :
......@@ -979,18 +997,21 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
number = numero d'identification
*/
{
int ercx, ercy;
wxString msg;
ercx = pad1->m_Pos.x; ercy = pad1->m_Pos.y;
msg.Printf( _("%d Err pad to pad (PAD @ %d,%d and PAD @ %d,%d\n"),
NumberOfErrors, ercx,ercy,
pad2->m_Pos.x, pad2->m_Pos.y);
wxString pad_name1 = pad1->ReturnStringPadName();
wxString module_name1 = ((MODULE*)(pad1->m_Parent))->m_Reference->m_Text;
wxString pad_name2 = pad2->ReturnStringPadName();
wxString module_name2 = ((MODULE*)(pad2->m_Parent))->m_Reference->m_Text;
msg.Printf( _("%d Drc Err: PAD %s (%s) @ %d,%d and PAD %s (%s) @ %d,%d\n"),
NumberOfErrors, pad_name1.GetData(), module_name1.GetData(), pad1->m_Pos.x,pad1->m_Pos.y,
pad_name2.GetData(), module_name2.GetData(), pad2->m_Pos.x, pad2->m_Pos.y);
if ( DrcFrame ) DrcFrame->m_logWindow->AppendText(msg);
else panel->m_Parent->Affiche_Message(msg);
if(current_marqueur == NULL) current_marqueur = new MARQUEUR(Pcb);
current_marqueur->m_Pos = wxPoint(ercx, ercy);
current_marqueur->m_Pos = pad1->m_Pos;
current_marqueur->m_Color = WHITE;
current_marqueur->m_Diag = msg;
current_marqueur->Draw(panel, DC, GR_OR);
......
......@@ -149,143 +149,77 @@ wxClientDC dc(DrawPanel);
if ( m_Draw3DFrame )
m_Draw3DFrame->NewDisplay();
break;
case ID_MODEDIT_INSERT_MODULE_IN_BOARD:
case ID_MODEDIT_UPDATE_MODULE_IN_BOARD:{
// update modules in the current board,
// not just add it to the board with total disregard for the
// netlist...?
// update module in the current board,
// not just add it to the board with total disregard for the netlist...
WinEDA_PcbFrame * pcbframe = m_Parent->m_PcbFrame;
BOARD * mainpcb = pcbframe->m_Pcb;
MODULE * presmod = m_Pcb->m_Modules; //the module being edited.
//i guess we need to search through the modules here.. they are in a linked list.
//replace based on m_libref?
MODULE* mod = mainpcb->m_Modules;
do{
//need to be careful in this doubly linked-list to maintain order & link
// also have to maintain netname on all the pads according to m_NumPadName.
if(mod->m_LibRef == presmod->m_LibRef){//have to be careful with this test of similarity?
wprintf(L"replace: mod->m_LibRef = %S @ %d %d orient: %d\n", mod->m_LibRef.c_str(),
mod->m_Pos.x, mod->m_Pos.y, mod->m_Orient);
MODULE* newmod = new MODULE(mainpcb);
newmod->Copy(presmod); //this will copy the padstack layers etc
newmod->m_Parent = mainpcb; //modify after the copy above
if(mod->m_Layer != CMP_N){//just changing m_Layer is insufficient.
Change_Side_Module(newmod, &dc);
}
newmod->m_Pos = mod->m_Pos;
newmod->m_Orient =0; //otherwise the pads will be rotated with respect to the module.
//copy data into the pads...
D_PAD* newpad = newmod->m_Pads;
for(; newpad != NULL; newpad = (D_PAD*)newpad->Pnext){
D_PAD* pad = mod->m_Pads;
for(; pad != NULL; pad = (D_PAD*)pad->Pnext){
if(pad->m_NumPadName == newpad->m_NumPadName){
wprintf(L" pad->NumPadName %d @ %d %d :new %d %d, orient: %d\n", pad->m_NumPadName,
pad->m_Pos.x, pad->m_Pos.y, newpad->m_Pos.x, newpad->m_Pos.y, pad->m_Orient);
wprintf(L" pad->m_Netname %S\n", pad->m_Netname.c_str());
newpad->m_Netname = pad->m_Netname;
newpad->m_NetCode = pad->m_NetCode;
newpad->m_logical_connexion = pad->m_logical_connexion;
newpad->m_physical_connexion = pad->m_physical_connexion;
newpad->m_Pos.x += newmod->m_Pos.x; //the pad positions are apparently in global coordinates.
newpad->m_Pos.y += newmod->m_Pos.y;
newpad->m_Orient = pad->m_Orient;
}
}
}
//not sure what to do about m_Drawings..assume they are ok?
//copy only the text in m_Ref and m_Val;
//leave the size and position as in the module in edit.
newmod->m_Reference->m_Text = mod->m_Reference->m_Text;
newmod->m_Value->m_Text = mod->m_Value->m_Text;
wprintf(L"replace: mod->m_Reference = %S\n", newmod->m_Reference->m_Text.c_str());
wprintf(L"replace: mod->m_Value = %S\n", newmod->m_Value->m_Text.c_str());
newmod->m_Attributs = mod->m_Attributs;
newmod->m_Orient = mod->m_Orient;
newmod->flag = mod->flag;
newmod->m_Flags = 0; //inherited from EDA_BaseStruct.
newmod->m_ModuleStatus = mod->m_ModuleStatus;
//redo the boundary boxes
newmod->Set_Rectangle_Encadrement();
newmod->SetRectangleExinscrit();
newmod->m_CntRot90 = mod->m_CntRot90;
newmod->m_CntRot180 = mod->m_CntRot180;
newmod->m_Surface = mod->m_Surface;
pcbframe->Rotate_Module(NULL, newmod, mod->m_Orient, false);
//now, need to replace 'mod' in the linked list with 'newmod'.
//this does not seem to be working correctly..
MODULE* oldmod = mod;
mod = (MODULE*)mod->Pnext;
oldmod->UnLink();
delete oldmod;
//insert the new one.
newmod->Pnext = mainpcb->m_Modules;
mainpcb->m_Modules->Pback = newmod; // check this!
mainpcb->m_Modules = newmod;
newmod->Pback = mainpcb;
wprintf(L"-----\n");
}else{
mod = (MODULE*)mod->Pnext;
MODULE * source_module = NULL;
MODULE * module_in_edit = m_Pcb->m_Modules;
// Search the old module (source) if exists
// Because this source could be deleted when editing the main board...
if ( module_in_edit->m_Link ) // this is not a new module ...
{
source_module = mainpcb->m_Modules;
for( ; source_module != NULL ; source_module = (MODULE *) source_module->Pnext )
{
if( module_in_edit->m_Link == source_module->m_TimeStamp )
break;
}
}while(mod != NULL);
GetScreen()->ClrModify();
pcbframe->GetScreen()->m_CurrentItem = NULL;
mainpcb->m_Status_Pcb = 0;
}
break;
case ID_MODEDIT_INSERT_MODULE_IN_BOARD:
}
if ( (source_module == NULL) && id == (ID_MODEDIT_UPDATE_MODULE_IN_BOARD) ) // source not found
{
WinEDA_PcbFrame * pcbframe = m_Parent->m_PcbFrame;
BOARD * mainpcb = pcbframe->m_Pcb;
MODULE * oldmodule = NULL;
MODULE * module_in_edit = m_Pcb->m_Modules;
// creation du nouveau module sur le PCB en cours
// create a new unit on the PCB, of course.
wxString msg;
msg.Printf( _("Unable to find the footprint source on the main board") );
msg << _("\nCannot update the footprint");
DisplayError(this, msg);
break;
}
if ( (source_module != NULL) && id == (ID_MODEDIT_INSERT_MODULE_IN_BOARD) ) // source not found
{
wxString msg;
msg.Printf( _("A footprint source was found on the main board") );
msg << _("\nCannot insert this footprint");
DisplayError(this, msg);
break;
}
// Create the "new" module
MODULE * newmodule = new MODULE(mainpcb);
newmodule->Copy(module_in_edit);
newmodule->m_Parent = mainpcb; // modifie par la copie
newmodule->m_Parent = mainpcb; // modifie par la copie
newmodule->m_Link = 0;
// Recherche de l'ancien module correspondant
//(qui a pu changer ou disparaitre a la suite d'�ditions)
//locate the corresponding former unit, which may have a different revision.
// I've taken this out, as it is superceded by 'update' above.
/*
if ( module_in_edit->m_Link )
{
oldmodule = mainpcb->m_Modules;
for( ; oldmodule != NULL ; oldmodule = (MODULE *) oldmodule->Pnext )
{
if( module_in_edit->m_Link == oldmodule->m_TimeStamp )
break;
}
}
*/
// Placement du module dans la liste des modules du PCB.
// Put the footprint in the main pcb linked list.
newmodule->Pnext = mainpcb->m_Modules;
mainpcb->m_Modules = newmodule;
newmodule->Pback = mainpcb;
if ( newmodule->Pnext ) newmodule->Pnext->Pback = newmodule;
if ( oldmodule )
{
newmodule = pcbframe->Exchange_Module(this,
oldmodule, newmodule);
if ( source_module ) // this is an update command
{
// The new module replace the old module (pos, orient, ref, value and connexions are kept)
// and the source_module (old module) is deleted
newmodule = pcbframe->Exchange_Module(this, source_module, newmodule);
newmodule->m_TimeStamp = module_in_edit->m_Link;
}
else
{
}
else // This is an insert command
{
wxPoint cursor_pos = pcbframe->GetScreen()->m_Curseur;
pcbframe->GetScreen()->m_Curseur = wxPoint(0,0);
pcbframe->Place_Module(newmodule, NULL);
pcbframe->GetScreen()->m_Curseur = cursor_pos;
newmodule->m_TimeStamp = GetTimeStamp();
}
}
newmodule->m_Flags = 0;
GetScreen()->ClrModify();
pcbframe->GetScreen()->m_CurrentItem = NULL;
mainpcb->m_Status_Pcb = 0;
}
break;
}
break;
case ID_LIBEDIT_IMPORT_PART:
GetScreen()->ClearUndoRedoList();
GetScreen()->m_CurrentItem = NULL;
......
......@@ -209,8 +209,35 @@ bool active, islib = TRUE;
m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,active);
m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,active);
m_HToolBar->EnableTool(ID_MODEDIT_SAVE_LIBMODULE,active && islib);
m_HToolBar->EnableTool(ID_MODEDIT_INSERT_MODULE_IN_BOARD,active);
m_HToolBar->EnableTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD,active);
MODULE * module_in_edit = m_Pcb->m_Modules;
if ( module_in_edit && module_in_edit->m_Link ) // this is not a new module ...
{
WinEDA_PcbFrame * pcbframe = m_Parent->m_PcbFrame;
BOARD * mainpcb = pcbframe->m_Pcb;
MODULE * source_module = mainpcb->m_Modules;
// search if the source module was not deleted:
for( ; source_module != NULL ; source_module = (MODULE *) source_module->Pnext )
{
if( module_in_edit->m_Link == source_module->m_TimeStamp )
break;
}
if ( source_module )
{
m_HToolBar->EnableTool(ID_MODEDIT_INSERT_MODULE_IN_BOARD, false);
m_HToolBar->EnableTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD, true);
}
else // The source was deleted, therefore we can insert but not update the module
{
m_HToolBar->EnableTool(ID_MODEDIT_INSERT_MODULE_IN_BOARD, true);
m_HToolBar->EnableTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD, false);
}
}
else
{
m_HToolBar->EnableTool(ID_MODEDIT_INSERT_MODULE_IN_BOARD,active);
m_HToolBar->EnableTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD, false);
}
if ( GetScreen() )
{
m_HToolBar->EnableTool(ID_MODEDIT_UNDO,GetScreen()->m_UndoList && active);
......
......@@ -16,7 +16,7 @@
/* Routines Locales */
/* Variables locales */
D_PAD* pt_pad_selecte; /* pointeur sur le pad selecte pour edition */
static D_PAD* s_CurrentSelectedPad; /* pointeur sur le pad selecte pour edition */
static wxPoint Pad_OldPos;
......@@ -29,7 +29,7 @@ static void Exit_Move_Pad(WinEDA_DrawPanel * Panel, wxDC * DC)
Remise en etat des conditions initiales avant move si move en cours
*/
{
D_PAD * pad = pt_pad_selecte;
D_PAD * pad = s_CurrentSelectedPad;
Panel->ManageCurseur = NULL;
Panel->ForceCloseManageCurseur = NULL;
......@@ -55,7 +55,7 @@ D_PAD * pad = pt_pad_selecte;
}
EraseDragListe();
pt_pad_selecte = NULL;
s_CurrentSelectedPad = NULL;
g_Drag_Pistes_On = FALSE;
}
......@@ -68,7 +68,7 @@ static void Show_Pad_Move(WinEDA_DrawPanel * panel, wxDC * DC, bool erase)
TRACK * Track;
DRAG_SEGM * pt_drag;
BASE_SCREEN * screen = panel->GetScreen();
D_PAD * pad = pt_pad_selecte;
D_PAD * pad = s_CurrentSelectedPad;
if ( erase ) pad->Draw(panel, DC, wxPoint(0,0), GR_XOR);
pad->m_Pos = screen->m_Curseur;
......@@ -238,7 +238,7 @@ int rX, rY;
/*********************************************************/
void WinEDA_BasePcbFrame::DeletePad(D_PAD* Pad, wxDC * DC)
/*********************************************************/
/* Routine de suppression d'une pastille sur le module selectionne */
/* Function to delete the pad "pad" */
{
MODULE * Module;
wxString line;
......@@ -268,27 +268,26 @@ wxString line;
/*************************************************************/
void WinEDA_BasePcbFrame::StartMovePad(D_PAD * Pad, wxDC * DC)
/*************************************************************/
/* Routine de deplacement d'une pastille */
/* Function to initialise the "move pad" command */
{
MODULE * Module;
/* localisation d'une pastille ? */
if(Pad == NULL ) return;
Module = (MODULE*) Pad->m_Parent;
pt_pad_selecte = Pad ;
s_CurrentSelectedPad = Pad ;
Pad_OldPos = Pad->m_Pos;
Pad->Display_Infos(this);
DrawPanel->ManageCurseur = Show_Pad_Move;
DrawPanel->ForceCloseManageCurseur = Exit_Move_Pad;
/* Affichage du pad en SKETCH */
/* Draw the pad (SKETCH mode) */
Pad->Draw(DrawPanel, DC, wxPoint(0,0),GR_XOR);
Pad->m_Flags |= IS_MOVED;
Pad->Draw(DrawPanel, DC, wxPoint(0,0),GR_XOR);
/* Construction de la liste des segments a "dragger" */
/* Build the list of track segments to drag */
Build_1_Pad_SegmentsToDrag(DrawPanel, DC, Pad);
}
......@@ -318,7 +317,7 @@ MODULE * Module;
dX = Pad->m_Pos.x - Pad_OldPos.x;
dY = Pad->m_Pos.y - Pad_OldPos.y;
RotatePoint(&dX, &dY, - Module->m_Orient );
Pad->m_Pos0.x += dX; pt_pad_selecte->m_Pos0.y += dY;
Pad->m_Pos0.x += dX; s_CurrentSelectedPad->m_Pos0.y += dY;
Pad->m_Flags = 0;
......@@ -330,11 +329,11 @@ MODULE * Module;
/* Tracage des segments dragges */
pt_drag = g_DragSegmentList;
for( ; pt_drag; pt_drag = pt_drag->Pnext)
{
{
Track = pt_drag->m_Segm;
Track->SetState(EDIT,OFF);
Track->Draw(DrawPanel, DC, GR_OR);
}
}
EraseDragListe();
GetScreen()->SetModify();
......
......@@ -568,7 +568,8 @@ int max_layer = m_Pcb->m_BoardSettings->m_CopperLayerCount;
case 'T': // Track list start: fmt = T image layer t_count
sscanf(Line+2, "%d %d %d", & image, & track_layer, & track_count);
track_layer--;
if ( track_layer == max_layer-1 ) track_layer = CMP_N;
if ( (track_layer != CUIVRE_N) && (track_layer == max_layer-1) )
track_layer = CMP_N;
// Read corners: fmt = C x_pos y_pos
for ( int ii = 0; ii < track_count; ii++ )
{
......
......@@ -26,9 +26,9 @@
#include "Update_Module_Board.xpm"
#ifdef __UNIX__
#define LISTBOX_WIDTH 120
#define LISTBOX_WIDTH 140
#else
#define LISTBOX_WIDTH 100
#define LISTBOX_WIDTH 120
#endif
/***************************************************/
......
......@@ -16,23 +16,23 @@ extern wxString g_Main_Title;
wxString MsgInfos(
#ifdef GERBVIEW
wxT("** GERBVIEW (jul 2001 .. 2006) **")
wxT("** GERBVIEW (jul 2001 .. 2007) **")
#else
#ifdef PCBNEW
wxT("** PCBNEW (sept 1992 .. 2006) **")
wxT("** PCBNEW (sept 1992 .. 2007) **")
#endif
#endif
#ifdef CVPCB
wxT("** CVPCB (sept 1992 .. 2006) **")
wxT("** CVPCB (sept 1992 .. 2007) **")
#endif
#ifdef KICAD
wxT("** KICAD (jul 2000 .. 2006) **")
wxT("** KICAD (jul 2000 .. 2007) **")
#endif
#ifdef EESCHEMA
wxT("** EESCHEMA (sept 1994 .. 2006) **")
wxT("** EESCHEMA (sept 1994 .. 2007) **")
#endif
);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment