Eeschema: move get multi-unit components from SCH_SHEET_PATH to SCH_SHEET.
This commit is contained in:
parent
8e8e126dcd
commit
ac30be332f
|
@ -34,6 +34,7 @@
|
||||||
#include <schframe.h>
|
#include <schframe.h>
|
||||||
|
|
||||||
#include <class_library.h>
|
#include <class_library.h>
|
||||||
|
#include <sch_reference_list.h>
|
||||||
#include <sch_sheet.h>
|
#include <sch_sheet.h>
|
||||||
#include <sch_sheet_path.h>
|
#include <sch_sheet_path.h>
|
||||||
|
|
||||||
|
@ -93,11 +94,11 @@ void SCH_EDIT_FRAME::AnnotateComponents( bool aAnnotateSchematic,
|
||||||
{
|
{
|
||||||
if( aAnnotateSchematic )
|
if( aAnnotateSchematic )
|
||||||
{
|
{
|
||||||
sheets.GetMultiUnitComponents( Prj().SchLibs(), lockedComponents );
|
g_RootSheet->GetMultiUnitComponents( Prj().SchLibs(), lockedComponents );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_CurrentSheet->GetMultiUnitComponents( Prj().SchLibs(), lockedComponents );
|
m_CurrentSheet->Last()->GetMultiUnitComponents( Prj().SchLibs(), lockedComponents );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -736,6 +736,24 @@ SCH_REFERENCE::SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_PART* aLibComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SCH_REFERENCE::CompareLibName( const SCH_REFERENCE& item ) const
|
||||||
|
{
|
||||||
|
return Cmp_KEEPCASE( m_RootCmp->GetPartName(), item.m_RootCmp->GetPartName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SCH_REFERENCE::IsSameInstance( const SCH_REFERENCE& other ) const
|
||||||
|
{
|
||||||
|
return GetComp() == other.GetComp() && GetSheet()->GetPath() == other.GetSheet()->GetPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SCH_REFERENCE::IsUnitsLocked() const
|
||||||
|
{
|
||||||
|
return m_Entry->UnitsLocked();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_REFERENCE::Annotate()
|
void SCH_REFERENCE::Annotate()
|
||||||
{
|
{
|
||||||
if( m_NumRef < 0 )
|
if( m_NumRef < 0 )
|
||||||
|
|
|
@ -35,12 +35,13 @@
|
||||||
#include <macros.h>
|
#include <macros.h>
|
||||||
|
|
||||||
#include <class_libentry.h>
|
#include <class_libentry.h>
|
||||||
#include <sch_sheet.h>
|
|
||||||
#include <sch_component.h>
|
|
||||||
#include <sch_text.h>
|
#include <sch_text.h>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
|
class SCH_SHEET;
|
||||||
|
class SCH_COMPONENT;
|
||||||
class SCH_REFERENCE_LIST;
|
class SCH_REFERENCE_LIST;
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,8 +91,7 @@ public:
|
||||||
m_SheetNum = 0;
|
m_SheetNum = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_PART* aLibComponent,
|
SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_PART* aLibComponent, SCH_SHEET* aSheet );
|
||||||
SCH_SHEET* aSheet );
|
|
||||||
|
|
||||||
SCH_COMPONENT* GetComp() const { return m_RootCmp; }
|
SCH_COMPONENT* GetComp() const { return m_RootCmp; }
|
||||||
|
|
||||||
|
@ -152,25 +152,16 @@ public:
|
||||||
return m_Ref.compare( item.m_Ref );
|
return m_Ref.compare( item.m_Ref );
|
||||||
}
|
}
|
||||||
|
|
||||||
int CompareLibName( const SCH_REFERENCE& item ) const
|
int CompareLibName( const SCH_REFERENCE& item ) const;
|
||||||
{
|
|
||||||
return Cmp_KEEPCASE( m_RootCmp->GetPartName(), item.m_RootCmp->GetPartName() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function IsSameInstance
|
* Function IsSameInstance
|
||||||
* returns whether this reference refers to the same component instance
|
* returns whether this reference refers to the same component instance
|
||||||
* (component and sheet) as another.
|
* (component and sheet) as another.
|
||||||
*/
|
*/
|
||||||
bool IsSameInstance( const SCH_REFERENCE& other ) const
|
bool IsSameInstance( const SCH_REFERENCE& other ) const;
|
||||||
{
|
|
||||||
return GetComp() == other.GetComp() && GetSheet()->GetPath() == other.GetSheet()->GetPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsUnitsLocked()
|
bool IsUnitsLocked() const;
|
||||||
{
|
|
||||||
return m_Entry->UnitsLocked();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
#include <sch_sheet_path.h>
|
#include <sch_sheet_path.h>
|
||||||
#include <sch_component.h>
|
#include <sch_component.h>
|
||||||
#include <class_netlist_object.h>
|
#include <class_netlist_object.h>
|
||||||
#include <sch_reference_list.h>
|
|
||||||
|
|
||||||
|
|
||||||
SCH_SHEET::SCH_SHEET( const wxPoint& pos ) :
|
SCH_SHEET::SCH_SHEET( const wxPoint& pos ) :
|
||||||
|
@ -1424,6 +1423,46 @@ SCH_ITEM& SCH_SHEET::operator=( const SCH_ITEM& aItem )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCH_SHEET::GetMultiUnitComponents( PART_LIBS* aLibs,
|
||||||
|
SCH_MULTI_UNIT_REFERENCE_MAP& aRefList,
|
||||||
|
bool aIncludePowerSymbols )
|
||||||
|
{
|
||||||
|
for( SCH_ITEM* item = m_screen->GetDrawItems(); item; item = item->Next() )
|
||||||
|
{
|
||||||
|
if( item->Type() == SCH_SHEET_T )
|
||||||
|
{
|
||||||
|
( (SCH_SHEET*) item )->GetMultiUnitComponents( aLibs, aRefList, aIncludePowerSymbols );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( item->Type() != SCH_COMPONENT_T )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
|
||||||
|
|
||||||
|
// Skip pseudo components, which have a reference starting with #. This mainly
|
||||||
|
// affects power symbols.
|
||||||
|
if( !aIncludePowerSymbols && component->GetRef( this )[0] == wxT( '#' ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
LIB_PART* part = aLibs->FindLibPart( component->GetPartName() );
|
||||||
|
|
||||||
|
if( part && part->GetUnitCount() > 1 )
|
||||||
|
{
|
||||||
|
SCH_REFERENCE reference = SCH_REFERENCE( component, part, this );
|
||||||
|
reference.SetSheetNumber( m_number );
|
||||||
|
wxString reference_str = reference.GetRef();
|
||||||
|
|
||||||
|
// Never lock unassigned references
|
||||||
|
if( reference_str[reference_str.Len() - 1] == '?' )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
aRefList[reference_str].AddItem( reference );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SCH_SHEET::operator<( const SCH_SHEET& aRhs ) const
|
bool SCH_SHEET::operator<( const SCH_SHEET& aRhs ) const
|
||||||
{
|
{
|
||||||
if( (*this - aRhs) < 0 )
|
if( (*this - aRhs) < 0 )
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <boost/ptr_container/ptr_vector.hpp>
|
#include <boost/ptr_container/ptr_vector.hpp>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <sch_text.h>
|
#include <sch_text.h>
|
||||||
|
#include <sch_reference_list.h>
|
||||||
|
|
||||||
|
|
||||||
class PART_LIBS;
|
class PART_LIBS;
|
||||||
|
@ -44,7 +45,6 @@ class SCH_SHEET_PATH;
|
||||||
class DANGLING_END_ITEM;
|
class DANGLING_END_ITEM;
|
||||||
class SCH_EDIT_FRAME;
|
class SCH_EDIT_FRAME;
|
||||||
class NETLIST_OBJECT_LIST;
|
class NETLIST_OBJECT_LIST;
|
||||||
class SCH_REFERENCE_LIST;
|
|
||||||
|
|
||||||
|
|
||||||
#define MIN_SHEET_WIDTH 500
|
#define MIN_SHEET_WIDTH 500
|
||||||
|
@ -700,6 +700,19 @@ public:
|
||||||
void GetComponents( PART_LIBS* aLibs, SCH_REFERENCE_LIST& aReferences,
|
void GetComponents( PART_LIBS* aLibs, SCH_REFERENCE_LIST& aReferences,
|
||||||
bool aIncludePowerSymbols = true, bool aIncludeSubSheets = true );
|
bool aIncludePowerSymbols = true, bool aIncludeSubSheets = true );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetMultiUnitComponents
|
||||||
|
* adds a SCH_REFERENCE_LIST object to \a aRefList for each component with multiple units
|
||||||
|
* that has the same reference designator for this sheet and all of it's sub-sheets. The
|
||||||
|
* map key for each element will be the reference designator.
|
||||||
|
*
|
||||||
|
* @param aLibs a pointer to the #PART_LIB to use.
|
||||||
|
* @param aRefList Map of reference designators to reference lists
|
||||||
|
* @param aIncludePowerSymbols : false to only get normal components.
|
||||||
|
*/
|
||||||
|
void GetMultiUnitComponents( PART_LIBS* aLibs, SCH_MULTI_UNIT_REFERENCE_MAP& aRefList,
|
||||||
|
bool aIncludePowerSymbols = true );
|
||||||
|
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
void Show( int nestLevel, std::ostream& os ) const; // override
|
void Show( int nestLevel, std::ostream& os ) const; // override
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -227,47 +227,6 @@ wxString SCH_SHEET_PATH::PathHumanReadable() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_SHEET_PATH::GetMultiUnitComponents( PART_LIBS* aLibs,
|
|
||||||
SCH_MULTI_UNIT_REFERENCE_MAP& aRefList,
|
|
||||||
bool aIncludePowerSymbols )
|
|
||||||
{
|
|
||||||
// Find sheet path number
|
|
||||||
int sheetnumber = 1; // 1 = root
|
|
||||||
|
|
||||||
SCH_SHEET_LIST sheetList;
|
|
||||||
|
|
||||||
for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path; path = sheetList.GetNext(), sheetnumber++ )
|
|
||||||
{
|
|
||||||
if( Cmp( *path ) == 0 )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( SCH_ITEM* item = LastDrawList(); item; item = item->Next() )
|
|
||||||
{
|
|
||||||
if( item->Type() != SCH_COMPONENT_T ) continue;
|
|
||||||
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
|
|
||||||
|
|
||||||
// Skip pseudo components, which have a reference starting with #. This mainly
|
|
||||||
// affects power symbols.
|
|
||||||
if( !aIncludePowerSymbols && component->GetRef( Last() )[0] == wxT( '#' ) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
LIB_PART* part = aLibs->FindLibPart( component->GetPartName() );
|
|
||||||
if( part && part->GetUnitCount() > 1 )
|
|
||||||
{
|
|
||||||
SCH_REFERENCE reference = SCH_REFERENCE( component, part, Last() );
|
|
||||||
reference.SetSheetNumber( sheetnumber );
|
|
||||||
wxString reference_str = reference.GetRef();
|
|
||||||
|
|
||||||
// Never lock unassigned references
|
|
||||||
if( reference_str[reference_str.Len() - 1] == '?' ) continue;
|
|
||||||
|
|
||||||
aRefList[reference_str].AddItem( reference );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SCH_ITEM* SCH_SHEET_PATH::FindNextItem( KICAD_T aType, SCH_ITEM* aLastItem, bool aWrap ) const
|
SCH_ITEM* SCH_SHEET_PATH::FindNextItem( KICAD_T aType, SCH_ITEM* aLastItem, bool aWrap ) const
|
||||||
{
|
{
|
||||||
bool hasWrapped = false;
|
bool hasWrapped = false;
|
||||||
|
@ -595,29 +554,6 @@ void SCH_SHEET_LIST::BuildSheetList( SCH_SHEET* aSheet )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_SHEET_LIST::GetMultiUnitComponents( PART_LIBS* aLibs,
|
|
||||||
SCH_MULTI_UNIT_REFERENCE_MAP& aRefList,
|
|
||||||
bool aIncludePowerSymbols )
|
|
||||||
{
|
|
||||||
for( SCH_SHEET_PATH* path = GetFirst(); path; path = GetNext() )
|
|
||||||
{
|
|
||||||
SCH_MULTI_UNIT_REFERENCE_MAP tempMap;
|
|
||||||
path->GetMultiUnitComponents( aLibs, tempMap );
|
|
||||||
|
|
||||||
BOOST_FOREACH( SCH_MULTI_UNIT_REFERENCE_MAP::value_type& pair, tempMap )
|
|
||||||
{
|
|
||||||
// Merge this list into the main one
|
|
||||||
unsigned n_refs = pair.second.GetCount();
|
|
||||||
|
|
||||||
for( unsigned thisRef = 0; thisRef < n_refs; ++thisRef )
|
|
||||||
{
|
|
||||||
aRefList[pair.first].AddItem( pair.second[thisRef] );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SCH_ITEM* SCH_SHEET_LIST::FindNextItem( KICAD_T aType, SCH_SHEET_PATH** aSheetFoundIn,
|
SCH_ITEM* SCH_SHEET_LIST::FindNextItem( KICAD_T aType, SCH_SHEET_PATH** aSheetFoundIn,
|
||||||
SCH_ITEM* aLastItem, bool aWrap )
|
SCH_ITEM* aLastItem, bool aWrap )
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#define CLASS_DRAWSHEET_PATH_H
|
#define CLASS_DRAWSHEET_PATH_H
|
||||||
|
|
||||||
#include <base_struct.h>
|
#include <base_struct.h>
|
||||||
#include <sch_reference_list.h>
|
|
||||||
|
|
||||||
|
|
||||||
/** Info about complex hierarchies handling:
|
/** Info about complex hierarchies handling:
|
||||||
|
@ -81,10 +80,8 @@
|
||||||
|
|
||||||
class wxFindReplaceData;
|
class wxFindReplaceData;
|
||||||
class SCH_SCREEN;
|
class SCH_SCREEN;
|
||||||
class SCH_MARKER;
|
|
||||||
class SCH_SHEET;
|
class SCH_SHEET;
|
||||||
class SCH_ITEM;
|
class SCH_ITEM;
|
||||||
class PART_LIBS;
|
|
||||||
|
|
||||||
|
|
||||||
#define SHEET_NOT_FOUND -1
|
#define SHEET_NOT_FOUND -1
|
||||||
|
@ -211,18 +208,6 @@ public:
|
||||||
*/
|
*/
|
||||||
bool BuildSheetPathInfoFromSheetPathValue( const wxString& aPath, bool aFound = false );
|
bool BuildSheetPathInfoFromSheetPathValue( const wxString& aPath, bool aFound = false );
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetMultiUnitComponents
|
|
||||||
* adds a SCH_REFERENCE_LIST object to \a aRefList for each same-reference set of
|
|
||||||
* multi-unit parts in the sheet. The map key for each element will be the
|
|
||||||
* reference designator.
|
|
||||||
* @param aLibs the library list to use
|
|
||||||
* @param aRefList Map of reference designators to reference lists
|
|
||||||
* @param aIncludePowerSymbols : false to only get normal components.
|
|
||||||
*/
|
|
||||||
void GetMultiUnitComponents( PART_LIBS* aLibs, SCH_MULTI_UNIT_REFERENCE_MAP& aRefList,
|
|
||||||
bool aIncludePowerSymbols = true );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetFootprintField
|
* Function SetFootprintField
|
||||||
* searches last sheet in the path for a component with \a aReference and set the footprint
|
* searches last sheet in the path for a component with \a aReference and set the footprint
|
||||||
|
@ -400,18 +385,6 @@ public:
|
||||||
*/
|
*/
|
||||||
SCH_SHEET_PATH* GetSheetByPath( const wxString aPath, bool aHumanReadable = true );
|
SCH_SHEET_PATH* GetSheetByPath( const wxString aPath, bool aHumanReadable = true );
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetMultiUnitComponents
|
|
||||||
* adds a SCH_REFERENCE_LIST object to \a aRefList for each same-reference set of
|
|
||||||
* multi-unit parts in the list of sheets. The map key for each element will be the
|
|
||||||
* reference designator.
|
|
||||||
* @param aLibs the library list to use
|
|
||||||
* @param aRefList Map of reference designators to reference lists
|
|
||||||
* @param aIncludePowerSymbols Set to false to only get normal components.
|
|
||||||
*/
|
|
||||||
void GetMultiUnitComponents( PART_LIBS* aLibs, SCH_MULTI_UNIT_REFERENCE_MAP& aRefList,
|
|
||||||
bool aIncludePowerSymbols = true );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function FindNextItem
|
* Function FindNextItem
|
||||||
* searches the entire schematic for the next schematic object.
|
* searches the entire schematic for the next schematic object.
|
||||||
|
|
Loading…
Reference in New Issue