Correctly refresh the board after action plugin run and maintain

selection
This commit is contained in:
qu1ck 2022-12-26 08:23:44 -08:00
parent 933a5d45e1
commit 7dfa100ff0
8 changed files with 42 additions and 28 deletions

View File

@ -572,7 +572,8 @@ void TOOL_MANAGER::DeactivateTool()
void TOOL_MANAGER::ResetTools( TOOL_BASE::RESET_REASON aReason ) void TOOL_MANAGER::ResetTools( TOOL_BASE::RESET_REASON aReason )
{ {
DeactivateTool(); if( aReason != TOOL_BASE::REDRAW )
DeactivateTool();
for( auto& state : m_toolState ) for( auto& state : m_toolState )
{ {

View File

@ -78,7 +78,8 @@ public:
{ {
RUN, ///< Tool is invoked after being inactive RUN, ///< Tool is invoked after being inactive
MODEL_RELOAD, ///< Model changes (required full reload) MODEL_RELOAD, ///< Model changes (required full reload)
GAL_SWITCH ///< Rendering engine changes GAL_SWITCH, ///< Rendering engine changes
REDRAW ///< Full drawing refresh
}; };
/** /**

View File

@ -107,6 +107,11 @@ public:
void HardRedraw() override; void HardRedraw() override;
/**
* Rebuilds board connectivity, refreshes canvas.
*/
void RebuildAndRefresh();
/** /**
* Execute a remote command send by Eeschema via a socket, port KICAD_PCB_PORT_SERVICE_NUMBER * Execute a remote command send by Eeschema via a socket, port KICAD_PCB_PORT_SERVICE_NUMBER
* (currently 4242). * (currently 4242).

View File

@ -28,6 +28,7 @@
#include <bitmaps.h> #include <bitmaps.h>
#include <board.h> #include <board.h>
#include <board_commit.h> #include <board_commit.h>
#include <board_design_settings.h>
#include <footprint.h> #include <footprint.h>
#include <pcb_track.h> #include <pcb_track.h>
#include <zone.h> #include <zone.h>
@ -35,6 +36,8 @@
#include <pcbnew_settings.h> #include <pcbnew_settings.h>
#include <tool/action_menu.h> #include <tool/action_menu.h>
#include <tool/action_toolbar.h> #include <tool/action_toolbar.h>
#include <tool/tool_manager.h>
#include <pcb_painter.h>
#include <wx/msgdlg.h> #include <wx/msgdlg.h>
#include "../../scripting/python_scripting.h" #include "../../scripting/python_scripting.h"
@ -372,7 +375,32 @@ void PCB_EDIT_FRAME::RunActionPlugin( ACTION_PLUGIN* aActionPlugin )
// Apply changes, UndoList already handled // Apply changes, UndoList already handled
commit.Push( _( "Apply action script" ), SKIP_UNDO | SKIP_SET_DIRTY ); commit.Push( _( "Apply action script" ), SKIP_UNDO | SKIP_SET_DIRTY );
ActivateGalCanvas();
RebuildAndRefresh();
}
void PCB_EDIT_FRAME::RebuildAndRefresh()
{
m_pcb->BuildConnectivity();
PCB_DRAW_PANEL_GAL* canvas = GetCanvas();
canvas->GetView()->Clear();
canvas->GetView()->InitPreview();
canvas->GetGAL()->SetGridOrigin( VECTOR2D( m_pcb->GetDesignSettings().GetGridOrigin() ) );
canvas->DisplayBoard( m_pcb );
// allow tools to re-add their view items (selection previews, grids, etc.)
if( m_toolManager )
m_toolManager->ResetTools( TOOL_BASE::REDRAW );
// reload the drawing-sheet
SetPageSettings( m_pcb->GetPageSettings() );
canvas->SyncLayersVisibility( m_pcb );
canvas->Refresh();
} }

View File

@ -32,7 +32,6 @@
#include "pcbnew_scripting_helpers.h" #include "pcbnew_scripting_helpers.h"
#include <tool/tool_manager.h>
#include <action_plugin.h> #include <action_plugin.h>
#include <board.h> #include <board.h>
#include <board_design_settings.h> #include <board_design_settings.h>
@ -398,27 +397,7 @@ void Refresh()
{ {
if( s_PcbEditFrame ) if( s_PcbEditFrame )
{ {
TOOL_MANAGER* toolMgr = s_PcbEditFrame->GetToolManager(); s_PcbEditFrame->RebuildAndRefresh();
BOARD* board = s_PcbEditFrame->GetBoard();
PCB_DRAW_PANEL_GAL* canvas = s_PcbEditFrame->GetCanvas();
canvas->SyncLayersVisibility( board );
canvas->GetView()->Clear();
canvas->GetView()->InitPreview();
canvas->GetGAL()->SetGridOrigin( VECTOR2D( board->GetDesignSettings().GetGridOrigin() ) );
canvas->DisplayBoard( board );
// allow tools to re-add their view items (selection previews, grids, etc.)
if( toolMgr )
toolMgr->ResetTools( TOOL_BASE::GAL_SWITCH );
// reload the drawing-sheet
s_PcbEditFrame->SetPageSettings( board->GetPageSettings() );
board->BuildConnectivity();
canvas->Refresh();
} }
} }

View File

@ -149,7 +149,7 @@ void BOARD_EDITOR_CONTROL::Reset( RESET_REASON aReason )
{ {
m_frame = getEditFrame<PCB_EDIT_FRAME>(); m_frame = getEditFrame<PCB_EDIT_FRAME>();
if( aReason == MODEL_RELOAD || aReason == GAL_SWITCH ) if( aReason == MODEL_RELOAD || aReason == GAL_SWITCH || aReason == REDRAW )
{ {
m_placeOrigin->SetPosition( getModel<BOARD>()->GetDesignSettings().GetAuxOrigin() ); m_placeOrigin->SetPosition( getModel<BOARD>()->GetDesignSettings().GetAuxOrigin() );
getView()->Remove( m_placeOrigin.get() ); getView()->Remove( m_placeOrigin.get() );

View File

@ -89,7 +89,7 @@ void PCB_CONTROL::Reset( RESET_REASON aReason )
{ {
m_frame = getEditFrame<PCB_BASE_FRAME>(); m_frame = getEditFrame<PCB_BASE_FRAME>();
if( aReason == MODEL_RELOAD || aReason == GAL_SWITCH ) if( aReason == MODEL_RELOAD || aReason == GAL_SWITCH || aReason == REDRAW )
{ {
m_gridOrigin->SetPosition( board()->GetDesignSettings().GetGridOrigin() ); m_gridOrigin->SetPosition( board()->GetDesignSettings().GetGridOrigin() );
m_gridOrigin->SetColor( m_frame->GetGridColor() ); m_gridOrigin->SetColor( m_frame->GetGridColor() );

View File

@ -224,7 +224,7 @@ void PCB_SELECTION_TOOL::Reset( RESET_REASON aReason )
getView()->GetPainter()->GetSettings()->SetHighlight( false ); getView()->GetPainter()->GetSettings()->SetHighlight( false );
} }
else else if ( aReason != TOOL_BASE::REDRAW )
{ {
// Restore previous properties of selected items and remove them from containers // Restore previous properties of selected items and remove them from containers
ClearSelection( true ); ClearSelection( true );