From 49b45b8ac5857cdfdf639dc4b2e1f7d75d3c7d4a Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Thu, 5 Jun 2014 09:54:47 +0200 Subject: [PATCH] Fixed: Modules become invisible after reloading a netlist, until GAL view is refreshed. --- pcbnew/class_module.h | 2 +- pcbnew/netlist.cpp | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h index 3b378c30a6..a58117a2f9 100644 --- a/pcbnew/class_module.h +++ b/pcbnew/class_module.h @@ -463,7 +463,7 @@ public: void RunOnChildren( boost::function aFunction ); /// @copydoc VIEW_ITEM::ViewUpdate() - void ViewUpdate( int aUpdateFlags ); + void ViewUpdate( int aUpdateFlags = KIGFX::VIEW_ITEM::ALL ); /** * Function CopyNetlistSettings diff --git a/pcbnew/netlist.cpp b/pcbnew/netlist.cpp index 0d5725cf63..8ba8627385 100644 --- a/pcbnew/netlist.cpp +++ b/pcbnew/netlist.cpp @@ -63,6 +63,7 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName, NETLIST netlist; NETLIST_READER* netlistReader; KIGFX::VIEW* view = GetGalCanvas()->GetView(); + BOARD* board = GetBoard(); netlist.SetIsDryRun( aIsDryRun ); netlist.SetFindByTimeStamp( aSelectByTimeStamp ); @@ -100,7 +101,7 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName, if( !netlist.IsDryRun() ) { // Remove old modules - for( MODULE* module = GetBoard()->m_Modules; module; module = module->Next() ) + for( MODULE* module = board->m_Modules; module; module = module->Next() ) { module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); view->Remove( module ); @@ -108,7 +109,7 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName, } netlist.SortByReference(); - GetBoard()->ReplaceNetlist( netlist, aDeleteSinglePadNets, aReporter ); + board->ReplaceNetlist( netlist, aDeleteSinglePadNets, aReporter ); // If it was a dry run, nothing has changed so we're done. if( netlist.IsDryRun() ) @@ -119,13 +120,14 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName, SetCurItem( NULL ); // Reload modules - for( MODULE* module = GetBoard()->m_Modules; module; module = module->Next() ) + for( MODULE* module = board->m_Modules; module; module = module->Next() ) { module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); view->Add( module ); + module->ViewUpdate(); } - if( aDeleteUnconnectedTracks && GetBoard()->m_Track ) + if( aDeleteUnconnectedTracks && board->m_Track ) { // Remove erroneous tracks. This should probably pushed down to the #BOARD object. RemoveMisConnectedTracks(); @@ -133,11 +135,11 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName, // Rebuild the board connectivity: if( IsGalCanvasActive() ) - GetBoard()->GetRatsnest()->Recalculate(); + board->GetRatsnest()->ProcessBoard(); else Compile_Ratsnest( NULL, true ); - SetMsgPanel( GetBoard() ); + SetMsgPanel( board ); m_canvas->Refresh(); }