7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-11 11:00:13 +00:00

Migrate RC_ITEM to use shared_ptr

This commit is contained in:
Tomasz Wlostowski 2020-08-11 15:33:16 +02:00
parent 2b6ef6964a
commit d937fadd6f
49 changed files with 294 additions and 302 deletions

View File

@ -59,7 +59,7 @@ static const VECTOR2I MarkerShapeCorners[] =
const unsigned CORNERS_COUNT = arrayDim( MarkerShapeCorners );
MARKER_BASE::MARKER_BASE( int aScalingFactor, RC_ITEM* aItem, TYPEMARKER aType ) :
MARKER_BASE::MARKER_BASE( int aScalingFactor, std::shared_ptr<RC_ITEM> aItem, TYPEMARKER aType ) :
m_markerType( aType ),
m_excluded( false ),
m_rcItem( aItem ),
@ -85,8 +85,6 @@ MARKER_BASE::MARKER_BASE( int aScalingFactor, RC_ITEM* aItem, TYPEMARKER aType )
MARKER_BASE::~MARKER_BASE()
{
printf("del rcitem %p\n", m_rcItem );
delete m_rcItem;
}

View File

@ -94,7 +94,7 @@ KIID RC_TREE_MODEL::ToUUID( wxDataViewItem aItem )
if( node )
{
const RC_ITEM* rc_item = node->m_RcItem;
const std::shared_ptr<RC_ITEM> rc_item = node->m_RcItem;
switch( node->m_Type )
{
@ -142,7 +142,7 @@ void RC_TREE_MODEL::rebuildModel( RC_ITEMS_PROVIDER* aProvider, int aSeverities
{
wxWindowUpdateLocker updateLock( m_view );
RC_ITEM* selectedRcItem = nullptr;
std::shared_ptr<RC_ITEM> selectedRcItem = nullptr;
if( m_view )
{
@ -170,7 +170,7 @@ void RC_TREE_MODEL::rebuildModel( RC_ITEMS_PROVIDER* aProvider, int aSeverities
for( int i = 0; m_rcItemsProvider && i < m_rcItemsProvider->GetCount(); ++i )
{
RC_ITEM* rcItem = m_rcItemsProvider->GetItem( i );
std::shared_ptr<RC_ITEM> rcItem = m_rcItemsProvider->GetItem( i );
m_tree.push_back( new RC_TREE_NODE( nullptr, rcItem, RC_TREE_NODE::MARKER ) );
RC_TREE_NODE* n = m_tree.back();
@ -279,7 +279,7 @@ void RC_TREE_MODEL::GetValue( wxVariant& aVariant,
unsigned int aCol ) const
{
const RC_TREE_NODE* node = ToNode( aItem );
const RC_ITEM* rcItem = node->m_RcItem;
const std::shared_ptr<RC_ITEM> rcItem = node->m_RcItem;
switch( node->m_Type )
{
@ -394,7 +394,7 @@ void RC_TREE_MODEL::DeleteCurrentItem( bool aDeep )
void RC_TREE_MODEL::DeleteItems( bool aCurrentOnly, bool aIncludeExclusions, bool aDeep )
{
RC_TREE_NODE* current_node = ToNode( m_view->GetCurrentItem() );
const RC_ITEM* current_item = current_node ? current_node->m_RcItem : nullptr;
const std::shared_ptr<RC_ITEM> current_item = current_node ? current_node->m_RcItem : nullptr;
if( aCurrentOnly && !current_item )
{
@ -404,7 +404,7 @@ void RC_TREE_MODEL::DeleteItems( bool aCurrentOnly, bool aIncludeExclusions, boo
for( int i = m_rcItemsProvider->GetCount() - 1; i >= 0; --i )
{
RC_ITEM* rcItem = m_rcItemsProvider->GetItem( i );
std::shared_ptr<RC_ITEM> rcItem = m_rcItemsProvider->GetItem( i );
MARKER_BASE* marker = rcItem->GetParent();
bool excluded = marker ? marker->IsExcluded() : false;

View File

@ -50,7 +50,7 @@ public:
* Function GetItem
* retrieves a RC_ITEM by index.
*/
virtual RC_ITEM* GetItem( int aIndex ) = 0;
virtual std::shared_ptr<RC_ITEM> GetItem( int aIndex ) = 0;
/**
* Function DeleteItem
@ -95,7 +95,7 @@ public:
{
}
RC_ITEM( RC_ITEM* aItem )
RC_ITEM( std::shared_ptr<RC_ITEM> aItem )
{
m_errorCode = aItem->m_errorCode;
m_errorMessage = aItem->m_errorMessage;
@ -185,7 +185,7 @@ class RC_TREE_NODE
public:
enum NODE_TYPE { MARKER, MAIN_ITEM, AUX_ITEM, AUX_ITEM2, AUX_ITEM3 };
RC_TREE_NODE( RC_TREE_NODE* aParent, RC_ITEM* aRcItem, NODE_TYPE aType ) :
RC_TREE_NODE( RC_TREE_NODE* aParent, std::shared_ptr<RC_ITEM> aRcItem, NODE_TYPE aType ) :
m_Type( aType ),
m_RcItem( aRcItem ),
m_Parent( aParent )
@ -198,7 +198,7 @@ public:
}
NODE_TYPE m_Type;
RC_ITEM* m_RcItem;
std::shared_ptr<RC_ITEM> m_RcItem;
RC_TREE_NODE* m_Parent;
std::vector<RC_TREE_NODE*> m_Children;

View File

@ -172,7 +172,7 @@ bool CONNECTION_SUBGRAPH::ResolveDrivers( bool aCreateMarkers )
static_cast<SCH_PIN*>( candidates[0] )->GetTransformedPosition() :
candidates[0]->GetPosition();
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_DRIVER_CONFLICT );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_DRIVER_CONFLICT );
ercItem->SetItems( candidates[0], second_item );
SCH_MARKER* marker = new SCH_MARKER( ercItem, pos );
@ -2118,7 +2118,7 @@ bool CONNECTION_GRAPH::ercCheckBusToNetConflicts( const CONNECTION_SUBGRAPH* aSu
if( net_item && bus_item )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_BUS_TO_NET_CONFLICT );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_BUS_TO_NET_CONFLICT );
ercItem->SetItems( net_item, bus_item );
SCH_MARKER* marker = new SCH_MARKER( ercItem, net_item->GetPosition() );
@ -2186,7 +2186,7 @@ bool CONNECTION_GRAPH::ercCheckBusToBusConflicts( const CONNECTION_SUBGRAPH* aSu
if( !match )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_BUS_TO_BUS_CONFLICT );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_BUS_TO_BUS_CONFLICT );
ercItem->SetItems( label, port );
SCH_MARKER* marker = new SCH_MARKER( ercItem, label->GetPosition() );
@ -2266,7 +2266,7 @@ bool CONNECTION_GRAPH::ercCheckBusToBusEntryConflicts( const CONNECTION_SUBGRAPH
if( conflict )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_BUS_ENTRY_CONFLICT );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_BUS_ENTRY_CONFLICT );
ercItem->SetItems( bus_entry, bus_wire );
SCH_MARKER* marker = new SCH_MARKER( ercItem, bus_entry->GetPosition() );
@ -2319,7 +2319,7 @@ bool CONNECTION_GRAPH::ercCheckNoConnects( const CONNECTION_SUBGRAPH* aSubgraph
if( pin && has_invalid_items )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_CONNECTED );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_CONNECTED );
ercItem->SetItems( pin );
SCH_MARKER* marker = new SCH_MARKER( ercItem, pin->GetTransformedPosition() );
@ -2330,7 +2330,7 @@ bool CONNECTION_GRAPH::ercCheckNoConnects( const CONNECTION_SUBGRAPH* aSubgraph
if( !has_other_items )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_NOT_CONNECTED );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_NOT_CONNECTED );
ercItem->SetItems( aSubgraph->m_no_connect );
SCH_MARKER* marker = new SCH_MARKER( ercItem, aSubgraph->m_no_connect->GetPosition() );
@ -2385,7 +2385,7 @@ bool CONNECTION_GRAPH::ercCheckNoConnects( const CONNECTION_SUBGRAPH* aSubgraph
if( pin && !has_other_connections && pin->GetType() != ELECTRICAL_PINTYPE::PT_NC )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_PIN_NOT_CONNECTED );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_PIN_NOT_CONNECTED );
ercItem->SetItems( pin );
SCH_MARKER* marker = new SCH_MARKER( ercItem, pin->GetTransformedPosition() );
@ -2479,7 +2479,7 @@ bool CONNECTION_GRAPH::ercCheckLabels( const CONNECTION_SUBGRAPH* aSubgraph )
if( !has_other_connections )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( is_global ? ERCE_GLOBLABEL : ERCE_LABEL_NOT_CONNECTED );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( is_global ? ERCE_GLOBLABEL : ERCE_LABEL_NOT_CONNECTED );
ercItem->SetItems( text );
SCH_MARKER* marker = new SCH_MARKER( ercItem, text->GetPosition() );

View File

@ -315,7 +315,7 @@ void DIALOG_ERC::TestErc( REPORTER& aReporter )
pin_to_net_map[pin_name],
item->GetNetName() );
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_DIFFERENT_UNIT_NET );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_DIFFERENT_UNIT_NET );
ercItem->SetErrorMessage( msg );
ercItem->SetItems( item->m_Comp );
@ -419,7 +419,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent )
ERC_SETTINGS& settings = m_parent->Schematic().ErcSettings();
RC_ITEM* rcItem = node->m_RcItem;
std::shared_ptr<RC_ITEM> rcItem = node->m_RcItem;
wxString listName;
wxMenu menu;
wxString msg;

View File

@ -51,7 +51,7 @@ DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP( SCH_EDIT_FRAME* aFrame ) :
m_pinToPinError = ERC_ITEM::Create( ERCE_PIN_TO_PIN_WARNING );
m_severities = new PANEL_SETUP_SEVERITIES( this, ERC_ITEM::GetItemsWithSeverities(),
schematic.ErcSettings().m_Severities,
m_pinToPinError );
m_pinToPinError.get() );
m_textVars = new PANEL_TEXT_VARIABLES( m_treebook, &Prj() );
@ -87,8 +87,6 @@ DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP( SCH_EDIT_FRAME* aFrame ) :
DIALOG_SCHEMATIC_SETUP::~DIALOG_SCHEMATIC_SETUP()
{
delete m_pinToPinError;
m_treebook->Disconnect( wxEVT_TREEBOOK_PAGE_CHANGED,
wxBookCtrlEventHandler( DIALOG_SCHEMATIC_SETUP::OnPageChange ), NULL, this );
}

View File

@ -50,7 +50,7 @@ protected:
PANEL_SETUP_SEVERITIES* m_severities;
PANEL_SETUP_NETCLASSES* m_netclasses;
PANEL_TEXT_VARIABLES* m_textVars;
ERC_ITEM* m_pinToPinError;
std::shared_ptr<ERC_ITEM> m_pinToPinError;
std::vector<bool> m_macHack;

View File

@ -127,7 +127,7 @@ int ERC_TESTER::TestDuplicateSheetNames( bool aCreateMarker )
{
if( aCreateMarker )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_DUPLICATE_SHEET_NAME );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_DUPLICATE_SHEET_NAME );
ercItem->SetItems( sheet, test_item );
SCH_MARKER* marker = new SCH_MARKER( ercItem, sheet->GetPosition() );
@ -178,7 +178,7 @@ void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
pos = component->GetTransform().TransformCoordinate( pos );
pos += component->GetPosition();
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
ercItem->SetItems( &field );
SCH_MARKER* marker = new SCH_MARKER( ercItem, pos );
@ -194,7 +194,7 @@ void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
{
if( unresolved( field.GetShownText() ) )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
ercItem->SetItems( &field );
SCH_MARKER* marker = new SCH_MARKER( ercItem, field.GetPosition() );
@ -206,7 +206,7 @@ void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
{
if( pin->GetShownText().Matches( wxT( "*${*}*" ) ) )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
ercItem->SetItems( pin );
SCH_MARKER* marker = new SCH_MARKER( ercItem, pin->GetPosition() );
@ -218,7 +218,7 @@ void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
{
if( text->GetShownText().Matches( wxT( "*${*}*" ) ) )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
ercItem->SetItems( text );
SCH_MARKER* marker = new SCH_MARKER( ercItem, text->GetPosition() );
@ -233,7 +233,7 @@ void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
{
if( text->GetShownText().Matches( wxT( "*${*}*" ) ) )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_UNRESOLVED_VARIABLE );
ercItem->SetErrorMessage( _( "Unresolved text variable in worksheet." ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, text->GetPosition() );
@ -268,7 +268,7 @@ int ERC_TESTER::TestConflictingBusAliases()
alias->GetParent()->GetFileName(),
test->GetParent()->GetFileName() );
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_BUS_ALIAS_CONFLICT );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_BUS_ALIAS_CONFLICT );
ercItem->SetErrorMessage( msg );
SCH_MARKER* marker = new SCH_MARKER( ercItem, wxPoint() );
@ -336,7 +336,7 @@ int ERC_TESTER::TestMultiunitFootprints()
msg.Printf( _( "Different footprints assigned to %s and %s" ),
unitName, secondName );
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_DIFFERENT_UNIT_FP );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_DIFFERENT_UNIT_FP );
ercItem->SetErrorMessage( msg );
ercItem->SetItems( unit, secondUnit );
@ -368,7 +368,7 @@ void ERC_TESTER::diagnose( NETLIST_OBJECT* aNetItemRef, NETLIST_OBJECT* aNetItem
{
if( settings.GetSeverity( ERCE_PIN_NOT_DRIVEN ) != RPT_SEVERITY_IGNORE )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_PIN_NOT_DRIVEN );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_PIN_NOT_DRIVEN );
ercItem->SetItems( pin );
SCH_MARKER* marker = new SCH_MARKER( ercItem, aNetItemRef->m_Start );
@ -382,7 +382,7 @@ void ERC_TESTER::diagnose( NETLIST_OBJECT* aNetItemRef, NETLIST_OBJECT* aNetItem
{
if( settings.GetSeverity( ERCE_PIN_TO_PIN_WARNING ) != RPT_SEVERITY_IGNORE )
{
ERC_ITEM* ercItem = ERC_ITEM::Create(
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create(
aDiag == PIN_ERROR::PP_ERROR ? ERCE_PIN_TO_PIN_ERROR : ERCE_PIN_TO_PIN_WARNING );
ercItem->SetItems( pin, static_cast<SCH_PIN*>( aNetItemTst->m_Comp ) );
@ -557,7 +557,7 @@ int ERC_TESTER::TestNoConnectPins()
{
err_count++;
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_CONNECTED );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_CONNECTED );
ercItem->SetItems( pair.second[0], pair.second[1],
pair.second.size() > 2 ? pair.second[2] : nullptr,
@ -763,7 +763,7 @@ static int countIndenticalLabels( std::vector<NETLIST_OBJECT*>& aList, NETLIST_O
// Helper function: creates a marker for similar labels ERC warning
static void SimilarLabelsDiagnose( NETLIST_OBJECT* aItemA, NETLIST_OBJECT* aItemB )
{
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_SIMILAR_LABELS );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_SIMILAR_LABELS );
ercItem->SetItems( aItemA->m_Comp, aItemB->m_Comp );
SCH_MARKER* marker = new SCH_MARKER( ercItem, aItemA->m_Start );

View File

@ -141,73 +141,76 @@ std::vector<std::reference_wrapper<RC_ITEM>> ERC_ITEM::allItemTypes( {
ERC_ITEM* ERC_ITEM::Create( int aErrorCode )
std::shared_ptr<ERC_ITEM> ERC_ITEM::Create( int aErrorCode )
{
ERC_ITEM *item;
switch( aErrorCode )
{
case ERCE_DUPLICATE_SHEET_NAME:
return new ERC_ITEM( duplicateSheetName );
item = new ERC_ITEM( duplicateSheetName ); break;
case ERCE_PIN_NOT_CONNECTED:
return new ERC_ITEM( pinNotConnected );
item = new ERC_ITEM( pinNotConnected ); break;
case ERCE_PIN_NOT_DRIVEN:
return new ERC_ITEM( pinNotDriven );
item = new ERC_ITEM( pinNotDriven ); break;
case ERCE_PIN_TO_PIN_WARNING:
return new ERC_ITEM( pinTableWarning );
item = new ERC_ITEM( pinTableWarning ); break;
case ERCE_PIN_TO_PIN_ERROR:
return new ERC_ITEM( pinTableError );
item = new ERC_ITEM( pinTableError ); break;
case ERCE_HIERACHICAL_LABEL:
return new ERC_ITEM( hierLabelMismatch );
item = new ERC_ITEM( hierLabelMismatch ); break;
case ERCE_NOCONNECT_CONNECTED:
return new ERC_ITEM( noConnectConnected );
item = new ERC_ITEM( noConnectConnected ); break;
case ERCE_NOCONNECT_NOT_CONNECTED:
return new ERC_ITEM( noConnectDangling );
item = new ERC_ITEM( noConnectDangling ); break;
case ERCE_LABEL_NOT_CONNECTED:
return new ERC_ITEM( labelDangling );
item = new ERC_ITEM( labelDangling ); break;
case ERCE_SIMILAR_LABELS:
return new ERC_ITEM( similarLabels );
item = new ERC_ITEM( similarLabels ); break;
case ERCE_DIFFERENT_UNIT_FP:
return new ERC_ITEM( differentUnitFootprint );
item = new ERC_ITEM( differentUnitFootprint ); break;
case ERCE_DIFFERENT_UNIT_NET:
return new ERC_ITEM( differentUnitNet );
item = new ERC_ITEM( differentUnitNet ); break;
case ERCE_BUS_ALIAS_CONFLICT:
return new ERC_ITEM( busDefinitionConflict );
item = new ERC_ITEM( busDefinitionConflict ); break;
case ERCE_DRIVER_CONFLICT:
return new ERC_ITEM( multipleNetNames );
item = new ERC_ITEM( multipleNetNames ); break;
case ERCE_BUS_ENTRY_CONFLICT:
return new ERC_ITEM( netNotBusMember );
item = new ERC_ITEM( netNotBusMember ); break;
case ERCE_BUS_LABEL_ERROR:
return new ERC_ITEM( busLabelSyntax );
item = new ERC_ITEM( busLabelSyntax ); break;
case ERCE_BUS_TO_BUS_CONFLICT:
return new ERC_ITEM( busToBusConflict );
item = new ERC_ITEM( busToBusConflict ); break;
case ERCE_BUS_TO_NET_CONFLICT:
return new ERC_ITEM( busToNetConflict );
item = new ERC_ITEM( busToNetConflict ); break;
case ERCE_GLOBLABEL:
return new ERC_ITEM( globalLabelDangling );
item = new ERC_ITEM( globalLabelDangling ); break;
case ERCE_UNRESOLVED_VARIABLE:
return new ERC_ITEM( unresolvedVariable );
item = new ERC_ITEM( unresolvedVariable ); break;
case ERCE_UNSPECIFIED:
default:
wxFAIL_MSG( "Unknown ERC error code" );
return nullptr;
}
return std::shared_ptr<ERC_ITEM>( item );
}

View File

@ -34,7 +34,7 @@ public:
* Constructs an ERC_ITEM for the given error code
* @see ERCE_T
*/
static ERC_ITEM* Create( int aErrorCode );
static std::shared_ptr<ERC_ITEM> Create( int aErrorCode );
static std::vector<std::reference_wrapper<RC_ITEM>> GetItemsWithSeverities()
{

View File

@ -296,11 +296,17 @@ int SHEETLIST_ERC_ITEMS_PROVIDER::GetCount( int aSeverity )
}
ERC_ITEM* SHEETLIST_ERC_ITEMS_PROVIDER::GetItem( int aIndex )
std::shared_ptr<ERC_ITEM> SHEETLIST_ERC_ITEMS_PROVIDER::GetERCItem( int aIndex )
{
SCH_MARKER* marker = m_filteredMarkers[ aIndex ];
return marker ? static_cast<ERC_ITEM*>( marker->GetRCItem() ) : nullptr;
return marker ? std::static_pointer_cast<ERC_ITEM>( marker->GetRCItem() ) : nullptr;
}
std::shared_ptr<RC_ITEM> SHEETLIST_ERC_ITEMS_PROVIDER::GetItem( int aIndex )
{
return GetERCItem( aIndex );
}

View File

@ -187,7 +187,9 @@ public:
int GetCount( int aSeverity = -1 ) override;
ERC_ITEM* GetItem( int aIndex ) override;
std::shared_ptr<RC_ITEM> GetItem( int aIndex ) override;
std::shared_ptr<ERC_ITEM> GetERCItem( int aIndex );
void DeleteItem( int aIndex, bool aDeep ) override;

View File

@ -2047,7 +2047,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, linestart );
@ -2085,7 +2085,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, linestart );
@ -2127,7 +2127,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, lineend );
@ -2164,7 +2164,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, lineend );
@ -2206,7 +2206,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, linestart );
@ -2238,7 +2238,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, linestart );
@ -2277,7 +2277,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, lineend );
@ -2309,7 +2309,7 @@ void SCH_EAGLE_PLUGIN::addBusEntries()
}
else
{
ERC_ITEM* ercItem = ERC_ITEM::Create( 0 );
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( 0 );
ercItem->SetErrorMessage( _( "Bus Entry needed" ) );
SCH_MARKER* marker = new SCH_MARKER( ercItem, lineend );

View File

@ -41,7 +41,7 @@
#define SCALING_FACTOR Millimeter2iu( 0.15 )
SCH_MARKER::SCH_MARKER( ERC_ITEM* aItem, const wxPoint& aPos ) :
SCH_MARKER::SCH_MARKER( std::shared_ptr<ERC_ITEM> aItem, const wxPoint& aPos ) :
SCH_ITEM( nullptr, SCH_MARKER_T ),
MARKER_BASE( SCALING_FACTOR, aItem, MARKER_BASE::MARKER_ERC )
{

View File

@ -33,7 +33,7 @@
class SCH_MARKER : public SCH_ITEM, public MARKER_BASE
{
public:
SCH_MARKER( ERC_ITEM* aItem, const wxPoint& aPos );
SCH_MARKER( std::shared_ptr<ERC_ITEM> aItem, const wxPoint& aPos );
// Do not create a copy constructor. The one generated by the compiler is adequate.

View File

@ -1346,7 +1346,7 @@ void SCH_SCREENS::DeleteMarkers( enum MARKER_BASE::TYPEMARKER aMarkerType, int a
for( SCH_ITEM* item : screen->Items().OfType( SCH_MARKER_T ) )
{
SCH_MARKER* marker = static_cast<SCH_MARKER*>( item );
RC_ITEM* rcItem = marker->GetRCItem();
std::shared_ptr<RC_ITEM>rcItem = marker->GetRCItem();
if( marker->GetMarkerType() == aMarkerType
&& ( aErrorCode == ERCE_UNSPECIFIED || rcItem->GetErrorCode() == aErrorCode )

View File

@ -26,6 +26,8 @@
#ifndef MARKER_BASE_H
#define MARKER_BASE_H
#include <memory>
#include <rc_item.h>
#include <gr_basic.h>
#include <eda_rect.h>
@ -61,7 +63,7 @@ public:
protected:
TYPEMARKER m_markerType; // The type of marker (useful to filter markers)
bool m_excluded; // User has excluded this specific error
RC_ITEM* m_rcItem;
std::shared_ptr<RC_ITEM> m_rcItem;
int m_scalingFactor; // Scaling factor to convert corners coordinates
// to internat units coordinates
@ -71,8 +73,7 @@ protected:
public:
MARKER_BASE( int aScalingFactor, RC_ITEM* aItem, TYPEMARKER aType = MARKER_UNSPEC );
MARKER_BASE( int aScalingFactor, std::shared_ptr<RC_ITEM> aItem, TYPEMARKER aType = MARKER_UNSPEC );
virtual ~MARKER_BASE();
/** The scaling factor to convert polygonal shape coordinates to internal units
@ -114,8 +115,9 @@ public:
* interface may be used.
* @return const& DRC_ITEM
*/
RC_ITEM* GetRCItem() { return m_rcItem; }
const RC_ITEM* GetRCItem() const { return m_rcItem; }
// fixme: use shared_ptr
std::shared_ptr<RC_ITEM> GetRCItem() const { return m_rcItem; }
/**
* Tests if the given wxPoint is within the bounds of this object.

View File

@ -677,9 +677,8 @@ bool BOARD_DESIGN_SETTINGS::LoadFromFile( const wxString& aDirectory )
auto drcName =
[]( int aCode ) -> std::string
{
DRC_ITEM* item = DRC_ITEM::Create( aCode );
std::shared_ptr<DRC_ITEM> item = DRC_ITEM::Create( aCode );
wxString name = item->GetSettingsKey();
delete item;
return std::string( name.ToUTF8() );
};

View File

@ -42,9 +42,10 @@
#define SCALING_FACTOR Millimeter2iu( 0.1 )
MARKER_PCB::MARKER_PCB( DRC_ITEM* aItem, const wxPoint& aPosition ) :
BOARD_ITEM( nullptr, PCB_MARKER_T ), // parent set during BOARD::Add()
MARKER_BASE( SCALING_FACTOR, aItem )
MARKER_PCB::MARKER_PCB( std::shared_ptr<RC_ITEM> aItem, const wxPoint& aPosition ) :
BOARD_ITEM( nullptr, PCB_MARKER_T ), // parent set during BOARD::Add()
MARKER_BASE( SCALING_FACTOR, aItem )
{
if( m_rcItem )
m_rcItem->SetParent( this );
@ -76,8 +77,8 @@ MARKER_PCB* MARKER_PCB::Deserialize( const wxString& data )
wxPoint markerPos( (int) strtol( props[1].c_str(), nullptr, 10 ),
(int) strtol( props[2].c_str(), nullptr, 10 ) );
DRC_ITEM* drcItem = DRC_ITEM::Create( props[0] );
std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( props[0] );
if( !drcItem )
return nullptr;

View File

@ -46,8 +46,7 @@ class MSG_PANEL_ITEM;
class MARKER_PCB : public BOARD_ITEM, public MARKER_BASE
{
public:
MARKER_PCB( DRC_ITEM* aItem, const wxPoint& aPosition );
MARKER_PCB( std::shared_ptr<RC_ITEM> aItem, const wxPoint& aPosition );
~MARKER_PCB();
static inline bool ClassOf( const EDA_ITEM* aItem )

View File

@ -73,11 +73,11 @@ public:
*/
class VECTOR_CLEANUP_ITEMS_PROVIDER : public RC_ITEMS_PROVIDER
{
std::vector<CLEANUP_ITEM*>* m_sourceVector; // owns its CLEANUP_ITEMs
std::vector<std::shared_ptr<CLEANUP_ITEM> >* m_sourceVector; // owns its CLEANUP_ITEMs
public:
VECTOR_CLEANUP_ITEMS_PROVIDER( std::vector<CLEANUP_ITEM*>* aList ) :
VECTOR_CLEANUP_ITEMS_PROVIDER( std::vector<std::shared_ptr<CLEANUP_ITEM> >* aList ) :
m_sourceVector( aList )
{
}
@ -91,18 +91,22 @@ public:
return m_sourceVector->size();
}
CLEANUP_ITEM* GetItem( int aIndex ) override
std::shared_ptr<RC_ITEM> GetItem( int aIndex ) override
{
return m_sourceVector->at( aIndex );
}
std::shared_ptr<CLEANUP_ITEM> GetCleanupItem( int aIndex )
{
return m_sourceVector->at( aIndex );
}
void DeleteItem( int aIndex, bool aDeep ) override
{
if( aDeep )
{
CLEANUP_ITEM* item = m_sourceVector->at( aIndex );
delete item;
auto item = m_sourceVector->at( aIndex );
m_sourceVector->erase( m_sourceVector->begin() + aIndex );
}
}
@ -111,9 +115,6 @@ public:
{
if( aDeep )
{
for( CLEANUP_ITEM* item : *m_sourceVector )
delete item;
m_sourceVector->clear();
}
}

View File

@ -50,9 +50,6 @@ DIALOG_CLEANUP_GRAPHICS::DIALOG_CLEANUP_GRAPHICS( PCB_BASE_FRAME* aParent, bool
DIALOG_CLEANUP_GRAPHICS::~DIALOG_CLEANUP_GRAPHICS()
{
for( CLEANUP_ITEM* item : m_items )
delete item;
m_changesTreeModel->DecRef();
}
@ -97,9 +94,6 @@ void DIALOG_CLEANUP_GRAPHICS::doCleanup( bool aDryRun )
m_changesTreeModel->SetProvider( nullptr );
}
for( CLEANUP_ITEM* item : m_items )
delete item;
m_items.clear();
// Old model has to be refreshed, GAL normally does not keep updating it

View File

@ -36,7 +36,7 @@ class DIALOG_CLEANUP_GRAPHICS: public DIALOG_CLEANUP_GRAPHICS_BASE
{
PCB_BASE_FRAME* m_parentFrame;
bool m_isModEdit;
std::vector<CLEANUP_ITEM*> m_items;
std::vector<std::shared_ptr<CLEANUP_ITEM> > m_items;
RC_TREE_MODEL* m_changesTreeModel;
void doCleanup( bool aDryRun );

View File

@ -71,9 +71,6 @@ DIALOG_CLEANUP_TRACKS_AND_VIAS::~DIALOG_CLEANUP_TRACKS_AND_VIAS()
cfg->m_Cleanup.cleanup_tracks_in_pad = m_deleteTracksInPadsOpt->GetValue();
cfg->m_Cleanup.delete_dangling_vias = m_deleteDanglingViasOpt->GetValue();
for( CLEANUP_ITEM* item : m_items )
delete item;
m_changesTreeModel->DecRef();
}
@ -115,9 +112,6 @@ void DIALOG_CLEANUP_TRACKS_AND_VIAS::doCleanup( bool aDryRun )
m_changesTreeModel->SetProvider( nullptr );
}
for( CLEANUP_ITEM* item : m_items )
delete item;
m_items.clear();
// Old model has to be refreshed, GAL normally does not keep updating it

View File

@ -35,7 +35,7 @@ class PCB_EDIT_FRAME;
class DIALOG_CLEANUP_TRACKS_AND_VIAS: public DIALOG_CLEANUP_TRACKS_AND_VIAS_BASE
{
PCB_EDIT_FRAME* m_parentFrame;
std::vector<CLEANUP_ITEM*> m_items;
std::vector<std::shared_ptr<CLEANUP_ITEM> > m_items;
RC_TREE_MODEL* m_changesTreeModel;
void doCleanup( bool aDryRun );

Some files were not shown because too many files have changed in this diff Show More