kicad/eeschema/database.cpp

132 lines
3.0 KiB
C++

/****************************/
/* EESchema - database.cpp */
/****************************/
/* Routine de selection d'un composant en librairie
*/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "protos.h"
/* Routines locales */
/* Variables locales */
/********************************************************************************/
bool DataBaseGetName(WinEDA_DrawFrame * frame,
wxString & Keys, wxString & BufName)
/********************************************************************************/
/*
Routine de selection du nom d'un composant en librairie pour chargement,
Keys pointe la liste des mots cles de filtrage
Si Keys = "", recherche des composants qui correspondent
au masque BufName( avec * et ? )
Retourne
TRUE si composant selectionne
FALSE si commande annulee
place le nom du composant a charger, selectionne a partir d'une liste dans
BufName
*/
{
int ii;
EDA_LibComponentStruct * LibEntry;
LibraryStruct * Lib;
WinEDAListBox * ListBox;
const wxChar ** ListNames;
BufName.MakeUpper();
Keys.MakeUpper();
/* Examen de la liste des librairies pour comptage */
for (Lib = g_LibraryList, ii = 0; Lib != NULL; Lib = Lib->m_Pnext)
{
LibEntry = (EDA_LibComponentStruct *) PQFirst(&Lib->m_Entries, FALSE);
while( LibEntry )
{
if ( ! Keys.IsEmpty() )
{
if( KeyWordOk(Keys, LibEntry->m_KeyWord) ) ii++;
}
else
{
if( WildCompareString( BufName, LibEntry->m_Name.m_Text, FALSE ) ) ii++;
}
LibEntry = (EDA_LibComponentStruct *) PQNext(Lib->m_Entries, LibEntry, NULL);
}
}
if ( ii == 0 )
{
DisplayError(frame, _("No Component found") );
return 0;
}
ListNames = (const wxChar**)MyZMalloc( (ii+1) * sizeof(const wxChar*));
for (Lib = g_LibraryList, ii = 0; Lib != NULL; Lib = Lib->m_Pnext)
{
/* Examen de la liste des elements */
LibEntry = (EDA_LibComponentStruct *) PQFirst(&Lib->m_Entries, FALSE);
while( LibEntry )
{
if ( ! Keys.IsEmpty())
{
if( KeyWordOk(Keys, LibEntry->m_KeyWord) )
{
ListNames[ii] = LibEntry->m_Name.m_Text.GetData(); ii++;
}
}
else if( WildCompareString( BufName, LibEntry->m_Name.m_Text, FALSE ) )
{
ListNames[ii] = LibEntry->m_Name.m_Text; ii++;
}
LibEntry = (EDA_LibComponentStruct *) PQNext(Lib->m_Entries, LibEntry, NULL);
}
}
ListBox = new WinEDAListBox(frame, _("Selection"), ListNames,
wxEmptyString, DisplayCmpDoc, wxColour(200,200,255) );
ListBox->MoveMouseToOrigin();
/* Affichage de la liste selectionnee */
if( ii )
{
ii = ListBox->ShowModal(); ListBox->Destroy();
if ( ii < 0 ) ii = 0;
else
{
BufName = ListNames[ii];
ii = 1;
}
}
free (ListNames);
return (ii) ;
}
/**********************************/
void DisplayCmpDoc(wxString & Name)
/**********************************/
{
LibCmpEntry * CmpEntry;
CmpEntry = FindLibPart(Name.GetData(), wxEmptyString, FIND_ALIAS);
if ( CmpEntry == NULL ) return;
Name = wxT("Descr: ") + CmpEntry->m_Doc;
Name += wxT("\nKeyW: ") + CmpEntry->m_KeyWord;
}