237 lines
6.0 KiB
C++
237 lines
6.0 KiB
C++
/*******************************************************************/
|
||
/* CVPCB: Routines de base : */
|
||
/* lecture Netliste et creation des fenetres composants et modules */
|
||
/*******************************************************************/
|
||
|
||
#include "fctsys.h"
|
||
#include "common.h"
|
||
|
||
#include "cvpcb.h"
|
||
#include "gr_basic.h"
|
||
|
||
#include "protos.h"
|
||
#include "id.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(void)
|
||
/*******************************************/
|
||
/* Lecture de la netliste selon format, ainsi que du fichier des composants
|
||
*/
|
||
{
|
||
STORECMP * Composant;
|
||
wxString msg;
|
||
int ii;
|
||
int error_level = -1;
|
||
|
||
switch( g_NetType )
|
||
{
|
||
case TYPE_NON_SPECIFIE:
|
||
case TYPE_ORCADPCB2:
|
||
error_level = ReadSchematicNetlist();
|
||
break;
|
||
|
||
case TYPE_PCAD:
|
||
error_level = rdpcad() ;
|
||
break;
|
||
|
||
case TYPE_VIEWLOGIC_WIR:
|
||
error_level = ReadViewlogicWirList() ;
|
||
break;
|
||
|
||
case TYPE_VIEWLOGIC_NET:
|
||
error_level = ReadViewlogicNetList() ;
|
||
break;
|
||
|
||
default:
|
||
DisplayError(this, _("Unknown Netlist Format") );
|
||
break;
|
||
}
|
||
|
||
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(_("Componants: %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 Net List & Cmp"),
|
||
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);
|
||
}
|
||
|