Simplified code for switching layers in GAL view. Tools are notified of layer change event.

This commit is contained in:
Maciej Suminski 2014-07-09 16:25:50 +02:00
parent c0a96141df
commit db0d708300
8 changed files with 50 additions and 103 deletions

View File

@ -828,8 +828,11 @@ void PCB_EDIT_FRAME::SetActiveLayer( LAYER_ID aLayer )
syncLayerWidgetLayer();
if( IsGalCanvasActive() )
{
m_toolManager->RunAction( COMMON_ACTIONS::layerChanged ); // notify other tools
GetGalCanvas()->Refresh();
}
}
void PCB_EDIT_FRAME::syncLayerWidgetLayer()

View File

@ -222,6 +222,10 @@ TOOL_ACTION COMMON_ACTIONS::layerAlphaDec( "pcbnew.Control.layerAlphaDec",
AS_GLOBAL, '{',
"", "" );
TOOL_ACTION COMMON_ACTIONS::layerChanged( "pcbnew.Control.layerChanged",
AS_GLOBAL, 0,
"", "", AF_NOTIFY );
// Grid control
TOOL_ACTION COMMON_ACTIONS::gridFast1( "pcbnew.Control.gridFast1",

View File

@ -157,6 +157,8 @@ public:
static TOOL_ACTION layerAlphaInc;
static TOOL_ACTION layerAlphaDec;
static TOOL_ACTION layerChanged; // notification
// Grid control
static TOOL_ACTION gridFast1;
static TOOL_ACTION gridFast2;

View File

@ -889,7 +889,7 @@ bool DRAWING_TOOL::drawSegment( int aShape, DRAWSEGMENT*& aGraphic,
if( aStartingPoint )
{
LAYER_NUM layer = m_frame->GetScreen()->m_Active_Layer;
LAYER_ID layer = m_frame->GetScreen()->m_Active_Layer;
// Init the new item attributes
aGraphic->SetShape( (STROKE_T) aShape );

View File

@ -576,14 +576,9 @@ int MODULE_TOOLS::ModuleEdgeOutlines( TOOL_EVENT& aEvent )
KIGFX::PCB_RENDER_SETTINGS* settings =
static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() );
const LAYER_NUM layers[] = { ADHESIVE_N_FRONT, ADHESIVE_N_BACK,\
SOLDERPASTE_N_FRONT, SOLDERPASTE_N_BACK,\
SILKSCREEN_N_FRONT, SILKSCREEN_N_BACK,\
SOLDERMASK_N_FRONT, SOLDERMASK_N_BACK,\
DRAW_N,\
COMMENT_N,\
ECO1_N, ECO2_N,\
EDGE_N };
const LAYER_ID layers[] = { F_Adhes, B_Adhes, F_Paste, B_Paste,
F_SilkS, B_SilkS, F_Mask, B_Mask,
Dwgs_User, Cmts_User, Eco1_User, Eco2_User, Edge_Cuts };
bool enable = !settings->GetSketchMode( layers[0] );

View File

@ -279,79 +279,25 @@ int PCBNEW_CONTROL::HighContrastDec( TOOL_EVENT& aEvent )
// Layer control
int PCBNEW_CONTROL::LayerTop( TOOL_EVENT& aEvent )
int PCBNEW_CONTROL::LayerSwitch( TOOL_EVENT& aEvent )
{
if( aEvent.IsAction( &COMMON_ACTIONS::layerTop ) )
m_frame->SwitchLayer( NULL, F_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
return 0;
}
int PCBNEW_CONTROL::LayerInner1( TOOL_EVENT& aEvent )
{
else if( aEvent.IsAction( &COMMON_ACTIONS::layerInner1 ) )
m_frame->SwitchLayer( NULL, In1_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
return 0;
}
int PCBNEW_CONTROL::LayerInner2( TOOL_EVENT& aEvent )
{
else if( aEvent.IsAction( &COMMON_ACTIONS::layerInner2 ) )
m_frame->SwitchLayer( NULL, In2_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
return 0;
}
int PCBNEW_CONTROL::LayerInner3( TOOL_EVENT& aEvent )
{
else if( aEvent.IsAction( &COMMON_ACTIONS::layerInner3 ) )
m_frame->SwitchLayer( NULL, In3_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
return 0;
}
int PCBNEW_CONTROL::LayerInner4( TOOL_EVENT& aEvent )
{
else if( aEvent.IsAction( &COMMON_ACTIONS::layerInner4 ) )
m_frame->SwitchLayer( NULL, In4_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
return 0;
}
int PCBNEW_CONTROL::LayerInner5( TOOL_EVENT& aEvent )
{
else if( aEvent.IsAction( &COMMON_ACTIONS::layerInner5 ) )
m_frame->SwitchLayer( NULL, In5_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
return 0;
}
int PCBNEW_CONTROL::LayerInner6( TOOL_EVENT& aEvent )
{
else if( aEvent.IsAction( &COMMON_ACTIONS::layerInner6 ) )
m_frame->SwitchLayer( NULL, In6_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
else if( aEvent.IsAction( &COMMON_ACTIONS::layerBottom ) )
m_frame->SwitchLayer( NULL, B_Cu );
return 0;
}
int PCBNEW_CONTROL::LayerBottom( TOOL_EVENT& aEvent )
{
m_frame->SetActiveLayer( B_Cu );
m_frame->GetGalCanvas()->SetFocus();
setTransitions();
@ -364,15 +310,17 @@ int PCBNEW_CONTROL::LayerNext( TOOL_EVENT& aEvent )
PCB_BASE_FRAME* editFrame = m_frame;
LAYER_NUM layer = editFrame->GetActiveLayer();
if( layer < F_Cu || layer >= B_Cu )
if( layer < F_Cu || layer > B_Cu )
{
setTransitions();
return 0;
}
if( getModel<BOARD>()->GetCopperLayerCount() < 2 ) // Single layer
int layerCount = getModel<BOARD>()->GetCopperLayerCount();
if( layer == layerCount - 2 || layerCount < 2 )
layer = B_Cu;
else if( layer >= getModel<BOARD>()->GetCopperLayerCount() - 2 )
else if( layer == B_Cu )
layer = F_Cu;
else
++layer;
@ -390,16 +338,18 @@ int PCBNEW_CONTROL::LayerPrev( TOOL_EVENT& aEvent )
PCB_BASE_FRAME* editFrame = m_frame;
LAYER_NUM layer = editFrame->GetActiveLayer();
if( layer <= F_Cu || layer > B_Cu )
if( layer < F_Cu || layer > B_Cu )
{
setTransitions();
return 0;
}
if( getModel<BOARD>()->GetCopperLayerCount() < 2 ) // Single layer
int layerCount = getModel<BOARD>()->GetCopperLayerCount();
if( layer == F_Cu || layerCount < 2 )
layer = B_Cu;
else if( layer == B_Cu )
layer = std::max( int( F_Cu ), getModel<BOARD>()->GetCopperLayerCount() - 2 );
layer = layerCount - 2;
else
--layer;
@ -617,14 +567,14 @@ void PCBNEW_CONTROL::setTransitions()
Go( &PCBNEW_CONTROL::HighContrastDec, COMMON_ACTIONS::highContrastDec.MakeEvent() );
// Layer control
Go( &PCBNEW_CONTROL::LayerTop, COMMON_ACTIONS::layerTop.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerInner1, COMMON_ACTIONS::layerInner1.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerInner2, COMMON_ACTIONS::layerInner2.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerInner3, COMMON_ACTIONS::layerInner3.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerInner4, COMMON_ACTIONS::layerInner4.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerInner5, COMMON_ACTIONS::layerInner5.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerInner6, COMMON_ACTIONS::layerInner6.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerBottom, COMMON_ACTIONS::layerBottom.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerTop.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerInner1.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerInner2.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerInner3.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerInner4.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerInner5.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerInner6.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerSwitch, COMMON_ACTIONS::layerBottom.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerNext, COMMON_ACTIONS::layerNext.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerPrev, COMMON_ACTIONS::layerPrev.MakeEvent() );
Go( &PCBNEW_CONTROL::LayerAlphaInc, COMMON_ACTIONS::layerAlphaInc.MakeEvent() );

View File

@ -62,14 +62,7 @@ public:
int HighContrastDec( TOOL_EVENT& aEvent );
// Layer control
int LayerTop( TOOL_EVENT& aEvent );
int LayerInner1( TOOL_EVENT& aEvent );
int LayerInner2( TOOL_EVENT& aEvent );
int LayerInner3( TOOL_EVENT& aEvent );
int LayerInner4( TOOL_EVENT& aEvent );
int LayerInner5( TOOL_EVENT& aEvent );
int LayerInner6( TOOL_EVENT& aEvent );
int LayerBottom( TOOL_EVENT& aEvent );
int LayerSwitch( TOOL_EVENT& aEvent );
int LayerNext( TOOL_EVENT& aEvent );
int LayerPrev( TOOL_EVENT& aEvent );
int LayerAlphaInc( TOOL_EVENT& aEvent );

View File

@ -303,7 +303,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
{
for( BOARD_ITEM* item = module->GraphicalItems(); item; item = item->Next() )
{
if( !item->IsOnLayer( GetLayer() ) && !item->IsOnLayer( EDGE_N ) )
if( !item->IsOnLayer( GetLayer() ) && !item->IsOnLayer( Edge_Cuts ) )
continue;
if( item->Type() != PCB_MODULE_EDGE_T )