From 0ade919a98eaa3f5efa56dcf87fc07243e8e809c Mon Sep 17 00:00:00 2001 From: Tomasz Wlostowski Date: Thu, 2 Jul 2015 16:10:07 +0200 Subject: [PATCH] router: fix shortcut crash & inline dragging for inline dragging P&S --- pcbnew/router/pns_routing_settings.cpp | 3 +++ pcbnew/router/pns_routing_settings.h | 4 ++++ pcbnew/router/pns_tool_base.cpp | 2 +- pcbnew/router/pns_tool_base.h | 5 +++++ pcbnew/tools/common_actions.cpp | 2 +- pcbnew/tools/edit_tool.cpp | 11 ++++++++--- 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/pcbnew/router/pns_routing_settings.cpp b/pcbnew/router/pns_routing_settings.cpp index c3ab871376..ab76cac530 100644 --- a/pcbnew/router/pns_routing_settings.cpp +++ b/pcbnew/router/pns_routing_settings.cpp @@ -40,6 +40,7 @@ PNS_ROUTING_SETTINGS::PNS_ROUTING_SETTINGS() m_smoothDraggedSegments = true; m_canViolateDRC = false; m_freeAngleMode = false; + m_inlineDragEnabled = false; } void PNS_ROUTING_SETTINGS::Save ( TOOL_SETTINGS& aSettings ) const @@ -58,6 +59,7 @@ void PNS_ROUTING_SETTINGS::Save ( TOOL_SETTINGS& aSettings ) const aSettings.Set( "CanViolateDRC", m_canViolateDRC ); aSettings.Set( "SuggestFinish", m_suggestFinish ); aSettings.Set( "FreeAngleMode", m_freeAngleMode ); + aSettings.Set( "InlineDragEnabled", m_inlineDragEnabled ); } void PNS_ROUTING_SETTINGS::Load ( const TOOL_SETTINGS& aSettings ) @@ -76,6 +78,7 @@ void PNS_ROUTING_SETTINGS::Load ( const TOOL_SETTINGS& aSettings ) m_canViolateDRC = aSettings.Get( "CanViolateDRC", false ); m_suggestFinish = aSettings.Get( "SuggestFinish", false ); m_freeAngleMode = aSettings.Get( "FreeAngleMode", false ); + m_inlineDragEnabled = aSettings.Get( "InlineDragEnabled", false ); } const DIRECTION_45 PNS_ROUTING_SETTINGS::InitialDirection() const diff --git a/pcbnew/router/pns_routing_settings.h b/pcbnew/router/pns_routing_settings.h index d2ece53a34..3a175f92c1 100644 --- a/pcbnew/router/pns_routing_settings.h +++ b/pcbnew/router/pns_routing_settings.h @@ -131,6 +131,9 @@ public: TIME_LIMIT WalkaroundTimeLimit() const; + void SetInlineDragEnabled ( bool aEnable ) { m_inlineDragEnabled = aEnable; } + bool InlineDragEnabled( ) const { return m_inlineDragEnabled; } + private: bool m_shoveVias; bool m_startDiagonal; @@ -142,6 +145,7 @@ private: bool m_smoothDraggedSegments; bool m_canViolateDRC; bool m_freeAngleMode; + bool m_inlineDragEnabled; PNS_MODE m_routingMode; PNS_OPTIMIZATION_EFFORT m_optimizerEffort; diff --git a/pcbnew/router/pns_tool_base.cpp b/pcbnew/router/pns_tool_base.cpp index c34b5851ab..1f01b16330 100644 --- a/pcbnew/router/pns_tool_base.cpp +++ b/pcbnew/router/pns_tool_base.cpp @@ -247,7 +247,7 @@ void PNS_TOOL_BASE::updateEndItem( TOOL_EVENT& aEvent ) VECTOR2I p = getView()->ToWorld( mp ); VECTOR2I cp = m_ctls->GetCursorPosition(); int layer; - bool snapEnabled = !aEvent.Modifier( MD_CTRL ); + bool snapEnabled = !aEvent.Modifier( MD_SHIFT ); m_router->EnableSnapping( snapEnabled ); diff --git a/pcbnew/router/pns_tool_base.h b/pcbnew/router/pns_tool_base.h index db8998561a..11e7b9b2c6 100644 --- a/pcbnew/router/pns_tool_base.h +++ b/pcbnew/router/pns_tool_base.h @@ -43,6 +43,11 @@ public: virtual void Reset( RESET_REASON aReason ); + const PNS_ROUTING_SETTINGS& PNSSettings() const + { + return m_savedSettings; + } + protected: virtual PNS_ITEM* pickSingleItem( const VECTOR2I& aWhere, int aNet = -1, int aLayer = -1 ); diff --git a/pcbnew/tools/common_actions.cpp b/pcbnew/tools/common_actions.cpp index 63a467bc7a..85fcac33f7 100644 --- a/pcbnew/tools/common_actions.cpp +++ b/pcbnew/tools/common_actions.cpp @@ -530,7 +530,7 @@ TOOL_ACTION COMMON_ACTIONS::routerActivateTuneDiffPairSkew( "pcbnew.LengthTuner. _( "Tune skew of a differential pair" ), "", NULL, AF_ACTIVATE ); TOOL_ACTION COMMON_ACTIONS::routerInlineDrag( "pcbnew.InteractiveRouter.InlineDrag", - AS_GLOBAL, TOOL_ACTION::LegacyHotKey( HK_DRAG_TRACK_KEEP_SLOPE ), + AS_GLOBAL, 0, "", "" ); // Point editor diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp index 1b03be6b0e..6c6a18f0a5 100644 --- a/pcbnew/tools/edit_tool.cpp +++ b/pcbnew/tools/edit_tool.cpp @@ -49,6 +49,8 @@ #include "edit_tool.h" #include "grid_helper.h" +#include + #include #include @@ -105,11 +107,14 @@ bool EDIT_TOOL::invokeInlineRouter() TRACK* track = uniqueSelected(); VIA* via = uniqueSelected(); - if ( !GetSettings().Get("DragInvokesRouter", false ) ) - return false; - if( track || via ) { + ROUTER_TOOL *theRouter = static_cast ( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) ); + assert ( theRouter ); + + if( !theRouter->PNSSettings().InlineDragEnabled() ) + return false; + m_toolMgr->RunAction( COMMON_ACTIONS::routerInlineDrag, true, track ? track : via ); return true; }