Autodetect plugin type when editing filename cell.

Fixes https://gitlab.com/kicad/code/kicad/issues/8687
This commit is contained in:
Jeff Young 2021-07-04 18:20:30 +01:00
parent fecf7ec708
commit 6c161eec68
1 changed files with 26 additions and 15 deletions

View File

@ -106,6 +106,26 @@ protected:
} }
public: public:
void SetValue( int aRow, int aCol, const wxString &aValue ) override
{
LIB_TABLE_GRID::SetValue( aRow, aCol, aValue );
// If setting a filepath, attempt to auto-detect the format
if( aCol == COL_URI )
{
wxFileName fn( aValue );
for( SCH_IO_MGR::SCH_FILE_T piType : SCH_IO_MGR::SCH_FILE_T_vector )
{
if( SCH_IO_MGR::GetLibraryFileExtension( piType ).Lower() == fn.GetExt().Lower() )
{
SetValue( aRow, COL_TYPE, SCH_IO_MGR::ShowType( piType ) );
break;
}
}
}
}
SYMBOL_LIB_TABLE_GRID( const SYMBOL_LIB_TABLE& aTableToEdit ) SYMBOL_LIB_TABLE_GRID( const SYMBOL_LIB_TABLE& aTableToEdit )
{ {
@ -176,7 +196,7 @@ protected:
}; };
PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE( DIALOG_EDIT_LIBRARY_TABLES* aParent, PROJECT* aProject , PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE( DIALOG_EDIT_LIBRARY_TABLES* aParent, PROJECT* aProject,
SYMBOL_LIB_TABLE* aGlobalTable, SYMBOL_LIB_TABLE* aGlobalTable,
const wxString& aGlobalTablePath, const wxString& aGlobalTablePath,
SYMBOL_LIB_TABLE* aProjectTable, SYMBOL_LIB_TABLE* aProjectTable,
@ -467,26 +487,20 @@ void PANEL_SYM_LIB_TABLE::browseLibrariesHandler( wxCommandEvent& event )
EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>(); EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
wxString openDir = cfg->m_lastSymbolLibDir; wxString openDir = cfg->m_lastSymbolLibDir;
if( m_cur_grid == m_project_grid )
{
openDir = m_lastProjectLibDir;
}
wxFileDialog dlg( this, _( "Select Library" ), if( m_cur_grid == m_project_grid )
openDir, wxEmptyString, wildcards, openDir = m_lastProjectLibDir;
wxFileDialog dlg( this, _( "Select Library" ), openDir, wxEmptyString, wildcards,
wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE ); wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE );
if( dlg.ShowModal() == wxID_CANCEL ) if( dlg.ShowModal() == wxID_CANCEL )
return; return;
if( m_cur_grid == m_global_grid ) if( m_cur_grid == m_global_grid )
{
cfg->m_lastSymbolLibDir = dlg.GetPath(); cfg->m_lastSymbolLibDir = dlg.GetPath();
}
else else
{
m_lastProjectLibDir = dlg.GetPath(); m_lastProjectLibDir = dlg.GetPath();
}
const ENV_VAR_MAP& envVars = Pgm().GetLocalEnvVariables(); const ENV_VAR_MAP& envVars = Pgm().GetLocalEnvVariables();
bool addDuplicates = false; bool addDuplicates = false;
@ -525,10 +539,7 @@ void PANEL_SYM_LIB_TABLE::browseLibrariesHandler( wxCommandEvent& event )
m_cur_grid->SetCellValue( last_row, COL_NICKNAME, nickname ); m_cur_grid->SetCellValue( last_row, COL_NICKNAME, nickname );
// TODO the following code can detect only schematic types, not libs // attempt to auto-detect the plugin type
// SCH_IO_MGR needs to provide file extension information for libraries too
// auto detect the plugin type
for( SCH_IO_MGR::SCH_FILE_T piType : SCH_IO_MGR::SCH_FILE_T_vector ) for( SCH_IO_MGR::SCH_FILE_T piType : SCH_IO_MGR::SCH_FILE_T_vector )
{ {
if( SCH_IO_MGR::GetLibraryFileExtension( piType ).Lower() == fn.GetExt().Lower() ) if( SCH_IO_MGR::GetLibraryFileExtension( piType ).Lower() == fn.GetExt().Lower() )