kicad/eeschema/selpart.cpp

143 lines
3.6 KiB
C++

/**************************/
/* EESchema - selpart.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 */
/***************************************************************/
LibraryStruct * SelectLibraryFromList(WinEDA_DrawFrame * frame)
/***************************************************************/
/* Routine pour selectionner une librairie a partir d'une liste
*/
{
int ii, NumOfLibs = NumOfLibraries();
LibraryStruct *Lib = NULL;
static wxString OldLibName;
WinEDAListBox * ListBox;
wxString LibName;
const wxChar ** ListNames;
if (NumOfLibs == 0)
{
DisplayError(frame, _("No libraries are loaded"));
return(NULL) ;
}
ListNames = GetLibNames();
ListBox = new WinEDAListBox(frame,
_("Select Lib"), ListNames, OldLibName, NULL,
wxColour(150,255,255));
ListBox->MoveMouseToOrigin();
ii = ListBox->ShowModal(); ListBox->Destroy();
if (ii >= 0) /* Recherche de la librairie */
{
Lib = FindLibrary(ListNames[ii]);
}
free (ListNames);
return(Lib);
}
/******************************************************************************************/
int DisplayComponentsNamesInLib( WinEDA_DrawFrame * frame,
LibraryStruct *Library, wxString & Buffer, wxString & OldName)
/******************************************************************************************/
/* Routine de selection d'un composant en librairie, par affichage de la
liste des composants de cette librairie
Si Library == NULL, selection de librairie demandee
sinon recherche uniquement dans library
Retourne
1 si composant selectionne
0 si commande annulee
*/
{
int ii;
wxString msg;
EDA_LibComponentStruct *LibEntry;
WinEDAListBox * ListBox;
const wxChar ** ListNames;
if(Library == NULL) Library = SelectLibraryFromList(frame);
if(Library == NULL) return(0);
PQCompFunc((PQCompFuncType) LibraryEntryCompare);
LibEntry = (EDA_LibComponentStruct *) PQFirst(&Library->m_Entries, FALSE);
ii = 0;
while( LibEntry )
{
ii++;
LibEntry = (EDA_LibComponentStruct *) PQNext(Library->m_Entries, LibEntry, NULL);
}
ListNames = (const wxChar**) MyZMalloc( (ii+1) * sizeof(wxChar*));
msg.Printf( _("Select component (%d items)"), ii );
ii = 0;
LibEntry = (EDA_LibComponentStruct *) PQFirst(&Library->m_Entries, FALSE);
while( LibEntry )
{
ListNames[ii++] = LibEntry->m_Name.m_Text.GetData();
LibEntry = (EDA_LibComponentStruct *) PQNext(Library->m_Entries, LibEntry, NULL);
}
// Qsort(ListNames,StrNumICmp);
ListBox = new WinEDAListBox(frame, msg,
ListNames, OldName, DisplayCmpDoc,
wxColour(255,255,200));
ListBox->MoveMouseToOrigin();
ii = ListBox->ShowModal(); ListBox->Destroy();
if ( ii >= 0 ) Buffer = ListNames[ii];
free (ListNames);
if ( ii < 0 ) return 0;
return 1;
}
/************************************************************/
int GetNameOfPartToLoad(WinEDA_DrawFrame * frame,
LibraryStruct *Library, wxString & BufName)
/************************************************************/
/*
Routine de selection du nom d'un composant en librairie pour chargement,
dans la librairie Library.
Si Library == NULL, il y aura demande de selection d'une librairie
Retourne
1 si composant selectionne
0 si commande annulee
place le nom du composant a charger, selectionne a partir d'une liste dans
BufName
*/
{
int ii;
static wxString OldCmpName;
ii = DisplayComponentsNamesInLib(frame, Library, BufName, OldCmpName);
if( ii <= 0 ) return 0;
OldCmpName = BufName;
return( 1 );
}