diff --git a/pcbnew/layer_widget.cpp b/pcbnew/layer_widget.cpp index 5fb2963b99..80581f878b 100644 --- a/pcbnew/layer_widget.cpp +++ b/pcbnew/layer_widget.cpp @@ -301,9 +301,34 @@ int LAYER_WIDGET::findLayerRow( int aLayer ) for( int row=0; rowGetId() )) + if( aLayer == getDecodedId( w->GetId() )) + return row; + } + return -1; +} + + +wxWindow* LAYER_WIDGET::getRenderComp( int aSizerNdx ) +{ + if( (unsigned) aSizerNdx < m_RenderFlexGridSizer->GetChildren().GetCount() ) + return m_RenderFlexGridSizer->GetChildren()[aSizerNdx]->GetWindow(); + return NULL; +} + + +int LAYER_WIDGET::findRenderRow( int aId ) +{ + int count = GetRenderRowCount(); + for( int row=0; rowGetId() )) return row; } return -1; @@ -675,6 +700,82 @@ void LAYER_WIDGET::SetLayerVisible( int aLayer, bool isVisible ) } } + +bool LAYER_WIDGET::IsLayerVisible( int aLayer ) +{ + int row = findLayerRow( aLayer ); + if( row >= 0 ) + { + wxCheckBox* cb = (wxCheckBox*) getLayerComp( row * LYR_COLUMN_COUNT + 3 ); + wxASSERT( cb ); + return cb->GetValue(); + } + return false; +} + + +void LAYER_WIDGET::SetLayerColor( int aLayer, int aColor ) +{ + int row = findLayerRow( aLayer ); + if( row >= 0 ) + { + int col = 1; // bitmap button is column 1 + wxBitmapButton* bmb = (wxBitmapButton*) getLayerComp( row * LYR_COLUMN_COUNT + col ); + wxASSERT( bmb ); + + wxBitmap bm = makeBitmap( aColor ); + + bmb->SetBitmapLabel( bm ); + bmb->SetName( makeColorTxt( aColor ) ); // save color value in name as string + } +} + + +int LAYER_WIDGET::GetLayerColor( int aLayer ) +{ + int row = findLayerRow( aLayer ); + if( row >= 0 ) + { + int col = 1; // bitmap button is column 1 + wxBitmapButton* bmb = (wxBitmapButton*) getLayerComp( row * LYR_COLUMN_COUNT + col ); + wxASSERT( bmb ); + + wxString colorTxt = bmb->GetName(); + int color = strtoul( CONV_TO_UTF8(colorTxt), NULL, 0 ); + return color; + } + + return 0; // it's caller fault, gave me a bad layer +} + + +void LAYER_WIDGET::SetRenderState( int aId, bool isSet ) +{ + int row = findRenderRow( aId ); + if( row >= 0 ) + { + int col = 1; // checkbox is column 1 + wxCheckBox* cb = (wxCheckBox*) getRenderComp( row * RND_COLUMN_COUNT + col ); + wxASSERT( cb ); + cb->SetValue( isSet ); // does not fire an event + } +} + + +bool LAYER_WIDGET::GetRenderState( int aId ) +{ + int row = findRenderRow( aId ); + if( row >= 0 ) + { + int col = 1; // checkbox is column 1 + wxCheckBox* cb = (wxCheckBox*) getRenderComp( row * RND_COLUMN_COUNT + col ); + wxASSERT( cb ); + return cb->GetValue(); + } + return false; // the value of a non-existent row +} + + void LAYER_WIDGET::UpdateLayouts() { m_LayersFlexGridSizer->Layout(); diff --git a/pcbnew/layer_widget.h b/pcbnew/layer_widget.h index 0b7d1e46c9..d54751bf18 100644 --- a/pcbnew/layer_widget.h +++ b/pcbnew/layer_widget.h @@ -162,12 +162,14 @@ protected: * been added to the m_LayersFlexGridSizer. */ wxWindow* getLayerComp( int aSizerNdx ); + wxWindow* getRenderComp( int aSizerNdx ); /** * Function findLayerRow * returns the row index that \a aLayer resides in, or -1 if not found. */ int findLayerRow( int aLayer ); + int findRenderRow( int aId ); /** * Function insertLayerRow @@ -288,6 +290,42 @@ public: */ void SetLayerVisible( int aLayer, bool isVisible ); + /** + * Function IsLayerVisible + * returns the visible state of the layer ROW associated with \a aLayer id. + */ + bool IsLayerVisible( int aLayer ); + + /** + * Function SetLayerColor + * changes the color of \a aLayer + */ + void SetLayerColor( int aLayer, int aColor ); + + /** + * Function GetLayerColor + * returns the color of the layer ROW associated with \a aLayer id. + */ + int GetLayerColor( int aLayer ); + + /** + * Function SetRenderState + * sets the state of the checkbox associated with \a aId within the + * Render tab group of the widget. Does not fire an event, i.e. does + * not invoke OnRenderEnable(). + * @param aId is the same unique id used when adding a ROW to the + * Render tab. + */ + void SetRenderState( int aId, bool isSet ); + + /** + * Function GetRenderState + * returns the state of the checkbox associated with \a aId. + * @return bool - true if checked, else false. + */ + bool GetRenderState( int aId ); + + void UpdateLayouts(); /* did not help: