Fix graphics snapping in Footprint Editor.

Also improves the help text for the various selection modifier
options.

Fixes https://gitlab.com/kicad/code/kicad/issues/6538

Fixes https://gitlab.com/kicad/code/kicad/issues/4745
This commit is contained in:
Jeff Young 2020-12-19 00:19:47 +00:00
parent 0ba175f28c
commit 06d4476d7a
8 changed files with 2183 additions and 1918 deletions

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -23,7 +23,6 @@
*/
#include <board_design_settings.h>
#include <board.h>
#include <panel_edit_options.h>
#include <pcb_edit_frame.h>
#include <pcb_painter.h>
@ -33,36 +32,36 @@
#include <footprint_edit_frame.h>
PANEL_EDIT_OPTIONS::PANEL_EDIT_OPTIONS( PCB_BASE_EDIT_FRAME* aFrame, PAGED_DIALOG* aParent ) :
PANEL_EDIT_OPTIONS_BASE( aParent->GetTreebook() ),
m_Frame( aFrame )
PANEL_EDIT_OPTIONS_BASE( aParent->GetTreebook() ), m_frame( aFrame )
{
m_MagneticPads->Show( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_Frame ) != nullptr );
m_FlipLeftRight->Show( dynamic_cast<PCB_EDIT_FRAME*>( m_Frame ) != nullptr );
m_magneticPads->Show( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_frame ) != nullptr );
m_magneticGraphics->Show( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_frame ) != nullptr );
m_flipLeftRight->Show( dynamic_cast<PCB_EDIT_FRAME*>( m_frame ) != nullptr );
#ifdef __WXOSX_MAC__
m_fgSizerLMB_OSX->Show( true );
m_fgSizerLMBWinLin->Show( false );
m_mouseCmdsOSX->Show( true );
m_mouseCmdsWinLin->Show( false );
#else
m_fgSizerLMB_OSX->Show( false );
m_fgSizerLMBWinLin->Show( true );
m_mouseCmdsWinLin->Show( true );
m_mouseCmdsOSX->Show( false );
#endif
m_optionsBook->SetSelection( dynamic_cast<PCB_EDIT_FRAME*>( m_Frame ) ? 1 : 0 );
m_optionsBook->SetSelection( dynamic_cast<PCB_EDIT_FRAME*>( m_frame ) ? 1 : 0 );
}
bool PANEL_EDIT_OPTIONS::TransferDataToWindow()
{
const PCB_DISPLAY_OPTIONS& displ_opts = m_Frame->GetDisplayOptions();
const PCBNEW_SETTINGS& general_opts = m_Frame->Settings();
const PCB_DISPLAY_OPTIONS& displ_opts = m_frame->GetDisplayOptions();
const PCBNEW_SETTINGS& general_opts = m_frame->Settings();
m_Segments_45_Only_Ctrl->SetValue( general_opts.m_Use45DegreeGraphicSegments );
m_segments45OnlyCtrl->SetValue( general_opts.m_Use45DegreeGraphicSegments );
wxString rotationAngle;
rotationAngle = AngleToStringDegrees( (double)m_Frame->GetRotationAngle() );
m_RotationAngle->SetValue( rotationAngle );
rotationAngle = AngleToStringDegrees( (double) m_frame->GetRotationAngle() );
m_rotationAngle->SetValue( rotationAngle );
if( dynamic_cast<PCB_EDIT_FRAME*>( m_Frame ) )
if( dynamic_cast<PCB_EDIT_FRAME*>( m_frame ) )
{
/* Set display options */
m_OptDisplayCurvedRatsnestLines->SetValue( displ_opts.m_DisplayRatsnestLinesCurved );
@ -71,9 +70,9 @@ bool PANEL_EDIT_OPTIONS::TransferDataToWindow()
m_magneticPadChoice->SetSelection( static_cast<int>( general_opts.m_MagneticItems.pads ) );
m_magneticTrackChoice->SetSelection( static_cast<int>( general_opts.m_MagneticItems.tracks ) );
m_magneticGraphicsChoice->SetSelection( !general_opts.m_MagneticItems.graphics );
m_FlipLeftRight->SetValue( general_opts.m_FlipLeftRight );
m_flipLeftRight->SetValue( general_opts.m_FlipLeftRight );
m_Show_Page_Limits->SetValue( m_Frame->ShowPageLimits() );
m_Show_Page_Limits->SetValue( m_frame->ShowPageLimits() );
switch( general_opts.m_TrackDragAction )
{
@ -82,10 +81,11 @@ bool PANEL_EDIT_OPTIONS::TransferDataToWindow()
case TRACK_DRAG_ACTION::DRAG_FREE_ANGLE: m_rbTrackDragFree->SetValue( true ); break;
}
}
else if( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_Frame ) )
else if( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_frame ) )
{
m_MagneticPads->SetValue(
m_Frame->GetMagneticItemsSettings()->pads == MAGNETIC_OPTIONS::CAPTURE_ALWAYS );
m_magneticPads->SetValue( m_frame->GetMagneticItemsSettings()->pads
== MAGNETIC_OPTIONS::CAPTURE_ALWAYS );
m_magneticGraphics->SetValue( m_frame->GetMagneticItemsSettings()->graphics );
}
return true;
@ -94,27 +94,27 @@ bool PANEL_EDIT_OPTIONS::TransferDataToWindow()
bool PANEL_EDIT_OPTIONS::TransferDataFromWindow()
{
PCB_DISPLAY_OPTIONS displ_opts = m_Frame->GetDisplayOptions();
PCB_DISPLAY_OPTIONS displ_opts = m_frame->GetDisplayOptions();
m_Frame->SetRotationAngle( wxRound( 10.0 * wxAtof( m_RotationAngle->GetValue() ) ) );
m_frame->SetRotationAngle( wxRound( 10.0 * wxAtof( m_rotationAngle->GetValue() ) ) );
m_Frame->Settings().m_Use45DegreeGraphicSegments = m_Segments_45_Only_Ctrl->GetValue();
m_frame->Settings().m_Use45DegreeGraphicSegments = m_segments45OnlyCtrl->GetValue();
if( dynamic_cast<PCB_EDIT_FRAME*>( m_Frame ) )
if( dynamic_cast<PCB_EDIT_FRAME*>( m_frame ) )
{
PCBNEW_SETTINGS& pcbnewSettings = m_Frame->Settings();
PCBNEW_SETTINGS& pcbnewSettings = m_frame->Settings();
displ_opts.m_DisplayRatsnestLinesCurved = m_OptDisplayCurvedRatsnestLines->GetValue();
displ_opts.m_ShowModuleRatsnest = m_showSelectedRatsnest->GetValue();
m_Frame->Settings().m_MagneticItems.pads =
m_frame->Settings().m_MagneticItems.pads =
static_cast<MAGNETIC_OPTIONS>( m_magneticPadChoice->GetSelection() );
m_Frame->Settings().m_MagneticItems.tracks =
m_frame->Settings().m_MagneticItems.tracks =
static_cast<MAGNETIC_OPTIONS>( m_magneticTrackChoice->GetSelection() );
m_Frame->Settings().m_MagneticItems.graphics = !m_magneticGraphicsChoice->GetSelection();
m_frame->Settings().m_MagneticItems.graphics = !m_magneticGraphicsChoice->GetSelection();
m_Frame->Settings().m_FlipLeftRight = m_FlipLeftRight->GetValue();
m_Frame->SetShowPageLimits( m_Show_Page_Limits->GetValue() );
m_frame->Settings().m_FlipLeftRight = m_flipLeftRight->GetValue();
m_frame->SetShowPageLimits( m_Show_Page_Limits->GetValue() );
if( m_rbTrackDragMove->GetValue() )
pcbnewSettings.m_TrackDragAction = TRACK_DRAG_ACTION::MOVE;
@ -123,25 +123,26 @@ bool PANEL_EDIT_OPTIONS::TransferDataFromWindow()
else if( m_rbTrackDragFree->GetValue() )
pcbnewSettings.m_TrackDragAction = TRACK_DRAG_ACTION::DRAG_FREE_ANGLE;
}
else if( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_Frame ) )
else if( dynamic_cast<FOOTPRINT_EDIT_FRAME*>( m_frame ) )
{
if( m_MagneticPads->GetValue() )
m_Frame->GetMagneticItemsSettings()->pads = MAGNETIC_OPTIONS::CAPTURE_ALWAYS;
else
m_Frame->GetMagneticItemsSettings()->pads = MAGNETIC_OPTIONS::NO_EFFECT;
m_frame->GetMagneticItemsSettings()->pads = m_magneticPads->GetValue()
? MAGNETIC_OPTIONS::CAPTURE_ALWAYS
: MAGNETIC_OPTIONS::NO_EFFECT;
m_frame->GetMagneticItemsSettings()->graphics = m_magneticGraphics->GetValue();
}
// Apply changes to the GAL
KIGFX::VIEW* view = m_Frame->GetCanvas()->GetView();
KIGFX::VIEW* view = m_frame->GetCanvas()->GetView();
KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() );
KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings();
m_Frame->SetDisplayOptions( displ_opts );
settings->LoadDisplayOptions( displ_opts, m_Frame->ShowPageLimits() );
m_frame->SetDisplayOptions( displ_opts );
settings->LoadDisplayOptions( displ_opts, m_frame->ShowPageLimits() );
view->RecacheAllItems();
view->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
m_Frame->GetCanvas()->Refresh();
m_frame->GetCanvas()->Refresh();
return true;
}

View File

@ -22,8 +22,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __dialog_general_options_h
#define __dialog_general_options_h
#ifndef PANEL_EDIT_OPTIONS_H
#define PANEL_EDIT_OPTIONS_H
#include "panel_edit_options_base.h"
@ -33,16 +33,16 @@ class PCB_BASE_EDIT_FRAME;
class PANEL_EDIT_OPTIONS : public PANEL_EDIT_OPTIONS_BASE
{
private:
PCB_BASE_EDIT_FRAME* m_Frame;
public:
PANEL_EDIT_OPTIONS( PCB_BASE_EDIT_FRAME* aFrame, PAGED_DIALOG* aWindow );
protected:
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
private:
PCB_BASE_EDIT_FRAME* m_frame;
};
#endif // __dialog_general_options_h
#endif // PANEL_EDIT_OPTIONS_H

View File

@ -23,16 +23,28 @@ PANEL_EDIT_OPTIONS_BASE::PANEL_EDIT_OPTIONS_BASE( wxWindow* parent, wxWindowID i
wxStaticBoxSizer* bOptionsSizer;
bOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Editing Options") ), wxVERTICAL );
m_MagneticPads = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_ANY, _("Magnetic pads"), wxDefaultPosition, wxDefaultSize, 0 );
bOptionsSizer->Add( m_MagneticPads, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_magneticPads = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_ANY, _("Magnetic pads"), wxDefaultPosition, wxDefaultSize, 0 );
bOptionsSizer->Add( m_magneticPads, 0, wxRIGHT|wxLEFT, 5 );
m_Segments_45_Only_Ctrl = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_SEGMENTS45, _("L&imit graphic lines to H, V and 45 degrees"), wxDefaultPosition, wxDefaultSize, 0 );
m_Segments_45_Only_Ctrl->SetToolTip( _("Force line segment directions to H, V or 45 degrees when drawing on technical layers.") );
bOptionsSizer->Add( m_Segments_45_Only_Ctrl, 0, wxALL, 5 );
bOptionsSizer->Add( 0, 3, 0, wxEXPAND, 5 );
m_FlipLeftRight = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_ANY, _("Flip board items L/R (default is T/B)"), wxDefaultPosition, wxDefaultSize, 0 );
bOptionsSizer->Add( m_FlipLeftRight, 0, wxALL, 5 );
m_magneticGraphics = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_ANY, _("Magnetic graphics"), wxDefaultPosition, wxDefaultSize, 0 );
bOptionsSizer->Add( m_magneticGraphics, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bOptionsSizer->Add( 0, 6, 0, wxEXPAND, 5 );
m_segments45OnlyCtrl = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_SEGMENTS45, _("L&imit graphic lines to H, V and 45 degrees"), wxDefaultPosition, wxDefaultSize, 0 );
m_segments45OnlyCtrl->SetToolTip( _("Force line segment directions to H, V or 45 degrees when drawing on technical layers.") );
bOptionsSizer->Add( m_segments45OnlyCtrl, 0, wxALL, 5 );
bOptionsSizer->Add( 0, 6, 0, wxEXPAND, 5 );
m_flipLeftRight = new wxCheckBox( bOptionsSizer->GetStaticBox(), wxID_ANY, _("Flip board items L/R (default is T/B)"), wxDefaultPosition, wxDefaultSize, 0 );
bOptionsSizer->Add( m_flipLeftRight, 0, wxALL, 5 );
wxFlexGridSizer* fgSizer12;
fgSizer12 = new wxFlexGridSizer( 0, 2, 0, 0 );
@ -44,142 +56,178 @@ PANEL_EDIT_OPTIONS_BASE::PANEL_EDIT_OPTIONS_BASE( wxWindow* parent, wxWindowID i
m_staticTextRotationAngle->Wrap( -1 );
fgSizer12->Add( m_staticTextRotationAngle, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_RotationAngle = new wxTextCtrl( bOptionsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_RotationAngle->SetToolTip( _("Set increment (in degrees) for context menu and hotkey rotation.") );
m_rotationAngle = new wxTextCtrl( bOptionsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_rotationAngle->SetToolTip( _("Set increment (in degrees) for context menu and hotkey rotation.") );
fgSizer12->Add( m_RotationAngle, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
fgSizer12->Add( m_rotationAngle, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
bOptionsSizer->Add( fgSizer12, 0, wxEXPAND|wxTOP, 5 );
bOptionsSizer->Add( 0, 30, 0, 0, 5 );
bMiddleLeftSizer->Add( bOptionsSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
wxStaticBoxSizer* sbSizerMouseCmdWinLin;
sbSizerMouseCmdWinLin = new wxStaticBoxSizer( new wxStaticBox( bOptionsSizer->GetStaticBox(), wxID_ANY, _("Left Click Mouse Commands") ), wxVERTICAL );
m_mouseCmdsWinLin = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Left Click Mouse Commands") ), wxVERTICAL );
m_staticText181 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Left mouse click action depends on 3 modifier keys:\nAlt, Shift, Ctrl/Cmd."), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText181 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Left click (and drag) actions depend on 3 modifier keys:\nAlt, Shift and Ctrl."), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText181->Wrap( -1 );
sbSizerMouseCmdWinLin->Add( m_staticText181, 0, wxALL, 5 );
m_mouseCmdsWinLin->Add( m_staticText181, 0, wxALL, 5 );
m_staticline11 = new wxStaticLine( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
sbSizerMouseCmdWinLin->Add( m_staticline11, 0, wxEXPAND | wxALL, 5 );
wxStaticLine* staticline11;
staticline11 = new wxStaticLine( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
m_mouseCmdsWinLin->Add( staticline11, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
m_fgSizerLMBWinLin = new wxFlexGridSizer( 0, 2, 0, 0 );
m_fgSizerLMBWinLin->SetFlexibleDirection( wxBOTH );
m_fgSizerLMBWinLin->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
wxFlexGridSizer* fgSizerCmdsWinLin;
fgSizerCmdsWinLin = new wxFlexGridSizer( 0, 2, 0, 0 );
fgSizerCmdsWinLin->SetFlexibleDirection( wxBOTH );
fgSizerCmdsWinLin->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText61 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("No modifier"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText61->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText61, 0, wxALL, 5 );
wxStaticText* staticText61;
staticText61 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("No modifier"), wxDefaultPosition, wxDefaultSize, 0 );
staticText61->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText61, 0, wxALL, 5 );
m_staticText71 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Item/block selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText71->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText71, 0, wxALL, 5 );
wxStaticText* staticText71;
staticText71 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Select item(s)."), wxDefaultPosition, wxDefaultSize, 0 );
staticText71->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText71, 0, wxALL, 5 );
m_staticText81 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("SHIFT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText81->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText81, 0, wxALL, 5 );
wxStaticText* staticText81;
staticText81 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Shift"), wxDefaultPosition, wxDefaultSize, 0 );
staticText81->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText81, 0, wxALL, 5 );
m_staticText91 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("New selection added to current selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText91->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText91, 0, wxALL, 5 );
wxStaticText* staticText91;
staticText91 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Add item(s) to selection."), wxDefaultPosition, wxDefaultSize, 0 );
staticText91->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText91, 0, wxALL, 5 );
m_staticText121 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("SHIFT+ALT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText121->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText121, 0, wxALL, 5 );
wxStaticText* staticText121;
staticText121 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Shift+Alt"), wxDefaultPosition, wxDefaultSize, 0 );
staticText121->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText121, 0, wxALL, 5 );
m_staticText131 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("New selection removed from current selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText131->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText131, 0, wxALL, 5 );
wxStaticText* staticText131;
staticText131 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Remove item(s) from selection."), wxDefaultPosition, wxDefaultSize, 0 );
staticText131->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText131, 0, wxALL, 5 );
m_staticText101 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("CTRL"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText101->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText101, 0, wxALL, 5 );
wxStaticText* staticText141;
staticText141 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Alt"), wxDefaultPosition, wxDefaultSize, 0 );
staticText141->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText141, 0, wxALL, 5 );
m_staticText111 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Show full disambiguation context menu"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText111->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText111, 0, wxALL, 5 );
wxStaticText* staticText151;
staticText151 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Toggle selected state of item(s)."), wxDefaultPosition, wxDefaultSize, 0 );
staticText151->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText151, 0, wxALL, 5 );
m_staticText141 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("ALT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText141->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText141, 0, wxALL, 5 );
wxStaticText* staticText101;
staticText101 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Ctrl"), wxDefaultPosition, wxDefaultSize, 0 );
staticText101->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText101, 0, wxALL, 5 );
m_staticText151 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Toggle new selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText151->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText151, 0, wxALL, 5 );
wxStaticText* staticText111;
staticText111 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Clarify selection from menu."), wxDefaultPosition, wxDefaultSize, 0 );
staticText111->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText111, 0, wxALL, 5 );
m_staticText161 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("CTRL+SHIFT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText161->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText161, 0, wxALL, 5 );
wxStaticText* staticText161;
staticText161 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Ctrl+Shift"), wxDefaultPosition, wxDefaultSize, 0 );
staticText161->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText161, 0, wxALL, 5 );
m_staticText171 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Highlight net (for pads or tracks)"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText171->Wrap( -1 );
m_fgSizerLMBWinLin->Add( m_staticText171, 0, wxALL, 5 );
wxStaticText* staticText171;
staticText171 = new wxStaticText( m_mouseCmdsWinLin->GetStaticBox(), wxID_ANY, _("Highlight net (for pads or tracks)."), wxDefaultPosition, wxDefaultSize, 0 );
staticText171->Wrap( -1 );
fgSizerCmdsWinLin->Add( staticText171, 0, wxALL, 5 );
sbSizerMouseCmdWinLin->Add( m_fgSizerLMBWinLin, 1, wxEXPAND, 5 );
m_fgSizerLMB_OSX = new wxFlexGridSizer( 0, 2, 0, 0 );
m_fgSizerLMB_OSX->SetFlexibleDirection( wxBOTH );
m_fgSizerLMB_OSX->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText6 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("No modifier"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText6->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText6, 0, wxALL, 5 );
m_staticText7 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Item/block selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText7->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText7, 0, wxALL, 5 );
m_staticText8 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("SHIFT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText8->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText8, 0, wxALL, 5 );
m_staticText9 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("New selection added to current selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText9->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText9, 0, wxALL, 5 );
m_staticText12 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("CTRL+SHIFT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText12->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText12, 0, wxALL, 5 );
m_staticText13 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("New selection removed from current selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText13->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText13, 0, wxALL, 5 );
m_staticText10 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("ALT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText10->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText10, 0, wxALL, 5 );
m_staticText11 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Show full disambiguation context menu"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText11->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText11, 0, wxALL, 5 );
m_staticText14 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("CTRL"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText14->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText14, 0, wxALL, 5 );
m_staticText15 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Toggle new selection"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText15->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText15, 0, wxALL, 5 );
m_staticText16 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("CTRL+ALT"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText16->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText16, 0, wxALL, 5 );
m_staticText17 = new wxStaticText( sbSizerMouseCmdWinLin->GetStaticBox(), wxID_ANY, _("Highlight net (for pads or tracks)"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText17->Wrap( -1 );
m_fgSizerLMB_OSX->Add( m_staticText17, 0, wxALL, 5 );
m_mouseCmdsWinLin->Add( fgSizerCmdsWinLin, 1, wxEXPAND, 5 );
sbSizerMouseCmdWinLin->Add( m_fgSizerLMB_OSX, 1, wxEXPAND, 5 );
bMiddleLeftSizer->Add( m_mouseCmdsWinLin, 1, wxEXPAND|wxALL, 5 );
m_mouseCmdsOSX = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Left Click Mouse Commands") ), wxVERTICAL );
m_staticText1811 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Left click (and drag) actions depend on 3 modifier keys:\nAlt, Shift and Cmd."), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1811->Wrap( -1 );
m_mouseCmdsOSX->Add( m_staticText1811, 0, wxALL, 5 );
wxStaticLine* staticline111;
staticline111 = new wxStaticLine( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
m_mouseCmdsOSX->Add( staticline111, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
wxFlexGridSizer* fgSizerCmdsOSX;
fgSizerCmdsOSX = new wxFlexGridSizer( 0, 2, 0, 0 );
fgSizerCmdsOSX->SetFlexibleDirection( wxBOTH );
fgSizerCmdsOSX->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
wxStaticText* staticText62;
staticText62 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("No modifier"), wxDefaultPosition, wxDefaultSize, 0 );
staticText62->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText62, 0, wxALL, 5 );
wxStaticText* staticText72;
staticText72 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Select item(s)."), wxDefaultPosition, wxDefaultSize, 0 );
staticText72->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText72, 0, wxALL, 5 );
wxStaticText* staticText82;
staticText82 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Shift"), wxDefaultPosition, wxDefaultSize, 0 );
staticText82->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText82, 0, wxALL, 5 );
wxStaticText* staticText92;
staticText92 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Add item(s) to selection."), wxDefaultPosition, wxDefaultSize, 0 );
staticText92->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText92, 0, wxALL, 5 );
wxStaticText* staticText122;
staticText122 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Shift+Cmd"), wxDefaultPosition, wxDefaultSize, 0 );
staticText122->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText122, 0, wxALL, 5 );
wxStaticText* staticText132;
staticText132 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Remove item(s) from selection."), wxDefaultPosition, wxDefaultSize, 0 );
staticText132->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText132, 0, wxALL, 5 );
wxStaticText* staticText142;
staticText142 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Cmd"), wxDefaultPosition, wxDefaultSize, 0 );
staticText142->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText142, 0, wxALL, 5 );
wxStaticText* staticText152;
staticText152 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Toggle selected state of item(s)."), wxDefaultPosition, wxDefaultSize, 0 );
staticText152->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText152, 0, wxALL, 5 );
wxStaticText* staticText102;
staticText102 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Alt"), wxDefaultPosition, wxDefaultSize, 0 );
staticText102->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText102, 0, wxALL, 5 );
wxStaticText* staticText112;
staticText112 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Clarify selection from menu."), wxDefaultPosition, wxDefaultSize, 0 );
staticText112->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText112, 0, wxALL, 5 );
wxStaticText* staticText162;
staticText162 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Alt+Cmd"), wxDefaultPosition, wxDefaultSize, 0 );
staticText162->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText162, 0, wxALL, 5 );
wxStaticText* staticText172;
staticText172 = new wxStaticText( m_mouseCmdsOSX->GetStaticBox(), wxID_ANY, _("Highlight net (for pads or tracks)."), wxDefaultPosition, wxDefaultSize, 0 );
staticText172->Wrap( -1 );
fgSizerCmdsOSX->Add( staticText172, 0, wxALL, 5 );
bOptionsSizer->Add( sbSizerMouseCmdWinLin, 1, wxEXPAND, 5 );
m_mouseCmdsOSX->Add( fgSizerCmdsOSX, 1, wxEXPAND, 5 );
bMiddleLeftSizer->Add( bOptionsSizer, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
bMiddleLeftSizer->Add( m_mouseCmdsOSX, 1, wxEXPAND|wxALL, 5 );
bMargins->Add( bMiddleLeftSizer, 1, wxEXPAND|wxRIGHT, 5 );

File diff suppressed because it is too large Load Diff

View File

@ -19,8 +19,8 @@
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statline.h>
#include <wx/statbox.h>
#include <wx/statline.h>
#include <wx/panel.h>
#include <wx/choice.h>
#include <wx/radiobut.h>
@ -41,39 +41,16 @@ class PANEL_EDIT_OPTIONS_BASE : public wxPanel
wxID_SEGMENTS45 = 1000
};
wxCheckBox* m_MagneticPads;
wxCheckBox* m_Segments_45_Only_Ctrl;
wxCheckBox* m_FlipLeftRight;
wxCheckBox* m_magneticPads;
wxCheckBox* m_magneticGraphics;
wxCheckBox* m_segments45OnlyCtrl;
wxCheckBox* m_flipLeftRight;
wxStaticText* m_staticTextRotationAngle;
wxTextCtrl* m_RotationAngle;
wxTextCtrl* m_rotationAngle;
wxStaticBoxSizer* m_mouseCmdsWinLin;
wxStaticText* m_staticText181;
wxStaticLine* m_staticline11;
wxFlexGridSizer* m_fgSizerLMBWinLin;
wxStaticText* m_staticText61;
wxStaticText* m_staticText71;
wxStaticText* m_staticText81;
wxStaticText* m_staticText91;
wxStaticText* m_staticText121;
wxStaticText* m_staticText131;
wxStaticText* m_staticText101;
wxStaticText* m_staticText111;
wxStaticText* m_staticText141;
wxStaticText* m_staticText151;
wxStaticText* m_staticText161;
wxStaticText* m_staticText171;
wxFlexGridSizer* m_fgSizerLMB_OSX;
wxStaticText* m_staticText6;
wxStaticText* m_staticText7;
wxStaticText* m_staticText8;
wxStaticText* m_staticText9;
wxStaticText* m_staticText12;
wxStaticText* m_staticText13;
wxStaticText* m_staticText10;
wxStaticText* m_staticText11;
wxStaticText* m_staticText14;
wxStaticText* m_staticText15;
wxStaticText* m_staticText16;
wxStaticText* m_staticText17;
wxStaticBoxSizer* m_mouseCmdsOSX;
wxStaticText* m_staticText1811;
wxSimplebook* m_optionsBook;
wxStaticText* m_staticText2;
wxChoice* m_magneticPadChoice;

View File

@ -543,8 +543,8 @@ void FOOTPRINT_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
COLOR_SETTINGS* FOOTPRINT_EDIT_FRAME::GetColorSettings()
{
return Pgm().GetSettingsManager().GetColorSettings(
GetFootprintEditorSettings()->m_ColorTheme );
wxString currentTheme = GetFootprintEditorSettings()->m_ColorTheme;
return Pgm().GetSettingsManager().GetColorSettings( currentTheme );
}
@ -887,8 +887,8 @@ void FOOTPRINT_EDIT_FRAME::InstallPreferences( PAGED_DIALOG* aParent,
book->AddPage( new wxPanel( book ), _( "Footprint Editor" ) );
book->AddSubPage( new PANEL_DISPLAY_OPTIONS( this, aParent ), _( "Display Options" ) );
book->AddSubPage( new PANEL_FP_EDITOR_COLOR_SETTINGS( this, book ), _( "Colors" ) );
book->AddSubPage( new PANEL_EDIT_OPTIONS( this, aParent ), _( "Editing Options" ) );
book->AddSubPage( new PANEL_FP_EDITOR_COLOR_SETTINGS( this, book ), _( "Colors" ) );
book->AddSubPage( new PANEL_FP_EDITOR_DEFAULTS( this, aParent ), _( "Default Values" ) );
aHotkeysPanel->AddHotKeys( GetToolManager() );

View File

@ -46,9 +46,9 @@ FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS() :
m_LastImportExportPath(),
m_FootprintTextShownColumns()
{
m_MagneticItems.pads = MAGNETIC_OPTIONS::CAPTURE_CURSOR_IN_TRACK_TOOL;
m_MagneticItems.tracks = MAGNETIC_OPTIONS::CAPTURE_CURSOR_IN_TRACK_TOOL;
m_MagneticItems.graphics = false;
m_MagneticItems.pads = MAGNETIC_OPTIONS::CAPTURE_ALWAYS;
m_MagneticItems.tracks = MAGNETIC_OPTIONS::NO_EFFECT;
m_MagneticItems.graphics = true;
m_params.emplace_back( new PARAM<int>( "window.lib_width",
&m_LibWidth, 250 ) );
@ -61,7 +61,10 @@ FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS() :
m_params.emplace_back( new PARAM<int>( "editing.magnetic_pads",
reinterpret_cast<int*>( &m_MagneticItems.pads ),
static_cast<int>( MAGNETIC_OPTIONS::CAPTURE_CURSOR_IN_TRACK_TOOL ) ) );
static_cast<int>( MAGNETIC_OPTIONS::CAPTURE_ALWAYS ) ) );
m_params.emplace_back( new PARAM<bool>( "editing.magnetic_graphics",
&m_MagneticItems.graphics, true ) );
m_params.emplace_back( new PARAM<bool>( "editing.polar_coords", &m_PolarCoords, false ) );

View File

@ -82,11 +82,11 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<bool>( "aui.show_layer_manager",
&m_AuiPanels.show_layer_manager, true ) );
m_params.emplace_back(
new PARAM<int>( "aui.right_panel_width", &m_AuiPanels.right_panel_width, -1 ) );
m_params.emplace_back( new PARAM<int>( "aui.right_panel_width",
&m_AuiPanels.right_panel_width, -1 ) );
m_params.emplace_back( new PARAM<int>(
"aui.appearance_panel_tab", &m_AuiPanels.appearance_panel_tab, 0, 0, 2 ) );
m_params.emplace_back( new PARAM<int>( "aui.appearance_panel_tab",
&m_AuiPanels.appearance_panel_tab, 0, 0, 2 ) );
m_params.emplace_back( new PARAM<int>( "footprint_chooser.width",
&m_FootprintChooser.width, -1 ) );
@ -100,10 +100,11 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<int>( "footprint_chooser.sash_v",
&m_FootprintChooser.sash_v, -1 ) );
m_params.emplace_back( new PARAM<bool>( "editing.flip_left_right", &m_FlipLeftRight, true ) );
m_params.emplace_back( new PARAM<bool>( "editing.flip_left_right",
&m_FlipLeftRight, true ) );
m_params.emplace_back(
new PARAM<bool>( "editing.magnetic_graphics", &m_MagneticItems.graphics, true ) );
m_params.emplace_back( new PARAM<bool>( "editing.magnetic_graphics",
&m_MagneticItems.graphics, true ) );
m_params.emplace_back( new PARAM<int>( "editing.magnetic_pads",
reinterpret_cast<int*>( &m_MagneticItems.pads ),
@ -113,7 +114,8 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
reinterpret_cast<int*>( &m_MagneticItems.tracks ),
static_cast<int>( MAGNETIC_OPTIONS::CAPTURE_CURSOR_IN_TRACK_TOOL ) ) );
m_params.emplace_back( new PARAM<bool>( "editing.polar_coords", &m_PolarCoords, false ) );
m_params.emplace_back( new PARAM<bool>( "editing.polar_coords",
&m_PolarCoords, false ) );
m_params.emplace_back( new PARAM<int>( "editing.track_drag_action",
reinterpret_cast<int*>( &m_TrackDragAction ),
@ -122,51 +124,51 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<bool>( "editing.use_45_degree_graphic_segments",
&m_Use45DegreeGraphicSegments, false ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.graphic_items_fill", &m_Display.m_DisplayGraphicsFill, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.graphic_items_fill",
&m_Display.m_DisplayGraphicsFill, true ) );
m_params.emplace_back( new PARAM<int>(
"pcb_display.max_links_shown", &m_Display.m_MaxLinksShowed, 3, 0, 15 ) );
m_params.emplace_back( new PARAM<int>( "pcb_display.max_links_shown",
&m_Display.m_MaxLinksShowed, 3, 0, 15 ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.graphics_fill", &m_Display.m_DisplayGraphicsFill, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.graphics_fill",
&m_Display.m_DisplayGraphicsFill, true ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.text_fill", &m_Display.m_DisplayTextFill, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.text_fill",
&m_Display.m_DisplayTextFill, true ) );
m_params.emplace_back( new PARAM<int>(
"pcb_display.net_names_mode", &m_Display.m_DisplayNetNamesMode, 3, 0, 3 ) );
m_params.emplace_back( new PARAM<int>( "pcb_display.net_names_mode",
&m_Display.m_DisplayNetNamesMode, 3, 0, 3 ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.pad_clearance", &m_Display.m_DisplayPadIsol, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.pad_clearance",
&m_Display.m_DisplayPadIsol, true ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.pad_fill", &m_Display.m_DisplayPadFill, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.pad_fill",
&m_Display.m_DisplayPadFill, true ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.pad_numbers", &m_Display.m_DisplayPadNum, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.pad_numbers",
&m_Display.m_DisplayPadNum, true ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.ratsnest_global", &m_Display.m_ShowGlobalRatsnest, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.ratsnest_global",
&m_Display.m_ShowGlobalRatsnest, true ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.ratsnest_footprint", &m_Display.m_ShowModuleRatsnest, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.ratsnest_footprint",
&m_Display.m_ShowModuleRatsnest, true ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.ratsnest_curved", &m_Display.m_DisplayRatsnestLinesCurved, false ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.ratsnest_curved",
&m_Display.m_DisplayRatsnestLinesCurved, false ) );
m_params.emplace_back( new PARAM<int>(
"pcb_display.rotation_angle", &m_RotationAngle, 900, 1, 900 ) );
m_params.emplace_back( new PARAM<int>( "pcb_display.rotation_angle",
&m_RotationAngle, 900, 1, 900 ) );
m_params.emplace_back( new PARAM<int>( "pcb_display.track_clearance_mode",
reinterpret_cast<int*>( &m_Display.m_ShowTrackClearanceMode ),
PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.track_fill", &m_Display.m_DisplayPcbTrackFill, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.track_fill",
&m_Display.m_DisplayPcbTrackFill, true ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.via_fill", &m_Display.m_DisplayViaFill, true ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.via_fill",
&m_Display.m_DisplayViaFill, true ) );
m_params.emplace_back( new PARAM_ENUM<ZONE_DISPLAY_MODE>( "pcb_display.zone_mode",
&m_Display.m_ZoneDisplayMode, ZONE_DISPLAY_MODE::SHOW_FILLED,
@ -176,14 +178,14 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
reinterpret_cast<int*>( &m_Display.m_DisplayOrigin ),
PCB_DISPLAY_OPTIONS::PCB_ORIGIN_PAGE ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.origin_invert_x_axis", &m_Display.m_DisplayInvertXAxis, false ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.origin_invert_x_axis",
&m_Display.m_DisplayInvertXAxis, false ) );
m_params.emplace_back(
new PARAM<bool>( "pcb_display.origin_invert_y_axis", &m_Display.m_DisplayInvertYAxis, false ) );
m_params.emplace_back( new PARAM<bool>( "pcb_display.origin_invert_y_axis",
&m_Display.m_DisplayInvertYAxis, false ) );
m_params.emplace_back(
new PARAM<double>( "plot.line_width", &m_PlotLineWidth, 0.1, 0.01, 5.0 ) );
m_params.emplace_back( new PARAM<double>( "plot.line_width",
&m_PlotLineWidth, 0.1, 0.01, 5.0 ) );
m_params.emplace_back( new PARAM<bool>( "cleanup.cleanup_vias",
&m_Cleanup.cleanup_vias, true ) );
@ -232,80 +234,95 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<int>(
"gen_drill.drill_file_type", &m_GenDrill.drill_file_type, 0 ) );
m_params.emplace_back( new PARAM<int>(
"gen_drill.map_file_type", &m_GenDrill.map_file_type, 1 ) );
m_params.emplace_back( new PARAM<int>( "gen_drill.map_file_type",
&m_GenDrill.map_file_type, 1 ) );
m_params.emplace_back( new PARAM<int>(
"gen_drill.zeros_format", &m_GenDrill.zeros_format, 0, 0, 3 ) );
m_params.emplace_back( new PARAM<int>( "gen_drill.zeros_format",
&m_GenDrill.zeros_format, 0, 0, 3 ) );
m_params.emplace_back(
new PARAM<bool>( "export_idf.auto_adjust", &m_ExportIdf.auto_adjust, false ) );
m_params.emplace_back( new PARAM<bool>( "export_idf.auto_adjust",
&m_ExportIdf.auto_adjust, false ) );
m_params.emplace_back( new PARAM<int>( "export_idf.ref_units", &m_ExportIdf.ref_units, 0 ) );
m_params.emplace_back( new PARAM<int>( "export_idf.ref_units",
&m_ExportIdf.ref_units, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_idf.ref_x", &m_ExportIdf.ref_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_idf.ref_x",
&m_ExportIdf.ref_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_idf.ref_y", &m_ExportIdf.ref_y, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_idf.ref_y",
&m_ExportIdf.ref_y, 0 ) );
m_params.emplace_back(
new PARAM<bool>( "export_idf.units_mils", &m_ExportIdf.units_mils, false ) );
m_params.emplace_back( new PARAM<bool>( "export_idf.units_mils",
&m_ExportIdf.units_mils, false ) );
m_params.emplace_back(
new PARAM<int>( "export_step.origin_mode", &m_ExportStep.origin_mode, 0 ) );
m_params.emplace_back( new PARAM<int>( "export_step.origin_mode",
&m_ExportStep.origin_mode, 0 ) );
m_params.emplace_back(
new PARAM<int>( "export_step.origin_units", &m_ExportStep.origin_units, 0 ) );
m_params.emplace_back( new PARAM<int>( "export_step.origin_units",
&m_ExportStep.origin_units, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_step.origin_x", &m_ExportStep.origin_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_step.origin_x",
&m_ExportStep.origin_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_step.origin_y", &m_ExportStep.origin_y, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_step.origin_y",
&m_ExportStep.origin_y, 0 ) );
m_params.emplace_back(
new PARAM<bool>( "export_step.no_virtual", &m_ExportStep.no_virtual, false ) );
m_params.emplace_back( new PARAM<bool>( "export_step.no_virtual",
&m_ExportStep.no_virtual, false ) );
m_params.emplace_back(
new PARAM<bool>( "export_svg.black_and_white", &m_ExportSvg.black_and_white, false ) );
m_params.emplace_back( new PARAM<bool>( "export_svg.black_and_white",
&m_ExportSvg.black_and_white, false ) );
m_params.emplace_back(
new PARAM<bool>( "export_svg.mirror", &m_ExportSvg.mirror, false ) );
m_params.emplace_back( new PARAM<bool>( "export_svg.mirror",
&m_ExportSvg.mirror, false ) );
m_params.emplace_back( new PARAM<bool>( "export_svg.one_file", &m_ExportSvg.one_file, false ) );
m_params.emplace_back( new PARAM<bool>( "export_svg.one_file",
&m_ExportSvg.one_file, false ) );
m_params.emplace_back(new PARAM<bool>(
"export_svg.plot_board_edges", &m_ExportSvg.plot_board_edges, true ) );
m_params.emplace_back(new PARAM<bool>( "export_svg.plot_board_edges",
&m_ExportSvg.plot_board_edges, true ) );
m_params.emplace_back( new PARAM<int>( "export_svg.page_size", &m_ExportSvg.page_size, 0 ) );
m_params.emplace_back( new PARAM<int>( "export_svg.page_size",
&m_ExportSvg.page_size, 0 ) );
m_params.emplace_back(
new PARAM<wxString>( "export_svg.output_dir", &m_ExportSvg.output_dir, "" ) );
m_params.emplace_back( new PARAM<wxString>( "export_svg.output_dir",
&m_ExportSvg.output_dir, "" ) );
m_params.emplace_back( new PARAM_LIST<int>( "export_svg.layers", &m_ExportSvg.layers, {} ) );
m_params.emplace_back( new PARAM_LIST<int>( "export_svg.layers",
&m_ExportSvg.layers, {} ) );
m_params.emplace_back( new PARAM<int>( "export_vrml.units", &m_ExportVrml.units, 1 ) );
m_params.emplace_back( new PARAM<int>( "export_vrml.units",
&m_ExportVrml.units, 1 ) );
m_params.emplace_back( new PARAM<bool>(
"export_vrml.copy_3d_models", &m_ExportVrml.copy_3d_models, false ) );
m_params.emplace_back( new PARAM<bool>( "export_vrml.copy_3d_models",
&m_ExportVrml.copy_3d_models, false ) );
m_params.emplace_back( new PARAM<bool>(
"export_vrml.use_relative_paths", &m_ExportVrml.use_relative_paths, false ) );
m_params.emplace_back( new PARAM<bool>( "export_vrml.use_relative_paths",
&m_ExportVrml.use_relative_paths, false ) );
m_params.emplace_back( new PARAM<bool>(
"export_vrml.use_plain_pcb", &m_ExportVrml.use_plain_pcb, false ) );
m_params.emplace_back( new PARAM<bool>( "export_vrml.use_plain_pcb",
&m_ExportVrml.use_plain_pcb, false ) );
m_params.emplace_back( new PARAM<int>( "export_vrml.ref_units", &m_ExportVrml.ref_units, 0 ) );
m_params.emplace_back( new PARAM<int>( "export_vrml.ref_units",
&m_ExportVrml.ref_units, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_vrml.ref_x", &m_ExportVrml.ref_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_vrml.ref_x",
&m_ExportVrml.ref_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_vrml.ref_y", &m_ExportVrml.ref_y, 0 ) );
m_params.emplace_back( new PARAM<double>( "export_vrml.ref_y",
&m_ExportVrml.ref_y, 0 ) );
m_params.emplace_back( new PARAM<int>( "zones.hatching_style", &m_Zones.hatching_style, 0 ) );
m_params.emplace_back( new PARAM<int>( "zones.hatching_style",
&m_Zones.hatching_style, 0 ) );
m_params.emplace_back( new PARAM<wxString>( "zones.net_filter", &m_Zones.net_filter, "" ) );
m_params.emplace_back( new PARAM<wxString>( "zones.net_filter",
&m_Zones.net_filter, "" ) );
m_params.emplace_back( new PARAM<int>( "zones.net_sort_mode", &m_Zones.net_sort_mode, 1 ) );
m_params.emplace_back( new PARAM<int>( "zones.net_sort_mode",
&m_Zones.net_sort_mode, 1 ) );
m_params.emplace_back(
new PARAM<double>( "zones.clearance", &m_Zones.clearance, ZONE_CLEARANCE_MIL ) );
m_params.emplace_back( new PARAM<double>( "zones.clearance",
&m_Zones.clearance, ZONE_CLEARANCE_MIL ) );
m_params.emplace_back( new PARAM<double>( "zones.min_thickness",
&m_Zones.min_thickness, ZONE_THICKNESS_MIL ) );
@ -316,71 +333,74 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<double>( "zones.thermal_relief_copper_width",
&m_Zones.thermal_relief_copper_width, ZONE_THERMAL_RELIEF_COPPER_WIDTH_MIL ) );
m_params.emplace_back(
new PARAM<int>( "import_graphics.layer", &m_ImportGraphics.layer, Dwgs_User ) );
m_params.emplace_back( new PARAM<int>( "import_graphics.layer",
&m_ImportGraphics.layer, Dwgs_User ) );
m_params.emplace_back( new PARAM<bool>( "import_graphics.interactive_placement",
&m_ImportGraphics.interactive_placement, true ) );
m_params.emplace_back( new PARAM<int>(
"import_graphics.line_width_units", &m_ImportGraphics.line_width_units, 0 ) );
m_params.emplace_back( new PARAM<int>( "import_graphics.line_width_units",
&m_ImportGraphics.line_width_units, 0 ) );
m_params.emplace_back(
new PARAM<double>( "import_graphics.line_width", &m_ImportGraphics.line_width, 0.2 ) );
m_params.emplace_back( new PARAM<double>( "import_graphics.line_width",
&m_ImportGraphics.line_width, 0.2 ) );
m_params.emplace_back(
new PARAM<int>( "import_graphics.origin_units", &m_ImportGraphics.origin_units, 0 ) );
m_params.emplace_back( new PARAM<int>( "import_graphics.origin_units",
&m_ImportGraphics.origin_units, 0 ) );
m_params.emplace_back(
new PARAM<double>( "import_graphics.origin_x", &m_ImportGraphics.origin_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "import_graphics.origin_x",
&m_ImportGraphics.origin_x, 0 ) );
m_params.emplace_back(
new PARAM<double>( "import_graphics.origin_y", &m_ImportGraphics.origin_y, 0 ) );
m_params.emplace_back( new PARAM<double>( "import_graphics.origin_y",
&m_ImportGraphics.origin_y, 0 ) );
m_params.emplace_back(
new PARAM<int>( "import_graphics.dxf_units", &m_ImportGraphics.dxf_units, 0 ) );
m_params.emplace_back( new PARAM<int>( "import_graphics.dxf_units",
&m_ImportGraphics.dxf_units, 0 ) );
m_params.emplace_back(
new PARAM<int>( "netlist.report_filter", &m_NetlistDialog.report_filter, -1 ) );
m_params.emplace_back( new PARAM<int>( "netlist.report_filter",
&m_NetlistDialog.report_filter, -1 ) );
m_params.emplace_back( new PARAM<bool>(
"netlist.update_footprints", &m_NetlistDialog.update_footprints, true ) );
m_params.emplace_back( new PARAM<bool>( "netlist.update_footprints",
&m_NetlistDialog.update_footprints, true ) );
m_params.emplace_back( new PARAM<bool>(
"netlist.delete_shorting_tracks", &m_NetlistDialog.delete_shorting_tracks, false ) );
m_params.emplace_back( new PARAM<bool>( "netlist.delete_shorting_tracks",
&m_NetlistDialog.delete_shorting_tracks, false ) );
m_params.emplace_back( new PARAM<bool>(
"netlist.delete_extra_footprints", &m_NetlistDialog.delete_extra_footprints, false ) );
m_params.emplace_back( new PARAM<bool>( "netlist.delete_extra_footprints",
&m_NetlistDialog.delete_extra_footprints, false ) );
m_params.emplace_back( new PARAM<bool>(
"netlist.delete_single_pad_nets", &m_NetlistDialog.delete_single_pad_nets, false ) );
m_params.emplace_back( new PARAM<bool>( "netlist.delete_single_pad_nets",
&m_NetlistDialog.delete_single_pad_nets, false ) );
m_params.emplace_back( new PARAM<bool>(
"netlist.associate_by_ref_sch", &m_NetlistDialog.associate_by_ref_sch, false ) );
m_params.emplace_back( new PARAM<bool>( "netlist.associate_by_ref_sch",
&m_NetlistDialog.associate_by_ref_sch, false ) );
m_params.emplace_back(new PARAM<int>( "place_file.units", &m_PlaceFile.units, 1 ) );
m_params.emplace_back(new PARAM<int>( "place_file.units",
&m_PlaceFile.units, 1 ) );
m_params.emplace_back(
new PARAM<int>( "place_file.file_options", &m_PlaceFile.file_options, 0 ) );
m_params.emplace_back( new PARAM<int>( "place_file.file_options",
&m_PlaceFile.file_options, 0 ) );
m_params.emplace_back(
new PARAM<int>( "place_file.file_format", &m_PlaceFile.file_format, 0 ) );
m_params.emplace_back( new PARAM<int>( "place_file.file_format",
&m_PlaceFile.file_format, 0 ) );
m_params.emplace_back( new PARAM<bool>(
"place_file.include_board_edge", &m_PlaceFile.include_board_edge, false ) );
m_params.emplace_back( new PARAM<bool>( "place_file.include_board_edge",
&m_PlaceFile.include_board_edge, false ) );
m_params.emplace_back( new PARAM<int>( "plot.all_layers_on_one_page",
&m_Plot.all_layers_on_one_page, 1 ) );
m_params.emplace_back(
new PARAM<int>( "plot.pads_drill_mode", &m_Plot.pads_drill_mode, 2 ) );
m_params.emplace_back( new PARAM<int>( "plot.pads_drill_mode",
&m_Plot.pads_drill_mode, 2 ) );
m_params.emplace_back( new PARAM<double>( "plot.fine_scale_x", &m_Plot.fine_scale_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "plot.fine_scale_x",
&m_Plot.fine_scale_x, 0 ) );
m_params.emplace_back( new PARAM<double>( "plot.fine_scale_y", &m_Plot.fine_scale_y, 0 ) );
m_params.emplace_back( new PARAM<double>( "plot.fine_scale_y",
&m_Plot.fine_scale_y, 0 ) );
m_params.emplace_back(
new PARAM<double>( "plot.ps_fine_width_adjust", &m_Plot.ps_fine_width_adjust, 0 ) );
m_params.emplace_back( new PARAM<double>( "plot.ps_fine_width_adjust",
&m_Plot.ps_fine_width_adjust, 0 ) );
m_params.emplace_back( new PARAM<bool>( "plot.check_zones_before_plotting",
&m_Plot.check_zones_before_plotting, true ) );
@ -397,38 +417,38 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<int>( "footprint_wizard_list.height",
&m_FootprintWizardList.height, -1 ) );
m_params.emplace_back( new PARAM<bool>(
"reannotate_dialog.annotate_sort_on_modules", &m_Reannotate.sort_on_fp_location, true ) );
m_params.emplace_back( new PARAM<bool>(
"reannotate_dialog.annotate_remove_front_prefix", &m_Reannotate.remove_front_prefix, false ) );
m_params.emplace_back( new PARAM<bool>(
"reannotate_dialog.annotate_remove_back_prefix", &m_Reannotate.remove_back_prefix, false ) );
m_params.emplace_back( new PARAM<bool>(
"reannotate_dialog.annotate_update_schematic", &m_Reannotate.update_schematic, true ) );
m_params.emplace_back( new PARAM<bool>(
"reannotate_dialog.annotate_exclude_locked", &m_Reannotate.exclude_locked, false ) );
m_params.emplace_back( new PARAM<bool>( "reannotate_dialog.annotate_sort_on_modules",
&m_Reannotate.sort_on_fp_location, true ) );
m_params.emplace_back( new PARAM<bool>( "reannotate_dialog.annotate_remove_front_prefix",
&m_Reannotate.remove_front_prefix, false ) );
m_params.emplace_back( new PARAM<bool>( "reannotate_dialog.annotate_remove_back_prefix",
&m_Reannotate.remove_back_prefix, false ) );
m_params.emplace_back( new PARAM<bool>( "reannotate_dialog.annotate_update_schematic",
&m_Reannotate.update_schematic, true ) );
m_params.emplace_back( new PARAM<bool>( "reannotate_dialog.annotate_exclude_locked",
&m_Reannotate.exclude_locked, false ) );
m_params.emplace_back(
new PARAM<int>( "reannotate_dialog.annotate_grid_index", &m_Reannotate.grid_index, 0 ) );
m_params.emplace_back(
new PARAM<int>( "reannotate_dialog.annotate_sort_code", &m_Reannotate.sort_code, 0 ) );
m_params.emplace_back(
new PARAM<int>( "reannotate_dialog.annotate_choice", &m_Reannotate.annotation_choice, 0 ) );
m_params.emplace_back( new PARAM<int>(
"reannotate_dialog.annotate_report_severity", &m_Reannotate.report_severity, 0 ) );
m_params.emplace_back( new PARAM<int>( "reannotate_dialog.annotate_grid_index",
&m_Reannotate.grid_index, 0 ) );
m_params.emplace_back( new PARAM<int>( "reannotate_dialog.annotate_sort_code",
&m_Reannotate.sort_code, 0 ) );
m_params.emplace_back( new PARAM<int>( "reannotate_dialog.annotate_choice",
&m_Reannotate.annotation_choice, 0 ) );
m_params.emplace_back( new PARAM<int>( "reannotate_dialog.annotate_report_severity",
&m_Reannotate.report_severity, 0 ) );
m_params.emplace_back( new PARAM<wxString>(
"reannotate_dialog.annotate_front_refdes_start", &m_Reannotate.front_refdes_start, "1" ) );
m_params.emplace_back( new PARAM<wxString>(
"reannotate_dialog.annotate_back_refdes_start", &m_Reannotate.back_refdes_start, "" ) );
m_params.emplace_back( new PARAM<wxString>(
"reannotate_dialog.annotate_front_prefix", &m_Reannotate.front_prefix, "" ) );
m_params.emplace_back(
new PARAM<wxString>( "reannotate_dialog.annotate_back_prefix", &m_Reannotate.back_prefix, "" ) );
m_params.emplace_back( new PARAM<wxString>(
"reannotate_dialog.annotate_exclude_list", &m_Reannotate.exclude_list, "" ) );
m_params.emplace_back( new PARAM<wxString>(
"reannotate_dialog.annotate_report_file_name", &m_Reannotate.report_file_name, "" ) );
m_params.emplace_back( new PARAM<wxString>( "reannotate_dialog.annotate_front_refdes_start",
&m_Reannotate.front_refdes_start, "1" ) );
m_params.emplace_back( new PARAM<wxString>( "reannotate_dialog.annotate_back_refdes_start",
&m_Reannotate.back_refdes_start, "" ) );
m_params.emplace_back( new PARAM<wxString>( "reannotate_dialog.annotate_front_prefix",
&m_Reannotate.front_prefix, "" ) );
m_params.emplace_back( new PARAM<wxString>( "reannotate_dialog.annotate_back_prefix",
&m_Reannotate.back_prefix, "" ) );
m_params.emplace_back( new PARAM<wxString>( "reannotate_dialog.annotate_exclude_list",
&m_Reannotate.exclude_list, "" ) );
m_params.emplace_back( new PARAM<wxString>( "reannotate_dialog.annotate_report_file_name",
&m_Reannotate.report_file_name, "" ) );
#if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU)
m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "action_plugins",
@ -476,10 +496,10 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
addParamsForWindow( &m_FootprintWizard, "footprint_wizard" );
m_params.emplace_back( new PARAM<wxString>( "system.last_footprint_lib_dir",
&m_lastFootprintLibDir, "" ) );
&m_lastFootprintLibDir, "" ) );
m_params.emplace_back( new PARAM<wxString>( "system.last_footprint3d_dir",
&m_lastFootprint3dDir, "" ) );
&m_lastFootprint3dDir, "" ) );
}
@ -495,68 +515,67 @@ bool PCBNEW_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
//
// NOTE: there's no value in line-wrapping these; it just makes the table unreadable.
//
ret &= fromLegacy<bool>( aCfg, "ShowLayerManagerTools", "aui.show_layer_manager" );
ret &= fromLegacy<bool>( aCfg, "ShowLayerManagerTools", "aui.show_layer_manager" );
ret &= fromLegacy<int>( aCfg, "FootprintChooserHSashPosition", "footprint_chooser.sash_h" );
ret &= fromLegacy<int>( aCfg, "FootprintChooserVSashPosition", "footprint_chooser.sash_v" );
ret &= fromLegacy<int>( aCfg, "FootprintChooserWidth", "footprint_chooser.width" );
ret &= fromLegacy<int>( aCfg, "FootprintChooserHeight", "footprint_chooser.height" );
ret &= fromLegacy<bool>( aCfg, "FlipLeftRight", "editing.flip_left_right" );
ret &= fromLegacy<bool>( aCfg, "MagneticGraphics", "editing.magnetic_graphics" );
ret &= fromLegacy<int>( aCfg, "MagneticPads", "editing.magnetic_pads" );
ret &= fromLegacy<int>( aCfg, "MagneticTracks", "editing.magnetic_tracks" );
ret &= fromLegacy<bool>( aCfg, "DisplayPolarCoords", "editing.polar_coords" );
ret &= fromLegacy<bool>( aCfg, "Use45DegreeGraphicSegments",
"editing.use_45_degree_graphic_segments" );
ret &= fromLegacy<bool>( aCfg, "FlipLeftRight", "editing.flip_left_right" );
ret &= fromLegacy<bool>( aCfg, "MagneticGraphics", "editing.magnetic_graphics" );
ret &= fromLegacy<int>( aCfg, "MagneticPads", "editing.magnetic_pads" );
ret &= fromLegacy<int>( aCfg, "MagneticTracks", "editing.magnetic_tracks" );
ret &= fromLegacy<bool>( aCfg, "DisplayPolarCoords", "editing.polar_coords" );
ret &= fromLegacy<bool>( aCfg, "Use45DegreeGraphicSegments", "editing.use_45_degree_graphic_segments" );
ret &= fromLegacy<bool>( aCfg, "PcbAffT", "pcb_display.graphic_items_fill" );
ret &= fromLegacy<int>( aCfg, "MaxLnkS", "pcb_display.max_links_shown" );
ret &= fromLegacy<bool>( aCfg, "ModAffC", "pcb_display.footprint_edge_fill" );
ret &= fromLegacy<bool>( aCfg, "ModAffT", "pcb_display.footprint_text_fill" );
ret &= fromLegacy<int>( aCfg, "ShowNetNamesMode", "pcb_display.net_names_mode" );
ret &= fromLegacy<int>( aCfg, "PcbDisplayOrigin", "pcb_display.origin_mode" );
ret &= fromLegacy<bool>( aCfg, "PcbInvertXAxis", "pcb_display.origin_invert_x_axis" );
ret &= fromLegacy<bool>( aCfg, "PcbInvertYAxis", "pcb_display.origin_invert_y_axis" );
ret &= fromLegacy<bool>( aCfg, "PadAffG", "pcb_display.pad_clearance" );
ret &= fromLegacy<bool>( aCfg, "PadFill", "pcb_display.pad_fill" );
ret &= fromLegacy<bool>( aCfg, "PadSNum", "pcb_display.pad_numbers" );
ret &= fromLegacy<bool>( aCfg, "ShowRatsnestLines", "pcb_display.ratsnest_global" );
ret &= fromLegacy<bool>( aCfg, "ShowRatsnestModuleLines", "pcb_display.ratsnest_footprint" );
ret &= fromLegacy<bool>( aCfg, "CurvedRatsnestLines", "pcb_display.ratsnest_curved" );
ret &= fromLegacy<int>( aCfg, "RotationAngle", "pcb_display.rotation_angle" );
ret &= fromLegacy<int>( aCfg, "TrackDisplayClearance", "pcb_display.track_clearance_mode" );
ret &= fromLegacy<bool>( aCfg, "DisplayTrackFilled", "pcb_display.track_fill" );
ret &= fromLegacy<bool>( aCfg, "ViaFill", "pcb_display.via_fill" );
ret &= fromLegacy<int>( aCfg, "PcbShowZonesMode", "pcb_display.zone_mode" );
ret &= fromLegacy<bool>( aCfg, "PcbAffT", "pcb_display.graphic_items_fill" );
ret &= fromLegacy<int>( aCfg, "MaxLnkS", "pcb_display.max_links_shown" );
ret &= fromLegacy<bool>( aCfg, "ModAffC", "pcb_display.footprint_edge_fill" );
ret &= fromLegacy<bool>( aCfg, "ModAffT", "pcb_display.footprint_text_fill" );
ret &= fromLegacy<int>( aCfg, "ShowNetNamesMode", "pcb_display.net_names_mode" );
ret &= fromLegacy<int>( aCfg, "PcbDisplayOrigin", "pcb_display.origin_mode" );
ret &= fromLegacy<bool>( aCfg, "PcbInvertXAxis", "pcb_display.origin_invert_x_axis" );
ret &= fromLegacy<bool>( aCfg, "PcbInvertYAxis", "pcb_display.origin_invert_y_axis" );
ret &= fromLegacy<bool>( aCfg, "PadAffG", "pcb_display.pad_clearance" );
ret &= fromLegacy<bool>( aCfg, "PadFill", "pcb_display.pad_fill" );
ret &= fromLegacy<bool>( aCfg, "PadSNum", "pcb_display.pad_numbers" );
ret &= fromLegacy<bool>( aCfg, "ShowRatsnestLines", "pcb_display.ratsnest_global" );
ret &= fromLegacy<bool>( aCfg, "ShowRatsnestModuleLines", "pcb_display.ratsnest_footprint" );
ret &= fromLegacy<bool>( aCfg, "CurvedRatsnestLines", "pcb_display.ratsnest_curved" );
ret &= fromLegacy<int>( aCfg, "RotationAngle", "pcb_display.rotation_angle" );
ret &= fromLegacy<int>( aCfg, "TrackDisplayClearance", "pcb_display.track_clearance_mode" );
ret &= fromLegacy<bool>( aCfg, "DisplayTrackFilled", "pcb_display.track_fill" );
ret &= fromLegacy<bool>( aCfg, "ViaFill", "pcb_display.via_fill" );
ret &= fromLegacy<int>( aCfg, "PcbShowZonesMode", "pcb_display.zone_mode" );
ret &= fromLegacy<double>( aCfg, "PlotLineWidth_mm", "plot.line_width" );
ret &= fromLegacy<double>( aCfg, "PlotLineWidth_mm", "plot.line_width" );
aCfg->SetPath( "/dialogs/cleanup_tracks" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupVias", "cleanup.cleanup_vias" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupMergeSegments", "cleanup.merge_segments" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupUnconnected", "cleanup.cleanup_unconnected" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupShortCircuit", "cleanup.cleanup_short_circuits" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupTracksInPads", "cleanup.cleanup_tracks_in_pad" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupVias", "cleanup.cleanup_vias" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupMergeSegments", "cleanup.merge_segments" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupUnconnected", "cleanup.cleanup_unconnected" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupShortCircuit", "cleanup.cleanup_short_circuits" );
ret &= fromLegacy<bool>( aCfg, "DialogCleanupTracksInPads", "cleanup.cleanup_tracks_in_pad" );
aCfg->SetPath( "../.." );
ret &= fromLegacy<bool>( aCfg, "RefillZonesBeforeDrc", "drc_dialog.refill_zones" );
ret &= fromLegacy<bool>( aCfg, "DrcTestFootprints", "drc_dialog.test_footprints" );
ret &= fromLegacy<bool>( aCfg, "RefillZonesBeforeDrc", "drc_dialog.refill_zones" );
ret &= fromLegacy<bool>( aCfg, "DrcTestFootprints", "drc_dialog.test_footprints" );
ret &= fromLegacy<bool>( aCfg, "DrillMergePTHNPTH", "gen_drill.merge_pth_npth" );
ret &= fromLegacy<bool>( aCfg, "DrillMinHeader", "gen_drill.minimal_header" );
ret &= fromLegacy<bool>( aCfg, "DrillMirrorYOpt", "gen_drill.mirror" );
ret &= fromLegacy<bool>( aCfg, "DrillUnit", "gen_drill.unit_drill_is_inch" );
ret &= fromLegacy<bool>( aCfg, "OvalHolesRouteMode", "gen_drill.use_route_for_oval_holes" );
ret &= fromLegacy<int>( aCfg, "DrillFileType", "gen_drill.drill_file_type" );
ret &= fromLegacy<int>( aCfg, "DrillMapFileType", "gen_drill.map_file_type" );
ret &= fromLegacy<int>( aCfg, "DrillZerosFormat", "gen_drill.zeros_format" );
ret &= fromLegacy<bool>( aCfg, "DrillMergePTHNPTH", "gen_drill.merge_pth_npth" );
ret &= fromLegacy<bool>( aCfg, "DrillMinHeader", "gen_drill.minimal_header" );
ret &= fromLegacy<bool>( aCfg, "DrillMirrorYOpt", "gen_drill.mirror" );
ret &= fromLegacy<bool>( aCfg, "DrillUnit", "gen_drill.unit_drill_is_inch" );
ret &= fromLegacy<bool>( aCfg, "OvalHolesRouteMode", "gen_drill.use_route_for_oval_holes" );
ret &= fromLegacy<int>( aCfg, "DrillFileType", "gen_drill.drill_file_type" );
ret &= fromLegacy<int>( aCfg, "DrillMapFileType", "gen_drill.map_file_type" );
ret &= fromLegacy<int>( aCfg, "DrillZerosFormat", "gen_drill.zeros_format" );
ret &= fromLegacy<bool>( aCfg, "IDFRefAutoAdj", "export_idf.auto_adjust" );
ret &= fromLegacy<int>( aCfg, "IDFRefUnits", "export_idf.ref_units" );
ret &= fromLegacy<double>( aCfg, "IDFRefX", "export_idf.ref_x" );
ret &= fromLegacy<double>( aCfg, "IDFRefY", "export_idf.ref_y" );
ret &= fromLegacy<bool>( aCfg, "IDFExportThou", "export_idf.units_mils" );
ret &= fromLegacy<bool>( aCfg, "IDFRefAutoAdj", "export_idf.auto_adjust" );
ret &= fromLegacy<int>( aCfg, "IDFRefUnits", "export_idf.ref_units" );
ret &= fromLegacy<double>( aCfg, "IDFRefX", "export_idf.ref_x" );
ret &= fromLegacy<double>( aCfg, "IDFRefY", "export_idf.ref_y" );
ret &= fromLegacy<bool>( aCfg, "IDFExportThou", "export_idf.units_mils" );
ret &= fromLegacy<int>( aCfg, "STEP_Origin_Opt", "export_step.origin_mode" );
ret &= fromLegacy<int>( aCfg, "STEP_UserOriginUnits", "export_step.origin_units" );