Clean exposure of CONNECTION_SUBGRAPH
Removes internals from public consumption.
This commit is contained in:
parent
d545216432
commit
48740dd3f8
|
@ -81,17 +81,19 @@ public:
|
|||
m_multiple_drivers( false ),
|
||||
m_strong_driver( false ),
|
||||
m_local_driver( false ),
|
||||
m_no_connect( nullptr ),
|
||||
m_bus_entry( nullptr ),
|
||||
m_driver( nullptr ),
|
||||
m_driver_connection( nullptr ),
|
||||
m_hier_parent( nullptr ),
|
||||
m_driver( nullptr ),
|
||||
m_first_driver( nullptr ),
|
||||
m_second_driver( nullptr )
|
||||
m_second_driver( nullptr ),
|
||||
m_no_connect( nullptr ),
|
||||
m_driver_connection( nullptr )
|
||||
{}
|
||||
|
||||
~CONNECTION_SUBGRAPH() = default;
|
||||
|
||||
friend class CONNECTION_GRAPH;
|
||||
|
||||
/**
|
||||
* Determines which potential driver should drive the subgraph.
|
||||
*
|
||||
|
@ -125,6 +127,12 @@ public:
|
|||
/// Updates all items to match the driver connection
|
||||
void UpdateItemConnections();
|
||||
|
||||
/// Provides a read-only reference to the items in the subgraph
|
||||
const std::vector<SCH_ITEM*>& GetItems() const
|
||||
{
|
||||
return m_items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the priority (higher is more important) of a candidate driver
|
||||
*
|
||||
|
@ -149,10 +157,39 @@ public:
|
|||
return PRIORITY::NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return pointer to the SCH_ITEM whose name sets the subgraph netname.
|
||||
* N.B. This item may not be in the subgraph
|
||||
*/
|
||||
const SCH_ITEM* GetDriver() const
|
||||
{
|
||||
return m_driver;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SCH_CONNECTION object for m_driver on m_sheet
|
||||
*/
|
||||
const SCH_CONNECTION* GetDriverConnection() const
|
||||
{
|
||||
return m_driver_connection;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return pointer to the item causing a no-connect or nullptr if none
|
||||
*/
|
||||
const SCH_ITEM* GetNoConnect() const
|
||||
{
|
||||
return m_no_connect;
|
||||
}
|
||||
|
||||
const SCH_SHEET_PATH& GetSheet() const
|
||||
{
|
||||
return m_sheet;
|
||||
}
|
||||
|
||||
private:
|
||||
wxString driverName( SCH_ITEM* aItem ) const;
|
||||
|
||||
public:
|
||||
CONNECTION_GRAPH* m_graph;
|
||||
|
||||
bool m_dirty;
|
||||
|
@ -178,23 +215,11 @@ public:
|
|||
/// True if the driver is a local (i.e. non-global) type
|
||||
bool m_local_driver;
|
||||
|
||||
/// No-connect item in graph, if any
|
||||
SCH_ITEM* m_no_connect;
|
||||
|
||||
/// Bus entry in graph, if any
|
||||
SCH_ITEM* m_bus_entry;
|
||||
|
||||
std::vector<SCH_ITEM*> m_items;
|
||||
|
||||
std::vector<SCH_ITEM*> m_drivers;
|
||||
|
||||
SCH_ITEM* m_driver;
|
||||
|
||||
SCH_SHEET_PATH m_sheet;
|
||||
|
||||
/// Cache for driver connection
|
||||
SCH_CONNECTION* m_driver_connection;
|
||||
|
||||
/**
|
||||
* If a subgraph is a bus, this map contains links between the bus members and any
|
||||
* local sheet neighbors with the same connection name.
|
||||
|
@ -226,6 +251,9 @@ public:
|
|||
/// A cache of escaped netnames from schematic items
|
||||
mutable std::unordered_map<SCH_ITEM*, wxString> m_driver_name_cache;
|
||||
|
||||
/// Fully-resolved driver for the subgraph (might not exist in this subgraph)
|
||||
SCH_ITEM* m_driver;
|
||||
|
||||
/**
|
||||
* Stores the primary driver for the multiple drivers ERC check. This is the chosen driver
|
||||
* before subgraphs are absorbed (so m_driver may be different)
|
||||
|
@ -234,6 +262,18 @@ public:
|
|||
|
||||
/// Used for multiple drivers ERC message; stores the second possible driver (or nullptr)
|
||||
SCH_ITEM* m_second_driver;
|
||||
|
||||
/// Contents of the subgraph
|
||||
std::vector<SCH_ITEM*> m_items;
|
||||
|
||||
/// No-connect item in graph, if any
|
||||
SCH_ITEM* m_no_connect;
|
||||
|
||||
/// On which logical sheet is the subgraph contained
|
||||
SCH_SHEET_PATH m_sheet;
|
||||
|
||||
/// Cache for driver connection
|
||||
SCH_CONNECTION* m_driver_connection;
|
||||
};
|
||||
|
||||
struct NET_NAME_CODE_CACHE_KEY
|
||||
|
|
|
@ -207,7 +207,7 @@ void SCH_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
|
|||
wxString netName = FROM_UTF8( text );
|
||||
|
||||
if( auto sg = Schematic().ConnectionGraph()->FindFirstSubgraphByName( netName ) )
|
||||
m_highlightedConn = sg->m_driver_connection;
|
||||
m_highlightedConn = sg->GetDriverConnection();
|
||||
else
|
||||
m_highlightedConn = nullptr;
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ void DIALOG_MIGRATE_BUSES::updateUi()
|
|||
|
||||
auto i = m_migration_list->InsertItem( m_migration_list->GetItemCount(), wxEmptyString );
|
||||
|
||||
m_migration_list->SetItem( i, 0, item.subgraph->m_sheet.PathHumanReadable() );
|
||||
m_migration_list->SetItem( i, 0, item.subgraph->GetSheet().PathHumanReadable() );
|
||||
m_migration_list->SetItem( i, 1, old );
|
||||
m_migration_list->SetItem( i, 2, item.possible_labels[0] );
|
||||
m_migration_list->SetItem( i, 3, "" );
|
||||
|
@ -172,8 +172,8 @@ void DIALOG_MIGRATE_BUSES::onItemSelected( wxListEvent& aEvent )
|
|||
m_selected_index = sel;
|
||||
|
||||
const CONNECTION_SUBGRAPH* subgraph = m_items[sel].subgraph;
|
||||
const SCH_SHEET_PATH& sheet = subgraph->m_sheet;
|
||||
SCH_ITEM* driver = subgraph->m_driver;
|
||||
const SCH_SHEET_PATH& sheet = subgraph->GetSheet();
|
||||
const SCH_ITEM* driver = subgraph->GetDriver();
|
||||
|
||||
if( sheet != m_frame->GetCurrentSheet() )
|
||||
{
|
||||
|
|
|
@ -606,15 +606,15 @@ int ERC_TESTER::TestPinToPin()
|
|||
|
||||
for( CONNECTION_SUBGRAPH* subgraph: net.second )
|
||||
{
|
||||
if( subgraph->m_no_connect )
|
||||
if( subgraph->GetNoConnect() )
|
||||
has_noconnect = true;
|
||||
|
||||
for( EDA_ITEM* item : subgraph->m_items )
|
||||
for( SCH_ITEM* item : subgraph->GetItems() )
|
||||
{
|
||||
if( item->Type() == SCH_PIN_T )
|
||||
{
|
||||
pins.emplace_back( static_cast<SCH_PIN*>( item ), subgraph->m_sheet );
|
||||
pinToScreenMap[item] = subgraph->m_sheet.LastScreen();
|
||||
pins.emplace_back( static_cast<SCH_PIN*>( item ), subgraph->GetSheet() );
|
||||
pinToScreenMap[item] = subgraph->GetSheet().LastScreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -757,16 +757,17 @@ int ERC_TESTER::TestMultUnitPinConflicts()
|
|||
|
||||
for( CONNECTION_SUBGRAPH* subgraph : net.second )
|
||||
{
|
||||
for( EDA_ITEM* item : subgraph->m_items )
|
||||
for( SCH_ITEM* item : subgraph->GetItems() )
|
||||
{
|
||||
if( item->Type() == SCH_PIN_T )
|
||||
{
|
||||
SCH_PIN* pin = static_cast<SCH_PIN*>( item );
|
||||
const SCH_SHEET_PATH& sheet = subgraph->GetSheet();
|
||||
|
||||
if( !pin->GetLibPin()->GetParent()->IsMulti() )
|
||||
continue;
|
||||
|
||||
wxString name = pin->GetParentSymbol()->GetRef( &subgraph->m_sheet ) +
|
||||
wxString name = pin->GetParentSymbol()->GetRef( &sheet ) +
|
||||
+ ":" + pin->GetShownNumber();
|
||||
|
||||
if( !pinToNetMap.count( name ) )
|
||||
|
@ -785,12 +786,12 @@ int ERC_TESTER::TestMultUnitPinConflicts()
|
|||
pinToNetMap[name].first ) );
|
||||
|
||||
ercItem->SetItems( pin, pinToNetMap[name].second );
|
||||
ercItem->SetSheetSpecificPath( subgraph->m_sheet );
|
||||
ercItem->SetItemsSheetPaths( subgraph->m_sheet, subgraph->m_sheet );
|
||||
ercItem->SetSheetSpecificPath( sheet );
|
||||
ercItem->SetItemsSheetPaths( sheet, sheet );
|
||||
|
||||
SCH_MARKER* marker = new SCH_MARKER( ercItem,
|
||||
pin->GetTransformedPosition() );
|
||||
subgraph->m_sheet.LastScreen()->Append( marker );
|
||||
sheet.LastScreen()->Append( marker );
|
||||
errors += 1;
|
||||
}
|
||||
}
|
||||
|
@ -814,7 +815,7 @@ int ERC_TESTER::TestSimilarLabels()
|
|||
{
|
||||
for( CONNECTION_SUBGRAPH* subgraph : net.second )
|
||||
{
|
||||
for( EDA_ITEM* item : subgraph->m_items )
|
||||
for( SCH_ITEM* item : subgraph->GetItems() )
|
||||
{
|
||||
switch( item->Type() )
|
||||
{
|
||||
|
@ -836,7 +837,7 @@ int ERC_TESTER::TestSimilarLabels()
|
|||
ercItem->SetItems( label, labelMap.at( normalized ) );
|
||||
|
||||
SCH_MARKER* marker = new SCH_MARKER( ercItem, label->GetPosition() );
|
||||
subgraph->m_sheet.LastScreen()->Append( marker );
|
||||
subgraph->GetSheet().LastScreen()->Append( marker );
|
||||
errors += 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ std::vector<PIN_INFO> NETLIST_EXPORTER_BASE::CreatePinList( SCH_SYMBOL* aSymbol,
|
|||
{
|
||||
CONNECTION_SUBGRAPH* sg = graph->FindSubgraphByName( netName, *aSheetPath );
|
||||
|
||||
if( !sg || sg->m_no_connect || sg->m_items.size() < 2 )
|
||||
if( !sg || sg->GetNoConnect() || sg->GetItems().size() < 2 )
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -250,7 +250,7 @@ void NETLIST_EXPORTER_BASE::findAllUnitsOfSymbol( SCH_SYMBOL* aSchSymbol,
|
|||
{
|
||||
CONNECTION_SUBGRAPH* sg = graph->FindSubgraphByName( netName, sheet );
|
||||
|
||||
if( !sg || sg->m_no_connect || sg->m_items.size() < 2 )
|
||||
if( !sg || sg->GetNoConnect() || sg->GetItems().size() < 2 )
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -127,9 +127,9 @@ bool NETLIST_EXPORTER_CADSTAR::writeListOfNets( FILE* f )
|
|||
|
||||
for( CONNECTION_SUBGRAPH* subgraph : subgraphs )
|
||||
{
|
||||
SCH_SHEET_PATH sheet = subgraph->m_sheet;
|
||||
SCH_SHEET_PATH sheet = subgraph->GetSheet();
|
||||
|
||||
for( SCH_ITEM* item : subgraph->m_items )
|
||||
for( SCH_ITEM* item : subgraph->GetItems() )
|
||||
{
|
||||
if( item->Type() == SCH_PIN_T )
|
||||
sorted_items.emplace_back( static_cast<SCH_PIN*>( item ), sheet );
|
||||
|
|
|
@ -678,13 +678,13 @@ XNODE* NETLIST_EXPORTER_XML::makeListOfNets( unsigned aCtl )
|
|||
|
||||
for( CONNECTION_SUBGRAPH* subgraph : subgraphs )
|
||||
{
|
||||
bool nc = subgraph->m_no_connect && subgraph->m_no_connect->Type() == SCH_NO_CONNECT_T;
|
||||
const SCH_SHEET_PATH& sheet = subgraph->m_sheet;
|
||||
bool nc = subgraph->GetNoConnect() && subgraph->GetNoConnect()->Type() == SCH_NO_CONNECT_T;
|
||||
const SCH_SHEET_PATH& sheet = subgraph->GetSheet();
|
||||
|
||||
if( nc )
|
||||
net_record->m_HasNoConnect = true;
|
||||
|
||||
for( SCH_ITEM* item : subgraph->m_items )
|
||||
for( SCH_ITEM* item : subgraph->GetItems() )
|
||||
{
|
||||
if( item->Type() == SCH_PIN_T )
|
||||
{
|
||||
|
|
|
@ -1399,7 +1399,7 @@ void SCH_EDIT_FRAME::RefreshOperatingPointDisplay()
|
|||
SCH_LINE* longestWire = nullptr;
|
||||
double length = 0.0;
|
||||
|
||||
for( SCH_ITEM* item : subgraph->m_items )
|
||||
for( SCH_ITEM* item : subgraph->GetItems() )
|
||||
{
|
||||
if( item->IsType( { SCH_ITEM_LOCATE_WIRE_T } ) )
|
||||
{
|
||||
|
|
|
@ -311,7 +311,7 @@ std::set<wxString> SCHEMATIC::GetNetClassAssignmentCandidates()
|
|||
{
|
||||
CONNECTION_SUBGRAPH* firstSubgraph = subgraphList[0];
|
||||
|
||||
if( !firstSubgraph->m_driver_connection->IsBus()
|
||||
if( !firstSubgraph->GetDriverConnection()->IsBus()
|
||||
&& firstSubgraph->GetDriverPriority() >= CONNECTION_SUBGRAPH::PRIORITY::PIN )
|
||||
{
|
||||
names.insert( key.Name );
|
||||
|
|
|
@ -1053,7 +1053,7 @@ int SCH_EDITOR_CONTROL::UpdateNetHighlighting( const TOOL_EVENT& aEvent )
|
|||
|
||||
if( selectedIsNoNet && selectedSubgraph )
|
||||
{
|
||||
for( SCH_ITEM* subgraphItem : selectedSubgraph->m_items )
|
||||
for( SCH_ITEM* subgraphItem : selectedSubgraph->GetItems() )
|
||||
{
|
||||
if( item == subgraphItem )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue