Add layer selector to Footprint Editor for consistency.

Fixes: lp:1850858
* https://bugs.launchpad.net/kicad/+bug/1850858
This commit is contained in:
Jeff Young 2019-11-03 17:14:21 +00:00
parent fae86d4dd0
commit ddf887d24a
5 changed files with 77 additions and 39 deletions

View File

@ -28,32 +28,20 @@
#include <pgm_base.h>
#include <kiface_i.h>
#include <confirm.h>
#include <eda_doc.h>
#include <gestfich.h>
#include <pcb_edit_frame.h>
#include <pcbnew_id.h>
#include <pcbnew.h>
#include <footprint_edit_frame.h>
#include <class_board.h>
#include <class_module.h>
#include <class_track.h>
#include <class_zone.h>
#include <class_pcb_text.h>
#include <class_pcb_target.h>
#include <class_dimension.h>
#include <footprint_viewer_frame.h>
#include <pcb_layer_box_selector.h>
#include <dialog_drc.h>
#include <invoke_pcb_dialog.h>
#include <array_creator.h>
#include <connectivity/connectivity_data.h>
#include <zone_filler.h>
#include <dialog_move_exact.h>
#include <tool/tool_manager.h>
#include <tools/pcb_actions.h>
#include <dialogs/dialog_text_properties.h>

View File

@ -83,15 +83,16 @@ BEGIN_EVENT_TABLE( FOOTPRINT_EDIT_FRAME, PCB_BASE_FRAME )
EVT_TOOL( ID_MODEDIT_LOAD_MODULE_FROM_BOARD, FOOTPRINT_EDIT_FRAME::LoadModuleFromBoard )
EVT_TOOL( ID_ADD_FOOTPRINT_TO_BOARD, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
// popup commands
// Horizontal toolbar
EVT_MENU( ID_GRID_SETTINGS, FOOTPRINT_EDIT_FRAME::OnGridSettings )
EVT_COMBOBOX( ID_TOOLBARH_PCB_SELECT_LAYER, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
// UI update events.
EVT_UPDATE_UI( ID_MODEDIT_LOAD_MODULE_FROM_BOARD,
FOOTPRINT_EDIT_FRAME::OnUpdateLoadModuleFromBoard )
EVT_UPDATE_UI( ID_ADD_FOOTPRINT_TO_BOARD,
FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard )
EVT_UPDATE_UI( ID_TOOLBARH_PCB_SELECT_LAYER, FOOTPRINT_EDIT_FRAME::OnUpdateLayerSelectBox )
EVT_UPDATE_UI( ID_GEN_IMPORT_GRAPHICS_FILE, FOOTPRINT_EDIT_FRAME::OnUpdateModuleSelected )
END_EVENT_TABLE()
@ -108,6 +109,7 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent,
m_FrameSize = ConvertDialogToPixels( wxSize( 500, 350 ) ); // default in case of no prefs
m_canvasType = aBackend;
m_AboutTitle = "ModEdit";
m_selLayerBox = nullptr;
// Give an icon
wxIcon icon;

View File

@ -26,6 +26,7 @@
#include <config_params.h>
#include <fp_tree_synchronizing_adapter.h>
class PCB_LAYER_BOX_SELECTOR;
class PCB_LAYER_WIDGET;
class FP_LIB_TABLE;
class EDGE_MODULE;
@ -123,6 +124,17 @@ public:
*/
void ReCreateMenuBar() override;
/**
* Re create the layer Box by clearing the old list, and building
* le new one, from the new layers names and cole layers
* @param aForceResizeToolbar = true to resize the parent toolbar
* false if not needed (mainly in parent toolbar creation,
* or when the layers names are not modified)
*/
void ReCreateLayerBox( bool aForceResizeToolbar = true );
void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
// The Tool Framework initalization, for GAL mode
void setupTools();
@ -342,14 +354,12 @@ public:
DECLARE_EVENT_TABLE()
protected:
/// protected so only friend PCB::IFACE::CreateWindow() can act as sole factory.
FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent, EDA_DRAW_PANEL_GAL::GAL_TYPE aBackend );
PCB_LAYER_WIDGET* m_Layers; ///< the layer manager
/// List of footprint editor configuration parameters.
PARAM_CFG_ARRAY m_configParams;
PCB_LAYER_BOX_SELECTOR* m_selLayerBox; // a combo box to display and select active layer
PCB_LAYER_WIDGET* m_Layers; // the layer manager
PARAM_CFG_ARRAY m_configParams; // List of footprint editor configuration parameters.
/**
* Make sure the footprint info list is loaded (with a progress dialog) and then initialize

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.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
@ -21,10 +21,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file footprint_editor_utils.cpp
*/
#include <fctsys.h>
#include <kiface_i.h>
#include <kiway.h>
@ -43,7 +39,7 @@
#include <class_board.h>
#include <class_module.h>
#include <class_edge_mod.h>
#include <pcb_layer_box_selector.h>
#include <ratsnest_data.h>
#include <pcbnew.h>
#include <pcbnew_id.h>
@ -55,7 +51,6 @@
#include <collectors.h>
#include <tool/tool_manager.h>
#include <tools/pcb_actions.h>
#include <dialog_edit_footprint_for_fp_editor.h>
#include <dialog_move_exact.h>
#include <dialog_create_array.h>
@ -313,6 +308,13 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
SaveFootprintToBoard( true );
break;
case ID_TOOLBARH_PCB_SELECT_LAYER:
SetActiveLayer( ToLAYER_ID( m_selLayerBox->GetLayerSelection() ) );
if( static_cast<PCB_DISPLAY_OPTIONS*>( GetDisplayOptions() )->m_ContrastModeDisplay )
GetCanvas()->Refresh();
break;
case ID_MODEDIT_CHECK:
// Currently: not implemented
break;

View File

@ -30,6 +30,7 @@
#include <bitmaps.h>
#include <tool/action_toolbar.h>
#include <tools/pcb_actions.h>
#include <pcb_layer_box_selector.h>
void FOOTPRINT_EDIT_FRAME::ReCreateHToolbar()
{
@ -53,7 +54,7 @@ void FOOTPRINT_EDIT_FRAME::ReCreateHToolbar()
#ifdef KICAD_SCRIPTING
m_mainToolBar->Add( PCB_ACTIONS::createFootprint );
#endif
if( IsCurrentFPFromBoard() )
m_mainToolBar->Add( PCB_ACTIONS::saveToBoard );
else
@ -113,6 +114,18 @@ void FOOTPRINT_EDIT_FRAME::ReCreateHToolbar()
updateZoomSelectBox();
m_mainToolBar->AddControl( m_zoomSelectBox );
KiScaledSeparator( m_mainToolBar, this );
// Layer selection choice box.
if( m_selLayerBox == nullptr )
{
m_selLayerBox = new PCB_LAYER_BOX_SELECTOR( m_mainToolBar, ID_TOOLBARH_PCB_SELECT_LAYER );
m_selLayerBox->SetBoardFrame( this );
}
ReCreateLayerBox( false );
m_mainToolBar->AddControl( m_selLayerBox );
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
m_mainToolBar->Realize();
}
@ -129,19 +142,19 @@ void FOOTPRINT_EDIT_FRAME::ReCreateVToolbar()
m_drawToolBar->Add( ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
KiScaledSeparator( m_drawToolBar, this );
m_drawToolBar->Add( PCB_ACTIONS::placePad, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawLine, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawCircle, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawArc, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawPolygon, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawZoneKeepout, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::placeText, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( ACTIONS::deleteTool, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::placePad, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawLine, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawCircle, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawArc, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawPolygon, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::drawZoneKeepout, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::placeText, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( ACTIONS::deleteTool, ACTION_TOOLBAR::TOGGLE );
KiScaledSeparator( m_drawToolBar, this );
m_drawToolBar->Add( PCB_ACTIONS::setAnchor, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::gridSetOrigin, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( ACTIONS::measureTool, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::setAnchor, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( PCB_ACTIONS::gridSetOrigin, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Add( ACTIONS::measureTool, ACTION_TOOLBAR::TOGGLE );
m_drawToolBar->Realize();
}
@ -173,6 +186,29 @@ void FOOTPRINT_EDIT_FRAME::ReCreateOptToolbar()
}
void FOOTPRINT_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar )
{
if( m_selLayerBox == NULL || m_mainToolBar == NULL )
return;
m_selLayerBox->SetToolTip( _( "+/- to switch" ) );
m_selLayerBox->Resync();
if( aForceResizeToolbar )
{
// the layer box can have its size changed
// Update the aui manager, to take in account the new size
m_auimgr.Update();
}
}
void FOOTPRINT_EDIT_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
{
m_selLayerBox->SetLayerSelection( GetActiveLayer() );
}
void FOOTPRINT_EDIT_FRAME::SyncToolbars()
{
#define TOGGLE_TOOL( toolbar, tool ) toolbar->Toggle( tool, IsCurrentTool( tool ) )
@ -206,7 +242,7 @@ void FOOTPRINT_EDIT_FRAME::SyncToolbars()
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::drawCircle );
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::drawArc );
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::drawPolygon );
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::drawZoneKeepout );
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::drawZoneKeepout );
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::placeText );
TOGGLE_TOOL( m_drawToolBar, ACTIONS::deleteTool );
TOGGLE_TOOL( m_drawToolBar, PCB_ACTIONS::setAnchor );