Make canvas netclass assignment mirror Setup Dialog assignment.

While it would make more sense to have them both use the old canvas
algorithm (of only assigning to the members), I'd be *very* hesitant
to change the Setup Dialog and underlying machinery this late in the
6.0 release.

Fixes https://gitlab.com/kicad/code/kicad/issues/9160
This commit is contained in:
Jeff Young 2021-09-17 14:38:46 +01:00
parent d7bfd1eb77
commit cc14dfe3ca
3 changed files with 31 additions and 25 deletions

View File

@ -31,6 +31,8 @@
#include <sch_junction.h> #include <sch_junction.h>
#include <sch_line.h> #include <sch_line.h>
#include <sch_text.h> #include <sch_text.h>
#include <project/net_settings.h>
#include <project/project_file.h>
#include <settings/color_settings.h> #include <settings/color_settings.h>
#include <netclass.h> #include <netclass.h>
#include <trigo.h> #include <trigo.h>
@ -493,13 +495,21 @@ void SCH_BUS_ENTRY_BASE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEM
aList.push_back( MSG_PANEL_ITEM( _( "Bus Entry Type" ), msg ) ); aList.push_back( MSG_PANEL_ITEM( _( "Bus Entry Type" ), msg ) );
SCH_EDIT_FRAME* frame = dynamic_cast<SCH_EDIT_FRAME*>( aFrame ); SCH_CONNECTION* conn = dynamic_cast<SCH_EDIT_FRAME*>( aFrame ) ? Connection() : nullptr;
if( !frame ) if( conn )
return; {
if( SCH_CONNECTION* conn = Connection() )
conn->AppendInfoToMsgPanel( aList ); conn->AppendInfoToMsgPanel( aList );
NET_SETTINGS& netSettings = Schematic()->Prj().GetProjectFile().NetSettings();
wxString netname = conn->Name();
wxString netclassName = netSettings.m_NetClasses.GetDefaultPtr()->GetName();
if( netSettings.m_NetClassAssignments.count( netname ) )
netclassName = netSettings.m_NetClassAssignments[ netname ];
aList.push_back( MSG_PANEL_ITEM( _( "Assigned Netclass" ), netclassName ) );
}
} }

View File

@ -892,23 +892,20 @@ void SCH_LINE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aList )
aList.push_back( MSG_PANEL_ITEM( _( "Line Style" ), msg ) ); aList.push_back( MSG_PANEL_ITEM( _( "Line Style" ), msg ) );
SCH_EDIT_FRAME* frame = dynamic_cast<SCH_EDIT_FRAME*>( aFrame ); SCH_CONNECTION* conn = dynamic_cast<SCH_EDIT_FRAME*>( aFrame ) ? Connection() : nullptr;
if( frame ) if( conn )
{ {
if( SCH_CONNECTION* conn = Connection() ) conn->AppendInfoToMsgPanel( aList );
{
conn->AppendInfoToMsgPanel( aList );
NET_SETTINGS& netSettings = Schematic()->Prj().GetProjectFile().NetSettings(); NET_SETTINGS& netSettings = Schematic()->Prj().GetProjectFile().NetSettings();
wxString netname = conn->Name(); wxString netname = conn->Name();
wxString netclassName = netSettings.m_NetClasses.GetDefaultPtr()->GetName(); wxString netclassName = netSettings.m_NetClasses.GetDefaultPtr()->GetName();
if( netSettings.m_NetClassAssignments.count( netname ) ) if( netSettings.m_NetClassAssignments.count( netname ) )
netclassName = netSettings.m_NetClassAssignments[ netname ]; netclassName = netSettings.m_NetClassAssignments[ netname ];
aList.push_back( MSG_PANEL_ITEM( _( "Assigned Netclass" ), netclassName ) ); aList.push_back( MSG_PANEL_ITEM( _( "Assigned Netclass" ), netclassName ) );
}
} }
} }

View File

@ -982,8 +982,7 @@ int SCH_EDITOR_CONTROL::AssignNetclass( const TOOL_EVENT& aEvent )
} }
else if( conn->IsBus() && conn->Members().size() == 0 ) else if( conn->IsBus() && conn->Members().size() == 0 )
{ {
m_frame->ShowInfoBarError( _( "Bus must have at least one member to assign a netclass " m_frame->ShowInfoBarError( _( "Bus has no members to assign netclass to." ) );
"to members." ) );
highlightNet( m_toolMgr, CLEAR ); highlightNet( m_toolMgr, CLEAR );
return 0; return 0;
} }
@ -992,10 +991,10 @@ int SCH_EDITOR_CONTROL::AssignNetclass( const TOOL_EVENT& aEvent )
if( conn->IsBus() ) if( conn->IsBus() )
{ {
for( auto& m : conn->Members() ) for( const std::shared_ptr<SCH_CONNECTION>& member : conn->Members() )
{ netNames.Add( member->Name() );
netNames.Add( m->Name() );
} netNames.Add( conn->Name() );
} }
else else
{ {
@ -1014,7 +1013,7 @@ int SCH_EDITOR_CONTROL::AssignNetclass( const TOOL_EVENT& aEvent )
defaultItem.Add( _( "Default" ) ); defaultItem.Add( _( "Default" ) );
items.emplace_back( defaultItem ); items.emplace_back( defaultItem );
for( const auto& ii : netSettings.m_NetClasses ) for( const std::pair<const wxString, NETCLASSPTR>& ii : netSettings.m_NetClasses )
{ {
wxArrayString item; wxArrayString item;
item.Add( ii.first ); item.Add( ii.first );
@ -1028,7 +1027,7 @@ int SCH_EDITOR_CONTROL::AssignNetclass( const TOOL_EVENT& aEvent )
{ {
netclassName = dlg.GetTextSelection(); netclassName = dlg.GetTextSelection();
for( auto& netName : netNames ) for( const wxString& netName : netNames )
{ {
// Remove from old netclass membership list // Remove from old netclass membership list
if( netSettings.m_NetClassAssignments.count( netName ) ) if( netSettings.m_NetClassAssignments.count( netName ) )