Commit 12229246 authored by jean-pierre charras's avatar jean-pierre charras

Eeschema: Fix some issues (all connections showed as not connected, DRC and...

Eeschema: Fix some issues (all connections showed as not connected, DRC and NETLIST errors if all sheets in a hierarchy were not open) due to the fact the pointer of a schematic component to its part lib was calculated too late (or never calculated).
parent 188954f2
...@@ -277,6 +277,13 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in ...@@ -277,6 +277,13 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
LoadProjectFile(); LoadProjectFile();
// load the libraries here, not in SCH_SCREEN::Draw() which is a context
// that will not tolerate DisplayError() dialog since we're already in an
// event handler in there.
// And when a schematic file is loaded, we need these libs to initialize
// some parameters (links to PART LIB, dangling ends ...)
Prj().SchLibs();
if( is_new ) if( is_new )
{ {
// mark new, unsaved file as modified. // mark new, unsaved file as modified.
...@@ -302,15 +309,6 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in ...@@ -302,15 +309,6 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
Zoom_Automatique( false ); Zoom_Automatique( false );
SetSheetNumberAndCount(); SetSheetNumberAndCount();
/* this is done in ReDraw()
UpdateTitle();
*/
// load the libraries here, not in SCH_SCREEN::Draw() which is a context
// that will not tolerate DisplayError() dialog since we're already in an
// event handler in there.
Prj().SchLibs();
m_canvas->Refresh( true ); m_canvas->Refresh( true );
return true; return true;
...@@ -363,6 +361,7 @@ bool SCH_EDIT_FRAME::AppendOneEEProject() ...@@ -363,6 +361,7 @@ bool SCH_EDIT_FRAME::AppendOneEEProject()
// load the project // load the project
bool success = LoadOneEEFile( screen, fullFileName, true ); bool success = LoadOneEEFile( screen, fullFileName, true );
if( success ) if( success )
{ {
// load sub-sheets // load sub-sheets
......
...@@ -260,6 +260,7 @@ again." ); ...@@ -260,6 +260,7 @@ again." );
aScreen->Show( 0, std::cout ); aScreen->Show( 0, std::cout );
#endif #endif
aScreen->BuildSchCmpLinksToLibCmp(); // Build links between each components and its part lib LIB_PART
aScreen->TestDanglingEnds(); aScreen->TestDanglingEnds();
msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) ); msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) );
......
...@@ -546,13 +546,11 @@ bool SCH_SCREEN::Save( FILE* aFile ) const ...@@ -546,13 +546,11 @@ bool SCH_SCREEN::Save( FILE* aFile ) const
return true; return true;
} }
void SCH_SCREEN::BuildSchCmpLinksToLibCmp()
void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor )
{ {
/* note: SCH_SCREEN::Draw is useful only for schematic. // Initialize or reinitialize the pointer to the LIB_PART for each component
* library editor and library viewer do not use m_drawList, and therefore // found in m_drawList, but only if needed (change in lib or schematic)
* their SCH_SCREEN::Draw() draws nothing // therefore the calculation time is usually very low.
*/
if( m_drawList.GetCount() ) if( m_drawList.GetCount() )
{ {
...@@ -571,6 +569,18 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode ...@@ -571,6 +569,18 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode
m_modification_sync = mod_hash; // note the last mod_hash m_modification_sync = mod_hash; // note the last mod_hash
} }
} }
}
void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor )
{
/* note: SCH_SCREEN::Draw is useful only for schematic.
* library editor and library viewer do not use m_drawList, and therefore
* their SCH_SCREEN::Draw() draws nothing
*/
BuildSchCmpLinksToLibCmp();
for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() )
{ {
...@@ -592,6 +602,8 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode ...@@ -592,6 +602,8 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode
*/ */
void SCH_SCREEN::Plot( PLOTTER* aPlotter ) void SCH_SCREEN::Plot( PLOTTER* aPlotter )
{ {
BuildSchCmpLinksToLibCmp();
for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() )
{ {
aPlotter->SetCurrentLineWidth( item->GetPenSize() ); aPlotter->SetCurrentLineWidth( item->GetPenSize() );
...@@ -1395,6 +1407,13 @@ void SCH_SCREENS::BuildScreenList( EDA_ITEM* aItem ) ...@@ -1395,6 +1407,13 @@ void SCH_SCREENS::BuildScreenList( EDA_ITEM* aItem )
if( aItem && aItem->Type() == SCH_SCREEN_T ) if( aItem && aItem->Type() == SCH_SCREEN_T )
{ {
SCH_SCREEN* screen = (SCH_SCREEN*) aItem; SCH_SCREEN* screen = (SCH_SCREEN*) aItem;
// Ensure each component has its pointer to its part lib LIB_PART
// up to date (the cost is low if this is the case)
// We do this update here, because most of time this function is called
// to create a netlist, or an ERC, which need this update
screen->BuildSchCmpLinksToLibCmp();
AddScreenToList( screen ); AddScreenToList( screen );
EDA_ITEM* strct = screen->GetDrawItems(); EDA_ITEM* strct = screen->GetDrawItems();
......
...@@ -193,6 +193,16 @@ public: ...@@ -193,6 +193,16 @@ public:
void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { }; void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { };
/**
* Initialize or reinitialize the pointer
* to the LIB_PART for each component found in m_drawList
* must be called:
* in Draw function
* when loading a schematic file
* before creating a netlist (in case a library is modified)
*/
void BuildSchCmpLinksToLibCmp();
/** /**
* Function Draw * Function Draw
* draws all the items in the screen to \a aCanvas. * draws all the items in the screen to \a aCanvas.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment