Eradicate globals for PCB_GENERAL_SETTINGS.

Fixes: lp:1832896
* https://bugs.launchpad.net/kicad/+bug/1832896
This commit is contained in:
Jeff Young 2019-06-26 13:12:32 +01:00
parent 7903cfa1da
commit e785c140b9
12 changed files with 81 additions and 76 deletions

View File

@ -372,21 +372,18 @@ void PARAM_CFG_DOUBLE::SaveParam( wxConfigBase* aConfig ) const
} }
PARAM_CFG_BOOL::PARAM_CFG_BOOL( const wxString& ident, bool* ptparam, PARAM_CFG_BOOL::PARAM_CFG_BOOL( const wxString& ident, bool* ptparam, int default_val,
int default_val, const wxChar* group ) : const wxChar* group, const wxString& legacy ) :
PARAM_CFG_BASE( ident, PARAM_BOOL, group ) PARAM_CFG_BASE( ident, PARAM_BOOL, group, legacy )
{ {
m_Pt_param = ptparam; m_Pt_param = ptparam;
m_Default = default_val ? true : false; m_Default = default_val ? true : false;
} }
PARAM_CFG_BOOL::PARAM_CFG_BOOL( bool Insetup, PARAM_CFG_BOOL::PARAM_CFG_BOOL( bool Insetup, const wxString& ident, bool* ptparam,
const wxString& ident, int default_val, const wxChar* group, const wxString& legacy ) :
bool* ptparam, PARAM_CFG_BASE( ident, PARAM_BOOL, group, legacy )
int default_val,
const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_BOOL, group )
{ {
m_Pt_param = ptparam; m_Pt_param = ptparam;
m_Default = default_val ? true : false; m_Default = default_val ? true : false;
@ -399,7 +396,10 @@ void PARAM_CFG_BOOL::ReadParam( wxConfigBase* aConfig ) const
if( !m_Pt_param || !aConfig ) if( !m_Pt_param || !aConfig )
return; return;
int itmp = aConfig->Read( m_Ident, (int) m_Default ); int itmp = (int) m_Default;
if( !aConfig->Read( m_Ident, &itmp ) && m_Ident_legacy != wxEmptyString )
aConfig->Read( m_Ident_legacy, &itmp );
*m_Pt_param = itmp ? true : false; *m_Pt_param = itmp ? true : false;
} }
@ -414,8 +414,7 @@ void PARAM_CFG_BOOL::SaveParam( wxConfigBase* aConfig ) const
} }
PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( const wxString& ident, PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( const wxString& ident, wxString* ptparam,
wxString* ptparam,
const wxChar* group ) : const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_WXSTRING, group ) PARAM_CFG_BASE( ident, PARAM_WXSTRING, group )
{ {
@ -423,10 +422,8 @@ PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( const wxString& ident,
} }
PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( bool Insetup, const wxString& ident, PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( bool Insetup, const wxString& ident, wxString* ptparam,
wxString* ptparam, const wxString& default_val, const wxChar* group ) :
const wxString& default_val,
const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_WXSTRING, group ) PARAM_CFG_BASE( ident, PARAM_WXSTRING, group )
{ {
m_Pt_param = ptparam; m_Pt_param = ptparam;

View File

@ -243,9 +243,11 @@ public:
public: public:
PARAM_CFG_BOOL( const wxString& ident, bool* ptparam, PARAM_CFG_BOOL( const wxString& ident, bool* ptparam,
int default_val = false, const wxChar* group = NULL ); int default_val = false, const wxChar* group = NULL,
const wxString& legacy_ident = wxEmptyString );
PARAM_CFG_BOOL( bool Insetup, const wxString& ident, bool* ptparam, PARAM_CFG_BOOL( bool Insetup, const wxString& ident, bool* ptparam,
int default_val = false, const wxChar* group = NULL ); int default_val = false, const wxChar* group = NULL,
const wxString& legacy_ident = wxEmptyString );
virtual void ReadParam( wxConfigBase* aConfig ) const override; virtual void ReadParam( wxConfigBase* aConfig ) const override;
virtual void SaveParam( wxConfigBase* aConfig ) const override; virtual void SaveParam( wxConfigBase* aConfig ) const override;

View File

@ -118,7 +118,6 @@ class SETTINGS
return aEntryName; return aEntryName;
} }
private:
wxString m_prefix; wxString m_prefix;
PARAM_CFG_ARRAY m_params; PARAM_CFG_ARRAY m_params;
}; };

View File

@ -45,9 +45,9 @@ bool PANEL_MODEDIT_SETTINGS::TransferDataToWindow()
m_UnitsSelection->SetSelection( m_frame->GetUserUnits() == INCHES ? 0 : 1 ); m_UnitsSelection->SetSelection( m_frame->GetUserUnits() == INCHES ? 0 : 1 );
// Editing options // Editing options
m_Segments_45_Only_Ctrl->SetValue( PCB_GENERAL_SETTINGS::g_Use45DegreeGraphicSegments ); m_Segments_45_Only_Ctrl->SetValue( m_frame->Settings().m_Use45DegreeGraphicSegments );
m_MagneticPads->SetValue( PCB_GENERAL_SETTINGS::g_MagneticPads == CAPTURE_ALWAYS ); m_MagneticPads->SetValue( m_frame->Settings().m_MagneticPads == CAPTURE_ALWAYS );
m_dragSelects->SetValue( PCB_GENERAL_SETTINGS::g_DragSelects ); m_dragSelects->SetValue( m_frame->Settings().m_DragSelects );
return true; return true;
} }
@ -60,9 +60,9 @@ bool PANEL_MODEDIT_SETTINGS::TransferDataFromWindow()
m_frame->SetUserUnits( m_UnitsSelection->GetSelection() == 0 ? INCHES : MILLIMETRES ); m_frame->SetUserUnits( m_UnitsSelection->GetSelection() == 0 ? INCHES : MILLIMETRES );
// Editing options // Editing options
PCB_GENERAL_SETTINGS::g_Use45DegreeGraphicSegments = m_Segments_45_Only_Ctrl->GetValue(); m_frame->Settings().m_Use45DegreeGraphicSegments = m_Segments_45_Only_Ctrl->GetValue();
PCB_GENERAL_SETTINGS::g_MagneticPads = m_MagneticPads->GetValue() ? CAPTURE_ALWAYS : NO_EFFECT; m_frame->Settings().m_MagneticPads = m_MagneticPads->GetValue() ? CAPTURE_ALWAYS : NO_EFFECT;
PCB_GENERAL_SETTINGS::g_DragSelects = m_dragSelects->GetValue(); m_frame->Settings().m_DragSelects = m_dragSelects->GetValue();
return true; return true;
} }

View File

@ -42,6 +42,7 @@ PANEL_PCBNEW_SETTINGS::PANEL_PCBNEW_SETTINGS( PCB_EDIT_FRAME* aFrame, PAGED_DIAL
bool PANEL_PCBNEW_SETTINGS::TransferDataToWindow() bool PANEL_PCBNEW_SETTINGS::TransferDataToWindow()
{ {
const PCB_DISPLAY_OPTIONS* displ_opts = (PCB_DISPLAY_OPTIONS*) m_Frame->GetDisplayOptions(); const PCB_DISPLAY_OPTIONS* displ_opts = (PCB_DISPLAY_OPTIONS*) m_Frame->GetDisplayOptions();
const PCB_GENERAL_SETTINGS& general_opts = m_Frame->Settings();
/* Set display options */ /* Set display options */
m_PolarDisplay->SetSelection( m_Frame->GetShowPolarCoords() ? 1 : 0 ); m_PolarDisplay->SetSelection( m_Frame->GetShowPolarCoords() ? 1 : 0 );
@ -55,12 +56,12 @@ bool PANEL_PCBNEW_SETTINGS::TransferDataToWindow()
rotationAngle = AngleToStringDegrees( (double)m_Frame->GetRotationAngle() ); rotationAngle = AngleToStringDegrees( (double)m_Frame->GetRotationAngle() );
m_RotationAngle->SetValue( rotationAngle ); m_RotationAngle->SetValue( rotationAngle );
m_Segments_45_Only_Ctrl->SetValue( PCB_GENERAL_SETTINGS::g_Use45DegreeGraphicSegments ); m_Segments_45_Only_Ctrl->SetValue( general_opts.m_Use45DegreeGraphicSegments );
m_magneticPadChoice->SetSelection( PCB_GENERAL_SETTINGS::g_MagneticPads ); m_magneticPadChoice->SetSelection( general_opts.m_MagneticPads );
m_magneticTrackChoice->SetSelection( PCB_GENERAL_SETTINGS::g_MagneticTracks ); m_magneticTrackChoice->SetSelection( general_opts.m_MagneticTracks );
m_magneticGraphicsChoice->SetSelection( !PCB_GENERAL_SETTINGS::g_MagneticGraphics ); m_magneticGraphicsChoice->SetSelection( !general_opts.m_MagneticGraphics );
m_UseEditKeyForWidth->SetValue( PCB_GENERAL_SETTINGS::g_EditHotkeyChangesTrackWidth ); m_UseEditKeyForWidth->SetValue( general_opts.m_EditHotkeyChangesTrackWidth );
m_dragSelects->SetValue( PCB_GENERAL_SETTINGS::g_DragSelects ); m_dragSelects->SetValue( general_opts.m_DragSelects );
m_Show_Page_Limits->SetValue( m_Frame->ShowPageLimits() ); m_Show_Page_Limits->SetValue( m_Frame->ShowPageLimits() );
@ -77,12 +78,12 @@ bool PANEL_PCBNEW_SETTINGS::TransferDataFromWindow()
/* Updating the combobox to display the active layer. */ /* Updating the combobox to display the active layer. */
PCB_GENERAL_SETTINGS::g_Use45DegreeGraphicSegments = m_Segments_45_Only_Ctrl->GetValue(); m_Frame->Settings().m_Use45DegreeGraphicSegments = m_Segments_45_Only_Ctrl->GetValue();
PCB_GENERAL_SETTINGS::g_MagneticPads = (MAGNETIC_OPTIONS) m_magneticPadChoice->GetSelection(); m_Frame->Settings().m_MagneticPads = (MAGNETIC_OPTIONS) m_magneticPadChoice->GetSelection();
PCB_GENERAL_SETTINGS::g_MagneticTracks = (MAGNETIC_OPTIONS) m_magneticTrackChoice->GetSelection(); m_Frame->Settings().m_MagneticTracks = (MAGNETIC_OPTIONS) m_magneticTrackChoice->GetSelection();
PCB_GENERAL_SETTINGS::g_MagneticGraphics = !m_magneticGraphicsChoice->GetSelection(); m_Frame->Settings().m_MagneticGraphics = !m_magneticGraphicsChoice->GetSelection();
PCB_GENERAL_SETTINGS::g_EditHotkeyChangesTrackWidth = m_UseEditKeyForWidth->GetValue(); m_Frame->Settings().m_EditHotkeyChangesTrackWidth = m_UseEditKeyForWidth->GetValue();
PCB_GENERAL_SETTINGS::g_DragSelects = m_dragSelects->GetValue(); m_Frame->Settings().m_DragSelects = m_dragSelects->GetValue();
m_Frame->SetShowPageLimits( m_Show_Page_Limits->GetValue() ); m_Frame->SetShowPageLimits( m_Show_Page_Limits->GetValue() );

View File

@ -24,32 +24,38 @@
#include <pcb_general_settings.h> #include <pcb_general_settings.h>
#include <wx/tokenzr.h> #include <wx/tokenzr.h>
bool PCB_GENERAL_SETTINGS::g_Use45DegreeGraphicSegments = false;
bool PCB_GENERAL_SETTINGS::g_EditHotkeyChangesTrackWidth = false;
bool PCB_GENERAL_SETTINGS::g_DragSelects = true;
MAGNETIC_OPTIONS PCB_GENERAL_SETTINGS::g_MagneticPads = CAPTURE_CURSOR_IN_TRACK_TOOL; PCB_GENERAL_SETTINGS::PCB_GENERAL_SETTINGS( FRAME_T aFrameType ) :
MAGNETIC_OPTIONS PCB_GENERAL_SETTINGS::g_MagneticTracks = CAPTURE_CURSOR_IN_TRACK_TOOL; m_Use45DegreeGraphicSegments( false ),
bool PCB_GENERAL_SETTINGS::g_MagneticGraphics = true; m_EditHotkeyChangesTrackWidth( false ),
m_DragSelects( true ),
m_MagneticPads( CAPTURE_CURSOR_IN_TRACK_TOOL ),
PCB_GENERAL_SETTINGS::PCB_GENERAL_SETTINGS( FRAME_T aFrameType ) m_MagneticTracks( CAPTURE_CURSOR_IN_TRACK_TOOL ),
: m_frameType( aFrameType ), m_colorsSettings( aFrameType ) m_MagneticGraphics( true ),
m_frameType( aFrameType ),
m_colorsSettings( aFrameType )
{ {
switch( m_frameType ) switch( m_frameType )
{ {
case FRAME_PCB: case FRAME_PCB:
Add( "Use45DegreeGraphicSegments", &g_Use45DegreeGraphicSegments, false); Add( "Use45DegreeGraphicSegments", &m_Use45DegreeGraphicSegments, false);
Add( "MagneticPads", reinterpret_cast<int*>( &g_MagneticPads ), CAPTURE_CURSOR_IN_TRACK_TOOL ); Add( "MagneticPads", reinterpret_cast<int*>( &m_MagneticPads ), CAPTURE_CURSOR_IN_TRACK_TOOL );
Add( "MagneticTracks", reinterpret_cast<int*>( &g_MagneticTracks ), CAPTURE_CURSOR_IN_TRACK_TOOL ); Add( "MagneticTracks", reinterpret_cast<int*>( &m_MagneticTracks ), CAPTURE_CURSOR_IN_TRACK_TOOL );
Add( "MagneticGraphics", &g_MagneticGraphics, true ); Add( "MagneticGraphics", &m_MagneticGraphics, true );
Add( "EditActionChangesTrackWidth", &g_EditHotkeyChangesTrackWidth, false ); Add( "EditActionChangesTrackWidth", &m_EditHotkeyChangesTrackWidth, false );
Add( "DragSelects", &g_DragSelects, true ); Add( "DragSelects", &m_DragSelects, true );
break; break;
case FRAME_PCB_MODULE_EDITOR: case FRAME_PCB_MODULE_EDITOR:
Add( "Use45DegreeGraphicSegments", &g_Use45DegreeGraphicSegments, false); m_params.push_back( new PARAM_CFG_BOOL( "FpEditorUse45DegreeGraphicSegments",
Add( "MagneticPads", reinterpret_cast<int*>( &g_MagneticPads ), CAPTURE_CURSOR_IN_TRACK_TOOL ); &m_Use45DegreeGraphicSegments, false,
nullptr, "Use45DegreeGraphicSegments" ) ); // legacy location
m_params.push_back( new PARAM_CFG_INT( "FpEditorMagneticPads",
reinterpret_cast<int*>( &m_MagneticPads ),
CAPTURE_CURSOR_IN_TRACK_TOOL, // default
NO_EFFECT, // min
CAPTURE_ALWAYS, // max
nullptr, "MagneticPads" ) ); // legacy location
break; break;
default: default:

View File

@ -47,15 +47,15 @@ public:
COLORS_DESIGN_SETTINGS& Colors() { return m_colorsSettings; } COLORS_DESIGN_SETTINGS& Colors() { return m_colorsSettings; }
static bool g_Use45DegreeGraphicSegments; // True to constraint graphic lines to horizontal, bool m_Use45DegreeGraphicSegments; // True to constraint graphic lines to horizontal,
// vertical and 45º // vertical and 45º
static bool g_EditHotkeyChangesTrackWidth; bool m_EditHotkeyChangesTrackWidth;
static bool g_DragSelects; // True: Drag gesture always draws a selection box, bool m_DragSelects; // True: Drag gesture always draws a selection box,
// False: Drag will select an item and move it // False: Drag will select an item and move it
static MAGNETIC_OPTIONS g_MagneticPads; MAGNETIC_OPTIONS m_MagneticPads;
static MAGNETIC_OPTIONS g_MagneticTracks; MAGNETIC_OPTIONS m_MagneticTracks;
static bool g_MagneticGraphics; bool m_MagneticGraphics;
#if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU) #if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU)
std::vector< std::pair<wxString, wxString> > m_pluginSettings; // Settings for action plugins std::vector< std::pair<wxString, wxString> > m_pluginSettings; // Settings for action plugins

View File

@ -237,11 +237,11 @@ bool TOOL_BASE::checkSnap( ITEM *aItem )
// Sync PNS engine settings with the general PCB editor options. // Sync PNS engine settings with the general PCB editor options.
auto& pnss = m_router->Settings(); auto& pnss = m_router->Settings();
pnss.SetSnapToPads( PCB_GENERAL_SETTINGS::g_MagneticPads == CAPTURE_CURSOR_IN_TRACK_TOOL pnss.SetSnapToPads( frame()->Settings().m_MagneticPads == CAPTURE_CURSOR_IN_TRACK_TOOL
|| PCB_GENERAL_SETTINGS::g_MagneticPads == CAPTURE_ALWAYS ); || frame()->Settings().m_MagneticPads == CAPTURE_ALWAYS );
pnss.SetSnapToTracks( PCB_GENERAL_SETTINGS::g_MagneticTracks == CAPTURE_CURSOR_IN_TRACK_TOOL pnss.SetSnapToTracks( frame()->Settings().m_MagneticTracks == CAPTURE_CURSOR_IN_TRACK_TOOL
|| PCB_GENERAL_SETTINGS::g_MagneticTracks == CAPTURE_ALWAYS ); || frame()->Settings().m_MagneticTracks == CAPTURE_ALWAYS );
if( aItem ) if( aItem )
{ {

View File

@ -877,7 +877,7 @@ bool DRAWING_TOOL::drawSegment( int aShape, DRAWSEGMENT*& aGraphic, OPT<VECTOR2D
m_controls->ForceCursorPosition( true, cursorPos ); m_controls->ForceCursorPosition( true, cursorPos );
// 45 degree angle constraint enabled with an option and toggled with Ctrl // 45 degree angle constraint enabled with an option and toggled with Ctrl
const bool limit45 = ( frame()->Settings().g_Use45DegreeGraphicSegments != !!( evt->Modifier( MD_CTRL ) ) ); const bool limit45 = ( frame()->Settings().m_Use45DegreeGraphicSegments != !!( evt->Modifier( MD_CTRL ) ) );
if( direction45 != limit45 && started && aShape == S_SEGMENT ) if( direction45 != limit45 && started && aShape == S_SEGMENT )
{ {

View File

@ -503,7 +503,7 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
bool EDIT_TOOL::changeTrackWidthOnClick( const PCBNEW_SELECTION& selection ) bool EDIT_TOOL::changeTrackWidthOnClick( const PCBNEW_SELECTION& selection )
{ {
if ( selection.Size() == 1 && frame()->Settings().g_EditHotkeyChangesTrackWidth ) if ( selection.Size() == 1 && frame()->Settings().m_EditHotkeyChangesTrackWidth )
{ {
auto item = static_cast<BOARD_ITEM *>( selection[0] ); auto item = static_cast<BOARD_ITEM *>( selection[0] );

View File

@ -332,7 +332,7 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, co
for( auto pad : mod->Pads() ) for( auto pad : mod->Pads() )
{ {
if(( aFrom || PCB_GENERAL_SETTINGS::g_MagneticPads == CAPTURE_ALWAYS ) && if(( aFrom || m_frame->Settings().m_MagneticPads == CAPTURE_ALWAYS ) &&
pad->GetBoundingBox().Contains( wxPoint( aRefPos.x, aRefPos.y ) ) ) pad->GetBoundingBox().Contains( wxPoint( aRefPos.x, aRefPos.y ) ) )
{ {
addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad ); addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad );
@ -347,7 +347,7 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, co
case PCB_PAD_T: case PCB_PAD_T:
{ {
if( aFrom || PCB_GENERAL_SETTINGS::g_MagneticPads == CAPTURE_ALWAYS ) if( aFrom || m_frame->Settings().m_MagneticPads == CAPTURE_ALWAYS )
{ {
D_PAD* pad = static_cast<D_PAD*>( aItem ); D_PAD* pad = static_cast<D_PAD*>( aItem );
addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad ); addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad );
@ -359,7 +359,7 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, co
case PCB_MODULE_EDGE_T: case PCB_MODULE_EDGE_T:
case PCB_LINE_T: case PCB_LINE_T:
{ {
if( !PCB_GENERAL_SETTINGS::g_MagneticGraphics ) if( !m_frame->Settings().m_MagneticGraphics )
break; break;
DRAWSEGMENT* dseg = static_cast<DRAWSEGMENT*>( aItem ); DRAWSEGMENT* dseg = static_cast<DRAWSEGMENT*>( aItem );
@ -422,7 +422,7 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, co
case PCB_TRACE_T: case PCB_TRACE_T:
{ {
if( aFrom || PCB_GENERAL_SETTINGS::g_MagneticTracks == CAPTURE_ALWAYS ) if( aFrom || m_frame->Settings().m_MagneticTracks == CAPTURE_ALWAYS )
{ {
TRACK* track = static_cast<TRACK*>( aItem ); TRACK* track = static_cast<TRACK*>( aItem );
VECTOR2I start = track->GetStart(); VECTOR2I start = track->GetStart();
@ -444,7 +444,7 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, co
case PCB_VIA_T: case PCB_VIA_T:
{ {
if( aFrom ||PCB_GENERAL_SETTINGS::g_MagneticTracks == CAPTURE_ALWAYS ) if( aFrom || m_frame->Settings().m_MagneticTracks == CAPTURE_ALWAYS )
addAnchor( aItem->GetPosition(), ORIGIN | CORNER | SNAPPABLE, aItem ); addAnchor( aItem->GetPosition(), ORIGIN | CORNER | SNAPPABLE, aItem );
break; break;

View File

@ -262,7 +262,7 @@ int SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
else if( m_selection.Empty() ) else if( m_selection.Empty() )
{ {
// There is nothing selected, so try to select something // There is nothing selected, so try to select something
if( getEditFrame<PCB_BASE_FRAME>()->Settings().g_DragSelects || !selectCursor() ) if( getEditFrame<PCB_BASE_FRAME>()->Settings().m_DragSelects || !selectCursor() )
{ {
// If nothings has been selected, user wants to select more or selection // If nothings has been selected, user wants to select more or selection
// box is preferred to dragging - draw selection box // box is preferred to dragging - draw selection box