Commit e6681f17 authored by Wayne Stambaugh's avatar Wayne Stambaugh

Fix PCBNew segfault when adding a module.

parent b9b341dc
...@@ -59,7 +59,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_FRAME ...@@ -59,7 +59,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_FRAME
int m_saveInterval; ///< Time interval in seconds for automatic saving. int m_saveInterval; ///< Time interval in seconds for automatic saving.
int m_lastSaveTime; ///< Last save time. int m_lastSaveTime; ///< Last save time.
wxArrayString m_libraryNames; ///< List of footprint library names to load.
protected: protected:
...@@ -235,8 +234,6 @@ public: ...@@ -235,8 +234,6 @@ public:
void SetAutoSaveTimeInterval( int aInterval ) { m_saveInterval = aInterval; } void SetAutoSaveTimeInterval( int aInterval ) { m_saveInterval = aInterval; }
wxArrayString& GetFootprintLibraryNames() { return m_libraryNames; }
// Configurations: // Configurations:
void InstallConfigFrame(); void InstallConfigFrame();
void Process_Config( wxCommandEvent& event ); void Process_Config( wxCommandEvent& event );
......
...@@ -55,7 +55,7 @@ void DIALOG_PCBNEW_CONFIG_LIBS::Init() ...@@ -55,7 +55,7 @@ void DIALOG_PCBNEW_CONFIG_LIBS::Init()
m_LibPathChanged = false; m_LibPathChanged = false;
m_UserLibDirBufferImg = g_UserLibDirBuffer; // Save the original lib path m_UserLibDirBufferImg = g_UserLibDirBuffer; // Save the original lib path
m_ListLibr->InsertItems( GetParent()->GetFootprintLibraryNames(), 0 ); m_ListLibr->InsertItems( g_LibraryNames, 0 );
// Display current modules doc file: // Display current modules doc file:
m_Config->Read( wxT( "module_doc_file" ), g_DocModulesFileName ); m_Config->Read( wxT( "module_doc_file" ), g_DocModulesFileName );
...@@ -122,10 +122,10 @@ void DIALOG_PCBNEW_CONFIG_LIBS::OnOkClick( wxCommandEvent& event ) ...@@ -122,10 +122,10 @@ void DIALOG_PCBNEW_CONFIG_LIBS::OnOkClick( wxCommandEvent& event )
if( m_LibListChanged || m_LibPathChanged ) if( m_LibListChanged || m_LibPathChanged )
{ {
// Recreate lib list // Recreate lib list
GetParent()->GetFootprintLibraryNames().Clear(); g_LibraryNames.Clear();
for ( unsigned ii = 0; ii < m_ListLibr->GetCount(); ii ++ ) for ( unsigned ii = 0; ii < m_ListLibr->GetCount(); ii ++ )
GetParent()->GetFootprintLibraryNames().Add( m_ListLibr->GetString(ii) ); g_LibraryNames.Add( m_ListLibr->GetString(ii) );
} }
GetParent()->SaveProjectSettings(); GetParent()->SaveProjectSettings();
......
...@@ -705,13 +705,11 @@ MODULE* PCB_BASE_FRAME::Create_1_Module( const wxString& aModuleName ) ...@@ -705,13 +705,11 @@ MODULE* PCB_BASE_FRAME::Create_1_Module( const wxString& aModuleName )
void FOOTPRINT_EDIT_FRAME::Select_Active_Library() void FOOTPRINT_EDIT_FRAME::Select_Active_Library()
{ {
wxString msg; wxString msg;
PCB_EDIT_FRAME* parent = (PCB_EDIT_FRAME*) GetParent();
if( parent->GetFootprintLibraryNames().GetCount() == 0 || parent == NULL ) if( g_LibraryNames.GetCount() == 0 )
return; return;
EDA_LIST_DIALOG dlg( this, _( "Select Active Library:" ), EDA_LIST_DIALOG dlg( this, _( "Select Active Library:" ), g_LibraryNames, m_CurrentLib );
parent->GetFootprintLibraryNames(), m_CurrentLib );
if( dlg.ShowModal() != wxID_OK ) if( dlg.ShowModal() != wxID_OK )
return; return;
......
...@@ -195,13 +195,12 @@ MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& aLibraryFullFilename, ...@@ -195,13 +195,12 @@ MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& aLibraryFullFilename,
bool one_lib = aLibraryFullFilename.IsEmpty() ? false : true; bool one_lib = aLibraryFullFilename.IsEmpty() ? false : true;
PCB_EDIT_FRAME* parent = (PCB_EDIT_FRAME*) GetParent(); PCB_EDIT_FRAME* parent = (PCB_EDIT_FRAME*) GetParent();
for( ii = 0; ii < parent->GetFootprintLibraryNames().GetCount(); ii++ ) for( ii = 0; ii < g_LibraryNames.GetCount(); ii++ )
{ {
if( one_lib ) if( one_lib )
fn = aLibraryFullFilename; fn = aLibraryFullFilename;
else else
fn = wxFileName( wxEmptyString, parent->GetFootprintLibraryNames()[ii], fn = wxFileName( wxEmptyString, g_LibraryNames[ii], ModuleFileExtension );
ModuleFileExtension );
tmp = wxGetApp().FindLibraryPath( fn ); tmp = wxGetApp().FindLibraryPath( fn );
...@@ -252,6 +251,7 @@ MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& aLibraryFullFilename, ...@@ -252,6 +251,7 @@ MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& aLibraryFullFilename,
if( found ) if( found )
{ {
fileReader.Rewind(); fileReader.Rewind();
while( reader.ReadLine() ) while( reader.ReadLine() )
{ {
char * line = reader.Line(); char * line = reader.Line();
...@@ -302,10 +302,9 @@ wxString PCB_BASE_FRAME::Select_1_Module_From_List( EDA_DRAW_FRAME* aWindow, ...@@ -302,10 +302,9 @@ wxString PCB_BASE_FRAME::Select_1_Module_From_List( EDA_DRAW_FRAME* aWindow,
wxString CmpName; wxString CmpName;
wxString msg; wxString msg;
wxArrayString libnames_list; wxArrayString libnames_list;
PCB_EDIT_FRAME* parent = (PCB_EDIT_FRAME*) GetParent();
if( aLibraryFullFilename.IsEmpty() ) if( aLibraryFullFilename.IsEmpty() )
libnames_list = parent->GetFootprintLibraryNames(); libnames_list = g_LibraryNames;
else else
libnames_list.Add( aLibraryFullFilename ); libnames_list.Add( aLibraryFullFilename );
...@@ -351,7 +350,7 @@ wxString PCB_BASE_FRAME::Select_1_Module_From_List( EDA_DRAW_FRAME* aWindow, ...@@ -351,7 +350,7 @@ wxString PCB_BASE_FRAME::Select_1_Module_From_List( EDA_DRAW_FRAME* aWindow,
} }
else else
{ {
DisplayError( aWindow, _("No footprint found") ); DisplayError( aWindow, _( "No footprint found" ) );
CmpName.Empty(); CmpName.Empty();
} }
......
...@@ -61,6 +61,9 @@ const wxString g_FootprintLibFileWildcard( wxT( "Kicad footprint library file (* ...@@ -61,6 +61,9 @@ const wxString g_FootprintLibFileWildcard( wxT( "Kicad footprint library file (*
*/ */
wxString g_DocModulesFileName = wxT( "footprints_doc/footprints.pdf" ); wxString g_DocModulesFileName = wxT( "footprints_doc/footprints.pdf" );
wxArrayString g_LibraryNames;
IMPLEMENT_APP( EDA_APP ) IMPLEMENT_APP( EDA_APP )
......
...@@ -74,6 +74,7 @@ extern int g_MagneticTrackOption; ...@@ -74,6 +74,7 @@ extern int g_MagneticTrackOption;
extern wxPoint g_Offset_Module; /* Offset trace when moving footprint. */ extern wxPoint g_Offset_Module; /* Offset trace when moving footprint. */
extern wxArrayString g_LibraryNames; ///< List of footprint library file names to load.
enum MagneticPadOptionValues { enum MagneticPadOptionValues {
no_effect, no_effect,
......
...@@ -145,7 +145,7 @@ bool PCB_EDIT_FRAME::LoadProjectSettings( const wxString& aProjectFileName ) ...@@ -145,7 +145,7 @@ bool PCB_EDIT_FRAME::LoadProjectSettings( const wxString& aProjectFileName )
wxGetApp().RemoveLibraryPath( g_UserLibDirBuffer ); wxGetApp().RemoveLibraryPath( g_UserLibDirBuffer );
/* Initialize default values. */ /* Initialize default values. */
m_libraryNames.Clear(); g_LibraryNames.Clear();
wxGetApp().ReadProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters(), false ); wxGetApp().ReadProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters(), false );
...@@ -190,7 +190,7 @@ PARAM_CFG_ARRAY& PCB_EDIT_FRAME::GetProjectFileParameters() ...@@ -190,7 +190,7 @@ PARAM_CFG_ARRAY& PCB_EDIT_FRAME::GetProjectFileParameters()
m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ),&g_UserLibDirBuffer, m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ),&g_UserLibDirBuffer,
GROUPLIB ) ); GROUPLIB ) );
m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ), m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ),
&m_libraryNames, &g_LibraryNames,
GROUPLIB ) ); GROUPLIB ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "PadDrlX" ), &g_Pad_Master.m_Drill.x, m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "PadDrlX" ), &g_Pad_Master.m_Drill.x,
320, 0, 0x7FFF ) ); 320, 0, 0x7FFF ) );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment