kicad/cvpcb/init.cpp

238 lines
6.6 KiB
C++
Raw Normal View History

/*******************************************************************/
/* CVPCB: Routines de base : */
/* lecture Netliste et creation des fenetres composants et modules */
/*******************************************************************/
#include "fctsys.h"
#include "common.h"
#include "confirm.h"
#include "gr_basic.h"
#include "gestfich.h"
#include "id.h"
#include "cvpcb.h"
#include "protos.h"
#include "cvstruct.h"
/* routines locales : */
/**********************************************************/
void WinEDA_CvpcbFrame::SetNewPkg( const wxString& package )
/*********************************************************/
/*
* - Affecte un module au composant selectionne
* - Selectionne le composant suivant
*/
{
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 );
}
/********************************************/
void WinEDA_CvpcbFrame::ReadNetListe()
/*******************************************/
/* Lecture de la netliste selon format, ainsi que du fichier des composants
*/
{
STORECMP* Composant;
wxString msg;
int ii;
int error_level;
error_level = ReadSchematicNetlist();
if( error_level < 0 )
return;
/* lecture des correspondances */
loadcmp();
if( m_ListCmp == NULL )
return;
if( !NetInNameBuffer.IsEmpty() )
wxSetWorkingDirectory( wxPathOnly( NetInNameBuffer ) );
Read_Config( NetInNameBuffer ); // relecture de la config (elle peut etre modifi<66>e)
listlib();
BuildFootprintListBox();
m_ListCmp->Clear();
Composant = g_BaseListeCmp;
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;
}
if( g_BaseListeCmp )
m_ListCmp->SetSelection( 0, TRUE );
msg.Printf( _( "Components: %d (free: %d)" ), nbcomp,
composants_non_affectes );
SetStatusText( msg, 1 );
/* Mise a jour du titre de la fenetre principale */
wxString Title = g_Main_Title + wxT( " " ) + GetBuildVersion();
msg.Printf( wxT( "%s [%s]" ), Title.GetData(), FFileName.GetData() );
SetTitle( msg );
}
/*****************************************************************/
int WinEDA_CvpcbFrame::SaveNetList( const wxString& FullFilename )
/*****************************************************************/
/* Sauvegarde des fichiers netliste et cmp
* Le nom complet du fichier Netliste doit etre dans FFileName.
* Le nom du fichier cmp en est deduit
*/
{
wxString NetlistFullFileName = FullFilename;
if( NetlistFullFileName.IsEmpty() )
{
wxString Mask = wxT( "*" ) + NetExtBuffer;
if( !NetNameBuffer.IsEmpty() )
{
NetlistFullFileName = NetNameBuffer;
ChangeFileNameExt( NetlistFullFileName, NetExtBuffer );
}
NetlistFullFileName =
EDA_FileSelector( _( "Save NetList and Components List files" ),
NetDirBuffer, /* Chemin par defaut */
NetlistFullFileName, /* nom fichier par defaut */
NetExtBuffer, /* extension par defaut */
Mask, /* Masque d'affichage */
this,
wxFD_SAVE,
TRUE
);
}
if( NetlistFullFileName.IsEmpty() )
return -1;
FFileName = NetlistFullFileName;
NetNameBuffer = NetlistFullFileName;
if( SaveComponentList( NetlistFullFileName ) == 0 )
{
DisplayError( this, _( "Unable to create component file (.cmp)" ) );
return 0;
}
dest = wxFopen( NetlistFullFileName, wxT( "wt" ) );
if( dest == 0 )
{
DisplayError( this, _( "Unable to create netlist file" ) );
return 0;
}
GenNetlistPcbnew();
return 1;
}
/**********************************************************************/
bool WinEDA_CvpcbFrame::ReadInputNetList( const wxString& FullFileName )
/**********************************************************************/
/* Routine de selection du nom de la netliste d'entree, et de lecure de
* celle-ci
*/
{
wxString Mask, Line;
if( FullFileName.IsEmpty() )
{
if( !NetInExtBuffer.IsEmpty() )
Mask = wxT( "*" ) + NetInExtBuffer;
else
Mask = wxT( "*.net" );
Line = EDA_FileSelector( _( "Load Net List" ),
NetDirBuffer, /* Chemin par defaut */
NetInNameBuffer, /* nom fichier par defaut */
NetInExtBuffer, /* extension par defaut */
Mask, /* Masque d'affichage */
this,
0,
FALSE
);
if( Line.IsEmpty() )
return FALSE;
}
else
Line = FullFileName;
NetInNameBuffer = Line;
NetNameBuffer = Line;
FFileName = NetInNameBuffer;
/* Mise a jour du titre de la fenetre principale */
Line = g_Main_Title + wxT( " " ) + GetBuildVersion();
Line += wxT( " " ) + NetInNameBuffer;
SetTitle( Line );
ReadNetListe();
return TRUE;
}