Gerbview: finishing layer_widget integration to manage gerber layers colors and visibility

This commit is contained in:
charras 2010-02-04 09:08:08 +00:00
parent 9b57038c75
commit 1173add9ab
7 changed files with 80 additions and 11 deletions

View File

@ -4,13 +4,18 @@ KiCad ChangeLog 2010
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2010-Feb-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
++ gerbview:
Use layer_widget to manage gerber layers colors and visibility.
2010-Jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr> 2010-Jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================ ================================================================================
++ pcbnew: ++ pcbnew:
More about work on color selection and items visibility: More about work on color selection and items visibility:
removed global variables and a lot of redundancies removed global variables and a lot of redundancies
Now Modedit does not uses the visiblity options of the board editor Now Modedit does not uses the visiblity options of the board editor
(That can create a problem id hide modules is activated) (That can create a problem if hide modules is activated)
work in progress but almost finished work in progress but almost finished

View File

@ -202,8 +202,8 @@ bool GERBER_LAYER_WIDGET::OnLayerSelect( int aLayer )
{ {
// the layer change from the GERBER_LAYER_WIDGET can be denied by returning // the layer change from the GERBER_LAYER_WIDGET can be denied by returning
// false from this function. // false from this function.
// myframe->setActiveLayer( aLayer, false ); myframe->setActiveLayer( aLayer, false );
// myframe->syncLayerBox(); myframe->syncLayerBox();
if(DisplayOpt.ContrastModeDisplay) if(DisplayOpt.ContrastModeDisplay)
myframe->DrawPanel->Refresh(); myframe->DrawPanel->Refresh();

View File

@ -157,7 +157,7 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event )
break; break;
case ID_TOOLBARH_GERBVIEW_SELECT_LAYER: case ID_TOOLBARH_GERBVIEW_SELECT_LAYER:
GetScreen()->m_Active_Layer = m_SelLayerBox->GetChoice(); setActiveLayer(m_SelLayerBox->GetChoice());
DrawPanel->Refresh( TRUE ); DrawPanel->Refresh( TRUE );
break; break;

View File

@ -47,15 +47,19 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event )
case ID_MENU_INC_LAYER_AND_APPEND_FILE: case ID_MENU_INC_LAYER_AND_APPEND_FILE:
case ID_INC_LAYER_AND_APPEND_FILE: case ID_INC_LAYER_AND_APPEND_FILE:
{ {
int origLayer = GetScreen()->m_Active_Layer; int origLayer = getActiveLayer();
if( origLayer < NB_LAYERS )
GetScreen()->m_Active_Layer++; {
setActiveLayer(origLayer+1);
if( !LoadOneGerberFile( wxEmptyString, 0 ) ) if( !LoadOneGerberFile( wxEmptyString, 0 ) )
GetScreen()->m_Active_Layer = origLayer; setActiveLayer(origLayer);
SetToolbars(); SetToolbars();
} }
else
wxMessageBox(_("Cannot increment layer number: max count reached") );
}
break; break;
case ID_APPEND_FILE: case ID_APPEND_FILE:

View File

@ -415,6 +415,8 @@ void WinEDA_GerberFrame::ReFillLayerWidget()
m_auimgr.Update(); m_auimgr.Update();
else else
m_LayersManager->SetSize( bestz ); m_LayersManager->SetSize( bestz );
syncLayerWidget( );
} }
/** Function IsGridVisible() , virtual /** Function IsGridVisible() , virtual
@ -463,3 +465,21 @@ void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewSta
GetBoard()->SetElementVisibility( aGERBER_VISIBLE, aNewState ); GetBoard()->SetElementVisibility( aGERBER_VISIBLE, aNewState );
m_LayersManager->SetRenderState( aGERBER_VISIBLE, aNewState ); m_LayersManager->SetRenderState( aGERBER_VISIBLE, aNewState );
} }
void WinEDA_GerberFrame::syncLayerWidget( )
{
m_LayersManager->SelectLayer( getActiveLayer() );
}
/**
* Function syncLayerBox
* updates the currently "selected" layer within m_SelLayerBox
* The currently active layer, as defined by the return value of
* getActiveLayer(). And updates the colored icon in the toolbar.
*/
void WinEDA_GerberFrame::syncLayerBox()
{
m_SelLayerBox->SetSelection( getActiveLayer() );
}

View File

@ -214,7 +214,7 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
ID_TOOLBARH_GERBVIEW_SELECT_LAYER, ID_TOOLBARH_GERBVIEW_SELECT_LAYER,
wxDefaultPosition, wxSize( 150, -1 ), wxDefaultPosition, wxSize( 150, -1 ),
choices ); choices );
m_SelLayerBox->SetSelection( GetScreen()->m_Active_Layer ); m_SelLayerBox->SetSelection( getActiveLayer() );
m_HToolBar->AddControl( m_SelLayerBox ); m_HToolBar->AddControl( m_SelLayerBox );
m_HToolBar->AddSeparator(); m_HToolBar->AddSeparator();

View File

@ -117,6 +117,46 @@ public:
*/ */
void ReFillLayerWidget(); void ReFillLayerWidget();
/**
* Function setActiveLayer
* will change the currently active layer to \a aLayer and also
* update the PCB_LAYER_WIDGET.
*/
void setActiveLayer( int aLayer, bool doLayerWidgetUpdate = true )
{
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = aLayer;
if( doLayerWidgetUpdate )
syncLayerWidget();
}
/**
* Function getActiveLayer
* returns the active layer
*/
int getActiveLayer()
{
return ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
}
/**
* Function syncLayerWidget
* updates the currently "selected" layer within the PCB_LAYER_WIDGET.
* The currently active layer is defined by the return value of getActiveLayer().
* <p>
* This function cannot be inline without including layer_widget.h in
* here and we do not want to do that.
*/
void syncLayerWidget( );
/**
* Function syncLayerBox
* updates the currently "selected" layer within m_SelLayerBox
* The currently active layer, as defined by the return value of
* getActiveLayer(). And updates the colored icon in the toolbar.
*/
void syncLayerBox();
/** /**
* Load applications settings specific to the PCBNew. * Load applications settings specific to the PCBNew.
* *