7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-07 18:45:32 +00:00

Pcbnew: unify dimension default configurability

This resolves an inconsistency between Pcbnew and FP editor that means
default dimension properties cannot be set in the FP editor, but the
dimension line widths and text sizes _can_, which can lead to mismatches
between different parts of the same dimension that can't be prevented
except retroactively using the properties tools.
This commit is contained in:
John Beard 2024-12-24 18:44:00 +08:00
parent 7fe69c8ac5
commit 0c625e6cec
15 changed files with 2024 additions and 1672 deletions

View File

@ -181,6 +181,8 @@ set( PCBNEW_DIALOGS
dialogs/panel_rule_area_properties_placement_base.cpp
dialogs/panel_setup_constraints.cpp
dialogs/panel_setup_constraints_base.cpp
dialogs/panel_setup_dimensions.cpp
dialogs/panel_setup_dimensions_base.cpp
dialogs/panel_setup_formatting.cpp
dialogs/panel_setup_formatting_base.cpp
dialogs/panel_setup_mask_and_paste.cpp

View File

@ -21,6 +21,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "panel_fp_editor_defaults.h"
#include <pgm_base.h>
#include <settings/settings_manager.h>
#include <footprint_editor_settings.h>
@ -28,7 +30,7 @@
#include <widgets/std_bitmap_button.h>
#include <grid_tricks.h>
#include <eda_text.h>
#include <panel_fp_editor_defaults.h>
#include <panel_setup_dimensions.h>
#include <grid_layer_box_helpers.h>
#include <bitmaps.h>
#include <confirm.h>
@ -172,11 +174,21 @@ enum
};
PANEL_FP_EDITOR_DEFAULTS::PANEL_FP_EDITOR_DEFAULTS( wxWindow* aParent,
UNITS_PROVIDER* aUnitsProvider ) :
PANEL_FP_EDITOR_DEFAULTS_BASE( aParent )
static BOARD_DESIGN_SETTINGS& GetPgmDesignSettings()
{
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
return mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_DesignSettings;
}
PANEL_FP_EDITOR_DEFAULTS::PANEL_FP_EDITOR_DEFAULTS( wxWindow* aParent,
UNITS_PROVIDER* aUnitsProvider ) :
PANEL_FP_EDITOR_DEFAULTS_BASE( aParent ),
m_unitProvider( aUnitsProvider ),
m_designSettings( GetPgmDesignSettings() ),
m_dimensionsPanel(
std::make_unique<PANEL_SETUP_DIMENSIONS>( this, *m_unitProvider, m_designSettings ) )
{
m_unitProvider = aUnitsProvider;
m_fieldPropsGrid->SetDefaultRowSize( m_fieldPropsGrid->GetDefaultRowSize() + 4 );
m_fieldPropsGrid->SetTable( new TEXT_ITEMS_GRID_TABLE( true ), true );
@ -225,6 +237,8 @@ PANEL_FP_EDITOR_DEFAULTS::PANEL_FP_EDITOR_DEFAULTS( wxWindow* aParent,
m_graphicsGrid->DeleteRows( m_graphicsGrid->GetNumberRows() - 1, 1 );
m_graphicsGrid->PushEventHandler( new GRID_TRICKS( m_graphicsGrid ) );
GetSizer()->Add( m_dimensionsPanel.get(), 0, wxEXPAND | wxALL, 5 );
}
@ -311,6 +325,8 @@ void PANEL_FP_EDITOR_DEFAULTS::loadFPSettings( FOOTPRINT_EDITOR_SETTINGS* aCfg )
m_graphicsGrid->SetRowLabelSize( m_graphicsGrid->GetVisibleWidth( -1, true, true, true ) );
m_dimensionsPanel->LoadFromSettings( aCfg->m_DesignSettings );
Layout();
}
@ -354,8 +370,7 @@ bool PANEL_FP_EDITOR_DEFAULTS::TransferDataFromWindow()
if( !m_textItemsGrid->CommitPendingChanges() || !m_graphicsGrid->CommitPendingChanges() )
return false;
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
BOARD_DESIGN_SETTINGS& cfg = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_DesignSettings;
BOARD_DESIGN_SETTINGS& cfg = m_designSettings;
// A minimal value for sizes and thickness:
const int minWidth = pcbIUScale.mmToIU( MINIMUM_LINE_WIDTH_MM );
@ -469,6 +484,8 @@ bool PANEL_FP_EDITOR_DEFAULTS::TransferDataFromWindow()
cfg.m_DefaultFPTextItems.emplace_back( text, visible, layer );
}
m_dimensionsPanel->TransferDataFromWindow();
if( errorsMsg.IsEmpty() )
return true;

View File

@ -17,13 +17,17 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PANEL_FP_EDITOR_DEFAULTS_H
#define PANEL_FP_EDITOR_DEFAULTS_H
#pragma once
#include <memory>
#include <panel_fp_editor_defaults_base.h>
class BOARD_DESIGN_SETTINGS;
class PAGED_DIALOG;
class FOOTPRINT_EDITOR_SETTINGS;
class PANEL_SETUP_DIMENSIONS;
class UNITS_PROVIDER;
class PANEL_FP_EDITOR_DEFAULTS : public PANEL_FP_EDITOR_DEFAULTS_BASE
@ -46,12 +50,8 @@ private:
void loadFPSettings( FOOTPRINT_EDITOR_SETTINGS* aCfg );
private:
bool m_firstShow = true;
UNITS_PROVIDER* m_unitProvider;
bool m_firstShow = true;
UNITS_PROVIDER* m_unitProvider;
BOARD_DESIGN_SETTINGS& m_designSettings;
std::unique_ptr<PANEL_SETUP_DIMENSIONS> m_dimensionsPanel;
};
#endif // PANEL_FP_EDITOR_DEFAULTS_H

View File

@ -202,6 +202,7 @@ PANEL_FP_EDITOR_DEFAULTS_BASE::PANEL_FP_EDITOR_DEFAULTS_BASE( wxWindow* parent,
bSizerMain->Add( bSizerMargins, 1, wxEXPAND, 5 );
this->SetSizer( bSizerMain );
this->Layout();
bSizerMain->Fit( this );

View File

@ -0,0 +1,106 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018-2023 KiCad Developers, see change_log.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 Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "panel_setup_dimensions.h"
#include <pcb_edit_frame.h>
#include <board_design_settings.h>
PANEL_SETUP_DIMENSIONS::PANEL_SETUP_DIMENSIONS( wxWindow* aParentWindow, UNITS_PROVIDER& aUnitsProvider,
BOARD_DESIGN_SETTINGS& aBrdSettings ) :
PANEL_SETUP_DIMENSIONS_BASE( aParentWindow ),
m_parentWindow( aParentWindow ),
m_unitsProvider( aUnitsProvider ),
m_brdSettings( &aBrdSettings ),
m_arrowLength( &m_unitsProvider, aParentWindow, m_lblArrowLength, m_dimensionArrowLength, m_arrowLengthUnits ),
m_extensionOffset( &m_unitsProvider, aParentWindow, m_lblExtensionOffset, m_dimensionExtensionOffset,
m_dimensionExtensionOffsetUnits )
{
m_parentWindow->Bind( EDA_EVT_UNITS_CHANGED, &PANEL_SETUP_DIMENSIONS::onUnitsChanged, this );
}
PANEL_SETUP_DIMENSIONS::~PANEL_SETUP_DIMENSIONS()
{
m_parentWindow->Unbind( EDA_EVT_UNITS_CHANGED, &PANEL_SETUP_DIMENSIONS::onUnitsChanged, this );
}
void PANEL_SETUP_DIMENSIONS::onUnitsChanged( wxCommandEvent& aEvent )
{
BOARD_DESIGN_SETTINGS tempBDS( nullptr, "dummy" );
BOARD_DESIGN_SETTINGS* saveBDS = m_brdSettings;
m_brdSettings = &tempBDS; // No, address of stack var does not escape function
TransferDataFromWindow();
TransferDataToWindow();
m_brdSettings = saveBDS;
aEvent.Skip();
}
bool PANEL_SETUP_DIMENSIONS::TransferDataToWindow()
{
LoadFromSettings( *m_brdSettings );
return true;
}
void PANEL_SETUP_DIMENSIONS::LoadFromSettings( const BOARD_DESIGN_SETTINGS& aBrdSettings )
{
m_dimensionUnits->SetSelection( static_cast<int>( aBrdSettings.m_DimensionUnitsMode ) );
m_dimensionUnitsFormat->SetSelection( static_cast<int>( aBrdSettings.m_DimensionUnitsFormat ) );
m_dimensionPrecision->SetSelection( static_cast<int>( aBrdSettings.m_DimensionPrecision ) );
m_dimensionSuppressZeroes->SetValue( aBrdSettings.m_DimensionSuppressZeroes );
int position = static_cast<int>( aBrdSettings.m_DimensionTextPosition );
m_dimensionTextPositionMode->SetSelection( position );
m_dimensionTextKeepAligned->SetValue( aBrdSettings.m_DimensionKeepTextAligned );
m_arrowLength.SetValue( aBrdSettings.m_DimensionArrowLength );
m_extensionOffset.SetValue( aBrdSettings.m_DimensionExtensionOffset );
}
bool PANEL_SETUP_DIMENSIONS::TransferDataFromWindow()
{
int mode = m_dimensionUnits->GetSelection();
m_brdSettings->m_DimensionUnitsMode = static_cast<DIM_UNITS_MODE>( mode );
int format = m_dimensionUnitsFormat->GetSelection();
m_brdSettings->m_DimensionUnitsFormat = static_cast<DIM_UNITS_FORMAT>( format );
int precision = m_dimensionPrecision->GetSelection();
m_brdSettings->m_DimensionPrecision = static_cast<DIM_PRECISION>( precision );
m_brdSettings->m_DimensionSuppressZeroes = m_dimensionSuppressZeroes->GetValue();
int position = m_dimensionTextPositionMode->GetSelection();
m_brdSettings->m_DimensionTextPosition = static_cast<DIM_TEXT_POSITION>( position );
m_brdSettings->m_DimensionKeepTextAligned = m_dimensionTextKeepAligned->GetValue();
m_brdSettings->m_DimensionArrowLength = m_arrowLength.GetValue();
m_brdSettings->m_DimensionExtensionOffset = m_extensionOffset.GetValue();
return true;
}

View File

@ -0,0 +1,57 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2024 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 Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#pragma once
#include <board.h>
#include <widgets/unit_binder.h>
#include <widgets/paged_dialog.h>
#include <panel_setup_dimensions_base.h>
class BOARD_DESIGN_SETTINGS;
class PANEL_SETUP_DIMENSIONS : public PANEL_SETUP_DIMENSIONS_BASE
{
public:
PANEL_SETUP_DIMENSIONS( wxWindow* aParentWindow, UNITS_PROVIDER& aUnitsProvider,
BOARD_DESIGN_SETTINGS& aBrdSettings );
~PANEL_SETUP_DIMENSIONS( ) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
void LoadFromSettings( const BOARD_DESIGN_SETTINGS& aBrdSettings );
private:
void onUnitsChanged( wxCommandEvent& aEvent );
private:
wxWindow* m_parentWindow;
UNITS_PROVIDER& m_unitsProvider;
BOARD_DESIGN_SETTINGS* m_brdSettings;
UNIT_BINDER m_arrowLength;
UNIT_BINDER m_extensionOffset;
};

View File

@ -0,0 +1,121 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "panel_setup_dimensions_base.h"
///////////////////////////////////////////////////////////////////////////
PANEL_SETUP_DIMENSIONS_BASE::PANEL_SETUP_DIMENSIONS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
wxBoxSizer* mainSizer;
mainSizer = new wxBoxSizer( wxVERTICAL );
m_staticTextDefPropDim = new wxStaticText( this, wxID_ANY, _("Default properties for new dimension objects:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextDefPropDim->Wrap( -1 );
mainSizer->Add( m_staticTextDefPropDim, 0, wxTOP|wxRIGHT|wxLEFT, 8 );
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
mainSizer->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 8 );
wxGridBagSizer* gbSizer1;
gbSizer1 = new wxGridBagSizer( 0, 5 );
gbSizer1->SetFlexibleDirection( wxVERTICAL );
gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
m_lblDimensionUnits = new wxStaticText( this, wxID_ANY, _("Units:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblDimensionUnits->Wrap( -1 );
gbSizer1->Add( m_lblDimensionUnits, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
wxString m_dimensionUnitsChoices[] = { _("Inches"), _("Mils"), _("Millimeters"), _("Automatic") };
int m_dimensionUnitsNChoices = sizeof( m_dimensionUnitsChoices ) / sizeof( wxString );
m_dimensionUnits = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionUnitsNChoices, m_dimensionUnitsChoices, 0 );
m_dimensionUnits->SetSelection( 0 );
m_dimensionUnits->SetToolTip( _("Default units for dimensions (\"automatic\" to follow the chosen UI units)") );
gbSizer1->Add( m_dimensionUnits, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
gbSizer1->Add( 0, 0, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
m_lblTextPositionMode = new wxStaticText( this, wxID_ANY, _("Text position:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblTextPositionMode->Wrap( -1 );
gbSizer1->Add( m_lblTextPositionMode, wxGBPosition( 0, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 4 );
wxString m_dimensionTextPositionModeChoices[] = { _("Outside"), _("Inline") };
int m_dimensionTextPositionModeNChoices = sizeof( m_dimensionTextPositionModeChoices ) / sizeof( wxString );
m_dimensionTextPositionMode = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionTextPositionModeNChoices, m_dimensionTextPositionModeChoices, 0 );
m_dimensionTextPositionMode->SetSelection( 0 );
m_dimensionTextPositionMode->SetToolTip( _("Where to position the dimension text relative to the dimension line") );
gbSizer1->Add( m_dimensionTextPositionMode, wxGBPosition( 0, 4 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_lblDimensionUnitsFormat = new wxStaticText( this, wxID_ANY, _("Units format:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblDimensionUnitsFormat->Wrap( -1 );
gbSizer1->Add( m_lblDimensionUnitsFormat, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
wxString m_dimensionUnitsFormatChoices[] = { _("1234"), _("1234 mm"), _("1234 (mm)") };
int m_dimensionUnitsFormatNChoices = sizeof( m_dimensionUnitsFormatChoices ) / sizeof( wxString );
m_dimensionUnitsFormat = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionUnitsFormatNChoices, m_dimensionUnitsFormatChoices, 0 );
m_dimensionUnitsFormat->SetSelection( 1 );
gbSizer1->Add( m_dimensionUnitsFormat, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_dimensionTextKeepAligned = new wxCheckBox( this, wxID_ANY, _("Keep text aligned"), wxDefaultPosition, wxDefaultSize, 0 );
m_dimensionTextKeepAligned->SetToolTip( _("When checked, dimension text will be kept aligned with dimension lines") );
gbSizer1->Add( m_dimensionTextKeepAligned, wxGBPosition( 1, 3 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxLEFT, 5 );
m_lblDimensionPrecision = new wxStaticText( this, wxID_ANY, _("Precision:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblDimensionPrecision->Wrap( -1 );
gbSizer1->Add( m_lblDimensionPrecision, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
wxString m_dimensionPrecisionChoices[] = { _("0"), _("0.0"), _("0.00"), _("0.000"), _("0.0000"), _("0.00000") };
int m_dimensionPrecisionNChoices = sizeof( m_dimensionPrecisionChoices ) / sizeof( wxString );
m_dimensionPrecision = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionPrecisionNChoices, m_dimensionPrecisionChoices, 0 );
m_dimensionPrecision->SetSelection( 4 );
m_dimensionPrecision->SetToolTip( _("How many digits of precision to show") );
gbSizer1->Add( m_dimensionPrecision, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_lblArrowLength = new wxStaticText( this, wxID_ANY, _("Arrow length:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblArrowLength->Wrap( -1 );
gbSizer1->Add( m_lblArrowLength, wxGBPosition( 2, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_dimensionArrowLength = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gbSizer1->Add( m_dimensionArrowLength, wxGBPosition( 2, 4 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_arrowLengthUnits = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_arrowLengthUnits->Wrap( -1 );
gbSizer1->Add( m_arrowLengthUnits, wxGBPosition( 2, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_dimensionSuppressZeroes = new wxCheckBox( this, wxID_ANY, _("Suppress trailing zeroes"), wxDefaultPosition, wxDefaultSize, 0 );
m_dimensionSuppressZeroes->SetToolTip( _("When checked, \"1.2300\" will be rendered as \"1.23\" even if precision is set to show more digits") );
gbSizer1->Add( m_dimensionSuppressZeroes, wxGBPosition( 3, 0 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_lblExtensionOffset = new wxStaticText( this, wxID_ANY, _("Extension line offset:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblExtensionOffset->Wrap( -1 );
gbSizer1->Add( m_lblExtensionOffset, wxGBPosition( 3, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_dimensionExtensionOffset = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gbSizer1->Add( m_dimensionExtensionOffset, wxGBPosition( 3, 4 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_dimensionExtensionOffsetUnits = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_dimensionExtensionOffsetUnits->Wrap( -1 );
gbSizer1->Add( m_dimensionExtensionOffsetUnits, wxGBPosition( 3, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
mainSizer->Add( gbSizer1, 1, wxEXPAND|wxTOP, 5 );
this->SetSizer( mainSizer );
this->Layout();
mainSizer->Fit( this );
}
PANEL_SETUP_DIMENSIONS_BASE::~PANEL_SETUP_DIMENSIONS_BASE()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,63 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/statline.h>
#include <wx/choice.h>
#include <wx/checkbox.h>
#include <wx/textctrl.h>
#include <wx/gbsizer.h>
#include <wx/sizer.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_SETUP_DIMENSIONS_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_SETUP_DIMENSIONS_BASE : public wxPanel
{
private:
protected:
wxStaticText* m_staticTextDefPropDim;
wxStaticLine* m_staticline1;
wxStaticText* m_lblDimensionUnits;
wxChoice* m_dimensionUnits;
wxStaticText* m_lblTextPositionMode;
wxChoice* m_dimensionTextPositionMode;
wxStaticText* m_lblDimensionUnitsFormat;
wxChoice* m_dimensionUnitsFormat;
wxCheckBox* m_dimensionTextKeepAligned;
wxStaticText* m_lblDimensionPrecision;
wxChoice* m_dimensionPrecision;
wxStaticText* m_lblArrowLength;
wxTextCtrl* m_dimensionArrowLength;
wxStaticText* m_arrowLengthUnits;
wxCheckBox* m_dimensionSuppressZeroes;
wxStaticText* m_lblExtensionOffset;
wxTextCtrl* m_dimensionExtensionOffset;
wxStaticText* m_dimensionExtensionOffsetUnits;
public:
PANEL_SETUP_DIMENSIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~PANEL_SETUP_DIMENSIONS_BASE();
};

View File

@ -21,11 +21,14 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <pcb_edit_frame.h>
#include "panel_setup_text_and_graphics.h"
#include <board_design_settings.h>
#include <dialogs/panel_setup_dimensions.h>
#include <pcb_edit_frame.h>
#include <grid_tricks.h>
#include <eda_text.h>
#include <panel_setup_text_and_graphics.h>
#include <kidialog.h>
@ -53,16 +56,14 @@ enum
};
PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentWindow,
PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentWindow,
PCB_EDIT_FRAME* aFrame ) :
PANEL_SETUP_TEXT_AND_GRAPHICS_BASE( aParentWindow ),
m_arrowLength( aFrame, m_lblArrowLength, m_dimensionArrowLength, m_arrowLengthUnits ),
m_extensionOffset( aFrame, m_lblExtensionOffset, m_dimensionExtensionOffset,
m_dimensionExtensionOffsetUnits )
m_Frame( aFrame ),
m_BrdSettings( &m_Frame->GetBoard()->GetDesignSettings() ),
m_dimensionsPanel(
std::make_unique<PANEL_SETUP_DIMENSIONS>( this, *aFrame, *m_BrdSettings ) )
{
m_Frame = aFrame;
m_BrdSettings = &m_Frame->GetBoard()->GetDesignSettings();
m_grid->SetUnitsProvider( m_Frame );
m_grid->SetAutoEvalCols( { COL_LINE_THICKNESS,
COL_TEXT_WIDTH,
@ -95,6 +96,8 @@ PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentW
m_grid->PushEventHandler( new GRID_TRICKS( m_grid ) );
GetSizer()->Add( m_dimensionsPanel.get(), 0, wxEXPAND | wxALL, 5 );
m_Frame->Bind( EDA_EVT_UNITS_CHANGED, &PANEL_SETUP_TEXT_AND_GRAPHICS::onUnitsChanged, this );
}
@ -178,17 +181,7 @@ bool PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataToWindow()
Layout();
m_dimensionUnits->SetSelection( static_cast<int>( m_BrdSettings->m_DimensionUnitsMode ) );
m_dimensionUnitsFormat->SetSelection( static_cast<int>( m_BrdSettings->m_DimensionUnitsFormat ) );
m_dimensionPrecision->SetSelection( static_cast<int>( m_BrdSettings->m_DimensionPrecision ) );
m_dimensionSuppressZeroes->SetValue( m_BrdSettings->m_DimensionSuppressZeroes );
int position = static_cast<int>( m_BrdSettings->m_DimensionTextPosition );
m_dimensionTextPositionMode->SetSelection( position );
m_dimensionTextKeepAligned->SetValue( m_BrdSettings->m_DimensionKeepTextAligned );
m_arrowLength.SetValue( m_BrdSettings->m_DimensionArrowLength );
m_extensionOffset.SetValue( m_BrdSettings->m_DimensionExtensionOffset );
m_dimensionsPanel->TransferDataToWindow();
return true;
}
@ -289,21 +282,7 @@ bool PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataFromWindow()
wxGridCellBoolEditor::IsTrueValue( m_grid->GetCellValue( i, COL_TEXT_UPRIGHT ) );
}
// These are all stored in project file, not board, so no need for OnModify()
int mode = m_dimensionUnits->GetSelection();
m_BrdSettings->m_DimensionUnitsMode = static_cast<DIM_UNITS_MODE>( mode );
int format = m_dimensionUnitsFormat->GetSelection();
m_BrdSettings->m_DimensionUnitsFormat = static_cast<DIM_UNITS_FORMAT>( format );
int precision = m_dimensionPrecision->GetSelection();
m_BrdSettings->m_DimensionPrecision = static_cast<DIM_PRECISION>( precision );
m_BrdSettings->m_DimensionSuppressZeroes = m_dimensionSuppressZeroes->GetValue();
int position = m_dimensionTextPositionMode->GetSelection();
m_BrdSettings->m_DimensionTextPosition = static_cast<DIM_TEXT_POSITION>( position );
m_BrdSettings->m_DimensionKeepTextAligned = m_dimensionTextKeepAligned->GetValue();
m_BrdSettings->m_DimensionArrowLength = m_arrowLength.GetValue();
m_BrdSettings->m_DimensionExtensionOffset = m_extensionOffset.GetValue();
m_dimensionsPanel->TransferDataFromWindow();
if( errorsMsg.IsEmpty() )
return true;

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018-2022 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2018-2024 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
@ -21,9 +21,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#pragma once
#ifndef PANEL_SETUP_TEXT_AND_GRAPHICS_H
#define PANEL_SETUP_TEXT_AND_GRAPHICS_H
#include <memory>
#include <board.h>
#include <widgets/unit_binder.h>
@ -31,9 +31,9 @@
#include <panel_setup_text_and_graphics_base.h>
class PCB_EDIT_FRAME;
class BOARD_DESIGN_SETTINGS;
class PANEL_SETUP_DIMENSIONS;
class PCB_EDIT_FRAME;
class PANEL_SETUP_TEXT_AND_GRAPHICS : public PANEL_SETUP_TEXT_AND_GRAPHICS_BASE
{
@ -52,8 +52,6 @@ private:
private:
PCB_EDIT_FRAME* m_Frame;
BOARD_DESIGN_SETTINGS* m_BrdSettings;
UNIT_BINDER m_arrowLength;
UNIT_BINDER m_extensionOffset;
};
#endif //PANEL_SETUP_TEXT_AND_GRAPHICS_H
std::unique_ptr<PANEL_SETUP_DIMENSIONS> m_dimensionsPanel;
};

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@ -75,102 +75,6 @@ PANEL_SETUP_TEXT_AND_GRAPHICS_BASE::PANEL_SETUP_TEXT_AND_GRAPHICS_BASE( wxWindow
m_gridSizer->Add( 0, 0, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
m_staticTextDefPropDim = new wxStaticText( this, wxID_ANY, _("Default properties for new dimension objects:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextDefPropDim->Wrap( -1 );
m_gridSizer->Add( m_staticTextDefPropDim, 0, wxTOP|wxRIGHT|wxLEFT, 8 );
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
m_gridSizer->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 8 );
wxGridBagSizer* gbSizer1;
gbSizer1 = new wxGridBagSizer( 0, 5 );
gbSizer1->SetFlexibleDirection( wxVERTICAL );
gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
m_lblDimensionUnits = new wxStaticText( this, wxID_ANY, _("Units:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblDimensionUnits->Wrap( -1 );
gbSizer1->Add( m_lblDimensionUnits, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
wxString m_dimensionUnitsChoices[] = { _("Inches"), _("Mils"), _("Millimeters"), _("Automatic") };
int m_dimensionUnitsNChoices = sizeof( m_dimensionUnitsChoices ) / sizeof( wxString );
m_dimensionUnits = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionUnitsNChoices, m_dimensionUnitsChoices, 0 );
m_dimensionUnits->SetSelection( 0 );
m_dimensionUnits->SetToolTip( _("Default units for dimensions (\"automatic\" to follow the chosen UI units)") );
gbSizer1->Add( m_dimensionUnits, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
gbSizer1->Add( 0, 0, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
m_lblTextPositionMode = new wxStaticText( this, wxID_ANY, _("Text position:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblTextPositionMode->Wrap( -1 );
gbSizer1->Add( m_lblTextPositionMode, wxGBPosition( 0, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 4 );
wxString m_dimensionTextPositionModeChoices[] = { _("Outside"), _("Inline") };
int m_dimensionTextPositionModeNChoices = sizeof( m_dimensionTextPositionModeChoices ) / sizeof( wxString );
m_dimensionTextPositionMode = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionTextPositionModeNChoices, m_dimensionTextPositionModeChoices, 0 );
m_dimensionTextPositionMode->SetSelection( 0 );
m_dimensionTextPositionMode->SetToolTip( _("Where to position the dimension text relative to the dimension line") );
gbSizer1->Add( m_dimensionTextPositionMode, wxGBPosition( 0, 4 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_lblDimensionUnitsFormat = new wxStaticText( this, wxID_ANY, _("Units format:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblDimensionUnitsFormat->Wrap( -1 );
gbSizer1->Add( m_lblDimensionUnitsFormat, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
wxString m_dimensionUnitsFormatChoices[] = { _("1234"), _("1234 mm"), _("1234 (mm)") };
int m_dimensionUnitsFormatNChoices = sizeof( m_dimensionUnitsFormatChoices ) / sizeof( wxString );
m_dimensionUnitsFormat = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionUnitsFormatNChoices, m_dimensionUnitsFormatChoices, 0 );
m_dimensionUnitsFormat->SetSelection( 1 );
gbSizer1->Add( m_dimensionUnitsFormat, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_dimensionTextKeepAligned = new wxCheckBox( this, wxID_ANY, _("Keep text aligned"), wxDefaultPosition, wxDefaultSize, 0 );
m_dimensionTextKeepAligned->SetToolTip( _("When checked, dimension text will be kept aligned with dimension lines") );
gbSizer1->Add( m_dimensionTextKeepAligned, wxGBPosition( 1, 3 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxLEFT, 5 );
m_lblDimensionPrecision = new wxStaticText( this, wxID_ANY, _("Precision:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblDimensionPrecision->Wrap( -1 );
gbSizer1->Add( m_lblDimensionPrecision, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
wxString m_dimensionPrecisionChoices[] = { _("0"), _("0.0"), _("0.00"), _("0.000"), _("0.0000"), _("0.00000") };
int m_dimensionPrecisionNChoices = sizeof( m_dimensionPrecisionChoices ) / sizeof( wxString );
m_dimensionPrecision = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dimensionPrecisionNChoices, m_dimensionPrecisionChoices, 0 );
m_dimensionPrecision->SetSelection( 4 );
m_dimensionPrecision->SetToolTip( _("How many digits of precision to show") );
gbSizer1->Add( m_dimensionPrecision, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_lblArrowLength = new wxStaticText( this, wxID_ANY, _("Arrow length:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblArrowLength->Wrap( -1 );
gbSizer1->Add( m_lblArrowLength, wxGBPosition( 2, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_dimensionArrowLength = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gbSizer1->Add( m_dimensionArrowLength, wxGBPosition( 2, 4 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_arrowLengthUnits = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_arrowLengthUnits->Wrap( -1 );
gbSizer1->Add( m_arrowLengthUnits, wxGBPosition( 2, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_dimensionSuppressZeroes = new wxCheckBox( this, wxID_ANY, _("Suppress trailing zeroes"), wxDefaultPosition, wxDefaultSize, 0 );
m_dimensionSuppressZeroes->SetToolTip( _("When checked, \"1.2300\" will be rendered as \"1.23\" even if precision is set to show more digits") );
gbSizer1->Add( m_dimensionSuppressZeroes, wxGBPosition( 3, 0 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_lblExtensionOffset = new wxStaticText( this, wxID_ANY, _("Extension line offset:"), wxDefaultPosition, wxDefaultSize, 0 );
m_lblExtensionOffset->Wrap( -1 );
gbSizer1->Add( m_lblExtensionOffset, wxGBPosition( 3, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_dimensionExtensionOffset = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gbSizer1->Add( m_dimensionExtensionOffset, wxGBPosition( 3, 4 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_dimensionExtensionOffsetUnits = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
m_dimensionExtensionOffsetUnits->Wrap( -1 );
gbSizer1->Add( m_dimensionExtensionOffsetUnits, wxGBPosition( 3, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_gridSizer->Add( gbSizer1, 1, wxEXPAND|wxTOP, 5 );
mainSizer->Add( m_gridSizer, 0, wxLEFT, 5 );

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@ -20,10 +20,6 @@ class WX_GRID;
#include <wx/settings.h>
#include <wx/statline.h>
#include <wx/grid.h>
#include <wx/choice.h>
#include <wx/checkbox.h>
#include <wx/textctrl.h>
#include <wx/gbsizer.h>
#include <wx/sizer.h>
#include <wx/panel.h>
@ -41,24 +37,6 @@ class PANEL_SETUP_TEXT_AND_GRAPHICS_BASE : public wxPanel
wxStaticText* m_staticTextDefProp;
wxStaticLine* m_staticline11;
WX_GRID* m_grid;
wxStaticText* m_staticTextDefPropDim;
wxStaticLine* m_staticline1;
wxStaticText* m_lblDimensionUnits;
wxChoice* m_dimensionUnits;
wxStaticText* m_lblTextPositionMode;
wxChoice* m_dimensionTextPositionMode;
wxStaticText* m_lblDimensionUnitsFormat;
wxChoice* m_dimensionUnitsFormat;
wxCheckBox* m_dimensionTextKeepAligned;
wxStaticText* m_lblDimensionPrecision;
wxChoice* m_dimensionPrecision;
wxStaticText* m_lblArrowLength;
wxTextCtrl* m_dimensionArrowLength;
wxStaticText* m_arrowLengthUnits;
wxCheckBox* m_dimensionSuppressZeroes;
wxStaticText* m_lblExtensionOffset;
wxTextCtrl* m_dimensionExtensionOffset;
wxStaticText* m_dimensionExtensionOffsetUnits;
public:

View File

@ -277,6 +277,42 @@ FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS() :
m_params.emplace_back( new PARAM<bool>( "design_settings.others_text_italic",
&m_DesignSettings.m_TextItalic[ LAYER_CLASS_OTHERS ], false ) );
// ---------------------------------------------------------------------------------------------
// Dimension settings
m_params.emplace_back( new PARAM_ENUM<DIM_UNITS_MODE>( "design_settings.dimensions.units",
&m_DesignSettings.m_DimensionUnitsMode, DIM_UNITS_MODE::AUTOMATIC, DIM_UNITS_MODE::INCHES,
DIM_UNITS_MODE::AUTOMATIC ) );
m_params.emplace_back( new PARAM_ENUM<DIM_PRECISION>( "design_settings.dimensions.precision",
&m_DesignSettings.m_DimensionPrecision, DIM_PRECISION::X_XXXX, DIM_PRECISION::X, DIM_PRECISION::V_VVVVV ) );
m_params.emplace_back( new PARAM_ENUM<DIM_UNITS_FORMAT>( "design_settings.dimensions.units_format",
&m_DesignSettings.m_DimensionUnitsFormat, DIM_UNITS_FORMAT::NO_SUFFIX, DIM_UNITS_FORMAT::NO_SUFFIX,
DIM_UNITS_FORMAT::PAREN_SUFFIX ) );
m_params.emplace_back( new PARAM<bool>( "design_settings.dimensions.suppress_zeroes",
&m_DesignSettings.m_DimensionSuppressZeroes, true ) );
// NOTE: excluding DIM_TEXT_POSITION::MANUAL from the valid range here
m_params.emplace_back( new PARAM_ENUM<DIM_TEXT_POSITION>( "design_settings.dimensions.text_position",
&m_DesignSettings.m_DimensionTextPosition, DIM_TEXT_POSITION::OUTSIDE, DIM_TEXT_POSITION::OUTSIDE,
DIM_TEXT_POSITION::INLINE ) );
m_params.emplace_back( new PARAM<bool>( "design_settings.dimensions.keep_text_aligned",
&m_DesignSettings.m_DimensionKeepTextAligned, true ) );
m_params.emplace_back( new PARAM<int>( "design_settings.dimensions.arrow_length",
&m_DesignSettings.m_DimensionArrowLength,
pcbIUScale.MilsToIU( DEFAULT_DIMENSION_ARROW_LENGTH ) ) );
m_params.emplace_back( new PARAM<int>( "design_settings.dimensions.extension_offset",
&m_DesignSettings.m_DimensionExtensionOffset,
pcbIUScale.mmToIU( DEFAULT_DIMENSION_EXTENSION_OFFSET ) ) );
// ---------------------------------------------------------------------------------------------
m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "editing.selection_filter",
[&]() -> nlohmann::json
{