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_boardAdapter(),
|
||||||
m_currentCamera( m_trackBallCamera ),
|
m_currentCamera( m_trackBallCamera ),
|
||||||
m_trackBallCamera( 2 * RANGE_SCALE_3D ),
|
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();
|
m_userUnits = aFrame->GetUserUnits();
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,6 @@
|
||||||
#include <wx/clipbrd.h>
|
#include <wx/clipbrd.h>
|
||||||
#include <wx/stattext.h>
|
#include <wx/stattext.h>
|
||||||
#include <wx/textentry.h>
|
#include <wx/textentry.h>
|
||||||
#include <limits>
|
|
||||||
#include <base_units.h>
|
|
||||||
#include <eda_units.h>
|
#include <eda_units.h>
|
||||||
#include <eda_draw_frame.h>
|
#include <eda_draw_frame.h>
|
||||||
#include <confirm.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,
|
UNIT_BINDER::UNIT_BINDER( EDA_DRAW_FRAME* aParent, wxStaticText* aLabel, wxWindow* aValueCtrl,
|
||||||
wxStaticText* aUnitLabel, bool allowEval, bool aBindFrameEvents ) :
|
wxStaticText* aUnitLabel, bool allowEval, bool aBindFrameEvents ) :
|
||||||
UNIT_BINDER( aParent, aParent->GetIuScale(), aLabel, aValueCtrl, aUnitLabel, allowEval,
|
UNIT_BINDER( aParent, aParent, aLabel, aValueCtrl, aUnitLabel, allowEval, aBindFrameEvents )
|
||||||
aBindFrameEvents )
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
UNIT_BINDER::UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale,
|
UNIT_BINDER::UNIT_BINDER( UNITS_PROVIDER* aUnitsProvider, wxWindow* aEventSource,
|
||||||
wxStaticText* aLabel, wxWindow* aValueCtrl,
|
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
||||||
wxStaticText* aUnitLabel, bool allowEval, bool aBindFocusEvent ) :
|
bool aAllowEval, bool aBindFocusEvent ) :
|
||||||
m_frame( aParent ),
|
m_unitsProvider( aUnitsProvider ),
|
||||||
|
m_eventSource( aEventSource ),
|
||||||
m_bindFocusEvent( aBindFocusEvent ),
|
m_bindFocusEvent( aBindFocusEvent ),
|
||||||
m_label( aLabel ),
|
m_label( aLabel ),
|
||||||
m_valueCtrl( aValueCtrl ),
|
m_valueCtrl( aValueCtrl ),
|
||||||
m_unitLabel( aUnitLabel ),
|
m_unitLabel( aUnitLabel ),
|
||||||
m_iuScale( aIUScale ),
|
m_iuScale( m_unitsProvider->GetIuScale() ),
|
||||||
m_negativeZero( false ),
|
m_negativeZero( false ),
|
||||||
m_dataType( EDA_DATA_TYPE::DISTANCE ),
|
m_dataType( EDA_DATA_TYPE::DISTANCE ),
|
||||||
m_precision( 0 ),
|
m_precision( 0 ),
|
||||||
m_eval( aParent->GetUserUnits() ),
|
m_eval( m_unitsProvider->GetUserUnits() ),
|
||||||
m_unitsInValue( false ),
|
m_unitsInValue( false ),
|
||||||
m_originTransforms( aParent->GetOriginTransforms() ),
|
m_originTransforms( aUnitsProvider->GetOriginTransforms() ),
|
||||||
m_coordType( ORIGIN_TRANSFORMS::NOT_A_COORD )
|
m_coordType( ORIGIN_TRANSFORMS::NOT_A_COORD )
|
||||||
{
|
{
|
||||||
init();
|
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 );
|
wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( m_valueCtrl );
|
||||||
|
|
||||||
if( textEntry )
|
if( textEntry )
|
||||||
|
@ -84,8 +82,8 @@ UNIT_BINDER::UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale,
|
||||||
nullptr, this );
|
nullptr, this );
|
||||||
m_valueCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( UNIT_BINDER::onKillFocus ),
|
m_valueCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( UNIT_BINDER::onKillFocus ),
|
||||||
nullptr, this );
|
nullptr, this );
|
||||||
m_valueCtrl->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( UNIT_BINDER::onClick ), nullptr,
|
m_valueCtrl->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( UNIT_BINDER::onClick ),
|
||||||
this );
|
nullptr, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_bindFocusEvent )
|
if( m_bindFocusEvent )
|
||||||
|
@ -94,21 +92,33 @@ UNIT_BINDER::UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale,
|
||||||
this );
|
this );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_frame->Connect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
if( m_eventSource )
|
||||||
nullptr, this );
|
{
|
||||||
|
m_eventSource->Connect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
||||||
|
nullptr, this );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UNIT_BINDER::~UNIT_BINDER()
|
UNIT_BINDER::~UNIT_BINDER()
|
||||||
{
|
{
|
||||||
m_frame->Disconnect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ),
|
if( m_bindFocusEvent )
|
||||||
nullptr, this );
|
{
|
||||||
|
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()
|
void UNIT_BINDER::init()
|
||||||
{
|
{
|
||||||
m_units = m_frame->GetUserUnits();
|
m_units = m_unitsProvider->GetUserUnits();
|
||||||
m_needsEval = false;
|
m_needsEval = false;
|
||||||
m_selStart = 0;
|
m_selStart = 0;
|
||||||
m_selEnd = 0;
|
m_selEnd = 0;
|
||||||
|
@ -149,7 +159,7 @@ void UNIT_BINDER::onUnitsChanged( wxCommandEvent& aEvent )
|
||||||
{
|
{
|
||||||
int temp = (int) GetValue();
|
int temp = (int) GetValue();
|
||||||
|
|
||||||
SetUnits( m_frame->GetUserUnits() );
|
SetUnits( m_unitsProvider->GetUserUnits() );
|
||||||
|
|
||||||
SetValue( temp );
|
SetValue( temp );
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2009 Wayne Stambaugh <stambaughw@verizon.net>
|
* 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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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,
|
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 ),
|
PANEL_EESCHEMA_EDITING_OPTIONS_BASE( aWindow ),
|
||||||
m_hPitch( aUnitsProvider, schIUScale, m_hPitchLabel, m_hPitchCtrl, m_hPitchUnits ),
|
m_hPitch( aUnitsProvider, aEventSource, m_hPitchLabel, m_hPitchCtrl, m_hPitchUnits ),
|
||||||
m_vPitch( aUnitsProvider, schIUScale, m_vPitchLabel, m_vPitchCtrl, m_vPitchUnits )
|
m_vPitch( aUnitsProvider, aEventSource, m_vPitchLabel, m_vPitchCtrl, m_vPitchUnits )
|
||||||
{
|
{
|
||||||
// Make the color swatch show "Clear Color" instead
|
// Make the color swatch show "Clear Color" instead
|
||||||
m_borderColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
|
m_borderColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* 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
|
* 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
|
* 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
|
class PANEL_EESCHEMA_EDITING_OPTIONS : public PANEL_EESCHEMA_EDITING_OPTIONS_BASE
|
||||||
{
|
{
|
||||||
public:
|
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 TransferDataToWindow() override;
|
||||||
bool TransferDataFromWindow() override;
|
bool TransferDataFromWindow() override;
|
||||||
|
|
|
@ -30,13 +30,14 @@
|
||||||
|
|
||||||
|
|
||||||
PANEL_SYM_EDITING_OPTIONS::PANEL_SYM_EDITING_OPTIONS( wxWindow* aWindow,
|
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 ),
|
PANEL_SYM_EDITING_OPTIONS_BASE( aWindow ),
|
||||||
m_lineWidth( aUnitsProvider, schIUScale, m_lineWidthLabel, m_lineWidthCtrl, m_lineWidthUnits ),
|
m_lineWidth( aUnitsProvider, aEventSource, m_lineWidthLabel, m_lineWidthCtrl, m_lineWidthUnits ),
|
||||||
m_textSize( aUnitsProvider, schIUScale, m_textSizeLabel, m_textSizeCtrl, m_textSizeUnits ),
|
m_textSize( aUnitsProvider, aEventSource, m_textSizeLabel, m_textSizeCtrl, m_textSizeUnits ),
|
||||||
m_pinLength( aUnitsProvider, schIUScale, m_pinLengthLabel, m_pinLengthCtrl, m_pinLengthUnits ),
|
m_pinLength( aUnitsProvider, aEventSource, m_pinLengthLabel, m_pinLengthCtrl, m_pinLengthUnits ),
|
||||||
m_pinNameSize( aUnitsProvider, schIUScale ,m_pinNameSizeLabel, m_pinNameSizeCtrl, m_pinNameSizeUnits ),
|
m_pinNameSize( aUnitsProvider, aEventSource ,m_pinNameSizeLabel, m_pinNameSizeCtrl, m_pinNameSizeUnits ),
|
||||||
m_pinNumberSize( aUnitsProvider, schIUScale, m_pinNumSizeLabel, m_pinNumSizeCtrl, m_pinNumSizeUnits )
|
m_pinNumberSize( aUnitsProvider, aEventSource, m_pinNumSizeLabel, m_pinNumSizeCtrl, m_pinNumSizeUnits )
|
||||||
{
|
{
|
||||||
m_widthHelpText->SetFont( KIUI::GetInfoFont( this ).Italic() );
|
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
|
class PANEL_SYM_EDITING_OPTIONS : public PANEL_SYM_EDITING_OPTIONS_BASE
|
||||||
{
|
{
|
||||||
public:
|
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 TransferDataToWindow() override;
|
||||||
bool TransferDataFromWindow() 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.
|
// Of course all are virtual overloads, implementations of the KIFACE.
|
||||||
|
|
||||||
IFACE( const char* aName, KIWAY::FACE_T aType ) :
|
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;
|
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
|
||||||
|
@ -191,29 +192,18 @@ static struct IFACE : public KIFACE_BASE
|
||||||
|
|
||||||
case PANEL_SYM_EDIT_OPTIONS:
|
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 )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_SCH_VIEWER, false );
|
frame = aKiway->Player( FRAME_SCH_VIEWER, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_SCH, false );
|
frame = aKiway->Player( FRAME_SCH, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( frame )
|
||||||
{
|
return new PANEL_SYM_EDITING_OPTIONS( aParent, frame, frame );
|
||||||
// If we can't find an eeschema unitsProvider we'll have to make do with the units
|
else
|
||||||
// defined in whatever FRAME we _can_ find.
|
return new PANEL_SYM_EDITING_OPTIONS( aParent, this, nullptr );
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case PANEL_SYM_COLORS:
|
case PANEL_SYM_COLORS:
|
||||||
|
@ -229,29 +219,18 @@ static struct IFACE : public KIFACE_BASE
|
||||||
|
|
||||||
case PANEL_SCH_EDIT_OPTIONS:
|
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 )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
|
frame = aKiway->Player( FRAME_SCH_SYMBOL_EDITOR, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_SCH_VIEWER, false );
|
frame = aKiway->Player( FRAME_SCH_VIEWER, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( frame )
|
||||||
{
|
return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, frame, frame );
|
||||||
// If we can't find an eeschema frame we'll have to make do with the units
|
else
|
||||||
// defined in whatever FRAME we _can_ find.
|
return new PANEL_EESCHEMA_EDITING_OPTIONS( aParent, this, nullptr );
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case PANEL_SCH_ANNO_OPTIONS:
|
case PANEL_SCH_ANNO_OPTIONS:
|
||||||
|
|
|
@ -127,7 +127,10 @@ public:
|
||||||
/**
|
/**
|
||||||
* Return a reference to the default ORIGIN_TRANSFORMS object
|
* 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; }
|
SETTINGS_MANAGER* GetSettingsManager() const { return m_settingsManager; }
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#define UNITS_PROVIDER_H
|
#define UNITS_PROVIDER_H
|
||||||
|
|
||||||
#include <eda_units.h>
|
#include <eda_units.h>
|
||||||
|
#include <origin_transforms.h>
|
||||||
|
|
||||||
|
|
||||||
class UNITS_PROVIDER
|
class UNITS_PROVIDER
|
||||||
{
|
{
|
||||||
|
@ -40,6 +42,13 @@ public:
|
||||||
const EDA_IU_SCALE& GetIuScale() const { return m_iuScale; }
|
const EDA_IU_SCALE& GetIuScale() const { return m_iuScale; }
|
||||||
// No SetIuScale(); scale is invariant
|
// 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.
|
* Converts \a aValue in internal units into a united string.
|
||||||
*
|
*
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#define __UNIT_BINDER_H_
|
#define __UNIT_BINDER_H_
|
||||||
|
|
||||||
#include <base_units.h>
|
#include <base_units.h>
|
||||||
#include <origin_transforms.h>
|
#include <units_provider.h>
|
||||||
#include <libeval/numeric_evaluator.h>
|
#include <libeval/numeric_evaluator.h>
|
||||||
#include <wx/event.h>
|
#include <wx/event.h>
|
||||||
|
|
||||||
|
@ -47,18 +47,19 @@ public:
|
||||||
* @param aLabel is the static text used to label the text input widget (note: the label
|
* @param aLabel is the static text used to label the text input widget (note: the label
|
||||||
* text, trimmed of its colon, will also be used in error messages)
|
* 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,
|
* @param aValueCtrl is the control used to edit or display the given value (wxTextCtrl,
|
||||||
* wxComboBox, wxStaticText, etc.).
|
* wxComboBox, wxStaticText, etc.).
|
||||||
* @param aUnitLabel is the units label displayed after the text input widget
|
* @param aUnitLabel (optional) is the units label displayed after the text input widget
|
||||||
* Can be nullptr.
|
|
||||||
* @param aAllowEval indicates \a aTextInput's content should be eval'ed before storing
|
* @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,
|
UNIT_BINDER( EDA_DRAW_FRAME* aParent,
|
||||||
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
||||||
bool aAllowEval = true, bool aBindFocusEvent = true );
|
bool aAllowEval = true, bool aBindFocusEvent = true );
|
||||||
|
|
||||||
UNIT_BINDER( EDA_BASE_FRAME* aParent, const EDA_IU_SCALE& aIUScale, wxStaticText* aLabel,
|
UNIT_BINDER( UNITS_PROVIDER* aUnitsProvider, wxWindow* aEventSource,
|
||||||
wxWindow* aValueCtrl, wxStaticText* aUnitLabel, bool aAllowEval = true,
|
wxStaticText* aLabel, wxWindow* aValueCtrl, wxStaticText* aUnitLabel,
|
||||||
bool aBindFocusEvent = true );
|
bool aAllowEval = true, bool aBindFocusEvent = true );
|
||||||
|
|
||||||
virtual ~UNIT_BINDER() override;
|
virtual ~UNIT_BINDER() override;
|
||||||
|
|
||||||
|
@ -220,34 +221,36 @@ protected:
|
||||||
*/
|
*/
|
||||||
double setPrecision( double aValue, bool aValueUsesUserUnits );
|
double setPrecision( double aValue, bool aValueUsesUserUnits );
|
||||||
|
|
||||||
EDA_BASE_FRAME* m_frame;
|
protected:
|
||||||
bool m_bindFocusEvent;
|
UNITS_PROVIDER* m_unitsProvider;
|
||||||
|
wxWindow* m_eventSource;
|
||||||
|
bool m_bindFocusEvent;
|
||||||
|
|
||||||
///< The bound widgets
|
///< The bound widgets
|
||||||
wxStaticText* m_label;
|
wxStaticText* m_label;
|
||||||
wxWindow* m_valueCtrl;
|
wxWindow* m_valueCtrl;
|
||||||
wxStaticText* m_unitLabel; ///< Can be nullptr
|
wxStaticText* m_unitLabel; ///< Can be nullptr
|
||||||
|
|
||||||
///< Currently used units.
|
///< Currently used units.
|
||||||
const EDA_IU_SCALE& m_iuScale;
|
const EDA_IU_SCALE& m_iuScale;
|
||||||
EDA_UNITS m_units;
|
EDA_UNITS m_units;
|
||||||
bool m_negativeZero; ///< Indicates "-0" should be displayed for 0.
|
bool m_negativeZero; ///< Indicates "-0" should be displayed for 0.
|
||||||
EDA_DATA_TYPE m_dataType;
|
EDA_DATA_TYPE m_dataType;
|
||||||
int m_precision; ///< 0 to 6
|
int m_precision; ///< 0 to 6
|
||||||
|
|
||||||
wxString m_errorMessage;
|
wxString m_errorMessage;
|
||||||
|
|
||||||
NUMERIC_EVALUATOR m_eval;
|
NUMERIC_EVALUATOR m_eval;
|
||||||
bool m_allowEval;
|
bool m_allowEval;
|
||||||
bool m_needsEval;
|
bool m_needsEval;
|
||||||
|
|
||||||
long m_selStart; ///< Selection start and end of the original text
|
long m_selStart; ///< Selection start and end of the original text
|
||||||
long m_selEnd;
|
long m_selEnd;
|
||||||
|
|
||||||
bool m_unitsInValue; ///< Units label should be included in value text
|
bool m_unitsInValue; ///< Units label should be included in value text
|
||||||
|
|
||||||
/// A reference to an ORIGIN_TRANSFORMS object
|
/// A reference to an ORIGIN_TRANSFORMS object
|
||||||
ORIGIN_TRANSFORMS& m_originTransforms;
|
ORIGIN_TRANSFORMS& m_originTransforms;
|
||||||
|
|
||||||
/// Type of coordinate for display origin transforms
|
/// Type of coordinate for display origin transforms
|
||||||
ORIGIN_TRANSFORMS::COORD_TYPES_T m_coordType;
|
ORIGIN_TRANSFORMS::COORD_TYPES_T m_coordType;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* 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) 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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -30,11 +30,11 @@
|
||||||
#include <panel_edit_options.h>
|
#include <panel_edit_options.h>
|
||||||
|
|
||||||
|
|
||||||
PANEL_EDIT_OPTIONS::PANEL_EDIT_OPTIONS( wxWindow* aParent, EDA_BASE_FRAME* aUnitsProvider,
|
PANEL_EDIT_OPTIONS::PANEL_EDIT_OPTIONS( wxWindow* aParent, UNITS_PROVIDER* aUnitsProvider,
|
||||||
bool isFootprintEditor ) :
|
wxWindow* aEventSource, bool isFootprintEditor ) :
|
||||||
PANEL_EDIT_OPTIONS_BASE( aParent ),
|
PANEL_EDIT_OPTIONS_BASE( aParent ),
|
||||||
m_isFootprintEditor( isFootprintEditor ),
|
m_isFootprintEditor( isFootprintEditor ),
|
||||||
m_rotationAngle( aUnitsProvider, pcbIUScale, m_rotationAngleLabel, m_rotationAngleCtrl,
|
m_rotationAngle( aUnitsProvider, aEventSource, m_rotationAngleLabel, m_rotationAngleCtrl,
|
||||||
m_rotationAngleUnits )
|
m_rotationAngleUnits )
|
||||||
{
|
{
|
||||||
m_magneticPads->Show( m_isFootprintEditor );
|
m_magneticPads->Show( m_isFootprintEditor );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* 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) 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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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
|
class PANEL_EDIT_OPTIONS : public PANEL_EDIT_OPTIONS_BASE
|
||||||
{
|
{
|
||||||
public:
|
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 TransferDataToWindow() override;
|
||||||
bool TransferDataFromWindow() override;
|
bool TransferDataFromWindow() override;
|
||||||
|
|
|
@ -69,12 +69,13 @@ extern "C" PyObject* PyInit__pcbnew( void );
|
||||||
|
|
||||||
namespace PCB {
|
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.
|
// Of course all are virtual overloads, implementations of the KIFACE.
|
||||||
|
|
||||||
IFACE( const char* aName, KIWAY::FACE_T aType ) :
|
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;
|
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
|
||||||
|
@ -146,35 +147,35 @@ static struct IFACE : public KIFACE_BASE
|
||||||
}
|
}
|
||||||
|
|
||||||
case PANEL_FP_EDIT_OPTIONS:
|
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:
|
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 )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_PCB_EDITOR, false );
|
frame = aKiway->Player( FRAME_PCB_EDITOR, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( frame )
|
||||||
{
|
return new PANEL_FP_EDITOR_DEFAULTS( aParent, frame );
|
||||||
// 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 );
|
|
||||||
else
|
else
|
||||||
return new PANEL_FP_EDITOR_DEFAULTS( aParent, unitsProvider );
|
return new PANEL_FP_EDITOR_DEFAULTS( aParent, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
case PANEL_FP_COLORS:
|
case PANEL_FP_COLORS:
|
||||||
|
@ -190,29 +191,18 @@ static struct IFACE : public KIFACE_BASE
|
||||||
|
|
||||||
case PANEL_PCB_EDIT_OPTIONS:
|
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 )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
frame = aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( !frame )
|
||||||
unitsProvider = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
frame = aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||||
|
|
||||||
if( !unitsProvider )
|
if( frame )
|
||||||
{
|
return new PANEL_EDIT_OPTIONS( aParent, frame, frame, false );
|
||||||
// If we can't find an eeschema frame we'll have to make do with the units
|
else
|
||||||
// defined in whatever FRAME we _can_ find.
|
return new PANEL_EDIT_OPTIONS( aParent, this, nullptr, false );
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case PANEL_PCB_COLORS:
|
case PANEL_PCB_COLORS:
|
||||||
|
|
Loading…
Reference in New Issue