mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-13 17:53:11 +02:00
Move toolbars to a serializable storage format
This commit is contained in:
parent
df15db3236
commit
7ad1103f55
@ -35,73 +35,66 @@
|
||||
#include <tools/eda_3d_actions.h>
|
||||
#include <3d_viewer_id.h>
|
||||
|
||||
void EDA_3D_VIEWER_FRAME::ReCreateMainToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> EDA_3D_VIEWER_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER_FRAME::ReCreateMainToolbar" ) );
|
||||
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
// Set up toolbar
|
||||
m_mainToolBar->AddTool( ID_RELOAD3D_BOARD, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::import3d ),
|
||||
_( "Reload board" ) );
|
||||
/* TODO (ISM): Move to action
|
||||
m_tbTopMain->AddTool( ID_RELOAD3D_BOARD, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::import3d ),
|
||||
_( "Reload board" ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_TOOL_SCREENCOPY_TOCLIBBOARD, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::copy ),
|
||||
_( "Copy 3D image to clipboard" ) );
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Move to action
|
||||
m_tbTopMain->AddTool( ID_TOOL_SCREENCOPY_TOCLIBBOARD, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::copy ),
|
||||
_( "Copy 3D image to clipboard" ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_RENDER_CURRENT_VIEW, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::ray_tracing ),
|
||||
_( "Render current view using Raytracing" ), wxITEM_CHECK );
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Move to action
|
||||
m_tbTopMain->AddTool( ID_RENDER_CURRENT_VIEW, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::ray_tracing ),
|
||||
_( "Render current view using Raytracing" ), wxITEM_CHECK );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::rotateXCW );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::rotateXCCW );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::rotateXCW )
|
||||
.AppendAction( EDA_3D_ACTIONS::rotateXCCW );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::rotateYCW );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::rotateYCCW );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::rotateYCW )
|
||||
.AppendAction( EDA_3D_ACTIONS::rotateYCCW );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::rotateZCW );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::rotateZCCW );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::rotateZCW )
|
||||
.AppendAction( EDA_3D_ACTIONS::rotateZCCW );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::flipView );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::flipView );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::moveLeft );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::moveRight );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::moveUp );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::moveDown );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::moveLeft )
|
||||
.AppendAction( EDA_3D_ACTIONS::moveRight )
|
||||
.AppendAction( EDA_3D_ACTIONS::moveUp )
|
||||
.AppendAction( EDA_3D_ACTIONS::moveDown );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::toggleOrtho, ACTION_TOOLBAR::TOGGLE );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::toggleOrtho );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EDA_3D_ACTIONS::showLayersManager, ACTION_TOOLBAR::TOGGLE );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EDA_3D_ACTIONS::showLayersManager );
|
||||
|
||||
m_mainToolBar->KiRealize();
|
||||
// clang-format on
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
|
@ -91,7 +91,6 @@ EDA_3D_VIEWER_FRAME::EDA_3D_VIEWER_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent
|
||||
const wxString& aTitle, long style ) :
|
||||
KIWAY_PLAYER( aKiway, aParent, FRAME_PCB_DISPLAY3D, aTitle, wxDefaultPosition,
|
||||
wxDefaultSize, style, QUALIFIED_VIEWER3D_FRAMENAME( aParent ), unityScale ),
|
||||
m_mainToolBar( nullptr ),
|
||||
m_canvas( nullptr ),
|
||||
m_currentCamera( m_trackBallCamera ),
|
||||
m_trackBallCamera( 2 * RANGE_SCALE_3D )
|
||||
@ -149,13 +148,14 @@ EDA_3D_VIEWER_FRAME::EDA_3D_VIEWER_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent
|
||||
m_toolManager->InvokeTool( "3DViewer.Control" );
|
||||
|
||||
ReCreateMenuBar();
|
||||
ReCreateMainToolbar();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
m_infoBar = new WX_INFOBAR( this, &m_auimgr );
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( wxS( "MainToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( wxS( "TopMainToolbar" ) )
|
||||
.Top().Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_infoBar, EDA_PANE().InfoBar().Name( wxS( "InfoBar" ) )
|
||||
.Top().Layer( 1 ) );
|
||||
@ -641,8 +641,7 @@ void EDA_3D_VIEWER_FRAME::CommonSettingsChanged( int aFlags )
|
||||
// Regen menu bars, etc
|
||||
EDA_BASE_FRAME::CommonSettingsChanged( aFlags );
|
||||
|
||||
// There is no base class that handles toolbars for this frame
|
||||
ReCreateMainToolbar();
|
||||
RecreateToolbars();
|
||||
|
||||
loadCommonSettings();
|
||||
applySettings(
|
||||
@ -659,7 +658,7 @@ void EDA_3D_VIEWER_FRAME::ShowChangedLanguage()
|
||||
EDA_BASE_FRAME::ShowChangedLanguage();
|
||||
|
||||
SetTitle( _( "3D Viewer" ) );
|
||||
ReCreateMainToolbar();
|
||||
RecreateToolbars();
|
||||
|
||||
if( m_appearancePanel )
|
||||
{
|
||||
|
@ -123,6 +123,8 @@ public:
|
||||
|
||||
void OnDarkModeToggle();
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
protected:
|
||||
void setupUIConditions() override;
|
||||
|
||||
@ -145,7 +147,6 @@ private:
|
||||
void OnSetFocus( wxFocusEvent& event );
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
void ReCreateMainToolbar();
|
||||
|
||||
/**
|
||||
* Create a Screenshot of the current 3D view.
|
||||
@ -172,7 +173,6 @@ private:
|
||||
private:
|
||||
wxFileName m_defaultSaveScreenshotFileName;
|
||||
|
||||
ACTION_TOOLBAR* m_mainToolBar;
|
||||
EDA_3D_CANVAS* m_canvas;
|
||||
BOARD_ADAPTER m_boardAdapter;
|
||||
CAMERA& m_currentCamera;
|
||||
|
@ -157,7 +157,8 @@ TOOL_ACTION EDA_3D_ACTIONS::toggleOrtho( TOOL_ACTION_ARGS()
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "Toggle Orthographic Projection" ) )
|
||||
.Tooltip( _( "Enable/disable orthographic projection" ) )
|
||||
.Icon( BITMAPS::ortho ) );
|
||||
.Icon( BITMAPS::ortho )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE ) );
|
||||
|
||||
TOOL_ACTION EDA_3D_ACTIONS::viewFront( TOOL_ACTION_ARGS()
|
||||
.Name( "3DViewer.Control.viewFront" )
|
||||
@ -337,5 +338,6 @@ TOOL_ACTION EDA_3D_ACTIONS::showLayersManager( TOOL_ACTION_ARGS()
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "Show Appearance Manager" ) )
|
||||
.Tooltip( _( "Show/hide the appearance manager" ) )
|
||||
.Icon( BITMAPS::layers_manager ) );
|
||||
.Icon( BITMAPS::layers_manager )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE ) );
|
||||
|
||||
|
@ -70,6 +70,7 @@
|
||||
#include <wx/stdpaths.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/msgdlg.h>
|
||||
#include <wx/wupdlock.h>
|
||||
#include <kiplatform/app.h>
|
||||
#include <kiplatform/io.h>
|
||||
#include <kiplatform/ui.h>
|
||||
@ -176,6 +177,11 @@ EDA_BASE_FRAME::EDA_BASE_FRAME( wxWindow* aParent, FRAME_T aFrameType, const wxS
|
||||
KIWAY_HOLDER( aKiway, KIWAY_HOLDER::FRAME ),
|
||||
UNITS_PROVIDER( aIuScale, EDA_UNITS::MILLIMETRES )
|
||||
{
|
||||
m_tbTopMain = nullptr;
|
||||
m_tbTopAux = nullptr;
|
||||
m_tbRight = nullptr;
|
||||
m_tbLeft = nullptr;
|
||||
|
||||
commonInit( aFrameType );
|
||||
}
|
||||
|
||||
@ -486,6 +492,132 @@ void EDA_BASE_FRAME::setupUIConditions()
|
||||
}
|
||||
|
||||
|
||||
void EDA_BASE_FRAME::RegisterCustomToolbarControlFactory( const std::string& aName, const wxString& aUiName,
|
||||
const wxString& aDescription,
|
||||
const ACTION_TOOLBAR_CONTROL_FACTORY& aControlFactory )
|
||||
{
|
||||
wxASSERT_MSG( aName.starts_with( "control" ),
|
||||
wxString::Format( "Control name \"%s\" must start with \"control\"", aName ) );
|
||||
|
||||
m_toolbarControlFactories.emplace_back( aName, aUiName, aDescription, aControlFactory );
|
||||
}
|
||||
|
||||
|
||||
ACTION_TOOLBAR_CONTROL_FACTORY* EDA_BASE_FRAME::GetCustomToolbarControlFactory( const std::string& aName )
|
||||
{
|
||||
for( auto& control : m_toolbarControlFactories )
|
||||
{
|
||||
if( control.name == aName )
|
||||
return &control.factory;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
void EDA_BASE_FRAME::configureToolbars()
|
||||
{
|
||||
// Get the default toolbar config for the frame
|
||||
m_tbConfigLeft = DefaultLeftToolbarConfig();
|
||||
m_tbConfigRight = DefaultRightToolbarConfig();
|
||||
m_tbConfigTopAux = DefaultTopAuxToolbarConfig();
|
||||
m_tbConfigTopMain = DefaultTopMainToolbarConfig();
|
||||
}
|
||||
|
||||
|
||||
void EDA_BASE_FRAME::RecreateToolbars()
|
||||
{
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
|
||||
// Drawing tools (typically on right edge of window)
|
||||
if( m_tbConfigRight.has_value() )
|
||||
{
|
||||
if( !m_tbRight )
|
||||
{
|
||||
m_tbRight = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_tbRight->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_tbRight->ApplyConfiguration( m_tbConfigRight.value() );
|
||||
}
|
||||
|
||||
// Options (typically on left edge of window)
|
||||
if( m_tbConfigLeft.has_value() )
|
||||
{
|
||||
if( !m_tbLeft )
|
||||
{
|
||||
m_tbLeft = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_tbLeft->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_tbLeft->ApplyConfiguration( m_tbConfigLeft.value() );
|
||||
}
|
||||
|
||||
// Top main toolbar (the top one)
|
||||
if( m_tbConfigTopMain.has_value() )
|
||||
{
|
||||
if( !m_tbTopMain )
|
||||
{
|
||||
m_tbTopMain = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT | wxAUI_TB_HORIZONTAL );
|
||||
m_tbTopMain->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_tbTopMain->ApplyConfiguration( m_tbConfigTopMain.value() );
|
||||
}
|
||||
|
||||
// Top aux toolbar (the bottom one)
|
||||
if( m_tbConfigTopAux.has_value() )
|
||||
{
|
||||
if( !m_tbTopAux )
|
||||
{
|
||||
m_tbTopAux = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT | wxAUI_TB_HORIZONTAL );
|
||||
m_tbTopAux->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_tbTopAux->ApplyConfiguration( m_tbConfigTopAux.value() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EDA_BASE_FRAME::UpdateToolbarControlSizes()
|
||||
{
|
||||
if( m_tbTopMain )
|
||||
m_tbTopMain->UpdateControlWidths();
|
||||
|
||||
if( m_tbRight )
|
||||
m_tbRight->UpdateControlWidths();
|
||||
|
||||
if( m_tbLeft )
|
||||
m_tbLeft->UpdateControlWidths();
|
||||
|
||||
if( m_tbTopAux )
|
||||
m_tbTopAux->UpdateControlWidths();
|
||||
|
||||
}
|
||||
|
||||
|
||||
void EDA_BASE_FRAME::OnToolbarSizeChanged()
|
||||
{
|
||||
if( m_tbTopMain )
|
||||
m_auimgr.GetPane( m_tbTopMain ).MaxSize( m_tbTopMain->GetSize() );
|
||||
|
||||
if( m_tbRight )
|
||||
m_auimgr.GetPane( m_tbRight ).MaxSize( m_tbRight->GetSize() );
|
||||
|
||||
if( m_tbLeft )
|
||||
m_auimgr.GetPane( m_tbLeft ).MaxSize( m_tbLeft->GetSize() );
|
||||
|
||||
if( m_tbTopAux )
|
||||
m_auimgr.GetPane( m_tbTopAux ).MaxSize( m_tbTopAux->GetSize() );
|
||||
|
||||
m_auimgr.Update();
|
||||
}
|
||||
|
||||
|
||||
void EDA_BASE_FRAME::ReCreateMenuBar()
|
||||
{
|
||||
/**
|
||||
|
@ -100,10 +100,6 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
|
||||
m_socketServer( nullptr ),
|
||||
m_lastToolbarIconSize( 0 )
|
||||
{
|
||||
m_mainToolBar = nullptr;
|
||||
m_drawToolBar = nullptr;
|
||||
m_optionsToolBar = nullptr;
|
||||
m_auxiliaryToolBar = nullptr;
|
||||
m_gridSelectBox = nullptr;
|
||||
m_zoomSelectBox = nullptr;
|
||||
m_searchPane = nullptr;
|
||||
@ -193,6 +189,45 @@ EDA_DRAW_FRAME::~EDA_DRAW_FRAME()
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::configureToolbars()
|
||||
{
|
||||
EDA_BASE_FRAME::configureToolbars();
|
||||
|
||||
// Grid selection
|
||||
auto gridSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_gridSelectBox )
|
||||
{
|
||||
m_gridSelectBox = new wxChoice( aToolbar, ID_ON_GRID_SELECT, wxDefaultPosition,
|
||||
wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
UpdateGridSelectBox();
|
||||
|
||||
aToolbar->Add( m_gridSelectBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( m_tbGridSelectName, _( "Grid Selector" ),
|
||||
_( "Grid Selection box" ), gridSelectorFactory );
|
||||
|
||||
// Zoom selection
|
||||
auto zoomSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_zoomSelectBox )
|
||||
{
|
||||
m_zoomSelectBox = new wxChoice( aToolbar, ID_ON_ZOOM_SELECT, wxDefaultPosition,
|
||||
wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
UpdateZoomSelectBox();
|
||||
aToolbar->Add( m_zoomSelectBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( m_tbZoomSelectName, _( "Zoom Selector" ),
|
||||
_( "Zoom selection box" ), zoomSelectorFactory );
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::ReleaseFile()
|
||||
{
|
||||
if( m_file_checker.get() != nullptr )
|
||||
@ -1167,43 +1202,6 @@ bool EDA_DRAW_FRAME::LibraryFileBrowser( bool doOpen, wxFileName& aFilename,
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::RecreateToolbars()
|
||||
{
|
||||
// Rebuild all toolbars, and update the checked state of check tools
|
||||
if( m_mainToolBar )
|
||||
ReCreateHToolbar();
|
||||
|
||||
if( m_drawToolBar ) // Drawing tools (typically on right edge of window)
|
||||
ReCreateVToolbar();
|
||||
|
||||
if( m_optionsToolBar ) // Options (typically on left edge of window)
|
||||
ReCreateOptToolbar();
|
||||
|
||||
if( m_auxiliaryToolBar ) // Additional tools under main toolbar
|
||||
ReCreateAuxiliaryToolbar();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::OnToolbarSizeChanged()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
m_auimgr.GetPane( m_mainToolBar ).MaxSize( m_mainToolBar->GetSize() );
|
||||
|
||||
if( m_drawToolBar )
|
||||
m_auimgr.GetPane( m_drawToolBar ).MaxSize( m_drawToolBar->GetSize() );
|
||||
|
||||
if( m_optionsToolBar )
|
||||
m_auimgr.GetPane( m_optionsToolBar ).MaxSize( m_optionsToolBar->GetSize() );
|
||||
|
||||
if( m_auxiliaryToolBar )
|
||||
m_auimgr.GetPane( m_auxiliaryToolBar ).MaxSize( m_auxiliaryToolBar->GetSize() );
|
||||
|
||||
m_auimgr.Update();
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::ShowChangedLanguage()
|
||||
{
|
||||
EDA_BASE_FRAME::ShowChangedLanguage();
|
||||
@ -1418,7 +1416,7 @@ std::vector<const PLUGIN_ACTION*> EDA_DRAW_FRAME::GetOrderedPluginActions(
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::addApiPluginTools()
|
||||
void EDA_DRAW_FRAME::AddApiPluginTools( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
#ifdef KICAD_IPC_API
|
||||
API_PLUGIN_MANAGER& mgr = Pgm().GetPluginManager();
|
||||
@ -1437,7 +1435,7 @@ void EDA_DRAW_FRAME::addApiPluginTools()
|
||||
? action->icon_dark
|
||||
: action->icon_light;
|
||||
|
||||
wxAuiToolBarItem* button = m_mainToolBar->AddTool( wxID_ANY, wxEmptyString, icon,
|
||||
wxAuiToolBarItem* button = aToolbar->AddTool( wxID_ANY, wxEmptyString, icon,
|
||||
action->name );
|
||||
|
||||
Connect( button->GetId(), wxEVT_COMMAND_MENU_SELECTED,
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include <memory>
|
||||
#include <pgm_base.h>
|
||||
#include <settings/common_settings.h>
|
||||
#include <trace_helpers.h>
|
||||
#include <tool/action_toolbar.h>
|
||||
#include <tool/actions.h>
|
||||
#include <tool/tool_action.h>
|
||||
@ -42,27 +43,46 @@
|
||||
#include <tool/ui/toolbar_configuration.h>
|
||||
#include <widgets/bitmap_button.h>
|
||||
#include <widgets/wx_aui_art_providers.h>
|
||||
|
||||
#include <wx/log.h>
|
||||
#include <wx/popupwin.h>
|
||||
#include <wx/renderer.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/dcclient.h>
|
||||
#include <wx/settings.h>
|
||||
|
||||
// Needed to handle adding the plugins to the toolbar
|
||||
// TODO (ISM): This should be better abstracted away from the toolbars
|
||||
#include <python_scripting.h>
|
||||
#include <api/api_plugin_manager.h>
|
||||
|
||||
ACTION_GROUP::ACTION_GROUP( const std::string& aName,
|
||||
|
||||
ACTION_GROUP::ACTION_GROUP( const std::string_view& aName )
|
||||
{
|
||||
m_name = aName;
|
||||
m_id = ACTION_MANAGER::MakeActionId( m_name );
|
||||
}
|
||||
|
||||
|
||||
ACTION_GROUP::ACTION_GROUP( const std::string_view& aName,
|
||||
const std::vector<const TOOL_ACTION*>& aActions )
|
||||
{
|
||||
m_name = aName;
|
||||
m_id = ACTION_MANAGER::MakeActionId( m_name );
|
||||
|
||||
SetActions( aActions );
|
||||
}
|
||||
|
||||
|
||||
void ACTION_GROUP::SetActions( const std::vector<const TOOL_ACTION*>& aActions )
|
||||
{
|
||||
wxASSERT_MSG( aActions.size() > 0, wxS( "Action groups must have at least one action" ) );
|
||||
|
||||
// The default action is just the first action in the vector
|
||||
m_actions = aActions;
|
||||
m_defaultAction = m_actions[0];
|
||||
|
||||
m_name = aName;
|
||||
m_id = ACTION_MANAGER::MakeActionId( m_name );
|
||||
}
|
||||
|
||||
|
||||
int ACTION_GROUP::GetUIId() const
|
||||
{
|
||||
return m_id + TOOL_ACTION::GetBaseUIId();
|
||||
@ -240,64 +260,89 @@ ACTION_TOOLBAR::~ACTION_TOOLBAR()
|
||||
|
||||
void ACTION_TOOLBAR::ApplyConfiguration( const TOOLBAR_CONFIGURATION& aConfig )
|
||||
{
|
||||
wxASSERT( GetParent() );
|
||||
|
||||
// Remove existing tools
|
||||
Clear();
|
||||
ClearToolbar();
|
||||
|
||||
std::vector<std::string> items = aConfig.GetToolbarItems();
|
||||
|
||||
for( auto& toolName : items )
|
||||
// Add all the items to the toolbar
|
||||
for( auto& actionName : items )
|
||||
{
|
||||
if( toolName == "separator" )
|
||||
if( actionName == "separator" )
|
||||
{
|
||||
// Add a separator
|
||||
AddScaledSeparator();
|
||||
AddScaledSeparator( GetParent() );
|
||||
}
|
||||
else if( toolName.starts_with( "group" ) )
|
||||
else if( actionName.starts_with( "group" ) )
|
||||
{
|
||||
// Add a group of items to the toolbar
|
||||
std::optional<TOOLBAR_GROUP_CONFIG&> groupConfigOpt = aConfig.GetGroup( toolName );
|
||||
const TOOLBAR_GROUP_CONFIG* groupConfig = aConfig.GetGroup( actionName );
|
||||
|
||||
if( !groupConfigOpt.has_value() )
|
||||
if( !groupConfig )
|
||||
{
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find group %s", toolName ) );
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find group %s", actionName ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
TOOLBAR_GROUP_CONFIG& groupConfig = groupConfigOpt.value();
|
||||
|
||||
std::vector<const TOOL_ACTION*> tools;
|
||||
|
||||
for( auto& groupItem : groupConfig.GetGroupItems() )
|
||||
for( auto& groupItem : groupConfig->GetGroupItems() )
|
||||
{
|
||||
TOOL_ACTION* action = m_toolManager->GetActionManager()->FindTool( toolName );
|
||||
TOOL_ACTION* action = m_toolManager->GetActionManager()->FindAction( groupItem );
|
||||
|
||||
if( !tool )
|
||||
if( !action )
|
||||
{
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find group tool %s", toolName ) );
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find group tool %s", actionName ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
tools.push_back( action );
|
||||
}
|
||||
|
||||
ACTION_GROUP* group = new ACTION_GROUP( groupConfig.GetName(), tools );
|
||||
|
||||
AddGroup( group );
|
||||
AddGroup( std::make_unique<ACTION_GROUP>( groupConfig->GetName(), tools ) );
|
||||
}
|
||||
else
|
||||
else if( actionName.starts_with( "control" ) )
|
||||
{
|
||||
// Assume anything else is a tool
|
||||
TOOL_ACTION* action = m_toolManager->GetActionManager()->FindTool( toolName );
|
||||
// Add a custom control to the toolbar
|
||||
EDA_BASE_FRAME* frame = static_cast<EDA_BASE_FRAME*>( GetParent() );
|
||||
ACTION_TOOLBAR_CONTROL_FACTORY* factory = frame->GetCustomToolbarControlFactory( actionName );
|
||||
|
||||
if( !tool )
|
||||
if( !factory )
|
||||
{
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find toolbar tool %s", toolName ) );
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find control factory for %s", actionName ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
Add( action );
|
||||
// The factory functions are responsible for adding the controls to the toolbar themselves
|
||||
(*factory)( this );
|
||||
}
|
||||
else if( actionName.starts_with( "spacer" ) )
|
||||
{
|
||||
// Extract the spacer size from the text, it is the form "spacer:x", with "x" being the size
|
||||
int sep = actionName.find_last_of( ":" );
|
||||
int spacerSize = std::stoi( actionName.substr( sep+1 ) );
|
||||
|
||||
AddSpacer( spacerSize );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assume anything else is an action
|
||||
TOOL_ACTION* action = m_toolManager->GetActionManager()->FindAction( actionName );
|
||||
|
||||
if( !action )
|
||||
{
|
||||
wxASSERT_MSG( false, wxString::Format( "Unable to find toolbar tool %s", actionName ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
Add( *action );
|
||||
}
|
||||
}
|
||||
|
||||
// Apply the configuration
|
||||
KiRealize();
|
||||
}
|
||||
|
||||
|
||||
@ -363,6 +408,14 @@ void ACTION_TOOLBAR::AddScaledSeparator( wxWindow* aWindow )
|
||||
}
|
||||
|
||||
|
||||
void ACTION_TOOLBAR::Add( wxControl* aControl, const wxString& aLabel )
|
||||
{
|
||||
wxASSERT( aControl );
|
||||
m_controlIDs.push_back( aControl->GetId() );
|
||||
AddControl( aControl, aLabel );
|
||||
}
|
||||
|
||||
|
||||
void ACTION_TOOLBAR::AddToolContextMenu( const TOOL_ACTION& aAction,
|
||||
std::unique_ptr<ACTION_MENU> aMenu )
|
||||
{
|
||||
@ -372,7 +425,7 @@ void ACTION_TOOLBAR::AddToolContextMenu( const TOOL_ACTION& aAction,
|
||||
}
|
||||
|
||||
|
||||
void ACTION_TOOLBAR::AddGroup( ACTION_GROUP* aGroup, bool aIsToggleEntry )
|
||||
void ACTION_TOOLBAR::AddGroup( std::unique_ptr<ACTION_GROUP> aGroup )
|
||||
{
|
||||
int groupId = aGroup->GetUIId();
|
||||
const TOOL_ACTION* defaultAction = aGroup->GetDefaultAction();
|
||||
@ -380,20 +433,27 @@ void ACTION_TOOLBAR::AddGroup( ACTION_GROUP* aGroup, bool aIsToggleEntry )
|
||||
wxASSERT( GetParent() );
|
||||
wxASSERT( defaultAction );
|
||||
|
||||
m_toolKinds[ groupId ] = aIsToggleEntry;
|
||||
// Turn this into a toggle entry if any one of the actions is a toggle entry
|
||||
bool isToggleEntry = false;
|
||||
|
||||
for( const auto& act : aGroup->GetActions() )
|
||||
isToggleEntry |= act->CheckToolbarState( TOOLBAR_STATE::TOGGLE );
|
||||
|
||||
|
||||
m_toolKinds[ groupId ] = isToggleEntry;
|
||||
m_toolActions[ groupId ] = defaultAction;
|
||||
m_actionGroups[ groupId ] = aGroup;
|
||||
m_actionGroups[ groupId ] = std::move( aGroup );
|
||||
|
||||
// Add the main toolbar item representing the group
|
||||
AddTool( groupId, wxEmptyString,
|
||||
KiBitmapBundle( defaultAction->GetIcon(),
|
||||
Pgm().GetCommonSettings()->m_Appearance.toolbar_icon_size ),
|
||||
KiDisabledBitmapBundle( defaultAction->GetIcon() ),
|
||||
aIsToggleEntry ? wxITEM_CHECK : wxITEM_NORMAL,
|
||||
isToggleEntry ? wxITEM_CHECK : wxITEM_NORMAL,
|
||||
wxEmptyString, wxEmptyString, nullptr );
|
||||
|
||||
// Select the default action
|
||||
doSelectAction( aGroup, *defaultAction );
|
||||
doSelectAction( m_actionGroups[ groupId ].get(), *defaultAction );
|
||||
}
|
||||
|
||||
|
||||
@ -431,13 +491,20 @@ void ACTION_TOOLBAR::doSelectAction( ACTION_GROUP* aGroup, const TOOL_ACTION& aA
|
||||
// Register a new handler with the new UI conditions
|
||||
if( m_toolManager )
|
||||
{
|
||||
m_toolManager->GetToolHolder()->UnregisterUIUpdateHandler( groupId );
|
||||
|
||||
const ACTION_CONDITIONS* cond = m_toolManager->GetActionManager()->GetCondition( aAction );
|
||||
|
||||
wxASSERT_MSG( cond, wxString::Format( "Missing UI condition for action %s",
|
||||
aAction.GetName() ) );
|
||||
|
||||
m_toolManager->GetToolHolder()->UnregisterUIUpdateHandler( groupId );
|
||||
m_toolManager->GetToolHolder()->RegisterUIUpdateHandler( groupId, *cond );
|
||||
// Register the new UI condition to control this entry
|
||||
if( cond )
|
||||
{
|
||||
m_toolManager->GetToolHolder()->RegisterUIUpdateHandler( groupId, *cond );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogTrace( kicadTraceToolStack, wxString::Format( "No UI condition for action %s",
|
||||
aAction.GetName() ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Update the currently selected action
|
||||
@ -447,6 +514,13 @@ void ACTION_TOOLBAR::doSelectAction( ACTION_GROUP* aGroup, const TOOL_ACTION& aA
|
||||
}
|
||||
|
||||
|
||||
void ACTION_TOOLBAR::UpdateControlWidths()
|
||||
{
|
||||
for( int id : m_controlIDs )
|
||||
UpdateControlWidth( id );
|
||||
}
|
||||
|
||||
|
||||
void ACTION_TOOLBAR::UpdateControlWidth( int aID )
|
||||
{
|
||||
wxAuiToolBarItem* item = FindTool( aID );
|
||||
@ -729,7 +803,7 @@ void ACTION_TOOLBAR::popupPalette( wxAuiToolBarItem* aItem )
|
||||
if( it == m_actionGroups.end() )
|
||||
return;
|
||||
|
||||
ACTION_GROUP* group = it->second;
|
||||
ACTION_GROUP* group = it->second.get();
|
||||
|
||||
wxAuiPaneInfo& pane = m_auiManager->GetPane( this );
|
||||
|
||||
|
@ -66,7 +66,6 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
KIWAY_PLAYER( aKiway, aParent, FRAME_CVPCB, _( "Assign Footprints" ), wxDefaultPosition,
|
||||
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, wxT( "CvpcbFrame" ),
|
||||
unityScale ),
|
||||
m_mainToolBar( nullptr ),
|
||||
m_footprintListBox( nullptr ),
|
||||
m_librariesListBox( nullptr ),
|
||||
m_symbolsListBox( nullptr ),
|
||||
@ -92,8 +91,9 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
|
||||
m_footprintListBox = new FOOTPRINTS_LISTBOX( this, ID_CVPCB_FOOTPRINT_LIST );
|
||||
m_footprintListBox->SetFont( KIUI::GetMonospacedUIFont() );
|
||||
@ -108,7 +108,7 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
|
||||
|
||||
m_auimgr.AddPane( m_librariesListBox, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(1)
|
||||
.Caption( _( "Footprint Libraries" ) )
|
||||
@ -1190,7 +1190,7 @@ void CVPCB_MAINFRAME::SetStatusText( const wxString& aText, int aNumber )
|
||||
void CVPCB_MAINFRAME::ShowChangedLanguage()
|
||||
{
|
||||
EDA_BASE_FRAME::ShowChangedLanguage();
|
||||
ReCreateHToolbar();
|
||||
RecreateToolbars();
|
||||
DisplayStatus();
|
||||
}
|
||||
|
||||
|
@ -139,10 +139,7 @@ public:
|
||||
*/
|
||||
void OnSelectComponent( wxListEvent& event );
|
||||
|
||||
/*
|
||||
* Functions to rebuild the toolbars and menubars
|
||||
*/
|
||||
void ReCreateHToolbar();
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
void ShowChangedLanguage() override;
|
||||
|
||||
@ -313,6 +310,8 @@ public:
|
||||
protected:
|
||||
CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
|
||||
void configureToolbars() override;
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
|
||||
void setupUIConditions() override;
|
||||
@ -388,7 +387,6 @@ private:
|
||||
|
||||
NETLIST m_netlist;
|
||||
int m_filteringOptions;
|
||||
ACTION_TOOLBAR* m_mainToolBar;
|
||||
FOOTPRINTS_LISTBOX* m_footprintListBox;
|
||||
LIBRARY_LISTBOX* m_librariesListBox;
|
||||
SYMBOLS_LISTBOX* m_symbolsListBox;
|
||||
|
@ -114,20 +114,18 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aPa
|
||||
m_toolManager->InitTools();
|
||||
|
||||
setupUIConditions();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
// Run the control tool, it is supposed to be always active
|
||||
m_toolManager->InvokeTool( "cvpcb.FootprintViewerInteractiveSelection" );
|
||||
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
CreateInfoBar();
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( wxS( "MainToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( wxS( "TopMainToolbar" ) )
|
||||
.Top().Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( wxS( "OptToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( wxS( "LeftToolbar" ) )
|
||||
.Left().Layer( 3 ) );
|
||||
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( wxS( "DrawFrame" ) )
|
||||
.Center() );
|
||||
@ -146,17 +144,19 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aPa
|
||||
// Restore last zoom. (If auto-zooming we'll adjust when we load the footprint.)
|
||||
CVPCB_SETTINGS* cfg = dynamic_cast<CVPCB_SETTINGS*>( config() );
|
||||
|
||||
/* TODO (ISM): Re-enable this once this is turned into an action
|
||||
if( cfg )
|
||||
{
|
||||
GetCanvas()->GetView()->SetScale( cfg->m_FootprintViewerZoom );
|
||||
|
||||
wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
|
||||
wxAuiToolBarItem* toolOpt = m_tbTopMain->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
|
||||
|
||||
if( cfg->m_FootprintViewerAutoZoomOnSelect )
|
||||
toolOpt->SetState( wxAUI_BUTTON_STATE_CHECKED );
|
||||
else
|
||||
toolOpt->SetState( 0 );
|
||||
}
|
||||
*/
|
||||
|
||||
updateView();
|
||||
|
||||
@ -224,118 +224,64 @@ void DISPLAY_FOOTPRINTS_FRAME::setupUIConditions()
|
||||
}
|
||||
|
||||
|
||||
void DISPLAY_FOOTPRINTS_FRAME::ReCreateVToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> DISPLAY_FOOTPRINTS_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
// Currently, no vertical right toolbar.
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::selectionTool )
|
||||
.AppendAction( ACTIONS::measureTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::togglePolarCoords )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::showPadNumbers )
|
||||
.AppendAction( PCB_ACTIONS::padDisplayMode )
|
||||
.AppendAction( PCB_ACTIONS::textOutlines )
|
||||
.AppendAction( PCB_ACTIONS::graphicsOutlines );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void DISPLAY_FOOTPRINTS_FRAME::ReCreateOptToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> DISPLAY_FOOTPRINTS_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR, wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::selectionTool );
|
||||
m_optionsToolBar->Add( ACTIONS::measureTool );
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::togglePolarCoords );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::show3DViewer );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::showPadNumbers );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::padDisplayMode );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::textOutlines );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::graphicsOutlines );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbGridSelectName );
|
||||
|
||||
m_optionsToolBar->Realize();
|
||||
}
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbZoomSelectName );
|
||||
|
||||
config.AppendSeparator();
|
||||
|
||||
void DISPLAY_FOOTPRINTS_FRAME::ReCreateHToolbar()
|
||||
{
|
||||
// Note:
|
||||
// To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
|
||||
// all wxAuiToolBarItems.
|
||||
// However the wxAuiToolBarItems are not the owners of controls managed by
|
||||
// them ( m_zoomSelectBox and m_gridSelectBox ), and therefore do not delete them
|
||||
// So we do not recreate them after clearing the tools.
|
||||
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::show3DViewer );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
// Grid selection choice box.
|
||||
if( !m_gridSelectBox )
|
||||
m_gridSelectBox = new wxChoice( m_mainToolBar, ID_ON_GRID_SELECT );
|
||||
|
||||
UpdateGridSelectBox();
|
||||
m_mainToolBar->AddControl( m_gridSelectBox );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
// Zoom selection choice box.
|
||||
if( !m_zoomSelectBox )
|
||||
m_zoomSelectBox = new wxChoice( m_mainToolBar, ID_ON_ZOOM_SELECT );
|
||||
|
||||
UpdateZoomSelectBox();
|
||||
m_mainToolBar->AddControl( m_zoomSelectBox );
|
||||
|
||||
/* TODO (ISM): Turn this into an action
|
||||
// Option to run Zoom automatique on footprint selection change
|
||||
m_mainToolBar->AddTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL, wxEmptyString,
|
||||
m_tbTopMain->AddTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::zoom_auto_fit_in_page, this ),
|
||||
_( "Automatic Zoom on footprint change" ),
|
||||
wxITEM_CHECK );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->Realize();
|
||||
}
|
||||
|
||||
|
||||
void DISPLAY_FOOTPRINTS_FRAME::UpdateToolbarControlSizes()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
// Update the item widths
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
}
|
||||
*/
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
@ -364,8 +310,10 @@ void DISPLAY_FOOTPRINTS_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
|
||||
|
||||
cfg->m_FootprintViewerZoom = GetCanvas()->GetView()->GetScale();
|
||||
|
||||
wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
|
||||
/* TODO (ISM): Move to action framework
|
||||
wxAuiToolBarItem* toolOpt = m_tbTopMain->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
|
||||
cfg->m_FootprintViewerAutoZoomOnSelect = ( toolOpt->GetState() & wxAUI_BUTTON_STATE_CHECKED );
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
@ -556,13 +504,14 @@ void DISPLAY_FOOTPRINTS_FRAME::updateView()
|
||||
|
||||
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
|
||||
|
||||
wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
|
||||
/* TODO (ISM): Move to action framework
|
||||
wxAuiToolBarItem* toolOpt = m_tbTopMain->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
|
||||
|
||||
if( toolOpt->GetState() & wxAUI_BUTTON_STATE_CHECKED )
|
||||
m_toolManager->RunAction( ACTIONS::zoomFitScreen );
|
||||
else
|
||||
m_toolManager->RunAction( ACTIONS::centerContents );
|
||||
|
||||
*/
|
||||
UpdateMsgPanel();
|
||||
}
|
||||
|
||||
|
@ -47,10 +47,9 @@ public:
|
||||
DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
~DISPLAY_FOOTPRINTS_FRAME() override;
|
||||
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override;
|
||||
void UpdateToolbarControlSizes() override;
|
||||
// Currently, no top aux or right toolbars
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
/**
|
||||
* Refresh the full display for this frame.
|
||||
|
@ -28,71 +28,79 @@
|
||||
#include <wx/stattext.h>
|
||||
|
||||
|
||||
void CVPCB_MAINFRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> CVPCB_MAINFRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::saveAssociationsToSchematic );
|
||||
// clang-format off
|
||||
config.AppendAction( CVPCB_ACTIONS::saveAssociationsToSchematic );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::showFootprintLibTable );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showFootprintLibTable );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::showFootprintViewer );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( CVPCB_ACTIONS::showFootprintViewer );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( CVPCB_ACTIONS::gotoPreviousNA )
|
||||
.AppendAction( CVPCB_ACTIONS::gotoNextNA );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::gotoPreviousNA );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::gotoNextNA );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::undo );
|
||||
m_mainToolBar->Add( ACTIONS::redo );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::autoAssociate );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::deleteAll );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::undo )
|
||||
.AppendAction( ACTIONS::redo )
|
||||
.AppendAction( CVPCB_ACTIONS::autoAssociate )
|
||||
.AppendAction( CVPCB_ACTIONS::deleteAll );
|
||||
|
||||
// Add tools for footprint names filtering:
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
config.AppendSeparator()
|
||||
.AppendSpacer( 15 )
|
||||
.AppendControl( "control.CVPCBFilters" );
|
||||
|
||||
// wxGTK with GTK3 has a serious issue with bold texts: strings are incorrectly sized
|
||||
// and truncated after the first space.
|
||||
// so use SetLabelMarkup is a trick to fix this issue.
|
||||
m_mainToolBar->AddSpacer( 15 );
|
||||
wxString msg_bold = _( "Footprint Filters:" );
|
||||
wxStaticText* text = new wxStaticText( m_mainToolBar, wxID_ANY, msg_bold );
|
||||
text->SetFont( m_mainToolBar->GetFont().Bold() );
|
||||
|
||||
#ifdef __WXGTK3__
|
||||
text->SetLabelMarkup( "<b>" + msg_bold + "</b>" );
|
||||
#endif
|
||||
|
||||
m_mainToolBar->AddControl( text );
|
||||
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::FilterFPbyFPFilters, ACTION_TOOLBAR::TOGGLE );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::filterFPbyPin, ACTION_TOOLBAR::TOGGLE );
|
||||
m_mainToolBar->Add( CVPCB_ACTIONS::FilterFPbyLibrary, ACTION_TOOLBAR::TOGGLE );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
m_tcFilterString = new wxTextCtrl( m_mainToolBar, wxID_ANY, wxEmptyString, wxDefaultPosition,
|
||||
wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||
|
||||
// Min size on Mac is (a not very useful) single character
|
||||
m_tcFilterString->SetMinSize( wxSize( 150, -1 ) );
|
||||
|
||||
m_tcFilterString->Bind( wxEVT_TEXT_ENTER, &CVPCB_MAINFRAME::onTextFilterChanged, this );
|
||||
|
||||
m_mainToolBar->AddControl( m_tcFilterString );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->Realize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void CVPCB_MAINFRAME::configureToolbars()
|
||||
{
|
||||
EDA_BASE_FRAME::configureToolbars();
|
||||
|
||||
auto footprintFilterFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
|
||||
// wxGTK with GTK3 has a serious issue with bold texts: strings are incorrectly sized
|
||||
// and truncated after the first space.
|
||||
// so use SetLabelMarkup is a trick to fix this issue.
|
||||
wxString msg_bold = _( "Footprint Filters:" );
|
||||
wxStaticText* text = new wxStaticText( m_tbTopMain, wxID_ANY, msg_bold );
|
||||
text->SetFont( m_tbTopMain->GetFont().Bold() );
|
||||
|
||||
#ifdef __WXGTK3__
|
||||
text->SetLabelMarkup( "<b>" + msg_bold + "</b>" );
|
||||
#endif
|
||||
|
||||
aToolbar->AddControl( text );
|
||||
|
||||
aToolbar->Add( CVPCB_ACTIONS::FilterFPbyFPFilters );
|
||||
aToolbar->Add( CVPCB_ACTIONS::filterFPbyPin );
|
||||
aToolbar->Add( CVPCB_ACTIONS::FilterFPbyLibrary );
|
||||
|
||||
aToolbar->AddScaledSeparator( this );
|
||||
|
||||
if( !m_tcFilterString )
|
||||
{
|
||||
m_tcFilterString = new wxTextCtrl( aToolbar, wxID_ANY, wxEmptyString, wxDefaultPosition,
|
||||
wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||
}
|
||||
|
||||
// Min size on Mac is (a not very useful) single character
|
||||
m_tcFilterString->SetMinSize( wxSize( 150, -1 ) );
|
||||
m_tcFilterString->Bind( wxEVT_TEXT_ENTER, &CVPCB_MAINFRAME::onTextFilterChanged, this );
|
||||
|
||||
aToolbar->AddControl( m_tcFilterString );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.CVPCBFilters", _( "Footprint filters" ),
|
||||
_( "Footprint filtering controls" ),
|
||||
footprintFilterFactory );
|
||||
}
|
||||
|
@ -153,6 +153,7 @@ TOOL_ACTION CVPCB_ACTIONS::FilterFPbyFPFilters( TOOL_ACTION_ARGS()
|
||||
.FriendlyName( _( "Use symbol footprint filters" ) )
|
||||
.Tooltip( _( "Filter footprint list by footprint filters defined in the symbol" ) )
|
||||
.Icon( BITMAPS::module_filtered_list )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_NONE )
|
||||
.Parameter( FOOTPRINTS_LISTBOX::FILTERING_BY_COMPONENT_FP_FILTERS ) );
|
||||
|
||||
@ -162,6 +163,7 @@ TOOL_ACTION CVPCB_ACTIONS::filterFPbyPin( TOOL_ACTION_ARGS()
|
||||
.FriendlyName( _( "Filter by pin count" ) )
|
||||
.Tooltip( _( "Filter footprint list by pin count" ) )
|
||||
.Icon( BITMAPS::module_pin_filtered_list )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_NONE )
|
||||
.Parameter( FOOTPRINTS_LISTBOX::FILTERING_BY_PIN_COUNT ) );
|
||||
|
||||
@ -171,5 +173,6 @@ TOOL_ACTION CVPCB_ACTIONS::FilterFPbyLibrary( TOOL_ACTION_ARGS()
|
||||
.FriendlyName( _( "Filter by library" ) )
|
||||
.Tooltip( _( "Filter footprint list by library" ) )
|
||||
.Icon( BITMAPS::module_library_list )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_NONE )
|
||||
.Parameter( FOOTPRINTS_LISTBOX::FILTERING_BY_LIBRARY ) );
|
||||
|
@ -189,9 +189,9 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
#ifdef KICAD_IPC_API
|
||||
wxTheApp->Bind( EDA_EVT_PLUGIN_AVAILABILITY_CHANGED,
|
||||
@ -224,7 +224,7 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
EESCHEMA_SETTINGS::APPEARANCE appearance_cfg = eeconfig()->m_Appearance;
|
||||
|
||||
// Rows; layers 4 - 6
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( wxS( "MainToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( wxS( "TopMainToolbar" ) )
|
||||
.Top().Layer( 6 ) );
|
||||
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( wxS( "MsgPanel" ) )
|
||||
@ -250,10 +250,10 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
m_auimgr.AddPane( createHighlightedNetNavigator(), defaultNetNavigatorPaneInfo() );
|
||||
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( wxS( "OptToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( wxS( "LeftToolbar" ) )
|
||||
.Left().Layer( 2 ) );
|
||||
|
||||
m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( wxS( "ToolsToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbRight, EDA_PANE().VToolbar().Name( wxS( "RightToolbar" ) )
|
||||
.Right().Layer( 2 ) );
|
||||
|
||||
// Center
|
||||
@ -2652,7 +2652,159 @@ void SCH_EDIT_FRAME::updateSelectionFilterVisbility()
|
||||
void SCH_EDIT_FRAME::onPluginAvailabilityChanged( wxCommandEvent& aEvt )
|
||||
{
|
||||
wxLogTrace( traceApi, "SCH frame: EDA_EVT_PLUGIN_AVAILABILITY_CHANGED" );
|
||||
ReCreateHToolbar();
|
||||
RecreateToolbars();
|
||||
aEvt.Skip();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleSearch()
|
||||
{
|
||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||
|
||||
// Ensure m_show_search is up to date (the pane can be closed outside the menu)
|
||||
m_show_search = m_auimgr.GetPane( SearchPaneName() ).IsShown();
|
||||
|
||||
m_show_search = !m_show_search;
|
||||
|
||||
wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() );
|
||||
searchPaneInfo.Show( m_show_search );
|
||||
|
||||
if( m_show_search )
|
||||
{
|
||||
searchPaneInfo.Direction( cfg->m_AuiPanels.search_panel_dock_direction );
|
||||
|
||||
if( cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_TOP
|
||||
|| cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_BOTTOM )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, searchPaneInfo, -1, cfg->m_AuiPanels.search_panel_height );
|
||||
}
|
||||
else if( cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_LEFT
|
||||
|| cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_RIGHT )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, searchPaneInfo, cfg->m_AuiPanels.search_panel_width, -1 );
|
||||
}
|
||||
|
||||
m_searchPane->FocusSearch();
|
||||
}
|
||||
else
|
||||
{
|
||||
cfg->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y;
|
||||
cfg->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x;
|
||||
cfg->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction;
|
||||
m_auimgr.Update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleProperties()
|
||||
{
|
||||
if( !m_propertiesPanel )
|
||||
return;
|
||||
|
||||
bool show = !m_propertiesPanel->IsShownOnScreen();
|
||||
|
||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||
propertiesPaneInfo.Show( show );
|
||||
|
||||
updateSelectionFilterVisbility();
|
||||
|
||||
EESCHEMA_SETTINGS* settings = eeconfig();
|
||||
|
||||
if( show )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, propertiesPaneInfo,
|
||||
settings->m_AuiPanels.properties_panel_width, -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
settings->m_AuiPanels.properties_panel_width = m_propertiesPanel->GetSize().x;
|
||||
m_auimgr.Update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleSchematicHierarchy()
|
||||
{
|
||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||
|
||||
wxCHECK( cfg, /* void */ );
|
||||
|
||||
wxAuiPaneInfo& hierarchy_pane = m_auimgr.GetPane( SchematicHierarchyPaneName() );
|
||||
|
||||
hierarchy_pane.Show( !hierarchy_pane.IsShown() );
|
||||
|
||||
updateSelectionFilterVisbility();
|
||||
|
||||
if( hierarchy_pane.IsShown() )
|
||||
{
|
||||
if( hierarchy_pane.IsFloating() )
|
||||
{
|
||||
hierarchy_pane.FloatingSize( cfg->m_AuiPanels.hierarchy_panel_float_width,
|
||||
cfg->m_AuiPanels.hierarchy_panel_float_height );
|
||||
m_auimgr.Update();
|
||||
}
|
||||
else if( cfg->m_AuiPanels.hierarchy_panel_docked_width > 0 )
|
||||
{
|
||||
// SetAuiPaneSize also updates m_auimgr
|
||||
SetAuiPaneSize( m_auimgr, hierarchy_pane,
|
||||
cfg->m_AuiPanels.hierarchy_panel_docked_width, -1 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( hierarchy_pane.IsFloating() )
|
||||
{
|
||||
cfg->m_AuiPanels.hierarchy_panel_float_width = hierarchy_pane.floating_size.x;
|
||||
cfg->m_AuiPanels.hierarchy_panel_float_height = hierarchy_pane.floating_size.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
cfg->m_AuiPanels.hierarchy_panel_docked_width = m_hierarchy->GetSize().x;
|
||||
}
|
||||
|
||||
m_auimgr.Update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleLibraryTree()
|
||||
{
|
||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||
|
||||
wxCHECK( cfg, /* void */ );
|
||||
|
||||
wxAuiPaneInfo& db_library_pane = m_auimgr.GetPane( DesignBlocksPaneName() );
|
||||
|
||||
db_library_pane.Show( !db_library_pane.IsShown() );
|
||||
|
||||
if( db_library_pane.IsShown() )
|
||||
{
|
||||
if( db_library_pane.IsFloating() )
|
||||
{
|
||||
db_library_pane.FloatingSize( cfg->m_AuiPanels.design_blocks_panel_float_width,
|
||||
cfg->m_AuiPanels.design_blocks_panel_float_height );
|
||||
m_auimgr.Update();
|
||||
}
|
||||
else if( cfg->m_AuiPanels.design_blocks_panel_docked_width > 0 )
|
||||
{
|
||||
// SetAuiPaneSize also updates m_auimgr
|
||||
SetAuiPaneSize( m_auimgr, db_library_pane,
|
||||
cfg->m_AuiPanels.design_blocks_panel_docked_width, -1 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( db_library_pane.IsFloating() )
|
||||
{
|
||||
cfg->m_AuiPanels.design_blocks_panel_float_width = db_library_pane.floating_size.x;
|
||||
cfg->m_AuiPanels.design_blocks_panel_float_height = db_library_pane.floating_size.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
cfg->m_AuiPanels.design_blocks_panel_docked_width = m_designBlocksPane->GetSize().x;
|
||||
}
|
||||
|
||||
m_auimgr.Update();
|
||||
}
|
||||
}
|
||||
|
@ -175,9 +175,11 @@ public:
|
||||
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
|
||||
void CreateScreens();
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override;
|
||||
|
||||
// Currently no top auxillary toolbar
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultRightToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
void setupUIConditions() override;
|
||||
|
||||
@ -975,6 +977,8 @@ protected:
|
||||
*/
|
||||
bool doAutoSave() override;
|
||||
|
||||
void configureToolbars() override;
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
|
||||
/**
|
||||
|
@ -134,10 +134,10 @@ SIMULATOR_FRAME::SIMULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
m_infoBar = new WX_INFOBAR( this );
|
||||
mainSizer->Add( m_infoBar, 0, wxEXPAND, 0 );
|
||||
|
||||
m_toolBar = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
wxAUI_TB_DEFAULT_STYLE|wxAUI_TB_HORZ_LAYOUT|wxAUI_TB_PLAIN_BACKGROUND );
|
||||
m_toolBar->Realize();
|
||||
mainSizer->Add( m_toolBar, 0, wxEXPAND, 5 );
|
||||
m_tbTopMain = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
wxAUI_TB_DEFAULT_STYLE|wxAUI_TB_HORZ_LAYOUT|wxAUI_TB_PLAIN_BACKGROUND );
|
||||
m_tbTopMain->Realize();
|
||||
mainSizer->Add( m_tbTopMain, 0, wxEXPAND, 5 );
|
||||
|
||||
m_ui = new SIMULATOR_FRAME_UI( this, m_schematicFrame );
|
||||
mainSizer->Add( m_ui, 1, wxEXPAND, 5 );
|
||||
@ -164,7 +164,11 @@ SIMULATOR_FRAME::SIMULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
|
||||
ReCreateHToolbar();
|
||||
// Set the tool manager for the toolbar here, since the tool manager didn't exist when the toolbar
|
||||
// was created.
|
||||
m_tbTopMain->SetToolManager( m_toolManager );
|
||||
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
|
||||
Bind( wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SIMULATOR_FRAME::onExit ), this,
|
||||
|
@ -150,7 +150,7 @@ public:
|
||||
|
||||
void ShowChangedLanguage() override;
|
||||
|
||||
void ReCreateHToolbar();
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
/**
|
||||
* Load plot, signal, cursor, measurement, etc. settings from a file.
|
||||
|
@ -27,55 +27,41 @@
|
||||
#include <widgets/wx_menubar.h>
|
||||
|
||||
|
||||
void SIMULATOR_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> SIMULATOR_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( m_toolBar )
|
||||
{
|
||||
m_toolBar->ClearToolbar();
|
||||
m_toolBar->SetToolManager( GetToolManager() );
|
||||
}
|
||||
else
|
||||
{
|
||||
EDA_BASE_FRAME* parent = dynamic_cast<EDA_BASE_FRAME*>( this );
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
wxCHECK( parent, /* void */ );
|
||||
// clang-format off
|
||||
config.AppendAction( EE_ACTIONS::openWorkbook )
|
||||
.AppendAction( EE_ACTIONS::saveWorkbook );
|
||||
|
||||
m_toolBar = new ACTION_TOOLBAR( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
}
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::newAnalysisTab )
|
||||
.AppendAction( EE_ACTIONS::simAnalysisProperties );
|
||||
|
||||
m_toolBar->Add( EE_ACTIONS::openWorkbook );
|
||||
m_toolBar->Add( EE_ACTIONS::saveWorkbook );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::runSimulation )
|
||||
.AppendAction( EE_ACTIONS::stopSimulation );
|
||||
|
||||
m_toolBar->AddScaledSeparator( this );
|
||||
m_toolBar->Add( EE_ACTIONS::newAnalysisTab );
|
||||
m_toolBar->Add( EE_ACTIONS::simAnalysisProperties );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomInHorizontally )
|
||||
.AppendAction( ACTIONS::zoomOutHorizontally )
|
||||
.AppendAction( ACTIONS::zoomInVertically )
|
||||
.AppendAction( ACTIONS::zoomOutVertically )
|
||||
.AppendAction( ACTIONS::zoomFitScreen );
|
||||
|
||||
m_toolBar->AddScaledSeparator( this );
|
||||
m_toolBar->Add( EE_ACTIONS::runSimulation );
|
||||
m_toolBar->Add( EE_ACTIONS::stopSimulation );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::simProbe )
|
||||
.AppendAction( EE_ACTIONS::simTune );
|
||||
|
||||
m_toolBar->AddScaledSeparator( this );
|
||||
m_toolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_toolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_toolBar->Add( ACTIONS::zoomInHorizontally );
|
||||
m_toolBar->Add( ACTIONS::zoomOutHorizontally );
|
||||
m_toolBar->Add( ACTIONS::zoomInVertically );
|
||||
m_toolBar->Add( ACTIONS::zoomOutVertically );
|
||||
m_toolBar->Add( ACTIONS::zoomFitScreen );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::editUserDefinedSignals )
|
||||
.AppendAction( EE_ACTIONS::showNetlist );
|
||||
|
||||
m_toolBar->AddScaledSeparator( this );
|
||||
m_toolBar->Add( EE_ACTIONS::simProbe );
|
||||
m_toolBar->Add( EE_ACTIONS::simTune );
|
||||
|
||||
m_toolBar->AddScaledSeparator( this );
|
||||
m_toolBar->Add( EE_ACTIONS::editUserDefinedSignals );
|
||||
m_toolBar->Add( EE_ACTIONS::showNetlist );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_toolBar->KiRealize();
|
||||
|
||||
m_toolBar->Refresh();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
|
@ -143,7 +143,7 @@ SYMBOL_DIFF_FRAME::SYMBOL_DIFF_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T
|
||||
CreateInfoBar();
|
||||
|
||||
// Manage main toolbar
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ) .Bottom().Layer(6) );
|
||||
|
||||
m_auimgr.AddPane( libPanel, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(2)
|
||||
|
@ -61,7 +61,7 @@ public:
|
||||
void doCloseWindow() override;
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override {}
|
||||
void ReCreateLeftToolbar() override {}
|
||||
|
||||
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
|
@ -179,9 +179,8 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
setupUIConditions();
|
||||
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
UpdateTitle();
|
||||
UpdateSymbolMsgPanelInfo();
|
||||
@ -197,7 +196,7 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
CreateInfoBar();
|
||||
|
||||
// Rows; layers 4 - 6
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" )
|
||||
.Top().Layer( 6 ) );
|
||||
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" )
|
||||
@ -223,10 +222,10 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
propertiesPaneInfo.Show( m_settings->m_AuiPanels.show_properties );
|
||||
updateSelectionFilterVisbility();
|
||||
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" )
|
||||
.Left().Layer( 2 ) );
|
||||
|
||||
m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( "ToolsToolbar" )
|
||||
m_auimgr.AddPane( m_tbRight, EDA_PANE().VToolbar().Name( "RightToolbar" )
|
||||
.Right().Layer( 2 ) );
|
||||
|
||||
// Center
|
||||
@ -725,6 +724,32 @@ void SYMBOL_EDIT_FRAME::RebuildSymbolUnitsList()
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::ToggleProperties()
|
||||
{
|
||||
if( !m_propertiesPanel )
|
||||
return;
|
||||
|
||||
bool show = !m_propertiesPanel->IsShownOnScreen();
|
||||
|
||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||
propertiesPaneInfo.Show( show );
|
||||
updateSelectionFilterVisbility();
|
||||
|
||||
if( show )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, propertiesPaneInfo,
|
||||
m_settings->m_AuiPanels.properties_panel_width, -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settings->m_AuiPanels.properties_panel_width = m_propertiesPanel->GetSize().x;
|
||||
}
|
||||
|
||||
m_auimgr.Update();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::ToggleLibraryTree()
|
||||
{
|
||||
wxAuiPaneInfo& treePane = m_auimgr.GetPane( m_treePane );
|
||||
@ -1800,7 +1825,7 @@ void SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic( SCH_SYMBOL* aSymbol )
|
||||
setSymWatcher( nullptr );
|
||||
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
RecreateToolbars();
|
||||
|
||||
if( IsLibraryTreeShown() )
|
||||
ToggleLibraryTree();
|
||||
|
@ -198,9 +198,11 @@ public:
|
||||
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
|
||||
void doCloseWindow() override;
|
||||
void OnExitKiCad( wxCommandEvent& event );
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override;
|
||||
|
||||
// Currently no top auxillary toolbar
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultRightToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
@ -406,6 +408,7 @@ public:
|
||||
void emptyScreen();
|
||||
|
||||
protected:
|
||||
void configureToolbars() override;
|
||||
void setupUIConditions() override;
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
|
@ -303,7 +303,7 @@ bool SYMBOL_EDIT_FRAME::LoadOneLibrarySymbolAux( LIB_SYMBOL* aEntry, const wxStr
|
||||
if( rebuildMenuAndToolbar )
|
||||
{
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
RecreateToolbars();
|
||||
GetInfoBar()->Dismiss();
|
||||
}
|
||||
|
||||
|
@ -44,174 +44,141 @@
|
||||
#endif
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::ReCreateVToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> SYMBOL_EDIT_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
if( m_drawToolBar )
|
||||
{
|
||||
m_drawToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_drawToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// Set up toolbar
|
||||
// clang-format off
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool );
|
||||
config.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::toggleGridOverrides )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSymbolPin );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSymbolText );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawSymbolTextBox );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawRectangle );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawCircle );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawArc );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawBezier );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawSymbolLines );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawSymbolPolygon );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSymbolAnchor );
|
||||
m_drawToolBar->Add( ACTIONS::deleteTool);
|
||||
// clang-format on
|
||||
|
||||
m_drawToolBar->Realize();
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::ReCreateHToolbar()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
// Set up toolbar
|
||||
m_mainToolBar->Add( EE_ACTIONS::newSymbol );
|
||||
|
||||
if( !IsSymbolFromSchematic() )
|
||||
m_mainToolBar->Add( ACTIONS::saveAll );
|
||||
else
|
||||
m_mainToolBar->Add( ACTIONS::save );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::undo );
|
||||
m_mainToolBar->Add( ACTIONS::redo );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::rotateCCW );
|
||||
m_mainToolBar->Add( EE_ACTIONS::rotateCW );
|
||||
m_mainToolBar->Add( EE_ACTIONS::mirrorV );
|
||||
m_mainToolBar->Add( EE_ACTIONS::mirrorH );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::symbolProperties );
|
||||
m_mainToolBar->Add( EE_ACTIONS::pinTable );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::showDatasheet );
|
||||
m_mainToolBar->Add( EE_ACTIONS::checkSymbol );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showDeMorganStandard );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showDeMorganAlternate );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( m_unitSelectBox == nullptr )
|
||||
m_unitSelectBox = new wxComboBox( m_mainToolBar, ID_LIBEDIT_SELECT_UNIT_NUMBER,
|
||||
wxEmptyString, wxDefaultPosition, wxSize( LISTBOX_WIDTH, -1 ), 0,
|
||||
nullptr, wxCB_READONLY );
|
||||
m_mainToolBar->AddControl( m_unitSelectBox );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::toggleSyncedPinsMode );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::addSymbolToSchematic );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->Realize();
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::ReCreateOptToolbar()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGridOverrides );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::showElectricalTypes );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::showHiddenPins );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::showHiddenFields );
|
||||
// m_optionsToolBar->Add( EE_ACTIONS::togglePinAltIcons );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::showElectricalTypes )
|
||||
.AppendAction( EE_ACTIONS::showHiddenPins )
|
||||
.AppendAction( EE_ACTIONS::showHiddenFields );
|
||||
// .AppendAction( EE_ACTIONS::togglePinAltIcons );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
|
||||
m_optionsToolBar->Add( ACTIONS::toggleBoundingBoxes );
|
||||
config.AppendAction( ACTIONS::toggleBoundingBoxes );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( ACTIONS::showLibraryTree );
|
||||
m_optionsToolBar->Add( ACTIONS::showProperties );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showLibraryTree )
|
||||
.AppendAction( ACTIONS::showProperties );
|
||||
|
||||
/* TODO: Implement context menus
|
||||
EE_SELECTION_TOOL* selTool = m_toolManager->GetTool<EE_SELECTION_TOOL>();
|
||||
std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
gridMenu->Add( ACTIONS::gridProperties );
|
||||
m_optionsToolBar->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
m_tbLeft->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
*/
|
||||
|
||||
m_optionsToolBar->Realize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::ToggleProperties()
|
||||
std::optional<TOOLBAR_CONFIGURATION> SYMBOL_EDIT_FRAME::DefaultRightToolbarConfig()
|
||||
{
|
||||
if( !m_propertiesPanel )
|
||||
return;
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
bool show = !m_propertiesPanel->IsShownOnScreen();
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::selectionTool );
|
||||
|
||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||
propertiesPaneInfo.Show( show );
|
||||
updateSelectionFilterVisbility();
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::placeSymbolPin )
|
||||
.AppendAction( EE_ACTIONS::placeSymbolText )
|
||||
.AppendAction( EE_ACTIONS::drawSymbolTextBox )
|
||||
.AppendAction( EE_ACTIONS::drawRectangle )
|
||||
.AppendAction( EE_ACTIONS::drawCircle )
|
||||
.AppendAction( EE_ACTIONS::drawArc )
|
||||
.AppendAction( EE_ACTIONS::drawBezier )
|
||||
.AppendAction( EE_ACTIONS::drawSymbolLines )
|
||||
.AppendAction( EE_ACTIONS::drawSymbolPolygon )
|
||||
.AppendAction( EE_ACTIONS::placeSymbolAnchor )
|
||||
.AppendAction( ACTIONS::deleteTool);
|
||||
|
||||
if( show )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, propertiesPaneInfo,
|
||||
m_settings->m_AuiPanels.properties_panel_width, -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settings->m_AuiPanels.properties_panel_width = m_propertiesPanel->GetSize().x;
|
||||
}
|
||||
|
||||
m_auimgr.Update();
|
||||
Refresh();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> SYMBOL_EDIT_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendAction( EE_ACTIONS::newSymbol );
|
||||
|
||||
if( !IsSymbolFromSchematic() )
|
||||
config.AppendAction( ACTIONS::saveAll );
|
||||
else
|
||||
config.AppendAction( ACTIONS::save );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::undo )
|
||||
.AppendAction( ACTIONS::redo );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::rotateCCW )
|
||||
.AppendAction( EE_ACTIONS::rotateCW )
|
||||
.AppendAction( EE_ACTIONS::mirrorV )
|
||||
.AppendAction( EE_ACTIONS::mirrorH );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::symbolProperties )
|
||||
.AppendAction( EE_ACTIONS::pinTable );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showDatasheet )
|
||||
.AppendAction( EE_ACTIONS::checkSymbol );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::showDeMorganStandard )
|
||||
.AppendAction( EE_ACTIONS::showDeMorganAlternate );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( "control.SymEditUnitSelector" );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::toggleSyncedPinsMode );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::addSymbolToSchematic );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::configureToolbars()
|
||||
{
|
||||
SCH_BASE_FRAME::configureToolbars();
|
||||
|
||||
auto unitDisplayFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_unitSelectBox )
|
||||
{
|
||||
m_unitSelectBox = new wxComboBox( aToolbar, ID_LIBEDIT_SELECT_UNIT_NUMBER,
|
||||
wxEmptyString, wxDefaultPosition,
|
||||
wxSize( LISTBOX_WIDTH, -1 ), 0,
|
||||
nullptr, wxCB_READONLY );
|
||||
}
|
||||
|
||||
aToolbar->Add( m_unitSelectBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory("control.SymEditUnitSelector", _( "Unit number display" ),
|
||||
_( "Displays the unit being currently edited" ),
|
||||
unitDisplayFactory );
|
||||
}
|
||||
|
@ -142,8 +142,9 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
ReCreateMenuBar();
|
||||
|
||||
wxPanel* libPanel = new wxPanel( this );
|
||||
@ -200,7 +201,7 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
CreateInfoBar();
|
||||
|
||||
// Manage main toolbar
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ) .Bottom().Layer(6) );
|
||||
|
||||
m_auimgr.AddPane( libPanel, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(2)
|
||||
|
@ -76,8 +76,9 @@ public:
|
||||
void DisplayLibInfos();
|
||||
void doCloseWindow() override;
|
||||
void CloseLibraryViewer( wxCommandEvent& event );
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
|
||||
// Only top main toolbar
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
void ClickOnLibList( wxCommandEvent& event );
|
||||
void ClickOnSymbolList( wxCommandEvent& event );
|
||||
@ -120,6 +121,8 @@ public:
|
||||
void KiwayMailIn( KIWAY_EXPRESS& mail ) override;
|
||||
|
||||
protected:
|
||||
void configureToolbars() override;
|
||||
|
||||
void setupUIConditions() override;
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
|
@ -43,358 +43,195 @@
|
||||
#include <widgets/sch_properties_panel.h>
|
||||
#include <widgets/sch_search_pane.h>
|
||||
|
||||
/* Create the main Horizontal Toolbar for the schematic editor
|
||||
*/
|
||||
void SCH_EDIT_FRAME::ReCreateHToolbar()
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> SCH_EDIT_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// Set up toolbar
|
||||
if( Kiface().IsSingle() ) // not when under a project mgr
|
||||
{
|
||||
m_mainToolBar->Add( ACTIONS::doNew );
|
||||
m_mainToolBar->Add( ACTIONS::open );
|
||||
}
|
||||
|
||||
m_mainToolBar->Add( ACTIONS::save );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::schematicSetup );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::pageSettings );
|
||||
m_mainToolBar->Add( ACTIONS::print );
|
||||
m_mainToolBar->Add( ACTIONS::plot );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::paste );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::undo );
|
||||
m_mainToolBar->Add( ACTIONS::redo );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::find );
|
||||
m_mainToolBar->Add( ACTIONS::findAndReplace );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitObjects );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::navigateBack );
|
||||
m_mainToolBar->Add( EE_ACTIONS::navigateUp );
|
||||
m_mainToolBar->Add( EE_ACTIONS::navigateForward );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::rotateCCW );
|
||||
m_mainToolBar->Add( EE_ACTIONS::rotateCW );
|
||||
m_mainToolBar->Add( EE_ACTIONS::mirrorV );
|
||||
m_mainToolBar->Add( EE_ACTIONS::mirrorH );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::showSymbolEditor );
|
||||
m_mainToolBar->Add( ACTIONS::showSymbolBrowser );
|
||||
m_mainToolBar->Add( ACTIONS::showFootprintEditor );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::annotate );
|
||||
m_mainToolBar->Add( EE_ACTIONS::runERC );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showSimulator );
|
||||
m_mainToolBar->Add( EE_ACTIONS::assignFootprints );
|
||||
m_mainToolBar->Add( EE_ACTIONS::editSymbolFields );
|
||||
m_mainToolBar->Add( EE_ACTIONS::generateBOM );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showPcbNew );
|
||||
|
||||
// Add scripting console and API plugins
|
||||
bool scriptingAvailable = SCRIPTING::IsWxAvailable();
|
||||
|
||||
#ifdef KICAD_IPC_API
|
||||
bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server &&
|
||||
!Pgm().GetPluginManager().GetActionsForScope( PLUGIN_ACTION_SCOPE::SCHEMATIC ).empty();
|
||||
#else
|
||||
bool haveApiPlugins = false;
|
||||
#endif
|
||||
|
||||
if( scriptingAvailable || haveApiPlugins )
|
||||
{
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( haveApiPlugins )
|
||||
addApiPluginTools();
|
||||
}
|
||||
|
||||
// after adding the tools to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ReCreateVToolbar()
|
||||
{
|
||||
if( m_drawToolBar )
|
||||
{
|
||||
m_drawToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_drawToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
// Set up toolbar
|
||||
// clang-format off
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool );
|
||||
m_drawToolBar->Add( EE_ACTIONS::highlightNetTool );
|
||||
config.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::toggleGridOverrides )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSymbol );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placePower );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawWire );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawBus );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeBusWireEntry );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeNoConnect );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeJunction );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeLabel );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeClassLabel );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawRuleArea );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeGlobalLabel );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeHierLabel );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawSheet );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSheetPin );
|
||||
m_drawToolBar->Add( EE_ACTIONS::syncAllSheetsPins );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::toggleHiddenPins );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSchematicText );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawTextBox );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawTable );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawRectangle );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawCircle );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawArc );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawBezier );
|
||||
m_drawToolBar->Add( EE_ACTIONS::drawLines );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeImage );
|
||||
m_drawToolBar->Add( ACTIONS::deleteTool );
|
||||
// clang-format on
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::lineModeFree )
|
||||
.AppendAction( EE_ACTIONS::lineMode90 )
|
||||
.AppendAction( EE_ACTIONS::lineMode45 );
|
||||
|
||||
m_drawToolBar->KiRealize();
|
||||
}
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::toggleAnnotateAuto );
|
||||
|
||||
|
||||
/* Create Vertical Left Toolbar (Option Toolbar)
|
||||
*/
|
||||
void SCH_EDIT_FRAME::ReCreateOptToolbar()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGridOverrides );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::toggleHiddenPins );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::lineModeFree );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::lineMode90 );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::lineMode45 );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::toggleAnnotateAuto );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( EE_ACTIONS::showHierarchy );
|
||||
m_optionsToolBar->Add( ACTIONS::showProperties );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::showHierarchy )
|
||||
.AppendAction( ACTIONS::showProperties );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
|
||||
m_optionsToolBar->Add( ACTIONS::toggleBoundingBoxes );
|
||||
config.AppendAction( ACTIONS::toggleBoundingBoxes );
|
||||
|
||||
/* TODO (ISM): Handle context menus
|
||||
EE_SELECTION_TOOL* selTool = m_toolManager->GetTool<EE_SELECTION_TOOL>();
|
||||
std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
gridMenu->Add( ACTIONS::gridProperties );
|
||||
m_optionsToolBar->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
m_tbLeft->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
*/
|
||||
|
||||
m_optionsToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleSearch()
|
||||
std::optional<TOOLBAR_CONFIGURATION> SCH_EDIT_FRAME::DefaultRightToolbarConfig()
|
||||
{
|
||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// Ensure m_show_search is up to date (the pane can be closed outside the menu)
|
||||
m_show_search = m_auimgr.GetPane( SearchPaneName() ).IsShown();
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::selectionTool )
|
||||
.AppendAction( EE_ACTIONS::highlightNetTool );
|
||||
|
||||
m_show_search = !m_show_search;
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::placeSymbol )
|
||||
.AppendAction( EE_ACTIONS::placePower )
|
||||
.AppendAction( EE_ACTIONS::drawWire )
|
||||
.AppendAction( EE_ACTIONS::drawBus )
|
||||
.AppendAction( EE_ACTIONS::placeBusWireEntry )
|
||||
.AppendAction( EE_ACTIONS::placeNoConnect )
|
||||
.AppendAction( EE_ACTIONS::placeJunction )
|
||||
.AppendAction( EE_ACTIONS::placeLabel )
|
||||
.AppendAction( EE_ACTIONS::placeClassLabel )
|
||||
.AppendAction( EE_ACTIONS::drawRuleArea )
|
||||
.AppendAction( EE_ACTIONS::placeGlobalLabel )
|
||||
.AppendAction( EE_ACTIONS::placeHierLabel )
|
||||
.AppendAction( EE_ACTIONS::drawSheet )
|
||||
.AppendAction( EE_ACTIONS::placeSheetPin )
|
||||
.AppendAction( EE_ACTIONS::syncAllSheetsPins );
|
||||
|
||||
wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() );
|
||||
searchPaneInfo.Show( m_show_search );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::placeSchematicText )
|
||||
.AppendAction( EE_ACTIONS::drawTextBox )
|
||||
.AppendAction( EE_ACTIONS::drawTable )
|
||||
.AppendAction( EE_ACTIONS::drawRectangle )
|
||||
.AppendAction( EE_ACTIONS::drawCircle )
|
||||
.AppendAction( EE_ACTIONS::drawArc )
|
||||
.AppendAction( EE_ACTIONS::drawBezier )
|
||||
.AppendAction( EE_ACTIONS::drawLines )
|
||||
.AppendAction( EE_ACTIONS::placeImage )
|
||||
.AppendAction( ACTIONS::deleteTool );
|
||||
|
||||
if( m_show_search )
|
||||
{
|
||||
searchPaneInfo.Direction( cfg->m_AuiPanels.search_panel_dock_direction );
|
||||
|
||||
if( cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_TOP
|
||||
|| cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_BOTTOM )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, searchPaneInfo, -1, cfg->m_AuiPanels.search_panel_height );
|
||||
}
|
||||
else if( cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_LEFT
|
||||
|| cfg->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_RIGHT )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, searchPaneInfo, cfg->m_AuiPanels.search_panel_width, -1 );
|
||||
}
|
||||
|
||||
m_searchPane->FocusSearch();
|
||||
}
|
||||
else
|
||||
{
|
||||
cfg->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y;
|
||||
cfg->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x;
|
||||
cfg->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction;
|
||||
m_auimgr.Update();
|
||||
}
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleProperties()
|
||||
std::optional<TOOLBAR_CONFIGURATION> SCH_EDIT_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( !m_propertiesPanel )
|
||||
return;
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
bool show = !m_propertiesPanel->IsShownOnScreen();
|
||||
|
||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||
propertiesPaneInfo.Show( show );
|
||||
|
||||
updateSelectionFilterVisbility();
|
||||
|
||||
EESCHEMA_SETTINGS* settings = eeconfig();
|
||||
|
||||
if( show )
|
||||
// clang-format off
|
||||
if( Kiface().IsSingle() ) // not when under a project mgr
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, propertiesPaneInfo,
|
||||
settings->m_AuiPanels.properties_panel_width, -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
settings->m_AuiPanels.properties_panel_width = m_propertiesPanel->GetSize().x;
|
||||
m_auimgr.Update();
|
||||
config.AppendAction( ACTIONS::doNew );
|
||||
config.AppendAction( ACTIONS::open );
|
||||
}
|
||||
|
||||
config.AppendAction( ACTIONS::save );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::schematicSetup );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::pageSettings )
|
||||
.AppendAction( ACTIONS::print )
|
||||
.AppendAction( ACTIONS::plot );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::paste );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::undo )
|
||||
.AppendAction( ACTIONS::redo );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::find )
|
||||
.AppendAction( ACTIONS::findAndReplace );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomFitObjects )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::navigateBack )
|
||||
.AppendAction( EE_ACTIONS::navigateUp )
|
||||
.AppendAction( EE_ACTIONS::navigateForward );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::rotateCCW )
|
||||
.AppendAction( EE_ACTIONS::rotateCW )
|
||||
.AppendAction( EE_ACTIONS::mirrorV )
|
||||
.AppendAction( EE_ACTIONS::mirrorH );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showSymbolEditor )
|
||||
.AppendAction( ACTIONS::showSymbolBrowser )
|
||||
.AppendAction( ACTIONS::showFootprintEditor );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::annotate )
|
||||
.AppendAction( EE_ACTIONS::runERC )
|
||||
.AppendAction( EE_ACTIONS::showSimulator )
|
||||
.AppendAction( EE_ACTIONS::assignFootprints )
|
||||
.AppendAction( EE_ACTIONS::editSymbolFields )
|
||||
.AppendAction( EE_ACTIONS::generateBOM );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::showPcbNew );
|
||||
|
||||
// Insert all the IPC plugins here on the toolbar
|
||||
config.AppendControl( "control.SCHPlugin" );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleSchematicHierarchy()
|
||||
void SCH_EDIT_FRAME::configureToolbars()
|
||||
{
|
||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||
SCH_BASE_FRAME::configureToolbars();
|
||||
|
||||
wxCHECK( cfg, /* void */ );
|
||||
|
||||
wxAuiPaneInfo& hierarchy_pane = m_auimgr.GetPane( SchematicHierarchyPaneName() );
|
||||
|
||||
hierarchy_pane.Show( !hierarchy_pane.IsShown() );
|
||||
|
||||
updateSelectionFilterVisbility();
|
||||
|
||||
if( hierarchy_pane.IsShown() )
|
||||
{
|
||||
if( hierarchy_pane.IsFloating() )
|
||||
// IPC/Scripting plugin control
|
||||
// TODO (ISM): Clean this up to make IPC actions just normal tool actions to get rid of this entire
|
||||
// control
|
||||
auto pluginControlFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
hierarchy_pane.FloatingSize( cfg->m_AuiPanels.hierarchy_panel_float_width,
|
||||
cfg->m_AuiPanels.hierarchy_panel_float_height );
|
||||
m_auimgr.Update();
|
||||
}
|
||||
else if( cfg->m_AuiPanels.hierarchy_panel_docked_width > 0 )
|
||||
{
|
||||
// SetAuiPaneSize also updates m_auimgr
|
||||
SetAuiPaneSize( m_auimgr, hierarchy_pane,
|
||||
cfg->m_AuiPanels.hierarchy_panel_docked_width, -1 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( hierarchy_pane.IsFloating() )
|
||||
{
|
||||
cfg->m_AuiPanels.hierarchy_panel_float_width = hierarchy_pane.floating_size.x;
|
||||
cfg->m_AuiPanels.hierarchy_panel_float_height = hierarchy_pane.floating_size.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
cfg->m_AuiPanels.hierarchy_panel_docked_width = m_hierarchy->GetSize().x;
|
||||
}
|
||||
// Add scripting console and API plugins
|
||||
bool scriptingAvailable = SCRIPTING::IsWxAvailable();
|
||||
|
||||
m_auimgr.Update();
|
||||
}
|
||||
}
|
||||
#ifdef KICAD_IPC_API
|
||||
bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server &&
|
||||
!Pgm().GetPluginManager().GetActionsForScope( PluginActionScope() ).empty();
|
||||
#else
|
||||
bool haveApiPlugins = false;
|
||||
#endif
|
||||
|
||||
if( scriptingAvailable || haveApiPlugins )
|
||||
{
|
||||
aToolbar->AddScaledSeparator( aToolbar->GetParent() );
|
||||
|
||||
void SCH_EDIT_FRAME::ToggleLibraryTree()
|
||||
{
|
||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||
if( haveApiPlugins )
|
||||
AddApiPluginTools( aToolbar );
|
||||
}
|
||||
};
|
||||
|
||||
wxCHECK( cfg, /* void */ );
|
||||
RegisterCustomToolbarControlFactory( "control.SCHPlugin", _( "IPC/Scripting plugins" ),
|
||||
_( "Region to hold the IPC/Scripting action buttons" ),
|
||||
pluginControlFactory );
|
||||
|
||||
wxAuiPaneInfo& db_library_pane = m_auimgr.GetPane( DesignBlocksPaneName() );
|
||||
|
||||
db_library_pane.Show( !db_library_pane.IsShown() );
|
||||
|
||||
if( db_library_pane.IsShown() )
|
||||
{
|
||||
if( db_library_pane.IsFloating() )
|
||||
{
|
||||
db_library_pane.FloatingSize( cfg->m_AuiPanels.design_blocks_panel_float_width,
|
||||
cfg->m_AuiPanels.design_blocks_panel_float_height );
|
||||
m_auimgr.Update();
|
||||
}
|
||||
else if( cfg->m_AuiPanels.design_blocks_panel_docked_width > 0 )
|
||||
{
|
||||
// SetAuiPaneSize also updates m_auimgr
|
||||
SetAuiPaneSize( m_auimgr, db_library_pane,
|
||||
cfg->m_AuiPanels.design_blocks_panel_docked_width, -1 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( db_library_pane.IsFloating() )
|
||||
{
|
||||
cfg->m_AuiPanels.design_blocks_panel_float_width = db_library_pane.floating_size.x;
|
||||
cfg->m_AuiPanels.design_blocks_panel_float_height = db_library_pane.floating_size.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
cfg->m_AuiPanels.design_blocks_panel_docked_width = m_designBlocksPane->GetSize().x;
|
||||
}
|
||||
|
||||
m_auimgr.Update();
|
||||
}
|
||||
}
|
||||
}
|
@ -33,64 +33,68 @@
|
||||
#include <widgets/wx_menubar.h>
|
||||
|
||||
|
||||
void SYMBOL_VIEWER_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> SYMBOL_VIEWER_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
m_mainToolBar->AddTool( ID_LIBVIEW_PREVIOUS, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_previous, this ),
|
||||
_( "Display previous symbol" ) );
|
||||
// clang-format off
|
||||
/* TODO: Move these to actions
|
||||
m_tbTopMain->AddTool( ID_LIBVIEW_PREVIOUS, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_previous, this ),
|
||||
_( "Display previous symbol" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_LIBVIEW_NEXT, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_next, this ),
|
||||
_( "Display next symbol" ) );
|
||||
m_tbTopMain->AddTool( ID_LIBVIEW_NEXT, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_next, this ),
|
||||
_( "Display next symbol" ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showElectricalTypes );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showPinNumbers );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::showElectricalTypes )
|
||||
.AppendAction( EE_ACTIONS::showPinNumbers );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showDeMorganStandard );
|
||||
m_mainToolBar->Add( EE_ACTIONS::showDeMorganAlternate );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::showDeMorganStandard )
|
||||
.AppendAction( EE_ACTIONS::showDeMorganAlternate );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( "control.SymViewUnitSelector" );
|
||||
|
||||
if( m_unitChoice == nullptr )
|
||||
m_unitChoice = new wxChoice( m_mainToolBar, ID_LIBVIEW_SELECT_UNIT_NUMBER,
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
m_mainToolBar->AddControl( m_unitChoice );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showDatasheet );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::showDatasheet );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( EE_ACTIONS::addSymbolToSchematic );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( EE_ACTIONS::addSymbolToSchematic );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
|
||||
m_mainToolBar->Refresh();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_VIEWER_FRAME::ReCreateVToolbar()
|
||||
void SYMBOL_VIEWER_FRAME::configureToolbars()
|
||||
{
|
||||
SCH_BASE_FRAME::configureToolbars();
|
||||
|
||||
// Toolbar widget for selecting the unit to show in the symbol viewer
|
||||
auto unitChoiceFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_unitChoice )
|
||||
{
|
||||
m_unitChoice = new wxChoice( m_tbTopMain, ID_LIBVIEW_SELECT_UNIT_NUMBER,
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
}
|
||||
|
||||
aToolbar->Add( m_unitChoice );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory("control.SymViewUnitSelector", _( "Symbol unit selector" ),
|
||||
_( "Displays the unit being currently edited" ),
|
||||
unitChoiceFactory );
|
||||
}
|
||||
|
||||
|
||||
|
@ -75,8 +75,6 @@ BEGIN_EVENT_TABLE( GERBVIEW_FRAME, EDA_DRAW_FRAME )
|
||||
|
||||
EVT_UPDATE_UI( ID_ON_GRID_SELECT, GERBVIEW_FRAME::OnUpdateSelectGrid )
|
||||
EVT_UPDATE_UI( ID_TOOLBARH_GERBER_SELECT_ACTIVE_DCODE, GERBVIEW_FRAME::OnUpdateSelectDCode )
|
||||
EVT_UPDATE_UI( ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER,
|
||||
GERBVIEW_FRAME::OnUpdateLayerSelectBox )
|
||||
|
||||
// Drop files event
|
||||
EVT_DROP_FILES( GERBVIEW_FRAME::OnDropFiles )
|
||||
|
@ -148,18 +148,18 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateOptToolbar();
|
||||
ReCreateAuxiliaryToolbar();
|
||||
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_auxiliaryToolBar, EDA_PANE().HToolbar().Name( "AuxToolbar" ).Top()
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_tbTopAux, EDA_PANE().HToolbar().Name( "TopAuxToolbar" ).Top()
|
||||
.Layer(4) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom()
|
||||
.Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" ).Left()
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" ).Left()
|
||||
.Layer( 3 ) );
|
||||
m_auimgr.AddPane( m_LayersManager, EDA_PANE().Palette().Name( "LayersManager" ).Right()
|
||||
.Layer( 3 ).Caption( _( "Layers Manager" ) ).PaneBorder( false )
|
||||
@ -404,7 +404,10 @@ void GERBVIEW_FRAME::ReFillLayerWidget()
|
||||
|
||||
m_LayersManager->ReFill();
|
||||
m_SelLayerBox->Resync();
|
||||
ReCreateAuxiliaryToolbar();
|
||||
|
||||
// Re-build the various boxes in the toolbars
|
||||
// TODO: Could this be made more precise instead of just blowing away all the toolbars?
|
||||
RecreateToolbars();
|
||||
|
||||
wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_LayersManager );
|
||||
wxSize bestz = m_LayersManager->GetBestSize();
|
||||
@ -1070,7 +1073,7 @@ void GERBVIEW_FRAME::ActivateGalCanvas()
|
||||
m_LayersManager->ReFill();
|
||||
m_LayersManager->ReFillRender();
|
||||
|
||||
ReCreateOptToolbar();
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
|
||||
try
|
||||
|
@ -76,22 +76,12 @@ public:
|
||||
bool LoadListOfGerberAndDrillFiles( const wxString& aPath, const wxArrayString& aFilenameList,
|
||||
std::vector<int>* aFileType );
|
||||
|
||||
// Virtual basic functions:
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateAuxiliaryToolbar() override;
|
||||
|
||||
/**
|
||||
* Create or update the right vertical toolbar.
|
||||
*/
|
||||
void ReCreateVToolbar() override;
|
||||
|
||||
/**
|
||||
* Create or update the left vertical toolbar (option toolbar)
|
||||
*/
|
||||
void ReCreateOptToolbar() override;
|
||||
// No right toolbar in gerbview
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopAuxToolbarConfig() override;
|
||||
|
||||
void UpdateStatusBar() override;
|
||||
void UpdateToolbarControlSizes() override;
|
||||
|
||||
GERBVIEW_SETTINGS* gvconfig() const;
|
||||
|
||||
@ -239,7 +229,6 @@ public:
|
||||
void OnQuit( wxCommandEvent& event );
|
||||
|
||||
void OnUpdateSelectDCode( wxUpdateUIEvent& aEvent );
|
||||
void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
|
||||
|
||||
/**
|
||||
* Delete the current data and loads a Gerber file selected from history list on current layer.
|
||||
@ -456,6 +445,7 @@ public:
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
protected:
|
||||
void configureToolbars() override;
|
||||
void setupUIConditions() override;
|
||||
void doReCreateMenuBar() override;
|
||||
|
||||
|
@ -36,256 +36,243 @@
|
||||
#include "widgets/dcode_selection_box.h"
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> GERBVIEW_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
// Note:
|
||||
// To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
|
||||
// all wxAuiToolBarItems.
|
||||
// However the wxAuiToolBarItems are not the owners of controls managed by
|
||||
// them ( m_TextInfo and m_SelLayerBox ), and therefore do not delete them
|
||||
// So we do not recreate them after clearing the tools.
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::selectionTool )
|
||||
.AppendAction( ACTIONS::measureTool );
|
||||
|
||||
// Set up toolbar
|
||||
m_mainToolBar->Add( GERBVIEW_ACTIONS::clearAllLayers );
|
||||
m_mainToolBar->Add( GERBVIEW_ACTIONS::reloadAllLayers );
|
||||
m_mainToolBar->Add( GERBVIEW_ACTIONS::openAutodetected );
|
||||
m_mainToolBar->Add( GERBVIEW_ACTIONS::openGerber );
|
||||
m_mainToolBar->Add( GERBVIEW_ACTIONS::openDrillFile );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::togglePolarCoords )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::print );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( GERBVIEW_ACTIONS::flashedDisplayOutlines )
|
||||
.AppendAction( GERBVIEW_ACTIONS::linesDisplayOutlines )
|
||||
.AppendAction( GERBVIEW_ACTIONS::polygonsDisplayOutlines )
|
||||
.AppendAction( GERBVIEW_ACTIONS::negativeObjectDisplay )
|
||||
.AppendAction( GERBVIEW_ACTIONS::dcodeDisplay );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( GERBVIEW_ACTIONS::toggleForceOpacityMode )
|
||||
.AppendAction( GERBVIEW_ACTIONS::toggleXORMode )
|
||||
.AppendAction( ACTIONS::highContrastMode )
|
||||
.AppendAction( GERBVIEW_ACTIONS::flipGerberView );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( GERBVIEW_ACTIONS::toggleLayerManager );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( !m_SelLayerBox )
|
||||
{
|
||||
m_SelLayerBox = new GBR_LAYER_BOX_SELECTOR( m_mainToolBar,
|
||||
ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
m_SelLayerBox->Resync();
|
||||
m_mainToolBar->AddControl( m_SelLayerBox );
|
||||
|
||||
if( !m_TextInfo )
|
||||
{
|
||||
m_TextInfo = new wxTextCtrl( m_mainToolBar, ID_TOOLBARH_GERBER_DATA_TEXT_BOX, wxEmptyString,
|
||||
wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
|
||||
}
|
||||
|
||||
m_mainToolBar->AddControl( m_TextInfo );
|
||||
|
||||
m_mainToolBar->UpdateControlWidth( ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER );
|
||||
m_mainToolBar->UpdateControlWidth( ID_TOOLBARH_GERBER_DATA_TEXT_BOX );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::ReCreateAuxiliaryToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> GERBVIEW_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendAction( GERBVIEW_ACTIONS::clearAllLayers )
|
||||
.AppendAction( GERBVIEW_ACTIONS::reloadAllLayers )
|
||||
.AppendAction( GERBVIEW_ACTIONS::openAutodetected )
|
||||
.AppendAction( GERBVIEW_ACTIONS::openGerber )
|
||||
.AppendAction( GERBVIEW_ACTIONS::openDrillFile );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::print );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( "control.GerberLayerBox" )
|
||||
.AppendControl( "control.GerberTextInfo" );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> GERBVIEW_FRAME::DefaultTopAuxToolbarConfig()
|
||||
{
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendControl( "control.GerberComponentHighlight" )
|
||||
.AppendSpacer( 5 )
|
||||
.AppendControl( "control.GerberNetHighlight" )
|
||||
.AppendSpacer( 5 )
|
||||
.AppendControl( "control.GerberAppertureHighlight" )
|
||||
.AppendSpacer( 5 )
|
||||
.AppendControl( "control.GerberDcodeSelector" )
|
||||
.AppendSeparator()
|
||||
.AppendControl( m_tbGridSelectName )
|
||||
.AppendSeparator()
|
||||
.AppendControl( m_tbZoomSelectName );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::configureToolbars()
|
||||
{
|
||||
// Base class loads the default settings
|
||||
EDA_DRAW_FRAME::configureToolbars();
|
||||
|
||||
// Register factories for the various toolbar controls
|
||||
auto layerBoxFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelLayerBox )
|
||||
{
|
||||
m_SelLayerBox = new GBR_LAYER_BOX_SELECTOR( aToolbar,
|
||||
ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
m_SelLayerBox->Resync();
|
||||
aToolbar->Add( m_SelLayerBox );
|
||||
|
||||
// UI update handler for the control
|
||||
aToolbar->Bind( wxEVT_UPDATE_UI,
|
||||
[this]( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
if( m_SelLayerBox->GetCount() )
|
||||
{
|
||||
if( m_SelLayerBox->GetSelection() != GetActiveLayer() )
|
||||
m_SelLayerBox->SetSelection( GetActiveLayer() );
|
||||
}
|
||||
},
|
||||
m_SelLayerBox->GetId() );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory("control.GerberLayerBox", _( "Layer selector widget" ),
|
||||
_( "Layer selection" ), layerBoxFactory );
|
||||
|
||||
|
||||
auto textInfoFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_TextInfo )
|
||||
{
|
||||
m_TextInfo = new wxTextCtrl( aToolbar, ID_TOOLBARH_GERBER_DATA_TEXT_BOX, wxEmptyString,
|
||||
wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
|
||||
}
|
||||
|
||||
aToolbar->Add( m_TextInfo );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory("control.GerberTextInfo", _( "Text info entry" ),
|
||||
_( "Text info entry" ), textInfoFactory );
|
||||
|
||||
if( m_auxiliaryToolBar )
|
||||
{
|
||||
m_auxiliaryToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_auxiliaryToolBar = new ACTION_TOOLBAR( this, ID_AUX_TOOLBAR, wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
m_auxiliaryToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
// Creates box to display and choose components:
|
||||
// (note, when the m_auxiliaryToolBar is recreated, tools are deleted, but controls
|
||||
// (note, when the m_tbTopAux is recreated, tools are deleted, but controls
|
||||
// are not deleted: they are just no longer managed by the toolbar
|
||||
if( !m_SelComponentBox )
|
||||
m_SelComponentBox = new wxChoice( m_auxiliaryToolBar, ID_GBR_AUX_TOOLBAR_PCB_CMP_CHOICE );
|
||||
auto componentBoxFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelComponentBox )
|
||||
m_SelComponentBox = new wxChoice( aToolbar, ID_GBR_AUX_TOOLBAR_PCB_CMP_CHOICE );
|
||||
|
||||
if( !m_cmpText )
|
||||
m_cmpText = new wxStaticText( m_auxiliaryToolBar, wxID_ANY, _( "Cmp:" ) + wxS( " " ) );
|
||||
if( !m_cmpText )
|
||||
m_cmpText = new wxStaticText( aToolbar, wxID_ANY, _( "Cmp:" ) + wxS( " " ) );
|
||||
|
||||
m_SelComponentBox->SetToolTip( _("Highlight items belonging to this component") );
|
||||
m_cmpText->SetLabel( _( "Cmp:" ) + wxS( " " ) ); // can change when changing the language
|
||||
|
||||
updateComponentListSelectBox();
|
||||
|
||||
aToolbar->Add( m_cmpText );
|
||||
aToolbar->Add( m_SelComponentBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.GerberComponentHighlight",
|
||||
_( "Component highlight" ),
|
||||
_( "Highlight items belonging to this component" ),
|
||||
componentBoxFactory );
|
||||
|
||||
m_SelComponentBox->SetToolTip( _("Highlight items belonging to this component") );
|
||||
m_cmpText->SetLabel( _( "Cmp:" ) + wxS( " " ) ); // can change when changing the language
|
||||
m_auxiliaryToolBar->AddControl( m_cmpText );
|
||||
m_auxiliaryToolBar->AddControl( m_SelComponentBox );
|
||||
m_auxiliaryToolBar->AddSpacer( 5 );
|
||||
|
||||
// Creates choice box to display net names and highlight selected:
|
||||
if( !m_SelNetnameBox )
|
||||
m_SelNetnameBox = new wxChoice( m_auxiliaryToolBar, ID_GBR_AUX_TOOLBAR_PCB_NET_CHOICE );
|
||||
auto netBoxFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelNetnameBox )
|
||||
m_SelNetnameBox = new wxChoice( aToolbar, ID_GBR_AUX_TOOLBAR_PCB_NET_CHOICE );
|
||||
|
||||
if( !m_netText )
|
||||
m_netText = new wxStaticText( m_auxiliaryToolBar, wxID_ANY, _( "Net:" ) );
|
||||
if( !m_netText )
|
||||
m_netText = new wxStaticText( aToolbar, wxID_ANY, _( "Net:" ) );
|
||||
|
||||
m_SelNetnameBox->SetToolTip( _("Highlight items belonging to this net") );
|
||||
m_netText->SetLabel( _( "Net:" ) ); // can change when changing the language
|
||||
|
||||
updateNetnameListSelectBox();
|
||||
|
||||
aToolbar->Add( m_netText );
|
||||
aToolbar->Add( m_SelNetnameBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.GerberNetHighlight", _( "Net highlight" ),
|
||||
_( "Highlight items belonging to this net" ), netBoxFactory );
|
||||
|
||||
m_SelNetnameBox->SetToolTip( _("Highlight items belonging to this net") );
|
||||
m_netText->SetLabel( _( "Net:" ) ); // can change when changing the language
|
||||
m_auxiliaryToolBar->AddControl( m_netText );
|
||||
m_auxiliaryToolBar->AddControl( m_SelNetnameBox );
|
||||
m_auxiliaryToolBar->AddSpacer( 5 );
|
||||
|
||||
// Creates choice box to display aperture attributes and highlight selected:
|
||||
if( !m_SelAperAttributesBox )
|
||||
auto appertureBoxFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelAperAttributesBox )
|
||||
{
|
||||
m_SelAperAttributesBox = new wxChoice( aToolbar,
|
||||
ID_GBR_AUX_TOOLBAR_PCB_APERATTRIBUTES_CHOICE );
|
||||
}
|
||||
|
||||
if( !m_apertText )
|
||||
m_apertText = new wxStaticText( aToolbar, wxID_ANY, _( "Attr:" ) );
|
||||
|
||||
m_SelAperAttributesBox->SetToolTip( _( "Highlight items with this aperture attribute" ) );
|
||||
m_apertText->SetLabel( _( "Attr:" ) ); // can change when changing the language
|
||||
|
||||
updateAperAttributesSelectBox();
|
||||
|
||||
aToolbar->Add( m_apertText );
|
||||
aToolbar->Add( m_SelAperAttributesBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.GerberAppertureHighlight", _( "Aperture highlight" ),
|
||||
_( "Highlight items with this aperture attribute" ),
|
||||
appertureBoxFactory );
|
||||
|
||||
|
||||
// D-code selection
|
||||
auto dcodeSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
m_SelAperAttributesBox = new wxChoice( m_auxiliaryToolBar,
|
||||
ID_GBR_AUX_TOOLBAR_PCB_APERATTRIBUTES_CHOICE );
|
||||
}
|
||||
if( !m_DCodeSelector )
|
||||
{
|
||||
m_DCodeSelector = new DCODE_SELECTION_BOX( aToolbar,
|
||||
ID_TOOLBARH_GERBER_SELECT_ACTIVE_DCODE,
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
}
|
||||
|
||||
if( !m_apertText )
|
||||
m_apertText = new wxStaticText( m_auxiliaryToolBar, wxID_ANY, _( "Attr:" ) );
|
||||
if( !m_dcodeText )
|
||||
m_dcodeText = new wxStaticText( aToolbar, wxID_ANY, _( "DCode:" ) );
|
||||
|
||||
m_SelAperAttributesBox->SetToolTip( _( "Highlight items with this aperture attribute" ) );
|
||||
m_apertText->SetLabel( _( "Attr:" ) ); // can change when changing the language
|
||||
m_auxiliaryToolBar->AddControl( m_apertText );
|
||||
m_auxiliaryToolBar->AddControl( m_SelAperAttributesBox );
|
||||
m_auxiliaryToolBar->AddSpacer( 5 );
|
||||
m_dcodeText->SetLabel( _( "DCode:" ) );
|
||||
|
||||
if( !m_DCodeSelector )
|
||||
{
|
||||
m_DCodeSelector = new DCODE_SELECTION_BOX( m_auxiliaryToolBar,
|
||||
ID_TOOLBARH_GERBER_SELECT_ACTIVE_DCODE,
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
}
|
||||
updateDCodeSelectBox();
|
||||
|
||||
if( !m_dcodeText )
|
||||
m_dcodeText = new wxStaticText( m_auxiliaryToolBar, wxID_ANY, _( "DCode:" ) );
|
||||
aToolbar->Add( m_dcodeText );
|
||||
aToolbar->Add( m_DCodeSelector );
|
||||
};
|
||||
|
||||
m_dcodeText->SetLabel( _( "DCode:" ) );
|
||||
m_auxiliaryToolBar->AddControl( m_dcodeText );
|
||||
m_auxiliaryToolBar->AddControl( m_DCodeSelector );
|
||||
|
||||
if( !m_gridSelectBox )
|
||||
{
|
||||
m_gridSelectBox = new wxChoice( m_auxiliaryToolBar, ID_ON_GRID_SELECT, wxDefaultPosition,
|
||||
wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
m_auxiliaryToolBar->AddScaledSeparator( this );
|
||||
m_auxiliaryToolBar->AddControl( m_gridSelectBox );
|
||||
|
||||
if( !m_zoomSelectBox )
|
||||
{
|
||||
m_zoomSelectBox = new wxChoice( m_auxiliaryToolBar, ID_ON_ZOOM_SELECT, wxDefaultPosition,
|
||||
wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
m_auxiliaryToolBar->AddScaledSeparator( this );
|
||||
m_auxiliaryToolBar->AddControl( m_zoomSelectBox );
|
||||
|
||||
updateComponentListSelectBox();
|
||||
updateNetnameListSelectBox();
|
||||
updateAperAttributesSelectBox();
|
||||
updateDCodeSelectBox();
|
||||
UpdateGridSelectBox();
|
||||
UpdateZoomSelectBox();
|
||||
|
||||
// Go through and ensure the comboboxes are the correct size, since the strings in the
|
||||
// box could have changed widths.
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_GBR_AUX_TOOLBAR_PCB_CMP_CHOICE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_GBR_AUX_TOOLBAR_PCB_NET_CHOICE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_GBR_AUX_TOOLBAR_PCB_APERATTRIBUTES_CHOICE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize()
|
||||
m_auxiliaryToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::ReCreateVToolbar()
|
||||
{
|
||||
// This toolbar isn't used currently
|
||||
}
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::ReCreateOptToolbar()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR, wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
// TODO: these can be moved to the 'proper' vertical toolbar if and when there are
|
||||
// actual tools to put there. That, or I'll get around to implementing configurable
|
||||
// toolbars.
|
||||
m_optionsToolBar->Add( ACTIONS::selectionTool );
|
||||
m_optionsToolBar->Add( ACTIONS::measureTool );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::togglePolarCoords );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::flashedDisplayOutlines );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::linesDisplayOutlines );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::polygonsDisplayOutlines );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::negativeObjectDisplay );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::dcodeDisplay );
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::toggleForceOpacityMode );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::toggleXORMode );
|
||||
m_optionsToolBar->Add( ACTIONS::highContrastMode );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::flipGerberView );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::toggleLayerManager );
|
||||
|
||||
m_optionsToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::UpdateToolbarControlSizes()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
// Update the item widths
|
||||
m_mainToolBar->UpdateControlWidth( ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER );
|
||||
m_mainToolBar->UpdateControlWidth( ID_TOOLBARH_GERBER_DATA_TEXT_BOX );
|
||||
}
|
||||
|
||||
if( m_auxiliaryToolBar )
|
||||
{
|
||||
// Update the item widths
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_GBR_AUX_TOOLBAR_PCB_CMP_CHOICE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_GBR_AUX_TOOLBAR_PCB_NET_CHOICE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_GBR_AUX_TOOLBAR_PCB_APERATTRIBUTES_CHOICE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
}
|
||||
RegisterCustomToolbarControlFactory( "control.GerberDcodeSelector", _( "DCode Selector" ),
|
||||
_( "Select all items with the selected DCode" ),
|
||||
dcodeSelectorFactory );
|
||||
}
|
||||
|
||||
|
||||
@ -491,14 +478,3 @@ void GERBVIEW_FRAME::OnUpdateSelectDCode( wxUpdateUIEvent& aEvent )
|
||||
gerber->m_Selected_Tool = m_DCodeSelector->GetSelectedDCodeId();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void GERBVIEW_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
if( m_SelLayerBox->GetCount() )
|
||||
{
|
||||
if( m_SelLayerBox->GetSelection() != GetActiveLayer() )
|
||||
m_SelLayerBox->SetSelection( GetActiveLayer() );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,15 +33,18 @@
|
||||
#define EDA_BASE_FRAME_H_
|
||||
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
#include <wx/aui/aui.h>
|
||||
#include <layer_ids.h>
|
||||
#include <frame_type.h>
|
||||
#include <hotkeys_basic.h>
|
||||
#include <kiway_holder.h>
|
||||
#include <tool/action_toolbar.h>
|
||||
#include <tool/tools_holder.h>
|
||||
#include <tool/ui/toolbar_configuration.h>
|
||||
#include <widgets/ui_common.h>
|
||||
#include <widgets/wx_infobar.h>
|
||||
#include <undo_redo_container.h>
|
||||
@ -433,6 +436,65 @@ public:
|
||||
*/
|
||||
virtual wxString GetCurrentFileName() const { return wxEmptyString; }
|
||||
|
||||
/**
|
||||
* Get the default actions to show on the left canvas toolbar.
|
||||
*
|
||||
* @return default config, or nullopt if the toolbar isn't used.
|
||||
*/
|
||||
virtual std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() { return std::nullopt; };
|
||||
|
||||
/**
|
||||
* Get the default actions to show on the right canvas toolbar.
|
||||
*
|
||||
* @return default config, or nullopt if the toolbar isn't used.
|
||||
*/
|
||||
virtual std::optional<TOOLBAR_CONFIGURATION> DefaultRightToolbarConfig() { return std::nullopt; };
|
||||
|
||||
/**
|
||||
* Get the default actions to show on the top main canvas toolbar.
|
||||
*
|
||||
* @return default config, or nullopt if the toolbar isn't used.
|
||||
*/
|
||||
virtual std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() { return std::nullopt; };
|
||||
|
||||
/**
|
||||
* Get the default actions to show on the top aux canvas toolbar.
|
||||
*
|
||||
* @return default config, or nullopt if the toolbar isn't used.
|
||||
*/
|
||||
virtual std::optional<TOOLBAR_CONFIGURATION> DefaultTopAuxToolbarConfig() { return std::nullopt; };
|
||||
|
||||
virtual void RecreateToolbars();
|
||||
|
||||
/**
|
||||
* Update toolbars if desired toolbar icon changed.
|
||||
*/
|
||||
void OnToolbarSizeChanged();
|
||||
|
||||
/**
|
||||
* Update the sizes of any controls in the toolbars of the frame.
|
||||
*/
|
||||
virtual void UpdateToolbarControlSizes();
|
||||
|
||||
/**
|
||||
* Register a creation factory for toolbar controls that are present in this frame.
|
||||
*
|
||||
* The factory function takes a single argument of type `ACTION_TOOLBAR*`, which is the toolbar
|
||||
* to add the controls to.
|
||||
*
|
||||
* @param aName is the unique name for this control - must be prefixed with "control."
|
||||
* @param aDescription is a short user-facing description for the
|
||||
* @param aControlFactory A functor that creates the custom controls and then adds them to the toolbar
|
||||
*/
|
||||
void RegisterCustomToolbarControlFactory( const std::string& aName, const wxString& aUiName,
|
||||
const wxString& aDescription,
|
||||
const ACTION_TOOLBAR_CONTROL_FACTORY& aControlFactory );
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
ACTION_TOOLBAR_CONTROL_FACTORY* GetCustomToolbarControlFactory( const std::string& aName );
|
||||
|
||||
/**
|
||||
* Recreate the menu bar.
|
||||
*
|
||||
@ -616,6 +678,8 @@ protected:
|
||||
|
||||
virtual void doReCreateMenuBar() {}
|
||||
|
||||
virtual void configureToolbars();
|
||||
|
||||
/**
|
||||
* Handle the auto save timer event.
|
||||
*/
|
||||
@ -795,6 +859,21 @@ private:
|
||||
* Associate file extensions with action to execute.
|
||||
*/
|
||||
std::map<const wxString, TOOL_ACTION*> m_acceptedExts;
|
||||
|
||||
// Current toolbar configuration
|
||||
std::optional<TOOLBAR_CONFIGURATION> m_tbConfigLeft;
|
||||
std::optional<TOOLBAR_CONFIGURATION> m_tbConfigRight;
|
||||
std::optional<TOOLBAR_CONFIGURATION> m_tbConfigTopAux;
|
||||
std::optional<TOOLBAR_CONFIGURATION> m_tbConfigTopMain;
|
||||
|
||||
// Toolbar UI elements
|
||||
ACTION_TOOLBAR* m_tbTopMain;
|
||||
ACTION_TOOLBAR* m_tbTopAux; // Additional tools under main toolbar
|
||||
ACTION_TOOLBAR* m_tbRight; // Drawing tools (typically on right edge of window)
|
||||
ACTION_TOOLBAR* m_tbLeft; // Options (typically on left edge of window)
|
||||
|
||||
std::vector<ACTION_TOOLBAR_CONTROL> m_toolbarControlFactories;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include <class_draw_panel_gal.h>
|
||||
#include <kiid.h>
|
||||
#include <hotkeys_basic.h>
|
||||
#include <tool/ui/toolbar_configuration.h>
|
||||
#include <widgets/lib_tree.h>
|
||||
|
||||
class EDA_ITEM;
|
||||
@ -210,16 +211,12 @@ public:
|
||||
|
||||
void EraseMsgBox();
|
||||
|
||||
// Toolbar-related functions
|
||||
virtual void ReCreateHToolbar() { };
|
||||
virtual void ReCreateVToolbar() { };
|
||||
virtual void ReCreateOptToolbar() { };
|
||||
virtual void ReCreateLeftToolbar() { };
|
||||
virtual void ReCreateAuxiliaryToolbar() { }
|
||||
|
||||
/**
|
||||
* Update the sizes of any controls in the toolbars of the frame.
|
||||
*/
|
||||
virtual void UpdateToolbarControlSizes() { }
|
||||
|
||||
/*
|
||||
* These 4 functions provide a basic way to show/hide grid and /get/set grid color.
|
||||
*
|
||||
@ -472,16 +469,6 @@ public:
|
||||
*/
|
||||
virtual const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const;
|
||||
|
||||
/**
|
||||
* Rebuild all toolbars and update the checked state of check tools.
|
||||
*/
|
||||
void RecreateToolbars();
|
||||
|
||||
/**
|
||||
* Update toolbars if desired toolbar icon changed.
|
||||
*/
|
||||
void OnToolbarSizeChanged();
|
||||
|
||||
/**
|
||||
* Redraw the menus and what not in current language.
|
||||
*/
|
||||
@ -523,9 +510,18 @@ public:
|
||||
static std::vector<const PLUGIN_ACTION*> GetOrderedPluginActions( PLUGIN_ACTION_SCOPE aScope,
|
||||
APP_SETTINGS_BASE* aCfg );
|
||||
|
||||
/**
|
||||
* Append actions from API plugins to the given toolbar.
|
||||
*
|
||||
* @param aToolbar is the toolbar to add the plugins to
|
||||
*/
|
||||
virtual void AddApiPluginTools( ACTION_TOOLBAR* aToolbar );
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
protected:
|
||||
void configureToolbars() override;
|
||||
|
||||
virtual void SetScreen( BASE_SCREEN* aScreen ) { m_currentScreen = aScreen; }
|
||||
|
||||
void unitsChangeRefresh() override;
|
||||
@ -560,12 +556,6 @@ protected:
|
||||
virtual void handleActivateEvent( wxActivateEvent& aEvent );
|
||||
void onActivate( wxActivateEvent& aEvent );
|
||||
|
||||
/**
|
||||
* Append actions from API plugins to the main toolbar
|
||||
*/
|
||||
virtual void addApiPluginTools();
|
||||
|
||||
|
||||
wxSocketServer* m_socketServer;
|
||||
|
||||
///< Prevents opening same file multiple times.
|
||||
@ -584,11 +574,6 @@ protected:
|
||||
wxChoice* m_gridSelectBox;
|
||||
wxChoice* m_zoomSelectBox;
|
||||
|
||||
ACTION_TOOLBAR* m_mainToolBar;
|
||||
ACTION_TOOLBAR* m_auxiliaryToolBar; // Additional tools under main toolbar
|
||||
ACTION_TOOLBAR* m_drawToolBar; // Drawing tools (typically on right edge of window)
|
||||
ACTION_TOOLBAR* m_optionsToolBar; // Options (typically on left edge of window)
|
||||
|
||||
std::unique_ptr<EDA_SEARCH_DATA> m_findReplaceData;
|
||||
wxArrayString m_findStringHistoryList;
|
||||
wxArrayString m_replaceStringHistoryList;
|
||||
@ -609,6 +594,9 @@ protected:
|
||||
static bool m_openGLFailureOccured; ///< Has any failure occurred when switching to OpenGL in
|
||||
///< any EDA_DRAW_FRAME?
|
||||
|
||||
const std::string m_tbGridSelectName = "control.GridSelector";
|
||||
const std::string m_tbZoomSelectName = "control.ZoomSelector";
|
||||
|
||||
private:
|
||||
BASE_SCREEN* m_currentScreen; ///< current used SCREEN
|
||||
EDA_DRAW_PANEL_GAL* m_canvas;
|
||||
|
@ -93,12 +93,6 @@ enum main_id
|
||||
ID_GEN_PLOT_DXF,
|
||||
ID_GEN_PLOT_PDF,
|
||||
|
||||
// id for toolbars
|
||||
ID_H_TOOLBAR,
|
||||
ID_V_TOOLBAR,
|
||||
ID_OPT_TOOLBAR,
|
||||
ID_AUX_TOOLBAR,
|
||||
|
||||
ID_LANGUAGE_CHOICE,
|
||||
ID_LANGUAGE_DANISH,
|
||||
ID_LANGUAGE_DEFAULT,
|
||||
|
@ -62,6 +62,7 @@ class FOOTPRINT_EDITOR_SETTINGS;
|
||||
struct MAGNETIC_SETTINGS;
|
||||
class NL_PCBNEW_PLUGIN;
|
||||
class PROGRESS_REPORTER;
|
||||
class PCB_LAYER_BOX_SELECTOR;
|
||||
|
||||
#ifdef wxHAS_INOTIFY
|
||||
#define wxFileSystemWatcher wxInotifyFileSystemWatcher
|
||||
@ -397,6 +398,8 @@ public:
|
||||
void OnFpChangeDebounceTimer( wxTimerEvent& aEvent );
|
||||
|
||||
protected:
|
||||
void configureToolbars() override;
|
||||
|
||||
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
|
||||
|
||||
void handleActivateEvent( wxActivateEvent& aEvent ) override;
|
||||
@ -432,6 +435,10 @@ protected:
|
||||
PCB_DISPLAY_OPTIONS m_displayOptions;
|
||||
PCB_ORIGIN_TRANSFORMS m_originTransforms;
|
||||
|
||||
PCB_LAYER_BOX_SELECTOR* m_SelLayerBox; // a combo box to display and select active layer
|
||||
|
||||
const std::string m_tbPcbLayerSelectorName = "control.PCBLayerSelector";
|
||||
|
||||
private:
|
||||
std::unique_ptr<NL_PCBNEW_PLUGIN> m_spaceMouse;
|
||||
|
||||
|
@ -166,13 +166,6 @@ public:
|
||||
std::vector<std::pair<wxString, bool>> actions;
|
||||
};
|
||||
|
||||
struct TOOLBARS
|
||||
{
|
||||
TOOLBAR_CONFIGURATION m_HToolbarConfig;
|
||||
TOOLBAR_CONFIGURATION m_VToolbarConfig;
|
||||
TOOLBAR_CONFIGURATION m_optToolbarConfig;
|
||||
}
|
||||
|
||||
APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaVersion );
|
||||
|
||||
virtual ~APP_SETTINGS_BASE() {}
|
||||
@ -202,8 +195,6 @@ public:
|
||||
|
||||
WINDOW_SETTINGS m_Window;
|
||||
|
||||
TOOLBARS m_Toolbars;
|
||||
|
||||
/// Active color theme name.
|
||||
wxString m_ColorTheme;
|
||||
|
||||
|
@ -50,7 +50,9 @@ public:
|
||||
// Make the toolbar a friend so it can easily access everything inside here
|
||||
friend class ACTION_TOOLBAR;
|
||||
|
||||
ACTION_GROUP( const std::string& aName, const std::vector<const TOOL_ACTION*>& aActions );
|
||||
ACTION_GROUP(const std::string_view& aName );
|
||||
|
||||
ACTION_GROUP( const std::string_view& aName, const std::vector<const TOOL_ACTION*>& aActions );
|
||||
|
||||
/**
|
||||
* Set the default action to use when first creating the toolbar palette icon.
|
||||
@ -77,6 +79,15 @@ public:
|
||||
*/
|
||||
int GetUIId() const;
|
||||
|
||||
/**
|
||||
* Set the actions contained in this group.
|
||||
*
|
||||
* The first action in the list will be the new default action.
|
||||
*
|
||||
* @param aActions is the new set of actions.
|
||||
*/
|
||||
void SetActions( const std::vector<const TOOL_ACTION*>& aActions );
|
||||
|
||||
/**
|
||||
* Get a vector of all the actions contained inside this group.
|
||||
*/
|
||||
@ -237,6 +248,11 @@ public:
|
||||
*/
|
||||
void AddScaledSeparator( wxWindow* aWindow );
|
||||
|
||||
/**
|
||||
* Add a control to the toolbar.
|
||||
*/
|
||||
void Add( wxControl* aControl, const wxString& aLabel = wxEmptyString );
|
||||
|
||||
/**
|
||||
* Add a context menu to a specific tool item on the toolbar.
|
||||
*
|
||||
@ -252,11 +268,13 @@ public:
|
||||
* Add a set of actions to a toolbar as a group. One action from the group will be displayed
|
||||
* at a time.
|
||||
*
|
||||
* This toolbar gets ownership of the group object, and will delete it when the
|
||||
* ClearToolbar() function is called.
|
||||
*
|
||||
* @param aGroup is the group to add. The first action in the group will be the first shown
|
||||
* on the toolbar.
|
||||
* @param aIsToggleEntry makes the toolbar item a toggle entry when true
|
||||
*/
|
||||
void AddGroup( ACTION_GROUP* aGroup, bool aIsToggleEntry = false );
|
||||
void AddGroup( std::unique_ptr<ACTION_GROUP> aGroup );
|
||||
|
||||
/**
|
||||
* Select an action inside a group
|
||||
@ -274,6 +292,11 @@ public:
|
||||
*/
|
||||
void ApplyConfiguration( const TOOLBAR_CONFIGURATION& aConfig );
|
||||
|
||||
/**
|
||||
* Update the width of all wxControl tools on thsi toolbar
|
||||
*/
|
||||
void UpdateControlWidths();
|
||||
|
||||
/**
|
||||
* Update the toolbar item width of a control using its best size.
|
||||
*
|
||||
@ -369,9 +392,44 @@ protected:
|
||||
std::map<int, bool> m_toolKinds;
|
||||
std::map<int, bool> m_toolCancellable;
|
||||
std::map<int, const TOOL_ACTION*> m_toolActions;
|
||||
std::map<int, ACTION_GROUP*> m_actionGroups;
|
||||
|
||||
std::map<int, std::unique_ptr<ACTION_MENU>> m_toolMenus;
|
||||
/// IDs for all the control items in this toolbar
|
||||
std::vector<int> m_controlIDs;
|
||||
|
||||
std::map<int, std::unique_ptr<ACTION_GROUP>> m_actionGroups;
|
||||
std::map<int, std::unique_ptr<ACTION_MENU>> m_toolMenus;
|
||||
};
|
||||
|
||||
/**
|
||||
* Type for the function signature that is used to add custom controls to the toolbar.
|
||||
*
|
||||
* Note, these functions SHOULD NOT use the wxWidgets-provided `AddControl` function to
|
||||
* add the controls to the toolbar, instead they should use the `ACTION_TOOLBAR::Add` functions
|
||||
* to ensure proper registration of the control.
|
||||
*/
|
||||
typedef std::function<void ( ACTION_TOOLBAR* )> ACTION_TOOLBAR_CONTROL_FACTORY;
|
||||
|
||||
struct ACTION_TOOLBAR_CONTROL
|
||||
{
|
||||
/**
|
||||
* Name of the control - must start with "control."
|
||||
*/
|
||||
std::string name;
|
||||
|
||||
/**
|
||||
* Short description to show for the control
|
||||
*/
|
||||
wxString uiname;
|
||||
|
||||
/**
|
||||
* User-visible tooltip for the control
|
||||
*/
|
||||
wxString description;
|
||||
|
||||
/**
|
||||
* Factory function to create the control when required
|
||||
*/
|
||||
ACTION_TOOLBAR_CONTROL_FACTORY factory;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -25,7 +25,6 @@
|
||||
#ifndef TOOLBAR_CONFIGURATION_H_
|
||||
#define TOOLBAR_CONFIGURATION_H_
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@ -35,7 +34,9 @@
|
||||
|
||||
class KICOMMON_API TOOLBAR_GROUP_CONFIG
|
||||
{
|
||||
TOOLBAR_GROUP_CONFIG( const std::string& aName ) :
|
||||
public:
|
||||
|
||||
TOOLBAR_GROUP_CONFIG( std::string aName ) :
|
||||
m_groupName( aName )
|
||||
{
|
||||
wxASSERT_MSG( aName.starts_with( "group" ), "Toolbar group names must start with \"group\"" );
|
||||
@ -43,17 +44,19 @@ class KICOMMON_API TOOLBAR_GROUP_CONFIG
|
||||
|
||||
const std::string& GetName() const
|
||||
{
|
||||
retrun m_groupName;
|
||||
return m_groupName;
|
||||
}
|
||||
|
||||
void AddAction( std::string aActionName )
|
||||
TOOLBAR_GROUP_CONFIG& AddAction( std::string aActionName )
|
||||
{
|
||||
m_groupItems.append( aActionName );
|
||||
m_groupItems.push_back( aActionName );
|
||||
return *this;
|
||||
}
|
||||
|
||||
void AddAction( const TOOL_ACTION& aAction )
|
||||
TOOLBAR_GROUP_CONFIG& AddAction( const TOOL_ACTION& aAction )
|
||||
{
|
||||
m_groupItems.append( aAction.GetName() );
|
||||
m_groupItems.push_back( aAction.GetName() );
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::vector<std::string> GetGroupItems() const
|
||||
@ -68,30 +71,46 @@ private:
|
||||
|
||||
class KICOMMON_API TOOLBAR_CONFIGURATION
|
||||
{
|
||||
public:
|
||||
|
||||
TOOLBAR_CONFIGURATION() {}
|
||||
virtual ~TOOLBAR_CONFIGURATION() {}
|
||||
|
||||
void AppendAction( std::string aActionName )
|
||||
TOOLBAR_CONFIGURATION& AppendAction( std::string aActionName )
|
||||
{
|
||||
m_toolbarItems.append( aActionName );
|
||||
m_toolbarItems.push_back( aActionName );
|
||||
return *this;
|
||||
}
|
||||
|
||||
void AppendAction( const TOOL_ACTION& aAction )
|
||||
TOOLBAR_CONFIGURATION& AppendAction( const TOOL_ACTION& aAction )
|
||||
{
|
||||
m_toolbarItems.append( aAction.GetName() );
|
||||
m_toolbarItems.push_back( aAction.GetName() );
|
||||
return *this;
|
||||
}
|
||||
|
||||
void AppendSeparator()
|
||||
TOOLBAR_CONFIGURATION& AppendSeparator()
|
||||
{
|
||||
m_toolbarItems.append( "separator" );
|
||||
m_toolbarItems.push_back( "separator" );
|
||||
return *this;
|
||||
}
|
||||
|
||||
void AppendGroup( const TOOLBAR_GROUP_CONFIG& aGroup )
|
||||
TOOLBAR_CONFIGURATION& AppendSpacer( int aSize )
|
||||
{
|
||||
std::string& name = aGroup.GetName();
|
||||
m_toolbarItems.push_back( "spacer:" + std::to_string( aSize ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
m_toolbarGroups[name] = aGroup;
|
||||
m_toolbarItems.append( name );
|
||||
TOOLBAR_CONFIGURATION& AppendGroup( const TOOLBAR_GROUP_CONFIG& aGroup )
|
||||
{
|
||||
m_toolbarGroups.push_back( aGroup );
|
||||
m_toolbarItems.push_back( aGroup.GetName() );
|
||||
return *this;
|
||||
}
|
||||
|
||||
TOOLBAR_CONFIGURATION& AppendControl( std::string aControlName )
|
||||
{
|
||||
m_toolbarItems.push_back( aControlName );
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::vector<std::string> GetToolbarItems() const
|
||||
@ -99,15 +118,15 @@ class KICOMMON_API TOOLBAR_CONFIGURATION
|
||||
return m_toolbarItems;
|
||||
}
|
||||
|
||||
std::optional<TOOLBAR_GROUP_CONFIG&> GetGroup( const std::string& aGroupName )
|
||||
const TOOLBAR_GROUP_CONFIG* GetGroup( const std::string& aGroupName ) const
|
||||
{
|
||||
for( auto& group : m_toolbarGroups )
|
||||
for( const TOOLBAR_GROUP_CONFIG& group : m_toolbarGroups )
|
||||
{
|
||||
if( group.GetName() == aGroupName )
|
||||
return group;
|
||||
return &group;
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void Clear()
|
||||
@ -121,4 +140,4 @@ private:
|
||||
std::vector<TOOLBAR_GROUP_CONFIG> m_toolbarGroups;
|
||||
};
|
||||
|
||||
#endif /* TOOLBAR_CONFIGURATION_H_ */
|
||||
#endif /* TOOLBAR_CONFIGURATION_H_ */
|
||||
|
@ -133,7 +133,6 @@ KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& titl
|
||||
KICAD_MANAGER_FRAME_NAME, &::Kiway, unityScale ),
|
||||
m_leftWin( nullptr ),
|
||||
m_launcher( nullptr ),
|
||||
m_mainToolBar( nullptr ),
|
||||
m_lastToolbarIconSize( 0 )
|
||||
{
|
||||
const int defaultLeftWinWidth = FromDIP( 250 );
|
||||
@ -205,14 +204,15 @@ KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& titl
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
|
||||
RecreateBaseLeftToolbar();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
m_auimgr.SetFlags( wxAUI_MGR_LIVE_RESIZE );
|
||||
|
||||
m_auimgr.AddPane( m_mainToolBar,
|
||||
EDA_PANE().VToolbar().Name( "MainToolbar" ).Left().Layer( 2 ) );
|
||||
m_auimgr.AddPane( m_tbLeft,
|
||||
EDA_PANE().VToolbar().Name( "TopMainToolbar" ).Left().Layer( 2 ) );
|
||||
|
||||
// BestSize() does not always set the actual pane size of m_leftWin to the required value.
|
||||
// It happens when m_leftWin is too large (roughly > 1/3 of the kicad manager frame width.
|
||||
@ -984,7 +984,7 @@ void KICAD_MANAGER_FRAME::ShowChangedLanguage()
|
||||
EDA_BASE_FRAME::ShowChangedLanguage();
|
||||
|
||||
// tooltips in toolbars
|
||||
RecreateBaseLeftToolbar();
|
||||
RecreateToolbars();
|
||||
m_launcher->CreateLaunchers();
|
||||
|
||||
// update captions
|
||||
@ -1213,11 +1213,11 @@ void KICAD_MANAGER_FRAME::onToolbarSizeChanged()
|
||||
{
|
||||
// No idea why, but the same mechanism used in EDA_DRAW_FRAME doesn't work here
|
||||
// the only thing that seems to work is to blow it all up and start from scratch.
|
||||
m_auimgr.DetachPane( m_mainToolBar );
|
||||
delete m_mainToolBar;
|
||||
m_mainToolBar = nullptr;
|
||||
RecreateBaseLeftToolbar();
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Left()
|
||||
m_auimgr.DetachPane( m_tbLeft );
|
||||
delete m_tbLeft;
|
||||
m_tbLeft = nullptr;
|
||||
RecreateToolbars();
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Left()
|
||||
.Layer( 2 ) );
|
||||
|
||||
m_auimgr.Update();
|
||||
|
@ -76,11 +76,6 @@ public:
|
||||
*/
|
||||
void HideTabsIfNeeded();
|
||||
|
||||
/**
|
||||
* (Re)Create the left vertical toolbar
|
||||
*/
|
||||
void RecreateBaseLeftToolbar();
|
||||
|
||||
wxString GetCurrentFileName() const override
|
||||
{
|
||||
return GetProjectFileName();
|
||||
@ -201,6 +196,9 @@ public:
|
||||
// Used only on Windows: stores the info message about file watcher
|
||||
wxString m_FileWatcherInfo;
|
||||
|
||||
// Toolbar defaults
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
protected:
|
||||
@ -239,7 +237,6 @@ private:
|
||||
PROJECT_TREE_PANE* m_leftWin;
|
||||
wxAuiNotebook* m_notebook;
|
||||
PANEL_KICAD_LAUNCHER* m_launcher;
|
||||
ACTION_TOOLBAR* m_mainToolBar;
|
||||
int m_lastToolbarIconSize;
|
||||
|
||||
std::shared_ptr<PLUGIN_CONTENT_MANAGER> m_pcm;
|
||||
|
@ -240,53 +240,44 @@ void KICAD_MANAGER_FRAME::doReCreateMenuBar()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief (Re)Create the left vertical toolbar
|
||||
*/
|
||||
void KICAD_MANAGER_FRAME::RecreateBaseLeftToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> KICAD_MANAGER_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// New
|
||||
m_mainToolBar->Add( KICAD_MANAGER_ACTIONS::newProject );
|
||||
m_mainToolBar->Add( KICAD_MANAGER_ACTIONS::openProject );
|
||||
// clang-format off
|
||||
config.AppendAction( KICAD_MANAGER_ACTIONS::newProject )
|
||||
.AppendAction( KICAD_MANAGER_ACTIONS::openProject );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_SAVE_AND_ZIP_FILES, wxEmptyString,
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Toolize this:
|
||||
m_tbTopMain->AddTool( ID_SAVE_AND_ZIP_FILES, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::zip ),
|
||||
KiDisabledBitmapBundle( BITMAPS::zip ),
|
||||
wxITEM_NORMAL,
|
||||
_( "Archive all project files" ),
|
||||
wxEmptyString, nullptr );
|
||||
|
||||
m_mainToolBar->AddTool( ID_READ_ZIP_ARCHIVE, wxEmptyString,
|
||||
m_tbTopMain->AddTool( ID_READ_ZIP_ARCHIVE, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::unzip ),
|
||||
KiDisabledBitmapBundle( BITMAPS::unzip ),
|
||||
wxITEM_NORMAL,
|
||||
_( "Unarchive project files from zip archive" ),
|
||||
wxEmptyString, nullptr );
|
||||
*/
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_BROWSE_IN_FILE_EXPLORER, wxEmptyString,
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Toolize this:
|
||||
m_tbTopMain->AddTool( ID_BROWSE_IN_FILE_EXPLORER, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::directory_browser ),
|
||||
#ifdef __APPLE__
|
||||
_( "Reveal project folder in Finder" ) );
|
||||
#else
|
||||
_( "Open project directory in file explorer" ) );
|
||||
#endif
|
||||
*/
|
||||
|
||||
// Create m_mainToolBar
|
||||
m_mainToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
@ -134,9 +134,9 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
wxWindow* stsbar = GetStatusBar();
|
||||
int spacer = KIUI::GetTextSize( wxT( "M" ), stsbar ).x * 2;
|
||||
@ -179,15 +179,15 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
m_propertiesPagelayout = new PROPERTIES_FRAME( this );
|
||||
|
||||
// Rows; layers 4 - 6
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" )
|
||||
.Top().Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" )
|
||||
.Left().Layer( 3 ) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" )
|
||||
.Bottom().Layer( 6 ) );
|
||||
|
||||
// Columns; layers 1 - 3
|
||||
m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( "ToolsToolbar" )
|
||||
m_auimgr.AddPane( m_tbRight, EDA_PANE().VToolbar().Name( "RightToolbar" )
|
||||
.Right().Layer( 2 ) );
|
||||
|
||||
m_auimgr.AddPane( m_propertiesPagelayout, EDA_PANE().Palette().Name( "Props" )
|
||||
|
@ -98,8 +98,11 @@ public:
|
||||
// The Tool Framework initialization
|
||||
void setupTools();
|
||||
|
||||
// Virtual basic functions:
|
||||
void ReCreateHToolbar() override;
|
||||
// Currently no top auxillary toolbar
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultRightToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
void UpdateToolbarControlSizes() override;
|
||||
|
||||
void SetPageSettings(const PAGE_INFO&) override;
|
||||
@ -132,18 +135,6 @@ public:
|
||||
*/
|
||||
void OnNewDrawingSheet();
|
||||
|
||||
/**
|
||||
* Create or update the right vertical toolbar.
|
||||
*/
|
||||
void ReCreateVToolbar() override;
|
||||
|
||||
/**
|
||||
* Create or update the left vertical toolbar.
|
||||
*
|
||||
* @note This is currently not used.
|
||||
*/
|
||||
void ReCreateOptToolbar() override;
|
||||
|
||||
const PL_EDITOR_LAYOUT& GetPageLayout() const { return m_pageLayout; }
|
||||
PL_EDITOR_LAYOUT& GetPageLayout() { return m_pageLayout; }
|
||||
|
||||
@ -253,6 +244,8 @@ public:
|
||||
protected:
|
||||
bool saveCurrentPageLayout();
|
||||
|
||||
void configureToolbars() override;
|
||||
|
||||
void setupUIConditions() override;
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
@ -283,6 +276,15 @@ private:
|
||||
VECTOR2I m_grid_origin;
|
||||
|
||||
std::unique_ptr<NL_PL_EDITOR_PLUGIN> m_spaceMouse;
|
||||
|
||||
wxString m_originChoiceList[5] =
|
||||
{
|
||||
_("Left Top paper corner"),
|
||||
_("Right Bottom page corner"),
|
||||
_("Left Bottom page corner"),
|
||||
_("Right Top page corner"),
|
||||
_("Left Top page corner")
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* _PL_EDITOR_FRAME_H */
|
||||
|
@ -29,168 +29,155 @@
|
||||
#include "pl_editor_id.h"
|
||||
#include "pl_editor_frame.h"
|
||||
|
||||
void PL_EDITOR_FRAME::ReCreateHToolbar()
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> PL_EDITOR_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT | wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
m_mainToolBar->Add( ACTIONS::doNew );
|
||||
m_mainToolBar->Add( ACTIONS::open );
|
||||
m_mainToolBar->Add( ACTIONS::save );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::print );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::undo );
|
||||
m_mainToolBar->Add( ACTIONS::redo );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PL_ACTIONS::showInspector );
|
||||
m_mainToolBar->Add( PL_ACTIONS::previewSettings );
|
||||
|
||||
// Display mode switch
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PL_ACTIONS::layoutNormalMode );
|
||||
m_mainToolBar->Add( PL_ACTIONS::layoutEditMode );
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
wxString choiceList[5] =
|
||||
{
|
||||
_("Left Top paper corner"),
|
||||
_("Right Bottom page corner"),
|
||||
_("Left Bottom page corner"),
|
||||
_("Right Top page corner"),
|
||||
_("Left Top page corner")
|
||||
};
|
||||
|
||||
if( !m_originSelectBox )
|
||||
{
|
||||
m_originSelectBox = new wxChoice( m_mainToolBar, ID_SELECT_COORDINATE_ORIGIN,
|
||||
wxDefaultPosition, wxDefaultSize, 5, choiceList );
|
||||
}
|
||||
|
||||
|
||||
m_mainToolBar->AddControl( m_originSelectBox );
|
||||
m_originSelectBox->SetToolTip( _("Origin of coordinates displayed to the status bar") );
|
||||
|
||||
int minwidth = 0;
|
||||
|
||||
for( int ii = 0; ii < 5; ii++ )
|
||||
{
|
||||
int width = KIUI::GetTextSize( choiceList[ii], m_originSelectBox ).x;
|
||||
minwidth = std::max( minwidth, width );
|
||||
}
|
||||
|
||||
m_originSelectBox->SetMinSize( wxSize( minwidth, -1 ) );
|
||||
m_originSelectBox->SetSelection( m_originSelectChoice );
|
||||
|
||||
wxString pageList[5] =
|
||||
{
|
||||
_("Page 1"),
|
||||
_("Other pages")
|
||||
};
|
||||
|
||||
if( !m_pageSelectBox )
|
||||
{
|
||||
m_pageSelectBox = new wxChoice( m_mainToolBar, ID_SELECT_PAGE_NUMBER,
|
||||
wxDefaultPosition, wxDefaultSize, 2, pageList );
|
||||
}
|
||||
|
||||
m_mainToolBar->AddControl( m_pageSelectBox );
|
||||
m_pageSelectBox->SetToolTip( _("Simulate page 1 or other pages to show how items\n"\
|
||||
"which are not on all page are displayed") );
|
||||
m_pageSelectBox->SetSelection( 0 );
|
||||
|
||||
|
||||
// Go through and ensure the comboboxes are the correct size, since the strings in the
|
||||
// box could have changed widths.
|
||||
m_mainToolBar->UpdateControlWidth( ID_SELECT_COORDINATE_ORIGIN );
|
||||
m_mainToolBar->UpdateControlWidth( ID_SELECT_PAGE_NUMBER );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void PL_EDITOR_FRAME::ReCreateVToolbar()
|
||||
{
|
||||
if( m_drawToolBar )
|
||||
{
|
||||
m_drawToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_drawToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( PL_ACTIONS::drawLine );
|
||||
m_drawToolBar->Add( PL_ACTIONS::drawRectangle );
|
||||
m_drawToolBar->Add( PL_ACTIONS::placeText );
|
||||
m_drawToolBar->Add( PL_ACTIONS::placeImage );
|
||||
m_drawToolBar->Add( PL_ACTIONS::appendImportedDrawingSheet );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( ACTIONS::deleteTool );
|
||||
|
||||
m_drawToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void PL_EDITOR_FRAME::ReCreateOptToolbar()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits );
|
||||
|
||||
/* TODO: Implement context menus
|
||||
PL_SELECTION_TOOL* selTool = m_toolManager->GetTool<PL_SELECTION_TOOL>();
|
||||
std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
gridMenu->Add( ACTIONS::gridProperties );
|
||||
m_optionsToolBar->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
m_tbLeft->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
*/
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
m_optionsToolBar->KiRealize();
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> PL_EDITOR_FRAME::DefaultRightToolbarConfig()
|
||||
{
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::selectionTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PL_ACTIONS::drawLine )
|
||||
.AppendAction( PL_ACTIONS::drawRectangle )
|
||||
.AppendAction( PL_ACTIONS::placeText )
|
||||
.AppendAction( PL_ACTIONS::placeImage )
|
||||
.AppendAction( PL_ACTIONS::appendImportedDrawingSheet );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::deleteTool );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> PL_EDITOR_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::doNew )
|
||||
.AppendAction( ACTIONS::open )
|
||||
.AppendAction( ACTIONS::save );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::print );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::undo )
|
||||
.AppendAction( ACTIONS::redo );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PL_ACTIONS::showInspector )
|
||||
.AppendAction( PL_ACTIONS::previewSettings );
|
||||
|
||||
// Display mode switch
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PL_ACTIONS::layoutNormalMode )
|
||||
.AppendAction( PL_ACTIONS::layoutEditMode );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( "control.PLEditorOrigin" )
|
||||
.AppendControl( "control.PLEditorPageSelect" );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void PL_EDITOR_FRAME::configureToolbars()
|
||||
{
|
||||
EDA_DRAW_FRAME::configureToolbars();
|
||||
|
||||
auto originSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_originSelectBox )
|
||||
{
|
||||
m_originSelectBox = new wxChoice( aToolbar, ID_SELECT_COORDINATE_ORIGIN,
|
||||
wxDefaultPosition, wxDefaultSize, 5, m_originChoiceList );
|
||||
}
|
||||
|
||||
m_originSelectBox->SetToolTip( _("Origin of coordinates displayed to the status bar") );
|
||||
m_originSelectBox->SetSelection( m_originSelectChoice );
|
||||
|
||||
aToolbar->Add( m_originSelectBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.PLEditorOrigin", _( "Origin Selector" ),
|
||||
_( "Select the origin of the status bar coordinates" ),
|
||||
originSelectorFactory );
|
||||
|
||||
|
||||
auto pageSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
wxString pageList[5] =
|
||||
{
|
||||
_("Page 1"),
|
||||
_("Other pages")
|
||||
};
|
||||
|
||||
if( !m_pageSelectBox )
|
||||
{
|
||||
m_pageSelectBox = new wxChoice( aToolbar, ID_SELECT_PAGE_NUMBER,
|
||||
wxDefaultPosition, wxDefaultSize, 2, pageList );
|
||||
}
|
||||
|
||||
m_pageSelectBox->SetToolTip( _("Simulate page 1 or other pages to show how items\n"\
|
||||
"which are not on all page are displayed") );
|
||||
m_pageSelectBox->SetSelection( 0 );
|
||||
|
||||
aToolbar->Add( m_pageSelectBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.PLEditorPageSelect", _( "Page Selector" ),
|
||||
_( "Select the page to simulate item displays" ),
|
||||
pageSelectorFactory );
|
||||
}
|
||||
|
||||
|
||||
void PL_EDITOR_FRAME::UpdateToolbarControlSizes()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
// Ensure the origin selector is a minimum size
|
||||
int minwidth = 0;
|
||||
|
||||
for( int ii = 0; ii < 5; ii++ )
|
||||
{
|
||||
// Update the item widths
|
||||
m_mainToolBar->UpdateControlWidth( ID_SELECT_COORDINATE_ORIGIN );
|
||||
m_mainToolBar->UpdateControlWidth( ID_SELECT_PAGE_NUMBER );
|
||||
int width = KIUI::GetTextSize( m_originChoiceList[ii], m_originSelectBox ).x;
|
||||
minwidth = std::max( minwidth, width );
|
||||
}
|
||||
|
||||
m_originSelectBox->SetMinSize( wxSize( minwidth, -1 ) );
|
||||
|
||||
// Base class actually will go through and update the sizes of the controls
|
||||
EDA_DRAW_FRAME::UpdateToolbarControlSizes();
|
||||
}
|
||||
|
@ -101,7 +101,6 @@ BEGIN_EVENT_TABLE( FOOTPRINT_EDIT_FRAME, PCB_BASE_FRAME )
|
||||
FOOTPRINT_EDIT_FRAME::OnUpdateLoadFootprintFromBoard )
|
||||
EVT_UPDATE_UI( ID_ADD_FOOTPRINT_TO_BOARD,
|
||||
FOOTPRINT_EDIT_FRAME::OnUpdateSaveFootprintToBoard )
|
||||
EVT_UPDATE_UI( ID_TOOLBARH_PCB_SELECT_LAYER, FOOTPRINT_EDIT_FRAME::OnUpdateLayerSelectBox )
|
||||
|
||||
// Drop files event
|
||||
EVT_DROP_FILES( FOOTPRINT_EDIT_FRAME::OnDropFiles )
|
||||
@ -117,7 +116,6 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
{
|
||||
m_showBorderAndTitleBlock = false; // true to show the frame references
|
||||
m_aboutTitle = _HKI( "KiCad Footprint Editor" );
|
||||
m_selLayerBox = nullptr;
|
||||
m_editorSettings = nullptr;
|
||||
|
||||
// Give an icon
|
||||
@ -178,10 +176,9 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
initLibraryTree();
|
||||
m_treePane = new FOOTPRINT_TREE_PANE( this );
|
||||
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
|
||||
m_selectionFilterPanel = new PANEL_SELECTION_FILTER( this );
|
||||
m_appearancePanel = new APPEARANCE_CONTROLS( this, GetCanvas(), true );
|
||||
@ -228,7 +225,7 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
m_auimgr.SetFlags( auiFlags );
|
||||
|
||||
// Rows; layers 4 - 6
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" )
|
||||
.Top().Layer( 6 ) );
|
||||
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" )
|
||||
@ -243,10 +240,10 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
.Left().Layer( 3 )
|
||||
.Caption( _( "Properties" ) ).PaneBorder( false )
|
||||
.MinSize( FromDIP( wxSize( 240, 60 ) ) ).BestSize( FromDIP( wxSize( 300, 200 ) ) ) );
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" )
|
||||
.Left().Layer( 2 ) );
|
||||
|
||||
m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( "ToolsToolbar" )
|
||||
m_auimgr.AddPane( m_tbRight, EDA_PANE().VToolbar().Name( "RightToolbar" )
|
||||
.Right().Layer(2) );
|
||||
m_auimgr.AddPane( m_appearancePanel, EDA_PANE().Name( "LayersManager" )
|
||||
.Right().Layer( 3 )
|
||||
|
@ -114,14 +114,10 @@ public:
|
||||
*/
|
||||
void HardRedraw() override;
|
||||
|
||||
/**
|
||||
* Create the main horizontal toolbar for the footprint editor.
|
||||
*/
|
||||
void ReCreateHToolbar() override;
|
||||
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override;
|
||||
void UpdateToolbarControlSizes() override;
|
||||
// Default toolbar configuration
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultRightToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
/**
|
||||
* Re create the layer Box by clearing the old list, and building a new one from the new
|
||||
@ -133,8 +129,6 @@ public:
|
||||
*/
|
||||
void ReCreateLayerBox( bool aForceResizeToolbar = true );
|
||||
|
||||
void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
|
||||
|
||||
void SelectLayer( wxCommandEvent& event );
|
||||
|
||||
// The Tool Framework initialization, for GAL mode
|
||||
@ -360,7 +354,6 @@ protected:
|
||||
void centerItemIdleHandler( wxIdleEvent& aEvent );
|
||||
|
||||
protected:
|
||||
PCB_LAYER_BOX_SELECTOR* m_selLayerBox; // a combo box to display and select active layer
|
||||
FOOTPRINT_EDITOR_SETTINGS* m_editorSettings;
|
||||
|
||||
private:
|
||||
|
@ -118,7 +118,7 @@ void FOOTPRINT_EDIT_FRAME::centerItemIdleHandler( wxIdleEvent& aEvent )
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::SelectLayer( wxCommandEvent& event )
|
||||
{
|
||||
SetActiveLayer( ToLAYER_ID( m_selLayerBox->GetLayerSelection() ) );
|
||||
SetActiveLayer( ToLAYER_ID( m_SelLayerBox->GetLayerSelection() ) );
|
||||
|
||||
if( GetDisplayOptions().m_ContrastModeDisplay != HIGH_CONTRAST_MODE::NORMAL )
|
||||
GetCanvas()->Refresh();
|
||||
|
@ -229,10 +229,9 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||
m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );
|
||||
|
||||
setupUIConditions();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
|
||||
ReCreateLibraryList();
|
||||
UpdateTitle();
|
||||
@ -262,8 +261,8 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
// Horizontal items; layers 4 - 6
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().VToolbar().Name( "MainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" ).Left().Layer(3) );
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().VToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( "LeftToolbar" ).Left().Layer(3) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) );
|
||||
|
||||
// Vertical items; layers 1 - 3
|
||||
@ -293,7 +292,7 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||
wxASSERT( cfg );
|
||||
GetCanvas()->GetView()->SetScale( cfg->m_FootprintViewerZoom );
|
||||
|
||||
wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
|
||||
wxAuiToolBarItem* toolOpt = m_tbTopMain->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
|
||||
|
||||
if( cfg->m_FootprintViewerAutoZoomOnSelect )
|
||||
toolOpt->SetState( wxAUI_BUTTON_STATE_CHECKED );
|
||||
@ -387,7 +386,7 @@ void FOOTPRINT_VIEWER_FRAME::doCloseWindow()
|
||||
// A workaround to avoid flicker, in modal mode when modview frame is destroyed,
|
||||
// when the aui toolbar is not docked (i.e. shown in a miniframe)
|
||||
// (useful on windows only)
|
||||
m_mainToolBar->SetFocus();
|
||||
m_tbTopMain->SetFocus();
|
||||
|
||||
GetCanvas()->StopDrawing();
|
||||
|
||||
@ -844,7 +843,7 @@ void FOOTPRINT_VIEWER_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
|
||||
if( GetCanvas() && GetCanvas()->GetView() )
|
||||
cfg->m_FootprintViewerZoom = GetCanvas()->GetView()->GetScale();
|
||||
|
||||
wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
|
||||
wxAuiToolBarItem* toolOpt = m_tbTopMain->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
|
||||
cfg->m_FootprintViewerAutoZoomOnSelect = ( toolOpt->GetState() & wxAUI_BUTTON_STATE_CHECKED );
|
||||
cfg->m_FootprintViewerLibListWidth = m_libList->GetSize().x;
|
||||
cfg->m_FootprintViewerFPListWidth = m_fpList->GetSize().x;
|
||||
@ -1096,7 +1095,7 @@ void FOOTPRINT_VIEWER_FRAME::updateView()
|
||||
|
||||
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
|
||||
|
||||
wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
|
||||
wxAuiToolBarItem* toolOpt = m_tbTopMain->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
|
||||
|
||||
if( toolOpt->GetState() & wxAUI_BUTTON_STATE_CHECKED )
|
||||
m_toolManager->RunAction( ACTIONS::zoomFitScreen );
|
||||
|
@ -87,6 +87,10 @@ public:
|
||||
|
||||
void HardRedraw() override;
|
||||
|
||||
// Toolbar defaults
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
protected:
|
||||
FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
|
||||
@ -119,10 +123,6 @@ private:
|
||||
void CloseFootprintViewer( wxCommandEvent& event );
|
||||
void OnExitKiCad( wxCommandEvent& event );
|
||||
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override;
|
||||
|
||||
void OnLibFilter( wxCommandEvent& aEvent );
|
||||
void OnFPFilter( wxCommandEvent& aEvent );
|
||||
void OnCharHook( wxKeyEvent& aEvent ) override;
|
||||
|
@ -151,8 +151,8 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||
m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );
|
||||
|
||||
// Create the toolbars
|
||||
ReCreateHToolbar();
|
||||
ReCreateVToolbar();
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
|
||||
// Create the parameters panel
|
||||
m_parametersPanel = new wxPanel( this, wxID_ANY );
|
||||
@ -186,7 +186,7 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6)
|
||||
.BestSize( -1, m_msgFrameHeight ) );
|
||||
|
||||
@ -569,57 +569,49 @@ void FOOTPRINT_WIZARD_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_WIZARD_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> FOOTPRINT_WIZARD_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// Set up toolbar
|
||||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_SELECT_WIZARD, wxEmptyString,
|
||||
KiBitmap( BITMAPS::module_wizard ),
|
||||
_( "Select wizard script to run" ) );
|
||||
// clang-format off
|
||||
/* TODO (ISM): Convert to action
|
||||
m_tbTopMain->AddTool( ID_FOOTPRINT_WIZARD_SELECT_WIZARD, wxEmptyString,
|
||||
KiBitmap( BITMAPS::module_wizard ),
|
||||
_( "Select wizard script to run" ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_RESET_TO_DEFAULT, wxEmptyString,
|
||||
KiBitmap( BITMAPS::reload ),
|
||||
_( "Reset wizard parameters to default") );
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Convert to action
|
||||
m_tbTopMain->AddTool( ID_FOOTPRINT_WIZARD_RESET_TO_DEFAULT, wxEmptyString,
|
||||
KiBitmap( BITMAPS::reload ),
|
||||
_( "Reset wizard parameters to default") );
|
||||
*/
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Convert to action
|
||||
m_tbTopMain->AddTool( ID_FOOTPRINT_WIZARD_PREVIOUS, wxEmptyString,
|
||||
KiBitmap( BITMAPS::lib_previous ),
|
||||
_( "Select previous parameters page" ) );
|
||||
m_tbTopMain->AddTool( ID_FOOTPRINT_WIZARD_NEXT, wxEmptyString,
|
||||
KiBitmap( BITMAPS::lib_next ),
|
||||
_( "Select next parameters page" ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_PREVIOUS, wxEmptyString,
|
||||
KiBitmap( BITMAPS::lib_previous ),
|
||||
_( "Select previous parameters page" ) );
|
||||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_NEXT, wxEmptyString,
|
||||
KiBitmap( BITMAPS::lib_next ),
|
||||
_( "Select next parameters page" ) );
|
||||
|
||||
#if 0 // Currently: the 3D viewer is not useful
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::show3DViewer );
|
||||
#endif
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen );
|
||||
|
||||
// The footprint wizard always can export the current footprint
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_DONE,
|
||||
wxEmptyString, KiBitmap( BITMAPS::export_footprint_names ),
|
||||
_( "Export footprint to editor" ) );
|
||||
config.AppendSeparator();
|
||||
/* TODO (ISM): Convert to action
|
||||
m_tbTopMain->AddTool( ID_FOOTPRINT_WIZARD_DONE,
|
||||
wxEmptyString, KiBitmap( BITMAPS::export_footprint_names ),
|
||||
_( "Export footprint to editor" ) );
|
||||
*/
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to
|
||||
// reflect the changes
|
||||
m_mainToolBar->Realize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
@ -629,11 +621,6 @@ BOARD_ITEM_CONTAINER* FOOTPRINT_WIZARD_FRAME::GetModel() const
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_WIZARD_FRAME::ReCreateVToolbar()
|
||||
{
|
||||
// Currently, there is no vertical toolbar
|
||||
}
|
||||
|
||||
void FOOTPRINT_WIZARD_FRAME::PythonPluginsReload()
|
||||
{
|
||||
// Reload the Python plugins
|
||||
|
@ -147,9 +147,10 @@ private:
|
||||
*/
|
||||
void DisplayWizardInfos();
|
||||
|
||||
// Toolbar defaults
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
|
||||
void doCloseWindow() override;
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ClickOnPageList( wxCommandEvent& event );
|
||||
|
||||
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
|
@ -54,6 +54,7 @@
|
||||
#include <project_pcb.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <zoom_defines.h>
|
||||
#include <pcb_layer_box_selector.h>
|
||||
|
||||
#include <math/vector2d.h>
|
||||
#include <math/vector2wx.h>
|
||||
@ -83,6 +84,7 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
|
||||
m_pcb( nullptr ),
|
||||
m_originTransforms( *this )
|
||||
{
|
||||
m_SelLayerBox = nullptr;
|
||||
m_watcherDebounceTimer.Bind( wxEVT_TIMER, &PCB_BASE_FRAME::OnFpChangeDebounceTimer, this );
|
||||
}
|
||||
|
||||
@ -1268,3 +1270,47 @@ void PCB_BASE_FRAME::OnFpChangeDebounceTimer( wxTimerEvent& aEvent )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PCB_BASE_FRAME::configureToolbars()
|
||||
{
|
||||
// Load the toolbar configuration and base controls
|
||||
EDA_DRAW_FRAME::configureToolbars();
|
||||
|
||||
// Layer selector
|
||||
auto layerSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelLayerBox )
|
||||
{
|
||||
m_SelLayerBox = new PCB_LAYER_BOX_SELECTOR( aToolbar,
|
||||
ID_TOOLBARH_PCB_SELECT_LAYER );
|
||||
m_SelLayerBox->SetBoardFrame( this );
|
||||
}
|
||||
|
||||
// In the footprint editor, some layers cannot be select (they are shown in the layer
|
||||
// manager only to set the color and visibility, but not for selection)
|
||||
// Disable them in layer box
|
||||
if( IsType( FRAME_FOOTPRINT_EDITOR ) )
|
||||
m_SelLayerBox->SetNotAllowedLayerSet( LSET::ForbiddenFootprintLayers() );
|
||||
|
||||
m_SelLayerBox->Resync();
|
||||
|
||||
aToolbar->Add( m_SelLayerBox );
|
||||
|
||||
// UI update handler for the control
|
||||
aToolbar->Bind( wxEVT_UPDATE_UI,
|
||||
[this]( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
if( m_SelLayerBox->GetCount() )
|
||||
{
|
||||
if( m_SelLayerBox->GetSelection() != GetActiveLayer() )
|
||||
m_SelLayerBox->SetSelection( GetActiveLayer() );
|
||||
}
|
||||
},
|
||||
m_SelLayerBox->GetId() );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( m_tbPcbLayerSelectorName, _( "Layer selector" ),
|
||||
_( "Control to select the layer" ),
|
||||
layerSelectorFactory );
|
||||
}
|
@ -184,7 +184,6 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
|
||||
PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event )
|
||||
|
||||
// User interface update event handlers.
|
||||
EVT_UPDATE_UI( ID_TOOLBARH_PCB_SELECT_LAYER, PCB_EDIT_FRAME::OnUpdateLayerSelectBox )
|
||||
EVT_UPDATE_UI( ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, PCB_EDIT_FRAME::OnUpdateSelectTrackWidth )
|
||||
EVT_UPDATE_UI( ID_AUX_TOOLBAR_PCB_VIA_SIZE, PCB_EDIT_FRAME::OnUpdateSelectViaSize )
|
||||
EVT_UPDATE_UI( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, PCB_EDIT_FRAME::OnUpdateSelectAutoWidth )
|
||||
@ -215,7 +214,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
m_showBorderAndTitleBlock = true; // true to display sheet references
|
||||
m_SelTrackWidthBox = nullptr;
|
||||
m_SelViaSizeBox = nullptr;
|
||||
m_SelLayerBox = nullptr;
|
||||
m_show_layer_manager_tools = true;
|
||||
m_supportsAutoSave = true;
|
||||
m_probingSchToPcb = false;
|
||||
@ -271,12 +269,9 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
setupTools();
|
||||
setupUIConditions();
|
||||
|
||||
configureToolbars();
|
||||
RecreateToolbars();
|
||||
ReCreateMenuBar();
|
||||
ReCreateHToolbar();
|
||||
ReCreateAuxiliaryToolbar();
|
||||
ReCreateVToolbar();
|
||||
ReCreateOptToolbar();
|
||||
|
||||
#ifdef KICAD_IPC_API
|
||||
wxTheApp->Bind( EDA_EVT_PLUGIN_AVAILABILITY_CHANGED,
|
||||
@ -309,18 +304,18 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
m_auimgr.SetFlags( auiFlags );
|
||||
|
||||
// Rows; layers 4 - 6
|
||||
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( wxS( "MainToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( wxS( "TopMainToolbar" ) )
|
||||
.Top().Layer( 6 ) );
|
||||
m_auimgr.AddPane( m_auxiliaryToolBar, EDA_PANE().HToolbar().Name( wxS( "AuxToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbTopAux, EDA_PANE().HToolbar().Name( wxS( "TopAuxToolbar" ) )
|
||||
.Top().Layer( 5 ) );
|
||||
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( wxS( "MsgPanel" ) )
|
||||
.Bottom().Layer( 6 ) );
|
||||
|
||||
// Columns; layers 1 - 3
|
||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( wxS( "OptToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbLeft, EDA_PANE().VToolbar().Name( wxS( "LeftToolbar" ) )
|
||||
.Left().Layer( 3 ) );
|
||||
|
||||
m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( wxS( "ToolsToolbar" ) )
|
||||
m_auimgr.AddPane( m_tbRight, EDA_PANE().VToolbar().Name( wxS( "RightToolbar" ) )
|
||||
.Right().Layer( 3 ) );
|
||||
|
||||
m_auimgr.AddPane( m_appearancePanel, EDA_PANE().Name( wxS( "LayersManager" ) )
|
||||
|
@ -49,7 +49,6 @@ class GENERAL_COLLECTORS_GUIDE;
|
||||
class SELECTION;
|
||||
class PCB_MARKER;
|
||||
class BOARD_ITEM;
|
||||
class PCB_LAYER_BOX_SELECTOR;
|
||||
class NETLIST;
|
||||
class REPORTER;
|
||||
struct PARSE_ERROR;
|
||||
@ -159,9 +158,6 @@ public:
|
||||
*/
|
||||
void ToPlotter( int aID );
|
||||
|
||||
// User interface update command event handlers.
|
||||
void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
|
||||
|
||||
bool LayerManagerShown();
|
||||
bool PropertiesShown();
|
||||
bool NetInspectorShown();
|
||||
@ -251,11 +247,7 @@ public:
|
||||
void Process_Special_Functions( wxCommandEvent& event );
|
||||
void Tracks_and_Vias_Size_Event( wxCommandEvent& event );
|
||||
|
||||
void ReCreateHToolbar() override;
|
||||
void ReCreateAuxiliaryToolbar() override;
|
||||
void ReCreateVToolbar() override;
|
||||
void ReCreateOptToolbar() override;
|
||||
void UpdateToolbarControlSizes() override;
|
||||
|
||||
|
||||
/**
|
||||
* Recreate the layer box by clearing the old list and building a new one from the new
|
||||
@ -734,6 +726,11 @@ public:
|
||||
|
||||
DIALOG_BOOK_REPORTER* GetFootprintDiffDialog();
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultLeftToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultRightToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
|
||||
std::optional<TOOLBAR_CONFIGURATION> DefaultTopAuxToolbarConfig() override;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
protected:
|
||||
@ -760,6 +757,8 @@ protected:
|
||||
|
||||
void doReCreateMenuBar() override;
|
||||
|
||||
void configureToolbars() override;
|
||||
|
||||
// The Tool Framework initialization
|
||||
void setupTools();
|
||||
void setupUIConditions() override;
|
||||
@ -777,9 +776,9 @@ protected:
|
||||
void buildActionPluginMenus( ACTION_MENU* aActionMenu );
|
||||
|
||||
/**
|
||||
* Append action plugin buttons to main toolbar
|
||||
* Append action plugin buttons to given toolbar
|
||||
*/
|
||||
void AddActionPluginTools();
|
||||
void addActionPluginTools( ACTION_TOOLBAR* aToolbar );
|
||||
|
||||
/**
|
||||
* Execute action plugin's Run() method and updates undo buffer.
|
||||
@ -847,8 +846,6 @@ protected:
|
||||
#endif
|
||||
|
||||
public:
|
||||
PCB_LAYER_BOX_SELECTOR* m_SelLayerBox; // a combo box to display and select active layer
|
||||
|
||||
wxChoice* m_SelTrackWidthBox; // a choice box to display and select current track width
|
||||
wxChoice* m_SelViaSizeBox; // a choice box to display and select current via diameter
|
||||
|
||||
|
@ -501,7 +501,7 @@ void PCB_EDIT_FRAME::buildActionPluginMenus( ACTION_MENU* actionMenu )
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::AddActionPluginTools()
|
||||
void PCB_EDIT_FRAME::addActionPluginTools( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
bool need_separator = true;
|
||||
const std::vector<LEGACY_OR_API_PLUGIN>& orderedPlugins = GetOrderedActionPlugins();
|
||||
@ -518,7 +518,7 @@ void PCB_EDIT_FRAME::AddActionPluginTools()
|
||||
{
|
||||
if( need_separator )
|
||||
{
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
aToolbar->AddScaledSeparator( this );
|
||||
need_separator = false;
|
||||
}
|
||||
|
||||
@ -530,7 +530,7 @@ void PCB_EDIT_FRAME::AddActionPluginTools()
|
||||
else
|
||||
bitmap = KiScaledBitmap( BITMAPS::puzzle_piece, this );
|
||||
|
||||
wxAuiToolBarItem* button = m_mainToolBar->AddTool( wxID_ANY, wxEmptyString,
|
||||
wxAuiToolBarItem* button = aToolbar->AddTool( wxID_ANY, wxEmptyString,
|
||||
bitmap, ap->GetName() );
|
||||
|
||||
Connect( button->GetId(), wxEVT_COMMAND_MENU_SELECTED,
|
||||
|
@ -34,173 +34,85 @@
|
||||
#include <wx/wupdlock.h>
|
||||
#include <advanced_config.h>
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> FOOTPRINT_EDIT_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
// Note:
|
||||
// To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
|
||||
// all wxAuiToolBarItems.
|
||||
// However the wxAuiToolBarItems are not the owners of controls managed by
|
||||
// them ( m_zoomSelectBox and m_gridSelectBox ), and therefore do not delete them
|
||||
// So we do not recreate them after clearing the tools.
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::toggleGridOverrides )
|
||||
.AppendAction( PCB_ACTIONS::togglePolarCoords )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
// Set up toolbar
|
||||
m_mainToolBar->Add( PCB_ACTIONS::newFootprint );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::createFootprint );
|
||||
m_mainToolBar->Add( ACTIONS::save );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::toggleHV45Mode );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::print );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::padDisplayMode )
|
||||
.AppendAction( PCB_ACTIONS::graphicsOutlines )
|
||||
.AppendAction( PCB_ACTIONS::textOutlines )
|
||||
.AppendAction( ACTIONS::highContrastMode );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::undo );
|
||||
m_mainToolBar->Add( ACTIONS::redo );
|
||||
if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
|
||||
config.AppendAction( ACTIONS::toggleBoundingBoxes );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showLibraryTree )
|
||||
.AppendAction( PCB_ACTIONS::showLayersManager )
|
||||
.AppendAction( ACTIONS::showProperties );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::rotateCcw );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::rotateCw );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::mirrorH );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::mirrorV );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::group );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::ungroup );
|
||||
/* TODO (ISM): Implement context menus
|
||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||
std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
gridMenu->Add( ACTIONS::gridProperties );
|
||||
gridMenu->Add( ACTIONS::gridOrigin );
|
||||
m_tbLeft->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::footprintProperties );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::defaultPadProperties );
|
||||
m_mainToolBar->Add( ACTIONS::showDatasheet );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::checkFootprint );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->AddTool( ID_LOAD_FOOTPRINT_FROM_BOARD, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::import_brd_file, this ),
|
||||
_( "Load footprint from current board" ) );
|
||||
|
||||
m_mainToolBar->AddTool( ID_ADD_FOOTPRINT_TO_BOARD, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::insert_module_board, this ),
|
||||
_( "Insert footprint into current board" ) );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
// Grid selection choice box.
|
||||
if( m_gridSelectBox == nullptr )
|
||||
m_gridSelectBox = new wxChoice( m_mainToolBar, ID_ON_GRID_SELECT,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
|
||||
UpdateGridSelectBox();
|
||||
m_mainToolBar->AddControl( m_gridSelectBox );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
// Zoom selection choice box.
|
||||
if( m_zoomSelectBox == nullptr )
|
||||
m_zoomSelectBox = new wxChoice( m_mainToolBar, ID_ON_ZOOM_SELECT,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
|
||||
UpdateZoomSelectBox();
|
||||
m_mainToolBar->AddControl( m_zoomSelectBox );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( 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 );
|
||||
|
||||
// Some layers cannot be select (they are shown in the layer manager
|
||||
// only to set the color and visibility, but not for selection)
|
||||
// Disable them in layer box
|
||||
m_selLayerBox->SetNotAllowedLayerSet( LSET::ForbiddenFootprintLayers() );
|
||||
m_selLayerBox->Resync();
|
||||
}
|
||||
|
||||
ReCreateLayerBox( false );
|
||||
m_mainToolBar->AddControl( m_selLayerBox );
|
||||
|
||||
// Go through and ensure the comboboxes are the correct size, since the strings in the
|
||||
// box could have changed widths.
|
||||
m_mainToolBar->UpdateControlWidth( ID_TOOLBARH_PCB_SELECT_LAYER );
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::ReCreateVToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> FOOTPRINT_EDIT_FRAME::DefaultRightToolbarConfig()
|
||||
{
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
|
||||
if( m_drawToolBar )
|
||||
{
|
||||
m_drawToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_drawToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
// Groups contained on this toolbar
|
||||
static ACTION_GROUP* dimensionGroup = nullptr;
|
||||
|
||||
if( !dimensionGroup )
|
||||
{
|
||||
dimensionGroup = new ACTION_GROUP( "group.pcbDimensions",
|
||||
{ &PCB_ACTIONS::drawOrthogonalDimension,
|
||||
&PCB_ACTIONS::drawAlignedDimension,
|
||||
&PCB_ACTIONS::drawCenterDimension,
|
||||
&PCB_ACTIONS::drawRadialDimension,
|
||||
&PCB_ACTIONS::drawLeader } );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool );
|
||||
config.AppendAction( ACTIONS::selectionTool );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::placePad );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawRuleArea );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::placePad )
|
||||
.AppendAction( PCB_ACTIONS::drawRuleArea );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawLine );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawArc );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawRectangle );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawCircle );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawPolygon );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawBezier );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::placeReferenceImage );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::placeText );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawTextBox );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawTable );
|
||||
m_drawToolBar->AddGroup( dimensionGroup, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( ACTIONS::deleteTool );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::drawLine )
|
||||
.AppendAction( PCB_ACTIONS::drawArc )
|
||||
.AppendAction( PCB_ACTIONS::drawRectangle )
|
||||
.AppendAction( PCB_ACTIONS::drawCircle )
|
||||
.AppendAction( PCB_ACTIONS::drawPolygon )
|
||||
.AppendAction( PCB_ACTIONS::drawBezier )
|
||||
.AppendAction( PCB_ACTIONS::placeReferenceImage )
|
||||
.AppendAction( PCB_ACTIONS::placeText )
|
||||
.AppendAction( PCB_ACTIONS::drawTextBox )
|
||||
.AppendAction( PCB_ACTIONS::drawTable )
|
||||
.AppendGroup( TOOLBAR_GROUP_CONFIG( "group.pcbDimensions" )
|
||||
.AddAction( PCB_ACTIONS::drawOrthogonalDimension )
|
||||
.AddAction( PCB_ACTIONS::drawAlignedDimension )
|
||||
.AddAction( PCB_ACTIONS::drawCenterDimension )
|
||||
.AddAction( PCB_ACTIONS::drawRadialDimension )
|
||||
.AddAction( PCB_ACTIONS::drawLeader ) )
|
||||
.AppendAction( ACTIONS::deleteTool );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::setAnchor );
|
||||
m_drawToolBar->Add( ACTIONS::gridSetOrigin );
|
||||
m_drawToolBar->Add( ACTIONS::measureTool );
|
||||
// clang-format on
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::setAnchor )
|
||||
.AppendAction( ACTIONS::gridSetOrigin )
|
||||
.AppendAction( ACTIONS::measureTool );
|
||||
|
||||
/* TODO (ISM): Implement context menus
|
||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||
|
||||
auto makeArcMenu = [&]()
|
||||
@ -213,87 +125,87 @@ void FOOTPRINT_EDIT_FRAME::ReCreateVToolbar()
|
||||
return arcMenu;
|
||||
};
|
||||
|
||||
m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawArc, makeArcMenu() );
|
||||
m_tbRight->AddToolContextMenu( PCB_ACTIONS::drawArc, makeArcMenu() );
|
||||
*/
|
||||
|
||||
m_drawToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::ReCreateOptToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> FOOTPRINT_EDIT_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR, wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGridOverrides );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::togglePolarCoords );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
// clang-format off
|
||||
config.AppendAction( PCB_ACTIONS::newFootprint )
|
||||
.AppendAction( PCB_ACTIONS::createFootprint )
|
||||
.AppendAction( ACTIONS::save );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::toggleHV45Mode );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::print );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::padDisplayMode );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::graphicsOutlines );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::textOutlines );
|
||||
m_optionsToolBar->Add( ACTIONS::highContrastMode );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::undo )
|
||||
.AppendAction( ACTIONS::redo );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
|
||||
m_optionsToolBar->Add( ACTIONS::toggleBoundingBoxes );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( ACTIONS::showLibraryTree );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::showLayersManager );
|
||||
m_optionsToolBar->Add( ACTIONS::showProperties );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::rotateCcw )
|
||||
.AppendAction( PCB_ACTIONS::rotateCw )
|
||||
.AppendAction( PCB_ACTIONS::mirrorH )
|
||||
.AppendAction( PCB_ACTIONS::mirrorV )
|
||||
.AppendAction( PCB_ACTIONS::group )
|
||||
.AppendAction( PCB_ACTIONS::ungroup );
|
||||
|
||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||
std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
gridMenu->Add( ACTIONS::gridProperties );
|
||||
gridMenu->Add( ACTIONS::gridOrigin );
|
||||
m_optionsToolBar->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::footprintProperties )
|
||||
.AppendAction( PCB_ACTIONS::defaultPadProperties )
|
||||
.AppendAction( ACTIONS::showDatasheet )
|
||||
.AppendAction( PCB_ACTIONS::checkFootprint );
|
||||
|
||||
m_optionsToolBar->KiRealize();
|
||||
}
|
||||
config.AppendSeparator();
|
||||
|
||||
/* TODO (ISM): Implement these as actions
|
||||
m_tbTopMain->AddTool( ID_LOAD_FOOTPRINT_FROM_BOARD, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::import_brd_file, this ),
|
||||
_( "Load footprint from current board" ) );
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::UpdateToolbarControlSizes()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
// Update the item widths
|
||||
m_mainToolBar->UpdateControlWidth( ID_TOOLBARH_PCB_SELECT_LAYER );
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
m_mainToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
}
|
||||
m_tbTopMain->AddTool( ID_ADD_FOOTPRINT_TO_BOARD, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::insert_module_board, this ),
|
||||
_( "Insert footprint into current board" ) );
|
||||
*/
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbGridSelectName );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbZoomSelectName );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbPcbLayerSelectorName );
|
||||
|
||||
ReCreateLayerBox( false );
|
||||
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar )
|
||||
{
|
||||
if( m_selLayerBox == nullptr || m_mainToolBar == nullptr )
|
||||
if( !m_SelLayerBox )
|
||||
return;
|
||||
|
||||
m_selLayerBox->SetToolTip( _( "+/- to switch" ) );
|
||||
m_selLayerBox->Resync();
|
||||
m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
|
||||
m_SelLayerBox->Resync();
|
||||
|
||||
if( aForceResizeToolbar )
|
||||
UpdateToolbarControlSizes();
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_EDIT_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
m_selLayerBox->SetLayerSelection( GetActiveLayer() );
|
||||
}
|
||||
|
@ -35,127 +35,82 @@
|
||||
#include <wx/choice.h>
|
||||
|
||||
|
||||
void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> FOOTPRINT_VIEWER_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
// Note:
|
||||
// To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
|
||||
// all wxAuiToolBarItems.
|
||||
// However the wxAuiToolBarItems are not the owners of controls managed by
|
||||
// them ( m_zoomSelectBox and m_gridSelectBox ), and therefore do not delete them
|
||||
// So we do not recreate them after clearing the tools.
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
// clang-format off
|
||||
/* TODO (ISM): Convert to actions
|
||||
m_tbTopMain->AddTool( ID_MODVIEW_PREVIOUS, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_previous, this ),
|
||||
_( "Display previous footprint" ) );
|
||||
m_tbTopMain->AddTool( ID_MODVIEW_NEXT, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_next, this ),
|
||||
_( "Display next footprint" ) );
|
||||
*/
|
||||
|
||||
// Set up toolbar
|
||||
m_mainToolBar->AddTool( ID_MODVIEW_PREVIOUS, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_previous, this ),
|
||||
_( "Display previous footprint" ) );
|
||||
m_mainToolBar->AddTool( ID_MODVIEW_NEXT, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::lib_next, this ),
|
||||
_( "Display next footprint" ) );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::show3DViewer );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::show3DViewer );
|
||||
m_mainToolBar->AddTool( ID_ADD_FOOTPRINT_TO_BOARD, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::insert_module_board, this ),
|
||||
_( "Insert footprint in board" ) );
|
||||
/* TODO (ISM): Convert to action
|
||||
m_tbTopMain->AddTool( ID_ADD_FOOTPRINT_TO_BOARD, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::insert_module_board, this ),
|
||||
_( "Insert footprint in board" ) );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbGridSelectName );
|
||||
|
||||
// Grid selection choice box.
|
||||
if( m_gridSelectBox == nullptr )
|
||||
{
|
||||
m_gridSelectBox = new wxChoice( m_mainToolBar, ID_ON_GRID_SELECT, wxDefaultPosition,
|
||||
wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
UpdateGridSelectBox();
|
||||
m_mainToolBar->AddControl( m_gridSelectBox );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
// Zoom selection choice box.
|
||||
if( m_zoomSelectBox == nullptr )
|
||||
{
|
||||
m_zoomSelectBox = new wxChoice( m_mainToolBar, ID_ON_ZOOM_SELECT, wxDefaultPosition,
|
||||
wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
UpdateZoomSelectBox();
|
||||
m_mainToolBar->AddControl( m_zoomSelectBox );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbZoomSelectName );
|
||||
|
||||
// Option to run Zoom automatique on footprint selection change
|
||||
m_mainToolBar->AddTool( ID_FPVIEWER_AUTOZOOM_TOOL, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::zoom_auto_fit_in_page, this ),
|
||||
_( "Automatic Zoom on footprint change" ),
|
||||
wxITEM_CHECK );
|
||||
/* TODO (ISM): Convert to action
|
||||
m_tbTopMain->AddTool( ID_FPVIEWER_AUTOZOOM_TOOL, wxEmptyString,
|
||||
KiScaledBitmap( BITMAPS::zoom_auto_fit_in_page, this ),
|
||||
_( "Automatic Zoom on footprint change" ),
|
||||
wxITEM_CHECK );
|
||||
*/
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to
|
||||
// reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_VIEWER_FRAME::ReCreateOptToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> FOOTPRINT_VIEWER_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR, wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::selectionTool );
|
||||
m_optionsToolBar->Add( ACTIONS::measureTool );
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::selectionTool )
|
||||
.AppendAction( ACTIONS::measureTool );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::togglePolarCoords );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::togglePolarCoords )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::showPadNumbers );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::padDisplayMode );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::textOutlines );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::graphicsOutlines );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::showPadNumbers )
|
||||
.AppendAction( PCB_ACTIONS::padDisplayMode )
|
||||
.AppendAction( PCB_ACTIONS::textOutlines )
|
||||
.AppendAction( PCB_ACTIONS::graphicsOutlines );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
|
||||
m_optionsToolBar->Add( ACTIONS::toggleBoundingBoxes );
|
||||
config.AppendAction( ACTIONS::toggleBoundingBoxes );
|
||||
|
||||
m_optionsToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINT_VIEWER_FRAME::ReCreateVToolbar()
|
||||
{
|
||||
// This toolbar is not currently used
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
*/
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <advanced_config.h>
|
||||
#include <api/api_plugin_manager.h>
|
||||
@ -108,286 +109,124 @@ void PCB_EDIT_FRAME::PrepareLayerIndicator( bool aForceRebuild )
|
||||
LayerPairBitmap = LAYER_PRESENTATION::CreateLayerPairIcon( background_color, top_color,
|
||||
bottom_color, scale );
|
||||
|
||||
if( m_auxiliaryToolBar )
|
||||
if( m_tbTopAux )
|
||||
{
|
||||
m_auxiliaryToolBar->SetToolBitmap( PCB_ACTIONS::selectLayerPair, *LayerPairBitmap );
|
||||
m_auxiliaryToolBar->Refresh();
|
||||
m_tbTopAux->SetToolBitmap( PCB_ACTIONS::selectLayerPair, *LayerPairBitmap );
|
||||
m_tbTopAux->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::ReCreateHToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> PCB_EDIT_FRAME::DefaultLeftToolbarConfig()
|
||||
{
|
||||
// Note:
|
||||
// To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
|
||||
// all wxAuiToolBarItems.
|
||||
// However the wxAuiToolBarItems are not the owners of controls managed by
|
||||
// them and therefore do not delete them
|
||||
// So we do not recreate them after clearing the tools.
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
// clang-format off
|
||||
config.AppendAction( ACTIONS::toggleGrid )
|
||||
.AppendAction( ACTIONS::toggleGridOverrides )
|
||||
.AppendAction( PCB_ACTIONS::togglePolarCoords )
|
||||
.AppendAction( ACTIONS::inchesUnits )
|
||||
.AppendAction( ACTIONS::milsUnits )
|
||||
.AppendAction( ACTIONS::millimetersUnits )
|
||||
.AppendAction( ACTIONS::toggleCursorStyle );
|
||||
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
m_mainToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mainToolBar = new ACTION_TOOLBAR( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT |
|
||||
wxAUI_TB_HORIZONTAL );
|
||||
m_mainToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::toggleHV45Mode );
|
||||
|
||||
// Set up toolbar
|
||||
if( Kiface().IsSingle() )
|
||||
{
|
||||
m_mainToolBar->Add( ACTIONS::doNew );
|
||||
m_mainToolBar->Add( ACTIONS::open );
|
||||
}
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::showRatsnest )
|
||||
.AppendAction( PCB_ACTIONS::ratsnestLineMode );
|
||||
|
||||
m_mainToolBar->Add( ACTIONS::save );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::highContrastMode )
|
||||
.AppendAction( PCB_ACTIONS::toggleNetHighlight );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::boardSetup );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::pageSettings );
|
||||
m_mainToolBar->Add( ACTIONS::print );
|
||||
m_mainToolBar->Add( ACTIONS::plot );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::undo );
|
||||
m_mainToolBar->Add( ACTIONS::redo );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::find );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::zoomRedraw );
|
||||
m_mainToolBar->Add( ACTIONS::zoomInCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomOutCenter );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitScreen );
|
||||
m_mainToolBar->Add( ACTIONS::zoomFitObjects );
|
||||
m_mainToolBar->Add( ACTIONS::zoomTool );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::rotateCcw );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::rotateCw );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::mirrorV );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::mirrorH );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::group );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::ungroup );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::lock );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::unlock );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( ACTIONS::showFootprintEditor );
|
||||
m_mainToolBar->Add( ACTIONS::showFootprintBrowser );
|
||||
m_mainToolBar->Add( ACTIONS::show3DViewer );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( !Kiface().IsSingle() )
|
||||
m_mainToolBar->Add( ACTIONS::updatePcbFromSchematic );
|
||||
else
|
||||
m_mainToolBar->Add( PCB_ACTIONS::importNetlist );
|
||||
|
||||
m_mainToolBar->Add( PCB_ACTIONS::runDRC );
|
||||
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
m_mainToolBar->Add( PCB_ACTIONS::showEeschema );
|
||||
|
||||
// Add SWIG and API plugins
|
||||
bool scriptingAvailable = SCRIPTING::IsWxAvailable();
|
||||
#ifdef KICAD_IPC_API
|
||||
bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server &&
|
||||
!Pgm().GetPluginManager().GetActionsForScope( PLUGIN_ACTION_SCOPE::PCB ).empty();
|
||||
#else
|
||||
bool haveApiPlugins = false;
|
||||
#endif
|
||||
|
||||
if( scriptingAvailable || haveApiPlugins )
|
||||
{
|
||||
m_mainToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( scriptingAvailable )
|
||||
{
|
||||
m_mainToolBar->Add( PCB_ACTIONS::showPythonConsole, ACTION_TOOLBAR::TOGGLE );
|
||||
AddActionPluginTools();
|
||||
}
|
||||
|
||||
if( haveApiPlugins )
|
||||
addApiPluginTools();
|
||||
}
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize() to reflect the changes
|
||||
m_mainToolBar->KiRealize();
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::ReCreateOptToolbar()
|
||||
{
|
||||
// Note:
|
||||
// To rebuild the aui toolbar, the more easy way is to clear ( calling m_mainToolBar.Clear() )
|
||||
// all wxAuiToolBarItems.
|
||||
// However the wxAuiToolBarItems are not the owners of controls managed by
|
||||
// them and therefore do not delete them
|
||||
// So we do not recreate them after clearing the tools.
|
||||
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
|
||||
if( m_optionsToolBar )
|
||||
{
|
||||
m_optionsToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_optionsToolBar = new ACTION_TOOLBAR( this, ID_OPT_TOOLBAR,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_optionsToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGrid );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleGridOverrides );
|
||||
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::togglePolarCoords );
|
||||
m_optionsToolBar->Add( ACTIONS::inchesUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::milsUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits );
|
||||
m_optionsToolBar->Add( ACTIONS::toggleCursorStyle );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::toggleHV45Mode );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::showRatsnest );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::ratsnestLineMode );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( ACTIONS::highContrastMode );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::toggleNetHighlight );
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::zoneDisplayFilled );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::zoneDisplayOutline );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::zoneDisplayFilled )
|
||||
.AppendAction( PCB_ACTIONS::zoneDisplayOutline );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_ExtraZoneDisplayModes )
|
||||
{
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::zoneDisplayFractured );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::zoneDisplayTriangulated );
|
||||
config.AppendAction( PCB_ACTIONS::zoneDisplayFractured );
|
||||
config.AppendAction( PCB_ACTIONS::zoneDisplayTriangulated );
|
||||
}
|
||||
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::padDisplayMode );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::viaDisplayMode );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::trackDisplayMode );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::padDisplayMode )
|
||||
.AppendAction( PCB_ACTIONS::viaDisplayMode )
|
||||
.AppendAction( PCB_ACTIONS::trackDisplayMode );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
|
||||
m_optionsToolBar->Add( ACTIONS::toggleBoundingBoxes );
|
||||
config.AppendAction( ACTIONS::toggleBoundingBoxes );
|
||||
|
||||
// Tools to show/hide toolbars:
|
||||
m_optionsToolBar->AddScaledSeparator( this );
|
||||
m_optionsToolBar->Add( PCB_ACTIONS::showLayersManager );
|
||||
m_optionsToolBar->Add( ACTIONS::showProperties );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::showLayersManager )
|
||||
.AppendAction( ACTIONS::showProperties );
|
||||
|
||||
/* TODO (ISM): Support context menus in toolbars
|
||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||
std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
gridMenu->Add( ACTIONS::gridProperties );
|
||||
gridMenu->Add( ACTIONS::gridOrigin );
|
||||
m_optionsToolBar->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
m_tbLeft->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
|
||||
*/
|
||||
|
||||
m_optionsToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::ReCreateVToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> PCB_EDIT_FRAME::DefaultRightToolbarConfig()
|
||||
{
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
|
||||
if( m_drawToolBar )
|
||||
{
|
||||
m_drawToolBar->ClearToolbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
m_drawToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
|
||||
// Groups contained on this toolbar
|
||||
static ACTION_GROUP* dimensionGroup = nullptr;
|
||||
static ACTION_GROUP* originGroup = nullptr;
|
||||
static ACTION_GROUP* routingGroup = nullptr;
|
||||
static ACTION_GROUP* tuneGroup = nullptr;
|
||||
|
||||
if( !dimensionGroup )
|
||||
{
|
||||
dimensionGroup = new ACTION_GROUP( "group.pcbDimensions",
|
||||
{ &PCB_ACTIONS::drawOrthogonalDimension,
|
||||
&PCB_ACTIONS::drawAlignedDimension,
|
||||
&PCB_ACTIONS::drawCenterDimension,
|
||||
&PCB_ACTIONS::drawRadialDimension,
|
||||
&PCB_ACTIONS::drawLeader } );
|
||||
}
|
||||
|
||||
if( !originGroup )
|
||||
{
|
||||
originGroup = new ACTION_GROUP( "group.pcbOrigins",
|
||||
{ &ACTIONS::gridSetOrigin,
|
||||
&PCB_ACTIONS::drillOrigin } );
|
||||
}
|
||||
|
||||
if( !routingGroup )
|
||||
{
|
||||
routingGroup = new ACTION_GROUP( "group.pcbRouting",
|
||||
{ &PCB_ACTIONS::routeSingleTrack,
|
||||
&PCB_ACTIONS::routeDiffPair } );
|
||||
}
|
||||
|
||||
if( !tuneGroup )
|
||||
{
|
||||
tuneGroup = new ACTION_GROUP( "group.pcbTune",
|
||||
{ &PCB_ACTIONS::tuneSingleTrack,
|
||||
&PCB_ACTIONS::tuneDiffPair,
|
||||
&PCB_ACTIONS::tuneSkew } );
|
||||
}
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::localRatsnestTool );
|
||||
config.AppendAction( ACTIONS::selectionTool )
|
||||
.AppendAction( PCB_ACTIONS::localRatsnestTool );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::placeFootprint );
|
||||
m_drawToolBar->AddGroup( routingGroup, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->AddGroup( tuneGroup, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawVia );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawZone );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawRuleArea );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::placeFootprint )
|
||||
.AppendGroup( TOOLBAR_GROUP_CONFIG( "group.pcbRouting" )
|
||||
.AddAction( PCB_ACTIONS::routeSingleTrack )
|
||||
.AddAction( PCB_ACTIONS::routeDiffPair ) )
|
||||
.AppendGroup( TOOLBAR_GROUP_CONFIG( "group.pcbTune" )
|
||||
.AddAction( PCB_ACTIONS::tuneSingleTrack )
|
||||
.AddAction( PCB_ACTIONS::tuneDiffPair )
|
||||
.AddAction( PCB_ACTIONS::tuneSkew ) )
|
||||
.AppendAction( PCB_ACTIONS::drawVia )
|
||||
.AppendAction( PCB_ACTIONS::drawZone )
|
||||
.AppendAction( PCB_ACTIONS::drawRuleArea );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawLine );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawArc );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawRectangle );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawCircle );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawPolygon );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawBezier );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::placeReferenceImage );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::placeText );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawTextBox );
|
||||
m_drawToolBar->Add( PCB_ACTIONS::drawTable );
|
||||
m_drawToolBar->AddGroup( dimensionGroup, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( ACTIONS::deleteTool );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::drawLine )
|
||||
.AppendAction( PCB_ACTIONS::drawArc )
|
||||
.AppendAction( PCB_ACTIONS::drawRectangle )
|
||||
.AppendAction( PCB_ACTIONS::drawCircle )
|
||||
.AppendAction( PCB_ACTIONS::drawPolygon )
|
||||
.AppendAction( PCB_ACTIONS::drawBezier )
|
||||
.AppendAction( PCB_ACTIONS::placeReferenceImage )
|
||||
.AppendAction( PCB_ACTIONS::placeText )
|
||||
.AppendAction( PCB_ACTIONS::drawTextBox )
|
||||
.AppendAction( PCB_ACTIONS::drawTable )
|
||||
.AppendGroup( TOOLBAR_GROUP_CONFIG( "group.pcbDimensions" )
|
||||
.AddAction( PCB_ACTIONS::drawOrthogonalDimension )
|
||||
.AddAction( PCB_ACTIONS::drawAlignedDimension )
|
||||
.AddAction( PCB_ACTIONS::drawCenterDimension )
|
||||
.AddAction( PCB_ACTIONS::drawRadialDimension )
|
||||
.AddAction( PCB_ACTIONS::drawLeader ) )
|
||||
.AppendAction( ACTIONS::deleteTool );
|
||||
|
||||
m_drawToolBar->AddScaledSeparator( this );
|
||||
m_drawToolBar->AddGroup( originGroup, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( ACTIONS::measureTool );
|
||||
// clang-format on
|
||||
config.AppendSeparator()
|
||||
.AppendGroup( TOOLBAR_GROUP_CONFIG( "group.pcbOrigins" )
|
||||
.AddAction( ACTIONS::gridSetOrigin )
|
||||
.AddAction( PCB_ACTIONS::tuneDiffPair )
|
||||
.AddAction( PCB_ACTIONS::drillOrigin ) )
|
||||
.AppendAction( ACTIONS::measureTool );
|
||||
|
||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||
/* TODO (ISM): Support context menus
|
||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||
|
||||
auto makeArcMenu = [&]()
|
||||
{
|
||||
@ -399,7 +238,7 @@ void PCB_EDIT_FRAME::ReCreateVToolbar()
|
||||
return arcMenu;
|
||||
};
|
||||
|
||||
m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawArc, makeArcMenu() );
|
||||
m_tbRight->AddToolContextMenu( PCB_ACTIONS::drawArc, makeArcMenu() );
|
||||
|
||||
auto makeRouteMenu = [&]()
|
||||
{
|
||||
@ -415,132 +254,206 @@ void PCB_EDIT_FRAME::ReCreateVToolbar()
|
||||
return routeMenu;
|
||||
};
|
||||
|
||||
m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::routeSingleTrack, makeRouteMenu() );
|
||||
m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::routeDiffPair, makeRouteMenu() );
|
||||
m_tbRight->AddToolContextMenu( PCB_ACTIONS::routeSingleTrack, makeRouteMenu() );
|
||||
m_tbRight->AddToolContextMenu( PCB_ACTIONS::routeDiffPair, makeRouteMenu() );
|
||||
|
||||
std::unique_ptr<ACTION_MENU> zoneMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
zoneMenu->Add( PCB_ACTIONS::zoneFillAll );
|
||||
zoneMenu->Add( PCB_ACTIONS::zoneUnfillAll );
|
||||
m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawZone, std::move( zoneMenu ) );
|
||||
m_tbRight->AddToolContextMenu( PCB_ACTIONS::drawZone, std::move( zoneMenu ) );
|
||||
|
||||
std::unique_ptr<ACTION_MENU> lineMenu = std::make_unique<ACTION_MENU>( false, selTool );
|
||||
m_drawToolBar->AddToolContextMenu( PCB_ACTIONS::drawLine, std::move( lineMenu ) );
|
||||
m_tbRight->AddToolContextMenu( PCB_ACTIONS::drawLine, std::move( lineMenu ) );
|
||||
*/
|
||||
|
||||
m_drawToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar()
|
||||
std::optional<TOOLBAR_CONFIGURATION> PCB_EDIT_FRAME::DefaultTopMainToolbarConfig()
|
||||
{
|
||||
wxWindowUpdateLocker dummy( this );
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
if( m_auxiliaryToolBar )
|
||||
// clang-format off
|
||||
if( Kiface().IsSingle() )
|
||||
{
|
||||
m_auxiliaryToolBar->ClearToolbar();
|
||||
config.AppendAction( ACTIONS::doNew );
|
||||
config.AppendAction( ACTIONS::open );
|
||||
}
|
||||
|
||||
config.AppendAction( ACTIONS::save );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::boardSetup );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::pageSettings )
|
||||
.AppendAction( ACTIONS::print )
|
||||
.AppendAction( ACTIONS::plot );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::undo )
|
||||
.AppendAction( ACTIONS::redo );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::find );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::zoomRedraw )
|
||||
.AppendAction( ACTIONS::zoomInCenter )
|
||||
.AppendAction( ACTIONS::zoomOutCenter )
|
||||
.AppendAction( ACTIONS::zoomFitScreen )
|
||||
.AppendAction( ACTIONS::zoomFitObjects )
|
||||
.AppendAction( ACTIONS::zoomTool );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::rotateCcw )
|
||||
.AppendAction( PCB_ACTIONS::rotateCw )
|
||||
.AppendAction( PCB_ACTIONS::mirrorV )
|
||||
.AppendAction( PCB_ACTIONS::mirrorH )
|
||||
.AppendAction( PCB_ACTIONS::group )
|
||||
.AppendAction( PCB_ACTIONS::ungroup )
|
||||
.AppendAction( PCB_ACTIONS::lock )
|
||||
.AppendAction( PCB_ACTIONS::unlock );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( ACTIONS::showFootprintEditor )
|
||||
.AppendAction( ACTIONS::showFootprintBrowser )
|
||||
.AppendAction( ACTIONS::show3DViewer );
|
||||
|
||||
config.AppendSeparator();
|
||||
|
||||
if( !Kiface().IsSingle() )
|
||||
config.AppendAction( ACTIONS::updatePcbFromSchematic );
|
||||
else
|
||||
{
|
||||
m_auxiliaryToolBar = new ACTION_TOOLBAR( this, ID_AUX_TOOLBAR, wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
|
||||
m_auxiliaryToolBar->SetAuiManager( &m_auimgr );
|
||||
}
|
||||
config.AppendAction( PCB_ACTIONS::importNetlist );
|
||||
|
||||
/* Set up toolbar items */
|
||||
config.AppendAction( PCB_ACTIONS::runDRC );
|
||||
|
||||
// Creates box to display and choose tracks widths:
|
||||
if( m_SelTrackWidthBox == nullptr )
|
||||
m_SelTrackWidthBox = new wxChoice( m_auxiliaryToolBar, ID_AUX_TOOLBAR_PCB_TRACK_WIDTH,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
config.AppendSeparator()
|
||||
.AppendAction( PCB_ACTIONS::showEeschema );
|
||||
|
||||
UpdateTrackWidthSelectBox( m_SelTrackWidthBox, true, true );
|
||||
m_auxiliaryToolBar->AddControl( m_SelTrackWidthBox );
|
||||
m_SelTrackWidthBox->SetToolTip( _( "Select the default width for new tracks. Note that this "
|
||||
"width can be overridden by the board minimum width, or by "
|
||||
"the width of an existing track if the 'Use Existing Track "
|
||||
"Width' feature is enabled." ) );
|
||||
config.AppendControl( "control.PCBPlugin" );
|
||||
|
||||
m_auxiliaryToolBar->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, wxEmptyString,
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
std::optional<TOOLBAR_CONFIGURATION> PCB_EDIT_FRAME::DefaultTopAuxToolbarConfig()
|
||||
{
|
||||
TOOLBAR_CONFIGURATION config;
|
||||
|
||||
// clang-format off
|
||||
config.AppendControl( "control.PCBTrackWidth" );
|
||||
|
||||
/* TODO (ISM): Turn this into an action
|
||||
m_tbTopAux->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, wxEmptyString,
|
||||
KiBitmapBundle( BITMAPS::auto_track_width ),
|
||||
_( "When routing from an existing track use its width instead "
|
||||
"of the current width setting" ),
|
||||
wxITEM_CHECK );
|
||||
*/
|
||||
config.AppendSeparator()
|
||||
.AppendControl( "control.PCBViaDia" );
|
||||
|
||||
m_auxiliaryToolBar->AddScaledSeparator( this );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbPcbLayerSelectorName )
|
||||
.AppendAction( PCB_ACTIONS::selectLayerPair );
|
||||
|
||||
// Creates box to display and choose vias diameters:
|
||||
|
||||
if( m_SelViaSizeBox == nullptr )
|
||||
m_SelViaSizeBox = new wxChoice( m_auxiliaryToolBar, ID_AUX_TOOLBAR_PCB_VIA_SIZE,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
|
||||
UpdateViaSizeSelectBox( m_SelViaSizeBox, true, true );
|
||||
m_auxiliaryToolBar->AddControl( m_SelViaSizeBox );
|
||||
|
||||
m_auxiliaryToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( m_SelLayerBox == nullptr )
|
||||
{
|
||||
m_SelLayerBox = new PCB_LAYER_BOX_SELECTOR( m_auxiliaryToolBar, ID_TOOLBARH_PCB_SELECT_LAYER );
|
||||
m_SelLayerBox->SetBoardFrame( this );
|
||||
}
|
||||
|
||||
ReCreateLayerBox( false );
|
||||
m_auxiliaryToolBar->AddControl( m_SelLayerBox );
|
||||
|
||||
m_auxiliaryToolBar->Add( PCB_ACTIONS::selectLayerPair );
|
||||
// TODO (ISM): Figure out this part
|
||||
PrepareLayerIndicator( true ); // Force rebuild of the bitmap with the active layer colors
|
||||
|
||||
// Add the box to display and select the current grid size:
|
||||
m_auxiliaryToolBar->AddScaledSeparator( this );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbGridSelectName );
|
||||
|
||||
if( m_gridSelectBox == nullptr )
|
||||
m_gridSelectBox = new wxChoice( m_auxiliaryToolBar, ID_ON_GRID_SELECT,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
config.AppendSeparator()
|
||||
.AppendControl( m_tbZoomSelectName );
|
||||
|
||||
UpdateGridSelectBox();
|
||||
|
||||
m_auxiliaryToolBar->AddControl( m_gridSelectBox );
|
||||
|
||||
// Add the box to display and select the current Zoom
|
||||
m_auxiliaryToolBar->AddScaledSeparator( this );
|
||||
|
||||
if( m_zoomSelectBox == nullptr )
|
||||
m_zoomSelectBox = new wxChoice( m_auxiliaryToolBar, ID_ON_ZOOM_SELECT,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
|
||||
UpdateZoomSelectBox();
|
||||
m_auxiliaryToolBar->AddControl( m_zoomSelectBox );
|
||||
|
||||
// Go through and ensure the comboboxes are the correct size, since the strings in the
|
||||
// box could have changed widths.
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_AUX_TOOLBAR_PCB_TRACK_WIDTH );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_AUX_TOOLBAR_PCB_VIA_SIZE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_TOOLBARH_PCB_SELECT_LAYER );
|
||||
|
||||
// after adding the buttons to the toolbar, must call Realize()
|
||||
m_auxiliaryToolBar->KiRealize();
|
||||
// clang-format on
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::UpdateToolbarControlSizes()
|
||||
void PCB_EDIT_FRAME::configureToolbars()
|
||||
{
|
||||
if( m_mainToolBar )
|
||||
{
|
||||
// Update the item widths
|
||||
}
|
||||
PCB_BASE_FRAME::configureToolbars();
|
||||
|
||||
if( m_auxiliaryToolBar )
|
||||
{
|
||||
// Update the item widths
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_AUX_TOOLBAR_PCB_TRACK_WIDTH );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_AUX_TOOLBAR_PCB_VIA_SIZE );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
|
||||
m_auxiliaryToolBar->UpdateControlWidth( ID_TOOLBARH_PCB_SELECT_LAYER );
|
||||
}
|
||||
// Box to display and choose track widths
|
||||
auto trackWidthSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelTrackWidthBox )
|
||||
{
|
||||
m_SelTrackWidthBox = new wxChoice( aToolbar, ID_AUX_TOOLBAR_PCB_TRACK_WIDTH,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
m_SelTrackWidthBox->SetToolTip( _( "Select the default width for new tracks. Note that this "
|
||||
"width can be overridden by the board minimum width, or by "
|
||||
"the width of an existing track if the 'Use Existing Track "
|
||||
"Width' feature is enabled." ) );
|
||||
|
||||
UpdateTrackWidthSelectBox( m_SelTrackWidthBox, true, true );
|
||||
|
||||
aToolbar->Add( m_SelTrackWidthBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.PCBTrackWidth", _( "Track width selector" ),
|
||||
_( "Control to select the track width" ),
|
||||
trackWidthSelectorFactory );
|
||||
|
||||
|
||||
// Box to display and choose vias diameters
|
||||
auto viaDiaSelectorFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_SelViaSizeBox )
|
||||
{
|
||||
m_SelViaSizeBox = new wxChoice( aToolbar, ID_AUX_TOOLBAR_PCB_VIA_SIZE,
|
||||
wxDefaultPosition, wxDefaultSize, 0, nullptr );
|
||||
}
|
||||
|
||||
UpdateViaSizeSelectBox( m_SelViaSizeBox, true, true );
|
||||
aToolbar->Add( m_SelViaSizeBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.PCBViaDia", _( "Via diameter selector" ),
|
||||
_( "Control to select the via diameter" ),
|
||||
viaDiaSelectorFactory );
|
||||
|
||||
// IPC/Scripting plugin control
|
||||
// TODO (ISM): Clean this up to make IPC actions just normal tool actions to get rid of this entire
|
||||
// control
|
||||
auto pluginControlFactory = [this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
// Add scripting console and API plugins
|
||||
bool scriptingAvailable = SCRIPTING::IsWxAvailable();
|
||||
|
||||
#ifdef KICAD_IPC_API
|
||||
bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server &&
|
||||
!Pgm().GetPluginManager().GetActionsForScope( PluginActionScope() ).empty();
|
||||
#else
|
||||
bool haveApiPlugins = false;
|
||||
#endif
|
||||
|
||||
if( scriptingAvailable || haveApiPlugins )
|
||||
{
|
||||
aToolbar->AddScaledSeparator( aToolbar->GetParent() );
|
||||
|
||||
if( scriptingAvailable )
|
||||
{
|
||||
aToolbar->Add( PCB_ACTIONS::showPythonConsole );
|
||||
addActionPluginTools( aToolbar );
|
||||
}
|
||||
|
||||
if( haveApiPlugins )
|
||||
AddApiPluginTools( aToolbar );
|
||||
}
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( "control.PCBPlugin", _( "IPC/Scripting plugins" ),
|
||||
_( "Region to hold the IPC/Scripting action buttons" ),
|
||||
pluginControlFactory );
|
||||
}
|
||||
|
||||
|
||||
@ -682,7 +595,7 @@ void PCB_EDIT_FRAME::UpdateViaSizeSelectBox( wxChoice* aViaSizeSelectBox, bool a
|
||||
|
||||
void PCB_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar )
|
||||
{
|
||||
if( m_SelLayerBox == nullptr || m_auxiliaryToolBar == nullptr )
|
||||
if( m_SelLayerBox == nullptr || m_tbTopAux == nullptr )
|
||||
return;
|
||||
|
||||
m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
|
||||
@ -828,10 +741,3 @@ void PCB_EDIT_FRAME::OnUpdateSelectAutoWidth( wxUpdateUIEvent& aEvent )
|
||||
|
||||
aEvent.Check( bds.m_UseConnectedTrackWidth );
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
if( m_SelLayerBox->GetLayerSelection() != GetActiveLayer() )
|
||||
m_SelLayerBox->SetLayerSelection( GetActiveLayer() );
|
||||
}
|
||||
|
@ -1351,7 +1351,8 @@ TOOL_ACTION PCB_ACTIONS::showPythonConsole( TOOL_ACTION_ARGS()
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "Scripting Console" ) )
|
||||
.Tooltip( _( "Show the Python scripting console" ) )
|
||||
.Icon( BITMAPS::py_script ) );
|
||||
.Icon( BITMAPS::py_script )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE) );
|
||||
|
||||
TOOL_ACTION PCB_ACTIONS::showLayersManager( TOOL_ACTION_ARGS()
|
||||
.Name( "pcbnew.Control.showLayersManager" )
|
||||
@ -2294,6 +2295,7 @@ TOOL_ACTION PCB_ACTIONS::routeSingleTrack( TOOL_ACTION_ARGS()
|
||||
.FriendlyName( _( "Route Single Track" ) )
|
||||
.Tooltip( _( "Route tracks" ) )
|
||||
.Icon( BITMAPS::add_tracks )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_ACTIVATE )
|
||||
.Parameter( PNS::PNS_MODE_ROUTE_SINGLE ) );
|
||||
|
||||
@ -2306,6 +2308,7 @@ TOOL_ACTION PCB_ACTIONS::routeDiffPair( TOOL_ACTION_ARGS()
|
||||
.FriendlyName( _( "Route Differential Pair" ) )
|
||||
.Tooltip( _( "Route differential pairs" ) )
|
||||
.Icon( BITMAPS::ps_diff_pair )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_ACTIVATE )
|
||||
.Parameter( PNS::PNS_MODE_ROUTE_DIFF_PAIR ) );
|
||||
|
||||
@ -2371,6 +2374,7 @@ TOOL_ACTION PCB_ACTIONS::tuneSingleTrack( TOOL_ACTION_ARGS()
|
||||
.LegacyHotkeyName( "Tune Single Track (Modern Toolset only)" )
|
||||
.FriendlyName( _( "Tune Length of a Single Track" ) )
|
||||
.Icon( BITMAPS::ps_tune_length )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_ACTIVATE )
|
||||
.Parameter( PNS::PNS_MODE_TUNE_SINGLE ) );
|
||||
|
||||
@ -2382,6 +2386,7 @@ TOOL_ACTION PCB_ACTIONS::tuneDiffPair( TOOL_ACTION_ARGS()
|
||||
.LegacyHotkeyName( "Tune Differential Pair Length (Modern Toolset only)" )
|
||||
.FriendlyName( _( "Tune Length of a Differential Pair" ) )
|
||||
.Icon( BITMAPS::ps_diff_pair_tune_length )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_ACTIVATE )
|
||||
.Parameter( PNS::PNS_MODE_TUNE_DIFF_PAIR ) );
|
||||
|
||||
@ -2393,6 +2398,7 @@ TOOL_ACTION PCB_ACTIONS::tuneSkew( TOOL_ACTION_ARGS()
|
||||
.LegacyHotkeyName( "Tune Differential Pair Skew (Modern Toolset only)" )
|
||||
.FriendlyName( _( "Tune Skew of a Differential Pair" ) )
|
||||
.Icon( BITMAPS::ps_diff_pair_tune_phase )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Flags( AF_ACTIVATE )
|
||||
.Parameter( PNS::PNS_MODE_TUNE_DIFF_PAIR_SKEW ) );
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user