From 69115e4b9d59b30290329d571c364ea7071712b2 Mon Sep 17 00:00:00 2001 From: John Beard Date: Thu, 23 Mar 2017 00:56:01 +0800 Subject: [PATCH] Signal via actions with flags, not event equality checking This allows actions to encode both via type and other behaviours intrisically witohut having to individually test for each action. --- pcbnew/router/router_tool.cpp | 49 +++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/pcbnew/router/router_tool.cpp b/pcbnew/router/router_tool.cpp index de95967d48..476f0d88ba 100644 --- a/pcbnew/router/router_tool.cpp +++ b/pcbnew/router/router_tool.cpp @@ -64,6 +64,20 @@ using namespace std::placeholders; using namespace KIGFX; using boost::optional; + +/** + * Flags used by via tool actions + */ +enum VIA_ACTION_FLAGS +{ + // Via type + VIA_MASK = 0x03, + VIA = 0x00, ///> Normal via + BLIND_VIA = 0x01, ///> blind/buried via + MICROVIA = 0x02, ///> Microvia +}; + + TOOL_ACTION PCB_ACTIONS::routerActivateSingle( "pcbnew.InteractiveRouter.SingleTrack", AS_GLOBAL, TOOL_ACTION::LegacyHotKey( HK_ADD_NEW_TRACK ), _( "Interactive Router (Single Tracks)" ), @@ -115,18 +129,21 @@ static const TOOL_ACTION ACT_PlaceThroughVia( "pcbnew.InteractiveRouter.PlaceVia AS_CONTEXT, TOOL_ACTION::LegacyHotKey( HK_ADD_THROUGH_VIA ), _( "Place Through Via" ), _( "Adds a through-hole via at the end of currently routed track." ), - via_xpm ); + via_xpm, AF_NONE, + (void*) VIA_ACTION_FLAGS::VIA ); static const TOOL_ACTION ACT_PlaceBlindVia( "pcbnew.InteractiveRouter.PlaceBlindVia", AS_CONTEXT, TOOL_ACTION::LegacyHotKey( HK_ADD_BLIND_BURIED_VIA ), _( "Place Blind/Buried Via" ), _( "Adds a blind or buried via at the end of currently routed track."), - via_buried_xpm ); + via_buried_xpm, AF_NONE, + (void*) VIA_ACTION_FLAGS::BLIND_VIA ); static const TOOL_ACTION ACT_PlaceMicroVia( "pcbnew.InteractiveRouter.PlaceMicroVia", AS_CONTEXT, TOOL_ACTION::LegacyHotKey( HK_ADD_MICROVIA ), _( "Place Microvia" ), _( "Adds a microvia at the end of currently routed track." ), - via_microvia_xpm ); + via_microvia_xpm, AF_NONE, + (void*) VIA_ACTION_FLAGS::MICROVIA ); static const TOOL_ACTION ACT_CustomTrackWidth( "pcbnew.InteractiveRouter.CustomTrackViaSize", AS_CONTEXT, 'Q', @@ -418,18 +435,34 @@ void ROUTER_TOOL::switchLayerOnViaPlacement() } -int ROUTER_TOOL::onViaCommand( const TOOL_EVENT& aEvent ) +static VIATYPE_T getViaTypeFromFlags( int aFlags ) { VIATYPE_T viaType = VIA_THROUGH; - if( aEvent.IsAction( &ACT_PlaceThroughVia ) ) + switch( aFlags & VIA_ACTION_FLAGS::VIA_MASK ) + { + case VIA_ACTION_FLAGS::VIA: viaType = VIA_THROUGH; - else if( aEvent.IsAction( &ACT_PlaceBlindVia ) ) + break; + case VIA_ACTION_FLAGS::BLIND_VIA: viaType = VIA_BLIND_BURIED; - else if( aEvent.IsAction( &ACT_PlaceMicroVia ) ) + break; + case VIA_ACTION_FLAGS::MICROVIA: viaType = VIA_MICROVIA; - else + break; + default: wxASSERT_MSG( false, "Unhandled via type" ); + } + + return viaType; +} + + +int ROUTER_TOOL::onViaCommand( const TOOL_EVENT& aEvent ) +{ + const int actViaFlags = aEvent.Parameter(); + + VIATYPE_T viaType = getViaTypeFromFlags( actViaFlags ); BOARD_DESIGN_SETTINGS& bds = m_board->GetDesignSettings();