diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index b2cf4e5c9d..d535d0d630 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -297,14 +297,12 @@ set( PCBNEW_CLASS_SRCS grid_layer_box_helpers.cpp grid_layer_box_helpers.h initpcb.cpp - layer_widget.cpp load_select_footprint.cpp menubar_footprint_editor.cpp menubar_pcb_editor.cpp pad_naming.cpp pcb_base_edit_frame.cpp pcb_layer_box_selector.cpp - pcb_layer_widget.cpp # pcb_draw_panel_gal.cpp # pcb_view.cpp pcb_edit_frame.cpp diff --git a/pcbnew/pcb_base_edit_frame.h b/pcbnew/pcb_base_edit_frame.h index 3505285b35..556c6b3977 100644 --- a/pcbnew/pcb_base_edit_frame.h +++ b/pcbnew/pcb_base_edit_frame.h @@ -30,7 +30,6 @@ class APPEARANCE_CONTROLS; class BOARD_ITEM_CONTAINER; -class PCB_LAYER_WIDGET; class PANEL_SELECTION_FILTER; /** diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 004b07c5a9..31717f334a 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -168,8 +167,6 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME ) PCB_EDIT_FRAME::OnUpdateSelectTrackWidth ) EVT_UPDATE_UI_RANGE( ID_POPUP_PCB_SELECT_VIASIZE1, ID_POPUP_PCB_SELECT_VIASIZE8, PCB_EDIT_FRAME::OnUpdateSelectViaSize ) - - EVT_COMMAND( wxID_ANY, LAYER_WIDGET::EVT_LAYER_COLOR_CHANGE, PCB_EDIT_FRAME::OnLayerColorChange ) END_EVENT_TABLE() @@ -1238,12 +1235,6 @@ void PCB_EDIT_FRAME::ScriptingConsoleEnableDisable() #endif -void PCB_EDIT_FRAME::OnLayerColorChange( wxCommandEvent& aEvent ) -{ - ReCreateLayerBox(); -} - - void PCB_EDIT_FRAME::SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType ) { // switches currently used canvas (Cairo / OpenGL). diff --git a/pcbnew/pcb_edit_frame.h b/pcbnew/pcb_edit_frame.h index 18cdd96085..3b116f94da 100644 --- a/pcbnew/pcb_edit_frame.h +++ b/pcbnew/pcb_edit_frame.h @@ -52,7 +52,6 @@ class ZONE_CONTAINER; class DRAWSEGMENT; class GENERAL_COLLECTOR; class GENERAL_COLLECTORS_GUIDE; -class PCB_LAYER_WIDGET; class SELECTION; class MARKER_PCB; class BOARD_ITEM; @@ -79,7 +78,6 @@ namespace PCB { struct IFACE; } // KIFACE_I is in pcbnew.cpp class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME { friend struct PCB::IFACE; - friend class PCB_LAYER_WIDGET; friend class APPEARANCE_CONTROLS; /// The auxiliary right vertical tool bar used to access the microwave tools. @@ -330,7 +328,6 @@ public: bool MicrowaveToolbarShown(); void OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent ); void OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent ); - void OnLayerColorChange( wxCommandEvent& aEvent ); void RunEeschema(); diff --git a/pcbnew/pcb_layer_widget.cpp b/pcbnew/pcb_layer_widget.cpp deleted file mode 100644 index 03e5f60522..0000000000 --- a/pcbnew/pcb_layer_widget.cpp +++ /dev/null @@ -1,703 +0,0 @@ -/* - * This program source code file is part of KiCad, a free EDA CAD application. - * - * Copyright (C) 2004-2017 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr - * Copyright (C) 2010-2012 SoftPLC Corporation, Dick Hollenbeck - * Copyright (C) 2010-2020 KiCad Developers, see change_log.txt for contributors. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, you may find one here: - * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html - * or you may search the http://www.gnu.org website for the version 2 license, - * or you may write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/// This is a read only template that is copied and modified before adding to LAYER_WIDGET -const LAYER_WIDGET::ROW PCB_LAYER_WIDGET::s_render_rows[] = { - -#define RR LAYER_WIDGET::ROW // Render Row abbreviation to reduce source width -#define NOCOLOR COLOR4D::UNSPECIFIED // specify rows that do not have a color selector icon - - // text id color tooltip - RR( _( "Footprints Front" ), LAYER_MOD_FR, NOCOLOR, _( "Show footprints that are on board's front") ), - RR( _( "Footprints Back" ), LAYER_MOD_BK, NOCOLOR, _( "Show footprints that are on board's back") ), - RR( _( "Values" ), LAYER_MOD_VALUES, NOCOLOR, _( "Show footprint values") ), - RR( _( "Reference Designators" ),LAYER_MOD_REFERENCES, NOCOLOR, _( "Show footprint reference designators") ), - RR( _( "Footprint Text Front" ), LAYER_MOD_TEXT_FR, NOCOLOR, _( "Show footprint text on board's front" ) ), - RR( _( "Footprint Text Back" ), LAYER_MOD_TEXT_BK, NOCOLOR, _( "Show footprint text on board's back" ) ), - RR( _( "Hidden Text" ), LAYER_MOD_TEXT_INVISIBLE, WHITE, _( "Show footprint text marked as invisible" ) ), - RR( _( "Pads Front" ), LAYER_PAD_FR, WHITE, _( "Show footprint pads on board's front" ) ), - RR( _( "Pads Back" ), LAYER_PAD_BK, WHITE, _( "Show footprint pads on board's back" ) ), - RR( _( "Through Hole Pads" ), LAYER_PADS_TH, YELLOW, _( "Show through hole pads in specific color") ), - RR(), - RR( _( "Tracks" ), LAYER_TRACKS, NOCOLOR, _( "Show tracks" ) ), - RR( _( "Through Via" ), LAYER_VIA_THROUGH, WHITE, _( "Show through vias" ) ), - RR( _( "Bl/Buried Via" ), LAYER_VIA_BBLIND, WHITE, _( "Show blind or buried vias" ) ), - RR( _( "Micro Via" ), LAYER_VIA_MICROVIA, WHITE, _( "Show micro vias") ), - RR( _( "Non Plated Holes" ), LAYER_NON_PLATEDHOLES, WHITE, _( "Show non plated holes in specific color") ), - RR(), - RR( _( "Ratsnest" ), LAYER_RATSNEST, WHITE, _( "Show unconnected nets as a ratsnest") ), - RR( _( "No-Connects" ), LAYER_NO_CONNECTS, BLUE, _( "Show a marker on pads which have no net connected" ) ), - RR( _( "DRC Warnings" ), LAYER_DRC_WARNING, YELLOW, _( "DRC violations with a Warning severity" ) ), - RR( _( "DRC Errors" ), LAYER_DRC_ERROR, PURERED, _( "DRC violations with an Error severity" ) ), - RR( _( "DRC Exclusions" ), LAYER_DRC_EXCLUSION, WHITE, _( "DRC violations which have been individually excluded" ) ), - RR( _( "Anchors" ), LAYER_ANCHOR, WHITE, _( "Show footprint and text origins as a cross" ) ), - RR( _( "Worksheet" ), LAYER_WORKSHEET, DARKRED, _( "Show worksheet") ), - RR( _( "Cursor" ), LAYER_CURSOR, WHITE, _( "PCB Cursor" ), true, false ), - RR( _( "Aux Items" ), LAYER_AUX_ITEMS, WHITE, _( "Auxiliary items (rulers, assistants, axes, etc.)" ), true, false ), - RR( _( "Grid" ), LAYER_GRID, WHITE, _( "Show the (x,y) grid dots" ) ), - RR( _( "Background" ), LAYER_PCB_BACKGROUND, BLACK, _( "PCB Background" ), true, false ) -}; - -static int s_allowed_in_FpEditor[] = -{ - LAYER_MOD_TEXT_INVISIBLE, - LAYER_NON_PLATEDHOLES, - LAYER_PADS_TH, - LAYER_PAD_FR, - LAYER_PAD_BK, - LAYER_MOD_VALUES, - LAYER_MOD_REFERENCES, - LAYER_CURSOR, - LAYER_AUX_ITEMS, - LAYER_GRID, - LAYER_PCB_BACKGROUND -}; - - -PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( PCB_BASE_FRAME* aParent, wxWindow* aFocusOwner, - bool aFpEditorMode ) : - LAYER_WIDGET( aParent, aFocusOwner ), - myframe( aParent ) -{ - m_alwaysShowActiveCopperLayer = false; - m_fp_editor_mode = aFpEditorMode; - - // Update default tabs labels - SetLayersManagerTabsText(); - - //------------------------------------------------------ - // handle the popup menu over the layer window. - m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN, - wxMouseEventHandler( PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this ); - - // since Popupmenu() calls this->ProcessEvent() we must call this->Connect() - // and not m_LayerScrolledWindow->Connect() - - Connect( ID_SHOW_ALL_COPPER_LAYERS, ID_LAST_VALUE - 1, - wxEVT_COMMAND_MENU_SELECTED, - wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this ); -} - - -COLOR4D PCB_LAYER_WIDGET::getBackgroundLayerColor() -{ - return myframe->GetColorSettings()->GetColor( LAYER_PCB_BACKGROUND ); -} - - -bool PCB_LAYER_WIDGET::isAllowedInFpMode( int aId ) -{ - for( unsigned ii = 0; ii < arrayDim( s_allowed_in_FpEditor ); ii++ ) - if( s_allowed_in_FpEditor[ii] == aId ) - return true; - - return false; -} - - -void PCB_LAYER_WIDGET::AddRightClickMenuItems( wxMenu& menu ) -{ - AddMenuItem( &menu, ID_SHOW_ALL_COPPER_LAYERS, - _( "Show All Copper Layers" ), - KiBitmap( select_layer_pair_xpm ) ); - AddMenuItem( &menu, ID_HIDE_ALL_COPPER_LAYERS, - _( "Hide All Copper Layers" ), - KiBitmap( show_no_copper_layers_xpm ) ); - - menu.AppendSeparator(); - - AddMenuItem( &menu, ID_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE, - _( "Hide All Copper Layers But Active" ), - KiBitmap( select_w_layer_xpm ) ); - AddMenuItem( &menu, ID_ALWAYS_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE, - _( "Always Hide All Copper Layers But Active" ), - KiBitmap( select_w_layer_xpm ) ); - - menu.AppendSeparator(); - - AddMenuItem( &menu, ID_SHOW_ALL_NON_COPPER, - _( "Show All Non Copper Layers" ), - KiBitmap( select_w_layer_xpm ) ); - AddMenuItem( &menu, ID_HIDE_ALL_NON_COPPER, - _( "Hide All Non Copper Layers" ), - KiBitmap( show_no_copper_layers_xpm ) ); - - menu.AppendSeparator(); - - AddMenuItem( &menu, ID_SHOW_ALL_LAYERS, _( "Show All Layers" ), - KiBitmap( show_all_layers_xpm ) ); - AddMenuItem( &menu, ID_SHOW_NO_LAYERS, _( "Hide All Layers" ), - KiBitmap( show_no_layers_xpm ) ); - - menu.AppendSeparator(); - - AddMenuItem( &menu, ID_SHOW_ONLY_FRONT_ASSEMBLY, _( "Show Only Front Assembly Layers" ), - KiBitmap( shape_3d_xpm ) ); - - AddMenuItem( &menu, ID_SHOW_ONLY_FRONT, _( "Show Only Front Layers" ), - KiBitmap( show_all_front_layers_xpm ) ); - - // Only show the internal layer option if internal layers are enabled - if( myframe->GetBoard()->GetCopperLayerCount() > 2 ) - { - AddMenuItem( &menu, ID_SHOW_ONLY_INNER, _( "Show Only Inner Layers" ), - KiBitmap( show_all_copper_layers_xpm ) ); - } - - AddMenuItem( &menu, ID_SHOW_ONLY_BACK, _( "Show Only Back Layers" ), - KiBitmap( show_all_back_layers_xpm ) ); - - AddMenuItem( &menu, ID_SHOW_ONLY_BACK_ASSEMBLY, _( "Show Only Back Assembly Layers" ), - KiBitmap( shape_3d_back_xpm ) ); -} - - -void PCB_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event ) -{ - wxMenu menu; - - AddRightClickMenuItems( menu ); - PopupMenu( &menu ); - - passOnFocus(); -} - - -void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event ) -{ - // Force the active layer to be visible - bool forceActiveLayer = false; - - // Reset the always show property - m_alwaysShowActiveCopperLayer = false; - - // Make a distinction between the layers we want to enable and those we - // want to disable explictly. That way we can either or the current layerset - // or operate on all layers. - LSET layersToShow; - LSET layersToHide; - - switch( event.GetId() ) - { - case ID_SHOW_NO_LAYERS: - layersToHide = LSET::AllLayersMask(); - break; - - case ID_SHOW_ALL_LAYERS: - layersToShow = LSET::AllLayersMask(); - break; - - case ID_SHOW_ALL_COPPER_LAYERS: - layersToShow = LSET::AllCuMask(); - break; - - case ID_ALWAYS_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE: - m_alwaysShowActiveCopperLayer = true; - KI_FALLTHROUGH; - - case ID_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE: - forceActiveLayer = true; - KI_FALLTHROUGH; - - case ID_HIDE_ALL_COPPER_LAYERS: - layersToHide = LSET::AllCuMask(); - break; - - case ID_HIDE_ALL_NON_COPPER: - layersToHide = LSET::AllNonCuMask(); - break; - - case ID_SHOW_ALL_NON_COPPER: - layersToShow = LSET::AllNonCuMask(); - break; - - case ID_SHOW_ONLY_FRONT_ASSEMBLY: - // Include the edgecuts layer as well as the front assembly layers and hide the other layers - layersToShow = LSET::FrontAssembly().set( Edge_Cuts ); - layersToHide = ~layersToShow; - myframe->SetActiveLayer( F_SilkS ); - break; - - case ID_SHOW_ONLY_FRONT: - // Include the edgecuts layer as well as the front layers and hide the other layers - layersToShow = LSET::FrontMask().set( Edge_Cuts ); - layersToHide = ~layersToShow; - break; - - case ID_SHOW_ONLY_INNER: - // Include the edgecuts layer as well as the internal layers and hide the other layers - layersToShow = LSET::InternalCuMask().set( Edge_Cuts ); - layersToHide = ~layersToShow; - break; - - case ID_SHOW_ONLY_BACK: - // Include the edgecuts layer as well as the back layers and hide the other layers - layersToShow = LSET::BackMask().set( Edge_Cuts ); - layersToHide = ~layersToShow; - break; - - case ID_SHOW_ONLY_BACK_ASSEMBLY: - // Include the edgecuts layer as well as the back assembly layers and hide the other layers - layersToShow = LSET::BackAssembly().set( Edge_Cuts ); - layersToHide = ~layersToShow; - myframe->SetActiveLayer( B_SilkS ); - break; - } - - int rowCount = GetLayerRowCount(); - - for( int row = 0; row < rowCount; ++row ) - { - wxCheckBox* cb = static_cast( getLayerComp( row, COLUMN_COLOR_LYR_CB ) ); - PCB_LAYER_ID layer = ToLAYER_ID( getDecodedId( cb->GetId() ) ); - - bool visible = cb->GetValue(); - - if( layersToShow.Contains( layer ) ) - visible = true; - - if( layersToHide.Contains( layer ) ) - visible = false; - - // Force the active layer in the editor to be visible - if( forceActiveLayer && ( layer == myframe->GetActiveLayer() ) ) - visible = true; - - cb->SetValue( visible ); - OnLayerVisible( layer, visible, false ); - } - - // Refresh the drawing canvas - myframe->GetCanvas()->Refresh(); -} - - -void PCB_LAYER_WIDGET::SetLayersManagerTabsText() -{ - m_notebook->SetPageText( 0, _( "Layers" ) ); - m_notebook->SetPageText( 1, _( "Items" ) ); -} - - -void PCB_LAYER_WIDGET::ReFillRender() -{ - BOARD* board = myframe->GetBoard(); - - ClearRenderRows(); - - // Add "Items" tab rows to LAYER_WIDGET, after setting color and checkbox state. - // Because s_render_rows is created static, we must explicitly call - // wxGetTranslation for texts which are internationalized (tool tips - // and item names) - for( unsigned row=0; rowGetColorSettings()->GetColor( - static_cast( renderRow.id ) ); - renderRow.defaultColor = myframe->GetColorSettings()->GetDefaultColor( - static_cast( renderRow.id ) ); - } - - if( renderRow.id == LAYER_RATSNEST ) - renderRow.state = myframe->GetDisplayOptions().m_ShowGlobalRatsnest; - else if( renderRow.id == LAYER_GRID ) - renderRow.state = myframe->IsGridVisible(); - else - renderRow.state = board->IsElementVisible( - static_cast( renderRow.id ) ); - } - - AppendRenderRow( renderRow ); - } - - UpdateLayouts(); -} - - -void PCB_LAYER_WIDGET::SyncLayerVisibilities() -{ - BOARD* board = myframe->GetBoard(); - int count = GetLayerRowCount(); - - for( int row=0; rowGetId() ) ); - - // this does not fire a UI event - setLayerCheckbox( layerId, board->IsLayerVisible( layerId ) ); - } -} - - -#define ALPHA_EPSILON 0.04 - -void PCB_LAYER_WIDGET::SyncLayerAlphaIndicators() -{ - int count = GetLayerRowCount(); - TOOL_MANAGER* mgr = myframe->GetToolManager(); - KIGFX::PCB_PAINTER* painter = static_cast( mgr->GetView()->GetPainter() ); - KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings(); - - for( int row = 0; row < count; ++row ) - { - // this utilizes more implementation knowledge than ideal, eventually - // add member ROW getRow() or similar to base LAYER_WIDGET. - - wxWindow* w = getLayerComp( row, COLUMN_ICON_ACTIVE ); - PCB_LAYER_ID layerId = ToLAYER_ID( getDecodedId( w->GetId() ) ); - KIGFX::COLOR4D screenColor = settings->GetLayerColor( layerId ); - - COLOR_SWATCH* swatch = static_cast( getLayerComp( row, COLUMN_COLORBM ) ); - KIGFX::COLOR4D layerColor = swatch->GetSwatchColor(); - - INDICATOR_ICON* indicator = static_cast( getLayerComp( row, COLUMN_ALPHA_INDICATOR ) ); - - if( std::abs( screenColor.a - layerColor.a ) > ALPHA_EPSILON ) - { - if( screenColor.a < layerColor.a ) - indicator->SetIndicatorState( ROW_ICON_PROVIDER::STATE::DOWN ); - else - indicator->SetIndicatorState( ROW_ICON_PROVIDER::STATE::UP ); - } - else - indicator->SetIndicatorState( ROW_ICON_PROVIDER::STATE::OFF ); - } -} - - -void PCB_LAYER_WIDGET::SyncLayerColors() -{ - COLOR_SETTINGS* cs = myframe->GetColorSettings(); - - COLOR4D bg = cs->GetColor( LAYER_PCB_BACKGROUND ); - - int count = GetLayerRowCount(); - int row; - int col = 1; // bitmap button is column 1 in layers tab - - for( row = 0; row < count; ++row ) - { - COLOR_SWATCH* swatch = dynamic_cast( getLayerComp( row, col ) ); - - if( swatch ) - { - swatch->SetSwatchBackground( bg ); - swatch->SetSwatchColor( cs->GetColor( getDecodedId( swatch->GetId() ) ), false ); - } - } - - count = GetRenderRowCount(); - col = 0; // bitmap button is column 0 in render tab - - for( row = 0; row < count; ++row ) - { - COLOR_SWATCH* swatch = dynamic_cast( getRenderComp( row, col ) ); - - if( swatch ) - { - swatch->SetSwatchBackground( bg ); - swatch->SetSwatchColor( cs->GetColor( getDecodedId( swatch->GetId() ) ), false ); - } - } -} - - -void PCB_LAYER_WIDGET::ReFill() -{ - BOARD* brd = myframe->GetBoard(); - LSET enabled = brd->GetEnabledLayers(); - - ClearLayerRows(); - - wxString dsc; - - // show all coppers first, with front on top, back on bottom, then technical layers - for( LSEQ cu_stack = enabled.CuStack(); cu_stack; ++cu_stack ) - { - PCB_LAYER_ID layer = *cu_stack; - - switch( layer ) - { - case F_Cu: - dsc = _( "Front copper layer" ); - break; - - case B_Cu: - dsc = _( "Back copper layer" ); - break; - - default: - dsc = _( "Inner copper layer" ); - break; - } - - AppendLayerRow( LAYER_WIDGET::ROW( brd->GetLayerName( layer ), layer, - myframe->GetColorSettings()->GetColor( layer ), dsc, true, true, - myframe->GetColorSettings()->GetDefaultColor( layer ) ) ); - - if( m_fp_editor_mode && LSET::ForbiddenFootprintLayers().test( layer ) ) - { - getLayerComp( GetLayerRowCount()-1, COLUMN_COLOR_LYRNAME )->Enable( false ); - getLayerComp( GetLayerRowCount()-1, COLUMN_COLORBM )->SetToolTip( wxEmptyString ); - } - } - - // technical layers are shown in this order: - // Because they are static, wxGetTranslation must be explicitly - // called for tooltips. - static const struct { - PCB_LAYER_ID layerId; - wxString tooltip; - } non_cu_seq[] = { - { F_Adhes, _( "Adhesive on board's front" ) }, - { B_Adhes, _( "Adhesive on board's back" ) }, - { F_Paste, _( "Solder paste on board's front" ) }, - { B_Paste, _( "Solder paste on board's back" ) }, - { F_SilkS, _( "Silkscreen on board's front" ) }, - { B_SilkS, _( "Silkscreen on board's back" ) }, - { F_Mask, _( "Solder mask on board's front" ) }, - { B_Mask, _( "Solder mask on board's back" ) }, - { Dwgs_User, _( "Explanatory drawings" ) }, - { Cmts_User, _( "Explanatory comments" ) }, - { Eco1_User, _( "User defined meaning" ) }, - { Eco2_User, _( "User defined meaning" ) }, - { Edge_Cuts, _( "Board's perimeter definition" ) }, - { Margin, _( "Board's edge setback outline" ) }, - { F_CrtYd, _( "Footprint courtyards on board's front" ) }, - { B_CrtYd, _( "Footprint courtyards on board's back" ) }, - { F_Fab, _( "Footprint assembly on board's front" ) }, - { B_Fab, _( "Footprint assembly on board's back" ) }, - }; - - for( unsigned i=0; iGetLayerName( layer ), layer, - myframe->GetColorSettings()->GetColor( layer ), - wxGetTranslation( non_cu_seq[i].tooltip ), true, true, - myframe->GetColorSettings()->GetDefaultColor( layer ) ) ); - - if( m_fp_editor_mode && LSET::ForbiddenFootprintLayers().test( layer ) ) - { - getLayerComp( GetLayerRowCount()-1, COLUMN_COLOR_LYRNAME )->Enable( false ); - getLayerComp( GetLayerRowCount()-1, COLUMN_COLORBM )->SetToolTip( wxEmptyString ); - } - } - - UpdateLayouts(); -} - - -//------------------------------------------------ - -void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, COLOR4D aColor ) -{ - COLOR_SETTINGS* cs = myframe->GetColorSettings(); - cs->SetColor( aLayer, aColor ); - - myframe->GetCanvas()->UpdateColors(); - - KIGFX::VIEW* view = myframe->GetCanvas()->GetView(); - view->UpdateLayerColor( aLayer ); - view->UpdateLayerColor( GetNetnameLayer( aLayer ) ); - - myframe->ReCreateHToolbar(); - - myframe->GetCanvas()->Refresh(); - - if( aLayer == LAYER_PCB_BACKGROUND ) - myframe->SetDrawBgColor( aColor ); -} - - -bool PCB_LAYER_WIDGET::OnLayerSelect( int aLayer ) -{ - // the layer change from the PCB_LAYER_WIDGET can be denied by returning - // false from this function. - PCB_LAYER_ID layer = ToLAYER_ID( aLayer ); - - if( m_fp_editor_mode && LSET::ForbiddenFootprintLayers().test( layer ) ) - return false; - - myframe->SetActiveLayer( layer ); - - bool hcm = ( myframe->GetDisplayOptions().m_ContrastModeDisplay != - HIGH_CONTRAST_MODE::NORMAL ); - - if( m_alwaysShowActiveCopperLayer ) - OnLayerSelected(); - else if( hcm ) - myframe->GetCanvas()->Refresh(); - - return true; -} - - -bool PCB_LAYER_WIDGET::OnLayerSelected() -{ - if( !m_alwaysShowActiveCopperLayer ) - return false; - - // postprocess after an active layer selection - // ensure active layer visible - wxCommandEvent event; - event.SetId( ID_ALWAYS_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE ); - onPopupSelection( event ); - - return true; -} - - -void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal ) -{ - // In other frames than board editor, the board is a dummy board. - // so changing board settings makes sense (and works) only for the board editor frame - if( myframe->IsType( FRAME_PCB_EDITOR ) ) - { - BOARD* brd = myframe->GetBoard(); - - LSET visibleLayers = brd->GetVisibleLayers(); - - if( visibleLayers.test( aLayer ) != isVisible ) - { - visibleLayers.set( aLayer, isVisible ); - brd->SetVisibleLayers( visibleLayers ); - - if( myframe->GetCanvas() ) - myframe->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible ); - } - } - else - { - if( myframe->GetCanvas() ) - myframe->GetCanvas()->GetView()->SetLayerVisible( aLayer, isVisible ); - } - - if( isFinal ) - myframe->GetCanvas()->Refresh(); -} - - -void PCB_LAYER_WIDGET::OnLayerRightClick( wxMenu& aMenu ) -{ - AddRightClickMenuItems( aMenu ); -} - - -void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, COLOR4D aColor ) -{ - wxASSERT( aId > GAL_LAYER_ID_START && aId < GAL_LAYER_ID_END ); - - myframe->GetColorSettings()->SetColor( aId, aColor ); - myframe->GetCanvas()->UpdateColors(); - - KIGFX::VIEW* view = myframe->GetCanvas()->GetView(); - view->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); // useful to update rastnest - view->UpdateLayerColor( aId ); - - // plated-through-holes don't have their own color; they use the background color - if( aId == LAYER_PCB_BACKGROUND ) - view->UpdateLayerColor( LAYER_PADS_PLATEDHOLES ); - - myframe->ReCreateHToolbar(); - myframe->GetCanvas()->ForceRefresh(); -} - - -void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled ) -{ - BOARD* brd = myframe->GetBoard(); - wxASSERT( aId > GAL_LAYER_ID_START && aId < GAL_LAYER_ID_END ); - - // Grid is not set through the board visibility - if( aId == LAYER_GRID ) - myframe->SetGridVisibility( isEnabled ); - else - brd->SetElementVisibility( static_cast( aId ), isEnabled ); - - if( aId == LAYER_RATSNEST ) - { - // don't touch the layers. ratsnest is enabled on per-item basis. - myframe->GetCanvas()->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); - myframe->GetCanvas()->GetView()->SetLayerVisible( aId, true ); - - if( myframe->IsType( FRAME_PCB_EDITOR ) ) - { - PCB_DISPLAY_OPTIONS opt = myframe->GetDisplayOptions(); - opt.m_ShowGlobalRatsnest = isEnabled; - myframe->SetDisplayOptions( opt ); - } - } - else if( aId != LAYER_GRID ) - myframe->GetCanvas()->GetView()->SetLayerVisible( aId, isEnabled ); - - myframe->GetCanvas()->Refresh(); -} - -//----------------------------------------------- diff --git a/pcbnew/pcb_layer_widget.h b/pcbnew/pcb_layer_widget.h deleted file mode 100644 index 6df3461ec7..0000000000 --- a/pcbnew/pcb_layer_widget.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * This program source code file is part of KiCad, a free EDA CAD application. - * - * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck - * Copyright (C) 2010-2018 KiCad Developers, see cAUTHORS.txt for contributors. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, you may find one here: - * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html - * or you may search the http://www.gnu.org website for the version 2 license, - * or you may write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - - -/************************************************************/ -/* pcb_layer_widget.h : header for the layers manager */ -/************************************************************/ - -#ifndef PCB_LAYER_WIDGET_H -#define PCB_LAYER_WIDGET_H - -#include - -/** - * PCB_LAYER_WIDGET - * is here to implement the abstract functions of LAYER_WIDGET so they - * may be tied into the PCB_EDIT_FRAME's data and so we can add a popup - * menu which is specific to PCBNEW's needs. - */ -class PCB_LAYER_WIDGET : public LAYER_WIDGET -{ -public: - - /** - * Constructor - * @param aParent is the parent window - * @param aFocusOwner is the window that should be sent the focus after - * @param aFpEditorMode false for the board editor (default), true for fp editor - * when true, some options or layers which cannot be used in editor mode are not - * displayed - */ - PCB_LAYER_WIDGET( PCB_BASE_FRAME* aParent, wxWindow* aFocusOwner, bool aFpEditorMode = false ); - - void ReFill(); - - /** - * Function ReFillRender - * rebuilds Render for instance after the config is read - */ - void ReFillRender(); - - /** - * Function SyncLayerVisibilities - * updates each "Layer" checkbox in this layer widget according - * to each layer's current visibility determined by IsLayerVisible(), and is - * helpful immediately after loading a BOARD which may have state information in it. - */ - void SyncLayerVisibilities(); - - /** - * Function SyncLayerAlphaIndicators - * updates each "Layer"s alpha indicator to show if the board is currently being - * rendered with more transparency or less. - */ - void SyncLayerAlphaIndicators(); - - /** - * Updates the color for each layer and item from the active color theme - */ - void SyncLayerColors(); - - /** - * Function SetLayersManagerTabsText - * Update the layer manager tabs labels - * Useful when changing Language or to set labels to a non default value - */ - void SetLayersManagerTabsText(); - - //---------------- - void OnLayerColorChange( int aLayer, COLOR4D aColor ) override; - bool OnLayerSelect( int aLayer ) override; - void OnLayerVisible( int aLayer, bool isVisible, bool isFinal ) override; - void OnLayerRightClick( wxMenu& aMenu ) override; - void OnRenderColorChange( int aId, COLOR4D aColor ) override; - void OnRenderEnable( int aId, bool isEnabled ) override; - //--------------- - - /** - * Function OnLayerSelected - * ensure the active layer is visible, and other layers not visible - * when m_alwaysShowActiveLayer is true - * Otherwise do nothing. - * @return true m_alwaysShowActiveLayer is true and the canvas is refreshed, - * and false if do nothing - */ - bool OnLayerSelected(); // postprocess after an active layer selection - // ensure active layer visible if - // m_alwaysShowActiveCopperLayer is true; - - /** - * Function addRightClickMenuItems - * add menu items to a menu that should be shown when right-clicking - * the PCB layer widget. - */ - void AddRightClickMenuItems( wxMenu& menu ); - - -protected: - - static const LAYER_WIDGET::ROW s_render_rows[]; - bool m_alwaysShowActiveCopperLayer; // If true: Only shows the current active layer - // even if it is changed - bool m_fp_editor_mode; - - PCB_BASE_FRAME* myframe; - - // popup menu ids. - enum POPUP_ID - { - ID_SHOW_ALL_COPPER_LAYERS = LAYER_WIDGET::ID_LAST_VALUE, - ID_HIDE_ALL_COPPER_LAYERS, - ID_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE, - ID_ALWAYS_HIDE_ALL_COPPER_LAYERS_BUT_ACTIVE, - ID_SHOW_NO_LAYERS, - ID_SHOW_ALL_LAYERS, - ID_SHOW_ONLY_FRONT, - ID_SHOW_ONLY_INNER, - ID_SHOW_ONLY_BACK, - ID_SHOW_ONLY_FRONT_ASSEMBLY, - ID_SHOW_ONLY_BACK_ASSEMBLY, - ID_HIDE_ALL_NON_COPPER, - ID_SHOW_ALL_NON_COPPER, - ID_LAST_VALUE - }; - - virtual COLOR4D getBackgroundLayerColor() override; - - /** - * Function isAllowedInFpMode - * @return true if item aId has meaning in footprint editor mode. - * and therefore is shown in render panel - */ - bool isAllowedInFpMode( int aId ); - - /** - * Function OnRightDownLayers - * puts up a popup menu for the layer panel. - */ - void onRightDownLayers( wxMouseEvent& event ); - - void onPopupSelection( wxCommandEvent& event ); -}; - -#endif // PCB_LAYER_WIDGET_H diff --git a/pcbnew/router/router_tool.cpp b/pcbnew/router/router_tool.cpp index 340f49bb6e..96d22afbfd 100644 --- a/pcbnew/router/router_tool.cpp +++ b/pcbnew/router/router_tool.cpp @@ -29,7 +29,6 @@ using namespace std::placeholders; #include #include #include -#include #include #include #include diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp index 7cd95a9a96..1ea748e751 100644 --- a/pcbnew/widgets/appearance_controls.cpp +++ b/pcbnew/widgets/appearance_controls.cpp @@ -2325,7 +2325,10 @@ void APPEARANCE_CONTROLS::OnColorSwatchChanged( wxCommandEvent& aEvent ) view->UpdateLayerColor( layer ); view->UpdateLayerColor( GetNetnameLayer( layer ) ); - m_frame->ReCreateHToolbar(); + // Update the bitmap of the layer box + if( m_frame->IsType( FRAME_PCB_EDITOR ) ) + static_cast( m_frame )->ReCreateLayerBox( false ); + m_frame->GetCanvas()->Refresh(); if( layer == LAYER_PCB_BACKGROUND )