diff --git a/eeschema/fields_grid_table.cpp b/eeschema/fields_grid_table.cpp index c23e175d72..9a3b1257f9 100644 --- a/eeschema/fields_grid_table.cpp +++ b/eeschema/fields_grid_table.cpp @@ -1193,16 +1193,14 @@ void FIELDS_GRID_TRICKS::showPopupMenu( wxMenu& menu, wxGridEvent& aEvent ) && m_grid->GetGridCursorCol() == FDC_VALUE && !m_grid->IsReadOnly( getFieldRow( FIELD_T::FOOTPRINT ), FDC_VALUE ) ) { - menu.Append( MYID_SELECT_FOOTPRINT, _( "Select Footprint..." ), - _( "Browse for footprint" ) ); + menu.Append( MYID_SELECT_FOOTPRINT, _( "Select Footprint..." ), _( "Browse for footprint" ) ); menu.AppendSeparator(); } else if( m_grid->GetGridCursorRow() == getFieldRow( FIELD_T::DATASHEET ) && m_grid->GetGridCursorCol() == FDC_VALUE && !m_grid->IsReadOnly( getFieldRow( FIELD_T::DATASHEET ), FDC_VALUE ) ) { - menu.Append( MYID_SHOW_DATASHEET, _( "Show Datasheet" ), - _( "Show datasheet in browser" ) ); + menu.Append( MYID_SHOW_DATASHEET, _( "Show Datasheet" ), _( "Show datasheet in browser" ) ); menu.AppendSeparator(); } diff --git a/eeschema/lib_symbol.cpp b/eeschema/lib_symbol.cpp index 957a5b5850..6213f9eb9a 100644 --- a/eeschema/lib_symbol.cpp +++ b/eeschema/lib_symbol.cpp @@ -162,6 +162,11 @@ void LIB_SYMBOL::GetChooserFields( std::map& aColumnMap ) if( field->ShowInChooser() ) aColumnMap[field->GetName()] = field->EDA_TEXT::GetShownText( false ); } + + // If the user has a field named "Keywords", then prefer that. Otherwise add the KiCad + // keywords. + if( !aColumnMap.contains( _( "Keywords" ) ) ) + aColumnMap[_( "Keywords" )] = GetShownKeyWords(); } diff --git a/eeschema/netlist_exporters/netlist_exporter_xml.cpp b/eeschema/netlist_exporters/netlist_exporter_xml.cpp index 749f5e5cc1..ede4f0f9b1 100644 --- a/eeschema/netlist_exporters/netlist_exporter_xml.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_xml.cpp @@ -154,17 +154,15 @@ void NETLIST_EXPORTER_XML::addSymbolFields( XNODE* aNode, SCH_SYMBOL* aSymbol, footprint = candidate; // Datasheet - candidate = m_resolveTextVars - ? symbol2->GetField( FIELD_T::DATASHEET )->GetShownText( &sheet, false ) - : symbol2->GetField( FIELD_T::DATASHEET )->GetText(); + candidate = m_resolveTextVars ? symbol2->GetField( FIELD_T::DATASHEET )->GetShownText( &sheet, false ) + : symbol2->GetField( FIELD_T::DATASHEET )->GetText(); if( !candidate.IsEmpty() && ( unit < minUnit || datasheet.IsEmpty() ) ) datasheet = candidate; // Description - candidate = m_resolveTextVars - ? symbol2->GetField( FIELD_T::DESCRIPTION )->GetShownText( &sheet, false ) - : symbol2->GetField( FIELD_T::DESCRIPTION )->GetText(); + candidate = m_resolveTextVars ? symbol2->GetField( FIELD_T::DESCRIPTION )->GetShownText( &sheet, false ) + : symbol2->GetField( FIELD_T::DESCRIPTION )->GetText(); if( !candidate.IsEmpty() && ( unit < minUnit || description.IsEmpty() ) ) description = candidate; diff --git a/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr.cpp b/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr.cpp index 5c43a2bad2..767b5414e8 100644 --- a/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr.cpp +++ b/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr.cpp @@ -1769,16 +1769,20 @@ bool SCH_IO_KICAD_SEXPR::DeleteLibrary( const wxString& aLibraryPath, if( !fn.IsDir() ) { if( wxRemove( aLibraryPath ) ) + { THROW_IO_ERROR( wxString::Format( _( "Symbol library file '%s' cannot be deleted." ), aLibraryPath.GetData() ) ); + } } else { // This may be overly agressive. Perhaps in the future we should remove all of the *.kicad_sym // files and only delete the folder if it's empty. if( !fn.Rmdir( wxPATH_RMDIR_RECURSIVE ) ) + { THROW_IO_ERROR( wxString::Format( _( "Symbol library folder '%s' cannot be deleted." ), fn.GetPath() ) ); + } } if( m_cache && m_cache->IsFile( aLibraryPath ) ) @@ -1791,8 +1795,7 @@ bool SCH_IO_KICAD_SEXPR::DeleteLibrary( const wxString& aLibraryPath, } -void SCH_IO_KICAD_SEXPR::SaveLibrary( const wxString& aLibraryPath, - const std::map* aProperties ) +void SCH_IO_KICAD_SEXPR::SaveLibrary( const wxString& aLibraryPath, const std::map* aProperties ) { if( !m_cache ) m_cache = new SCH_IO_KICAD_SEXPR_LIB_CACHE( aLibraryPath ); @@ -1843,18 +1846,11 @@ void SCH_IO_KICAD_SEXPR::GetAvailableSymbolFields( std::vector& aNames for( LIB_SYMBOL_MAP::const_iterator it = symbols.begin(); it != symbols.end(); ++it ) { - std::vector fields; - it->second->GetFields( fields ); + std::map chooserFields; + it->second->GetChooserFields( chooserFields ); - for( SCH_FIELD* field : fields ) - { - if( field->IsMandatory() ) - continue; - - // TODO(JE): enable configurability of this outside database libraries? - // if( field->ShowInChooser() ) - fieldNames.insert( field->GetName() ); - } + for( const auto& [name, value] : chooserFields ) + fieldNames.insert( name ); } std::copy( fieldNames.begin(), fieldNames.end(), std::back_inserter( aNames ) ); @@ -1867,8 +1863,7 @@ void SCH_IO_KICAD_SEXPR::GetDefaultSymbolFields( std::vector& aNames ) } -std::vector SCH_IO_KICAD_SEXPR::ParseLibSymbols( std::string& aSymbolText, - std::string aSource, +std::vector SCH_IO_KICAD_SEXPR::ParseLibSymbols( std::string& aSymbolText, std::string aSource, int aFileVersion ) { LIB_SYMBOL* newSymbol = nullptr; diff --git a/eeschema/symbol_tree_model_adapter.cpp b/eeschema/symbol_tree_model_adapter.cpp index 139ffa6322..dd0a555cff 100644 --- a/eeschema/symbol_tree_model_adapter.cpp +++ b/eeschema/symbol_tree_model_adapter.cpp @@ -54,12 +54,9 @@ SYMBOL_TREE_MODEL_ADAPTER::SYMBOL_TREE_MODEL_ADAPTER( SCH_BASE_FRAME* aParent, S { m_colWidths[ GetDefaultFieldName( FIELD_T::VALUE, false ) ] = 300; m_colWidths[ GetDefaultFieldName( FIELD_T::FOOTPRINT, false ) ] = 600; - m_colWidths[ GetDefaultFieldName( FIELD_T::DATASHEET, false ) ] = 600; m_availableColumns.emplace_back( GetDefaultFieldName( FIELD_T::VALUE, false ) ); m_availableColumns.emplace_back( GetDefaultFieldName( FIELD_T::FOOTPRINT, false ) ); - // Datasheet probably isn't useful, but better to leave that decision to the user: - m_availableColumns.emplace_back( GetDefaultFieldName( FIELD_T::DATASHEET, false ) ); }