Footprint browser: Handle frame calls

The frame() call requires an edit frame but the browser is derived from
PCB_BASE_FRAME.

Fixes: lp:1849962
* https://bugs.launchpad.net/kicad/+bug/1849962
This commit is contained in:
Seth Hillbrand 2019-10-26 08:25:19 -07:00
parent 4f594550a2
commit 39241dc0ff
3 changed files with 8 additions and 5 deletions

View File

@ -50,6 +50,7 @@
#include <tools/selection_tool.h>
#include <tools/pcbnew_control.h>
#include <tools/pcb_actions.h>
#include "tools/pcbnew_picker_tool.h"
#include <board_commit.h>
#include <memory>
#include <eda_pattern_match.h>
@ -204,6 +205,7 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
m_toolManager->RegisterTool( new SELECTION_TOOL );
m_toolManager->RegisterTool( new COMMON_TOOLS ); // for std context menus (zoom & grid)
m_toolManager->RegisterTool( new COMMON_CONTROL );
m_toolManager->RegisterTool( new PCBNEW_PICKER_TOOL ); // for setting grid origin
m_toolManager->InitTools();
m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );

View File

@ -145,7 +145,7 @@ protected:
PCB_BASE_EDIT_FRAME* frame() const
{
return getEditFrame<PCB_BASE_EDIT_FRAME>();
return getEditFrame<PCB_BASE_EDIT_FRAME>();
}
BOARD* board() const { return getModel<BOARD>(); }

View File

@ -41,17 +41,18 @@ PCBNEW_PICKER_TOOL::PCBNEW_PICKER_TOOL()
int PCBNEW_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
{
KIGFX::VIEW_CONTROLS* controls = getViewControls();
GRID_HELPER grid( frame() );
auto tool_frame = getEditFrame<PCB_BASE_FRAME>();
GRID_HELPER grid( tool_frame );
int finalize_state = WAIT_CANCEL;
std::string tool = *aEvent.Parameter<std::string*>();
frame()->PushTool( tool );
tool_frame->PushTool( tool );
Activate();
setControls();
while( TOOL_EVENT* evt = Wait() )
{
frame()->GetCanvas()->SetCursor( m_cursor );
tool_frame->GetCanvas()->SetCursor( m_cursor );
grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
grid.SetUseGrid( !evt->Modifier( MD_ALT ) );
@ -155,7 +156,7 @@ int PCBNEW_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
reset();
controls->ForceCursorPosition( false );
frame()->PopTool( tool );
tool_frame->PopTool( tool );
return 0;
}