2009-02-04 15:25:03 +00:00
|
|
|
/*******************************************************************/
|
|
|
|
/* CVPCB: Routines de base : */
|
|
|
|
/* lecture Netliste et creation des fenetres composants et modules */
|
|
|
|
/*******************************************************************/
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
#include "fctsys.h"
|
|
|
|
#include "common.h"
|
2009-02-04 15:25:03 +00:00
|
|
|
#include "confirm.h"
|
2007-06-05 12:10:51 +00:00
|
|
|
#include "gr_basic.h"
|
2009-02-04 15:25:03 +00:00
|
|
|
#include "gestfich.h"
|
|
|
|
#include "id.h"
|
2009-04-05 20:49:15 +00:00
|
|
|
#include "appl_wxstruct.h"
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
#include "cvpcb.h"
|
2007-06-05 12:10:51 +00:00
|
|
|
#include "protos.h"
|
2009-02-04 15:25:03 +00:00
|
|
|
#include "cvstruct.h"
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* routines locales : */
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************/
|
2009-02-04 15:25:03 +00:00
|
|
|
void WinEDA_CvpcbFrame::SetNewPkg( const wxString& package )
|
2007-06-05 12:10:51 +00:00
|
|
|
/*********************************************************/
|
2009-02-04 15:25:03 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
/*
|
2009-02-04 15:25:03 +00:00
|
|
|
* - Affecte un module au composant selectionne
|
|
|
|
* - Selectionne le composant suivant
|
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
{
|
2009-02-04 15:25:03 +00:00
|
|
|
STORECMP* Composant;
|
|
|
|
int ii, NumCmp, IsNew = 1;
|
|
|
|
wxString Line;
|
|
|
|
|
|
|
|
if( g_BaseListeCmp == NULL )
|
|
|
|
return;
|
|
|
|
|
|
|
|
NumCmp = m_ListCmp->GetSelection();
|
|
|
|
if( NumCmp < 0 )
|
|
|
|
{
|
|
|
|
NumCmp = 0;
|
|
|
|
m_ListCmp->SetSelection( NumCmp, TRUE );
|
|
|
|
}
|
|
|
|
|
|
|
|
Composant = g_BaseListeCmp;
|
|
|
|
for( ii = 0; Composant != NULL; Composant = Composant->Pnext, ii++ )
|
|
|
|
{
|
|
|
|
if( NumCmp == ii )
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( Composant == NULL )
|
|
|
|
return;
|
|
|
|
if( !Composant->m_Module.IsEmpty() )
|
|
|
|
IsNew = 0;
|
|
|
|
|
|
|
|
Composant->m_Module = package;
|
|
|
|
|
|
|
|
Line.Printf( CMP_FORMAT, ii + 1,
|
|
|
|
Composant->m_Reference.GetData(), Composant->m_Valeur.GetData(),
|
|
|
|
Composant->m_Module.GetData() );
|
|
|
|
modified = 1;
|
|
|
|
if( IsNew )
|
|
|
|
composants_non_affectes -= 1;
|
|
|
|
|
|
|
|
m_ListCmp->SetString( NumCmp, Line );
|
|
|
|
m_ListCmp->SetSelection( NumCmp, FALSE );
|
|
|
|
|
|
|
|
// We activate next component:
|
|
|
|
if( NumCmp < (m_ListCmp->GetCount() - 1) )
|
|
|
|
NumCmp++;
|
|
|
|
m_ListCmp->SetSelection( NumCmp, TRUE );
|
|
|
|
|
|
|
|
Line.Printf( _( "Components: %d (free: %d)" ),
|
|
|
|
nbcomp, composants_non_affectes );
|
|
|
|
SetStatusText( Line, 1 );
|
2007-06-05 12:10:51 +00:00
|
|
|
}
|
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
/********************************************/
|
2009-04-05 20:49:15 +00:00
|
|
|
bool WinEDA_CvpcbFrame::ReadNetList()
|
2007-06-05 12:10:51 +00:00
|
|
|
/*******************************************/
|
2009-02-04 15:25:03 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
/* Lecture de la netliste selon format, ainsi que du fichier des composants
|
2009-02-04 15:25:03 +00:00
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
{
|
2009-02-04 15:25:03 +00:00
|
|
|
STORECMP* Composant;
|
|
|
|
wxString msg;
|
|
|
|
int ii;
|
|
|
|
int error_level;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
error_level = ReadSchematicNetlist();
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
if( error_level < 0 )
|
2009-04-05 20:49:15 +00:00
|
|
|
{
|
|
|
|
msg.Printf( _( "File <%s> does not appear to be a valid Kicad " \
|
|
|
|
"net list file." ),
|
|
|
|
m_NetlistFileName.GetFullPath().c_str() );
|
|
|
|
::wxMessageBox( msg, _( "File Error" ), wxOK | wxICON_ERROR, this );
|
|
|
|
return false;
|
|
|
|
}
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
/* lecture des correspondances */
|
2009-04-05 20:49:15 +00:00
|
|
|
loadcmp( m_NetlistFileName.GetFullPath() );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
if( m_ListCmp == NULL )
|
2009-04-05 20:49:15 +00:00
|
|
|
return false;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-04-05 20:49:15 +00:00
|
|
|
Read_Config( m_NetlistFileName.GetFullPath() );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
listlib();
|
|
|
|
BuildFootprintListBox();
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
m_ListCmp->Clear();
|
|
|
|
Composant = g_BaseListeCmp;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
composants_non_affectes = 0;
|
|
|
|
for( ii = 1; Composant != NULL; Composant = Composant->Pnext, ii++ )
|
|
|
|
{
|
|
|
|
msg.Printf( CMP_FORMAT, ii,
|
|
|
|
Composant->m_Reference.GetData(),
|
|
|
|
Composant->m_Valeur.GetData(),
|
|
|
|
Composant->m_Module.GetData() );
|
|
|
|
m_ListCmp->AppendLine( msg );
|
|
|
|
if( Composant->m_Module.IsEmpty() )
|
|
|
|
composants_non_affectes += 1;
|
|
|
|
}
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
if( g_BaseListeCmp )
|
|
|
|
m_ListCmp->SetSelection( 0, TRUE );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-21 15:12:26 +00:00
|
|
|
msg.Printf( _( "Components: %d (free: %d)" ), nbcomp,
|
2009-02-04 15:25:03 +00:00
|
|
|
composants_non_affectes );
|
|
|
|
SetStatusText( msg, 1 );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2009-02-04 15:25:03 +00:00
|
|
|
/* Mise a jour du titre de la fenetre principale */
|
2009-04-05 20:49:15 +00:00
|
|
|
SetTitle( wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion() +
|
|
|
|
wxT( " " ) + m_NetlistFileName.GetFullPath() );
|
|
|
|
return true;
|
2007-06-05 12:10:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************/
|
2009-04-05 20:49:15 +00:00
|
|
|
int WinEDA_CvpcbFrame::SaveNetList( const wxString& fileName )
|
2007-06-05 12:10:51 +00:00
|
|
|
/*****************************************************************/
|
2009-02-04 15:25:03 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
/* Sauvegarde des fichiers netliste et cmp
|
2009-02-04 15:25:03 +00:00
|
|
|
* Le nom complet du fichier Netliste doit etre dans FFileName.
|
|
|
|
* Le nom du fichier cmp en est deduit
|
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
{
|
2009-04-05 20:49:15 +00:00
|
|
|
wxFileName fn;
|
2009-02-04 15:25:03 +00:00
|
|
|
|
2009-04-05 20:49:15 +00:00
|
|
|
if( !fileName && m_NetlistFileName.IsOk() )
|
|
|
|
fn = m_NetlistFileName;
|
|
|
|
else
|
|
|
|
fn = wxFileName( wxGetCwd(), _( "unamed" ), NetExtBuffer );
|
|
|
|
|
|
|
|
wxFileDialog dlg( this, _( "Save Net and Component List" ), fn.GetPath(),
|
|
|
|
fn.GetFullName(), NetlistFileWildcard,
|
|
|
|
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
|
|
|
|
|
|
|
if( dlg.ShowModal() == wxID_CANCEL )
|
2009-02-04 15:25:03 +00:00
|
|
|
return -1;
|
|
|
|
|
2009-04-05 20:49:15 +00:00
|
|
|
if( SaveComponentList( dlg.GetPath() ) == 0 )
|
2009-02-04 15:25:03 +00:00
|
|
|
{
|
|
|
|
DisplayError( this, _( "Unable to create component file (.cmp)" ) );
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2009-04-05 20:49:15 +00:00
|
|
|
FILE* netlist = wxFopen( dlg.GetPath(), wxT( "wt" ) );
|
|
|
|
|
|
|
|
if( netlist == 0 )
|
2009-02-04 15:25:03 +00:00
|
|
|
{
|
|
|
|
DisplayError( this, _( "Unable to create netlist file" ) );
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2009-04-05 20:49:15 +00:00
|
|
|
GenNetlistPcbnew( netlist );
|
2009-02-04 15:25:03 +00:00
|
|
|
|
|
|
|
return 1;
|
2007-06-05 12:10:51 +00:00
|
|
|
}
|