Divorce UNIT_BINDER from wxFrame.
This allows us to supply Pcbnew or Eeschema as the unitsProvider when called from the main frame. Fixes https://gitlab.com/kicad/code/kicad/issues/13066
This commit is contained in:
parent
f9b3f14dfa
commit
f805fd267f
|
@ -51,7 +51,7 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAM
|
|||
m_boardAdapter(),
|
||||
m_currentCamera( m_trackBallCamera ),
|
||||
m_trackBallCamera( 2 * RANGE_SCALE_3D ),
|
||||
m_boardThickness( aFrame, aFrame->GetIuScale(), nullptr, m_boardThicknessCtrl, m_boardThicknessUnits )
|
||||
m_boardThickness( aFrame, nullptr, m_boardThicknessCtrl, m_boardThicknessUnits )
|
||||
{
|
||||
m_userUnits = aFrame->GetUserUnits();
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#include <wx/clipbrd.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/textentry.h>
|
||||
#include <limits>
|
||||
#include <base_units.h>
|
||||
#include <eda_units.h>
|
||||
#include <eda_draw_frame.h>
|
||||
#include <confirm.h>
|
||||
|
@ -40,30 +38,30 @@ wxDEFINE_EVENT( DELAY_FOCUS, wxCommandEvent );
|
|||
|
||||
UNIT_BINDER::UNIT_BINDER( EDA_DRAW_FRAME* aParent, wxStaticText* aLabel, wxWindow* aValueCtrl,
|
||||
wxStaticText* aUnitLabel, bool allowEval, bool aBindFrameEvents ) :
|
||||
UNIT_BINDER( aParent, aParent->GetIuScale(), aLabel, aValueCtrl, aUnitLabel, allowEval,
|
||||
aBindFrameEvents )
|
||||
UNIT_BINDER( aParent, aParent, aLabel, aValueCtrl, aUnitLabel, allowEval, aBindFrameEvents )
|
||||
{
|
||||
}
|
||||
|
||||
UNIT_BINDER::UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale,
|
||||
wxStaticText* aLabel, wxWindow* aValueCtrl,
|
||||
wxStaticText* aUnitLabel, bool allowEval, bool aBindFocusEvent ) :
|
||||
m_frame( aParent ),
|
||||
UNIT_BINDER::UNIT_BINDER( UNITS_PROVIDER* aUnitsProvider, wxWindow* aEventSource,
|
||||
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
||||
bool aAllowEval, bool aBindFocusEvent ) :
|
||||
m_unitsProvider( aUnitsProvider ),
|
||||
m_eventSource( aEventSource ),
|
||||
m_bindFocusEvent( aBindFocusEvent ),
|
||||
m_label( aLabel ),
|
||||
m_valueCtrl( aValueCtrl ),
|
||||
m_unitLabel( aUnitLabel ),
|
||||
m_iuScale( aIUScale ),
|
||||
m_iuScale( m_unitsProvider->GetIuScale() ),
|
||||
m_negativeZero( false ),
|
||||
m_dataType( EDA_DATA_TYPE::DISTANCE ),
|
||||
m_precision( 0 ),
|
||||
m_eval( aParent->GetUserUnits() ),
|
||||
m_eval( m_unitsProvider->GetUserUnits() ),
|
||||
m_unitsInValue( false ),
|
||||
m_originTransforms( aParent->GetOriginTransforms() ),
|
||||
m_originTransforms( aUnitsProvider->GetOriginTransforms() ),
|
||||
m_coordType( ORIGIN_TRANSFORMS::NOT_A_COORD )
|
||||
{
|
||||
init();
|
||||
m_allowEval = allowEval && ( !m_valueCtrl || dynamic_cast<wxTextEntry*>( m_valueCtrl ) );
|
||||
m_allowEval = aAllowEval && ( !m_valueCtrl || dynamic_cast<wxTextEntry*>( m_valueCtrl ) );
|
||||
wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( m_valueCtrl );
|
||||
|
||||
if( textEntry )
|
||||
|
@ -84,8 +82,8 @@ UNIT_BINDER::UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale,
|
|||
nullptr, this );
|
||||
m_valueCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( UNIT_BINDER::onKillFocus ),
|
||||
nullptr, this );
|
||||
m_valueCtrl->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( UNIT_BINDER::onClick ), nullptr,
|
||||
this );
|
||||
m_valueCtrl->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( UNIT_BINDER::onClick ),
|
||||
nullptr, this );
|
||||
}
|
||||
|
||||
if( m_bindFocusEvent )
|
||||
|
@ -94,21 +92,33 @@ UNIT_BINDER::UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale,
|
|||
this );
|
||||
}
|
||||
|
||||
m_frame->Connect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
||||
if( m_eventSource )
|
||||
{
|
||||
m_eventSource->Connect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
||||
nullptr, this );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UNIT_BINDER::~UNIT_BINDER()
|
||||
{
|
||||
m_frame->Disconnect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
||||
if( m_bindFocusEvent )
|
||||
{
|
||||
Disconnect( DELAY_FOCUS, wxCommandEventHandler( UNIT_BINDER::delayedFocusHandler ), nullptr,
|
||||
this );
|
||||
}
|
||||
|
||||
if( m_eventSource )
|
||||
{
|
||||
m_eventSource->Disconnect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
||||
nullptr, this );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UNIT_BINDER::init()
|
||||
{
|
||||
m_units = m_frame->GetUserUnits();
|
||||
m_units = m_unitsProvider->GetUserUnits();
|
||||
m_needsEval = false;
|
||||
m_selStart = 0;
|
||||
m_selEnd = 0;
|
||||
|
@ -149,7 +159,7 @@ void UNIT_BINDER::onUnitsChanged( wxCommandEvent& aEvent )
|
|||
{
|
||||
int temp = (int) GetValue();
|
||||
|
||||
SetUnits( m_frame->GetUserUnits() );
|
||||
SetUnits( m_unitsProvider->GetUserUnits() );
|
||||
|
||||
SetValue( temp );
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2022 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
|
||||
|
@ -30,10 +30,11 @@
|
|||
|
||||
|
||||
PANEL_EESCHEMA_EDITING_OPTIONS::PANEL_EESCHEMA_EDITING_OPTIONS( wxWindow* aWindow,
|
||||
EDA_BASE_FRAME* aUnitsProvider ) :
|
||||
UNITS_PROVIDER* aUnitsProvider,
|
||||
wxWindow* aEventSource ) :
|
||||
PANEL_EESCHEMA_EDITING_OPTIONS_BASE( aWindow ),
|
||||
m_hPitch( aUnitsProvider, schIUScale, m_hPitchLabel, m_hPitchCtrl, m_hPitchUnits ),
|
||||
m_vPitch( aUnitsProvider, schIUScale, m_vPitchLabel, m_vPitchCtrl, m_vPitchUnits )
|
||||
m_hPitch( aUnitsProvider, aEventSource, m_hPitchLabel, m_hPitchCtrl, m_hPitchUnits ),
|
||||
m_vPitch( aUnitsProvider, aEventSource, m_vPitchLabel, m_vPitchCtrl, m_vPitchUnits )
|
||||
{
|
||||
// Make the color swatch show "Clear Color" instead
|
||||
m_borderColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2017-2022 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 as published by the
|
||||
|
@ -29,7 +29,8 @@ class EDA_DRAW_FRAME;
|
|||
class PANEL_EESCHEMA_EDITING_OPTIONS : public PANEL_EESCHEMA_EDITING_OPTIONS_BASE
|
||||
{
|
||||
public:
|
||||
PANEL_EESCHEMA_EDITING_OPTIONS( wxWindow* aWindow, EDA_BASE_FRAME* aUnitsProvider );
|
||||
PANEL_EESCHEMA_EDITING_OPTIONS( wxWindow* aWindow, UNITS_PROVIDER* aUnitsProvider,
|
||||
wxWindow* aEventSource );
|
||||
|
||||
bool TransferDataToWindow() override;
|
||||
bool TransferDataFromWindow() override;
|
||||
|
|
|
@ -30,13 +30,14 @@
|
|||
|
||||
|
||||
PANEL_SYM_EDITING_OPTIONS::PANEL_SYM_EDITING_OPTIONS( wxWindow* aWindow,
|
||||
EDA_BASE_FRAME* aUnitsProvider ) :
|
||||
UNITS_PROVIDER* aUnitsProvider,
|
||||
wxWindow* aEventSource ) :
|
||||
PANEL_SYM_EDITING_OPTIONS_BASE( aWindow ),
|
||||
m_lineWidth( aUnitsProvider, schIUScale, m_lineWidthLabel, m_lineWidthCtrl, m_lineWidthUnits ),
|
||||
m_textSize( aUnitsProvider, schIUScale, m_textSizeLabel, m_textSizeCtrl, m_textSizeUnits ),
|
||||
m_pinLength( aUnitsProvider, schIUScale, m_pinLengthLabel, m_pinLengthCtrl, m_pinLengthUnits ),
|
||||
m_pinNameSize( aUnitsProvider, schIUScale ,m_pinNameSizeLabel, m_pinNameSizeCtrl, m_pinNameSizeUnits ),
|
||||
m_pinNumberSize( aUnitsProvider, schIUScale, m_pinNumSizeLabel, m_pinNumSizeCtrl, m_pinNumSizeUnits )
|
||||
m_lineWidth( aUnitsProvider, aEventSource, m_lineWidthLabel, m_lineWidthCtrl, m_lineWidthUnits ),
|
||||
m_textSize( aUnitsProvider, aEventSource, m_textSizeLabel, m_textSizeCtrl, m_textSizeUnits ),
|
||||
m_pinLength( aUnitsProvider, aEventSource, m_pinLengthLabel, m_pinLengthCtrl, m_pinLengthUnits ),
|
||||
m_pinNameSize( aUnitsProvider, aEventSource ,m_pinNameSizeLabel, m_pinNameSizeCtrl, m_pinNameSizeUnits ),
|
||||
m_pinNumberSize( aUnitsProvider, aEventSource, m_pinNumSizeLabel, m_pinNumSizeCtrl, m_pinNumSizeUnits )
|
||||
{
|
||||
m_widthHelpText->SetFont( KIUI::GetInfoFont( this ).Italic() );
|
||||
}
|
||||
|
|
|
@ -29,7 +29,8 @@ class EDA_DRAW_FRAME;
|
|||
class PANEL_SYM_EDITING_OPTIONS : public PANEL_SYM_EDITING_OPTIONS_BASE
|
||||
{
|
||||
public:
|
||||
PANEL_SYM_EDITING_OPTIONS( wxWindow* aWindow, EDA_BASE_FRAME* aUnitsProvider );
|
||||
PANEL_SYM_EDITING_OPTIONS( wxWindow* aWindow, UNITS_PROVIDER* aUnitsProvider,
|
||||
wxWindow* aEventSource );
|
||||
|
||||
bool TransferDataToWindow() override;
|
||||
bool TransferDataFromWindow() override;
|
||||
|
|
|
@ -123,12 +123,13 @@ bool generateSchematicNetlist( const wxString& aFilename, wxString& aNetlist )
|
|||
}
|
||||
|
||||
|
||||
static struct IFACE : public KIFACE_BASE
|
||||
static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
|
||||
{
|
||||
// Of course all are virtual overloads, implementations of the KIFACE.
|
||||
|
||||
IFACE( const char* aName, KIWAY::FACE_T aType ) :
|
||||
KIFACE_BASE( aName, aType )
|
||||
KIFACE_BASE( aName, aType ),
|
||||
UNITS_PROVIDER( schIUScale, EDA_UNITS::MILLIMETRES )
|
||||
{}
|
||||
|
||||
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
|
||||
|
@ -191,29 +192,18 @@ static struct IFACE : public KIFACE_BASE
|
|||
|
||||
case PANEL_SYM_EDIT_OPTIONS:
|
||||
{
|
||||
EDA_BASE_FRAME* unitsProvider = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
|
||||
EDA_BASE_FRAME* frame = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_SCH_VIEWER, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_SCH_VIEWER, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_SCH, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_SCH, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
// If we can't find an eeschema unitsProvider we'll have to make do with the units
|
||||
// defined in whatever FRAME we _can_ find.
|
||||
for( unsigned i = 0; !unitsProvider && i < KIWAY_PLAYER_COUNT; ++i )
|
||||
unitsProvider = aKiway->Player( (FRAME_T) i, false );
|
||||
}
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
wxWindow* manager = wxFindWindowByName( KICAD_MANAGER_FRAME_NAME );
|
||||
unitsProvider = static_cast<EDA_BASE_FRAME*>( manager );
|
||||
}
|
||||
|
||||
return new PANEL_SYM_EDITING_OPTIONS( aParent, unitsProvider );
|
||||
if( frame )
|
||||
return new PANEL_SYM_EDITING_OPTIONS( aParent, frame, frame );
|
||||
else
|
||||
return new PANEL_SYM_EDITING_OPTIONS( aParent, this, nullptr );
|
||||
}
|
||||
|
||||
case PANEL_SYM_COLORS:
|
||||
|
@ -229,29 +219,18 @@ static struct IFACE : public KIFACE_BASE
|
|||
|
||||
case PANEL_SCH_EDIT_OPTIONS:
|
||||
{
|
||||
EDA_BASE_FRAME* unitsProvider = aKiway->Player( FRAME_SCH, false );
|
||||
EDA_BASE_FRAME* frame = aKiway->Player( FRAME_SCH, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_SCH_VIEWER, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_SCH_VIEWER, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
// If we can't find an eeschema frame we'll have to make do with the units
|
||||
// defined in whatever FRAME we _can_ find.
|
||||
for( unsigned i = 0; !unitsProvider && i < KIWAY_PLAYER_COUNT; ++i )
|
||||
unitsProvider = aKiway->Player( (FRAME_T) i, false );
|
||||
}
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
wxWindow* manager = wxFindWindowByName( KICAD_MANAGER_FRAME_NAME );
|
||||
unitsProvider = static_cast<EDA_BASE_FRAME*>( manager );
|
||||
}
|
||||
|
||||
return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, unitsProvider );
|
||||
if( frame )
|
||||
return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, frame, frame );
|
||||
else
|
||||
return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, this, nullptr );
|
||||
}
|
||||
|
||||
case PANEL_SCH_ANNO_OPTIONS:
|
||||
|
|
|
@ -127,7 +127,10 @@ public:
|
|||
/**
|
||||
* Return a reference to the default ORIGIN_TRANSFORMS object
|
||||
*/
|
||||
virtual ORIGIN_TRANSFORMS& GetOriginTransforms() { return m_originTransforms; }
|
||||
ORIGIN_TRANSFORMS& GetOriginTransforms() override
|
||||
{
|
||||
return m_originTransforms;
|
||||
}
|
||||
|
||||
|
||||
SETTINGS_MANAGER* GetSettingsManager() const { return m_settingsManager; }
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#define UNITS_PROVIDER_H
|
||||
|
||||
#include <eda_units.h>
|
||||
#include <origin_transforms.h>
|
||||
|
||||
|
||||
class UNITS_PROVIDER
|
||||
{
|
||||
|
@ -40,6 +42,13 @@ public:
|
|||
const EDA_IU_SCALE& GetIuScale() const { return m_iuScale; }
|
||||
// No SetIuScale(); scale is invariant
|
||||
|
||||
virtual ORIGIN_TRANSFORMS& GetOriginTransforms()
|
||||
{
|
||||
static ORIGIN_TRANSFORMS identityTransform;
|
||||
|
||||
return identityTransform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts \a aValue in internal units into a united string.
|
||||
*
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#define __UNIT_BINDER_H_
|
||||
|
||||
#include <base_units.h>
|
||||
#include <origin_transforms.h>
|
||||
#include <units_provider.h>
|
||||
#include <libeval/numeric_evaluator.h>
|
||||
#include <wx/event.h>
|
||||
|
||||
|
@ -48,17 +48,18 @@ public:
|
|||
* text, trimmed of its colon, will also be used in error messages)
|
||||
* @param aValueCtrl is the control used to edit or display the given value (wxTextCtrl,
|
||||
* wxComboBox, wxStaticText, etc.).
|
||||
* @param aUnitLabel is the units label displayed after the text input widget
|
||||
* Can be nullptr.
|
||||
* @param aUnitLabel (optional) is the units label displayed after the text input widget
|
||||
* @param aAllowEval indicates \a aTextInput's content should be eval'ed before storing
|
||||
* @param aBindFocusEvent indicates the control should respond to DELAY_FOCUS from the
|
||||
* parent frame
|
||||
*/
|
||||
UNIT_BINDER( EDA_DRAW_FRAME* aParent,
|
||||
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
||||
bool aAllowEval = true, bool aBindFocusEvent = true );
|
||||
|
||||
UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale, wxStaticText* aLabel,
|
||||
wxWindow* aValueCtrl, wxStaticText* aUnitLabel, bool aAllowEval = true,
|
||||
bool aBindFocusEvent = true );
|
||||
UNIT_BINDER( UNITS_PROVIDER* aUnitsProvider, wxWindow* aEventSource,
|
||||
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
||||
bool aAllowEval = true, bool aBindFocusEvent = true );
|
||||
|
||||
virtual ~UNIT_BINDER() override;
|
||||
|
||||
|
@ -220,7 +221,9 @@ protected:
|
|||
*/
|
||||
double setPrecision( double aValue, bool aValueUsesUserUnits );
|
||||
|
||||
EDA_BASE_FRAME* m_frame;
|
||||
protected:
|
||||
UNITS_PROVIDER* m_unitsProvider;
|
||||
wxWindow* m_eventSource;
|
||||
bool m_bindFocusEvent;
|
||||
|
||||
///< The bound widgets
|
||||
|
|
|
@ -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-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2022 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
|
||||
|
@ -30,11 +30,11 @@
|
|||
#include <panel_edit_options.h>
|
||||
|
||||
|
||||
PANEL_EDIT_OPTIONS::PANEL_EDIT_OPTIONS( wxWindow* aParent, EDA_BASE_FRAME* aUnitsProvider,
|
||||
bool isFootprintEditor ) :
|
||||
PANEL_EDIT_OPTIONS::PANEL_EDIT_OPTIONS( wxWindow* aParent, UNITS_PROVIDER* aUnitsProvider,
|
||||
wxWindow* aEventSource, bool isFootprintEditor ) :
|
||||
PANEL_EDIT_OPTIONS_BASE( aParent ),
|
||||
m_isFootprintEditor( isFootprintEditor ),
|
||||
m_rotationAngle( aUnitsProvider, pcbIUScale, m_rotationAngleLabel, m_rotationAngleCtrl,
|
||||
m_rotationAngle( aUnitsProvider, aEventSource, m_rotationAngleLabel, m_rotationAngleCtrl,
|
||||
m_rotationAngleUnits )
|
||||
{
|
||||
m_magneticPads->Show( m_isFootprintEditor );
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2010-2014 Jean-Pierre Charras, jean-pierre.charras at wanadoo.fr
|
||||
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2022 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
|
||||
|
@ -37,7 +37,8 @@ class EDA_BASE_FRAME;
|
|||
class PANEL_EDIT_OPTIONS : public PANEL_EDIT_OPTIONS_BASE
|
||||
{
|
||||
public:
|
||||
PANEL_EDIT_OPTIONS( wxWindow* aParent, EDA_BASE_FRAME* aUnitsProvider, bool isFootprintEditor );
|
||||
PANEL_EDIT_OPTIONS( wxWindow* aParent, UNITS_PROVIDER* aUnitsProvider, wxWindow* aEventSource,
|
||||
bool isFootprintEditor );
|
||||
|
||||
bool TransferDataToWindow() override;
|
||||
bool TransferDataFromWindow() override;
|
||||
|
|
|
@ -69,12 +69,13 @@ extern "C" PyObject* PyInit__pcbnew( void );
|
|||
|
||||
namespace PCB {
|
||||
|
||||
static struct IFACE : public KIFACE_BASE
|
||||
static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
|
||||
{
|
||||
// Of course all are virtual overloads, implementations of the KIFACE.
|
||||
|
||||
IFACE( const char* aName, KIWAY::FACE_T aType ) :
|
||||
KIFACE_BASE( aName, aType )
|
||||
KIFACE_BASE( aName, aType ),
|
||||
UNITS_PROVIDER( pcbIUScale, EDA_UNITS::MILLIMETRES )
|
||||
{}
|
||||
|
||||
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
|
||||
|
@ -146,35 +147,35 @@ static struct IFACE : public KIFACE_BASE
|
|||
}
|
||||
|
||||
case PANEL_FP_EDIT_OPTIONS:
|
||||
{
|
||||
EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_PCB_EDITOR, false );
|
||||
|
||||
if( frame )
|
||||
return new PANEL_EDIT_OPTIONS( aParent, frame, frame, true );
|
||||
else
|
||||
return new PANEL_EDIT_OPTIONS( aParent, this, nullptr, true );
|
||||
}
|
||||
|
||||
case PANEL_FP_DEFAULT_VALUES:
|
||||
{
|
||||
EDA_BASE_FRAME* unitsProvider = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||
EDA_BASE_FRAME* frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_PCB_EDITOR, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_PCB_EDITOR, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
// If we can't find a pcb-type frame we'll have to make do with whatever FRAME
|
||||
// we _can_ find.
|
||||
for( unsigned i = 0; !unitsProvider && i < KIWAY_PLAYER_COUNT; ++i )
|
||||
unitsProvider = aKiway->Player( (FRAME_T) i, false );
|
||||
}
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
wxWindow* manager = wxFindWindowByName( KICAD_MANAGER_FRAME_NAME );
|
||||
unitsProvider = static_cast<EDA_BASE_FRAME*>( manager );
|
||||
wxASSERT( unitsProvider );
|
||||
}
|
||||
|
||||
if( aClassId == PANEL_FP_EDIT_OPTIONS )
|
||||
return new PANEL_EDIT_OPTIONS( aParent, unitsProvider, true );
|
||||
if( frame )
|
||||
return new PANEL_FP_EDITOR_DEFAULTS( aParent, frame );
|
||||
else
|
||||
return new PANEL_FP_EDITOR_DEFAULTS( aParent, unitsProvider );
|
||||
return new PANEL_FP_EDITOR_DEFAULTS( aParent, this );
|
||||
}
|
||||
|
||||
case PANEL_FP_COLORS:
|
||||
|
@ -190,29 +191,18 @@ static struct IFACE : public KIFACE_BASE
|
|||
|
||||
case PANEL_PCB_EDIT_OPTIONS:
|
||||
{
|
||||
EDA_BASE_FRAME* unitsProvider = aKiway->Player( FRAME_PCB_EDITOR, false );
|
||||
EDA_BASE_FRAME* frame = aKiway->Player( FRAME_PCB_EDITOR, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
unitsProvider = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||
if( !frame )
|
||||
frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
// If we can't find an eeschema frame we'll have to make do with the units
|
||||
// defined in whatever FRAME we _can_ find.
|
||||
for( unsigned i = 0; !unitsProvider && i < KIWAY_PLAYER_COUNT; ++i )
|
||||
unitsProvider = aKiway->Player( (FRAME_T) i, false );
|
||||
}
|
||||
|
||||
if( !unitsProvider )
|
||||
{
|
||||
wxWindow* manager = wxFindWindowByName( KICAD_MANAGER_FRAME_NAME );
|
||||
unitsProvider = static_cast<EDA_BASE_FRAME*>( manager );
|
||||
}
|
||||
|
||||
return new PANEL_EDIT_OPTIONS( aParent, unitsProvider, false );
|
||||
if( frame )
|
||||
return new PANEL_EDIT_OPTIONS( aParent, frame, frame, false );
|
||||
else
|
||||
return new PANEL_EDIT_OPTIONS( aParent, this, nullptr, false );
|
||||
}
|
||||
|
||||
case PANEL_PCB_COLORS:
|
||||
|
|
Loading…
Reference in New Issue