832 lines
20 KiB
C++
832 lines
20 KiB
C++
/***************************************/
|
|
/* Gestion de la LIBRAIRIE des MODULES */
|
|
/***************************************/
|
|
|
|
/* Fichier LIBRAIRI.CPP */
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
|
|
#include "common.h"
|
|
#include "pcbnew.h"
|
|
|
|
#include "protos.h"
|
|
|
|
/*
|
|
Format de l'entete de la Librairie:
|
|
chaine ENTETE-LIBRAIRIE date-heure
|
|
$INDEX
|
|
liste des noms modules ( 1 nom par ligne)
|
|
$EndINDEX
|
|
liste des descriptions des Modules
|
|
$EndLIBRARY
|
|
*/
|
|
|
|
#define OLD_EXT wxT(".bak")
|
|
#define FILETMP_EXT wxT(".$$$")
|
|
|
|
|
|
/* Fonctions locales */
|
|
static bool CreateDocLibrary(const wxString & LibName);
|
|
|
|
/*********************************************************/
|
|
MODULE * WinEDA_ModuleEditFrame::Import_Module(wxDC * DC)
|
|
/*********************************************************/
|
|
/*
|
|
Importation de modules Hors librairie
|
|
Lit 1 fichier type Empreinte et place le module sur PCB
|
|
*/
|
|
{
|
|
int NbLine = 0;
|
|
char Line[1024];
|
|
wxString CmpFullFileName;
|
|
FILE * dest;
|
|
MODULE * module = NULL;
|
|
|
|
/* Lecture Fichier module */
|
|
CmpFullFileName = EDA_FileSelector( _("Import Module:"),
|
|
wxEmptyString, /* Chemin par defaut */
|
|
wxEmptyString, /* nom fichier par defaut */
|
|
EXT_CMP, /* extension par defaut */
|
|
EXT_CMP_MASK, /* Masque d'affichage */
|
|
this,
|
|
wxFD_OPEN,
|
|
TRUE
|
|
);
|
|
|
|
if ( CmpFullFileName == wxEmptyString ) return NULL;
|
|
|
|
if ( (dest = wxFopen(CmpFullFileName, wxT("rt")) ) == NULL )
|
|
{
|
|
wxString msg;
|
|
msg.Printf( _("File <%s> not found"), CmpFullFileName.GetData());
|
|
DisplayError(this, msg) ;
|
|
return NULL;
|
|
}
|
|
|
|
/* Lecture Entete */
|
|
GetLine(dest, Line, &NbLine);
|
|
if(strnicmp( Line, ENTETE_LIBRAIRIE, L_ENTETE_LIB) != 0)
|
|
{
|
|
DisplayError(this, _("Not a module file"));
|
|
return NULL;
|
|
}
|
|
|
|
/* Lecture du fichier: recherche du debut de la descr module */
|
|
while( GetLine(dest, Line, &NbLine) != NULL)
|
|
{
|
|
if(strnicmp( Line,"$MODULE",7) == 0) break;
|
|
}
|
|
|
|
module = new MODULE(m_Pcb);
|
|
module->ReadDescr(dest, &NbLine);
|
|
fclose(dest);
|
|
|
|
/* Mise a jour du chainage */
|
|
if( m_Pcb->m_Modules )
|
|
{
|
|
m_Pcb->m_Modules->Pback = module;
|
|
}
|
|
module->Pnext = m_Pcb->m_Modules;
|
|
module->Pback = m_Pcb;
|
|
m_Pcb->m_Modules = module;
|
|
|
|
/* Affichage des caracteristiques : */
|
|
module->Display_Infos(this);
|
|
Place_Module(module, DC) ;
|
|
m_Pcb->m_Status_Pcb = 0 ;
|
|
build_liste_pads();
|
|
|
|
return module;
|
|
}
|
|
|
|
/************************************************************************/
|
|
void WinEDA_ModuleEditFrame::Export_Module(MODULE* ptmod, bool createlib)
|
|
/************************************************************************/
|
|
/*
|
|
Genere 1 fichier type Empreinte a partir de la description du module sur PCB
|
|
*/
|
|
{
|
|
wxString FullFileName, Mask( wxT("*") );
|
|
char Line[1025];
|
|
FILE * dest;
|
|
wxString msg, path;
|
|
|
|
if ( ptmod == NULL ) return;
|
|
|
|
ptmod->m_LibRef = ptmod->m_Reference->m_Text;
|
|
FullFileName = ptmod->m_LibRef;
|
|
FullFileName += createlib ? LibExtBuffer : EXT_CMP;
|
|
|
|
Mask += createlib ? LibExtBuffer : EXT_CMP;
|
|
|
|
if ( createlib ) path = g_RealLibDirBuffer;
|
|
FullFileName = EDA_FileSelector( createlib ? _("Create lib") : _("Export Module:"),
|
|
path, /* Chemin par defaut */
|
|
FullFileName, /* nom fichier par defaut */
|
|
createlib ? LibExtBuffer : EXT_CMP, /* extension par defaut */
|
|
Mask, /* Masque d'affichage */
|
|
this,
|
|
wxFD_SAVE,
|
|
TRUE
|
|
);
|
|
|
|
if ( FullFileName.IsEmpty() ) return;
|
|
|
|
if ( createlib && wxFileExists(FullFileName) )
|
|
{
|
|
msg.Printf( _("File %s exists, OK to replace ?"),
|
|
FullFileName.GetData());
|
|
if( ! IsOK(this, msg) ) return;
|
|
}
|
|
|
|
/* Generation du fichier Empreinte */
|
|
if ( (dest = wxFopen(FullFileName, wxT("wt")) ) == NULL )
|
|
{
|
|
msg.Printf( _("Unable to create <%s>"),FullFileName.GetData()) ;
|
|
DisplayError(this, msg) ;
|
|
return ;
|
|
}
|
|
|
|
fprintf(dest,"%s %s\n", ENTETE_LIBRAIRIE, DateAndTime(Line));
|
|
fputs("$INDEX\n",dest);
|
|
|
|
fprintf(dest,"%s\n", CONV_TO_UTF8(ptmod->m_LibRef) );
|
|
fputs("$EndINDEX\n",dest);
|
|
|
|
m_Pcb->m_Modules->WriteDescr(dest);
|
|
|
|
fputs("$EndLIBRARY\n",dest);
|
|
fclose(dest) ;
|
|
msg.Printf( _("Module exported in file <%s>"),FullFileName.GetData()) ;
|
|
DisplayInfo(this, msg) ;
|
|
}
|
|
|
|
/**********************************************************/
|
|
void WinEDA_ModuleEditFrame::Delete_Module_In_Library(const
|
|
wxString & libname)
|
|
/**********************************************************/
|
|
{
|
|
int ii, NoFound = 1, LineNum = 0;
|
|
char Line[1024], Name[256];
|
|
wxString NewLib, OldLib;
|
|
FILE * dest, * lib_module;
|
|
wxString CmpName, msg;
|
|
|
|
/* Demande du nom du composant a supprimer */
|
|
CmpName = Select_1_Module_From_List( this, libname, wxEmptyString, wxEmptyString );
|
|
if( CmpName == wxEmptyString ) return;
|
|
|
|
/* Confirmation */
|
|
msg.Printf( _("Ok to delete module %s in library %s"),
|
|
CmpName.GetData(), libname.GetData() );
|
|
if( !IsOK(this, msg) ) return;
|
|
|
|
OldLib = libname;
|
|
|
|
if ((lib_module = wxFopen( OldLib, wxT("rt"))) == NULL )
|
|
{
|
|
wxString msg;
|
|
msg = _("Library ") + OldLib + _(" not found");
|
|
DisplayError(this, msg);
|
|
return;
|
|
}
|
|
|
|
|
|
/* lecture entete */
|
|
GetLine(lib_module,Line, &LineNum) ;
|
|
|
|
if(strnicmp( Line,ENTETE_LIBRAIRIE, L_ENTETE_LIB) != 0)
|
|
{
|
|
DisplayError(this, _("Not a Library file"));
|
|
fclose(lib_module);
|
|
return;
|
|
}
|
|
|
|
/* lecture des nom des composants */
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
if( strnicmp( Line, "$INDEX",6) == 0 )
|
|
{
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
StrPurge(Line);
|
|
msg = CONV_FROM_UTF8(Line);
|
|
if( CmpName.CmpNoCase(msg) == 0) /* composant trouve */
|
|
{
|
|
NoFound = 0; break;
|
|
}
|
|
if( strnicmp( Line, "$EndINDEX",9) == 0 ) break;
|
|
}
|
|
}
|
|
if( strnicmp( Line, "$EndINDEX",9) == 0 ) break;
|
|
}
|
|
|
|
if( NoFound )
|
|
{
|
|
fclose(lib_module);
|
|
msg.Printf( _("Module [%s] not found"), CmpName.GetData() );
|
|
DisplayError(this, msg);
|
|
return ;
|
|
}
|
|
|
|
/* Creation de la nouvelle librairie */
|
|
NewLib = OldLib;
|
|
ChangeFileNameExt(NewLib,FILETMP_EXT);
|
|
if ((dest = wxFopen(NewLib, wxT("wt") )) == NULL )
|
|
{
|
|
fclose(lib_module) ;
|
|
wxString msg;
|
|
msg = _("Unable to create ") + NewLib;
|
|
DisplayError(this, msg);
|
|
return;
|
|
}
|
|
|
|
wxBeginBusyCursor();
|
|
|
|
/* Creation de l'entete avec nouvelle date */
|
|
fprintf(dest,ENTETE_LIBRAIRIE);
|
|
fprintf(dest," %s\n$INDEX\n", DateAndTime(Line) );
|
|
|
|
fseek(lib_module,0,0); GetLine(lib_module, Line, &ii);
|
|
while(GetLine(lib_module,Line, &ii))
|
|
{
|
|
if ( strnicmp(Line,"$M",2 ) == 0 ) break;
|
|
if ( strnicmp(Line,"$INDEX",6 ) == 0 )
|
|
{
|
|
while(GetLine(lib_module,Line, &ii))
|
|
{
|
|
if ( strnicmp(Line,"$EndINDEX",9 ) == 0 ) break;
|
|
StrPurge(Line);
|
|
msg = CONV_FROM_UTF8(Line);
|
|
if( CmpName.CmpNoCase(msg) != 0 )
|
|
fprintf(dest,"%s\n",Line);
|
|
}
|
|
}
|
|
if ( strnicmp(Line,"$EndINDEX",9 ) == 0 ) break;
|
|
}
|
|
|
|
fprintf(dest,"$EndINDEX\n");
|
|
|
|
/* Copie des modules */
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
StrPurge(Line);
|
|
if( strnicmp( Line, "$MODULE", 7) == 0 )
|
|
{
|
|
sscanf(Line+7," %s", Name);
|
|
msg = CONV_FROM_UTF8(Name);
|
|
if( msg.CmpNoCase(CmpName) == 0 )
|
|
{
|
|
/* suppression ancien module */
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
if( strnicmp( Line, "$EndMODULE", 9) == 0 ) break;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
fprintf(dest, "%s\n", Line);
|
|
}
|
|
|
|
fclose(lib_module);
|
|
fclose(dest) ;
|
|
|
|
wxEndBusyCursor();
|
|
|
|
/* Le fichier ancienne librairie est renommee en .bak */
|
|
wxString BakFilename = OldLib;
|
|
ChangeFileNameExt( BakFilename, OLD_EXT);
|
|
|
|
if( wxFileExists(BakFilename) ) wxRemoveFile(BakFilename);
|
|
|
|
if( ! wxRenameFile(OldLib, BakFilename) )
|
|
{
|
|
DisplayError(this, wxT("Librairi.cpp: rename .bak err"));
|
|
return;
|
|
}
|
|
|
|
/* Le fichier temporaire est renommee comme l'ancienne Lib */
|
|
if( ! wxRenameFile(NewLib,OldLib) )
|
|
{
|
|
DisplayError(this, wxT("Librairi.cpp: rename err 2") );
|
|
return;
|
|
}
|
|
|
|
msg.Printf( _("Component %s deleted in library %s"), CmpName.GetData(), OldLib.GetData() ) ;
|
|
Affiche_Message(msg) ;
|
|
|
|
CreateDocLibrary(OldLib);
|
|
}
|
|
|
|
|
|
/***********************************************************************/
|
|
void WinEDA_BasePcbFrame::Archive_Modules(const wxString & LibName,
|
|
bool NewModulesOnly)
|
|
/***********************************************************************/
|
|
/*
|
|
Sauve en Librairie:
|
|
tous les nouveaux modules ( c.a.d. les modules
|
|
n'existant pas deja (si NewModulesOnly == TRUE)
|
|
tous les modules (si NewModulesOnly == FALSE)
|
|
*/
|
|
{
|
|
int ii, NbModules = 0;
|
|
float Pas;
|
|
MODULE * Module;
|
|
wxString FullFileName = LibName;
|
|
|
|
if ( m_Pcb->m_Modules == NULL )
|
|
{
|
|
DisplayInfo(this, _(" No modules to archive!") );
|
|
return;
|
|
}
|
|
|
|
if ( FullFileName.IsEmpty() )
|
|
{
|
|
wxString Mask = wxT("*") + LibExtBuffer;
|
|
FullFileName = EDA_FileSelector( _("Library"),
|
|
g_RealLibDirBuffer, /* Chemin par defaut */
|
|
FullFileName, /* nom fichier par defaut */
|
|
LibExtBuffer, /* extension par defaut */
|
|
Mask, /* Masque d'affichage */
|
|
this,
|
|
wxFD_SAVE,
|
|
TRUE
|
|
);
|
|
|
|
if ( FullFileName.IsEmpty() ) return;
|
|
}
|
|
|
|
bool file_exists = wxFileExists(FullFileName);
|
|
if ( ! NewModulesOnly && file_exists )
|
|
{
|
|
wxString msg;
|
|
msg.Printf( _("File %s exists, OK to replace ?"), FullFileName.GetData());
|
|
if( ! IsOK(this, msg) ) return;
|
|
}
|
|
|
|
DrawPanel->m_AbortRequest = FALSE;
|
|
|
|
// Create a new, empty library if no old lib, or if archive all modules
|
|
if ( ! NewModulesOnly || ! file_exists )
|
|
{
|
|
FILE * lib_module;
|
|
if ((lib_module = wxFopen(FullFileName, wxT("w+t"))) == NULL )
|
|
{
|
|
wxString msg = _("Unable to create ") + FullFileName;
|
|
DisplayError(this, msg);
|
|
return;
|
|
}
|
|
char Line[256];
|
|
fprintf(lib_module,"%s %s\n", ENTETE_LIBRAIRIE, DateAndTime(Line));
|
|
fputs("$INDEX\n",lib_module);
|
|
fputs("$EndINDEX\n",lib_module);
|
|
fputs("$EndLIBRARY\n",lib_module);
|
|
fclose(lib_module) ;
|
|
}
|
|
|
|
/* Calcul du nombre de modules */
|
|
Module = (MODULE *) m_Pcb->m_Modules;
|
|
for( ;Module != NULL; Module = (MODULE *)Module->Pnext) NbModules++;
|
|
Pas = (float) 100 / NbModules;
|
|
DisplayActivity(0, wxEmptyString);
|
|
|
|
Module = (MODULE *) m_Pcb->m_Modules;
|
|
for( ii = 1 ;Module != NULL; ii++, Module = (MODULE *)Module->Pnext)
|
|
{
|
|
if( Save_1_Module(FullFileName, Module,
|
|
NewModulesOnly ? FALSE : TRUE, FALSE) == 0 ) break;
|
|
DisplayActivity((int)( ii * Pas) , wxEmptyString);
|
|
/* Tst demande d'arret de sauvegarde ( key ESCAPE actionnee ) */
|
|
if( DrawPanel->m_AbortRequest ) break;
|
|
}
|
|
|
|
CreateDocLibrary(LibName);
|
|
}
|
|
|
|
|
|
/*****************************************************************/
|
|
int WinEDA_BasePcbFrame::Save_1_Module(const wxString & LibName,
|
|
MODULE* Module, bool Overwrite, bool DisplayDialog)
|
|
/*****************************************************************/
|
|
/*
|
|
sauve en Librairie le module Module:
|
|
si no_replace == TRUE, s'il est nouveau.
|
|
|
|
retourne
|
|
1 si OK
|
|
0 si abort ou probleme
|
|
*/
|
|
{
|
|
int newmodule, end;
|
|
int LineNum = 0, tmp;
|
|
char Name[256], Line[1024];
|
|
wxString Name_Cmp;
|
|
wxString NewLib, OldLib, msg;
|
|
FILE * lib_module, *dest;
|
|
bool added = TRUE;
|
|
|
|
Module->Display_Infos(this);
|
|
|
|
if ( ! wxFileExists(LibName) )
|
|
{
|
|
msg.Printf( _("Library %s not found"), LibName.GetData());
|
|
DisplayError(this, msg);
|
|
return 0;
|
|
}
|
|
|
|
|
|
/* Demande du nom du composant en librairie */
|
|
Name_Cmp = Module->m_LibRef;
|
|
|
|
if( DisplayDialog )
|
|
{
|
|
Get_Message(_("Name:"), Name_Cmp, this ) ;
|
|
if( Name_Cmp.IsEmpty() ) return(0);
|
|
Name_Cmp.Trim(TRUE);
|
|
Name_Cmp.Trim(FALSE);
|
|
Module->m_LibRef = Name_Cmp;
|
|
}
|
|
|
|
if ((lib_module = wxFopen(LibName, wxT("rt"))) == NULL )
|
|
{
|
|
msg.Printf( _("Unable to open %s"), LibName.GetData());
|
|
DisplayError(this, msg);
|
|
return 0;
|
|
}
|
|
|
|
/* lecture entete : ENTETE_LIBRAIRIE */
|
|
GetLine(lib_module, Line, &LineNum) ;
|
|
if(strnicmp( Line,ENTETE_LIBRAIRIE, L_ENTETE_LIB) != 0)
|
|
{
|
|
fclose(lib_module) ;
|
|
msg.Printf( _("File %s is not a eeschema library"), LibName.GetData());
|
|
DisplayError(this, msg);
|
|
return(0);
|
|
}
|
|
|
|
/* lecture des noms des composants - verif si le module est deja existant */
|
|
newmodule = 1; end = 0;
|
|
while( !end && GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
if( Line[0] != '$' ) continue;
|
|
if( strncmp( Line+1, "INDEX",5) != 0 ) continue;
|
|
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
if( strncmp( Line, "$EndINDEX",9) == 0 )
|
|
{
|
|
end = 1; break;
|
|
}
|
|
|
|
StrPurge(Line);
|
|
msg = CONV_FROM_UTF8(Line);
|
|
if( Name_Cmp.CmpNoCase(msg) == 0) /* composant trouve */
|
|
{
|
|
added = FALSE;
|
|
newmodule = 0;
|
|
if( DisplayDialog )
|
|
{
|
|
msg = _("Module exists Line ");
|
|
msg << LineNum;
|
|
Affiche_Message(msg) ;
|
|
}
|
|
if( ! Overwrite) /* le module n'est pas a sauver car deja existant */
|
|
{
|
|
fclose(lib_module); return(1);
|
|
}
|
|
end = 1; break;
|
|
}
|
|
}
|
|
}
|
|
fclose(lib_module);
|
|
|
|
/* Creation de la nouvelle librairie */
|
|
|
|
if ((lib_module = wxFopen(LibName, wxT("rt"))) == NULL )
|
|
{
|
|
DisplayError(this, wxT("Librairi.cpp: Error oldlib not found"));
|
|
return(0);
|
|
}
|
|
|
|
NewLib = LibName;
|
|
ChangeFileNameExt(NewLib, FILETMP_EXT);
|
|
if ((dest = wxFopen(NewLib, wxT("w+t"))) == NULL )
|
|
{
|
|
fclose(lib_module) ;
|
|
msg = _("Unable to create ") + NewLib;
|
|
DisplayError(this, msg);
|
|
return(0);
|
|
}
|
|
|
|
wxBeginBusyCursor() ;
|
|
|
|
/* Creation de l'entete avec nouvelle date */
|
|
fprintf(dest,ENTETE_LIBRAIRIE);
|
|
fprintf(dest," %s\n$INDEX\n", DateAndTime(Line) );
|
|
|
|
LineNum = 0;
|
|
GetLine(lib_module, Line, &LineNum);
|
|
while(GetLine(lib_module,Line, &LineNum))
|
|
{
|
|
StrPurge(Line);
|
|
if ( strnicmp(Line,"$M",2 ) == 0 ) break;
|
|
if ( strnicmp(Line,"$INDEX",6 ) == 0 )
|
|
{
|
|
while(GetLine(lib_module,Line, &LineNum))
|
|
{
|
|
if ( strnicmp(Line,"$EndINDEX",9 ) == 0 ) break;
|
|
fprintf(dest,"%s\n",Line);
|
|
}
|
|
}
|
|
if(newmodule) fprintf(dest,"%s\n",CONV_TO_UTF8(Name_Cmp) );
|
|
if ( strnicmp(Line,"$EndINDEX",0 ) == 0 ) break;
|
|
}
|
|
|
|
fprintf(dest,"$EndINDEX\n");
|
|
|
|
/* Copie des modules, jusqu'au module a supprimer */
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
StrPurge(Line);
|
|
if( strnicmp( Line, "$EndLIBRARY", 8) == 0 ) continue;
|
|
if( strnicmp( Line, "$MODULE", 7) == 0 )
|
|
{
|
|
sscanf(Line+7," %s", Name);
|
|
msg = CONV_FROM_UTF8(Name);
|
|
if( msg.CmpNoCase(Name_Cmp) == 0 )
|
|
{
|
|
/* suppression ancien module */
|
|
while( GetLine(lib_module, Line, &LineNum) )
|
|
{
|
|
if( strnicmp( Line, "$EndMODULE", 9) == 0 ) break;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
fprintf(dest,"%s\n",Line);
|
|
}
|
|
|
|
/* Ecriture du module ( en fin de librairie ) */
|
|
tmp = Module->m_TimeStamp; Module->m_TimeStamp = 0;
|
|
Module->WriteDescr(dest);
|
|
fprintf(dest,"$EndLIBRARY\n");
|
|
Module->m_TimeStamp = tmp;
|
|
|
|
fclose(dest) ; fclose(lib_module) ;
|
|
|
|
wxEndBusyCursor() ;
|
|
|
|
/* L'ancien fichier librairie est renomme en .bak */
|
|
OldLib = LibName;
|
|
ChangeFileNameExt ( OldLib, OLD_EXT);
|
|
|
|
if( wxFileExists(OldLib) ) wxRemoveFile(OldLib);
|
|
|
|
if ( ! wxRenameFile(LibName, OldLib ) )
|
|
DisplayError(this, wxT("Librairi.cpp: rename .bak err") );
|
|
|
|
/* Le nouveau fichier librairie est renomme */
|
|
if ( ! wxRenameFile(NewLib,LibName) )
|
|
{
|
|
DisplayError(this, wxT("Librairi.cpp: rename NewLib err") );
|
|
return(0);
|
|
}
|
|
|
|
CreateDocLibrary(OldLib);
|
|
|
|
if ( DisplayDialog )
|
|
{
|
|
msg = _("Component ") ; msg += Name_Cmp;
|
|
msg += added ? _(" added in ") : _(" replaced in ");
|
|
msg += LibName;
|
|
Affiche_Message(msg);
|
|
}
|
|
|
|
return(1);
|
|
}
|
|
|
|
|
|
/************************************************************************************/
|
|
MODULE * WinEDA_BasePcbFrame::Create_1_Module(wxDC * DC, const wxString & module_name)
|
|
/************************************************************************************/
|
|
|
|
/* Creation d'un module : On place d'office les 2ers textes :
|
|
1er = type REF: nom du module
|
|
2eme = type VALEUR: "VAL**"
|
|
Le module est insere en debut de liste des modules
|
|
*/
|
|
|
|
{
|
|
MODULE* Module ;
|
|
wxString Line;
|
|
wxPoint newpos;
|
|
|
|
/* Demande du nom du nouveau module */
|
|
if ( module_name.IsEmpty() )
|
|
{
|
|
if ( Get_Message( _("Module Reference:"), Line, this ) != 0 ) return NULL;
|
|
}
|
|
|
|
else Line = module_name;
|
|
Line.Trim(TRUE);
|
|
Line.Trim(FALSE);
|
|
|
|
Module = new MODULE(m_Pcb);
|
|
|
|
Module->Pnext = m_Pcb->m_Modules;
|
|
Module->Pback = m_Pcb;
|
|
if( m_Pcb->m_Modules )
|
|
{
|
|
m_Pcb->m_Modules->Pback = Module;
|
|
}
|
|
m_Pcb->m_Modules = Module;
|
|
|
|
/* Creation du module : On place d'office les 2 textes ref et val :
|
|
1er = type REF: nom du module
|
|
2eme = type VALEUR: "VAL**" */
|
|
|
|
/* Mise a jour des caract du nouveau module */
|
|
newpos = m_CurrentScreen->m_Curseur;
|
|
Module->SetPosition(newpos);
|
|
Module->m_LastEdit_Time = time(NULL);
|
|
|
|
/* Mise a jour du nom de Librairie (reference libr) */
|
|
Module->m_LibRef = Line;
|
|
|
|
/* Mise a jour de la reference: */
|
|
Module->m_Reference->m_Text = Line;
|
|
Module->m_Reference->SetWidth(ModuleTextWidth);
|
|
Module->m_Reference->m_Size = ModuleTextSize;
|
|
|
|
/* mise a jour de la valeurs */
|
|
Module->m_Value->m_Text = wxT("VAL**");
|
|
Module->m_Value->SetWidth(ModuleTextWidth);
|
|
Module->m_Value->m_Size = ModuleTextSize;
|
|
|
|
Module->Display_Infos(this);
|
|
return Module;
|
|
}
|
|
|
|
|
|
/*******************************************************/
|
|
void WinEDA_ModuleEditFrame::Select_Active_Library()
|
|
/*******************************************************/
|
|
{
|
|
if ( g_LibName_List.GetCount() == 0 ) return;
|
|
|
|
WinEDAListBox * LibListBox = new WinEDAListBox(this, _("Active Lib:"),
|
|
NULL, m_CurrentLib, NULL, wxColour(200, 200, 255) );
|
|
|
|
LibListBox->InsertItems(g_LibName_List);
|
|
|
|
int ii = LibListBox->ShowModal();
|
|
if ( ii >= 0 ) m_CurrentLib = LibListBox->GetTextSelection();
|
|
|
|
LibListBox->Destroy();
|
|
|
|
SetTitle( _("Module Editor (lib: ") + m_CurrentLib + wxT(")") );
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
|
|
/**********************************************************************/
|
|
int WinEDA_ModuleEditFrame::Create_Librairie(const wxString & LibName)
|
|
/**********************************************************************/
|
|
{
|
|
FILE * lib_module;
|
|
wxString msg;
|
|
|
|
if ( wxFileExists(LibName) )
|
|
{
|
|
msg = _("Library exists ") + LibName;
|
|
DisplayError(this, msg);
|
|
return(0);
|
|
}
|
|
|
|
if ((lib_module = wxFopen(LibName, wxT("wt") )) == NULL )
|
|
{
|
|
msg = _("Unable to create ") + LibName;
|
|
DisplayError(this, msg);
|
|
return(-1);
|
|
}
|
|
|
|
/* Ecriture de l'entete de la nouvelle librairie */
|
|
if( fprintf(lib_module,ENTETE_LIBRAIRIE) == 0)
|
|
{
|
|
msg = _("Create error ") + LibName;
|
|
DisplayError(this, msg);
|
|
fclose(lib_module) ; return(-1);
|
|
}
|
|
|
|
fprintf(lib_module," %s\n", DateAndTime(cbuf));
|
|
fputs("$INDEX\n",lib_module);
|
|
fputs("$EndINDEX\n",lib_module);
|
|
fclose(lib_module) ;
|
|
|
|
return(1);
|
|
}
|
|
|
|
|
|
|
|
/******************************************************/
|
|
static bool CreateDocLibrary(const wxString & LibName)
|
|
/*****************************************************/
|
|
/* Creation du fichier .dcm associe a la librairie LibName
|
|
(full file name)
|
|
*/
|
|
{
|
|
char Line[1024];
|
|
wxString Name, Doc, KeyWord;
|
|
wxString LibDocName;
|
|
FILE * LibMod, *LibDoc;
|
|
|
|
LibDocName = LibName;
|
|
ChangeFileNameExt(LibDocName, EXT_DOC);
|
|
|
|
LibMod = wxFopen( LibName, wxT("rt") );
|
|
if ( LibMod == NULL ) return FALSE;
|
|
|
|
/* lecture entete librairie*/
|
|
GetLine(LibMod, Line, NULL, sizeof(Line) -1);
|
|
if(strnicmp( Line,ENTETE_LIBRAIRIE, L_ENTETE_LIB) != 0)
|
|
{
|
|
fclose(LibMod);
|
|
return FALSE;
|
|
}
|
|
|
|
LibDoc = wxFopen( LibDocName, wxT("wt") );
|
|
if ( LibDoc == NULL )
|
|
{
|
|
fclose( LibMod );
|
|
return FALSE;
|
|
}
|
|
fprintf(LibDoc,ENTETE_LIBDOC);
|
|
fprintf(LibDoc," %s\n", DateAndTime(cbuf));
|
|
|
|
/* Lecture de la librairie */
|
|
Name = Doc = KeyWord = wxEmptyString;
|
|
while( GetLine(LibMod,Line, NULL, sizeof(Line) -1) )
|
|
{
|
|
if( Line[0] != '$' ) continue;
|
|
if( strnicmp( Line, "$MODULE",6) == 0 )
|
|
{
|
|
while( GetLine(LibMod,Line, NULL, sizeof(Line) -1) )
|
|
{
|
|
if( Line[0] == '$' )
|
|
{
|
|
if( Line[1] == 'E' ) break;
|
|
if( Line[1] == 'P' ) /* Pad Descr */
|
|
{
|
|
while( GetLine(LibMod,Line, NULL, sizeof(Line) -1) )
|
|
{
|
|
if( (Line[0] == '$') && (Line[1] == 'E') )
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if( Line[0] == 'L' ) /* LibName */
|
|
Name = CONV_FROM_UTF8(StrPurge(Line+3));
|
|
|
|
if( Line[0] == 'K' ) /* KeyWords */
|
|
KeyWord = CONV_FROM_UTF8(StrPurge(Line+3));
|
|
|
|
if( Line[0] == 'C' ) /* Doc */
|
|
Doc = CONV_FROM_UTF8(StrPurge(Line+3));
|
|
}
|
|
|
|
if( (Name != wxEmptyString) && ((Doc != wxEmptyString) || (KeyWord != wxEmptyString)) )/* Generation de la doc du composant */
|
|
{
|
|
fprintf(LibDoc,"#\n$MODULE %s\n",CONV_TO_UTF8(Name));
|
|
fprintf(LibDoc,"Li %s\n",CONV_TO_UTF8(Name));
|
|
if( Doc != wxEmptyString)
|
|
fprintf( LibDoc,"Cd %s\n", CONV_TO_UTF8(Doc));
|
|
|
|
if( KeyWord != wxEmptyString)
|
|
fprintf( LibDoc,"Kw %s\n", CONV_TO_UTF8(KeyWord));
|
|
|
|
fprintf( LibDoc,"$EndMODULE\n");
|
|
}
|
|
Name = Doc = KeyWord = wxEmptyString;
|
|
} /* Fin lecture desc 1 module */
|
|
|
|
if( strnicmp( Line,"$INDEX",6) == 0 )
|
|
{
|
|
while( GetLine(LibMod,Line, NULL, sizeof(Line)-1) )
|
|
{
|
|
if( strnicmp( Line,"$EndINDEX",9) == 0 ) break;
|
|
} /* Fin Lecture INDEX */
|
|
}
|
|
} /* Fin lecture 1 Librairie */
|
|
|
|
fclose( LibMod );
|
|
fprintf( LibDoc,"#\n$EndLIBDOC\n");
|
|
fclose( LibDoc );
|
|
return TRUE;
|
|
}
|
|
|
|
|