	/*******************************************************************/
	/*  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(void)
/**************************************/
/*
	- Affecte un module au composant selectionne
	- Selectionne le composant suivant
*/
{
STORECMP * Composant;
int ii, NumCmp, IsNew = 1;
char Line[256];

	if ( BaseListeCmp == NULL ) return;

	NumCmp = m_ListCmp->GetSelection();
	if( NumCmp < 0 )
		{
		NumCmp = 0;
		m_ListCmp->SetSelection(NumCmp, TRUE);
		}

	Composant = BaseListeCmp;
	for ( ii = 0; Composant != NULL; Composant = Composant->Pnext, ii++ )
		{
		if ( NumCmp == ii ) break;
		}

	if ( Composant == NULL ) return;
	if ( Composant->Module[0] >= ' ') IsNew = 0;

	strncpy( Composant->Module, CurrentPkg, 32);Composant->Module[32] = 0;

	sprintf(Line,CMP_FORMAT ,ii+1,
			Composant->Reference, Composant->Valeur, Composant->Module);
	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);

	sprintf(Line,_("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 = rdorcad();
			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 != "")
		wxSetWorkingDirectory( wxPathOnly(NetInNameBuffer) );

	Read_Config(NetInNameBuffer);	// relecture de la config (elle peut etre modifiée)

	listlib();
	BuildModListBox();

	m_ListCmp->Clear();
	Composant = BaseListeCmp;

	composants_non_affectes = 0;
	for ( ii = 1;Composant != NULL; Composant = Composant->Pnext, ii++ )
		{
		msg.Printf(CMP_FORMAT ,ii,
				Composant->Reference, Composant->Valeur,
				Composant->Module);
		m_ListCmp->AppendLine(msg);
		if( Composant->Module[0] < ' ' ) composants_non_affectes += 1;
		}
	if ( 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 */
	msg.Printf("%s [%s]",Main_Title.GetData(), FFileName.GetData());
	SetTitle(msg);

}


/****************************************/
int WinEDA_CvpcbFrame::SaveNetList(void)
/****************************************/
/* Sauvegarde des fichiers netliste et cmp
	Le nom complet du fichier Netliste doit etre dans FFileName.
	Le nom du fichier cmp en est deduit
*/
{
	if( savecmp() == 0 )
		{
		DisplayError(this, _("Unable to create component file (.cmp)") );
		return(0);
		}

	dest = fopen(FFileName,"wt") ;
	if( dest == 0 )
		{
		DisplayError(this, _("Unable to create netlist file") );
		return(0);
		}

	switch ( output_type )
		{
		default:
		case 0:
		case 1: genorcad() ;
			break;
		}

	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 == "" )
		{
		if( NetInExtBuffer != "" ) Mask = "*" + NetInExtBuffer;
		else Mask = "*.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 == "") return(FALSE);
		}
	else Line = FullFileName;

	NetInNameBuffer = Line;
	NetNameBuffer = Line;
	FFileName = NetInNameBuffer;

	/* Mise a jour du titre de la fenetre principale */
	Line = Main_Title + " " + NetInNameBuffer;
	SetTitle(Line);

	ReadNetListe();

	return(TRUE);
}

