Keep name & value in sync for library items.
Also fixes library reference highlighting from board footprints. Fixes: lp:1792243 * https://bugs.launchpad.net/kicad/+bug/1792243 Fixes: lp:1792256 * https://bugs.launchpad.net/kicad/+bug/1792256
This commit is contained in:
parent
10a032abdb
commit
e5e1a315f1
|
@ -59,7 +59,8 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY( LIB_EDIT_FRA
|
||||||
m_currentAlias( wxNOT_FOUND ),
|
m_currentAlias( wxNOT_FOUND ),
|
||||||
m_pinNameOffset( aParent, m_nameOffsetLabel, m_nameOffsetCtrl, m_nameOffsetUnits, true ),
|
m_pinNameOffset( aParent, m_nameOffsetLabel, m_nameOffsetCtrl, m_nameOffsetUnits, true ),
|
||||||
m_delayedFocusCtrl( nullptr ),
|
m_delayedFocusCtrl( nullptr ),
|
||||||
m_delayedFocusGrid( nullptr )
|
m_delayedFocusGrid( nullptr ),
|
||||||
|
m_delayedFocusPage( -1 )
|
||||||
{
|
{
|
||||||
m_config = Kiface().KifaceSettings();
|
m_config = Kiface().KifaceSettings();
|
||||||
|
|
||||||
|
@ -95,6 +96,8 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY( LIB_EDIT_FRA
|
||||||
attr->SetEditor( new GRID_CELL_URL_EDITOR( this ) );
|
attr->SetEditor( new GRID_CELL_URL_EDITOR( this ) );
|
||||||
m_aliasGrid->SetAttr( DATASHEET, FDC_VALUE, attr );
|
m_aliasGrid->SetAttr( DATASHEET, FDC_VALUE, attr );
|
||||||
|
|
||||||
|
m_SymbolNameCtrl->SetValidator( SCH_FIELD_VALIDATOR( true, VALUE ) );
|
||||||
|
|
||||||
// Configure button logos
|
// Configure button logos
|
||||||
m_bpAdd->SetBitmap( KiBitmap( small_plus_xpm ) );
|
m_bpAdd->SetBitmap( KiBitmap( small_plus_xpm ) );
|
||||||
m_bpDelete->SetBitmap( KiBitmap( trash_xpm ) );
|
m_bpDelete->SetBitmap( KiBitmap( trash_xpm ) );
|
||||||
|
@ -224,6 +227,7 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::Validate()
|
||||||
m_delayedFocusGrid = m_grid;
|
m_delayedFocusGrid = m_grid;
|
||||||
m_delayedFocusColumn = FDC_VALUE;
|
m_delayedFocusColumn = FDC_VALUE;
|
||||||
m_delayedFocusRow = REFERENCE;
|
m_delayedFocusRow = REFERENCE;
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -243,6 +247,7 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::Validate()
|
||||||
m_delayedFocusGrid = m_grid;
|
m_delayedFocusGrid = m_grid;
|
||||||
m_delayedFocusColumn = FDC_NAME;
|
m_delayedFocusColumn = FDC_NAME;
|
||||||
m_delayedFocusRow = i;
|
m_delayedFocusRow = i;
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -346,18 +351,36 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnGridCellChanging( wxGridEvent& event )
|
||||||
{
|
{
|
||||||
event.Veto();
|
event.Veto();
|
||||||
|
|
||||||
if( m_NoteBook->GetSelection() != 0 )
|
|
||||||
m_NoteBook->SetSelection( 0 );
|
|
||||||
|
|
||||||
m_delayedFocusGrid = m_grid;
|
m_delayedFocusGrid = m_grid;
|
||||||
m_delayedFocusRow = event.GetRow();
|
m_delayedFocusRow = event.GetRow();
|
||||||
m_delayedFocusColumn = event.GetCol();
|
m_delayedFocusColumn = event.GetCol();
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
}
|
}
|
||||||
|
else if( event.GetRow() == VALUE && event.GetCol() == FDC_VALUE )
|
||||||
|
m_SymbolNameCtrl->ChangeValue( event.GetString() );
|
||||||
|
|
||||||
editor->DecRef();
|
editor->DecRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnSymbolNameText( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
m_grid->SetCellValue( VALUE, FDC_VALUE, m_SymbolNameCtrl->GetValue() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnSymbolNameKillFocus( wxFocusEvent& event )
|
||||||
|
{
|
||||||
|
if( !m_delayedFocusCtrl && !m_SymbolNameCtrl->GetValidator()->Validate( m_SymbolNameCtrl ) )
|
||||||
|
{
|
||||||
|
m_delayedFocusCtrl = m_SymbolNameCtrl;
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAddField( wxCommandEvent& event )
|
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAddField( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
if( !m_grid->CommitPendingChanges() )
|
if( !m_grid->CommitPendingChanges() )
|
||||||
|
@ -481,13 +504,13 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAliasGridCellChanging( wxGridEvent& eve
|
||||||
{
|
{
|
||||||
event.Veto();
|
event.Veto();
|
||||||
|
|
||||||
if( m_NoteBook->GetSelection() != 1 )
|
|
||||||
m_NoteBook->SetSelection( 1 );
|
|
||||||
|
|
||||||
m_delayedFocusGrid = m_aliasGrid;
|
m_delayedFocusGrid = m_aliasGrid;
|
||||||
m_delayedFocusRow = event.GetRow();
|
m_delayedFocusRow = event.GetRow();
|
||||||
m_delayedFocusColumn = event.GetCol();
|
m_delayedFocusColumn = event.GetCol();
|
||||||
|
m_delayedFocusPage = 1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
updateAliasName( true, newName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,20 +523,11 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAliasNameText( wxCommandEvent& event )
|
||||||
|
|
||||||
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAliasNameKillFocus( wxFocusEvent& event )
|
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAliasNameKillFocus( wxFocusEvent& event )
|
||||||
{
|
{
|
||||||
static bool inKillFocus = false;
|
if( !m_delayedFocusCtrl && !checkAliasName( m_AliasNameCtrl->GetValue() ) )
|
||||||
|
{
|
||||||
// If we get an error then we're going to throw up a dialog. Since we haven't yet
|
|
||||||
// finished the KillFocus event, we'll end up getting another one. Side-effects may
|
|
||||||
// include death.
|
|
||||||
if( inKillFocus )
|
|
||||||
return;
|
|
||||||
|
|
||||||
inKillFocus = true;
|
|
||||||
|
|
||||||
if( !checkAliasName( m_AliasNameCtrl->GetValue() ) )
|
|
||||||
m_delayedFocusCtrl = m_AliasNameCtrl;
|
m_delayedFocusCtrl = m_AliasNameCtrl;
|
||||||
|
m_delayedFocusPage = 1;
|
||||||
inKillFocus = false;
|
}
|
||||||
|
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
@ -744,6 +758,19 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnUpdateUI( wxUpdateUIEvent& event )
|
||||||
m_OptionPartsLocked->Enable( m_SelNumberOfUnits->GetValue() > 1 );
|
m_OptionPartsLocked->Enable( m_SelNumberOfUnits->GetValue() > 1 );
|
||||||
m_pinNameOffset.Enable( m_PinsNameInsideButt->GetValue() );
|
m_pinNameOffset.Enable( m_PinsNameInsideButt->GetValue() );
|
||||||
|
|
||||||
|
if( m_grid->IsCellEditControlShown() )
|
||||||
|
{
|
||||||
|
int row = m_grid->GetGridCursorRow();
|
||||||
|
int col = m_grid->GetGridCursorCol();
|
||||||
|
|
||||||
|
if( row == VALUE && col == FDC_VALUE )
|
||||||
|
{
|
||||||
|
wxGridCellEditor* editor = m_grid->GetCellEditor( row, col );
|
||||||
|
m_SymbolNameCtrl->ChangeValue( editor->GetValue() );
|
||||||
|
editor->DecRef();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Synthesize a Select event when the selection is cleared
|
// Synthesize a Select event when the selection is cleared
|
||||||
if( m_aliasListBox->GetSelection() == wxNOT_FOUND && m_currentAlias != wxNOT_FOUND )
|
if( m_aliasListBox->GetSelection() == wxNOT_FOUND && m_currentAlias != wxNOT_FOUND )
|
||||||
{
|
{
|
||||||
|
@ -762,7 +789,28 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnUpdateUI( wxUpdateUIEvent& event )
|
||||||
adjustGridColumns( m_grid->GetRect().GetWidth() );
|
adjustGridColumns( m_grid->GetRect().GetWidth() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle a delayed focus
|
// Handle a delayed focus. The delay allows us to:
|
||||||
|
// a) change focus when the error was triggered from within a killFocus handler
|
||||||
|
// b) show the correct notebook page in the background before the error dialog comes up
|
||||||
|
// when triggered from an OK or a notebook page change
|
||||||
|
|
||||||
|
if( m_delayedFocusPage >= 0 && m_NoteBook->GetSelection() != m_delayedFocusPage )
|
||||||
|
{
|
||||||
|
m_NoteBook->SetSelection( (unsigned) m_delayedFocusPage );
|
||||||
|
m_delayedFocusPage = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !m_delayedErrorMessage.IsEmpty() )
|
||||||
|
{
|
||||||
|
// We will re-enter this routine when the error dialog is displayed, so make
|
||||||
|
// sure we don't keep putting up more dialogs.
|
||||||
|
wxString msg = m_delayedErrorMessage;
|
||||||
|
m_delayedErrorMessage = wxEmptyString;
|
||||||
|
|
||||||
|
// Do not use DisplayErrorMessage(); it screws up window order on Mac
|
||||||
|
DisplayError( nullptr, msg );
|
||||||
|
}
|
||||||
|
|
||||||
if( m_delayedFocusCtrl )
|
if( m_delayedFocusCtrl )
|
||||||
{
|
{
|
||||||
m_delayedFocusCtrl->SetFocus();
|
m_delayedFocusCtrl->SetFocus();
|
||||||
|
@ -778,21 +826,12 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnUpdateUI( wxUpdateUIEvent& event )
|
||||||
m_delayedFocusGrid->MakeCellVisible( m_delayedFocusRow, m_delayedFocusColumn );
|
m_delayedFocusGrid->MakeCellVisible( m_delayedFocusRow, m_delayedFocusColumn );
|
||||||
m_delayedFocusGrid->SetGridCursor( m_delayedFocusRow, m_delayedFocusColumn );
|
m_delayedFocusGrid->SetGridCursor( m_delayedFocusRow, m_delayedFocusColumn );
|
||||||
|
|
||||||
if( !m_delayedErrorMessage.IsEmpty() )
|
|
||||||
{
|
|
||||||
// We will re-enter this routine when the error dialog is displayed, so make
|
|
||||||
// sure we don't keep putting up more dialogs.
|
|
||||||
wxString msg = m_delayedErrorMessage;
|
|
||||||
m_delayedErrorMessage = wxEmptyString;
|
|
||||||
|
|
||||||
// Do not use DisplayErrorMessage(); it screws up window order on Mac
|
|
||||||
DisplayError( nullptr, msg );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_delayedFocusGrid->EnableCellEditControl( true );
|
m_delayedFocusGrid->EnableCellEditControl( true );
|
||||||
m_delayedFocusGrid->ShowCellEditControl();
|
m_delayedFocusGrid->ShowCellEditControl();
|
||||||
|
|
||||||
m_delayedFocusGrid = nullptr;
|
m_delayedFocusGrid = nullptr;
|
||||||
|
m_delayedFocusRow = -1;
|
||||||
|
m_delayedFocusColumn = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,12 @@ public:
|
||||||
UNIT_BINDER m_pinNameOffset;
|
UNIT_BINDER m_pinNameOffset;
|
||||||
|
|
||||||
wxControl* m_delayedFocusCtrl;
|
wxControl* m_delayedFocusCtrl;
|
||||||
wxString m_delayedErrorMessage;
|
|
||||||
WX_GRID* m_delayedFocusGrid;
|
WX_GRID* m_delayedFocusGrid;
|
||||||
int m_delayedFocusRow;
|
int m_delayedFocusRow;
|
||||||
int m_delayedFocusColumn;
|
int m_delayedFocusColumn;
|
||||||
|
int m_delayedFocusPage;
|
||||||
|
wxString m_delayedErrorMessage;
|
||||||
|
|
||||||
wxString m_shownColumns;
|
wxString m_shownColumns;
|
||||||
|
|
||||||
bool TransferDataToWindow() override;
|
bool TransferDataToWindow() override;
|
||||||
|
@ -80,6 +82,8 @@ private:
|
||||||
void OnDeleteField( wxCommandEvent& event ) override;
|
void OnDeleteField( wxCommandEvent& event ) override;
|
||||||
void OnMoveUp( wxCommandEvent& event ) override;
|
void OnMoveUp( wxCommandEvent& event ) override;
|
||||||
void OnMoveDown( wxCommandEvent& event ) override;
|
void OnMoveDown( wxCommandEvent& event ) override;
|
||||||
|
void OnSymbolNameKillFocus( wxFocusEvent& event ) override;
|
||||||
|
void OnSymbolNameText( wxCommandEvent& event ) override;
|
||||||
void OnSelectAlias( wxCommandEvent& event ) override;
|
void OnSelectAlias( wxCommandEvent& event ) override;
|
||||||
void OnAddAlias( wxCommandEvent& event ) override;
|
void OnAddAlias( wxCommandEvent& event ) override;
|
||||||
void OnDeleteAlias( wxCommandEvent& event ) override;
|
void OnDeleteAlias( wxCommandEvent& event ) override;
|
||||||
|
|
|
@ -29,7 +29,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
wxStaticBoxSizer* sbSizer4;
|
wxStaticBoxSizer* sbSizer4;
|
||||||
sbSizer4 = new wxStaticBoxSizer( new wxStaticBox( m_PanelBasic, wxID_ANY, _("Fields") ), wxVERTICAL );
|
sbSizer4 = new wxStaticBoxSizer( new wxStaticBox( m_PanelBasic, wxID_ANY, _("Fields") ), wxVERTICAL );
|
||||||
|
|
||||||
m_grid = new WX_GRID( sbSizer4->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER );
|
m_grid = new WX_GRID( sbSizer4->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
|
||||||
// Grid
|
// Grid
|
||||||
m_grid->CreateGrid( 4, 11 );
|
m_grid->CreateGrid( 4, 11 );
|
||||||
|
@ -126,7 +126,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
fgSizerFPID->Add( staticNameLabel, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
fgSizerFPID->Add( staticNameLabel, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_SymbolNameCtrl = new wxTextCtrl( m_PanelBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_SymbolNameCtrl = new wxTextCtrl( m_PanelBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
fgSizerFPID->Add( m_SymbolNameCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
fgSizerFPID->Add( m_SymbolNameCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
wxStaticText* staticDescriptionLabel;
|
wxStaticText* staticDescriptionLabel;
|
||||||
staticDescriptionLabel = new wxStaticText( m_PanelBasic, wxID_ANY, _("Description:"), wxDefaultPosition, wxDefaultSize, 0 );
|
staticDescriptionLabel = new wxStaticText( m_PanelBasic, wxID_ANY, _("Description:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
@ -134,7 +134,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
fgSizerFPID->Add( staticDescriptionLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
fgSizerFPID->Add( staticDescriptionLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_DescCtrl = new wxTextCtrl( m_PanelBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_DescCtrl = new wxTextCtrl( m_PanelBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
fgSizerFPID->Add( m_DescCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
fgSizerFPID->Add( m_DescCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
staticKeywordsLabel = new wxStaticText( m_PanelBasic, wxID_ANY, _("Keywords:"), wxDefaultPosition, wxDefaultSize, 0 );
|
staticKeywordsLabel = new wxStaticText( m_PanelBasic, wxID_ANY, _("Keywords:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
staticKeywordsLabel->Wrap( -1 );
|
staticKeywordsLabel->Wrap( -1 );
|
||||||
|
@ -301,7 +301,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
m_staticText12->Wrap( -1 );
|
m_staticText12->Wrap( -1 );
|
||||||
bRightBoxSizerPanelAlias->Add( m_staticText12, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
bRightBoxSizerPanelAlias->Add( m_staticText12, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_aliasGrid = new WX_GRID( m_PanelAlias, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER );
|
m_aliasGrid = new WX_GRID( m_PanelAlias, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
|
||||||
// Grid
|
// Grid
|
||||||
m_aliasGrid->CreateGrid( 4, 2 );
|
m_aliasGrid->CreateGrid( 4, 2 );
|
||||||
|
@ -452,6 +452,8 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
m_bpMoveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveUp ), NULL, this );
|
m_bpMoveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveUp ), NULL, this );
|
||||||
m_bpMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveDown ), NULL, this );
|
m_bpMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveDown ), NULL, this );
|
||||||
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteField ), NULL, this );
|
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteField ), NULL, this );
|
||||||
|
m_SymbolNameCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSymbolNameKillFocus ), NULL, this );
|
||||||
|
m_SymbolNameCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSymbolNameText ), NULL, this );
|
||||||
m_aliasListBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSelectAlias ), NULL, this );
|
m_aliasListBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSelectAlias ), NULL, this );
|
||||||
m_addAliasButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnAddAlias ), NULL, this );
|
m_addAliasButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnAddAlias ), NULL, this );
|
||||||
m_deleteAliasButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteAlias ), NULL, this );
|
m_deleteAliasButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteAlias ), NULL, this );
|
||||||
|
@ -472,6 +474,8 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::~DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE()
|
||||||
m_bpMoveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveUp ), NULL, this );
|
m_bpMoveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveUp ), NULL, this );
|
||||||
m_bpMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveDown ), NULL, this );
|
m_bpMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnMoveDown ), NULL, this );
|
||||||
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteField ), NULL, this );
|
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteField ), NULL, this );
|
||||||
|
m_SymbolNameCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSymbolNameKillFocus ), NULL, this );
|
||||||
|
m_SymbolNameCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSymbolNameText ), NULL, this );
|
||||||
m_aliasListBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSelectAlias ), NULL, this );
|
m_aliasListBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnSelectAlias ), NULL, this );
|
||||||
m_addAliasButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnAddAlias ), NULL, this );
|
m_addAliasButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnAddAlias ), NULL, this );
|
||||||
m_deleteAliasButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteAlias ), NULL, this );
|
m_deleteAliasButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::OnDeleteAlias ), NULL, this );
|
||||||
|
|
|
@ -365,7 +365,7 @@
|
||||||
<property name="tooltip"></property>
|
<property name="tooltip"></property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style">wxSIMPLE_BORDER</property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
|
@ -818,20 +818,20 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="0">
|
<object class="wxBoxSizer" expanded="1">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">bSizerMidBasicPanel</property>
|
<property name="name">bSizerMidBasicPanel</property>
|
||||||
<property name="orient">wxVERTICAL</property>
|
<property name="orient">wxVERTICAL</property>
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
|
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">1</property>
|
||||||
<object class="wxFlexGridSizer" expanded="0">
|
<object class="wxFlexGridSizer" expanded="1">
|
||||||
<property name="cols">2</property>
|
<property name="cols">2</property>
|
||||||
<property name="flexible_direction">wxBOTH</property>
|
<property name="flexible_direction">wxBOTH</property>
|
||||||
<property name="growablecols">1</property>
|
<property name="growablecols">1</property>
|
||||||
|
@ -928,7 +928,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxTextCtrl" expanded="0">
|
<object class="wxTextCtrl" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
|
@ -993,7 +993,7 @@
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
<event name="OnKeyUp"></event>
|
<event name="OnKeyUp"></event>
|
||||||
<event name="OnKillFocus"></event>
|
<event name="OnKillFocus">OnSymbolNameKillFocus</event>
|
||||||
<event name="OnLeaveWindow"></event>
|
<event name="OnLeaveWindow"></event>
|
||||||
<event name="OnLeftDClick"></event>
|
<event name="OnLeftDClick"></event>
|
||||||
<event name="OnLeftDown"></event>
|
<event name="OnLeftDown"></event>
|
||||||
|
@ -1010,7 +1010,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnSymbolNameText</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1102,7 +1102,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxTextCtrl" expanded="0">
|
<object class="wxTextCtrl" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
|
@ -3082,7 +3082,7 @@
|
||||||
<property name="tooltip"></property>
|
<property name="tooltip"></property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style">wxSIMPLE_BORDER</property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
|
|
|
@ -97,6 +97,8 @@ class DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE : public DIALOG_SHIM
|
||||||
virtual void OnMoveUp( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnMoveUp( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnMoveDown( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnMoveDown( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnSymbolNameKillFocus( wxFocusEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnSymbolNameText( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnSelectAlias( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnSelectAlias( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnAddAlias( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnAddAlias( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnDeleteAlias( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnDeleteAlias( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
|
@ -51,7 +51,8 @@ FIELDS_GRID_TABLE<T>::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_BASE_FRAME* a
|
||||||
m_userUnits( aDialog->GetUserUnits() ),
|
m_userUnits( aDialog->GetUserUnits() ),
|
||||||
m_part( aPart ),
|
m_part( aPart ),
|
||||||
m_fieldNameValidator( aFrame->IsType( FRAME_SCH_LIB_EDITOR ), FIELD_NAME ),
|
m_fieldNameValidator( aFrame->IsType( FRAME_SCH_LIB_EDITOR ), FIELD_NAME ),
|
||||||
m_referenceValidator( aFrame->IsType( FRAME_SCH_LIB_EDITOR ), REFERENCE )
|
m_referenceValidator( aFrame->IsType( FRAME_SCH_LIB_EDITOR ), REFERENCE ),
|
||||||
|
m_valueValidator( aFrame->IsType( FRAME_SCH_LIB_EDITOR ), VALUE )
|
||||||
{
|
{
|
||||||
// Build the various grid cell attributes.
|
// Build the various grid cell attributes.
|
||||||
|
|
||||||
|
@ -68,6 +69,11 @@ FIELDS_GRID_TABLE<T>::FIELDS_GRID_TABLE( DIALOG_SHIM* aDialog, SCH_BASE_FRAME* a
|
||||||
referenceEditor->SetValidator( m_referenceValidator );
|
referenceEditor->SetValidator( m_referenceValidator );
|
||||||
m_referenceAttr->SetEditor( referenceEditor );
|
m_referenceAttr->SetEditor( referenceEditor );
|
||||||
|
|
||||||
|
m_valueAttr = new wxGridCellAttr;
|
||||||
|
GRID_CELL_TEXT_EDITOR* valueEditor = new GRID_CELL_TEXT_EDITOR();
|
||||||
|
valueEditor->SetValidator( m_valueValidator );
|
||||||
|
m_valueAttr->SetEditor( valueEditor );
|
||||||
|
|
||||||
m_footprintAttr = new wxGridCellAttr;
|
m_footprintAttr = new wxGridCellAttr;
|
||||||
m_footprintAttr->SetEditor( new GRID_CELL_FOOTPRINT_EDITOR( aDialog ) );
|
m_footprintAttr->SetEditor( new GRID_CELL_FOOTPRINT_EDITOR( aDialog ) );
|
||||||
|
|
||||||
|
@ -111,6 +117,7 @@ FIELDS_GRID_TABLE<T>::~FIELDS_GRID_TABLE()
|
||||||
m_fieldNameAttr->DecRef();
|
m_fieldNameAttr->DecRef();
|
||||||
m_boolAttr->DecRef();
|
m_boolAttr->DecRef();
|
||||||
m_referenceAttr->DecRef();
|
m_referenceAttr->DecRef();
|
||||||
|
m_valueAttr->DecRef();
|
||||||
m_footprintAttr->DecRef();
|
m_footprintAttr->DecRef();
|
||||||
m_urlAttr->DecRef();
|
m_urlAttr->DecRef();
|
||||||
m_vAlignAttr->DecRef();
|
m_vAlignAttr->DecRef();
|
||||||
|
@ -199,21 +206,17 @@ wxGridCellAttr* FIELDS_GRID_TABLE<T>::GetAttr( int aRow, int aCol, wxGridCellAtt
|
||||||
}
|
}
|
||||||
else if( aRow == VALUE )
|
else if( aRow == VALUE )
|
||||||
{
|
{
|
||||||
if( m_frame->IsType( FRAME_SCH_LIB_EDITOR ) )
|
// For power symbols, the value is not editable, because value and pin name must
|
||||||
|
// be the same and can be edited only in library editor.
|
||||||
|
if( m_part && m_part->IsPower() && ! m_frame->IsType( FRAME_SCH_LIB_EDITOR ) )
|
||||||
{
|
{
|
||||||
// This field is the lib name and the default value when loading this component
|
|
||||||
// in schematic. The value is now not editable here (in this dialog) because
|
|
||||||
// changing it is equivalent to create a new component or alias. This is handled
|
|
||||||
// in libedit, not in this dialog.
|
|
||||||
m_readOnlyAttr->IncRef();
|
m_readOnlyAttr->IncRef();
|
||||||
return m_readOnlyAttr;
|
return m_readOnlyAttr;
|
||||||
}
|
}
|
||||||
else if( m_part && m_part->IsPower() )
|
else
|
||||||
{
|
{
|
||||||
// For power symbols, the value is not editable, because value and pin name must
|
m_valueAttr->IncRef();
|
||||||
// be the same and can be edited only in library editor.
|
return m_valueAttr;
|
||||||
m_readOnlyAttr->IncRef();
|
|
||||||
return m_readOnlyAttr;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( aRow == FOOTPRINT )
|
else if( aRow == FOOTPRINT )
|
||||||
|
|
|
@ -101,10 +101,12 @@ private:
|
||||||
|
|
||||||
SCH_FIELD_VALIDATOR m_fieldNameValidator;
|
SCH_FIELD_VALIDATOR m_fieldNameValidator;
|
||||||
SCH_FIELD_VALIDATOR m_referenceValidator;
|
SCH_FIELD_VALIDATOR m_referenceValidator;
|
||||||
|
SCH_FIELD_VALIDATOR m_valueValidator;
|
||||||
|
|
||||||
wxGridCellAttr* m_readOnlyAttr;
|
wxGridCellAttr* m_readOnlyAttr;
|
||||||
wxGridCellAttr* m_fieldNameAttr;
|
wxGridCellAttr* m_fieldNameAttr;
|
||||||
wxGridCellAttr* m_referenceAttr;
|
wxGridCellAttr* m_referenceAttr;
|
||||||
|
wxGridCellAttr* m_valueAttr;
|
||||||
wxGridCellAttr* m_footprintAttr;
|
wxGridCellAttr* m_footprintAttr;
|
||||||
wxGridCellAttr* m_urlAttr;
|
wxGridCellAttr* m_urlAttr;
|
||||||
wxGridCellAttr* m_boolAttr;
|
wxGridCellAttr* m_boolAttr;
|
||||||
|
|
|
@ -72,9 +72,11 @@ DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR( FOOTPRINT_EDIT_FRAME* aP
|
||||||
m_texts = new TEXT_MOD_GRID_TABLE( m_units, m_frame );
|
m_texts = new TEXT_MOD_GRID_TABLE( m_units, m_frame );
|
||||||
|
|
||||||
m_delayedErrorMessage = wxEmptyString;
|
m_delayedErrorMessage = wxEmptyString;
|
||||||
|
m_delayedFocusCtrl = nullptr;
|
||||||
m_delayedFocusGrid = nullptr;
|
m_delayedFocusGrid = nullptr;
|
||||||
m_delayedFocusRow = -1;
|
m_delayedFocusRow = -1;
|
||||||
m_delayedFocusColumn = -1;
|
m_delayedFocusColumn = -1;
|
||||||
|
m_delayedFocusPage = -1;
|
||||||
|
|
||||||
// Give an icon
|
// Give an icon
|
||||||
wxIcon icon;
|
wxIcon icon;
|
||||||
|
@ -119,13 +121,15 @@ DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR( FOOTPRINT_EDIT_FRAME* aP
|
||||||
m_staticTextInfoValPos->SetFont( infoFont );
|
m_staticTextInfoValPos->SetFont( infoFont );
|
||||||
m_staticTextInfoCopper->SetFont( infoFont );
|
m_staticTextInfoCopper->SetFont( infoFont );
|
||||||
|
|
||||||
m_NoteBook->SetSelection( m_page );
|
if( m_page >= 0 )
|
||||||
|
m_NoteBook->SetSelection( (unsigned) m_page );
|
||||||
|
|
||||||
if( m_page == 0 )
|
if( m_page == 0 )
|
||||||
{
|
{
|
||||||
m_delayedFocusGrid = m_itemsGrid;
|
m_delayedFocusGrid = m_itemsGrid;
|
||||||
m_delayedFocusRow = 0;
|
m_delayedFocusRow = 0;
|
||||||
m_delayedFocusColumn = 0;
|
m_delayedFocusColumn = 0;
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
}
|
}
|
||||||
else if ( m_page == 1 )
|
else if ( m_page == 1 )
|
||||||
SetInitialFocus( m_NetClearanceCtrl );
|
SetInitialFocus( m_NetClearanceCtrl );
|
||||||
|
@ -134,6 +138,7 @@ DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR( FOOTPRINT_EDIT_FRAME* aP
|
||||||
m_delayedFocusGrid = m_modelsGrid;
|
m_delayedFocusGrid = m_modelsGrid;
|
||||||
m_delayedFocusRow = 0;
|
m_delayedFocusRow = 0;
|
||||||
m_delayedFocusColumn = 0;
|
m_delayedFocusColumn = 0;
|
||||||
|
m_delayedFocusPage = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sdbSizerStdButtonsOK->SetDefault();
|
m_sdbSizerStdButtonsOK->SetDefault();
|
||||||
|
@ -145,6 +150,9 @@ DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR( FOOTPRINT_EDIT_FRAME* aP
|
||||||
m_button3DShapeBrowse->SetBitmap( KiBitmap( folder_xpm ) );
|
m_button3DShapeBrowse->SetBitmap( KiBitmap( folder_xpm ) );
|
||||||
m_button3DShapeRemove->SetBitmap( KiBitmap( trash_xpm ) );
|
m_button3DShapeRemove->SetBitmap( KiBitmap( trash_xpm ) );
|
||||||
|
|
||||||
|
// wxFormBuilder doesn't include this event...
|
||||||
|
m_itemsGrid->Connect( wxEVT_GRID_CELL_CHANGING, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR::OnGridCellChanging ), NULL, this );
|
||||||
|
|
||||||
FinishDialogSettings();
|
FinishDialogSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,6 +164,8 @@ DIALOG_FOOTPRINT_FP_EDITOR::~DIALOG_FOOTPRINT_FP_EDITOR()
|
||||||
// Prevents crash bug in wxGrid's d'tor
|
// Prevents crash bug in wxGrid's d'tor
|
||||||
m_itemsGrid->DestroyTable( m_texts );
|
m_itemsGrid->DestroyTable( m_texts );
|
||||||
|
|
||||||
|
m_itemsGrid->Disconnect( wxEVT_GRID_CELL_CHANGING, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR::OnGridCellChanging ), NULL, this );
|
||||||
|
|
||||||
// Delete the GRID_TRICKS.
|
// Delete the GRID_TRICKS.
|
||||||
m_itemsGrid->PopEventHandler( true );
|
m_itemsGrid->PopEventHandler( true );
|
||||||
m_modelsGrid->PopEventHandler( true );
|
m_modelsGrid->PopEventHandler( true );
|
||||||
|
@ -177,7 +187,7 @@ bool DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow()
|
||||||
LIB_ID fpID = m_footprint->GetFPID();
|
LIB_ID fpID = m_footprint->GetFPID();
|
||||||
wxString footprintName = fpID.GetLibItemName();
|
wxString footprintName = fpID.GetLibItemName();
|
||||||
|
|
||||||
m_FootprintNameCtrl->SetValue( footprintName );
|
m_FootprintNameCtrl->ChangeValue( footprintName );
|
||||||
|
|
||||||
m_DocCtrl->SetValue( m_footprint->GetDescription() );
|
m_DocCtrl->SetValue( m_footprint->GetDescription() );
|
||||||
m_KeywordCtrl->SetValue( m_footprint->GetKeywords() );
|
m_KeywordCtrl->SetValue( m_footprint->GetKeywords() );
|
||||||
|
@ -330,6 +340,7 @@ void DIALOG_FOOTPRINT_FP_EDITOR::On3DModelCellChanged( wxGridEvent& aEvent )
|
||||||
m_delayedFocusGrid = m_modelsGrid;
|
m_delayedFocusGrid = m_modelsGrid;
|
||||||
m_delayedFocusRow = aEvent.GetRow();
|
m_delayedFocusRow = aEvent.GetRow();
|
||||||
m_delayedFocusColumn = aEvent.GetCol();
|
m_delayedFocusColumn = aEvent.GetCol();
|
||||||
|
m_delayedFocusPage = 2;
|
||||||
aEvent.Veto();
|
aEvent.Veto();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,6 +470,23 @@ void DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DRow( wxCommandEvent& )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DIALOG_FOOTPRINT_FP_EDITOR::checkFootprintName( const wxString& aFootprintName )
|
||||||
|
{
|
||||||
|
if( aFootprintName.IsEmpty() || !MODULE::IsLibNameValid( aFootprintName ) )
|
||||||
|
{
|
||||||
|
if( aFootprintName.IsEmpty() )
|
||||||
|
m_delayedErrorMessage = _( "Footprint must have a name." );
|
||||||
|
else
|
||||||
|
m_delayedErrorMessage.Printf( _( "Footprint name may not contain \"%s\"." ),
|
||||||
|
MODULE::StringLibNameInvalidChars( true ) );
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool DIALOG_FOOTPRINT_FP_EDITOR::Validate()
|
bool DIALOG_FOOTPRINT_FP_EDITOR::Validate()
|
||||||
{
|
{
|
||||||
if( !m_itemsGrid->CommitPendingChanges() )
|
if( !m_itemsGrid->CommitPendingChanges() )
|
||||||
|
@ -470,18 +498,13 @@ bool DIALOG_FOOTPRINT_FP_EDITOR::Validate()
|
||||||
// First, test for invalid chars in module name
|
// First, test for invalid chars in module name
|
||||||
wxString footprintName = m_FootprintNameCtrl->GetValue();
|
wxString footprintName = m_FootprintNameCtrl->GetValue();
|
||||||
|
|
||||||
if( footprintName.IsEmpty() || !MODULE::IsLibNameValid( footprintName ) )
|
if( !checkFootprintName( footprintName ) )
|
||||||
{
|
{
|
||||||
wxString msg;
|
if( m_NoteBook->GetSelection() != 0 )
|
||||||
if( footprintName.IsEmpty() )
|
m_NoteBook->SetSelection( 0 );
|
||||||
msg = _( "Footprint must have a name." );
|
|
||||||
else
|
|
||||||
msg.Printf( _( "Footprint name may not contain \"%s\"." ),
|
|
||||||
MODULE::StringLibNameInvalidChars( true ) );
|
|
||||||
|
|
||||||
DisplayError( nullptr, msg );
|
m_delayedFocusCtrl = m_FootprintNameCtrl;
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
m_FootprintNameCtrl->SetFocus();
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -607,6 +630,59 @@ bool DIALOG_FOOTPRINT_FP_EDITOR::TransferDataFromWindow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool footprintIsFromBoard( MODULE* aFootprint )
|
||||||
|
{
|
||||||
|
return aFootprint->GetLink() != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_FOOTPRINT_FP_EDITOR::OnGridCellChanging( wxGridEvent& event )
|
||||||
|
{
|
||||||
|
if( event.GetRow() == 1 && event.GetCol() == TMC_TEXT )
|
||||||
|
{
|
||||||
|
if( !checkFootprintName( event.GetString() ) )
|
||||||
|
{
|
||||||
|
event.Veto();
|
||||||
|
|
||||||
|
if( m_NoteBook->GetSelection() != 0 )
|
||||||
|
m_NoteBook->SetSelection( 0 );
|
||||||
|
|
||||||
|
m_delayedFocusGrid = m_itemsGrid;
|
||||||
|
m_delayedFocusRow = event.GetRow();
|
||||||
|
m_delayedFocusColumn = event.GetCol();
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
|
}
|
||||||
|
else if( !footprintIsFromBoard( m_footprint ) )
|
||||||
|
{
|
||||||
|
// Keep Name and Value of footprints in library in sync
|
||||||
|
m_FootprintNameCtrl->ChangeValue( event.GetString() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_FOOTPRINT_FP_EDITOR::OnFootprintNameText( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
if( !footprintIsFromBoard( m_footprint ) )
|
||||||
|
{
|
||||||
|
// Keep Name and Value of footprints in library in sync
|
||||||
|
m_itemsGrid->SetCellValue( 1, TMC_TEXT, m_FootprintNameCtrl->GetValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_FOOTPRINT_FP_EDITOR::OnFootprintNameKillFocus( wxFocusEvent& event )
|
||||||
|
{
|
||||||
|
if( !m_delayedFocusCtrl && !checkFootprintName( m_FootprintNameCtrl->GetValue() ) )
|
||||||
|
{
|
||||||
|
m_delayedFocusCtrl = m_FootprintNameCtrl;
|
||||||
|
m_delayedFocusPage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_FOOTPRINT_FP_EDITOR::OnAddField( wxCommandEvent& event )
|
void DIALOG_FOOTPRINT_FP_EDITOR::OnAddField( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
if( !m_itemsGrid->CommitPendingChanges() )
|
if( !m_itemsGrid->CommitPendingChanges() )
|
||||||
|
@ -698,23 +774,52 @@ void DIALOG_FOOTPRINT_FP_EDITOR::OnUpdateUI( wxUpdateUIEvent& event )
|
||||||
if( !m_itemsGrid->IsCellEditControlShown() && !m_modelsGrid->IsCellEditControlShown() )
|
if( !m_itemsGrid->IsCellEditControlShown() && !m_modelsGrid->IsCellEditControlShown() )
|
||||||
adjustGridColumns( m_itemsGrid->GetRect().GetWidth());
|
adjustGridColumns( m_itemsGrid->GetRect().GetWidth());
|
||||||
|
|
||||||
// Handle a grid error. This is delayed to OnUpdateUI so that we can change focus
|
if( m_itemsGrid->IsCellEditControlShown() )
|
||||||
// even when the original validation was triggered from a killFocus event, and so
|
|
||||||
// that the corresponding notebook page can be shown in the background when triggered
|
|
||||||
// from an OK.
|
|
||||||
if( m_delayedFocusRow >= 0 )
|
|
||||||
{
|
{
|
||||||
if( !m_delayedErrorMessage.IsEmpty() )
|
int row = m_itemsGrid->GetGridCursorRow();
|
||||||
|
int col = m_itemsGrid->GetGridCursorCol();
|
||||||
|
|
||||||
|
if( row == 1 && col == TMC_TEXT )
|
||||||
{
|
{
|
||||||
// We will re-enter this routine when the error dialog is displayed, so make
|
wxGridCellEditor* editor = m_itemsGrid->GetCellEditor( row, col );
|
||||||
// sure we don't keep putting up more dialogs.
|
m_FootprintNameCtrl->ChangeValue( editor->GetValue() );
|
||||||
wxString msg = m_delayedErrorMessage;
|
editor->DecRef();
|
||||||
m_delayedErrorMessage = wxEmptyString;
|
|
||||||
|
|
||||||
// Do not use DisplayErrorMessage(); it screws up window order on Mac
|
|
||||||
DisplayError( nullptr, msg );
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle a delayed focus. The delay allows us to:
|
||||||
|
// a) change focus when the error was triggered from within a killFocus handler
|
||||||
|
// b) show the correct notebook page in the background before the error dialog comes up
|
||||||
|
// when triggered from an OK or a notebook page change
|
||||||
|
|
||||||
|
if( m_delayedFocusPage >= 0 && m_NoteBook->GetSelection() != m_delayedFocusPage )
|
||||||
|
{
|
||||||
|
m_NoteBook->SetSelection( (unsigned) m_delayedFocusPage );
|
||||||
|
m_delayedFocusPage = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !m_delayedErrorMessage.IsEmpty() )
|
||||||
|
{
|
||||||
|
// We will re-enter this routine when the error dialog is displayed, so make
|
||||||
|
// sure we don't keep putting up more dialogs.
|
||||||
|
wxString msg = m_delayedErrorMessage;
|
||||||
|
m_delayedErrorMessage = wxEmptyString;
|
||||||
|
|
||||||
|
// Do not use DisplayErrorMessage(); it screws up window order on Mac
|
||||||
|
DisplayError( nullptr, msg );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_delayedFocusCtrl )
|
||||||
|
{
|
||||||
|
m_delayedFocusCtrl->SetFocus();
|
||||||
|
|
||||||
|
if( dynamic_cast<wxTextEntry*>( m_delayedFocusCtrl ) )
|
||||||
|
dynamic_cast<wxTextEntry*>( m_delayedFocusCtrl )->SelectAll();
|
||||||
|
|
||||||
|
m_delayedFocusCtrl = nullptr;
|
||||||
|
}
|
||||||
|
else if( m_delayedFocusGrid )
|
||||||
|
{
|
||||||
m_delayedFocusGrid->SetFocus();
|
m_delayedFocusGrid->SetFocus();
|
||||||
m_delayedFocusGrid->MakeCellVisible( m_delayedFocusRow, m_delayedFocusColumn );
|
m_delayedFocusGrid->MakeCellVisible( m_delayedFocusRow, m_delayedFocusColumn );
|
||||||
m_delayedFocusGrid->SetGridCursor( m_delayedFocusRow, m_delayedFocusColumn );
|
m_delayedFocusGrid->SetGridCursor( m_delayedFocusRow, m_delayedFocusColumn );
|
||||||
|
@ -722,6 +827,7 @@ void DIALOG_FOOTPRINT_FP_EDITOR::OnUpdateUI( wxUpdateUIEvent& event )
|
||||||
m_delayedFocusGrid->EnableCellEditControl( true );
|
m_delayedFocusGrid->EnableCellEditControl( true );
|
||||||
m_delayedFocusGrid->ShowCellEditControl();
|
m_delayedFocusGrid->ShowCellEditControl();
|
||||||
|
|
||||||
|
m_delayedFocusGrid = nullptr;
|
||||||
m_delayedFocusRow = -1;
|
m_delayedFocusRow = -1;
|
||||||
m_delayedFocusColumn = -1;
|
m_delayedFocusColumn = -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,14 +25,16 @@
|
||||||
#ifndef DIALOG_EDIT_FOOTPRINT_FOR_MODEDIT_H
|
#ifndef DIALOG_EDIT_FOOTPRINT_FOR_MODEDIT_H
|
||||||
#define DIALOG_EDIT_FOOTPRINT_FOR_MODEDIT_H
|
#define DIALOG_EDIT_FOOTPRINT_FOR_MODEDIT_H
|
||||||
|
|
||||||
// Include the wxFormBuider header base:
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <dialog_edit_footprint_for_fp_editor_base.h>
|
|
||||||
#include <text_mod_grid_table.h>
|
#include <text_mod_grid_table.h>
|
||||||
#include <widgets/unit_binder.h>
|
#include <widgets/unit_binder.h>
|
||||||
|
#include <class_module.h>
|
||||||
|
#include <dialog_edit_footprint_for_fp_editor_base.h>
|
||||||
|
|
||||||
|
|
||||||
class PANEL_PREV_3D;
|
class PANEL_PREV_3D;
|
||||||
class MODULE;
|
class FOOTPRINT_EDIT_FRAME;
|
||||||
|
|
||||||
|
|
||||||
class DIALOG_FOOTPRINT_FP_EDITOR : public DIALOG_FOOTPRINT_FP_EDITOR_BASE
|
class DIALOG_FOOTPRINT_FP_EDITOR : public DIALOG_FOOTPRINT_FP_EDITOR_BASE
|
||||||
{
|
{
|
||||||
|
@ -52,15 +54,17 @@ private:
|
||||||
std::vector<MODULE_3D_SETTINGS> m_shapes3D_list;
|
std::vector<MODULE_3D_SETTINGS> m_shapes3D_list;
|
||||||
PANEL_PREV_3D* m_PreviewPane;
|
PANEL_PREV_3D* m_PreviewPane;
|
||||||
|
|
||||||
wxString m_delayedErrorMessage;
|
wxControl* m_delayedFocusCtrl;
|
||||||
wxGrid* m_delayedFocusGrid;
|
int m_delayedFocusPage;
|
||||||
|
|
||||||
|
WX_GRID* m_delayedFocusGrid;
|
||||||
int m_delayedFocusRow;
|
int m_delayedFocusRow;
|
||||||
int m_delayedFocusColumn;
|
int m_delayedFocusColumn;
|
||||||
|
wxString m_delayedErrorMessage;
|
||||||
|
|
||||||
bool m_inSelect;
|
bool m_inSelect;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructor and destructor
|
// Constructor and destructor
|
||||||
DIALOG_FOOTPRINT_FP_EDITOR( FOOTPRINT_EDIT_FRAME* aParent, MODULE* aModule );
|
DIALOG_FOOTPRINT_FP_EDITOR( FOOTPRINT_EDIT_FRAME* aParent, MODULE* aModule );
|
||||||
~DIALOG_FOOTPRINT_FP_EDITOR() override;
|
~DIALOG_FOOTPRINT_FP_EDITOR() override;
|
||||||
|
@ -79,10 +83,15 @@ private:
|
||||||
void OnAdd3DRow( wxCommandEvent& event ) override;
|
void OnAdd3DRow( wxCommandEvent& event ) override;
|
||||||
void Cfg3DPath( wxCommandEvent& event ) override;
|
void Cfg3DPath( wxCommandEvent& event ) override;
|
||||||
void OnGridSize( wxSizeEvent& event ) override;
|
void OnGridSize( wxSizeEvent& event ) override;
|
||||||
|
void OnFootprintNameKillFocus( wxFocusEvent& event ) override;
|
||||||
|
void OnFootprintNameText( wxCommandEvent& event ) override;
|
||||||
|
void OnGridCellChanging( wxGridEvent& event );
|
||||||
void OnAddField( wxCommandEvent& event ) override;
|
void OnAddField( wxCommandEvent& event ) override;
|
||||||
void OnDeleteField( wxCommandEvent& event ) override;
|
void OnDeleteField( wxCommandEvent& event ) override;
|
||||||
void OnUpdateUI( wxUpdateUIEvent& event ) override;
|
void OnUpdateUI( wxUpdateUIEvent& event ) override;
|
||||||
|
|
||||||
|
bool checkFootprintName( const wxString& aFootprintName );
|
||||||
|
|
||||||
void select3DModel( int aModelIdx );
|
void select3DModel( int aModelIdx );
|
||||||
|
|
||||||
void adjustGridColumns( int aWidth );
|
void adjustGridColumns( int aWidth );
|
||||||
|
|
|
@ -26,7 +26,7 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_FP_EDITOR_BASE( wxWindow* pare
|
||||||
wxStaticBoxSizer* sbSizerTexts;
|
wxStaticBoxSizer* sbSizerTexts;
|
||||||
sbSizerTexts = new wxStaticBoxSizer( new wxStaticBox( m_PanelGeneral, wxID_ANY, wxEmptyString ), wxVERTICAL );
|
sbSizerTexts = new wxStaticBoxSizer( new wxStaticBox( m_PanelGeneral, wxID_ANY, wxEmptyString ), wxVERTICAL );
|
||||||
|
|
||||||
m_itemsGrid = new WX_GRID( sbSizerTexts->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxSIMPLE_BORDER );
|
m_itemsGrid = new WX_GRID( sbSizerTexts->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 );
|
||||||
|
|
||||||
// Grid
|
// Grid
|
||||||
m_itemsGrid->CreateGrid( 2, 11 );
|
m_itemsGrid->CreateGrid( 2, 11 );
|
||||||
|
@ -409,6 +409,8 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_FP_EDITOR_BASE( wxWindow* pare
|
||||||
m_itemsGrid->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
m_itemsGrid->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
||||||
m_bpAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
m_bpAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
||||||
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
||||||
|
m_FootprintNameCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameKillFocus ), NULL, this );
|
||||||
|
m_FootprintNameCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameText ), NULL, this );
|
||||||
m_modelsGrid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
m_modelsGrid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
||||||
m_modelsGrid->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
m_modelsGrid->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
||||||
m_button3DShapeAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAdd3DRow ), NULL, this );
|
m_button3DShapeAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAdd3DRow ), NULL, this );
|
||||||
|
@ -425,6 +427,8 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::~DIALOG_FOOTPRINT_FP_EDITOR_BASE()
|
||||||
m_itemsGrid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
m_itemsGrid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
||||||
m_bpAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
m_bpAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
||||||
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
||||||
|
m_FootprintNameCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameKillFocus ), NULL, this );
|
||||||
|
m_FootprintNameCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameText ), NULL, this );
|
||||||
m_modelsGrid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
m_modelsGrid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
||||||
m_modelsGrid->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
m_modelsGrid->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
||||||
m_button3DShapeAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAdd3DRow ), NULL, this );
|
m_button3DShapeAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAdd3DRow ), NULL, this );
|
||||||
|
|
|
@ -356,7 +356,7 @@
|
||||||
<property name="tooltip"></property>
|
<property name="tooltip"></property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style">wxSIMPLE_BORDER</property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
|
@ -789,7 +789,7 @@
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
<event name="OnKeyUp"></event>
|
<event name="OnKeyUp"></event>
|
||||||
<event name="OnKillFocus"></event>
|
<event name="OnKillFocus">OnFootprintNameKillFocus</event>
|
||||||
<event name="OnLeaveWindow"></event>
|
<event name="OnLeaveWindow"></event>
|
||||||
<event name="OnLeftDClick"></event>
|
<event name="OnLeftDClick"></event>
|
||||||
<event name="OnLeftDown"></event>
|
<event name="OnLeftDown"></event>
|
||||||
|
@ -806,7 +806,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnFootprintNameText</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
|
|
@ -105,6 +105,8 @@ class DIALOG_FOOTPRINT_FP_EDITOR_BASE : public DIALOG_SHIM
|
||||||
virtual void OnGridSize( wxSizeEvent& event ) { event.Skip(); }
|
virtual void OnGridSize( wxSizeEvent& event ) { event.Skip(); }
|
||||||
virtual void OnAddField( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnAddField( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnFootprintNameKillFocus( wxFocusEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnFootprintNameText( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void On3DModelCellChanged( wxGridEvent& event ) { event.Skip(); }
|
virtual void On3DModelCellChanged( wxGridEvent& event ) { event.Skip(); }
|
||||||
virtual void On3DModelSelected( wxGridEvent& event ) { event.Skip(); }
|
virtual void On3DModelSelected( wxGridEvent& event ) { event.Skip(); }
|
||||||
virtual void OnAdd3DRow( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnAdd3DRow( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
|
@ -410,7 +410,7 @@ public:
|
||||||
* Function DeleteModuleFromLibrary
|
* Function DeleteModuleFromLibrary
|
||||||
* deletes the given module from its library.
|
* deletes the given module from its library.
|
||||||
*/
|
*/
|
||||||
bool DeleteModuleFromLibrary( MODULE* aModule );
|
bool DeleteModuleFromLibrary( const LIB_ID& aFPID, bool aConfirm );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function IsElementVisible
|
* Function IsElementVisible
|
||||||
|
@ -550,6 +550,11 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the Footprint Properties dialog and handle changes made in it.
|
||||||
|
*/
|
||||||
|
void editFootprintProperties( MODULE* aFootprint );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function moveExact
|
* Function moveExact
|
||||||
* Move the selected item exactly, popping up a dialog to allow the
|
* Move the selected item exactly, popping up a dialog to allow the
|
||||||
|
|
|
@ -524,13 +524,9 @@ void FOOTPRINT_EDIT_FRAME::OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PCB_MODULE_T:
|
case PCB_MODULE_T:
|
||||||
{
|
editFootprintProperties( (MODULE*) aItem );
|
||||||
DIALOG_FOOTPRINT_FP_EDITOR dialog( this, static_cast<MODULE*>( aItem ) );
|
|
||||||
dialog.ShowModal();
|
|
||||||
GetScreen()->GetCurItem()->ClearFlags();
|
|
||||||
m_canvas->MoveCursorToCrossHair();
|
m_canvas->MoveCursorToCrossHair();
|
||||||
m_canvas->Refresh();
|
m_canvas->Refresh();
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PCB_MODULE_TEXT_T:
|
case PCB_MODULE_TEXT_T:
|
||||||
|
|
|
@ -276,7 +276,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_MODEDIT_DELETE_PART:
|
case ID_MODEDIT_DELETE_PART:
|
||||||
if( DeleteModuleFromLibrary( LoadFootprint( getTargetFPId() ) ) )
|
if( DeleteModuleFromLibrary( getTargetFPId(), true ) )
|
||||||
{
|
{
|
||||||
if( getTargetFPId() == GetCurrentFPId() )
|
if( getTargetFPId() == GetCurrentFPId() )
|
||||||
Clear_Pcb( false );
|
Clear_Pcb( false );
|
||||||
|
@ -556,11 +556,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
if( GetBoard()->m_Modules )
|
if( GetBoard()->m_Modules )
|
||||||
{
|
{
|
||||||
SetCurItem( GetBoard()->m_Modules );
|
SetCurItem( GetBoard()->m_Modules );
|
||||||
|
editFootprintProperties( (MODULE*) GetScreen()->GetCurItem() );
|
||||||
DIALOG_FOOTPRINT_FP_EDITOR dialog( this, (MODULE*) GetScreen()->GetCurItem() );
|
|
||||||
|
|
||||||
dialog.ShowModal();
|
|
||||||
GetScreen()->GetCurItem()->ClearFlags();
|
|
||||||
|
|
||||||
m_canvas->Refresh();
|
m_canvas->Refresh();
|
||||||
}
|
}
|
||||||
|
@ -585,13 +581,9 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_PCB_EDIT_MODULE_PRMS:
|
case ID_POPUP_PCB_EDIT_MODULE_PRMS:
|
||||||
{
|
editFootprintProperties( (MODULE*) GetScreen()->GetCurItem() );
|
||||||
DIALOG_FOOTPRINT_FP_EDITOR dialog( this, (MODULE*) GetScreen()->GetCurItem() );
|
m_canvas->MoveCursorToCrossHair();
|
||||||
dialog.ShowModal();
|
m_canvas->Refresh();
|
||||||
GetScreen()->GetCurItem()->ClearFlags();
|
|
||||||
m_canvas->MoveCursorToCrossHair();
|
|
||||||
m_canvas->Refresh();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_PCB_MOVE_PAD_REQUEST:
|
case ID_POPUP_PCB_MOVE_PAD_REQUEST:
|
||||||
|
@ -775,6 +767,32 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FOOTPRINT_EDIT_FRAME::editFootprintProperties( MODULE* aModule )
|
||||||
|
{
|
||||||
|
LIB_ID oldFPID = aModule->GetFPID();
|
||||||
|
|
||||||
|
DIALOG_FOOTPRINT_FP_EDITOR dialog( this, aModule );
|
||||||
|
dialog.ShowModal();
|
||||||
|
|
||||||
|
if( aModule->GetValue() != oldFPID.GetLibItemName() )
|
||||||
|
{
|
||||||
|
if( aModule->GetLink() )
|
||||||
|
{
|
||||||
|
SaveFootprintToBoard( false );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeleteModuleFromLibrary( oldFPID, false );
|
||||||
|
|
||||||
|
SaveFootprint( aModule );
|
||||||
|
SyncLibraryTree( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GetScreen()->GetCurItem()->ClearFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void FOOTPRINT_EDIT_FRAME::moveExact()
|
void FOOTPRINT_EDIT_FRAME::moveExact()
|
||||||
{
|
{
|
||||||
wxPoint translation;
|
wxPoint translation;
|
||||||
|
|
|
@ -524,18 +524,13 @@ wxString PCB_BASE_EDIT_FRAME::CreateNewLibrary(const wxString& aLibName )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary( MODULE* aModule )
|
bool FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary( const LIB_ID& aFPID, bool aConfirm )
|
||||||
{
|
{
|
||||||
if( !aModule )
|
if( !aFPID.IsValid() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
LIB_ID fpid = aModule->GetFPID();
|
wxString nickname = aFPID.GetLibNickname();
|
||||||
|
wxString fpname = aFPID.GetLibItemName();
|
||||||
if( !fpid.IsValid() )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
wxString nickname = fpid.GetLibNickname();
|
|
||||||
wxString fpname = fpid.GetLibItemName();
|
|
||||||
|
|
||||||
// Legacy libraries are readable, but modifying legacy format is not allowed
|
// Legacy libraries are readable, but modifying legacy format is not allowed
|
||||||
// So prompt the user if he try to delete a footprint from a legacy lib
|
// So prompt the user if he try to delete a footprint from a legacy lib
|
||||||
|
@ -557,7 +552,7 @@ bool FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary( MODULE* aModule )
|
||||||
// Confirmation
|
// Confirmation
|
||||||
wxString msg = wxString::Format( FMT_OK_DELETE, fpname.GetData(), nickname.GetData() );
|
wxString msg = wxString::Format( FMT_OK_DELETE, fpname.GetData(), nickname.GetData() );
|
||||||
|
|
||||||
if( !IsOK( this, msg ) )
|
if( aConfirm && !IsOK( this, msg ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|
|
@ -186,6 +186,10 @@ bool FP_TREE_SYNCHRONIZING_ADAPTER::GetAttr( wxDataViewItem const& aItem, unsign
|
||||||
if( aCol != 0 )
|
if( aCol != 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// don't link to a board footprint, even if the FPIDs match
|
||||||
|
if( m_frame->IsCurrentFPFromBoard() )
|
||||||
|
return false;
|
||||||
|
|
||||||
auto node = ToNode( aItem );
|
auto node = ToNode( aItem );
|
||||||
wxCHECK( node, false );
|
wxCHECK( node, false );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue