Net highlighting is moved to a separate TOOL_ACTION.

This commit is contained in:
Maciej Suminski 2015-06-18 17:51:50 +02:00
parent c636c4e735
commit ac10ca40f8
6 changed files with 54 additions and 33 deletions

View File

@ -383,6 +383,10 @@ TOOL_ACTION COMMON_ACTIONS::placeModule( "pcbnew.EditorControl.placeModule",
AS_GLOBAL, TOOL_ACTION::LegacyHotKey( HK_ADD_MODULE ),
_( "Add modules" ), _( "Add modules" ), NULL, AF_ACTIVATE );
TOOL_ACTION COMMON_ACTIONS::highlightNet( "pcbnew.EditorControl.highlightNet",
AS_GLOBAL, 0,
"", "" );
// Module editor tools
TOOL_ACTION COMMON_ACTIONS::placePad( "pcbnew.ModuleEditor.placePad",

View File

@ -270,6 +270,7 @@ public:
static TOOL_ACTION resetCoords;
static TOOL_ACTION switchCursor;
static TOOL_ACTION switchUnits;
static TOOL_ACTION highlightNet;
static TOOL_ACTION showHelp;
static TOOL_ACTION toBeDone;

View File

@ -30,6 +30,7 @@
#include "selection_tool.h"
#include <painter.h>
#include <project.h>
#include <pcbnew_id.h>
#include <wxPcbStruct.h>
@ -39,6 +40,7 @@
#include <class_module.h>
#include <class_mire.h>
#include <ratsnest_data.h>
#include <collectors.h>
#include <view/view_group.h>
#include <view/view_controls.h>
@ -466,6 +468,47 @@ int PCB_EDITOR_CONTROL::SelectionCrossProbe( const TOOL_EVENT& aEvent )
}
/**
* Function highlightNet()
* Looks for a BOARD_CONNECTED_ITEM in a given spot, and if one is found - it enables
* highlight for its net.
* @param aPoint is the point where an item is expected (world coordinates).
*/
static bool highlightNet( TOOL_MANAGER* aToolMgr, const VECTOR2D& aPosition )
{
KIGFX::RENDER_SETTINGS* render = aToolMgr->GetView()->GetPainter()->GetSettings();
GENERAL_COLLECTORS_GUIDE guide = static_cast<PCB_BASE_FRAME*>( aToolMgr->GetEditFrame() )->GetCollectorsGuide();
BOARD* board = static_cast<BOARD*>( aToolMgr->GetModel() );
GENERAL_COLLECTOR collector;
int net = -1;
// Find a connected item for which we are going to highlight a net
collector.Collect( board, GENERAL_COLLECTOR::PadsTracksOrZones,
wxPoint( aPosition.x, aPosition.y ), guide );
bool enableHighlight = ( collector.GetCount() > 0 );
// Obtain net code for the clicked item
if( enableHighlight )
net = static_cast<BOARD_CONNECTED_ITEM*>( collector[0] )->GetNetCode();
if( enableHighlight != render->GetHighlight() || net != render->GetHighlightNetCode() )
{
render->SetHighlight( enableHighlight, net );
aToolMgr->GetView()->UpdateAllLayersColor();
}
return true;
}
int PCB_EDITOR_CONTROL::HighlightNet( const TOOL_EVENT& aEvent )
{
highlightNet( m_toolMgr, getView()->ToWorld( getViewControls()->GetMousePosition() ) );
return 0;
}
void PCB_EDITOR_CONTROL::SetTransitions()
{
// Track & via size control
@ -484,7 +527,9 @@ void PCB_EDITOR_CONTROL::SetTransitions()
Go( &PCB_EDITOR_CONTROL::PlaceTarget, COMMON_ACTIONS::placeTarget.MakeEvent() );
Go( &PCB_EDITOR_CONTROL::PlaceModule, COMMON_ACTIONS::placeModule.MakeEvent() );
// Other
Go( &PCB_EDITOR_CONTROL::SelectionCrossProbe, SELECTION_TOOL::SelectedEvent );
Go( &PCB_EDITOR_CONTROL::HighlightNet, COMMON_ACTIONS::highlightNet.MakeEvent() );
}

View File

@ -72,6 +72,9 @@ public:
///> Notifies eeschema about the selected item.
int SelectionCrossProbe( const TOOL_EVENT& aEvent );
///> Highlights net belonging to the item under the cursor.
int HighlightNet( const TOOL_EVENT& aEvent );
///> Sets up handlers for various events.
void SetTransitions();

View File

@ -146,7 +146,7 @@ int SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
{
if( evt->Modifier( MD_CTRL ) && !m_editModules )
{
highlightNet( evt->Position() );
m_toolMgr->RunAction( COMMON_ACTIONS::highlightNet, true );
}
else
{
@ -1004,30 +1004,6 @@ bool SELECTION_TOOL::selectionContains( const VECTOR2I& aPoint ) const
}
void SELECTION_TOOL::highlightNet( const VECTOR2I& aPoint )
{
KIGFX::RENDER_SETTINGS* render = getView()->GetPainter()->GetSettings();
GENERAL_COLLECTORS_GUIDE guide = m_frame->GetCollectorsGuide();
GENERAL_COLLECTOR collector;
int net = -1;
// Find a connected item for which we are going to highlight a net
collector.Collect( getModel<BOARD>(), GENERAL_COLLECTOR::PadsTracksOrZones,
wxPoint( aPoint.x, aPoint.y ), guide );
bool enableHighlight = ( collector.GetCount() > 0 );
// Obtain net code for the clicked item
if( enableHighlight )
net = static_cast<BOARD_CONNECTED_ITEM*>( collector[0] )->GetNetCode();
if( enableHighlight != render->GetHighlight() || net != render->GetHighlightNetCode() )
{
render->SetHighlight( enableHighlight, net );
getView()->UpdateAllLayersColor();
}
}
static double calcArea( BOARD_ITEM* aItem )
{
switch( aItem -> Type() )

View File

@ -294,14 +294,6 @@ private:
*/
bool selectionContains( const VECTOR2I& aPoint ) const;
/**
* Function highlightNet()
* Looks for a BOARD_CONNECTED_ITEM in a given spot, and if one is found - it enables
* highlight for its net.
* @param aPoint is the point where an item is expected (world coordinates).
*/
void highlightNet( const VECTOR2I& aPoint );
/**
* Function guessSelectionCandidates()
* Tries to guess best selection candidates in case multiple items are clicked, by