Browse Source

Don't assume SCH_SYMBOLs have a LIB_SYMBOL when resolving embedded files

Fixes https://gitlab.com/kicad/code/kicad/-/issues/21497
pull/18/head
JamesJCode 2 months ago
parent
commit
ee9e94df04
  1. 3
      eeschema/dialogs/dialog_sim_model.cpp
  2. 4
      eeschema/sch_edit_frame.cpp
  3. 4
      eeschema/sch_field.cpp
  4. 8
      eeschema/sch_item.cpp
  5. 7
      eeschema/sch_symbol.cpp
  6. 3
      eeschema/sim/sim_model.cpp
  7. 4
      eeschema/sim/simulator_frame_ui.cpp
  8. 6
      eeschema/tools/sch_editor_control.cpp

3
eeschema/dialogs/dialog_sim_model.cpp

@ -88,7 +88,8 @@ DIALOG_SIM_MODEL<T>::DIALOG_SIM_MODEL( wxWindow* aParent, EDA_BASE_FRAME* aFrame
m_filesStack.push_back( symbol->Schematic()->GetEmbeddedFiles() );
}
m_filesStack.push_back( aSymbol.GetEmbeddedFiles() );
if( EMBEDDED_FILES* symbolEmbeddedFiles = aSymbol.GetEmbeddedFiles() )
m_filesStack.push_back( symbolEmbeddedFiles );
m_libraryModelsMgr.SetFilesStack( m_filesStack );
m_builtinModelsMgr.SetFilesStack( m_filesStack );

4
eeschema/sch_edit_frame.cpp

@ -1488,7 +1488,9 @@ void SCH_EDIT_FRAME::RefreshOperatingPointDisplay()
{
std::vector<EMBEDDED_FILES*> embeddedFilesStack;
embeddedFilesStack.push_back( m_schematic->GetEmbeddedFiles() );
embeddedFilesStack.push_back( symbol->GetEmbeddedFiles() );
if( EMBEDDED_FILES* symbolEmbeddedFiles = symbol->GetEmbeddedFiles() )
embeddedFilesStack.push_back( symbolEmbeddedFiles );
simLibMgr.SetFilesStack( std::move( embeddedFilesStack ) );

4
eeschema/sch_field.cpp

@ -741,7 +741,9 @@ void SCH_FIELD::OnScintillaCharAdded( SCINTILLA_TRICKS* aScintillaTricks,
std::vector<EMBEDDED_FILES*> embeddedFilesStack;
embeddedFilesStack.push_back( schematic->GetEmbeddedFiles() );
embeddedFilesStack.push_back( symbol->GetEmbeddedFiles() );
if( EMBEDDED_FILES* symbolEmbeddedFiles = symbol->GetEmbeddedFiles() )
embeddedFilesStack.push_back( symbolEmbeddedFiles );
mgr.SetFilesStack( std::move( embeddedFilesStack ) );

8
eeschema/sch_item.cpp

@ -685,8 +685,12 @@ const std::vector<wxString>* SCH_ITEM::GetEmbeddedFonts()
{
if( SCHEMATIC* schematic = Schematic() )
return schematic->GetEmbeddedFiles()->GetFontFiles();
else if( SYMBOL* symbol = GetParentSymbol() )
return symbol->GetEmbeddedFiles()->UpdateFontFiles();
if( SYMBOL* symbol = GetParentSymbol() )
{
if( EMBEDDED_FILES* symbolEmbeddedFiles = symbol->GetEmbeddedFiles() )
return symbolEmbeddedFiles->UpdateFontFiles();
}
return nullptr;
}

7
eeschema/sch_symbol.cpp

@ -1977,6 +1977,11 @@ BITMAPS SCH_SYMBOL::GetMenuImage() const
EMBEDDED_FILES* SCH_SYMBOL::GetEmbeddedFiles()
{
std::unique_ptr<LIB_SYMBOL>& libSymbolRef = GetLibSymbolRef();
if( !libSymbolRef )
return nullptr;
return GetLibSymbolRef()->GetEmbeddedFiles();
}
@ -1991,7 +1996,7 @@ void SCH_SYMBOL::MirrorHorizontally( int aCenter )
for( SCH_FIELD& field : m_fields )
{
// Move the fields to the new position because the symbol itself has moved.
// Move the fields to the new position because the sy:Qmbol itself has moved.
VECTOR2I pos = field.GetTextPos();
pos.x -= dx;
field.SetTextPos( pos );

3
eeschema/sim/sim_model.cpp

@ -1689,7 +1689,8 @@ void SIM_MODEL::MigrateSimModel( T& aSymbol, const PROJECT* aProject )
embeddedFilesStack.push_back( symbol->Schematic()->GetEmbeddedFiles() );
}
embeddedFilesStack.push_back( aSymbol.GetEmbeddedFiles() );
if( EMBEDDED_FILES* symbolEmbeddedFiles = aSymbol.GetEmbeddedFiles() )
embeddedFilesStack.push_back( symbolEmbeddedFiles );
libMgr.SetFilesStack( std::move( embeddedFilesStack ) );

4
eeschema/sim/simulator_frame_ui.cpp

@ -1666,7 +1666,9 @@ void SIMULATOR_FRAME_UI::UpdateTunerValue( const SCH_SHEET_PATH& aSheetPath, con
std::vector<EMBEDDED_FILES*> embeddedFilesStack;
embeddedFilesStack.push_back( m_schematicFrame->Schematic().GetEmbeddedFiles() );
embeddedFilesStack.push_back( symbol->GetEmbeddedFiles() );
if( EMBEDDED_FILES* symbolEmbeddedFiles = symbol->GetEmbeddedFiles() )
embeddedFilesStack.push_back( symbolEmbeddedFiles );
mgr.SetFilesStack( std::move( embeddedFilesStack ) );

6
eeschema/tools/sch_editor_control.cpp

@ -540,7 +540,11 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
std::vector<EMBEDDED_FILES*> embeddedFilesStack;
embeddedFilesStack.push_back( m_frame->Schematic().GetEmbeddedFiles() );
embeddedFilesStack.push_back( symbol->GetEmbeddedFiles() );
EMBEDDED_FILES* symbolEmbeddedFile = symbol->GetEmbeddedFiles();
if( symbolEmbeddedFile )
embeddedFilesStack.push_back( symbolEmbeddedFile );
mgr.SetFilesStack( std::move( embeddedFilesStack ) );

Loading…
Cancel
Save