router: put non-graphical part of ROUTER_IFACE into a parent class (for unit tests)

This commit is contained in:
Tomasz Wlostowski 2019-12-30 15:26:33 +01:00
parent af514cac44
commit 065d634b30
2 changed files with 98 additions and 36 deletions

View File

@ -519,31 +519,40 @@ private:
};
PNS::DEBUG_DECORATOR* PNS_KICAD_IFACE::GetDebugDecorator()
PNS::DEBUG_DECORATOR* PNS_KICAD_IFACE_BASE::GetDebugDecorator()
{
return m_debugDecorator;
}
PNS_KICAD_IFACE::PNS_KICAD_IFACE()
PNS_KICAD_IFACE_BASE::PNS_KICAD_IFACE_BASE()
{
m_ruleResolver = nullptr;
m_board = nullptr;
m_router = nullptr;
m_debugDecorator = nullptr;
}
PNS_KICAD_IFACE::PNS_KICAD_IFACE()
{
m_tool = nullptr;
m_view = nullptr;
m_previewItems = nullptr;
m_router = nullptr;
m_debugDecorator = nullptr;
m_dispOptions = nullptr;
}
PNS_KICAD_IFACE_BASE::~PNS_KICAD_IFACE_BASE()
{
delete m_ruleResolver;
delete m_debugDecorator;
}
PNS_KICAD_IFACE::~PNS_KICAD_IFACE()
{
delete m_ruleResolver;
delete m_debugDecorator;
if( m_previewItems )
if( m_previewItems )
{
m_previewItems->FreeItems();
delete m_previewItems;
@ -551,7 +560,7 @@ PNS_KICAD_IFACE::~PNS_KICAD_IFACE()
}
std::unique_ptr<PNS::SOLID> PNS_KICAD_IFACE::syncPad( D_PAD* aPad )
std::unique_ptr<PNS::SOLID> PNS_KICAD_IFACE_BASE::syncPad( D_PAD* aPad )
{
LAYER_RANGE layers( 0, MAX_CU_LAYERS - 1 );
@ -800,7 +809,7 @@ std::unique_ptr<PNS::SOLID> PNS_KICAD_IFACE::syncPad( D_PAD* aPad )
}
std::unique_ptr<PNS::SEGMENT> PNS_KICAD_IFACE::syncTrack( TRACK* aTrack )
std::unique_ptr<PNS::SEGMENT> PNS_KICAD_IFACE_BASE::syncTrack( TRACK* aTrack )
{
std::unique_ptr< PNS::SEGMENT > segment(
new PNS::SEGMENT( SEG( aTrack->GetStart(), aTrack->GetEnd() ), aTrack->GetNetCode() )
@ -835,7 +844,7 @@ std::unique_ptr<PNS::ARC> PNS_KICAD_IFACE::syncArc( ARC* aArc )
}
std::unique_ptr<PNS::VIA> PNS_KICAD_IFACE::syncVia( VIA* aVia )
std::unique_ptr<PNS::VIA> PNS_KICAD_IFACE_BASE::syncVia( VIA* aVia )
{
PCB_LAYER_ID top, bottom;
aVia->LayerPair( &top, &bottom );
@ -857,7 +866,7 @@ std::unique_ptr<PNS::VIA> PNS_KICAD_IFACE::syncVia( VIA* aVia )
}
bool PNS_KICAD_IFACE::syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone )
bool PNS_KICAD_IFACE_BASE::syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone )
{
SHAPE_POLY_SET poly;
@ -926,7 +935,7 @@ bool PNS_KICAD_IFACE::syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone )
}
bool PNS_KICAD_IFACE::syncTextItem( PNS::NODE* aWorld, EDA_TEXT* aText, PCB_LAYER_ID aLayer )
bool PNS_KICAD_IFACE_BASE::syncTextItem( PNS::NODE* aWorld, EDA_TEXT* aText, PCB_LAYER_ID aLayer )
{
if( !IsCopperLayer( aLayer ) )
return false;
@ -978,10 +987,12 @@ bool PNS_KICAD_IFACE::syncTextItem( PNS::NODE* aWorld, EDA_TEXT* aText, PCB_LAYE
}
bool PNS_KICAD_IFACE::syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem )
bool PNS_KICAD_IFACE_BASE::syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem )
{
std::vector<SHAPE_SEGMENT*> segs;
printf("SyncGI: %p\n", aItem );
if( aItem->GetLayer() != Edge_Cuts && !IsCopperLayer( aItem->GetLayer() ) )
return false;
@ -1072,7 +1083,7 @@ bool PNS_KICAD_IFACE::syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem )
}
void PNS_KICAD_IFACE::SetBoard( BOARD* aBoard )
void PNS_KICAD_IFACE_BASE::SetBoard( BOARD* aBoard )
{
m_board = aBoard;
wxLogTrace( "PNS", "m_board = %p", m_board );
@ -1132,12 +1143,15 @@ bool PNS_KICAD_IFACE::IsItemVisible( const PNS::ITEM* aItem )
}
void PNS_KICAD_IFACE::SyncWorld( PNS::NODE *aWorld )
void PNS_KICAD_IFACE_BASE::SyncWorld( PNS::NODE *aWorld )
{
int worstPadClearance = 0;
printf("->syncWorld\n");
if( !m_board )
{
printf("no board\n");
wxLogTrace( "PNS", "No board attached, aborting sync." );
return;
}
@ -1239,6 +1253,10 @@ void PNS_KICAD_IFACE::EraseView()
m_debugDecorator->Clear();
}
void PNS_KICAD_IFACE_BASE::SetDebugDecorator( PNS::DEBUG_DECORATOR *aDec )
{
m_debugDecorator = aDec;
}
void PNS_KICAD_IFACE::DisplayItem( const PNS::ITEM* aItem, int aColor, int aClearance, bool aEdit )
{
@ -1298,6 +1316,12 @@ void PNS_KICAD_IFACE::HideItem( PNS::ITEM* aItem )
}
void PNS_KICAD_IFACE_BASE::RemoveItem( PNS::ITEM* aItem )
{
}
void PNS_KICAD_IFACE::RemoveItem( PNS::ITEM* aItem )
{
BOARD_CONNECTED_ITEM* parent = aItem->Parent();
@ -1309,6 +1333,12 @@ void PNS_KICAD_IFACE::RemoveItem( PNS::ITEM* aItem )
}
void PNS_KICAD_IFACE_BASE::AddItem( PNS::ITEM* aItem )
{
}
void PNS_KICAD_IFACE::AddItem( PNS::ITEM* aItem )
{
BOARD_CONNECTED_ITEM* newBI = NULL;
@ -1361,7 +1391,7 @@ void PNS_KICAD_IFACE::AddItem( PNS::ITEM* aItem )
if( newBI )
{
newBI->SetLocalRatsnestVisible( m_dispOptions->m_ShowGlobalRatsnest );
//newBI->SetLocalRatsnestVisible( m_dispOptions->m_ShowGlobalRatsnest );
aItem->SetParent( newBI );
newBI->ClearFlags();
@ -1391,27 +1421,32 @@ void PNS_KICAD_IFACE::SetView( KIGFX::VIEW* aView )
m_view = aView;
m_previewItems = new KIGFX::VIEW_GROUP( m_view );
m_previewItems->SetLayer( LAYER_SELECT_OVERLAY ) ;
m_view->Add( m_previewItems );
if(m_view)
m_view->Add( m_previewItems );
delete m_debugDecorator;
m_debugDecorator = new PNS_PCBNEW_DEBUG_DECORATOR();
m_debugDecorator->SetView( m_view );
auto dec = new PNS_PCBNEW_DEBUG_DECORATOR();
dec->SetView( m_view );
m_debugDecorator = dec;
}
void PNS_KICAD_IFACE::UpdateNet( int aNetCode )
{
wxLogTrace( "PNS", "Update-net %d", aNetCode );
}
PNS::RULE_RESOLVER* PNS_KICAD_IFACE::GetRuleResolver()
PNS::RULE_RESOLVER* PNS_KICAD_IFACE_BASE::GetRuleResolver()
{
return m_ruleResolver;
}
void PNS_KICAD_IFACE::SetRouter( PNS::ROUTER* aRouter )
void PNS_KICAD_IFACE_BASE::SetRouter( PNS::ROUTER* aRouter )
{
m_router = aRouter;
}

View File

@ -39,35 +39,36 @@ namespace KIGFX
class VIEW;
}
class PNS_KICAD_IFACE : public PNS::ROUTER_IFACE {
class PNS_KICAD_IFACE_BASE : public PNS::ROUTER_IFACE {
public:
PNS_KICAD_IFACE();
~PNS_KICAD_IFACE();
PNS_KICAD_IFACE_BASE();
~PNS_KICAD_IFACE_BASE();
void SetRouter( PNS::ROUTER* aRouter ) override;
void SetHostTool( PCB_TOOL_BASE* aTool );
void SetDisplayOptions( const PCB_DISPLAY_OPTIONS* aDispOptions );
void EraseView() override {};
void SetBoard( BOARD* aBoard );
void SetView( KIGFX::VIEW* aView );
void SyncWorld( PNS::NODE* aWorld ) override;
void EraseView() override;
bool IsAnyLayerVisible( const LAYER_RANGE& aLayer ) override;
bool IsItemVisible( const PNS::ITEM* aItem ) override;
void HideItem( PNS::ITEM* aItem ) override;
void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0, bool aEdit = false ) override;
bool IsAnyLayerVisible( const LAYER_RANGE& aLayer ) override { return true; };
bool IsItemVisible( const PNS::ITEM* aItem ) override { return true; }
void HideItem( PNS::ITEM* aItem ) override {}
void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0, bool aEdit = false ) override {}
void AddItem( PNS::ITEM* aItem ) override;
void RemoveItem( PNS::ITEM* aItem ) override;
void Commit() override;
void Commit() override {}
void UpdateNet( int aNetCode ) override;
void UpdateNet( int aNetCode ) override {}
void SetDebugDecorator( PNS::DEBUG_DECORATOR *aDec );
PNS::RULE_RESOLVER* GetRuleResolver() override;
PNS::DEBUG_DECORATOR* GetDebugDecorator() override;
private:
protected:
PNS_PCBNEW_RULE_RESOLVER* m_ruleResolver;
PNS_PCBNEW_DEBUG_DECORATOR* m_debugDecorator;
PNS::DEBUG_DECORATOR* m_debugDecorator;
std::unique_ptr<PNS::SOLID> syncPad( D_PAD* aPad );
std::unique_ptr<PNS::SEGMENT> syncTrack( TRACK* aTrack );
@ -77,6 +78,31 @@ private:
bool syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem );
bool syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone );
PNS::ROUTER* m_router;
BOARD* m_board;
};
class PNS_KICAD_IFACE : public PNS_KICAD_IFACE_BASE {
public:
PNS_KICAD_IFACE();
~PNS_KICAD_IFACE();
void SetHostTool( PCB_TOOL_BASE* aTool );
void SetDisplayOptions( const PCB_DISPLAY_OPTIONS* aDispOptions );
void SetView( KIGFX::VIEW* aView );
void EraseView() override;
bool IsAnyLayerVisible( const LAYER_RANGE& aLayer ) override;
bool IsItemVisible( const PNS::ITEM* aItem ) override;
void HideItem( PNS::ITEM* aItem ) override;
void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0, bool aEdit = false ) override;
void Commit() override;
void AddItem( PNS::ITEM* aItem ) override;
void RemoveItem( PNS::ITEM* aItem ) override;
void UpdateNet( int aNetCode ) override;
private:
KIGFX::VIEW* m_view;
KIGFX::VIEW_GROUP* m_previewItems;
std::unordered_set<BOARD_CONNECTED_ITEM*> m_hiddenItems;
@ -88,4 +114,5 @@ private:
const PCB_DISPLAY_OPTIONS* m_dispOptions;
};
#endif