dialog_edit_components_libid: shows orphan components (components with no symbol found in library)

This commit is contained in:
jean-pierre charras 2017-11-21 18:06:37 +01:00
parent 8de70f3dd0
commit 656d4d0dff
3 changed files with 35 additions and 7 deletions

View File

@ -48,12 +48,14 @@ public:
SCH_SCREEN* m_Screen; // the screen where m_Component lives SCH_SCREEN* m_Screen; // the screen where m_Component lives
wxString m_Reference; // the schematic reference, only to display it in list wxString m_Reference; // the schematic reference, only to display it in list
wxString m_InitialLibId; // the Lib Id of the component before any change wxString m_InitialLibId; // the Lib Id of the component before any change
bool m_IsOrphan; // true if a component has no corresponding symbol found in libs
CMP_CANDIDATE( SCH_COMPONENT* aComponent ) CMP_CANDIDATE( SCH_COMPONENT* aComponent )
{ {
m_Component = aComponent; m_Component = aComponent;
m_InitialLibId = m_Component->GetLibId().Format(); m_InitialLibId = m_Component->GetLibId().Format();
m_Row = -1; m_Row = -1;
m_IsOrphan = false;
} }
// Returns a string like mylib:symbol_name from the LIB_ID of the component // Returns a string like mylib:symbol_name from the LIB_ID of the component
@ -175,7 +177,10 @@ void DIALOG_EDIT_COMPONENTS_LIBID::initDlg()
// the list is larger and looks like it contains all components // the list is larger and looks like it contains all components
SCH_SHEET_LIST sheets( g_RootSheet ); SCH_SHEET_LIST sheets( g_RootSheet );
SCH_REFERENCE_LIST references; SCH_REFERENCE_LIST references;
sheets.GetComponents( references ); // build the full list of components including component having no symbol in loaded libs
// (orphan components)
sheets.GetComponents( references, /* include power symbols */true,
/* include orphan components */true );
for( unsigned ii = 0; ii < references.GetCount(); ii++ ) for( unsigned ii = 0; ii < references.GetCount(); ii++ )
{ {
@ -191,6 +196,7 @@ void DIALOG_EDIT_COMPONENTS_LIBID::initDlg()
// (can be 0 if the symbol is not found) // (can be 0 if the symbol is not found)
int unit = candidate.m_Component->GetUnitSelection( &sheetpath ); int unit = candidate.m_Component->GetUnitSelection( &sheetpath );
int unitcount = candidate.m_Component->GetUnitCount(); int unitcount = candidate.m_Component->GetUnitCount();
candidate.m_IsOrphan = unitcount == 0;
if( unitcount > 1 || unit > 1 ) if( unitcount > 1 || unit > 1 )
{ {
@ -211,6 +217,7 @@ void DIALOG_EDIT_COMPONENTS_LIBID::initDlg()
wxString last_str_libid = m_components.front().GetStringLibId(); wxString last_str_libid = m_components.front().GetStringLibId();
int row = 0; int row = 0;
wxString refs; wxString refs;
bool mark_cell = false;
for( unsigned ii = 0; ii < m_components.size(); ii++ ) for( unsigned ii = 0; ii < m_components.size(); ii++ )
{ {
@ -220,6 +227,7 @@ void DIALOG_EDIT_COMPONENTS_LIBID::initDlg()
if( last_str_libid != str_libid || ii == m_components.size()-1 ) if( last_str_libid != str_libid || ii == m_components.size()-1 )
{ {
if( ii == m_components.size()-1 ) if( ii == m_components.size()-1 )
{ {
if( !refs.IsEmpty() ) if( !refs.IsEmpty() )
@ -227,6 +235,7 @@ void DIALOG_EDIT_COMPONENTS_LIBID::initDlg()
refs += cmp.GetSchematicReference(); refs += cmp.GetSchematicReference();
cmp.m_Row = row; cmp.m_Row = row;
mark_cell = cmp.m_IsOrphan;
last_str_libid = str_libid; last_str_libid = str_libid;
} }
@ -240,10 +249,19 @@ void DIALOG_EDIT_COMPONENTS_LIBID::initDlg()
m_grid->SetCellValue( row, COL_CURR_LIBID, last_str_libid ); m_grid->SetCellValue( row, COL_CURR_LIBID, last_str_libid );
m_grid->SetReadOnly( row, COL_CURR_LIBID ); m_grid->SetReadOnly( row, COL_CURR_LIBID );
if( mark_cell ) // A symbol is not existing in libraries: mark the cell
{
wxFont font = m_grid->GetDefaultCellFont();
font.MakeBold();
font.MakeItalic();
m_grid->SetCellFont( row, COL_CURR_LIBID, font );
}
m_grid->SetCellRenderer( row, COL_REFS, new wxGridCellAutoWrapStringRenderer); m_grid->SetCellRenderer( row, COL_REFS, new wxGridCellAutoWrapStringRenderer);
m_grid->AutoSizeRow( row, false ); m_grid->AutoSizeRow( row, false );
// prepare next entry // prepare next entry
mark_cell = cmp.m_IsOrphan;
last_str_libid = str_libid; last_str_libid = str_libid;
refs.Empty(); refs.Empty();
row++; row++;

View File

@ -182,7 +182,8 @@ void SCH_SHEET_PATH::UpdateAllScreenReferences()
void SCH_SHEET_PATH::GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols ) void SCH_SHEET_PATH::GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols,
bool aForceIncludeOrphanComponents )
{ {
for( SCH_ITEM* item = LastDrawList(); item; item = item->Next() ) for( SCH_ITEM* item = LastDrawList(); item; item = item->Next() )
{ {
@ -197,7 +198,7 @@ void SCH_SHEET_PATH::GetComponents( SCH_REFERENCE_LIST& aReferences, bool aInclu
LIB_PART* part = component->GetPartRef().lock().get(); LIB_PART* part = component->GetPartRef().lock().get();
if( part ) if( part || aForceIncludeOrphanComponents )
{ {
SCH_REFERENCE reference( component, part, *this ); SCH_REFERENCE reference( component, part, *this );
@ -588,10 +589,11 @@ void SCH_SHEET_LIST::AnnotatePowerSymbols()
} }
void SCH_SHEET_LIST::GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols ) void SCH_SHEET_LIST::GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols,
bool aForceIncludeOrphanComponents )
{ {
for( SCH_SHEET_PATHS_ITER it = begin(); it != end(); ++it ) for( SCH_SHEET_PATHS_ITER it = begin(); it != end(); ++it )
(*it).GetComponents( aReferences, aIncludePowerSymbols ); (*it).GetComponents( aReferences, aIncludePowerSymbols, aForceIncludeOrphanComponents );
} }
void SCH_SHEET_LIST::GetMultiUnitComponents( SCH_MULTI_UNIT_REFERENCE_MAP &aRefList, void SCH_SHEET_LIST::GetMultiUnitComponents( SCH_MULTI_UNIT_REFERENCE_MAP &aRefList,

View File

@ -207,8 +207,12 @@ public:
* *
* @param aReferences List of references to populate. * @param aReferences List of references to populate.
* @param aIncludePowerSymbols : false to only get normal components. * @param aIncludePowerSymbols : false to only get normal components.
* @param aForceIncludeOrphanComponents : true to include components having no symbol found in lib.
* ( orphan components)
* The normal option is false, and set to true only to build the full list of components.
*/ */
void GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols = true ); void GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols = true,
bool aForceIncludeOrphanComponents = false );
/** /**
* Function GetMultiUnitComponents * Function GetMultiUnitComponents
@ -373,8 +377,12 @@ public:
* *
* @param aReferences List of references to populate. * @param aReferences List of references to populate.
* @param aIncludePowerSymbols Set to false to only get normal components. * @param aIncludePowerSymbols Set to false to only get normal components.
* @param aForceIncludeOrphanComponents : true to include components having no symbol found in lib.
* ( orphan components)
* The normal option is false, and set to true only to build the full list of components.
*/ */
void GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols = true ); void GetComponents( SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols = true,
bool aForceIncludeOrphanComponents = false );
/** /**
* Function GetMultiUnitComponents * Function GetMultiUnitComponents