144 lines
4.0 KiB
C++
144 lines
4.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 "confirm.h"
|
|
#include "eda_doc.h"
|
|
#include "kicad_string.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;
|
|
}
|