diff --git a/common/font/font.cpp b/common/font/font.cpp index a8ecd6cae1..81e4cc7a67 100644 --- a/common/font/font.cpp +++ b/common/font/font.cpp @@ -68,18 +68,16 @@ public: std::unique_ptr<MARKUP::NODE> root; }; - typedef std::pair<wxString, ENTRY> CACHE_ENTRY; - MARKUP_CACHE( size_t aMaxSize ) : m_maxSize( aMaxSize ) { } - ENTRY& Put( const CACHE_ENTRY::first_type& aQuery, ENTRY&& aResult ) + ENTRY& Put( const wxString& aQuery, ENTRY&& aResult ) { auto it = m_cache.find( aQuery ); - m_cacheMru.emplace_front( CACHE_ENTRY( aQuery, std::move( aResult ) ) ); + m_cacheMru.emplace_front( std::make_pair( aQuery, std::move( aResult ) ) ); if( it != m_cache.end() ) { @@ -100,7 +98,7 @@ public: return m_cacheMru.begin()->second; } - ENTRY* Get( const CACHE_ENTRY::first_type& aQuery ) + ENTRY* Get( const wxString& aQuery ) { auto it = m_cache.find( aQuery ); @@ -119,9 +117,9 @@ public: } private: - size_t m_maxSize; - std::list<CACHE_ENTRY> m_cacheMru; - std::unordered_map<wxString, std::list<CACHE_ENTRY>::iterator> m_cache; + size_t m_maxSize; + std::list<std::pair<wxString, ENTRY>> m_cacheMru; + std::unordered_map<wxString, std::list<std::pair<wxString, ENTRY>>::iterator> m_cache; }; diff --git a/eeschema/project_rescue.cpp b/eeschema/project_rescue.cpp index 61de5907d8..f1516b5c8f 100644 --- a/eeschema/project_rescue.cpp +++ b/eeschema/project_rescue.cpp @@ -31,23 +31,16 @@ #include <symbol_viewer_frame.h> #include <project_rescue.h> #include <project_sch.h> -#include <sch_symbol.h> -#include <sch_sheet.h> #include <sch_edit_frame.h> -#include <schematic.h> #include <string_utils.h> #include <symbol_lib_table.h> #include <wildcards_and_files_ext.h> -#include <project_sch.h> #include <wx/msgdlg.h> #include <cctype> #include <map> -typedef std::pair<SCH_SYMBOL*, wxString> SYMBOL_NAME_PAIR; - - // Helper sort function, used in getSymbols, to sort a symbol list by lib_id static bool sort_by_libid( const SCH_SYMBOL* ref, SCH_SYMBOL* cmp ) { @@ -138,8 +131,7 @@ RESCUE_CASE_CANDIDATE::RESCUE_CASE_CANDIDATE( const wxString& aRequestedName, void RESCUE_CASE_CANDIDATE::FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates ) { - typedef std::map<wxString, RESCUE_CASE_CANDIDATE> candidate_map_t; - candidate_map_t candidate_map; + std::map<wxString, RESCUE_CASE_CANDIDATE> candidate_map; // Remember the list of symbols is sorted by symbol name. // So a search in libraries is made only once by group @@ -169,16 +161,14 @@ void RESCUE_CASE_CANDIDATE::FindRescues( RESCUER& aRescuer, // If the case sensitive match failed, try a case insensitive match. PROJECT_SCH::SchLibs( aRescuer.GetPrj() ) - ->FindLibraryNearEntries( case_insensitive_matches, - symbol_name ); + ->FindLibraryNearEntries( case_insensitive_matches, symbol_name ); // If there are not case insensitive matches either, the symbol cannot be rescued. if( !case_insensitive_matches.size() ) continue; RESCUE_CASE_CANDIDATE candidate( symbol_name, case_insensitive_matches[0]->GetName(), - case_insensitive_matches[0], - eachSymbol->GetUnit(), + case_insensitive_matches[0], eachSymbol->GetUnit(), eachSymbol->GetBodyStyle() ); candidate_map[symbol_name] = candidate; @@ -186,10 +176,8 @@ void RESCUE_CASE_CANDIDATE::FindRescues( RESCUER& aRescuer, } // Now, dump the map into aCandidates - for( const candidate_map_t::value_type& each_pair : candidate_map ) - { - aCandidates.push_back( new RESCUE_CASE_CANDIDATE( each_pair.second ) ); - } + for( const auto& [ name, candidate ] : candidate_map ) + aCandidates.push_back( new RESCUE_CASE_CANDIDATE( candidate ) ); } @@ -252,8 +240,7 @@ RESCUE_CACHE_CANDIDATE::RESCUE_CACHE_CANDIDATE() void RESCUE_CACHE_CANDIDATE::FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates ) { - typedef std::map<wxString, RESCUE_CACHE_CANDIDATE> candidate_map_t; - candidate_map_t candidate_map; + std::map<wxString, RESCUE_CACHE_CANDIDATE> candidate_map; // Remember the list of symbols is sorted by symbol name. // So a search in libraries is made only once by group @@ -280,18 +267,19 @@ void RESCUE_CACHE_CANDIDATE::FindRescues( RESCUER& aRescuer, // the LIB_NICKNAME_LIB_SYMBOL_NAME case. if( !cache_match && eachSymbol->GetLibId().IsValid() ) { - wxString tmp; - - tmp = eachSymbol->GetLibId().GetLibNickname().wx_str() + wxT( "_" ) + - eachSymbol->GetLibId().GetLibItemName().wx_str(); + wxString tmp = wxString::Format( wxT( "%s-%s" ), + eachSymbol->GetLibId().GetLibNickname().wx_str(), + eachSymbol->GetLibId().GetLibItemName().wx_str() ); cache_match = findSymbol( tmp, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ), true ); } // Test whether there is a conflict or if the symbol can only be found in the cache // and the symbol name does not have any illegal characters. - if( cache_match && lib_match && - !cache_match->PinsConflictWith( *lib_match, true, true, true, true, false ) ) + if( cache_match && lib_match + && !cache_match->PinsConflictWith( *lib_match, true, true, true, true, false ) ) + { continue; + } if( !cache_match && lib_match ) continue; @@ -305,10 +293,8 @@ void RESCUE_CACHE_CANDIDATE::FindRescues( RESCUER& aRescuer, } // Now, dump the map into aCandidates - for( const candidate_map_t::value_type& each_pair : candidate_map ) - { - aCandidates.push_back( new RESCUE_CACHE_CANDIDATE( each_pair.second ) ); - } + for( const auto& [name, candidate] : candidate_map ) + aCandidates.push_back( new RESCUE_CACHE_CANDIDATE( candidate ) ); } @@ -317,14 +303,23 @@ wxString RESCUE_CACHE_CANDIDATE::GetActionDescription() const wxString action; if( !m_cache_candidate && !m_lib_candidate ) + { action.Printf( _( "Cannot rescue symbol %s which is not available in any library or " - "the cache." ), m_requested_name ); + "the cache." ), + m_requested_name ); + } else if( m_cache_candidate && !m_lib_candidate ) + { action.Printf( _( "Rescue symbol %s found only in cache library to %s." ), - m_requested_name, m_new_name ); + m_requested_name, + m_new_name ); + } else + { action.Printf( _( "Rescue modified symbol %s to %s" ), - m_requested_name, m_new_name ); + m_requested_name, + m_new_name ); + } return action; } @@ -359,13 +354,12 @@ bool RESCUE_CACHE_CANDIDATE::PerformAction( RESCUER* aRescuer ) } -RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( - const LIB_ID& aRequestedId, - const LIB_ID& aNewId, - LIB_SYMBOL* aCacheCandidate, - LIB_SYMBOL* aLibCandidate, - int aUnit, - int aConvert ) : RESCUE_CANDIDATE() +RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( const LIB_ID& aRequestedId, + const LIB_ID& aNewId, + LIB_SYMBOL* aCacheCandidate, + LIB_SYMBOL* aLibCandidate, + int aUnit, int aConvert ) : + RESCUE_CANDIDATE() { m_requested_id = aRequestedId; m_requested_name = aRequestedId.Format().wx_str(); @@ -384,13 +378,10 @@ RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE() } -void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( - RESCUER& aRescuer, - boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates ) +void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( RESCUER& aRescuer, + boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates ) { - typedef std::map<LIB_ID, RESCUE_SYMBOL_LIB_TABLE_CANDIDATE> candidate_map_t; - - candidate_map_t candidate_map; + std::map<LIB_ID, RESCUE_SYMBOL_LIB_TABLE_CANDIDATE> candidate_map; // Remember the list of symbols is sorted by LIB_ID. // So a search in libraries is made only once by group @@ -421,8 +412,9 @@ void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( // the LIB_NICKNAME_LIB_SYMBOL_NAME case. if( !cache_match ) { - symbolName = symbol_id.GetLibNickname().wx_str() + wxT( "_" ) + - symbol_id.GetLibItemName().wx_str(); + symbolName.Printf( wxT( "%s-%s" ), + symbol_id.GetLibNickname().wx_str(), + symbol_id.GetLibItemName().wx_str() ); cache_match = findSymbol( symbolName, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ), true ); } @@ -450,8 +442,8 @@ void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( // Test whether there is a conflict or if the symbol can only be found in the cache. if( LIB_ID::HasIllegalChars( symbol_id.GetLibItemName() ) == -1 ) { - if( cache_match && lib_match && - !cache_match->PinsConflictWith( *lib_match, true, true, true, true, false ) ) + if( cache_match && lib_match + && !cache_match->PinsConflictWith( *lib_match, true, true, true, true, false ) ) { continue; } @@ -468,8 +460,9 @@ void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( // library. wxString libNickname = GetRescueLibraryFileName( aRescuer.Schematic() ).GetName(); - LIB_ID new_id( libNickname, new_name + wxS( "-" ) + - symbol_id.GetLibNickname().wx_str() ); + LIB_ID new_id( libNickname, wxString::Format( wxT( "%s-%s" ), + new_name, + symbol_id.GetLibNickname().wx_str() ) ); RESCUE_SYMBOL_LIB_TABLE_CANDIDATE candidate( symbol_id, new_id, cache_match, lib_match, eachSymbol->GetUnit(), @@ -480,10 +473,8 @@ void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( } // Now, dump the map into aCandidates - for( const candidate_map_t::value_type& each_pair : candidate_map ) - { - aCandidates.push_back( new RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( each_pair.second ) ); - } + for( const auto& [name, candidate] : candidate_map ) + aCandidates.push_back( new RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( candidate ) ); } diff --git a/pcbnew/pcb_io/geda/pcb_io_geda.cpp b/pcbnew/pcb_io/geda/pcb_io_geda.cpp index f36c95ba1a..305dcd4e96 100644 --- a/pcbnew/pcb_io/geda/pcb_io_geda.cpp +++ b/pcbnew/pcb_io/geda/pcb_io_geda.cpp @@ -107,13 +107,16 @@ static inline long parseInt( const wxString& aValue, double aScalar ) * footprint portion of the PLUGIN API, and only for the #PCB_IO_KICAD_SEXPR plugin. It is * private to this implementation file so it is not placed into a header. */ -class GPCB_FPL_CACHE_ITEM +class GPCB_FPL_CACHE_ENTRY { public: - GPCB_FPL_CACHE_ITEM( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ); + GPCB_FPL_CACHE_ENTRY( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ) : + m_filename( aFileName ), + m_footprint( aFootprint ) + { } - WX_FILENAME GetFileName() const { return m_filename; } - FOOTPRINT* GetFootprint() const { return m_footprint.get(); } + WX_FILENAME GetFileName() const { return m_filename; } + std::unique_ptr<FOOTPRINT>& GetFootprint() { return m_footprint; } private: WX_FILENAME m_filename; ///< The full file name and path of the footprint to cache. @@ -121,16 +124,6 @@ private: }; -GPCB_FPL_CACHE_ITEM::GPCB_FPL_CACHE_ITEM( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ) : - m_filename( aFileName ), - m_footprint( aFootprint ) -{ -} - - -typedef boost::ptr_map< std::string, GPCB_FPL_CACHE_ITEM > FOOTPRINT_MAP; - - class GPCB_FPL_CACHE { public: @@ -138,7 +131,7 @@ public: wxString GetPath() const { return m_lib_path.GetPath(); } bool IsWritable() const { return m_lib_path.IsOk() && m_lib_path.IsDirWritable(); } - FOOTPRINT_MAP& GetFootprints() { return m_footprints; } + boost::ptr_map<std::string, GPCB_FPL_CACHE_ENTRY>& GetFootprints() { return m_footprints; } // Most all functions in this class throw IO_ERROR exceptions. There are no // error codes nor user interface calls from here, nor in any PLUGIN. @@ -197,7 +190,9 @@ private: PCB_IO_GEDA* m_owner; ///< Plugin object that owns the cache. wxFileName m_lib_path; ///< The path of the library. - FOOTPRINT_MAP m_footprints; ///< Map of footprint file name to FOOTPRINT*. + + boost::ptr_map<std::string, GPCB_FPL_CACHE_ENTRY> m_footprints; ///< Map of footprint filename + ///< to cache entries. bool m_cache_dirty; ///< Stored separately because it's expensive to check ///< m_cache_timestamp against all the files. @@ -257,7 +252,7 @@ void GPCB_FPL_CACHE::Load() // The footprint name is the file name without the extension. footprint->SetFPID( LIB_ID( wxEmptyString, fn.GetName() ) ); - m_footprints.insert( name, new GPCB_FPL_CACHE_ITEM( footprint, fn ) ); + m_footprints.insert( name, new GPCB_FPL_CACHE_ENTRY( footprint, fn ) ); } catch( const IO_ERROR& ioe ) { @@ -277,7 +272,7 @@ void GPCB_FPL_CACHE::Remove( const wxString& aFootprintName ) { std::string footprintName = TO_UTF8( aFootprintName ); - FOOTPRINT_MAP::const_iterator it = m_footprints.find( footprintName ); + auto it = m_footprints.find( footprintName ); if( it == m_footprints.end() ) { @@ -913,14 +908,12 @@ const FOOTPRINT* PCB_IO_GEDA::getFootprint( const wxString& aLibraryPath, validateCache( aLibraryPath, checkModified ); - const FOOTPRINT_MAP& mods = m_cache->GetFootprints(); + auto it = m_cache->GetFootprints().find( TO_UTF8( aFootprintName ) ); - FOOTPRINT_MAP::const_iterator it = mods.find( TO_UTF8( aFootprintName ) ); - - if( it == mods.end() ) + if( it == m_cache->GetFootprints().end() ) return nullptr; - return it->second->GetFootprint(); + return it->second->GetFootprint().get(); } diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp index 2ff79424ab..a5d9e8e9b3 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp @@ -72,7 +72,7 @@ using namespace PCB_KEYS_T; -FP_CACHE_ITEM::FP_CACHE_ITEM( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ) : +FP_CACHE_ENTRY::FP_CACHE_ENTRY( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ) : m_filename( aFileName ), m_footprint( aFootprint ) { } @@ -106,7 +106,7 @@ void FP_CACHE::Save( FOOTPRINT* aFootprintFilter ) for( auto it = m_footprints.begin(); it != m_footprints.end(); ++it ) { - FP_CACHE_ITEM* fpCacheEntry = it->second; + FP_CACHE_ENTRY* fpCacheEntry = it->second; std::unique_ptr<FOOTPRINT>& footprint = fpCacheEntry->GetFootprint(); if( aFootprintFilter && footprint.get() != aFootprintFilter ) @@ -212,7 +212,7 @@ void FP_CACHE::Load() THROW_IO_ERROR( wxEmptyString ); // caught locally, just below... footprint->SetFPID( LIB_ID( wxEmptyString, fpName ) ); - m_footprints.insert( fpName, new FP_CACHE_ITEM( footprint, fn ) ); + m_footprints.insert( fpName, new FP_CACHE_ENTRY( footprint, fn ) ); } catch( const IO_ERROR& ioe ) { @@ -235,7 +235,7 @@ void FP_CACHE::Load() void FP_CACHE::Remove( const wxString& aFootprintName ) { - FP_CACHE_FOOTPRINT_MAP::const_iterator it = m_footprints.find( aFootprintName ); + auto it = m_footprints.find( aFootprintName ); if( it == m_footprints.end() ) { @@ -265,9 +265,7 @@ void FP_CACHE::SetPath( const wxString& aPath ) for( const auto& footprint : GetFootprints() ) - { footprint.second->SetFilePath( aPath ); - } } @@ -2801,9 +2799,9 @@ void PCB_IO_KICAD_SEXPR::FootprintEnumerate( wxArrayString& aFootprintNames, con const FOOTPRINT* PCB_IO_KICAD_SEXPR::getFootprint( const wxString& aLibraryPath, - const wxString& aFootprintName, - const std::map<std::string, UTF8>* aProperties, - bool checkModified ) + const wxString& aFootprintName, + const std::map<std::string, UTF8>* aProperties, + bool checkModified ) { LOCALE_IO toggle; // toggles on, then off, the C locale. @@ -2818,10 +2816,9 @@ const FOOTPRINT* PCB_IO_KICAD_SEXPR::getFootprint( const wxString& aLibraryPath, // do nothing with the error } - FP_CACHE_FOOTPRINT_MAP& footprints = m_cache->GetFootprints(); - auto it = footprints.find( aFootprintName ); + auto it = m_cache->GetFootprints().find( aFootprintName ); - if( it == footprints.end() ) + if( it == m_cache->GetFootprints().end() ) return nullptr; return it->second->GetFootprint().get(); @@ -2935,7 +2932,6 @@ void PCB_IO_KICAD_SEXPR::FootprintSave( const wxString& aLibraryPath, const FOOT wxString footprintName = aFootprint->GetFPID().GetLibItemName(); - FP_CACHE_FOOTPRINT_MAP& footprints = m_cache->GetFootprints(); wxString fpName = aFootprint->GetFPID().GetLibItemName().wx_str(); ReplaceIllegalFileNameChars( fpName, '_' ); @@ -2959,12 +2955,12 @@ void PCB_IO_KICAD_SEXPR::FootprintSave( const wxString& aLibraryPath, const FOOT wxString fullPath = fn.GetFullPath(); wxString fullName = fn.GetFullName(); - FP_CACHE_FOOTPRINT_MAP::const_iterator it = footprints.find( footprintName ); + auto it = m_cache->GetFootprints().find( footprintName ); - if( it != footprints.end() ) + if( it != m_cache->GetFootprints().end() ) { wxLogTrace( traceKicadPcbPlugin, wxT( "Removing footprint file '%s'." ), fullPath ); - footprints.erase( footprintName ); + m_cache->GetFootprints().erase( footprintName ); wxRemoveFile( fullPath ); } @@ -2989,8 +2985,9 @@ void PCB_IO_KICAD_SEXPR::FootprintSave( const wxString& aLibraryPath, const FOOT footprint->SetParentGroup( nullptr ); wxLogTrace( traceKicadPcbPlugin, wxT( "Creating s-expr footprint file '%s'." ), fullPath ); - footprints.insert( footprintName, - new FP_CACHE_ITEM( footprint, WX_FILENAME( fn.GetPath(), fullName ) ) ); + m_cache->GetFootprints().insert( footprintName, + new FP_CACHE_ENTRY( footprint, + WX_FILENAME( fn.GetPath(), fullName ) ) ); m_cache->Save( footprint ); } diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h index 793096e3f6..cf6d193be5 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h @@ -203,32 +203,32 @@ class PCB_IO_KICAD_SEXPR; // forward decl * PLUGIN API, and only for the #PCB_PLUGIN plugin. It is private to this implementation file so * it is not placed into a header. */ -class FP_CACHE_ITEM +class FP_CACHE_ENTRY { WX_FILENAME m_filename; std::unique_ptr<FOOTPRINT> m_footprint; public: - FP_CACHE_ITEM( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ); + FP_CACHE_ENTRY( FOOTPRINT* aFootprint, const WX_FILENAME& aFileName ); const WX_FILENAME& GetFileName() const { return m_filename; } void SetFilePath( const wxString& aFilePath ) { m_filename.SetPath( aFilePath ); } std::unique_ptr<FOOTPRINT>& GetFootprint() { return m_footprint; } }; -typedef boost::ptr_map<wxString, FP_CACHE_ITEM> FP_CACHE_FOOTPRINT_MAP; - class FP_CACHE { - PCB_IO_KICAD_SEXPR* m_owner; // Plugin object that owns the cache. - wxFileName m_lib_path; // The path of the library. - wxString m_lib_raw_path; // For quick comparisons. - FP_CACHE_FOOTPRINT_MAP m_footprints; // Map of footprint filename to FOOTPRINT*. + PCB_IO_KICAD_SEXPR* m_owner; // Plugin object that owns the cache. + wxFileName m_lib_path; // The path of the library. + wxString m_lib_raw_path; // For quick comparisons. - bool m_cache_dirty; // Stored separately because it's expensive to check - // m_cache_timestamp against all the files. - long long m_cache_timestamp; // A hash of the timestamps for all the footprint - // files. + boost::ptr_map<wxString, FP_CACHE_ENTRY> m_footprints; // Map of footprint filename to + // cache entry. + + bool m_cache_dirty; // Stored separately because it's expensive to check + // m_cache_timestamp against all the files. + long long m_cache_timestamp; // A hash of the timestamps for all the footprint + // files. public: FP_CACHE( PCB_IO_KICAD_SEXPR* aOwner, const wxString& aLibraryPath ); @@ -239,7 +239,7 @@ public: bool Exists() const { return m_lib_path.IsOk() && m_lib_path.DirExists(); } - FP_CACHE_FOOTPRINT_MAP& GetFootprints() { return m_footprints; } + boost::ptr_map<wxString, FP_CACHE_ENTRY>& GetFootprints() { return m_footprints; } // Most all functions in this class throw IO_ERROR exceptions. There are no // error codes nor user interface calls from here, nor in any PLUGIN. @@ -324,17 +324,20 @@ public: const std::map<std::string, UTF8>* aProperties = nullptr ) override; BOARD* LoadBoard( const wxString& aFileName, BOARD* aAppendToMe, - const std::map<std::string, UTF8>* aProperties = nullptr, PROJECT* aProject = nullptr ) override; + const std::map<std::string, UTF8>* aProperties = nullptr, + PROJECT* aProject = nullptr ) override; - BOARD* DoLoad( LINE_READER& aReader, BOARD* aAppendToMe, const std::map<std::string, UTF8>* aProperties, - PROGRESS_REPORTER* aProgressReporter, unsigned aLineCount ); + BOARD* DoLoad( LINE_READER& aReader, BOARD* aAppendToMe, const std::map<std::string, + UTF8>* aProperties, PROGRESS_REPORTER* aProgressReporter, unsigned aLineCount ); void FootprintEnumerate( wxArrayString& aFootprintNames, const wxString& aLibraryPath, - bool aBestEfforts, const std::map<std::string, UTF8>* aProperties = nullptr ) override; + bool aBestEfforts, const std::map<std::string, + UTF8>* aProperties = nullptr ) override; const FOOTPRINT* GetEnumeratedFootprint( const wxString& aLibraryPath, const wxString& aFootprintName, - const std::map<std::string, UTF8>* aProperties = nullptr ) override; + const std::map<std::string, + UTF8>* aProperties = nullptr ) override; bool FootprintExists( const wxString& aLibraryPath, const wxString& aFootprintName, const std::map<std::string, UTF8>* aProperties = nullptr ) override; @@ -392,7 +395,8 @@ protected: void validateCache( const wxString& aLibraryPath, bool checkModified = true ); const FOOTPRINT* getFootprint( const wxString& aLibraryPath, const wxString& aFootprintName, - const std::map<std::string, UTF8>* aProperties, bool checkModified ); + const std::map<std::string, UTF8>* aProperties, + bool checkModified ); void init( const std::map<std::string, UTF8>* aProperties ); diff --git a/pcbnew/pcbnew_jobs_handler.cpp b/pcbnew/pcbnew_jobs_handler.cpp index 9b685c83c9..508ef8effd 100644 --- a/pcbnew/pcbnew_jobs_handler.cpp +++ b/pcbnew/pcbnew_jobs_handler.cpp @@ -1660,7 +1660,7 @@ int PCBNEW_JOBS_HANDLER::JobExportFpSvg( JOB* aJob ) int exitCode = CLI::EXIT_CODES::OK; // Just plot all the symbols we can - FP_CACHE_FOOTPRINT_MAP& footprintMap = fpLib.GetFootprints(); + boost::ptr_map<wxString, FP_CACHE_ENTRY>& footprintMap = fpLib.GetFootprints(); bool singleFpPlotted = false; @@ -1682,6 +1682,7 @@ int PCBNEW_JOBS_HANDLER::JobExportFpSvg( JOB* aJob ) } exitCode = doFpExportSvg( svgJob, fp.get() ); + if( exitCode != CLI::EXIT_CODES::OK ) break; }