Fix PCBNew segfault when adding a module.
This commit is contained in:
parent
b9b341dce2
commit
e6681f17e4
|
@ -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:
|
||||||
|
|
||||||
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()
|
||||||
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 )
|
||||||
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 )
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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 );
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
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 )
|
||||||
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()
|
||||||
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 ) );
|
||||||
|
|
Loading…
Reference in New Issue