From 02eb1d2c62bdd723dfc1ad69614effd056c4f55b Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 19 Jul 2019 15:13:52 -0600 Subject: [PATCH] Don't try and run drawing tools in ModEdit with no module selected. Fixes: lp:1836673 * https://bugs.launchpad.net/kicad/+bug/1836673 --- pcbnew/tools/drawing_tool.cpp | 5 ++++- pcbnew/tools/footprint_editor_tools.cpp | 3 +++ pcbnew/tools/pcb_tool_base.cpp | 3 ++- pcbnew/tools/pcbnew_control.cpp | 6 ++++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pcbnew/tools/drawing_tool.cpp b/pcbnew/tools/drawing_tool.cpp index ac0b204bc6..eb57c84a13 100644 --- a/pcbnew/tools/drawing_tool.cpp +++ b/pcbnew/tools/drawing_tool.cpp @@ -1130,7 +1130,7 @@ bool DRAWING_TOOL::drawSegment( const std::string& aTool, int aShape, DRAWSEGMEN * of an Arc Geometry Manager */ static void updateArcFromConstructionMgr( const KIGFX::PREVIEW::ARC_GEOM_MANAGER& aMgr, - DRAWSEGMENT& aArc ) + DRAWSEGMENT& aArc ) { auto vec = aMgr.GetOrigin(); @@ -1357,6 +1357,9 @@ bool DRAWING_TOOL::getSourceZoneForAction( ZONE_MODE aMode, ZONE_CONTAINER*& aZo int DRAWING_TOOL::DrawZone( const TOOL_EVENT& aEvent ) { + if( m_editModules && !m_frame->GetModel() ) + return 0; + ZONE_MODE zoneMode = aEvent.Parameter(); MODE drawMode = MODE::ZONE; diff --git a/pcbnew/tools/footprint_editor_tools.cpp b/pcbnew/tools/footprint_editor_tools.cpp index 8f86f7c1a7..5abea8f88f 100644 --- a/pcbnew/tools/footprint_editor_tools.cpp +++ b/pcbnew/tools/footprint_editor_tools.cpp @@ -285,6 +285,9 @@ int MODULE_EDITOR_TOOLS::DefaultPadProperties( const TOOL_EVENT& aEvent ) int MODULE_EDITOR_TOOLS::PlacePad( const TOOL_EVENT& aEvent ) { + if( !m_frame->GetBoard()->GetFirstModule() ) + return 0; + struct PAD_PLACER : public INTERACTIVE_PLACER_BASE { std::unique_ptr CreateItem() override diff --git a/pcbnew/tools/pcb_tool_base.cpp b/pcbnew/tools/pcb_tool_base.cpp index 39a5b6a059..ebd45a303d 100644 --- a/pcbnew/tools/pcb_tool_base.cpp +++ b/pcbnew/tools/pcb_tool_base.cpp @@ -61,7 +61,8 @@ void PCB_TOOL_BASE::doInteractiveItemPlacement( const std::string& aTool, auto makeNewItem = [&] ( VECTOR2I aPosition ) { - newItem = aPlacer->CreateItem(); + if( frame()->GetModel() ) + newItem = aPlacer->CreateItem(); if( newItem ) { diff --git a/pcbnew/tools/pcbnew_control.cpp b/pcbnew/tools/pcbnew_control.cpp index bbc03acee0..63aaae2886 100644 --- a/pcbnew/tools/pcbnew_control.cpp +++ b/pcbnew/tools/pcbnew_control.cpp @@ -447,6 +447,9 @@ int PCBNEW_CONTROL::GridSetOrigin( const TOOL_EVENT& aEvent ) } else { + if( m_editModules && !getEditFrame()->GetModel() ) + return 0; + std::string tool = aEvent.GetCommandStr().get(); PCBNEW_PICKER_TOOL* picker = m_toolMgr->GetTool(); @@ -481,6 +484,9 @@ int PCBNEW_CONTROL::GridResetOrigin( const TOOL_EVENT& aEvent ) int PCBNEW_CONTROL::DeleteItemCursor( const TOOL_EVENT& aEvent ) { + if( m_editModules && !m_frame->GetBoard()->GetFirstModule() ) + return 0; + std::string tool = aEvent.GetCommandStr().get(); PCBNEW_PICKER_TOOL* picker = m_toolMgr->GetTool();