Grids: make user editable

This commit is contained in:
Mike Williams 2023-08-21 15:06:50 -04:00
parent 498b68b8a3
commit f770500bb4
7 changed files with 788 additions and 749 deletions

View File

@ -21,6 +21,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <bitmaps.h>
#include <confirm.h>
#include <wx/textdlg.h>
#include <dialogs/dialog_grid_settings.h>
#include <common.h>
#include <settings/app_settings.h>
@ -59,12 +62,12 @@ DIALOG_GRID_SETTINGS::DIALOG_GRID_SETTINGS( EDA_DRAW_FRAME* aParent ) :
|| m_parent->IsType( FRAME_SCH_VIEWER_MODAL )
|| m_parent->IsType( FRAME_SIMULATOR ) )
{
m_book->SetSelection( 1 );
m_buttonResetOrigin->Hide(); // Eeschema and friends don't use grid origin
// Eeschema and friends don't use grid origin
m_buttonResetOrigin->Hide();
sbGridOriginSizer->ShowItems( false );
}
else
{
m_book->SetSelection( 0 );
sbGridOverridesSizer->ShowItems( false );
}
@ -73,6 +76,9 @@ DIALOG_GRID_SETTINGS::DIALOG_GRID_SETTINGS( EDA_DRAW_FRAME* aParent ) :
m_grid1HotKey->SetLabel( wxString::Format( wxT( "(%s)" ), KeyNameFromKeyCode( hk1 ) ) );
m_grid2HotKey->SetLabel( wxString::Format( wxT( "(%s)" ), KeyNameFromKeyCode( hk2 ) ) );
m_addGridButton->SetBitmap( KiBitmap( BITMAPS::small_plus ) );
m_removeGridButton->SetBitmap( KiBitmap( BITMAPS::small_trash ) );
SetupStandardButtons();
SetInitialFocus( m_GridOriginXCtrl );
@ -107,9 +113,14 @@ void DIALOG_GRID_SETTINGS::RebuildGridSizes()
m_grid1Ctrl->Set( grids );
m_grid2Ctrl->Set( grids );
m_currentGridCtrl->SetStringSelection( savedCurrentGrid );
m_grid1Ctrl->SetStringSelection( savedGrid1 );
m_grid2Ctrl->SetStringSelection( savedGrid2 );
if( !m_currentGridCtrl->SetStringSelection( savedCurrentGrid ) )
m_currentGridCtrl->SetStringSelection( grids.front() );
if( !m_grid1Ctrl->SetStringSelection( savedGrid1 ) )
m_grid1Ctrl->SetStringSelection( grids.front() );
if( !m_grid2Ctrl->SetStringSelection( savedGrid2 ) )
m_grid2Ctrl->SetStringSelection( grids.back() );
}
@ -166,7 +177,6 @@ bool DIALOG_GRID_SETTINGS::TransferDataToWindow()
GRID_SETTINGS& gridCfg = settings->m_Window.grid;
m_buttonResetSizes->Show( gridCfg.sizes != settings->DefaultGridSizeList() );
Layout();
m_currentGridCtrl->SetSelection( settings->m_Window.grid.last_size_idx );
@ -195,6 +205,70 @@ bool DIALOG_GRID_SETTINGS::TransferDataToWindow()
}
void DIALOG_GRID_SETTINGS::OnAddGrid( wxCommandEvent& event )
{
wxTextEntryDialog dlg( this, _( "New grid:" ), _( "Add Grid" ) );
if( dlg.ShowModal() != wxID_OK )
return;
int row = m_currentGridCtrl->GetSelection();
GRID_SETTINGS& gridCfg = m_parent->config()->m_Window.grid;
EDA_IU_SCALE scale = m_parent->GetIuScale();
EDA_UNITS units = m_parent->GetUserUnits();
double gridSize = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, units, dlg.GetValue() );
if( gridSize == 0.0f )
{
DisplayError( this, _( "Grid must have a valid size." ) );
return;
}
wxString gridSizeStr =
EDA_UNIT_UTILS::UI::StringFromValue( scale, EDA_UNITS::MILLIMETRES, gridSize );
for( const wxString& size : gridCfg.sizes )
{
if( gridSizeStr == size )
{
DisplayError( this,
wxString::Format( _( "Grid size '%s' already exists." ), gridSizeStr ) );
return;
}
}
gridCfg.sizes.insert( gridCfg.sizes.begin() + row, gridSizeStr );
RebuildGridSizes();
m_currentGridCtrl->SetSelection( row );
}
void DIALOG_GRID_SETTINGS::OnRemoveGrid( wxCommandEvent& event )
{
GRID_SETTINGS& gridCfg = m_parent->config()->m_Window.grid;
int row = m_currentGridCtrl->GetSelection();
if( row == (int) ( m_currentGridCtrl->GetCount() - 1 ) )
{
DisplayError( this, wxString::Format( _( "Cannot remove the user grid." ) ) );
return;
}
if( gridCfg.sizes.size() <= 1 )
{
DisplayError( this, wxString::Format( _( "At least one grid size is required." ) ) );
return;
}
gridCfg.sizes.erase( gridCfg.sizes.begin() + row );
RebuildGridSizes();
if( row != 0 )
m_currentGridCtrl->SetSelection( row - 1 );
}
void DIALOG_GRID_SETTINGS::OnResetGridOriginClick( wxCommandEvent& event )
{
m_gridOriginX.SetValue( 0 );

View File

@ -16,71 +16,28 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bUpperSizer;
bUpperSizer = new wxBoxSizer( wxHORIZONTAL );
m_book = new wxSimplebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
wxPanel* gridOriginPage;
gridOriginPage = new wxPanel( m_book, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxStaticBoxSizer* sbLeftSizer;
sbLeftSizer = new wxStaticBoxSizer( new wxStaticBox( gridOriginPage, wxID_ANY, _("Grid Origin") ), wxVERTICAL );
wxFlexGridSizer* fgSizerGridOrigin;
fgSizerGridOrigin = new wxFlexGridSizer( 2, 3, 0, 0 );
fgSizerGridOrigin->AddGrowableCol( 1 );
fgSizerGridOrigin->SetFlexibleDirection( wxBOTH );
fgSizerGridOrigin->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextGridPosX = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGridPosX->Wrap( -1 );
fgSizerGridOrigin->Add( m_staticTextGridPosX, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_GridOriginXCtrl = new wxTextCtrl( sbLeftSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerGridOrigin->Add( m_GridOriginXCtrl, 0, wxEXPAND|wxLEFT, 5 );
m_TextPosXUnits = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextPosXUnits->Wrap( -1 );
fgSizerGridOrigin->Add( m_TextPosXUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT, 5 );
m_staticTextGridPosY = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGridPosY->Wrap( -1 );
fgSizerGridOrigin->Add( m_staticTextGridPosY, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
m_GridOriginYCtrl = new wxTextCtrl( sbLeftSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerGridOrigin->Add( m_GridOriginYCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
m_TextPosYUnits = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextPosYUnits->Wrap( -1 );
fgSizerGridOrigin->Add( m_TextPosYUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT, 5 );
sbLeftSizer->Add( fgSizerGridOrigin, 0, wxEXPAND|wxALL, 5 );
gridOriginPage->SetSizer( sbLeftSizer );
gridOriginPage->Layout();
sbLeftSizer->Fit( gridOriginPage );
m_book->AddPage( gridOriginPage, _("a page"), false );
wxPanel* currentGridPage;
currentGridPage = new wxPanel( m_book, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxStaticBoxSizer* sbSizer5;
sbSizer5 = new wxStaticBoxSizer( new wxStaticBox( currentGridPage, wxID_ANY, _("Current Grid") ), wxVERTICAL );
wxStaticBoxSizer* sbCurrentGrid;
sbCurrentGrid = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Current Grid") ), wxHORIZONTAL );
wxArrayString m_currentGridCtrlChoices;
m_currentGridCtrl = new wxChoice( sbSizer5->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_currentGridCtrlChoices, 0 );
m_currentGridCtrl = new wxChoice( sbCurrentGrid->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_currentGridCtrlChoices, 0 );
m_currentGridCtrl->SetSelection( 0 );
sbSizer5->Add( m_currentGridCtrl, 0, wxALL|wxEXPAND, 5 );
sbCurrentGrid->Add( m_currentGridCtrl, 1, wxALL|wxEXPAND, 5 );
m_addGridButton = new wxBitmapButton( sbCurrentGrid->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
sbCurrentGrid->Add( m_addGridButton, 0, wxALL, 5 );
m_removeGridButton = new wxBitmapButton( sbCurrentGrid->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
sbCurrentGrid->Add( m_removeGridButton, 0, wxALL, 5 );
currentGridPage->SetSizer( sbSizer5 );
currentGridPage->Layout();
sbSizer5->Fit( currentGridPage );
m_book->AddPage( currentGridPage, _("a page"), false );
bSizerMain->Add( sbCurrentGrid, 0, wxALL|wxEXPAND, 10 );
bUpperSizer->Add( m_book, 1, wxEXPAND | wxALL, 5 );
wxBoxSizer* bUserSizer;
bUserSizer = new wxBoxSizer( wxHORIZONTAL );
wxStaticBoxSizer* sbUserGridSizer;
sbUserGridSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("User Defined Grid") ), wxVERTICAL );
sbUserGridSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("User Defined Grid") ), wxHORIZONTAL );
wxFlexGridSizer* fgSizer31;
fgSizer31 = new wxFlexGridSizer( 2, 3, 0, 0 );
@ -111,13 +68,49 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
fgSizer31->Add( m_TextSizeYUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
sbUserGridSizer->Add( fgSizer31, 0, wxEXPAND|wxALL, 5 );
sbUserGridSizer->Add( fgSizer31, 1, wxEXPAND|wxALL, 5 );
bUpperSizer->Add( sbUserGridSizer, 1, wxEXPAND|wxALL, 5 );
bUserSizer->Add( sbUserGridSizer, 1, wxALL|wxEXPAND, 10 );
sbGridOriginSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Grid Origin") ), wxVERTICAL );
wxFlexGridSizer* fgSizerGridOrigin;
fgSizerGridOrigin = new wxFlexGridSizer( 2, 3, 0, 0 );
fgSizerGridOrigin->AddGrowableCol( 1 );
fgSizerGridOrigin->SetFlexibleDirection( wxBOTH );
fgSizerGridOrigin->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextGridPosX = new wxStaticText( sbGridOriginSizer->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGridPosX->Wrap( -1 );
fgSizerGridOrigin->Add( m_staticTextGridPosX, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_GridOriginXCtrl = new wxTextCtrl( sbGridOriginSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerGridOrigin->Add( m_GridOriginXCtrl, 0, wxEXPAND|wxLEFT, 5 );
m_TextPosXUnits = new wxStaticText( sbGridOriginSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextPosXUnits->Wrap( -1 );
fgSizerGridOrigin->Add( m_TextPosXUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT, 5 );
m_staticTextGridPosY = new wxStaticText( sbGridOriginSizer->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGridPosY->Wrap( -1 );
fgSizerGridOrigin->Add( m_staticTextGridPosY, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
m_GridOriginYCtrl = new wxTextCtrl( sbGridOriginSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerGridOrigin->Add( m_GridOriginYCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
m_TextPosYUnits = new wxStaticText( sbGridOriginSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextPosYUnits->Wrap( -1 );
fgSizerGridOrigin->Add( m_TextPosYUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT, 5 );
bSizerMain->Add( bUpperSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
sbGridOriginSizer->Add( fgSizerGridOrigin, 0, wxEXPAND|wxALL, 5 );
bUserSizer->Add( sbGridOriginSizer, 1, wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP, 10 );
bSizerMain->Add( bUserSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 0 );
wxStaticBoxSizer* sbFastSwitchSizer;
sbFastSwitchSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Fast Switching") ), wxVERTICAL );
@ -237,7 +230,6 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
bButtonSizer->Add( m_buttonResetOrigin, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_buttonResetSizes = new wxButton( this, wxID_ANY, _("Reset Grid Sizes"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonResetSizes->Hide();
m_buttonResetSizes->SetToolTip( _("Resets the list of grid sizes to default values") );
bButtonSizer->Add( m_buttonResetSizes, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
@ -261,6 +253,8 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
// Connect Events
this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GRID_SETTINGS_BASE::OnInitDlg ) );
m_addGridButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnAddGrid ), NULL, this );
m_removeGridButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnRemoveGrid ), NULL, this );
m_buttonResetOrigin->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnResetGridOriginClick ), NULL, this );
m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnOkClick ), NULL, this );
@ -270,6 +264,8 @@ DIALOG_GRID_SETTINGS_BASE::~DIALOG_GRID_SETTINGS_BASE()
{
// Disconnect Events
this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GRID_SETTINGS_BASE::OnInitDlg ) );
m_addGridButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnAddGrid ), NULL, this );
m_removeGridButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnRemoveGrid ), NULL, this );
m_buttonResetOrigin->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnResetGridOriginClick ), NULL, this );
m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GRID_SETTINGS_BASE::OnOkClick ), NULL, this );

File diff suppressed because it is too large Load Diff

View File

@ -12,22 +12,21 @@
#include <wx/intl.h>
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/choice.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/panel.h>
#include <wx/choice.h>
#include <wx/simplebook.h>
#include <wx/checkbox.h>
#include <wx/button.h>
#include <wx/bmpbuttn.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/button.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/checkbox.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
@ -41,20 +40,22 @@ class DIALOG_GRID_SETTINGS_BASE : public DIALOG_SHIM
private:
protected:
wxSimplebook* m_book;
wxStaticText* m_staticTextGridPosX;
wxTextCtrl* m_GridOriginXCtrl;
wxStaticText* m_TextPosXUnits;
wxStaticText* m_staticTextGridPosY;
wxTextCtrl* m_GridOriginYCtrl;
wxStaticText* m_TextPosYUnits;
wxChoice* m_currentGridCtrl;
wxBitmapButton* m_addGridButton;
wxBitmapButton* m_removeGridButton;
wxStaticText* m_staticTextSizeX;
wxTextCtrl* m_OptGridSizeX;
wxStaticText* m_TextSizeXUnits;
wxStaticText* m_staticTextSizeY;
wxTextCtrl* m_OptGridSizeY;
wxStaticText* m_TextSizeYUnits;
wxStaticBoxSizer* sbGridOriginSizer;
wxStaticText* m_staticTextGridPosX;
wxTextCtrl* m_GridOriginXCtrl;
wxStaticText* m_TextPosXUnits;
wxStaticText* m_staticTextGridPosY;
wxTextCtrl* m_GridOriginYCtrl;
wxStaticText* m_TextPosYUnits;
wxStaticText* m_staticTextGrid1;
wxChoice* m_grid1Ctrl;
wxStaticText* m_grid1HotKey;
@ -86,6 +87,8 @@ class DIALOG_GRID_SETTINGS_BASE : public DIALOG_SHIM
// Virtual event handlers, override them in your derived class
virtual void OnInitDlg( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnAddGrid( wxCommandEvent& event ) { event.Skip(); }
virtual void OnRemoveGrid( wxCommandEvent& event ) { event.Skip(); }
virtual void OnResetGridOriginClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }

View File

@ -318,26 +318,16 @@ void APP_SETTINGS_BASE::addParamsForWindow( WINDOW_SETTINGS* aWindow, const std:
int defaultGridIdx;
if( m_filename == wxS( "pl_editor" ) )
if( m_filename == wxS( "pl_editor" )
|| ( m_filename == wxS( "eeschema" ) || m_filename == wxS( "symbol_editor" ) ) )
{
defaultGridIdx = 1;
m_params.emplace_back( new PARAM_LIST<wxString>( aJsonPath + ".grid.sizes",
&aWindow->grid.sizes, DefaultGridSizeList() ) );
}
else if( m_filename == wxS( "eeschema" ) || m_filename == wxS( "symbol_editor" ) )
{
defaultGridIdx = 1;
// Eeschema's grids are fixed to keep wires/pins connected
}
else
{
defaultGridIdx = 4;
m_params.emplace_back( new PARAM_LIST<wxString>( aJsonPath + ".grid.sizes",
&aWindow->grid.sizes, DefaultGridSizeList() ) );
}
m_params.emplace_back( new PARAM_LIST<wxString>( aJsonPath + ".grid.sizes",
&aWindow->grid.sizes, DefaultGridSizeList() ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".grid.last_size",
&aWindow->grid.last_size_idx, defaultGridIdx ) );
@ -437,10 +427,7 @@ const std::vector<wxString> APP_SETTINGS_BASE::DefaultGridSizeList() const
return { wxS( "100 mil" ),
wxS( "50 mil" ),
wxS( "25 mil" ),
wxS( "10 mil" ),
wxS( "5 mil" ),
wxS( "2 mil" ),
wxS( "1 mil" ) };
wxS( "10 mil" ) };
}
else
{

View File

@ -243,20 +243,8 @@ void SCH_BASE_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
EDA_DRAW_FRAME::LoadSettings( aCfg );
/*
* Do NOT add other values (particularly grid values in mm), because they can break the
* schematic: Because wires and pins are considered as connected when the are to the same
* coordinate we cannot mix coordinates in mils (internal units) and mm (that cannot exactly
* converted in mils in many cases). In fact schematic must only use 50 and 25 mils to
* place labels, wires and symbols others values are useful only for graphic items (mainly
* in library editor) so use integer values in mils only.
* The 100 mil grid is added to help conform to the KiCad Library Convention which states:
* "Using a 100mil grid, pin ends and origin must lie on grid nodes IEC-60617"
*/
aCfg->m_Window.grid.sizes = { wxS( "100 mil" ),
wxS( "50 mil" ),
wxS( "25 mil" ),
wxS( "10 mil" ) };
if( aCfg->m_Window.grid.sizes.empty() )
aCfg->m_Window.grid.sizes = aCfg->DefaultGridSizeList();
if( aCfg->m_Window.grid.last_size_idx > (int) aCfg->m_Window.grid.sizes.size() )
aCfg->m_Window.grid.last_size_idx = 1;

View File

@ -40,6 +40,8 @@ public:
bool TransferDataToWindow() override;
private:
void OnAddGrid( wxCommandEvent& event ) override;
void OnRemoveGrid( wxCommandEvent& event ) override;
void OnResetGridOriginClick( wxCommandEvent& event ) override;
void RebuildGridSizes();