Fix PCBNew segfault when adding a module.

This commit is contained in:
Wayne Stambaugh 2011-09-27 16:43:18 -04:00
parent b9b341dce2
commit e6681f17e4
7 changed files with 16 additions and 18 deletions

View File

@ -59,7 +59,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_FRAME
int m_saveInterval; ///< Time interval in seconds for automatic saving.
int m_lastSaveTime; ///< Last save time.
wxArrayString m_libraryNames; ///< List of footprint library names to load.
protected:
@ -235,8 +234,6 @@ public:
void SetAutoSaveTimeInterval( int aInterval ) { m_saveInterval = aInterval; }
wxArrayString& GetFootprintLibraryNames() { return m_libraryNames; }
// Configurations:
void InstallConfigFrame();
void Process_Config( wxCommandEvent& event );

View File

@ -55,7 +55,7 @@ void DIALOG_PCBNEW_CONFIG_LIBS::Init()
m_LibPathChanged = false;
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:
m_Config->Read( wxT( "module_doc_file" ), g_DocModulesFileName );
@ -122,10 +122,10 @@ void DIALOG_PCBNEW_CONFIG_LIBS::OnOkClick( wxCommandEvent& event )
if( m_LibListChanged || m_LibPathChanged )
{
// Recreate lib list
GetParent()->GetFootprintLibraryNames().Clear();
g_LibraryNames.Clear();
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();

View File

@ -705,13 +705,11 @@ MODULE* PCB_BASE_FRAME::Create_1_Module( const wxString& aModuleName )
void FOOTPRINT_EDIT_FRAME::Select_Active_Library()
{
wxString msg;
PCB_EDIT_FRAME* parent = (PCB_EDIT_FRAME*) GetParent();
if( parent->GetFootprintLibraryNames().GetCount() == 0 || parent == NULL )
if( g_LibraryNames.GetCount() == 0 )
return;
EDA_LIST_DIALOG dlg( this, _( "Select Active Library:" ),
parent->GetFootprintLibraryNames(), m_CurrentLib );
EDA_LIST_DIALOG dlg( this, _( "Select Active Library:" ), g_LibraryNames, m_CurrentLib );
if( dlg.ShowModal() != wxID_OK )
return;

View File

@ -195,13 +195,12 @@ MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& aLibraryFullFilename,
bool one_lib = aLibraryFullFilename.IsEmpty() ? false : true;
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 )
fn = aLibraryFullFilename;
else
fn = wxFileName( wxEmptyString, parent->GetFootprintLibraryNames()[ii],
ModuleFileExtension );
fn = wxFileName( wxEmptyString, g_LibraryNames[ii], ModuleFileExtension );
tmp = wxGetApp().FindLibraryPath( fn );
@ -252,6 +251,7 @@ MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& aLibraryFullFilename,
if( found )
{
fileReader.Rewind();
while( reader.ReadLine() )
{
char * line = reader.Line();
@ -302,10 +302,9 @@ wxString PCB_BASE_FRAME::Select_1_Module_From_List( EDA_DRAW_FRAME* aWindow,
wxString CmpName;
wxString msg;
wxArrayString libnames_list;
PCB_EDIT_FRAME* parent = (PCB_EDIT_FRAME*) GetParent();
if( aLibraryFullFilename.IsEmpty() )
libnames_list = parent->GetFootprintLibraryNames();
libnames_list = g_LibraryNames;
else
libnames_list.Add( aLibraryFullFilename );

View File

@ -61,6 +61,9 @@ const wxString g_FootprintLibFileWildcard( wxT( "Kicad footprint library file (*
*/
wxString g_DocModulesFileName = wxT( "footprints_doc/footprints.pdf" );
wxArrayString g_LibraryNames;
IMPLEMENT_APP( EDA_APP )

View File

@ -74,6 +74,7 @@ extern int g_MagneticTrackOption;
extern wxPoint g_Offset_Module; /* Offset trace when moving footprint. */
extern wxArrayString g_LibraryNames; ///< List of footprint library file names to load.
enum MagneticPadOptionValues {
no_effect,

View File

@ -145,7 +145,7 @@ bool PCB_EDIT_FRAME::LoadProjectSettings( const wxString& aProjectFileName )
wxGetApp().RemoveLibraryPath( g_UserLibDirBuffer );
/* Initialize default values. */
m_libraryNames.Clear();
g_LibraryNames.Clear();
wxGetApp().ReadProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters(), false );
@ -190,7 +190,7 @@ PARAM_CFG_ARRAY& PCB_EDIT_FRAME::GetProjectFileParameters()
m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ),&g_UserLibDirBuffer,
GROUPLIB ) );
m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ),
&m_libraryNames,
&g_LibraryNames,
GROUPLIB ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "PadDrlX" ), &g_Pad_Master.m_Drill.x,
320, 0, 0x7FFF ) );