Push library reading check to IO_BASE
This commit is contained in:
parent
f8688a922d
commit
4a67761d29
|
@ -18,10 +18,15 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
#include <io/io_base.h>
|
||||
#include <ki_exception.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
|
||||
#include <wx/filename.h>
|
||||
#include <wx/translation.h>
|
||||
#include <wx/dir.h>
|
||||
|
||||
#define FMT_UNIMPLEMENTED wxT( "IO interface \"%s\" does not implement the \"%s\" function." )
|
||||
#define NOT_IMPLEMENTED( aCaller ) \
|
||||
|
@ -61,6 +66,52 @@ void IO_BASE::GetLibraryOptions( STRING_UTF8_MAP* aListToAppendTo ) const
|
|||
|
||||
bool IO_BASE::CanReadLibrary( const wxString& aFileName ) const
|
||||
{
|
||||
// TODO: Push file extension based checks from PCB_IO and SCH_IO into this function
|
||||
const IO_BASE::IO_FILE_DESC& desc = GetLibraryDesc();
|
||||
|
||||
if( desc.m_IsFile )
|
||||
{
|
||||
const std::vector<std::string>& exts = desc.m_FileExtensions;
|
||||
|
||||
wxString fileExt = wxFileName( aFileName ).GetExt().MakeLower();
|
||||
|
||||
for( const std::string& ext : exts )
|
||||
{
|
||||
if( fileExt == wxString( ext ).Lower() )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxDir dir( aFileName );
|
||||
|
||||
if( !dir.IsOpened() )
|
||||
return false;
|
||||
|
||||
std::vector<std::string> exts = desc.m_ExtensionsInDir;
|
||||
std::unordered_set<wxString> lowerExts;
|
||||
|
||||
for( const std::string& ext : exts )
|
||||
lowerExts.emplace( wxString( ext ).MakeLower() );
|
||||
|
||||
wxString filenameStr;
|
||||
|
||||
bool cont = dir.GetFirst( &filenameStr, wxEmptyString, wxDIR_FILES | wxDIR_HIDDEN );
|
||||
|
||||
while( cont )
|
||||
{
|
||||
wxString ext = wxS( "" );
|
||||
|
||||
int idx = filenameStr.Find( '.', true );
|
||||
|
||||
if( idx != -1 )
|
||||
ext = filenameStr.Mid( idx + 1 ).MakeLower();
|
||||
|
||||
if( lowerExts.count( ext ) )
|
||||
return true;
|
||||
|
||||
cont = dir.GetNext( &filenameStr );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -59,57 +59,6 @@ bool SCH_IO::CanReadSchematicFile( const wxString& aFileName ) const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_IO::CanReadLibrary( const wxString& aFileName ) const
|
||||
{
|
||||
const IO_BASE::IO_FILE_DESC& desc = GetLibraryFileDesc();
|
||||
|
||||
if( desc.m_IsFile )
|
||||
{
|
||||
const std::vector<std::string>& exts = desc.m_FileExtensions;
|
||||
|
||||
wxString fileExt = wxFileName( aFileName ).GetExt().MakeLower();
|
||||
|
||||
for( const std::string& ext : exts )
|
||||
{
|
||||
if( fileExt == wxString( ext ).Lower() )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxDir dir( aFileName );
|
||||
|
||||
if( !dir.IsOpened() )
|
||||
return false;
|
||||
|
||||
std::vector<std::string> exts = desc.m_ExtensionsInDir;
|
||||
std::unordered_set<wxString> lowerExts;
|
||||
|
||||
for( const std::string& ext : exts )
|
||||
lowerExts.emplace( wxString( ext ).MakeLower() );
|
||||
|
||||
wxString filenameStr;
|
||||
|
||||
bool cont = dir.GetFirst( &filenameStr, wxEmptyString, wxDIR_FILES | wxDIR_HIDDEN );
|
||||
while( cont )
|
||||
{
|
||||
wxString ext = wxS( "" );
|
||||
|
||||
int idx = filenameStr.Find( '.', true );
|
||||
if( idx != -1 )
|
||||
ext = filenameStr.Mid( idx + 1 ).MakeLower();
|
||||
|
||||
if( lowerExts.count( ext ) )
|
||||
return true;
|
||||
|
||||
cont = dir.GetNext( &filenameStr );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void SCH_IO::SaveLibrary( const wxString& aFileName, const STRING_UTF8_MAP* aProperties )
|
||||
{
|
||||
NOT_IMPLEMENTED( __FUNCTION__ );
|
||||
|
|
|
@ -70,8 +70,6 @@ public:
|
|||
*/
|
||||
virtual bool CanReadSchematicFile( const wxString& aFileName ) const;
|
||||
|
||||
bool CanReadLibrary( const wxString& aFileName ) const override;
|
||||
|
||||
/**
|
||||
* Return the modification hash from the library cache.
|
||||
*
|
||||
|
|
|
@ -72,57 +72,6 @@ bool PCB_IO::CanReadFootprint( const wxString& aFileName ) const
|
|||
}
|
||||
|
||||
|
||||
bool PCB_IO::CanReadLibrary( const wxString& aFileName ) const
|
||||
{
|
||||
const IO_BASE::IO_FILE_DESC& desc = GetLibraryDesc();
|
||||
|
||||
if( desc.m_IsFile )
|
||||
{
|
||||
const std::vector<std::string>& exts = desc.m_FileExtensions;
|
||||
|
||||
wxString fileExt = wxFileName( aFileName ).GetExt().MakeLower();
|
||||
|
||||
for( const std::string& ext : exts )
|
||||
{
|
||||
if( fileExt == wxString( ext ).Lower() )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxDir dir( aFileName );
|
||||
|
||||
if( !dir.IsOpened() )
|
||||
return false;
|
||||
|
||||
std::vector<std::string> exts = desc.m_ExtensionsInDir;
|
||||
std::unordered_set<wxString> lowerExts;
|
||||
|
||||
for( const std::string& ext : exts )
|
||||
lowerExts.emplace( wxString( ext ).MakeLower() );
|
||||
|
||||
wxString filenameStr;
|
||||
|
||||
bool cont = dir.GetFirst( &filenameStr, wxEmptyString, wxDIR_FILES | wxDIR_HIDDEN );
|
||||
while( cont )
|
||||
{
|
||||
wxString ext = wxS( "" );
|
||||
|
||||
int idx = filenameStr.Find( '.', true );
|
||||
if( idx != -1 )
|
||||
ext = filenameStr.Mid( idx + 1 ).MakeLower();
|
||||
|
||||
if( lowerExts.count( ext ) )
|
||||
return true;
|
||||
|
||||
cont = dir.GetNext( &filenameStr );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
BOARD* PCB_IO::LoadBoard( const wxString& aFileName, BOARD* aAppendToMe,
|
||||
const STRING_UTF8_MAP* aProperties, PROJECT* aProject,
|
||||
PROGRESS_REPORTER* aProgressReporter )
|
||||
|
|
|
@ -92,12 +92,6 @@ public:
|
|||
*/
|
||||
virtual bool CanReadFootprint( const wxString& aFileName ) const;
|
||||
|
||||
/**
|
||||
* Checks if this PCB_IO can read footprint library from specified file or directory.
|
||||
* If not overriden, extension check is used.
|
||||
*/
|
||||
bool CanReadLibrary( const wxString& aFileName ) const override;
|
||||
|
||||
/**
|
||||
* Registers a KIDIALOG callback for collecting info from the user.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue