Last of the NULL expunging.

This commit is contained in:
Wayne Stambaugh 2021-07-20 10:32:22 -04:00
parent cf00319c85
commit bf80b9c04c
7 changed files with 110 additions and 81 deletions

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2020 Ian McInerney <Ian.S.McInerney at ieee.org> * Copyright (C) 2020 Ian McInerney <Ian.S.McInerney at ieee.org>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software: you can redistribute it and/or modify it * This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
@ -55,7 +55,7 @@ bool KIPLATFORM::ENV::MoveToTrash( const wxString& aPath, wxString& aError )
GError* err = nullptr; GError* err = nullptr;
GFile* file = g_file_new_for_path( aPath.fn_str() ); GFile* file = g_file_new_for_path( aPath.fn_str() );
bool retVal = g_file_trash( file, NULL, &err ); bool retVal = g_file_trash( file, nullptr, &err );
// Extract the error string if the operation failed // Extract the error string if the operation failed
if( !retVal && err ) if( !retVal && err )

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2020 Ian McInerney <Ian.S.McInerney at ieee.org> * Copyright (C) 2020 Ian McInerney <Ian.S.McInerney at ieee.org>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software: you can redistribute it and/or modify it * This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
@ -39,7 +39,7 @@ bool KIPLATFORM::ENV::MoveToTrash( const wxString& aPath, wxString& aError )
{ {
bool isDirectory = wxDirExists( aPath ); bool isDirectory = wxDirExists( aPath );
NSURL* url = [NSURL fileURLWithPath:wxCFStringRef( aPath ).AsNSString() isDirectory:isDirectory]; NSURL* url = [NSURL fileURLWithPath:wxCFStringRef( aPath ).AsNSString() isDirectory:isDirectory];
NSError* err = NULL; NSError* err = nullptr;
BOOL result = [[NSFileManager defaultManager] trashItemAtURL:url resultingItemURL:nil error:&err]; BOOL result = [[NSFileManager defaultManager] trashItemAtURL:url resultingItemURL:nil error:&err];
@ -54,7 +54,8 @@ bool KIPLATFORM::ENV::MoveToTrash( const wxString& aPath, wxString& aError )
} }
else else
{ {
errmsg = [err.localizedFailureReason stringByAppendingFormat:@"\n\n%@", err.localizedRecoverySuggestion]; errmsg = [err.localizedFailureReason stringByAppendingFormat:@"\n\n%@",
err.localizedRecoverySuggestion];
} }
aError = wxCFStringRef::AsString( (CFStringRef) errmsg ); aError = wxCFStringRef::AsString( (CFStringRef) errmsg );
@ -91,5 +92,5 @@ wxString KIPLATFORM::ENV::GetUserCachePath()
appropriateForURL:nil appropriateForURL:nil
create:NO error:nil]; create:NO error:nil];
return wxCFStringRef::AsString((CFStringRef)url.path); return wxCFStringRef::AsString( ( CFStringRef) url.path );
} }

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2019 KiCad Developers, see CHANGELOG.TXT for contributors. * Copyright (C) 2019-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -34,6 +34,7 @@
// a transform matrix, to display components in lib editor // a transform matrix, to display components in lib editor
TRANSFORM DefaultTransform = TRANSFORM( 1, 0, 0, -1 ); TRANSFORM DefaultTransform = TRANSFORM( 1, 0, 0, -1 );
static struct IFACE : public KIFACE_I static struct IFACE : public KIFACE_I
{ {
// Of course all are overloads, implementations of the KIFACE. // Of course all are overloads, implementations of the KIFACE.
@ -59,22 +60,22 @@ static struct IFACE : public KIFACE_I
} }
/** /**
* Function IfaceOrAddress * Return a pointer to the requested object.
* return a pointer to the requested object. The safest way to use this *
* is to retrieve a pointer to a static instance of an interface, similar to * The safest way to use this is to retrieve a pointer to a static instance of an interface,
* how the KIFACE interface is exported. But if you know what you are doing * similar to how the KIFACE interface is exported. But if you know what you are doing
* use it to retrieve anything you want. * use it to retrieve anything you want.
* *
* @param aDataId identifies which object you want the address of. * @param aDataId identifies which object you want the address of.
* * @return requested object which must be cast into the know type.
* @return void* - and must be cast into the know type.
*/ */
void* IfaceOrAddress( int aDataId ) override void* IfaceOrAddress( int aDataId ) override
{ {
return NULL; return nullptr;
} }
} kiface( "mock_eeschema", KIWAY::FACE_SCH ); } kiface( "mock_eeschema", KIWAY::FACE_SCH );
static struct PGM_MOCK_EESCHEMA_FRAME : public PGM_BASE static struct PGM_MOCK_EESCHEMA_FRAME : public PGM_BASE
{ {
bool OnPgmInit(); bool OnPgmInit();
@ -108,11 +109,13 @@ static struct PGM_MOCK_EESCHEMA_FRAME : public PGM_BASE
} }
} program; } program;
PGM_BASE& Pgm() PGM_BASE& Pgm()
{ {
return program; return program;
} }
// Similar to PGM_BASE& Pgm(), but return nullptr when a *.ki_face is run from // Similar to PGM_BASE& Pgm(), but return nullptr when a *.ki_face is run from
// a python script or something else. // a python script or something else.
// Therefore here return always nullptr // Therefore here return always nullptr

View File

@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE( DefaultDrawings )
{ {
// default drawings exist // default drawings exist
BOOST_CHECK_EQUAL( m_part_no_data.GetDrawItems().size(), 4 ); BOOST_CHECK_EQUAL( m_part_no_data.GetDrawItems().size(), 4 );
BOOST_CHECK_EQUAL( m_part_no_data.GetNextDrawItem( NULL, LIB_PIN_T ), (LIB_ITEM*)NULL ); BOOST_CHECK_EQUAL( m_part_no_data.GetNextDrawItem( nullptr, LIB_PIN_T ), nullptr );
} }

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2020 KiCad Developers. * Copyright (C) 2020-2021 KiCad Developers.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -50,6 +50,7 @@ LABEL_MANAGER::LABEL_MANAGER( KIGFX::GAL* aGal ) : m_gal( aGal )
}; };
LABEL_MANAGER::~LABEL_MANAGER() LABEL_MANAGER::~LABEL_MANAGER()
{ {
} }
@ -71,6 +72,7 @@ void LABEL_MANAGER::Add( VECTOR2I target, std::string msg, COLOR4D color )
m_labels.push_back( lbl ); m_labels.push_back( lbl );
} }
void LABEL_MANAGER::Add( const SHAPE_LINE_CHAIN& aL, COLOR4D color ) void LABEL_MANAGER::Add( const SHAPE_LINE_CHAIN& aL, COLOR4D color )
{ {
for( int i = 0; i < aL.PointCount(); i++ ) for( int i = 0; i < aL.PointCount(); i++ )
@ -84,9 +86,9 @@ void LABEL_MANAGER::Add( const SHAPE_LINE_CHAIN& aL, COLOR4D color )
void LABEL_MANAGER::Redraw( KIGFX::VIEW_OVERLAY* aOvl ) void LABEL_MANAGER::Redraw( KIGFX::VIEW_OVERLAY* aOvl )
{ {
recalculate(); recalculate();
for( auto& lbl : m_labels ) for( auto& lbl : m_labels )
{ {
//printf("Draw lbl %d %d '%s'\n", lbl.m_bbox.GetOrigin().x, lbl.m_bbox.GetOrigin().y, lbl.m_msg.c_str() );
aOvl->SetIsFill( false ); aOvl->SetIsFill( false );
aOvl->SetIsStroke( true ); aOvl->SetIsStroke( true );
aOvl->SetLineWidth( 10000 ); aOvl->SetLineWidth( 10000 );
@ -111,6 +113,7 @@ VECTOR2I LABEL_MANAGER::nearestBoxCorner( BOX2I b, VECTOR2I p )
for( int i = 0; i < 4; i++ ) for( int i = 0; i < 4; i++ )
{ {
int dist = ( ptest[i] - p ).EuclideanNorm(); int dist = ( ptest[i] - p ).EuclideanNorm();
if( dist < bestDist ) if( dist < bestDist )
{ {
bestDist = dist; bestDist = dist;
@ -121,6 +124,7 @@ VECTOR2I LABEL_MANAGER::nearestBoxCorner( BOX2I b, VECTOR2I p )
return rv; return rv;
} }
VECTOR2I LABEL_MANAGER::boxMtv( BOX2I b1, BOX2I b2 ) VECTOR2I LABEL_MANAGER::boxMtv( BOX2I b1, BOX2I b2 )
{ {
VECTOR2I rv( 0, 0 ); VECTOR2I rv( 0, 0 );
@ -151,9 +155,11 @@ VECTOR2I LABEL_MANAGER::boxMtv( BOX2I b1, BOX2I b2 )
{ {
BOX2I btest( b2 ); BOX2I btest( b2 );
btest.Move( dp[j] ); btest.Move( dp[j] );
if( !b1.Intersects( btest ) ) if( !b1.Intersects( btest ) )
{ {
int dist = dp[j].EuclideanNorm(); int dist = dp[j].EuclideanNorm();
if( dist < bestDist ) if( dist < bestDist )
{ {
bestDist = dist; bestDist = dist;
@ -167,13 +173,16 @@ VECTOR2I LABEL_MANAGER::boxMtv( BOX2I b1, BOX2I b2 )
return rv; return rv;
} }
void LABEL_MANAGER::recalculate() void LABEL_MANAGER::recalculate()
{ {
int iterLimit = 5; int iterLimit = 5;
while( iterLimit > 0 ) while( iterLimit > 0 )
{ {
printf( "Iter %d\n", iterLimit ); printf( "Iter %d\n", iterLimit );
bool collisionsFound = false; bool collisionsFound = false;
for( int i = 0; i < m_labels.size(); i++ ) for( int i = 0; i < m_labels.size(); i++ )
{ {
for( int j = 0; j < m_labels.size(); j++ ) for( int j = 0; j < m_labels.size(); j++ )
@ -181,7 +190,6 @@ void LABEL_MANAGER::recalculate()
if( i == j ) if( i == j )
continue; continue;
auto bb_i = m_labels[i].m_bbox; auto bb_i = m_labels[i].m_bbox;
auto bb_j = m_labels[j].m_bbox; auto bb_j = m_labels[j].m_bbox;
@ -189,11 +197,8 @@ void LABEL_MANAGER::recalculate()
bb_j.Inflate( 100000 ); bb_j.Inflate( 100000 );
VECTOR2I mtv = boxMtv( bb_i, bb_j ); VECTOR2I mtv = boxMtv( bb_i, bb_j );
if( mtv.x || mtv.y ) if( mtv.x || mtv.y )
{ {
// printf("%d %d mtv %d %d\n", i, j, mtv.x, mtv.y );
m_labels[i].m_bbox.Move( -mtv ); m_labels[i].m_bbox.Move( -mtv );
collisionsFound = true; collisionsFound = true;
} }
@ -222,9 +227,12 @@ PNS_LOG_VIEWER_OVERLAY::PNS_LOG_VIEWER_OVERLAY( KIGFX::GAL* aGal )
m_labelMgr.reset( new LABEL_MANAGER( aGal ) ); m_labelMgr.reset( new LABEL_MANAGER( aGal ) );
} }
void PNS_LOG_VIEWER_OVERLAY::AnnotatedPolyline( const SHAPE_LINE_CHAIN& aL, std::string name, bool aShowVertexNumbers )
void PNS_LOG_VIEWER_OVERLAY::AnnotatedPolyline( const SHAPE_LINE_CHAIN& aL, std::string name,
bool aShowVertexNumbers )
{ {
Polyline( aL ); Polyline( aL );
if( aShowVertexNumbers) if( aShowVertexNumbers)
m_labelMgr->Add( aL, GetStrokeColor() ); m_labelMgr->Add( aL, GetStrokeColor() );
} }
@ -261,13 +269,15 @@ PNS_LOG_VIEWER_FRAME::PNS_LOG_VIEWER_FRAME( wxFrame* frame ) : PNS_LOG_VIEWER_FR
m_listPopupMenu->Append( ID_LIST_SHOW_NONE, wxT( "Show none" ), wxT( "" ), wxITEM_NORMAL ); m_listPopupMenu->Append( ID_LIST_SHOW_NONE, wxT( "Show none" ), wxT( "" ), wxITEM_NORMAL );
m_itemList->Connect( m_itemList->GetId(), wxEVT_TREELIST_ITEM_CONTEXT_MENU, m_itemList->Connect( m_itemList->GetId(), wxEVT_TREELIST_ITEM_CONTEXT_MENU,
wxMouseEventHandler( PNS_LOG_VIEWER_FRAME::onListRightClick ), NULL, wxMouseEventHandler( PNS_LOG_VIEWER_FRAME::onListRightClick ), nullptr,
this ); this );
//m_itemList->Connect(m_itemList->GetId(),wxEVT_LISTBOX,wxCommandEventHandler(PNS_LOG_VIEWER_FRAME::onListSelect),NULL,this); //m_itemList->Connect(m_itemList->GetId(),wxEVT_LISTBOX,wxCommandEventHandler(PNS_LOG_VIEWER_FRAME::onListSelect),nullptr,this);
m_itemList->Connect( m_itemList->GetId(), wxEVT_TREELIST_SELECTION_CHANGED, m_itemList->Connect( m_itemList->GetId(), wxEVT_TREELIST_SELECTION_CHANGED,
wxCommandEventHandler( PNS_LOG_VIEWER_FRAME::onListSelect ), NULL, this ); wxCommandEventHandler( PNS_LOG_VIEWER_FRAME::onListSelect ),
nullptr, this );
m_itemList->Connect( m_itemList->GetId(), wxEVT_TREELIST_ITEM_CHECKED, m_itemList->Connect( m_itemList->GetId(), wxEVT_TREELIST_ITEM_CHECKED,
wxCommandEventHandler( PNS_LOG_VIEWER_FRAME::onListChecked ), NULL, this ); wxCommandEventHandler( PNS_LOG_VIEWER_FRAME::onListChecked ),
nullptr, this );
m_itemList->AppendColumn( "Type" ); m_itemList->AppendColumn( "Type" );
m_itemList->AppendColumn( "Value" ); m_itemList->AppendColumn( "Value" );
@ -279,6 +289,7 @@ PNS_LOG_VIEWER_FRAME::PNS_LOG_VIEWER_FRAME( wxFrame* frame ) : PNS_LOG_VIEWER_FR
m_galPanel->GetView()->Add( m_overlay.get() ); m_galPanel->GetView()->Add( m_overlay.get() );
} }
PNS_LOG_VIEWER_FRAME::~PNS_LOG_VIEWER_FRAME() PNS_LOG_VIEWER_FRAME::~PNS_LOG_VIEWER_FRAME()
{ {
m_overlay = nullptr; m_overlay = nullptr;
@ -310,6 +321,7 @@ PNS_TEST_DEBUG_DECORATOR::STAGE* PNS_LOG_VIEWER_FRAME::getCurrentStage()
return dbgd->GetStage( iter ); return dbgd->GetStage( iter );
} }
void PNS_LOG_VIEWER_FRAME::drawLoggedItems( int iter ) void PNS_LOG_VIEWER_FRAME::drawLoggedItems( int iter )
{ {
if( !m_env ) if( !m_env )
@ -319,15 +331,15 @@ void PNS_LOG_VIEWER_FRAME::drawLoggedItems( int iter )
if( !st ) if( !st )
return; return;
m_overlay.reset( new PNS_LOG_VIEWER_OVERLAY ( m_galPanel->GetGAL() ) ); m_overlay.reset( new PNS_LOG_VIEWER_OVERLAY ( m_galPanel->GetGAL() ) );
m_galPanel->GetView()->Add( m_overlay.get() ); m_galPanel->GetView()->Add( m_overlay.get() );
//
printf("draw %d\n", iter);
auto drawShapes = [&]( PNS_TEST_DEBUG_DECORATOR::DEBUG_ENT* ent ) -> bool { auto drawShapes = [&]( PNS_TEST_DEBUG_DECORATOR::DEBUG_ENT* ent ) -> bool
{
bool isEnabled = ent->IsVisible(); bool isEnabled = ent->IsVisible();
bool isSelected = false; bool isSelected = false;
if( !isEnabled ) if( !isEnabled )
return true; return true;
@ -366,16 +378,16 @@ void PNS_LOG_VIEWER_FRAME::drawLoggedItems( int iter )
case SH_LINE_CHAIN: case SH_LINE_CHAIN:
{ {
auto lc = static_cast<SHAPE_LINE_CHAIN*>( sh ); auto lc = static_cast<SHAPE_LINE_CHAIN*>( sh );
m_overlay->AnnotatedPolyline( *lc, ent->m_name, ent->m_hasLabels && isSelected ); m_overlay->AnnotatedPolyline( *lc, ent->m_name, ent->m_hasLabels && isSelected );
break; break;
} }
default: break; default:
break;
} }
} }
return true; return true;
}; };
@ -395,11 +407,10 @@ static BOARD* loadBoard( const std::string& filename )
try try
{ {
brd = pi->Load( wxString( filename.c_str() ), NULL, NULL ); brd = pi->Load( wxString( filename.c_str() ), nullptr, nullptr );
} }
catch( const IO_ERROR& ioe ) catch( const IO_ERROR& ioe )
{ {
printf( "Board Loading Error: '%s'\n", ioe.Problem() );
return nullptr; return nullptr;
} }
@ -439,6 +450,7 @@ void PNS_LOG_VIEWER_FRAME::SetLogFile( PNS_LOG_FILE* aLog )
updateDumpPanel( m_rewindIter ); updateDumpPanel( m_rewindIter );
} }
void PNS_LOG_VIEWER_FRAME::onReload( wxCommandEvent& event ) void PNS_LOG_VIEWER_FRAME::onReload( wxCommandEvent& event )
{ {
event.Skip(); event.Skip();
@ -449,6 +461,7 @@ void PNS_LOG_VIEWER_FRAME::onExit( wxCommandEvent& event )
event.Skip(); event.Skip();
} }
void PNS_LOG_VIEWER_FRAME::onListChecked( wxCommandEvent& event ) void PNS_LOG_VIEWER_FRAME::onListChecked( wxCommandEvent& event )
{ {
syncModel(); syncModel();
@ -467,6 +480,7 @@ void PNS_LOG_VIEWER_FRAME::onRewindScroll( wxScrollEvent& event )
event.Skip(); event.Skip();
} }
void PNS_LOG_VIEWER_FRAME::onBtnRewindLeft( wxCommandEvent& event ) void PNS_LOG_VIEWER_FRAME::onBtnRewindLeft( wxCommandEvent& event )
{ {
if( m_rewindIter > 0 ) if( m_rewindIter > 0 )
@ -480,6 +494,7 @@ void PNS_LOG_VIEWER_FRAME::onBtnRewindLeft( wxCommandEvent& event )
} }
} }
void PNS_LOG_VIEWER_FRAME::onBtnRewindRight( wxCommandEvent& event ) void PNS_LOG_VIEWER_FRAME::onBtnRewindRight( wxCommandEvent& event )
{ {
auto dbgd = m_env->GetDebugDecorator(); auto dbgd = m_env->GetDebugDecorator();
@ -496,6 +511,7 @@ void PNS_LOG_VIEWER_FRAME::onBtnRewindRight( wxCommandEvent& event )
} }
} }
void PNS_LOG_VIEWER_FRAME::onRewindCountText( wxCommandEvent& event ) void PNS_LOG_VIEWER_FRAME::onRewindCountText( wxCommandEvent& event )
{ {
if( !m_env ) if( !m_env )
@ -520,6 +536,7 @@ void PNS_LOG_VIEWER_FRAME::onRewindCountText( wxCommandEvent& event )
event.Skip(); event.Skip();
} }
void PNS_LOG_VIEWER_FRAME::syncModel() void PNS_LOG_VIEWER_FRAME::syncModel()
{ {
for( wxTreeListItem item = m_itemList->GetFirstItem(); item.IsOk(); for( wxTreeListItem item = m_itemList->GetFirstItem(); item.IsOk();
@ -527,6 +544,7 @@ void PNS_LOG_VIEWER_FRAME::syncModel()
{ {
WX_SHAPE_TREE_ITEM_DATA* idata = WX_SHAPE_TREE_ITEM_DATA* idata =
static_cast<WX_SHAPE_TREE_ITEM_DATA*>( m_itemList->GetItemData( item ) ); static_cast<WX_SHAPE_TREE_ITEM_DATA*>( m_itemList->GetItemData( item ) );
if( idata ) if( idata )
{ {
bool checked = m_itemList->GetCheckedState( item ) == wxCHK_CHECKED; bool checked = m_itemList->GetCheckedState( item ) == wxCHK_CHECKED;
@ -535,9 +553,9 @@ void PNS_LOG_VIEWER_FRAME::syncModel()
idata->m_item->m_selected = selected; idata->m_item->m_selected = selected;
} }
} }
} }
void PNS_LOG_VIEWER_FRAME::onListRightClick( wxMouseEvent& event ) void PNS_LOG_VIEWER_FRAME::onListRightClick( wxMouseEvent& event )
{ {
auto sel = m_itemList->GetPopupMenuSelectionFromUser( *m_listPopupMenu ); auto sel = m_itemList->GetPopupMenuSelectionFromUser( *m_listPopupMenu );
@ -563,17 +581,16 @@ void PNS_LOG_VIEWER_FRAME::onListRightClick( wxMouseEvent& event )
if( !st ) if( !st )
return; return;
auto formatShapes = [&]( PNS_TEST_DEBUG_DECORATOR::DEBUG_ENT* ent ) -> bool { auto formatShapes = [&]( PNS_TEST_DEBUG_DECORATOR::DEBUG_ENT* ent ) -> bool
{
if( ent->m_selected ) if( ent->m_selected )
{ {
//printf("Ent %p\n", ent );
for( auto sh : ent->m_shapes ) for( auto sh : ent->m_shapes )
{ {
//printf("sh %p\n", sh );
//printf("%s\n", sh->Format().c_str() );
s += "// " + ent->m_name + "\n " + sh->Format() + "; \n"; s += "// " + ent->m_name + "\n " + sh->Format() + "; \n";
} }
} }
return true; return true;
}; };
@ -587,11 +604,13 @@ void PNS_LOG_VIEWER_FRAME::onListRightClick( wxMouseEvent& event )
wxTheClipboard->Flush(); // Allow data to be available after closing KiCad wxTheClipboard->Flush(); // Allow data to be available after closing KiCad
wxTheClipboard->Close(); wxTheClipboard->Close();
} }
return; return;
} }
} }
} }
void PNS_LOG_VIEWER_FRAME::onListSelect( wxCommandEvent& event ) void PNS_LOG_VIEWER_FRAME::onListSelect( wxCommandEvent& event )
{ {
syncModel(); syncModel();
@ -599,7 +618,7 @@ void PNS_LOG_VIEWER_FRAME::onListSelect( wxCommandEvent& event )
} }
void PNS_LOG_VIEWER_FRAME::buildListTree( wxTreeListItem item, void PNS_LOG_VIEWER_FRAME::buildListTree( wxTreeListItem item,
PNS_TEST_DEBUG_DECORATOR::DEBUG_ENT* ent, int depth ) PNS_TEST_DEBUG_DECORATOR::DEBUG_ENT* ent, int depth )
{ {
#ifdef EXTRA_VERBOSE #ifdef EXTRA_VERBOSE
@ -648,13 +667,15 @@ void PNS_LOG_VIEWER_FRAME::buildListTree( wxTreeListItem i
static void expandAllChildren( wxTreeListCtrl* tree ) static void expandAllChildren( wxTreeListCtrl* tree )
{ {
wxTreeListItem child = tree->GetFirstItem (); wxTreeListItem child = tree->GetFirstItem ();
while (child.IsOk())
while( child.IsOk() )
{ {
tree->Expand ( child ); tree->Expand ( child );
child = tree->GetNextItem( child ); child = tree->GetNextItem( child );
} }
} }
void PNS_LOG_VIEWER_FRAME::updateDumpPanel( int iter ) void PNS_LOG_VIEWER_FRAME::updateDumpPanel( int iter )
{ {
if( !m_env ) if( !m_env )
@ -674,7 +695,6 @@ void PNS_LOG_VIEWER_FRAME::updateDumpPanel( int iter )
if( iter >= count ) if( iter >= count )
iter = count - 1; iter = count - 1;
auto st = dbgd->GetStage( iter ); auto st = dbgd->GetStage( iter );
auto rootItem = m_itemList->GetRootItem(); auto rootItem = m_itemList->GetRootItem();
@ -693,13 +713,12 @@ int replay_main_func( int argc, char* argv[] )
auto frame = new PNS_LOG_VIEWER_FRAME( nullptr ); auto frame = new PNS_LOG_VIEWER_FRAME( nullptr );
// drcCreateTestsProviderClearance(); // drcCreateTestsProviderClearance();
// drcCreateTestsProviderEdgeClearance(); // drcCreateTestsProviderEdgeClearance();
if( argc >= 2 && std::string( argv[1] ) == "-h" ) if( argc >= 2 && std::string( argv[1] ) == "-h" )
{ {
printf( "PNS Log (Re)player. Allows to step through the log written by the ROUTER_TOOL " printf( "PNS Log (Re)player. Allows to step through the log written by the ROUTER_TOOL "
"in debug Kicad builds. " ); "in debug KiCad builds. " );
printf( "Requires a board file with UUIDs and a matching log file. Both are written to " printf( "Requires a board file with UUIDs and a matching log file. Both are written to "
"/tmp when you press '0' during routing." ); "/tmp when you press '0' during routing." );
return 0; return 0;
@ -720,9 +739,9 @@ int replay_main_func( int argc, char* argv[] )
return 0; return 0;
} }
static bool registered2 = UTILITY_REGISTRY::Register( { static bool registered2 = UTILITY_REGISTRY::Register( {
"replay", "replay",
"PNS Log Player", "PNS Log Player",
replay_main_func, replay_main_func,
} ); } );

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013-2017 CERN * Copyright (C) 2013-2017 CERN
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch> * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -68,9 +69,9 @@
#include "pcb_test_frame.h" #include "pcb_test_frame.h"
using namespace KIGFX; using namespace KIGFX;
void PCB_TEST_FRAME_BASE::SetBoard( std::shared_ptr<BOARD> b ) void PCB_TEST_FRAME_BASE::SetBoard( std::shared_ptr<BOARD> b )
{ {
m_board = b; m_board = b;
@ -80,9 +81,8 @@ void PCB_TEST_FRAME_BASE::SetBoard( std::shared_ptr<BOARD> b )
m_galPanel->UpdateColors(); m_galPanel->UpdateColors();
#ifdef USE_TOOL_MANAGER #ifdef USE_TOOL_MANAGER
m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(), m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(),
m_galPanel->GetViewControls(), nullptr ); m_galPanel->GetViewControls(), nullptr );
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD ); m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
#endif #endif
@ -96,7 +96,7 @@ BOARD* PCB_TEST_FRAME_BASE::LoadAndDisplayBoard( const std::string& filename )
try try
{ {
brd = pi->Load( wxString( filename.c_str() ), NULL, NULL ); brd = pi->Load( wxString( filename.c_str() ), nullptr, nullptr );
} }
catch( const IO_ERROR& ioe ) catch( const IO_ERROR& ioe )
{ {
@ -109,16 +109,19 @@ BOARD* PCB_TEST_FRAME_BASE::LoadAndDisplayBoard( const std::string& filename )
return brd; return brd;
} }
class TEST_ACTIONS : public ACTIONS class TEST_ACTIONS : public ACTIONS
{ {
}; };
void PCB_TEST_FRAME_BASE::createView( wxWindow *aParent, PCB_DRAW_PANEL_GAL::GAL_TYPE aGalType ) void PCB_TEST_FRAME_BASE::createView( wxWindow *aParent, PCB_DRAW_PANEL_GAL::GAL_TYPE aGalType )
{ {
m_displayOptions.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::NONE; //SUPERSAMPLING_X4; // SUPERSAMPLING_X4;
m_displayOptions.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::NONE;
m_galPanel = std::make_shared<PCB_DRAW_PANEL_GAL>( aParent, -1, wxPoint( 0, m_galPanel = std::make_shared<PCB_DRAW_PANEL_GAL>( aParent, -1, wxPoint( 0, 0 ),
0 ), wxDefaultSize, m_displayOptions, aGalType ); wxDefaultSize, m_displayOptions, aGalType );
m_galPanel->UpdateColors(); m_galPanel->UpdateColors();
m_galPanel->SetEvtHandlerEnabled( true ); m_galPanel->SetEvtHandlerEnabled( true );
@ -134,14 +137,14 @@ void PCB_TEST_FRAME_BASE::createView( wxWindow *aParent, PCB_DRAW_PANEL_GAL::GAL
gal->SetGridOrigin( VECTOR2D( 0.0, 0.0 ) ); gal->SetGridOrigin( VECTOR2D( 0.0, 0.0 ) );
//m_galPanel->Connect( wxEVT_MOTION, //m_galPanel->Connect( wxEVT_MOTION,
//wxMouseEventHandler( PCB_TEST_FRAME::OnMotion ), NULL, this ); //wxMouseEventHandler( PCB_TEST_FRAME::OnMotion ), nullptr, this );
m_galPanel->GetViewControls()->ShowCursor( true ); m_galPanel->GetViewControls()->ShowCursor( true );
#ifdef USE_TOOL_MANAGER #ifdef USE_TOOL_MANAGER
m_toolManager = std::make_unique<TOOL_MANAGER>( ); m_toolManager = std::make_unique<TOOL_MANAGER>( );
m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(), m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(),
m_galPanel->GetViewControls(), nullptr ); m_galPanel->GetViewControls(), nullptr );
m_pcbActions = std::make_unique<TEST_ACTIONS>( ); m_pcbActions = std::make_unique<TEST_ACTIONS>( );
m_toolDispatcher = std::make_unique<TOOL_DISPATCHER>( m_toolManager.get() ); m_toolDispatcher = std::make_unique<TOOL_DISPATCHER>( m_toolManager.get() );
@ -156,6 +159,7 @@ void PCB_TEST_FRAME_BASE::createView( wxWindow *aParent, PCB_DRAW_PANEL_GAL::GAL
//SetBoard( std::make_shared<BOARD>( new BOARD )); //SetBoard( std::make_shared<BOARD>( new BOARD ));
} }
PCB_TEST_FRAME_BASE::PCB_TEST_FRAME_BASE() PCB_TEST_FRAME_BASE::PCB_TEST_FRAME_BASE()
{ {
} }
@ -166,6 +170,7 @@ PCB_TEST_FRAME_BASE::~PCB_TEST_FRAME_BASE()
} }
void PCB_TEST_FRAME_BASE::LoadSettings() void PCB_TEST_FRAME_BASE::LoadSettings()
{ {
auto cs = Pgm().GetSettingsManager().GetColorSettings(); auto cs = Pgm().GetSettingsManager().GetColorSettings();

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com> * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors. * Copyright (C) 2014-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -24,14 +24,12 @@
/* /*
* This is a program launcher for a single KIFACE DSO. It only mimics a KIWAY,
This is a program launcher for a single KIFACE DSO. It only mimics a KIWAY, * not actually implements one, since only a single DSO is supported by it.
not actually implements one, since only a single DSO is supported by it. *
* It is compiled multiple times, once for each standalone program and as such
It is compiled multiple times, once for each standalone program and as such * gets different compiler command line supplied #defines from CMake.
gets different compiler command line supplied #defines from CMake. */
*/
#include <typeinfo> #include <typeinfo>
@ -66,32 +64,34 @@ static struct IFACE : public KIFACE_I
void OnKifaceEnd() override {} void OnKifaceEnd() override {}
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway,
int aCtlBits = 0 ) override
{ {
assert( false ); assert( false );
return nullptr; return nullptr;
} }
/** /**
* Function IfaceOrAddress * Return a pointer to the requested object.
* return a pointer to the requested object. The safest way to use this *
* is to retrieve a pointer to a static instance of an interface, similar to * The safest way to use this is to retrieve a pointer to a static instance of an interface,
* how the KIFACE interface is exported. But if you know what you are doing * similar to how the KIFACE interface is exported. But if you know what you are doing
* use it to retrieve anything you want. * use it to retrieve anything you want.
* *
* @param aDataId identifies which object you want the address of. * @param aDataId identifies which object you want the address of.
* * @return the requested object which must be cast into the know type.
* @return void* - and must be cast into the know type.
*/ */
void* IfaceOrAddress( int aDataId ) override void* IfaceOrAddress( int aDataId ) override
{ {
return NULL; return nullptr;
} }
} }
kiface( "pcb_test_frame", KIWAY::FACE_PCB ); kiface( "pcb_test_frame", KIWAY::FACE_PCB );
KIWAY Kiway( &Pgm(), KFCTL_STANDALONE ); KIWAY Kiway( &Pgm(), KFCTL_STANDALONE );
static struct PGM_TEST_FRAME : public PGM_BASE static struct PGM_TEST_FRAME : public PGM_BASE
{ {
bool OnPgmInit(); bool OnPgmInit();
@ -128,6 +128,7 @@ static struct PGM_TEST_FRAME : public PGM_BASE
} }
program; program;
PGM_BASE& Pgm() PGM_BASE& Pgm()
{ {
return program; return program;
@ -147,10 +148,10 @@ KIFACE_I& Kiface()
return kiface; return kiface;
} }
/** /**
* Struct APP_SINGLE_TOP * Implement a bare naked wxApp (so that we don't become dependent on functionality in a wxApp
* implements a bare naked wxApp (so that we don't become dependent on * derivative that we cannot deliver under wxPython).
* functionality in a wxApp derivative that we cannot deliver under wxPython).
*/ */
struct APP_TEST : public wxApp struct APP_TEST : public wxApp
{ {
@ -181,8 +182,7 @@ struct APP_TEST : public wxApp
catch( const std::exception& e ) catch( const std::exception& e )
{ {
wxLogError( wxT( "Unhandled exception class: %s what: %s" ), wxLogError( wxT( "Unhandled exception class: %s what: %s" ),
FROM_UTF8( typeid(e).name() ), FROM_UTF8( typeid(e).name() ), FROM_UTF8( e.what() ) );
FROM_UTF8( e.what() ) );
} }
catch( const IO_ERROR& ioe ) catch( const IO_ERROR& ioe )
{ {
@ -195,8 +195,6 @@ struct APP_TEST : public wxApp
program.OnPgmExit(); program.OnPgmExit();
return false; return false;
} }
@ -240,14 +238,17 @@ bool PGM_TEST_FRAME::OnPgmInit()
return true; return true;
} }
void SetTopFrame ( wxFrame* aFrame ) void SetTopFrame ( wxFrame* aFrame )
{ {
Pgm().App().SetTopWindow( aFrame ); // wxApp gets a face. Pgm().App().SetTopWindow( aFrame ); // wxApp gets a face.
aFrame->Show(); aFrame->Show();
} }
IMPLEMENT_APP_NO_MAIN(APP_TEST); IMPLEMENT_APP_NO_MAIN(APP_TEST);
#ifndef TEST_APP_NO_MAIN #ifndef TEST_APP_NO_MAIN
int main( int argc, char** argv ) int main( int argc, char** argv )
@ -269,4 +270,4 @@ int main( int argc, char** argv )
return ret; return ret;
} }
#endif #endif