Make sure Cvpcb doesn't use its own FP_LIB_TABLE.

It's just a vestige of when Cvpcb was a separate app.

Fixes: lp:1768251
* https://bugs.launchpad.net/kicad/+bug/1768251
This commit is contained in:
Jeff Young 2018-05-01 21:46:05 +01:00
parent 26197c333e
commit 75e91f4cfd
5 changed files with 38 additions and 17 deletions

View File

@ -406,13 +406,13 @@ FP_LIB_TABLE* PROJECT::PcbFootprintLibs( KIWAY& aKiway )
if( !tbl )
{
// Stack the project specific FP_LIB_TABLE overlay on top of the global table.
// Build a new project specific FP_LIB_TABLE with the global table as a fallback.
// ~FP_LIB_TABLE() will not touch the fallback table, so multiple projects may
// stack this way, all using the same global fallback table.
KIFACE* kiface = aKiway.KiFACE( KIWAY::FACE_PCB );
if( kiface )
tbl = (FP_LIB_TABLE*) kiface->IfaceOrAddress( KIFACE_G_FOOTPRINT_TABLE );
tbl = (FP_LIB_TABLE*) kiface->IfaceOrAddress( KIFACE_NEW_FOOTPRINT_TABLE );
wxASSERT( tbl );
SetElem( ELEM_FPTBL, tbl );

View File

@ -32,6 +32,7 @@
#include <kiway_express.h>
#include <pgm_base.h>
#include <kiface_i.h>
#include <kiface_ids.h>
#include <macros.h>
#include <confirm.h>
#include <eda_dde.h>
@ -48,7 +49,6 @@
#include <display_footprints_frame.h>
#include <cvpcb_id.h>
wxSize const FRAME_MIN_SIZE_DU( 350, 250 );
wxSize const FRAME_DEFAULT_SIZE_DU( 450, 300 );
@ -438,8 +438,16 @@ bool CVPCB_MAINFRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, i
void CVPCB_MAINFRAME::OnEditFootprintLibraryTable( wxCommandEvent& aEvent )
{
bool tableChanged = false;
int r = InvokePcbLibTableEditor( this, &GFootprintTable, Prj().PcbFootprintLibs( Kiway() ) );
FP_LIB_TABLE* globalTable;
bool tableChanged = false;
KIFACE* kiface = Kiway().KiFACE( KIWAY::FACE_PCB );
if( kiface )
globalTable = (FP_LIB_TABLE*) kiface->IfaceOrAddress( KIFACE_GLOBAL_FOOTPRINT_TABLE );
else
globalTable = &GFootprintTable; // Shouldn't happen now that Cvpcb is integrated
int r = InvokePcbLibTableEditor( this, globalTable, Prj().PcbFootprintLibs( Kiway() ) );
if( r & 1 )
{
@ -447,7 +455,7 @@ void CVPCB_MAINFRAME::OnEditFootprintLibraryTable( wxCommandEvent& aEvent )
try
{
GFootprintTable.Save( fileName );
globalTable->Save( fileName );
tableChanged = true;
}
catch( const IO_ERROR& ioe )

View File

@ -61,10 +61,6 @@ void CVPCB_MAINFRAME::ReCreateMenuBar()
// Preferences Menu :
wxMenu* preferencesMenu = new wxMenu;
AddMenuItem( preferencesMenu, ID_CVPCB_LIB_TABLE_EDIT,
_( "Manage Footprint &Libraries..." ), _( "Manage footprint libraries" ),
KiBitmap( library_table_xpm ) );
// Path configuration edit dialog.
AddMenuItem( preferencesMenu,
ID_PREFERENCES_CONFIGURE_PATHS,
@ -72,6 +68,10 @@ void CVPCB_MAINFRAME::ReCreateMenuBar()
_( "Edit path configuration environment variables" ),
KiBitmap( editor_xpm ) );
AddMenuItem( preferencesMenu, ID_CVPCB_LIB_TABLE_EDIT,
_( "Manage Footprint &Libraries..." ), _( "Manage footprint libraries" ),
KiBitmap( library_table_xpm ) );
preferencesMenu->AppendSeparator();
AddMenuItem( preferencesMenu, ID_CVPCB_EQUFILES_LIST_EDIT,
_( "Footprint &Association Files..." ),

View File

@ -32,18 +32,25 @@ enum KIFACE_ADDR_ID : int
INVALID,
/**
* Return a new instance of FOOTPRINT_LIST from pcbnew.
* Return a pointer to the global instance of FOOTPRINT_LIST from pcbnew.
* Type is FOOTPRINT_LIST*
* Caller takes ownership
* Caller does NOT own.
*/
KIFACE_NEW_FOOTPRINT_LIST,
KIFACE_FOOTPRINT_LIST,
/**
* Return a new FP_LIB_TABLE copying the global table.
* Return a new FP_LIB_TABLE with the global table installed as a fallback.
* Type is FP_LIB_TABLE*
* Caller takes ownership
*/
KIFACE_G_FOOTPRINT_TABLE, ///<
KIFACE_NEW_FOOTPRINT_TABLE,
/**
* Return the global FP_LIB_TABLE.
* Type is FP_LIB_TABLE*
* Caller does NOT own.
*/
KIFACE_GLOBAL_FOOTPRINT_TABLE
};
#endif // KIFACE_IDS

View File

@ -159,12 +159,18 @@ static struct IFACE : public KIFACE_I
{
switch( aDataId )
{
case KIFACE_NEW_FOOTPRINT_LIST:
// Return a pointer to the global instance of the footprint list.
case KIFACE_FOOTPRINT_LIST:
return (void*) &GFootprintList;
case KIFACE_G_FOOTPRINT_TABLE:
// Return a new FP_LIB_TABLE with the global table installed as a fallback.
case KIFACE_NEW_FOOTPRINT_TABLE:
return (void*) new FP_LIB_TABLE( &GFootprintTable );
// Return a pointer to the global instance of the global footprint table.
case KIFACE_GLOBAL_FOOTPRINT_TABLE:
return (void*) &GFootprintTable;
default:
return nullptr;
}