|  |  | @ -1,9 +1,9 @@ | 
			
		
	
		
			
				
					|  |  |  | 	/**************************/ | 
			
		
	
		
			
				
					|  |  |  | 	/* EESchema - selpart.cpp */ | 
			
		
	
		
			
				
					|  |  |  | 	/**************************/ | 
			
		
	
		
			
				
					|  |  |  | /**************************/ | 
			
		
	
		
			
				
					|  |  |  | /* EESchema - selpart.cpp */ | 
			
		
	
		
			
				
					|  |  |  | /**************************/ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /* Routine de selection d'un composant en librairie
 | 
			
		
	
		
			
				
					|  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | #include "fctsys.h"
 | 
			
		
	
		
			
				
					|  |  |  | #include "gr_basic.h"
 | 
			
		
	
	
		
			
				
					|  |  | @ -22,139 +22,127 @@ | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /***************************************************************/ | 
			
		
	
		
			
				
					|  |  |  | LibraryStruct * SelectLibraryFromList(WinEDA_DrawFrame * frame) | 
			
		
	
		
			
				
					|  |  |  | LibraryStruct* SelectLibraryFromList( WinEDA_DrawFrame* frame ) | 
			
		
	
		
			
				
					|  |  |  | /***************************************************************/ | 
			
		
	
		
			
				
					|  |  |  | /** Function SelectLibraryFromList
 | 
			
		
	
		
			
				
					|  |  |  |  * Displays a list of current loaded libraries, and allows the user to select a library | 
			
		
	
		
			
				
					|  |  |  |  * This list is sorted, with the library cache always at end of the list | 
			
		
	
		
			
				
					|  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  | { | 
			
		
	
		
			
				
					|  |  |  | int ii, NumOfLibs = NumOfLibraries(); | 
			
		
	
		
			
				
					|  |  |  | LibraryStruct *Lib = NULL; | 
			
		
	
		
			
				
					|  |  |  | static wxString OldLibName; | 
			
		
	
		
			
				
					|  |  |  | wxString LibName; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	if (NumOfLibs == 0) | 
			
		
	
		
			
				
					|  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  | 		DisplayError(frame, _("No libraries are loaded")); | 
			
		
	
		
			
				
					|  |  |  | 		return(NULL) ; | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	WinEDAListBox ListBox(frame, _("Select Lib"), | 
			
		
	
		
			
				
					|  |  |  |                                     NULL,  OldLibName, NULL, | 
			
		
	
		
			
				
					|  |  |  | 	                            wxColour(255,255,255)); // Library browser background color
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     wxArrayString libNamesList; | 
			
		
	
		
			
				
					|  |  |  |     LibraryStruct * libcache = NULL; | 
			
		
	
		
			
				
					|  |  |  |     for( LibraryStruct * Lib = g_LibraryList; Lib != NULL; Lib = Lib->m_Pnext ) | 
			
		
	
		
			
				
					|  |  |  |     int             ii, NumOfLibs = NumOfLibraries(); | 
			
		
	
		
			
				
					|  |  |  |     LibraryStruct*  Lib = NULL; | 
			
		
	
		
			
				
					|  |  |  |     static wxString OldLibName; | 
			
		
	
		
			
				
					|  |  |  |     wxString        LibName; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     if( NumOfLibs == 0 ) | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |         DisplayError( frame, _( "No libraries are loaded" ) ); | 
			
		
	
		
			
				
					|  |  |  |         return NULL; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     WinEDAListBox ListBox( frame, _( "Select Lib" ), | 
			
		
	
		
			
				
					|  |  |  |                           NULL, OldLibName, NULL, | 
			
		
	
		
			
				
					|  |  |  |                           wxColour( 255, 255, 255 ) );  // Library browser background color
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     wxArrayString  libNamesList; | 
			
		
	
		
			
				
					|  |  |  |     LibraryStruct* libcache = NULL; | 
			
		
	
		
			
				
					|  |  |  |     for( LibraryStruct* Lib = g_LibraryList; Lib != NULL; Lib = Lib->m_Pnext ) | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |         if ( Lib->m_IsLibCache ) | 
			
		
	
		
			
				
					|  |  |  |         if( Lib->m_IsLibCache ) | 
			
		
	
		
			
				
					|  |  |  |             libcache = Lib; | 
			
		
	
		
			
				
					|  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |             libNamesList.Add( Lib->m_Name ); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |      | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     libNamesList.Sort(); | 
			
		
	
		
			
				
					|  |  |  |      | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     // Add lib cache
 | 
			
		
	
		
			
				
					|  |  |  |     if ( libcache ) | 
			
		
	
		
			
				
					|  |  |  |     if( libcache ) | 
			
		
	
		
			
				
					|  |  |  |         libNamesList.Add( libcache->m_Name ); | 
			
		
	
		
			
				
					|  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |     ListBox.InsertItems(libNamesList); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     ListBox.InsertItems( libNamesList ); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	ListBox.MoveMouseToOrigin(); | 
			
		
	
		
			
				
					|  |  |  |     ListBox.MoveMouseToOrigin(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	ii = ListBox.ShowModal(); | 
			
		
	
		
			
				
					|  |  |  |     ii = ListBox.ShowModal(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	if (ii >= 0)	/* Recherche de la librairie */ | 
			
		
	
		
			
				
					|  |  |  |     if( ii >= 0 )    /* Recherche de la librairie */ | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  | 		Lib = FindLibrary(libNamesList[ii]); | 
			
		
	
		
			
				
					|  |  |  |         Lib = FindLibrary( libNamesList[ii] ); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	return(Lib); | 
			
		
	
		
			
				
					|  |  |  |     return Lib; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /******************************************************************************************/ | 
			
		
	
		
			
				
					|  |  |  | int DisplayComponentsNamesInLib( WinEDA_DrawFrame * frame, | 
			
		
	
		
			
				
					|  |  |  | 				LibraryStruct *Library, wxString & Buffer, wxString & OldName) | 
			
		
	
		
			
				
					|  |  |  | 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); | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |     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,255)); // Component background listbox color
 | 
			
		
	
		
			
				
					|  |  |  | 	ListBox->MoveMouseToOrigin(); | 
			
		
	
		
			
				
					|  |  |  | 	 | 
			
		
	
		
			
				
					|  |  |  | 	ii = ListBox->ShowModal(); ListBox->Destroy(); | 
			
		
	
		
			
				
					|  |  |  | 	if ( ii >= 0 ) Buffer = ListNames[ii]; | 
			
		
	
		
			
				
					|  |  |  |     ListBox = new WinEDAListBox( frame, msg, | 
			
		
	
		
			
				
					|  |  |  |                                 ListNames, OldName, DisplayCmpDoc, | 
			
		
	
		
			
				
					|  |  |  |                                 wxColour( 255, 255, 255 ) ); // Component background listbox color
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     ListBox->MoveMouseToOrigin(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     ii = ListBox->ShowModal(); ListBox->Destroy(); | 
			
		
	
		
			
				
					|  |  |  |     if( ii >= 0 ) | 
			
		
	
		
			
				
					|  |  |  |         Buffer = ListNames[ii]; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	free (ListNames); | 
			
		
	
		
			
				
					|  |  |  |     free( ListNames ); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	if ( ii < 0 ) return 0; | 
			
		
	
		
			
				
					|  |  |  | 	return 1; | 
			
		
	
		
			
				
					|  |  |  |     if( ii < 0 ) | 
			
		
	
		
			
				
					|  |  |  |         return 0; | 
			
		
	
		
			
				
					|  |  |  |     return 1; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /************************************************************/ | 
			
		
	
		
			
				
					|  |  |  | int GetNameOfPartToLoad(WinEDA_DrawFrame * frame, | 
			
		
	
		
			
				
					|  |  |  | 			LibraryStruct *Library, wxString & BufName) | 
			
		
	
		
			
				
					|  |  |  | 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; | 
			
		
	
		
			
				
					|  |  |  |     int             ii; | 
			
		
	
		
			
				
					|  |  |  |     static wxString OldCmpName; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     ii = DisplayComponentsNamesInLib( frame, Library, BufName, OldCmpName ); | 
			
		
	
		
			
				
					|  |  |  |     if( ii <= 0 ) | 
			
		
	
		
			
				
					|  |  |  |         return 0; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	ii = DisplayComponentsNamesInLib(frame, Library, BufName, OldCmpName); | 
			
		
	
		
			
				
					|  |  |  | 	if( ii <= 0 ) return 0; | 
			
		
	
		
			
				
					|  |  |  | 	OldCmpName = BufName; | 
			
		
	
		
			
				
					|  |  |  | 	return( 1 ); | 
			
		
	
		
			
				
					|  |  |  |     OldCmpName = BufName; | 
			
		
	
		
			
				
					|  |  |  |     return 1; | 
			
		
	
		
			
				
					|  |  |  | } |