Footprint library table fixes.

* Pcbnew: catch exceptions when saving changes to footprint library table.
* Pcbnew: update footprint viewer library list if open when footprint library
  table changes.
* CvPcb: update library list when footprint library table changes.
* Minor coding policy fixes.
This commit is contained in:
Wayne Stambaugh 2013-11-11 20:05:23 -05:00
parent 76fed4f995
commit 5821d4bc48
5 changed files with 48 additions and 14 deletions

View File

@ -514,12 +514,24 @@ void CVPCB_MAINFRAME::ConfigCvpcb( wxCommandEvent& event )
#if defined( USE_FP_LIB_TABLE ) #if defined( USE_FP_LIB_TABLE )
void CVPCB_MAINFRAME::OnEditFootprintLibraryTable( wxCommandEvent& aEvent ) void CVPCB_MAINFRAME::OnEditFootprintLibraryTable( wxCommandEvent& aEvent )
{ {
bool tableChanged = false;
int r = InvokePcbLibTableEditor( this, m_globalFootprintTable, m_footprintLibTable ); int r = InvokePcbLibTableEditor( this, m_globalFootprintTable, m_footprintLibTable );
if( r & 1 ) if( r & 1 )
{ {
FILE_OUTPUTFORMATTER sf( FP_LIB_TABLE::GetGlobalTableFileName() ); try
m_globalFootprintTable->Format( &sf, 0 ); {
FILE_OUTPUTFORMATTER sf( FP_LIB_TABLE::GetGlobalTableFileName() );
m_globalFootprintTable->Format( &sf, 0 );
tableChanged = true;
}
catch( IO_ERROR& ioe )
{
wxString msg;
msg.Printf( _( "Error occurred saving the global footprint library "
"table:\n\n%s" ), ioe.errorText.GetData() );
wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
}
} }
if( r & 2 ) if( r & 2 )
@ -528,9 +540,23 @@ void CVPCB_MAINFRAME::OnEditFootprintLibraryTable( wxCommandEvent& aEvent )
fn.SetName( FP_LIB_TABLE::GetFileName() ); fn.SetName( FP_LIB_TABLE::GetFileName() );
fn.SetExt( wxEmptyString ); fn.SetExt( wxEmptyString );
FILE_OUTPUTFORMATTER sf( fn.GetFullPath() ); try
m_footprintLibTable->Format( &sf, 0 ); {
FILE_OUTPUTFORMATTER sf( fn.GetFullPath() );
m_footprintLibTable->Format( &sf, 0 );
tableChanged = true;
}
catch( IO_ERROR& ioe )
{
wxString msg;
msg.Printf( _( "Error occurred saving the global footprint library "
"table:\n\n%s" ), ioe.errorText.GetData() );
wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
}
} }
if( tableChanged )
BuildLIBRARY_LISTBOX();
} }
#endif #endif

View File

@ -97,7 +97,7 @@ protected:
TOOL_MANAGER* m_toolManager; TOOL_MANAGER* m_toolManager;
TOOL_DISPATCHER* m_toolDispatcher; TOOL_DISPATCHER* m_toolDispatcher;
void updateGridSelectBox(); void updateGridSelectBox();
void updateZoomSelectBox(); void updateZoomSelectBox();
virtual void unitsChangeRefresh(); virtual void unitsChangeRefresh();

View File

@ -111,7 +111,7 @@ protected:
DRC* m_drc; ///< the DRC controller, see drc.cpp DRC* m_drc; ///< the DRC controller, see drc.cpp
PARAM_CFG_ARRAY m_configSettings; ///< List of Pcbnew configuration settings. PARAM_CFG_ARRAY m_configSettings; ///< List of Pcbnew configuration settings.
wxString m_lastNetListRead; ///< Last net list read with relative path. wxString m_lastNetListRead; ///< Last net list read with relative path.
bool m_useCmpFileForFpNames; ///< is true, use the .cmp file from CvPcb, else use the netlist bool m_useCmpFileForFpNames; ///< is true, use the .cmp file from CvPcb, else use the netlist
@ -120,7 +120,7 @@ protected:
void setupTools(); void setupTools();
void destroyTools(); void destroyTools();
void onGenericCommand( wxCommandEvent& aEvent ); void onGenericCommand( wxCommandEvent& aEvent );
// we'll use lower case function names for private member functions. // we'll use lower case function names for private member functions.
void createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* aPopMenu ); void createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* aPopMenu );
void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu ); void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu );

View File

@ -95,10 +95,6 @@ public:
virtual EDA_COLOR_T GetGridColor( void ) const; virtual EDA_COLOR_T GetGridColor( void ) const;
private:
void OnSize( wxSizeEvent& event );
/** /**
* Function ReCreateLibraryList * Function ReCreateLibraryList
* *
@ -107,6 +103,10 @@ private:
*/ */
void ReCreateLibraryList(); void ReCreateLibraryList();
private:
void OnSize( wxSizeEvent& event );
void ReCreateFootprintList(); void ReCreateFootprintList();
void OnIterateFootprintList( wxCommandEvent& event ); void OnIterateFootprintList( wxCommandEvent& event );
void DisplayLibInfos(); void DisplayLibInfos();
@ -200,9 +200,9 @@ private:
* Virtual functions, not used here, but needed by PCB_BASE_FRAME * Virtual functions, not used here, but needed by PCB_BASE_FRAME
* (virtual pure functions ) * (virtual pure functions )
*/ */
void OnLeftDClick(wxDC*, const wxPoint&) {} void OnLeftDClick( wxDC*, const wxPoint& ) {}
void SaveCopyInUndoList(BOARD_ITEM*, UNDO_REDO_T, const wxPoint&) {} void SaveCopyInUndoList( BOARD_ITEM*, UNDO_REDO_T, const wxPoint& ) {}
void SaveCopyInUndoList(PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint&) {} void SaveCopyInUndoList( PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint &) {}
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()

View File

@ -87,6 +87,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
case ID_PCB_LIB_TABLE_EDIT: case ID_PCB_LIB_TABLE_EDIT:
{ {
bool tableChanged = false;
int r = InvokePcbLibTableEditor( this, m_globalFootprintTable, m_footprintLibTable ); int r = InvokePcbLibTableEditor( this, m_globalFootprintTable, m_footprintLibTable );
if( r & 1 ) if( r & 1 )
@ -95,6 +96,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
{ {
FILE_OUTPUTFORMATTER sf( FP_LIB_TABLE::GetGlobalTableFileName() ); FILE_OUTPUTFORMATTER sf( FP_LIB_TABLE::GetGlobalTableFileName() );
m_globalFootprintTable->Format( &sf, 0 ); m_globalFootprintTable->Format( &sf, 0 );
tableChanged = true;
} }
catch( IO_ERROR& ioe ) catch( IO_ERROR& ioe )
{ {
@ -114,6 +116,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
try try
{ {
m_footprintLibTable->Save( fn ); m_footprintLibTable->Save( fn );
tableChanged = true;
} }
catch( IO_ERROR& ioe ) catch( IO_ERROR& ioe )
{ {
@ -123,6 +126,11 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR ); wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
} }
} }
if( tableChanged && FOOTPRINT_VIEWER_FRAME::GetActiveFootprintViewer() != NULL )
{
FOOTPRINT_VIEWER_FRAME::GetActiveFootprintViewer()->ReCreateLibraryList();
}
} }
break; break;