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 ...@@ -4,6 +4,16 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. 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> 2007-June-21 UPDATE Tim Hanson <tim@hardcarve.com>
================================================================================ ================================================================================
+ pcbnew + pcbnew
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "colors.h" #include "colors.h"
// Define print format d to display a schematic component line // 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" #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) ...@@ -29,10 +29,10 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist(void)
int i , j , k ,l ; int i , j , k ,l ;
char * LibName; char * LibName;
char Line[1024]; char Line[1024];
char label[80] ; /* buffer des references composants */ char component_reference[80] ; /* buffer des references composants */
char ref_schema[80] ; /* buffer de la ref schematique */ char ref_schema[80] ; /* buffer de la ref schematique */
char val[80] ; /* buffer des valeurs/ref.lib */ char footprint_name[80] ; /* buffer des ref.lib */
char postval[80] ; /* buffer de la valeur de fin de ligne (vraie valeur) */ char component_value[80] ; /* buffer des valeurs */
char *ptchar ; /* pointeur de service */ char *ptchar ; /* pointeur de service */
STORECMP * Cmp; STORECMP * Cmp;
...@@ -111,9 +111,9 @@ STORECMP * Cmp; ...@@ -111,9 +111,9 @@ STORECMP * Cmp;
while ( Line[i] == ' ') i++ ; /* i pointe la valeur du composant */ while ( Line[i] == ' ') i++ ; /* i pointe la valeur du composant */
LibName = Line + i; LibName = Line + i;
memset(label, 0, sizeof(label)); memset(component_reference, 0, sizeof(component_reference));
memset(val, 0, sizeof(val) ) ; memset(footprint_name, 0, sizeof(footprint_name) ) ;
memset(postval, 0, sizeof(postval) ) ; memset(component_value, 0, sizeof(component_value) ) ;
memset(alim, 0, sizeof(alim) ) ; memset(alim, 0, sizeof(alim) ) ;
/* lecture valeur du composant */ /* lecture valeur du composant */
...@@ -132,7 +132,8 @@ STORECMP * Cmp; ...@@ -132,7 +132,8 @@ STORECMP * Cmp;
for (j = 0 ; i < k ; i++) for (j = 0 ; i < k ; i++)
{ {
if ( Line[i] == SEPARATEUR ) break ; if ( Line[i] == SEPARATEUR ) break ;
if ( j < 8 ) val[j++] = Line[i] ; if ( j < (int)(sizeof(footprint_name)-1) )
footprint_name[j++] = Line[i] ;
} }
if ( (Line[++i] == '(') && (Line[k-1] == ')' ) ) if ( (Line[++i] == '(') && (Line[k-1] == ')' ) )
...@@ -147,21 +148,20 @@ STORECMP * Cmp; ...@@ -147,21 +148,20 @@ STORECMP * Cmp;
while(Line[i] == ' ') i++ ; /* recherche debut reference */ while(Line[i] == ' ') i++ ; /* recherche debut reference */
/* debut reference trouv */ /* 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 ; if ( Line[i] <= ' ' ) break ;
label[k] = Line[i] ; component_reference[k] = Line[i] ;
} }
/* recherche vraie valeur du composant */ /* recherche valeur du composant */
while(Line[i] != ' ') i++ ; /* elimination fin reference */ while(Line[i] == ' ') i++ ; /* recherche debut valeur */
while(Line[i] == ' ') i++ ; /* recherche debut vraie valeur */
/* debut vraie valeur trouve */ /* debut vraie valeur trouvee */
for ( k = 0 ; k < 16 ; i++ , k++ ) for ( k = 0 ; k < (int)(sizeof(component_value)-1) ; i++ , k++ )
{ {
if ( Line[i] <= ' ' ) break ; if ( Line[i] <= ' ' ) break ;
postval[k] = Line[i] ; component_value[k] = Line[i] ;
} }
...@@ -169,8 +169,8 @@ STORECMP * Cmp; ...@@ -169,8 +169,8 @@ STORECMP * Cmp;
Cmp = new STORECMP(); Cmp = new STORECMP();
Cmp->Pnext = g_BaseListeCmp; Cmp->Pnext = g_BaseListeCmp;
g_BaseListeCmp = Cmp; g_BaseListeCmp = Cmp;
Cmp->m_Reference = CONV_FROM_UTF8(label); Cmp->m_Reference = CONV_FROM_UTF8(component_reference);
Cmp->m_Valeur = CONV_FROM_UTF8(postval) ; Cmp->m_Valeur = CONV_FROM_UTF8(component_value) ;
if( g_FlagEESchema ) /* Copie du nom module: */ if( g_FlagEESchema ) /* Copie du nom module: */
{ {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
COMMON_GLOBL wxString g_BuildVersion COMMON_GLOBL wxString g_BuildVersion
#ifdef EDA_BASE #ifdef EDA_BASE
(wxT("(2007-07-09)")) (wxT("(2007-07-24)"))
#endif #endif
; ;
......
...@@ -12,17 +12,17 @@ enum main_id { ...@@ -12,17 +12,17 @@ enum main_id {
ID_PROJECT_TREE_REFRESH, ID_PROJECT_TREE_REFRESH,
ID_PROJECT_RUNPY, ID_PROJECT_RUNPY,
ID_PROJECT_NEWFILE, ID_PROJECT_NEWFILE,
ID_PROJECT_NEWSCH, ID_PROJECT_UNUSED0,
ID_PROJECT_NEWBRD, ID_PROJECT_UNUSED1,
ID_PROJECT_NEWPY, ID_PROJECT_NEWPY,
ID_PROJECT_NEWGERBER, ID_PROJECT_UNUSED2,
ID_PROJECT_NEWTXT, ID_PROJECT_NEWTXT,
ID_PROJECT_NEWNET, ID_PROJECT_UNUSED3,
ID_PROJECT_NEWDIR, ID_PROJECT_NEWDIR,
ID_PROJECT_DELETE, ID_PROJECT_DELETE,
ID_PROJECT_RENAME, ID_PROJECT_RENAME,
ID_PROJECT_UNUSED0, ID_PROJECT_OPEN_FILE_WITH_TEXT_EDITOR,
ID_PROJECT_UNUSED1, ID_PROJECT_UNUSED4,
ID_MAIN_COMMAND, ID_MAIN_COMMAND,
ID_TO_EDITOR, ID_TO_EDITOR,
......
No preview for this file type
...@@ -2,8 +2,8 @@ msgid "" ...@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: kicad\n" "Project-Id-Version: kicad\n"
"POT-Creation-Date: \n" "POT-Creation-Date: \n"
"PO-Revision-Date: 2007-07-09 11:49+0100\n" "PO-Revision-Date: 2007-07-25 10:24+0100\n"
"Last-Translator: jp charras <jean-pierre.charras@inpg.fr>\n" "Last-Translator: \n"
"Language-Team: kicad team <jean-pierre.charras@ujf-grenoble.fr>\n" "Language-Team: kicad team <jean-pierre.charras@ujf-grenoble.fr>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n" "Content-Type: text/plain; charset=iso-8859-1\n"
...@@ -66,7 +66,6 @@ msgstr "Fichiers C.I.:" ...@@ -66,7 +66,6 @@ msgstr "Fichiers C.I.:"
#: pcbnew/files.cpp:181 #: pcbnew/files.cpp:181
#: pcbnew/librairi.cpp:62 #: pcbnew/librairi.cpp:62
#: cvpcb/readschematicnetlist.cpp:51 #: cvpcb/readschematicnetlist.cpp:51
#: cvpcb/rdorcad.cpp:53
#: cvpcb/rdpcad.cpp:45 #: cvpcb/rdpcad.cpp:45
#, c-format #, c-format
msgid "File <%s> not found" msgid "File <%s> not found"
...@@ -141,256 +140,6 @@ msgstr "It ...@@ -141,256 +140,6 @@ msgstr "It
msgid "Ok to abort ?" msgid "Ok to abort ?"
msgstr "Ok pour arrter ?" 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 #: pcbnew/loadcmp.cpp:94
msgid "Module name:" msgid "Module name:"
msgstr "Nom module:" msgstr "Nom module:"
...@@ -461,7 +210,6 @@ msgstr "De " ...@@ -461,7 +210,6 @@ msgstr "De "
#: eeschema/dialog_eeschema_config.cpp:161 #: eeschema/dialog_eeschema_config.cpp:161
#: eeschema/eestatus.cpp:116 #: eeschema/eestatus.cpp:116
#: cvpcb/dialog_display_options.cpp:145 #: cvpcb/dialog_display_options.cpp:145
#: cvpcb/options.cpp:148
#: cvpcb/dialog_cvpcb_config.cpp:127 #: cvpcb/dialog_cvpcb_config.cpp:127
#: gerbview/reglage.cpp:110 #: gerbview/reglage.cpp:110
msgid "Save Cfg" msgid "Save Cfg"
...@@ -966,6 +714,54 @@ msgstr "Nb Modules" ...@@ -966,6 +714,54 @@ msgstr "Nb Modules"
msgid "TextPCB properties" msgid "TextPCB properties"
msgstr "Proprits des textes PCB" 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/pcbtexte.cpp:122
#: pcbnew/dialog_edit_mod_text.cpp:314 #: pcbnew/dialog_edit_mod_text.cpp:314
#: eeschema/sheetlab.cpp:108 #: eeschema/sheetlab.cpp:108
...@@ -1010,6 +806,18 @@ msgstr "Position" ...@@ -1010,6 +806,18 @@ msgstr "Position"
msgid "Orientation" msgid "Orientation"
msgstr "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/pcbtexte.cpp:177
#: pcbnew/modedit_onclick.cpp:246 #: pcbnew/modedit_onclick.cpp:246
#: pcbnew/cotation.cpp:118 #: pcbnew/cotation.cpp:118
...@@ -1794,75 +1602,78 @@ msgstr "Inclure pistes autorout ...@@ -1794,75 +1602,78 @@ msgstr "Inclure pistes autorout
msgid "Include Locked Tracks" msgid "Include Locked Tracks"
msgstr "Inclure pistes verrouilles" 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 #, c-format
msgid "" msgid "%d > Pad %s (%s) @ %.4f,%.4f and "
"Unconnected:\n" msgstr "%d > Pad %s (%s) @ %.4f,%.4f et "
"Pad @ %.4f,%.4f and\n"
"Pad @ %.4f,%.4f\n"
msgstr ""
"Non connect:\n"
"Pad @ %.4f,%.4f et\n"
"Pad @ %.4f,%.4f\n"
#: 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 #, c-format
msgid "Active routes: %d\n" msgid "Active routes: %d\n"
msgstr "Active routes: %d\n" msgstr "Active routes: %d\n"
#: pcbnew/drc.cpp:79 #: pcbnew/drc.cpp:90
msgid "OK! (No unconnect)\n" msgid "OK! (No active routes)\n"
msgstr "OK! (Pas de non connect)\n" msgstr "OK! (Pas de chevelu actif)\n"
#: pcbnew/drc.cpp:81
msgid "End tst"
msgstr "Fin tst"
#: pcbnew/drc.cpp:99 #: pcbnew/drc.cpp:112
#, c-format #, c-format
msgid "** End Drc: %d errors **\n" msgid "** End Drc: %d errors **\n"
msgstr "** FinDrc: %d erreurs **\n" msgstr "** FinDrc: %d erreurs **\n"
#: pcbnew/drc.cpp:100 #: pcbnew/drc.cpp:114
msgid "** End Drc: No Error **\n" msgid "** End Drc: No Error **\n"
msgstr "** Fin Drc: Aucune Erreur **\n" msgstr "** Fin Drc: Aucune Erreur **\n"
#: pcbnew/drc.cpp:215 #: pcbnew/drc.cpp:229
msgid "SegmNb" msgid "SegmNb"
msgstr "SegmNb" msgstr "SegmNb"
#: pcbnew/drc.cpp:216 #: pcbnew/drc.cpp:230
msgid "Track Err" msgid "Track Err"
msgstr "Err Pistes" msgstr "Err Pistes"
#: pcbnew/drc.cpp:219 #: pcbnew/drc.cpp:233
msgid "Tst Tracks\n" msgid "Tst Tracks\n"
msgstr "Tst Pistes\n" msgstr "Tst Pistes\n"
#: pcbnew/drc.cpp:238 #: pcbnew/drc.cpp:252
#: eeschema/eelayer.cpp:141 #: eeschema/eelayer.cpp:141
msgid "Netname" msgid "Netname"
msgstr "NetName" msgstr "NetName"
#: pcbnew/drc.cpp:934 #: pcbnew/drc.cpp:950
#, c-format #, c-format
msgid "%d Err type %d sur PAD @ %d,%d\n" msgid "%d Drc Err %d PAD %s (%s) @ %d,%d\n"
msgstr "%d Err type %d sur PAD @ %d,%d\n" msgstr "%d Err Drc %d PAD %s (%s) @ %d,%d\n"
#: pcbnew/drc.cpp:943 #: pcbnew/drc.cpp:961
#, c-format #, c-format
msgid "%d Err type %d: sur VIA @ %d,%d\n" msgid "%d Err type %d: sur VIA @ %d,%d\n"
msgstr "%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 #, c-format
msgid "%d Err type %d: sur SEGMENT @ %d,%d\n" msgid "%d Err type %d: sur SEGMENT @ %d,%d\n"
msgstr "%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 #, c-format
msgid "%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 pad to pad (PAD @ %d,%d and PAD @ %d,%d\n" msgstr "%d Err Drc: PAD %s (%s) @ %d,%d et PAD %s (%s) @ %d,%d\n"
#: pcbnew/editrack-part2.cpp:31 #: pcbnew/editrack-part2.cpp:31
#, c-format #, c-format
...@@ -2066,6 +1877,19 @@ msgstr "RefP" ...@@ -2066,6 +1877,19 @@ msgstr "RefP"
msgid "Net" msgid "Net"
msgstr "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/class_pad.cpp:781
#: pcbnew/affiche.cpp:53 #: pcbnew/affiche.cpp:53
#: pcbnew/affiche.cpp:109 #: pcbnew/affiche.cpp:109
...@@ -2092,6 +1916,16 @@ msgstr "Per ...@@ -2092,6 +1916,16 @@ msgstr "Per
msgid "Drill X / Y" msgid "Drill X / Y"
msgstr "Perage 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 #: pcbnew/class_pad.cpp:814
msgid "X Pos" msgid "X Pos"
msgstr "X Pos" msgstr "X Pos"
...@@ -3360,6 +3194,11 @@ msgstr "-90" ...@@ -3360,6 +3194,11 @@ msgstr "-90"
msgid "180" msgid "180"
msgstr "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 #: pcbnew/dialog_pad_edit.cpp:193
msgid "Pad Orient:" msgid "Pad Orient:"
msgstr "Orient pad:" msgstr "Orient pad:"
...@@ -4049,14 +3888,176 @@ msgstr "P&ostprocesseurs" ...@@ -4049,14 +3888,176 @@ msgstr "P&ostprocesseurs"
msgid "&3D Display" msgid "&3D Display"
msgstr "&3D Visu" msgstr "&3D Visu"
#: pcbnew/menubarpcb.cpp:286 #: pcbnew/menubarpcb.cpp:286
#: pcbnew/menubarmodedit.cpp:78 #: pcbnew/menubarmodedit.cpp:78
#: eeschema/menubar.cpp:164 #: eeschema/menubar.cpp:164
#: cvpcb/tool_cvpcb.cpp:169 #: cvpcb/tool_cvpcb.cpp:169
#: kicad/buildmnu.cpp:212 #: kicad/buildmnu.cpp:212
#: gerbview/tool_gerber.cpp:148 #: gerbview/tool_gerber.cpp:148
msgid "&Help" msgid "&Help"
msgstr "&Aide" 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 #: pcbnew/edit.cpp:154
msgid "Graphic not autorized on Copper layers" msgid "Graphic not autorized on Copper layers"
...@@ -4725,7 +4726,6 @@ msgstr "Propri ...@@ -4725,7 +4726,6 @@ msgstr "Propri
#: eeschema/dialog_edit_component_in_schematic.cpp:204 #: eeschema/dialog_edit_component_in_schematic.cpp:204
#: eeschema/editpart.cpp:204 #: eeschema/editpart.cpp:204
#: eeschema/dialog_build_BOM.cpp:279 #: eeschema/dialog_build_BOM.cpp:279
#: cvpcb/options.cpp:138
#: cvpcb/dialog_display_options.h:43 #: cvpcb/dialog_display_options.h:43
msgid "Options" msgid "Options"
msgstr "Options" msgstr "Options"
...@@ -7943,58 +7943,48 @@ msgid "&Del Annotate" ...@@ -7943,58 +7943,48 @@ msgid "&Del Annotate"
msgstr "&Dnumrotation" msgstr "&Dnumrotation"
#: cvpcb/dialog_display_options.cpp:141 #: cvpcb/dialog_display_options.cpp:141
#: cvpcb/options.cpp:159
msgid "Pad &Num" msgid "Pad &Num"
msgstr "Pad &Num" msgstr "Pad &Num"
#: cvpcb/dialog_display_options.cpp:148 #: cvpcb/dialog_display_options.cpp:148
#: cvpcb/options.cpp:153
msgid "&Pad Fill" msgid "&Pad Fill"
msgstr "&Pad plein" msgstr "&Pad plein"
#: cvpcb/dialog_display_options.cpp:155 #: cvpcb/dialog_display_options.cpp:155
#: cvpcb/dialog_display_options.cpp:163 #: cvpcb/dialog_display_options.cpp:163
#: cvpcb/options.cpp:163
msgid "&Filaire" msgid "&Filaire"
msgstr "&Filaire" msgstr "&Filaire"
#: cvpcb/dialog_display_options.cpp:156 #: cvpcb/dialog_display_options.cpp:156
#: cvpcb/dialog_display_options.cpp:164 #: cvpcb/dialog_display_options.cpp:164
#: cvpcb/options.cpp:163
msgid "&Filled" msgid "&Filled"
msgstr "&Plein" msgstr "&Plein"
#: cvpcb/dialog_display_options.cpp:157 #: cvpcb/dialog_display_options.cpp:157
#: cvpcb/dialog_display_options.cpp:165 #: cvpcb/dialog_display_options.cpp:165
#: cvpcb/options.cpp:163
msgid "&Sketch" msgid "&Sketch"
msgstr "&Contour" msgstr "&Contour"
#: cvpcb/dialog_display_options.cpp:159 #: cvpcb/dialog_display_options.cpp:159
#: cvpcb/options.cpp:165
msgid "Edges:" msgid "Edges:"
msgstr "Contours:" msgstr "Contours:"
#: cvpcb/dialog_display_options.cpp:167 #: cvpcb/dialog_display_options.cpp:167
#: cvpcb/options.cpp:173
msgid "Texts:" msgid "Texts:"
msgstr "Textes:" msgstr "Textes:"
#: cvpcb/readschematicnetlist.cpp:71 #: cvpcb/readschematicnetlist.cpp:71
#: cvpcb/viewlogi.cpp:72 #: cvpcb/viewlogi.cpp:72
#: cvpcb/rdorcad.cpp:73
#: cvpcb/rdpcad.cpp:56 #: cvpcb/rdpcad.cpp:56
#, c-format #, c-format
msgid "Unknown file format <%s>" msgid "Unknown file format <%s>"
msgstr " Format fichier inconnu <%s>" msgstr " Format fichier inconnu <%s>"
#: cvpcb/readschematicnetlist.cpp:76 #: cvpcb/readschematicnetlist.cpp:76
#: cvpcb/rdorcad.cpp:78
msgid "Netlist Format: EESchema" msgid "Netlist Format: EESchema"
msgstr " Formats NetListe: EESchema" msgstr " Formats NetListe: EESchema"
#: cvpcb/readschematicnetlist.cpp:126 #: cvpcb/readschematicnetlist.cpp:126
#: cvpcb/rdorcad.cpp:122
#, c-format #, c-format
msgid "Netlist error: %s" msgid "Netlist error: %s"
msgstr "Erreur Netliste: %s" msgstr "Erreur Netliste: %s"
...@@ -8427,112 +8417,117 @@ msgstr "Executer le Script Python:" ...@@ -8427,112 +8417,117 @@ msgstr "Executer le Script Python:"
msgid "Load file:" msgid "Load file:"
msgstr "Charger Fichiers:" msgstr "Charger Fichiers:"
#: kicad/treeprj_frame.cpp:63 #: kicad/treeprj_frame.cpp:65
msgid "&Run" msgid "&Run"
msgstr "Excute&r" msgstr "Excute&r"
#: kicad/treeprj_frame.cpp:64 #: kicad/treeprj_frame.cpp:66
msgid "Run the Python Script" msgid "Run the Python Script"
msgstr "Excuter le Script Python" 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" msgid "&Edit in a text editor"
msgstr "Editer avec un diteur de Texte" msgstr "Editer avec un diteur de Texte"
#: kicad/treeprj_frame.cpp:71 #: kicad/treeprj_frame.cpp:73
msgid "Edit the Python Script in a Text Editor" msgid "&Open the file in a Text Editor"
msgstr "Editer le script python" msgstr "&Ouvrir le fichier avec un Editeur de texte"
#: kicad/treeprj_frame.cpp:84 #: kicad/treeprj_frame.cpp:86
msgid "New D&irectory" msgid "New D&irectory"
msgstr "&Nouveau Rpertoire" msgstr "&Nouveau Rpertoire"
#: kicad/treeprj_frame.cpp:84 #: kicad/treeprj_frame.cpp:86
msgid "Create a New Directory" msgid "Create a New Directory"
msgstr "Crer un nouveau Rpertoire" msgstr "Crer un nouveau Rpertoire"
#: kicad/treeprj_frame.cpp:89 #: kicad/treeprj_frame.cpp:91
msgid "New P&ython Script" msgid "New P&ython Script"
msgstr "Nouveau Script P&ython" msgstr "Nouveau Script P&ython"
#: kicad/treeprj_frame.cpp:89 #: kicad/treeprj_frame.cpp:91
msgid "Create a New Python Script" msgid "Create a New Python Script"
msgstr "Crer un nouveau script Python" msgstr "Crer un nouveau script Python"
#: kicad/treeprj_frame.cpp:94 #: kicad/treeprj_frame.cpp:96
msgid "New &Text File" msgid "New &Text File"
msgstr "Nouveau Fichier &Texte" msgstr "Nouveau Fichier &Texte"
#: kicad/treeprj_frame.cpp:94 #: kicad/treeprj_frame.cpp:96
msgid "Create a New Txt File" msgid "Create a New Txt File"
msgstr "Crer un nouveau Fichier texte" msgstr "Crer un nouveau Fichier texte"
#: kicad/treeprj_frame.cpp:98 #: kicad/treeprj_frame.cpp:100
msgid "New &File" msgid "New &File"
msgstr "Nouveau &Fichier" msgstr "Nouveau &Fichier"
#: kicad/treeprj_frame.cpp:98 #: kicad/treeprj_frame.cpp:100
msgid "Create a New File" msgid "Create a New File"
msgstr "Crer un nouveau Fichier" msgstr "Crer un nouveau Fichier"
#: kicad/treeprj_frame.cpp:109 #: kicad/treeprj_frame.cpp:111
msgid "&Rename File" msgid "&Rename File"
msgstr "&Renommer Fichier" msgstr "&Renommer Fichier"
#: kicad/treeprj_frame.cpp:109 #: kicad/treeprj_frame.cpp:111
msgid "&Rename Directory" msgid "&Rename Directory"
msgstr "&Renommer Rpertoire" msgstr "&Renommer Rpertoire"
#: kicad/treeprj_frame.cpp:110 #: kicad/treeprj_frame.cpp:112
msgid "Rename the File" msgid "Rename the File"
msgstr "Renommer le Fichier" msgstr "Renommer le Fichier"
#: kicad/treeprj_frame.cpp:110 #: kicad/treeprj_frame.cpp:112
msgid "&Rename the Directory" msgid "&Rename the Directory"
msgstr "&Renommer le Rpertoire" 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" msgid "&Delete File"
msgstr "&Supprimer Fichier" msgstr "&Supprimer Fichier"
#: kicad/treeprj_frame.cpp:114 #: kicad/treeprj_frame.cpp:124
msgid "&Delete Directory" msgid "&Delete Directory"
msgstr "&Supprimer le Rpertoire" msgstr "&Supprimer le Rpertoire"
#: kicad/treeprj_frame.cpp:115 #: kicad/treeprj_frame.cpp:125
msgid "Delete the File" msgid "Delete the File"
msgstr "Supprimer le fichier" msgstr "Supprimer le fichier"
#: kicad/treeprj_frame.cpp:115 #: kicad/treeprj_frame.cpp:125
msgid "&Delete the Directory and its content" msgid "&Delete the Directory and its content"
msgstr "Effacer le Rpertoire et son contenu" msgstr "Effacer le Rpertoire et son contenu"
#: kicad/treeprj_frame.cpp:342 #: kicad/treeprj_frame.cpp:344
msgid "Create New File:" msgid "Create New File:"
msgstr "Crer un nouveau Fichier" msgstr "Crer un nouveau Fichier"
#: kicad/treeprj_frame.cpp:342 #: kicad/treeprj_frame.cpp:344
msgid "Create New Directory" msgid "Create New Directory"
msgstr "Crer un nouveau Rpertoire" msgstr "Crer un nouveau Rpertoire"
#: kicad/treeprj_frame.cpp:344 #: kicad/treeprj_frame.cpp:346
msgid "noname" msgid "noname"
msgstr "noname" msgstr "noname"
#: kicad/treeprj_frame.cpp:643 #: kicad/treeprj_frame.cpp:663
msgid "Change File Name: " msgid "Change File Name: "
msgstr "ChangerNom Fichier: " msgstr "ChangerNom Fichier: "
#: kicad/treeprj_datas.cpp:186 #: kicad/treeprj_datas.cpp:182
msgid "Unable to move file ... " msgid "Unable to move file ... "
msgstr "Impossible de dplacer le fichier " msgstr "Impossible de dplacer le fichier "
#: kicad/treeprj_datas.cpp:186 #: kicad/treeprj_datas.cpp:182
#: kicad/treeprj_datas.cpp:257 #: kicad/treeprj_datas.cpp:253
msgid "Permission error ?" msgid "Permission error ?"
msgstr "" msgstr ""
#: kicad/treeprj_datas.cpp:244 #: kicad/treeprj_datas.cpp:240
msgid "" msgid ""
"Changing file extension will change file type.\n" "Changing file extension will change file type.\n"
" Do you want to continue ?" " Do you want to continue ?"
...@@ -8540,19 +8535,19 @@ msgstr "" ...@@ -8540,19 +8535,19 @@ msgstr ""
"Changer l'extension changera le type de fichier.\n" "Changer l'extension changera le type de fichier.\n"
"Voulez vous continuer ?" "Voulez vous continuer ?"
#: kicad/treeprj_datas.cpp:245 #: kicad/treeprj_datas.cpp:241
msgid "Rename File" msgid "Rename File"
msgstr "Renommer Fichier" msgstr "Renommer Fichier"
#: kicad/treeprj_datas.cpp:257 #: kicad/treeprj_datas.cpp:253
msgid "Unable to rename file ... " msgid "Unable to rename file ... "
msgstr "Impossible de renommer le fichier... " msgstr "Impossible de renommer le fichier... "
#: kicad/treeprj_datas.cpp:275 #: kicad/treeprj_datas.cpp:271
msgid "Do you really want to delete " msgid "Do you really want to delete "
msgstr "Voulez vous rellemant effacer" msgstr "Voulez vous rellemant effacer"
#: kicad/treeprj_datas.cpp:275 #: kicad/treeprj_datas.cpp:271
msgid "Delete File" msgid "Delete File"
msgstr "Supprimer Fichier" msgstr "Supprimer Fichier"
...@@ -9077,126 +9072,6 @@ msgstr "X" ...@@ -9077,126 +9072,6 @@ msgstr "X"
msgid "Y" msgid "Y"
msgstr "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 #: common/basicframe.cpp:217
#, c-format #, c-format
msgid "Help file %s not found" msgid "Help file %s not found"
...@@ -9365,6 +9240,126 @@ msgstr "Langage" ...@@ -9365,6 +9240,126 @@ msgstr "Langage"
msgid "No default editor found, you must choose it" msgid "No default editor found, you must choose it"
msgstr "Pas d'diteur par dfaut trouv, vous devez en choisir un" 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 #: 3d-viewer/3d_canvas.cpp:290
#: share/zoom.cpp:346 #: share/zoom.cpp:346
msgid "Zoom +" msgid "Zoom +"
......
...@@ -23,10 +23,6 @@ ...@@ -23,10 +23,6 @@
#include "bitmaps/icon_gerbview_small.xpm" #include "bitmaps/icon_gerbview_small.xpm"
#include "bitmaps/icon_cvpcb_small.xpm" #include "bitmaps/icon_cvpcb_small.xpm"
#include "bitmaps/unknown.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" #include "id.h"
......
...@@ -20,7 +20,9 @@ ...@@ -20,7 +20,9 @@
#include "wx/dir.h" #include "wx/dir.h"
#include "bitmaps.h" #include "bitmaps.h"
#ifdef KICAD_PYTHON
#include "bitmaps/new_python.xpm" #include "bitmaps/new_python.xpm"
#endif
#include "id.h" #include "id.h"
...@@ -68,7 +70,7 @@ WinEDA_PrjFrame::WinEDA_PrjFrame(WinEDA_MainFrame * parent, ...@@ -68,7 +70,7 @@ WinEDA_PrjFrame::WinEDA_PrjFrame(WinEDA_MainFrame * parent,
item = new wxMenuItem(menu, ID_PROJECT_TXTEDIT, item = new wxMenuItem(menu, ID_PROJECT_TXTEDIT,
_("&Edit in a text editor"), _("&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 ); item->SetBitmap( icon_txt_xpm );
menu->Append( item ); menu->Append( item );
...@@ -110,6 +112,14 @@ WinEDA_PrjFrame::WinEDA_PrjFrame(WinEDA_MainFrame * parent, ...@@ -110,6 +112,14 @@ WinEDA_PrjFrame::WinEDA_PrjFrame(WinEDA_MainFrame * parent,
, TREE_DIRECTORY != i ? _("Rename the File") : _("&Rename the Directory") ); , TREE_DIRECTORY != i ? _("Rename the File") : _("&Rename the Directory") );
item->SetBitmap( right_xpm ); item->SetBitmap( right_xpm );
menu->Append( item ); 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 item = new wxMenuItem(menu, ID_PROJECT_DELETE
, TREE_DIRECTORY != i ? _("&Delete File") : _("&Delete Directory") , TREE_DIRECTORY != i ? _("&Delete File") : _("&Delete Directory")
, TREE_DIRECTORY != i ? _("Delete the File") : _("&Delete the Directory and its content") ); , TREE_DIRECTORY != i ? _("Delete the File") : _("&Delete the Directory and its content") );
...@@ -132,12 +142,8 @@ BEGIN_EVENT_TABLE(WinEDA_PrjFrame, wxSashLayoutWindow) ...@@ -132,12 +142,8 @@ BEGIN_EVENT_TABLE(WinEDA_PrjFrame, wxSashLayoutWindow)
EVT_MENU(ID_PROJECT_TXTEDIT, WinEDA_PrjFrame::OnTxtEdit) EVT_MENU(ID_PROJECT_TXTEDIT, WinEDA_PrjFrame::OnTxtEdit)
EVT_MENU(ID_PROJECT_NEWFILE, WinEDA_PrjFrame::OnNewFile) EVT_MENU(ID_PROJECT_NEWFILE, WinEDA_PrjFrame::OnNewFile)
EVT_MENU(ID_PROJECT_NEWDIR, WinEDA_PrjFrame::OnNewDirectory) 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_NEWPY, WinEDA_PrjFrame::OnNewPyFile)
EVT_MENU(ID_PROJECT_NEWGERBER, WinEDA_PrjFrame::OnNewGerberFile)
EVT_MENU(ID_PROJECT_NEWTXT, WinEDA_PrjFrame::OnNewTxtFile) 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_DELETE, WinEDA_PrjFrame::OnDeleteFile)
EVT_MENU(ID_PROJECT_RENAME, WinEDA_PrjFrame::OnRenameFile) EVT_MENU(ID_PROJECT_RENAME, WinEDA_PrjFrame::OnRenameFile)
...@@ -312,12 +318,8 @@ wxMenu * WinEDA_PrjFrame::GetContextMenu( int type ) ...@@ -312,12 +318,8 @@ wxMenu * WinEDA_PrjFrame::GetContextMenu( int type )
void WinEDA_PrjFrame::OnNewDirectory(wxCommandEvent & event) { NewFile( TREE_DIRECTORY ); } void WinEDA_PrjFrame::OnNewDirectory(wxCommandEvent & event) { NewFile( TREE_DIRECTORY ); }
void WinEDA_PrjFrame::OnNewFile(wxCommandEvent & event) { NewFile( TREE_UNKNOWN ); } 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::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::OnNewTxtFile(wxCommandEvent & event) { NewFile( TREE_TXT ); }
void WinEDA_PrjFrame::OnNewNetFile(wxCommandEvent & event) { NewFile( TREE_NET ); }
/******************************************************************/ /******************************************************************/
void WinEDA_PrjFrame::NewFile( enum TreeFileType type ) void WinEDA_PrjFrame::NewFile( enum TreeFileType type )
...@@ -393,30 +395,48 @@ void WinEDA_PrjFrame::NewFile( const wxString & name, ...@@ -393,30 +395,48 @@ void WinEDA_PrjFrame::NewFile( const wxString & name,
wxString WinEDA_PrjFrame::GetFileExt( enum TreeFileType type ) wxString WinEDA_PrjFrame::GetFileExt( enum TreeFileType type )
/******************************************************************/ /******************************************************************/
{ {
wxString extensions[] = wxString ext;
{
wxT( "" ), // 0 is not used switch ( type )
wxT( ".pro" ), // TREE_PROJECT {
g_SchExtBuffer, // TREE_SCHEMA case 0 :
g_BoardExtBuffer, // TREE_PCB break; // 0 is not used
wxT( ".py" ), // TREE_PY case TREE_PROJECT:
g_GerberExtBuffer, // TREE_GERBER ext = wxT( ".pro" );
wxT( ".pdf" ), // TREE_PDF break;
wxT( ".txt" ), // TREE_TXT case TREE_SCHEMA:
wxT( ".net" ), // TREE_NET ext = g_SchExtBuffer;
wxT( "" ), // TREE_UNKNOWN break;
wxT( "" ), // TREE_DIRECTORY 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 ext;
return wxEmptyString;
} }
/**************************************************************************/ /**************************************************************************/
void WinEDA_PrjFrame::AddFile( const wxString & name, wxTreeItemId & root ) void WinEDA_PrjFrame::AddFile( const wxString & name, wxTreeItemId & root )
/**************************************************************************/ /**************************************************************************/
/* add filename "name" to the tree /* 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; wxTreeItemId cellule;
......
...@@ -17,7 +17,7 @@ KICAD_BIN = /f/kicad/winexe ...@@ -17,7 +17,7 @@ KICAD_BIN = /f/kicad/winexe
#Define the wxWidget path (if not found in environment variables): #Define the wxWidget path (if not found in environment variables):
ifndef WXWIN ifndef WXWIN
WXWIN=/f/wxMSW-2.8.4 WXWIN=f:/wxMSW-2.8.4
endif endif
LIBVERSION = 2.8 LIBVERSION = 2.8
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
; General Product Description Definitions ; General Product Description Definitions
!define PRODUCT_NAME "KiCad" !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 PRODUCT_WEB_SITE "http://www.lis.inpg.fr/realise_au_lis/kicad/"
!define COMPANY_NAME "" !define COMPANY_NAME ""
!define TRADE_MARKS "" !define TRADE_MARKS ""
......
...@@ -78,7 +78,7 @@ void D_PAD::ComputeRayon(void) ...@@ -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) // retourne la position de la forme (pastilles excentrees)
{ {
......
...@@ -76,7 +76,7 @@ public: ...@@ -76,7 +76,7 @@ public:
wxString ReturnStringPadName(void); // Return pad name as string in a wxString wxString ReturnStringPadName(void); // Return pad name as string in a wxString
void ReturnStringPadName(wxString & text); // Return pad name as string in a buffer void ReturnStringPadName(wxString & text); // Return pad name as string in a buffer
void ComputeRayon(void); // met a jour m_Rayon, rayon du cercle exinscrit 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) // de la forme (pastilles excentrees)
void Display_Infos(WinEDA_BasePcbFrame * frame); void Display_Infos(WinEDA_BasePcbFrame * frame);
}; };
......
...@@ -125,6 +125,7 @@ public: ...@@ -125,6 +125,7 @@ public:
////@end WinEDA_DrcFrame member variables ////@end WinEDA_DrcFrame member variables
WinEDA_PcbFrame * m_Parent; WinEDA_PcbFrame * m_Parent;
wxDC * m_DC; wxDC * m_DC;
int m_UnconnectedCount;
}; };
#endif #endif
......
/*******************************/ /****************************/
/* Edition des pistes */ /* DRC control */
/* Routines DRC */ /****************************/
/*******************************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
...@@ -28,7 +27,7 @@ static int segm_long; // longueur du segment de reference ...@@ -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 */ static int xcliplo,ycliplo,xcliphi,ycliphi ; /* coord de la surface de securite du segment a comparer */
/* Routines Locales */ /* 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, 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); 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); 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); ...@@ -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, static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
TRACK * pt_ref, void * pt_item, int errnumber); TRACK * pt_ref, void * pt_item, int errnumber);
static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, 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);
...@@ -62,23 +61,34 @@ WinEDA_DrawPanel * panel = m_Parent->DrawPanel; ...@@ -62,23 +61,34 @@ WinEDA_DrawPanel * panel = m_Parent->DrawPanel;
int ii; int ii;
wxString msg; wxString msg;
float convert = 0.0001; 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--) for( ii = m_Parent->m_Pcb->GetNumRatsnests() ;ii > 0; Ratsnest++, ii--)
{ {
if( (Ratsnest->status & CH_ACTIF) == 0) continue; if( (Ratsnest->status & CH_ACTIF) == 0) continue;
unconnect++; m_UnconnectedCount++;
Ratsnest->pad_start->Draw(panel, m_DC, wxPoint(0,0),draw_mode); if ( m_UnconnectedCount == 1 ) m_logWindow->AppendText(_("Unconnected found:\n") );
Ratsnest->pad_end->Draw(panel, m_DC, wxPoint(0,0),draw_mode); D_PAD * pad = Ratsnest->pad_start;
msg.Printf(_("Unconnected:\nPad @ %.4f,%.4f and\nPad @ %.4f,%.4f\n"), pad->Draw(panel, m_DC, wxPoint(0,0),draw_mode);
Ratsnest->pad_start->m_Pos.x * convert, Ratsnest->pad_start->m_Pos.y * convert, wxString pad_name = pad->ReturnStringPadName();
Ratsnest->pad_end->m_Pos.x * convert, Ratsnest->pad_end->m_Pos.y * convert); 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);
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); m_logWindow->AppendText(msg);
} }
if ( unconnect ) msg.Printf(_("Active routes: %d\n"), unconnect); if ( m_UnconnectedCount ) msg.Printf(_("Active routes: %d\n"), m_UnconnectedCount);
else msg = _("OK! (No unconnect)\n"); else msg = _("OK! (No active routes)\n");
m_logWindow->AppendText(msg); m_logWindow->AppendText(msg);
m_logWindow->AppendText(_("End tst"));
} }
...@@ -94,10 +104,14 @@ wxString msg; ...@@ -94,10 +104,14 @@ wxString msg;
m_logWindow->Clear(); m_logWindow->Clear();
g_DesignSettings.m_TrackClearence = g_DesignSettings.m_TrackClearence =
ReturnValueFromTextCtrl(*m_SetClearance, m_Parent->m_InternalUnits); ReturnValueFromTextCtrl(*m_SetClearance, m_Parent->m_InternalUnits);
/* Test DRC errors (clearance errors, bad connections .. */
errors = m_Parent->Test_DRC(m_DC); errors = m_Parent->Test_DRC(m_DC);
/* Serach for active routes (unconnected pads) */
ListUnconnectedPads(event);
if ( errors ) if ( errors )
msg.Printf(_("** End Drc: %d errors **\n"),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); m_logWindow->AppendText(msg);
} }
else wxBell(); else wxBell();
...@@ -655,7 +669,7 @@ LISTE_PAD * pad_list = start_buffer; ...@@ -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 /* Return OK_DRC si distance entre pad_ref et pas >= dist_min
et BAD_DRC sinon */ et BAD_DRC sinon */
...@@ -922,37 +936,41 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb, ...@@ -922,37 +936,41 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
number = numero d'identification number = numero d'identification
*/ */
{ {
int ercx, ercy; wxPoint erc_pos;
D_PAD * pt_pad; D_PAD * pad;
TRACK * pt_segm; TRACK * pt_segm;
wxString msg; wxString msg;
if( ((EDA_BaseStruct*)pt_item)->m_StructType == TYPEPAD ) if( ((EDA_BaseStruct*)pt_item)->m_StructType == TYPEPAD )
{ {
pt_pad = (D_PAD*) pt_item; pad = (D_PAD*) pt_item;
ercx = pt_pad->m_Pos.x; ercy = pt_pad->m_Pos.y; erc_pos = pad->m_Pos;
msg.Printf(_("%d Err type %d sur PAD @ %d,%d\n"), wxString pad_name = pad->ReturnStringPadName();
NumberOfErrors, errnumber, ercx,ercy); 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 */ else /* erreur sur segment de piste */
{ {
pt_segm = (TRACK *) pt_item; 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) if(pt_segm->m_StructType == TYPEVIA)
{ {
msg.Printf(_("%d Err type %d: sur VIA @ %d,%d\n"), msg.Printf(_("%d Err type %d: sur VIA @ %d,%d\n"),
NumberOfErrors, errnumber,ercx,ercy); NumberOfErrors, errnumber,erc_pos.x,erc_pos.y);
} }
else else
{ {
int ercfx = pt_segm->m_End.x, ercfy = pt_segm->m_End.y; wxPoint erc_pos_f = pt_segm->m_End;
if(hypot( (double)(ercfx - pt_ref->m_End.x),(double)(ercfy - pt_ref->m_End.y) ) if(hypot( (double)(erc_pos_f.x - pt_ref->m_End.x),(double)(erc_pos_f.y - pt_ref->m_End.y) )
< hypot( (double)(ercx - pt_ref->m_End.x),(double)(ercy - pt_ref->m_End.y) ) ) < hypot( (double)(erc_pos.x - pt_ref->m_End.x),(double)(erc_pos.y - pt_ref->m_End.y) ) )
{ {
EXCHG(ercfx, ercx); EXCHG(ercfy, 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"), msg.Printf(_("%d Err type %d: sur SEGMENT @ %d,%d\n"),
NumberOfErrors, errnumber,ercx,ercy); NumberOfErrors, errnumber,erc_pos.x,erc_pos.y);
} }
} }
...@@ -960,7 +978,7 @@ wxString msg; ...@@ -960,7 +978,7 @@ wxString msg;
else panel->m_Parent->Affiche_Message(msg); else panel->m_Parent->Affiche_Message(msg);
if(current_marqueur == NULL) current_marqueur = new MARQUEUR(Pcb); 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_Color = WHITE;
current_marqueur->m_Diag = msg; current_marqueur->m_Diag = msg;
current_marqueur->Draw(panel, DC, GR_OR); current_marqueur->Draw(panel, DC, GR_OR);
...@@ -969,7 +987,7 @@ wxString msg; ...@@ -969,7 +987,7 @@ wxString msg;
/******************************************************************************/ /******************************************************************************/
static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb, 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 : /* affiche les erreurs de DRC :
...@@ -979,18 +997,21 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb, ...@@ -979,18 +997,21 @@ static void Affiche_Erreur_DRC(WinEDA_DrawPanel * panel, wxDC * DC, BOARD * Pcb,
number = numero d'identification number = numero d'identification
*/ */
{ {
int ercx, ercy;
wxString msg; wxString msg;
ercx = pad1->m_Pos.x; ercy = pad1->m_Pos.y; wxString pad_name1 = pad1->ReturnStringPadName();
msg.Printf( _("%d Err pad to pad (PAD @ %d,%d and PAD @ %d,%d\n"), wxString module_name1 = ((MODULE*)(pad1->m_Parent))->m_Reference->m_Text;
NumberOfErrors, ercx,ercy, wxString pad_name2 = pad2->ReturnStringPadName();
pad2->m_Pos.x, pad2->m_Pos.y); 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); if ( DrcFrame ) DrcFrame->m_logWindow->AppendText(msg);
else panel->m_Parent->Affiche_Message(msg); else panel->m_Parent->Affiche_Message(msg);
if(current_marqueur == NULL) current_marqueur = new MARQUEUR(Pcb); 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_Color = WHITE;
current_marqueur->m_Diag = msg; current_marqueur->m_Diag = msg;
current_marqueur->Draw(panel, DC, GR_OR); current_marqueur->Draw(panel, DC, GR_OR);
......
...@@ -149,133 +149,67 @@ wxClientDC dc(DrawPanel); ...@@ -149,133 +149,67 @@ wxClientDC dc(DrawPanel);
if ( m_Draw3DFrame ) if ( m_Draw3DFrame )
m_Draw3DFrame->NewDisplay(); m_Draw3DFrame->NewDisplay();
break; break;
case ID_MODEDIT_INSERT_MODULE_IN_BOARD:
case ID_MODEDIT_UPDATE_MODULE_IN_BOARD:{ case ID_MODEDIT_UPDATE_MODULE_IN_BOARD:{
// update modules in the current board, // update module in the current board,
// not just add it to the board with total disregard for the // not just add it to the board with total disregard for the netlist...
// netlist...?
WinEDA_PcbFrame * pcbframe = m_Parent->m_PcbFrame; WinEDA_PcbFrame * pcbframe = m_Parent->m_PcbFrame;
BOARD * mainpcb = pcbframe->m_Pcb; BOARD * mainpcb = pcbframe->m_Pcb;
MODULE * presmod = m_Pcb->m_Modules; //the module being edited. MODULE * source_module = NULL;
//i guess we need to search through the modules here.. they are in a linked list. MODULE * module_in_edit = m_Pcb->m_Modules;
//replace based on m_libref? // Search the old module (source) if exists
MODULE* mod = mainpcb->m_Modules; // Because this source could be deleted when editing the main board...
do{ if ( module_in_edit->m_Link ) // this is not a new module ...
//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. source_module = mainpcb->m_Modules;
if(mod->m_LibRef == presmod->m_LibRef){//have to be careful with this test of similarity? for( ; source_module != NULL ; source_module = (MODULE *) source_module->Pnext )
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); if( module_in_edit->m_Link == source_module->m_TimeStamp )
MODULE* newmod = new MODULE(mainpcb); break;
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;
} }
} }
if ( (source_module == NULL) && id == (ID_MODEDIT_UPDATE_MODULE_IN_BOARD) ) // source not found
{
wxString msg;
msg.Printf( _("Unable to find the footprint source on the main board") );
msg << _("\nCannot update the footprint");
DisplayError(this, msg);
break;
} }
//not sure what to do about m_Drawings..assume they are ok? if ( (source_module != NULL) && id == (ID_MODEDIT_INSERT_MODULE_IN_BOARD) ) // source not found
//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;
}
}while(mod != NULL);
GetScreen()->ClrModify();
pcbframe->GetScreen()->m_CurrentItem = NULL;
mainpcb->m_Status_Pcb = 0;
}
break;
case ID_MODEDIT_INSERT_MODULE_IN_BOARD:
{ {
WinEDA_PcbFrame * pcbframe = m_Parent->m_PcbFrame; wxString msg;
BOARD * mainpcb = pcbframe->m_Pcb; msg.Printf( _("A footprint source was found on the main board") );
MODULE * oldmodule = NULL; msg << _("\nCannot insert this footprint");
MODULE * module_in_edit = m_Pcb->m_Modules; DisplayError(this, msg);
// creation du nouveau module sur le PCB en cours break;
// create a new unit on the PCB, of course. }
// Create the "new" module
MODULE * newmodule = new MODULE(mainpcb); MODULE * newmodule = new MODULE(mainpcb);
newmodule->Copy(module_in_edit); 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; newmodule->m_Link = 0;
// Recherche de l'ancien module correspondant // Put the footprint in the main pcb linked list.
//(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.
newmodule->Pnext = mainpcb->m_Modules; newmodule->Pnext = mainpcb->m_Modules;
mainpcb->m_Modules = newmodule; mainpcb->m_Modules = newmodule;
newmodule->Pback = mainpcb; newmodule->Pback = mainpcb;
if ( newmodule->Pnext ) newmodule->Pnext->Pback = newmodule; if ( newmodule->Pnext ) newmodule->Pnext->Pback = newmodule;
if ( oldmodule ) if ( source_module ) // this is an update command
{ {
newmodule = pcbframe->Exchange_Module(this, // The new module replace the old module (pos, orient, ref, value and connexions are kept)
oldmodule, newmodule); // and the source_module (old module) is deleted
newmodule = pcbframe->Exchange_Module(this, source_module, newmodule);
newmodule->m_TimeStamp = module_in_edit->m_Link; 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->Place_Module(newmodule, NULL);
pcbframe->GetScreen()->m_Curseur = cursor_pos;
newmodule->m_TimeStamp = GetTimeStamp(); newmodule->m_TimeStamp = GetTimeStamp();
} }
......
...@@ -209,8 +209,35 @@ bool active, islib = TRUE; ...@@ -209,8 +209,35 @@ bool active, islib = TRUE;
m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,active); 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_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,active);
m_HToolBar->EnableTool(ID_MODEDIT_SAVE_LIBMODULE,active && islib); m_HToolBar->EnableTool(ID_MODEDIT_SAVE_LIBMODULE,active && islib);
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_INSERT_MODULE_IN_BOARD,active);
m_HToolBar->EnableTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD,active); m_HToolBar->EnableTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD, false);
}
if ( GetScreen() ) if ( GetScreen() )
{ {
m_HToolBar->EnableTool(ID_MODEDIT_UNDO,GetScreen()->m_UndoList && active); m_HToolBar->EnableTool(ID_MODEDIT_UNDO,GetScreen()->m_UndoList && active);
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/* Routines Locales */ /* Routines Locales */
/* Variables 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; static wxPoint Pad_OldPos;
...@@ -29,7 +29,7 @@ static void Exit_Move_Pad(WinEDA_DrawPanel * Panel, wxDC * DC) ...@@ -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 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->ManageCurseur = NULL;
Panel->ForceCloseManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL;
...@@ -55,7 +55,7 @@ D_PAD * pad = pt_pad_selecte; ...@@ -55,7 +55,7 @@ D_PAD * pad = pt_pad_selecte;
} }
EraseDragListe(); EraseDragListe();
pt_pad_selecte = NULL; s_CurrentSelectedPad = NULL;
g_Drag_Pistes_On = FALSE; g_Drag_Pistes_On = FALSE;
} }
...@@ -68,7 +68,7 @@ static void Show_Pad_Move(WinEDA_DrawPanel * panel, wxDC * DC, bool erase) ...@@ -68,7 +68,7 @@ static void Show_Pad_Move(WinEDA_DrawPanel * panel, wxDC * DC, bool erase)
TRACK * Track; TRACK * Track;
DRAG_SEGM * pt_drag; DRAG_SEGM * pt_drag;
BASE_SCREEN * screen = panel->GetScreen(); 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); if ( erase ) pad->Draw(panel, DC, wxPoint(0,0), GR_XOR);
pad->m_Pos = screen->m_Curseur; pad->m_Pos = screen->m_Curseur;
...@@ -238,7 +238,7 @@ int rX, rY; ...@@ -238,7 +238,7 @@ int rX, rY;
/*********************************************************/ /*********************************************************/
void WinEDA_BasePcbFrame::DeletePad(D_PAD* Pad, wxDC * DC) 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; MODULE * Module;
wxString line; wxString line;
...@@ -268,27 +268,26 @@ wxString line; ...@@ -268,27 +268,26 @@ wxString line;
/*************************************************************/ /*************************************************************/
void WinEDA_BasePcbFrame::StartMovePad(D_PAD * Pad, wxDC * DC) void WinEDA_BasePcbFrame::StartMovePad(D_PAD * Pad, wxDC * DC)
/*************************************************************/ /*************************************************************/
/* Routine de deplacement d'une pastille */ /* Function to initialise the "move pad" command */
{ {
MODULE * Module; MODULE * Module;
/* localisation d'une pastille ? */
if(Pad == NULL ) return; if(Pad == NULL ) return;
Module = (MODULE*) Pad->m_Parent; Module = (MODULE*) Pad->m_Parent;
pt_pad_selecte = Pad ; s_CurrentSelectedPad = Pad ;
Pad_OldPos = Pad->m_Pos; Pad_OldPos = Pad->m_Pos;
Pad->Display_Infos(this); Pad->Display_Infos(this);
DrawPanel->ManageCurseur = Show_Pad_Move; DrawPanel->ManageCurseur = Show_Pad_Move;
DrawPanel->ForceCloseManageCurseur = Exit_Move_Pad; 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->Draw(DrawPanel, DC, wxPoint(0,0),GR_XOR);
Pad->m_Flags |= IS_MOVED; Pad->m_Flags |= IS_MOVED;
Pad->Draw(DrawPanel, DC, wxPoint(0,0),GR_XOR); 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); Build_1_Pad_SegmentsToDrag(DrawPanel, DC, Pad);
} }
...@@ -318,7 +317,7 @@ MODULE * Module; ...@@ -318,7 +317,7 @@ MODULE * Module;
dX = Pad->m_Pos.x - Pad_OldPos.x; dX = Pad->m_Pos.x - Pad_OldPos.x;
dY = Pad->m_Pos.y - Pad_OldPos.y; dY = Pad->m_Pos.y - Pad_OldPos.y;
RotatePoint(&dX, &dY, - Module->m_Orient ); 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; Pad->m_Flags = 0;
......
...@@ -568,7 +568,8 @@ int max_layer = m_Pcb->m_BoardSettings->m_CopperLayerCount; ...@@ -568,7 +568,8 @@ int max_layer = m_Pcb->m_BoardSettings->m_CopperLayerCount;
case 'T': // Track list start: fmt = T image layer t_count case 'T': // Track list start: fmt = T image layer t_count
sscanf(Line+2, "%d %d %d", & image, & track_layer, & track_count); sscanf(Line+2, "%d %d %d", & image, & track_layer, & track_count);
track_layer--; 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 // Read corners: fmt = C x_pos y_pos
for ( int ii = 0; ii < track_count; ii++ ) for ( int ii = 0; ii < track_count; ii++ )
{ {
......
...@@ -26,9 +26,9 @@ ...@@ -26,9 +26,9 @@
#include "Update_Module_Board.xpm" #include "Update_Module_Board.xpm"
#ifdef __UNIX__ #ifdef __UNIX__
#define LISTBOX_WIDTH 120 #define LISTBOX_WIDTH 140
#else #else
#define LISTBOX_WIDTH 100 #define LISTBOX_WIDTH 120
#endif #endif
/***************************************************/ /***************************************************/
......
...@@ -16,23 +16,23 @@ extern wxString g_Main_Title; ...@@ -16,23 +16,23 @@ extern wxString g_Main_Title;
wxString MsgInfos( wxString MsgInfos(
#ifdef GERBVIEW #ifdef GERBVIEW
wxT("** GERBVIEW (jul 2001 .. 2006) **") wxT("** GERBVIEW (jul 2001 .. 2007) **")
#else #else
#ifdef PCBNEW #ifdef PCBNEW
wxT("** PCBNEW (sept 1992 .. 2006) **") wxT("** PCBNEW (sept 1992 .. 2007) **")
#endif #endif
#endif #endif
#ifdef CVPCB #ifdef CVPCB
wxT("** CVPCB (sept 1992 .. 2006) **") wxT("** CVPCB (sept 1992 .. 2007) **")
#endif #endif
#ifdef KICAD #ifdef KICAD
wxT("** KICAD (jul 2000 .. 2006) **") wxT("** KICAD (jul 2000 .. 2007) **")
#endif #endif
#ifdef EESCHEMA #ifdef EESCHEMA
wxT("** EESCHEMA (sept 1994 .. 2006) **") wxT("** EESCHEMA (sept 1994 .. 2007) **")
#endif #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