Another attempt to fix the select-reference-point toolstack thing.

This time remove the push/pop from the picker tools as that's
responsible for the issue of trying to re-activate the move action
when its popped.  Instead do the push/pop from the client code
of other actions that need it, and not at all from the move-with-
reference action.

Fixes https://gitlab.com/kicad/code/kicad/issues/5336
This commit is contained in:
Jeff Young 2020-08-24 22:44:34 +01:00
parent 50b182574d
commit b8bbe72e48
4 changed files with 28 additions and 28 deletions

View File

@ -96,13 +96,6 @@ void TOOLS_HOLDER::PopTool( const std::string& actionName )
}
void TOOLS_HOLDER::ClearToolStack()
{
m_toolStack.clear();
DisplayToolMsg( ACTIONS::selectionTool.GetLabel() );
}
std::string TOOLS_HOLDER::CurrentToolName() const
{
if( m_toolStack.empty() )

View File

@ -114,8 +114,6 @@ public:
virtual void PushTool( const std::string& actionName );
virtual void PopTool( const std::string& actionName );
void ClearToolStack();
bool ToolStackIsEmpty() { return m_toolStack.empty(); }
std::string CurrentToolName() const;

View File

@ -369,7 +369,6 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
return 0;
std::string tool = aEvent.GetCommandStr().get();
editFrame->PushTool( tool );
Activate();
controls->ShowCursor( true );
@ -381,8 +380,7 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
if( unselect )
m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
editFrame->ClearToolStack();
editFrame->PopTool( tool );
return 0;
}
@ -661,7 +659,6 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
editFrame->PopTool( tool );
return 0;
}
@ -1570,7 +1567,6 @@ bool EDIT_TOOL::updateModificationPoint( PCBNEW_SELECTION& aSelection )
bool EDIT_TOOL::pickReferencePoint( const wxString& aTooltip, const wxString& aSuccessMessage,
const wxString& aCanceledMessage, VECTOR2I& aReferencePoint )
{
std::string tool = "pcbnew.InteractiveEdit.selectReferencePoint";
STATUS_TEXT_POPUP statusPopup( frame() );
PCBNEW_PICKER_TOOL* picker = m_toolMgr->GetTool<PCBNEW_PICKER_TOOL>();
OPT<VECTOR2I> pickedPoint;
@ -1625,6 +1621,7 @@ bool EDIT_TOOL::pickReferencePoint( const wxString& aTooltip, const wxString& aS
statusPopup.Move( wxGetMousePosition() + wxPoint( 20, -50 ) );
statusPopup.Popup();
std::string tool = "";
m_toolMgr->RunAction( ACTIONS::pickerTool, true, &tool );
while( !done )
@ -1642,8 +1639,10 @@ bool EDIT_TOOL::pickReferencePoint( const wxString& aTooltip, const wxString& aS
int EDIT_TOOL::copyToClipboard( const TOOL_EVENT& aEvent )
{
std::string tool = "pcbnew.InteractiveEdit.selectReferencePoint";
CLIPBOARD_IO io;
frame()->PushTool( tool );
Activate();
PCBNEW_SELECTION& selection = m_selectionTool->RequestSelection(
@ -1651,21 +1650,25 @@ int EDIT_TOOL::copyToClipboard( const TOOL_EVENT& aEvent )
EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED_PADS | EXCLUDE_TRANSIENTS, sTool );
} );
if( selection.Empty() )
return 1;
if( !selection.Empty() )
{
VECTOR2I refPoint;
bool rv = pickReferencePoint( _( "Select reference point for the copy..." ),
_( "Selection copied." ),
_( "Copy cancelled." ),
refPoint );
frame()->SetMsgPanel( board() );
VECTOR2I refPoint;
bool rv = pickReferencePoint( _( "Select reference point for the copy..." ),
_( "Selection copied." ), _( "Copy cancelled." ), refPoint );
frame()->SetMsgPanel( board() );
if( rv )
{
selection.SetReferencePoint( refPoint );
if( !rv )
return 1;
io.SetBoard( board() );
io.SaveSelection( selection, m_editModules );
}
}
selection.SetReferencePoint( refPoint );
io.SetBoard( board() );
io.SaveSelection( selection, m_editModules );
frame()->PopTool( tool );
return 0;
}

View File

@ -46,7 +46,10 @@ int PCBNEW_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
int finalize_state = WAIT_CANCEL;
std::string tool = *aEvent.Parameter<std::string*>();
frame->PushTool( tool );
if( !tool.empty() )
frame->PushTool( tool );
Activate();
setControls();
@ -152,7 +155,10 @@ int PCBNEW_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
reset();
controls->ForceCursorPosition( false );
frame->PopTool( tool );
if( !tool.empty() )
frame->PopTool( tool );
return 0;
}