Commit 6910df39 authored by jean-pierre charras's avatar jean-pierre charras

Pcbnew: fix 2 (minor) issues

Cvpcb: code cleaning.
parent ee003180
......@@ -149,14 +149,8 @@ found in the default search paths." ),
if( alias.m_Name.CmpNoCase( component.m_Value ) != 0 )
continue;
BOOST_FOREACH( FOOTPRINT_INFO& footprint, m_footprints )
{
if( alias.m_FootprintName.CmpNoCase( footprint.m_Module ) == 0 )
{
SetNewPkg( footprint.m_Module );
break;
}
}
if( m_footprints.GetModuleInfo( alias.m_FootprintName ) )
SetNewPkg( alias.m_FootprintName );
if( component.m_Module.IsEmpty() )
{
......
......@@ -12,17 +12,6 @@
#include "cvstruct.h"
FOOTPRINT_INFO* GetModuleDescrByName( const wxString& FootprintName, FOOTPRINT_LIST& list )
{
BOOST_FOREACH( FOOTPRINT_INFO & footprint, list )
{
if( footprint.m_Module == FootprintName )
return &footprint;
}
return NULL;
}
/***************************************/
/* ListBox handling the footprint list */
/***************************************/
......@@ -127,9 +116,11 @@ void FOOTPRINTS_LISTBOX::SetFootprintFullList( FOOTPRINT_LIST& list )
m_FullFootprintList.Clear();
BOOST_FOREACH( FOOTPRINT_INFO & footprint, list ) {
for( unsigned ii = 0; ii < list.GetCount(); ii++ )
{
FOOTPRINT_INFO & footprint = list.GetItem(ii);
msg.Printf( wxT( "%3d %s" ), m_FullFootprintList.GetCount() + 1,
footprint.m_Module.GetData() );
GetChars(footprint.m_Module) );
m_FullFootprintList.Add( msg );
}
......@@ -145,7 +136,6 @@ void FOOTPRINTS_LISTBOX::SetFootprintFullList( FOOTPRINT_LIST& list )
void FOOTPRINTS_LISTBOX::SetFootprintFilteredList( COMPONENT* Component,
FOOTPRINT_LIST& list )
{
FOOTPRINT_LIST::iterator i;
wxString msg;
unsigned jj;
int OldSelection = GetSelection();
......@@ -153,7 +143,9 @@ void FOOTPRINTS_LISTBOX::SetFootprintFilteredList( COMPONENT* Component,
m_FilteredFootprintList.Clear();
BOOST_FOREACH( FOOTPRINT_INFO & footprint, list ) {
for( unsigned ii = 0; ii < list.GetCount(); ii++ )
{
FOOTPRINT_INFO& footprint = list.GetItem(ii);
/* Search for matching footprints */
for( jj = 0; jj < Component->m_FootprintFilter.GetCount(); jj++ )
{
......@@ -250,7 +242,7 @@ void FOOTPRINTS_LISTBOX::OnLeftClick( wxListEvent& event )
FOOTPRINT_INFO* Module;
wxString FootprintName = GetSelectedFootprint();
Module = GetModuleDescrByName( FootprintName, GetParent()->m_footprints );
Module = GetParent()->m_footprints.GetModuleInfo( FootprintName );
wxASSERT(Module);
if( GetParent()->DrawFrame )
{
......
......@@ -17,6 +17,8 @@
#include "dialog_cvpcb_config.h"
#include "class_DisplayFootprintsFrame.h"
#include "cvpcb_id.h"
#include "dialog_load_error.h"
#include "build_version.h"
......@@ -603,3 +605,46 @@ void CVPCB_MAINFRAME::DisplayStatus()
msg.Empty();
SetStatusText( msg, 2 );
}
/*
* Read the list of libraries (*.mod files) and populates m_footprints
* ( list of availaible modules in libs ).
* for each module are stored
* the module name
* documentation string
* associated keywords
*/
bool CVPCB_MAINFRAME::LoadFootprintFiles( )
{
/* Check if there are footprint libraries in project file */
if( m_ModuleLibNames.GetCount() == 0 )
{
wxMessageBox( _( "No PCB footprint libraries are listed in the current project file." ),
_( "Project File Error" ), wxOK | wxICON_ERROR );
return false;
}
m_footprints.ReadFootprintFiles(m_ModuleLibNames);
/* Display error messages, if any */
if( !m_footprints.m_filesNotFound.IsEmpty() || !m_footprints.m_filesInvalid.IsEmpty() )
{
DIALOG_LOAD_ERROR dialog(NULL);
if( !m_footprints.m_filesNotFound.IsEmpty() )
{
wxString message = _("Some files could not be found!");
dialog.MessageSet(message);
dialog.ListSet(m_footprints.m_filesNotFound);
}
/* Display if there are invalid files */
if( !m_footprints.m_filesInvalid.IsEmpty() )
{
dialog.MessageSet( _("Some files are invalid!"));
dialog.ListSet(m_footprints.m_filesInvalid);
}
dialog.ShowModal();
}
return true;
}
......@@ -27,7 +27,76 @@ public:
}
};
typedef boost::ptr_vector< FOOTPRINT_INFO > FOOTPRINT_LIST;
class FOOTPRINT_LIST
{
public:
boost::ptr_vector< FOOTPRINT_INFO > m_List;
wxString m_filesNotFound;
wxString m_filesInvalid;
public:
/**
* Function GetCount
* @return the number of items stored in list
*/
unsigned GetCount() { return m_List.size(); }
/**
* Function GetModuleInfo
* @return the item stored in list if found
* @param aFootprintName = the name of item
*/
FOOTPRINT_INFO * GetModuleInfo( const wxString & aFootprintName )
{
BOOST_FOREACH( FOOTPRINT_INFO& footprint, m_List )
{
if( aFootprintName.CmpNoCase( footprint.m_Module ) == 0 )
return &footprint;
}
return NULL;
}
/**
* Function GetItem
* @return the aIdx item in list
* @param aIdx = index of the given item
*/
FOOTPRINT_INFO & GetItem( unsigned aIdx )
{
return m_List[aIdx];
}
/**
* Function AddItem
* add aItem in list
* @param aItem = item to add
*/
void AddItem( FOOTPRINT_INFO* aItem )
{
m_List.push_back( aItem);
}
/**
* Function ReadFootprintFiles
* Read the list of libraries (*.mod files) and populates m_List ( list of availaible modules in libs ).
* for each module, are stored
* the module name
* documentation string
* associated keywords
* library name
* Module description format:
* $MODULE c64acmd First line of module description
* Li c64acmd DIN connector Library reference
* Cd Europe 96 AC male vertical documentation string
* Kw PAD_CONN DIN associated keywords
* ...... other data (pads, outlines ..)
* $Endmodule
*
* @param aFootprintsLibNames = an array string giving the list of libraries to load
*/
bool ReadFootprintFiles( wxArrayString & aFootprintsLibNames );
};
/* FOOTPRINT object list sort function. */
inline bool operator<( const FOOTPRINT_INFO& item1, const FOOTPRINT_INFO& item2 )
......
......@@ -4,7 +4,7 @@
/*
* Functions to read footprint libraries and fill m_footprints by availlable footprints names
* Functions to read footprint libraries and fill m_footprints by available footprints names
* and their documentation (comments and keywords)
*/
#include "fctsys.h"
......@@ -20,14 +20,13 @@
#include "filter_reader.h"
#include "footprint_info.h"
#include "dialog_load_error.h"
/*
* Read the list of libraries (*.mod files) and populates m_footprints ( list of availaible modules in libs ).
/* Read the list of libraries (*.mod files)
* for each module are stored
* the module name
* documentation string
* associated keywords
* lib name
* Module description format:
* $MODULE c64acmd First line of module description
* Li c64acmd DIN connector Library reference
......@@ -35,39 +34,29 @@
* Kw PAD_CONN DIN associated keywords
* ...... other data (pads, outlines ..)
* $Endmodule
*
*/
bool CVPCB_MAINFRAME::LoadFootprintFiles( )
bool FOOTPRINT_LIST::ReadFootprintFiles( wxArrayString & aFootprintsLibNames )
{
FILE* file;
wxFileName filename;
wxString libname;
wxString files_not_found;
wxString files_invalid;
/* Check if footprint m_footprints is not empty */
if( !m_footprints.empty() )
m_footprints.clear();
/* Check if there are footprint libraries in project file */
if( m_ModuleLibNames.GetCount() == 0 )
{
wxMessageBox( _( "No PCB footprint libraries are listed in the current project file." ),
_( "Project File Error" ), wxOK | wxICON_ERROR );
return false;
}
// Clear data before reading files
m_filesNotFound.Empty();
m_filesInvalid.Empty();
m_List.clear();
/* Parse Libraries Listed */
for( unsigned ii = 0; ii < m_ModuleLibNames.GetCount(); ii++ )
for( unsigned ii = 0; ii < aFootprintsLibNames.GetCount(); ii++ )
{
filename = m_ModuleLibNames[ii];
filename = aFootprintsLibNames[ii];
filename.SetExt( ModuleFileExtension );
libname = wxGetApp().FindLibraryPath( filename );
if( libname.IsEmpty() )
{
files_not_found << filename.GetFullName() << wxT("\n");
m_filesNotFound << filename.GetFullName() << wxT("\n");
continue;
}
......@@ -76,7 +65,7 @@ bool CVPCB_MAINFRAME::LoadFootprintFiles( )
if( file == NULL )
{
files_invalid << libname << _(" (file cannot be opened)") << wxT("\n");
m_filesInvalid << libname << _(" (file cannot be opened)") << wxT("\n");
continue;
}
......@@ -93,7 +82,7 @@ bool CVPCB_MAINFRAME::LoadFootprintFiles( )
wxString msg;
msg.Printf( _( "<%s> is not a valid Kicad PCB footprint library." ),
GetChars( libname ) );
files_invalid << msg << wxT("\n");
m_filesInvalid << msg << wxT("\n");
continue;
}
......@@ -115,7 +104,7 @@ bool CVPCB_MAINFRAME::LoadFootprintFiles( )
FOOTPRINT_INFO* ItemLib = new FOOTPRINT_INFO();
ItemLib->m_Module = CONV_FROM_UTF8( StrPurge( line ) );
ItemLib->m_LibName = libname;
m_footprints.push_back( ItemLib );
AddItem( ItemLib );
while( reader.ReadLine() )
{
......@@ -143,30 +132,11 @@ bool CVPCB_MAINFRAME::LoadFootprintFiles( )
if( !end )
{
files_invalid << libname << _(" (Unexpected end of file)") << wxT("\n");
m_filesInvalid << libname << _(" (Unexpected end of file)") << wxT("\n");
}
}
m_footprints.sort();
/* Display error messages, if any */
if( !files_not_found.IsEmpty() || !files_invalid.IsEmpty() )
{
DIALOG_LOAD_ERROR dialog(NULL);
if( !files_not_found.IsEmpty() )
{
wxString message = _("Some files could not be found!");
dialog.MessageSet(message);
dialog.ListSet(files_not_found);
}
/* Display if there are invalid files */
if( !files_invalid.IsEmpty() )
{
dialog.MessageSet( _("Some files are invalid!"));
dialog.ListSet(files_invalid);
}
dialog.ShowModal();
}
m_List.sort();
return true;
}
......@@ -20,8 +20,6 @@
#include "3d_viewer.h"
extern FOOTPRINT_INFO* GetModuleDescrByName( const wxString& FootprintName, FOOTPRINT_LIST& list );
/*
* Create or Update the frame showing the current highlighted footprint
* and (if showed) the 3D display frame
......@@ -48,7 +46,7 @@ void CVPCB_MAINFRAME::CreateScreenCmp()
{
msg = _( "Footprint: " ) + FootprintName;
DrawFrame->SetTitle( msg );
FOOTPRINT_INFO* Module = GetModuleDescrByName( FootprintName, m_footprints );
FOOTPRINT_INFO* Module = m_footprints.GetModuleInfo( FootprintName );
msg = _( "Lib: " );
if( Module )
......
......@@ -208,6 +208,7 @@ enum main_id
ID_TB_OPTIONS_SELECT_CURSOR,
ID_TB_OPTIONS_SHOW_POLAR_COORD,
ID_TB_OPTIONS_SHOW_GRID,
ID_TB_OPTIONS_SHOW_PADS_SKETCH,
ID_TB_OPTIONS_SHOW_ZONES,
ID_TB_OPTIONS_SHOW_ZONES_DISABLE,
......@@ -222,7 +223,6 @@ enum main_id
ID_TB_OPTIONS_HIDDEN_PINS,
ID_TB_OPTIONS_BUS_WIRES_ORIENT,
ID_TB_OPTIONS_SHOW_PADS_SKETCH,
ID_TB_OPTIONS_SHOW_VIAS_SKETCH,
ID_TB_OPTIONS_SHOW_TRACKS_SKETCH,
ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH,
......
......@@ -78,11 +78,8 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
break;
case TYPE_DRAWSEGMENT:
if( m_ID_current_state == 0 )
{
Place_DrawItem( (DRAWSEGMENT*) DrawStruct, aDC );
exit = true;
}
Place_DrawItem( (DRAWSEGMENT*) DrawStruct, aDC );
exit = true;
break;
case TYPE_DIMENSION:
......
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