Eeschema: move EDIT_COMPONENT_IN_SCHEMATIC to own header

Move the class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC to its own
header, and move the SCH_EDIT_FRAME::EditComponent out of the
dialog implementation file. Thus, users of the dialog are
coupled only by the dialog header, as usual.

Also tidy some includes and comments.
This commit is contained in:
John Beard 2019-02-20 23:20:06 +00:00
parent 75406e2742
commit 29c8f92c27
4 changed files with 146 additions and 105 deletions

View File

@ -1,7 +1,3 @@
/**
* @file dialog_edit_component_in_lib.h
*/
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
@ -107,5 +103,4 @@ private:
void adjustAliasGridColumns( int aWidth );
};
#endif
// _DIALOG_EDIT_COMPONENT_IN_LIB_H_
#endif // _DIALOG_EDIT_COMPONENT_IN_LIB_H_

View File

@ -21,23 +21,25 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <dialogs/dialog_edit_component_in_schematic.h>
#include <wx/tooltip.h>
#include <pgm_base.h>
#include <kiface_i.h>
#include <sch_draw_panel.h>
#include <confirm.h>
#include <sch_edit_frame.h>
#include <grid_tricks.h>
#include <menus_helpers.h>
#include <widgets/wx_grid.h>
#include <sch_reference_list.h>
#include <class_library.h>
#include <symbol_lib_table.h>
#include <fields_grid_table.h>
#include <dialog_edit_component_in_schematic_base.h>
#include <confirm.h>
#include <grid_tricks.h>
#include <kiface_i.h>
#include <menus_helpers.h>
#include <pgm_base.h>
#include <widgets/wx_grid.h>
#include <class_library.h>
#include <fields_grid_table.h>
#include <invoke_sch_dialog.h>
#include <sch_draw_panel.h>
#include <sch_edit_frame.h>
#include <sch_reference_list.h>
#include <symbol_lib_table.h>
#ifdef KICAD_SPICE
#include <dialog_spice_model.h>
@ -45,94 +47,9 @@
#endif /* KICAD_SPICE */
#define SymbolFieldsShownColumnsKey wxT( "SymbolFieldsShownColumns" )
/**
* Dialog used to edit #SCH_COMPONENT objects in a schematic.
*
* This is derived from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE which is maintained by
* wxFormBuilder. Do not auto-generate this class or file, it is hand coded.
*/
class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC : public DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE
{
public:
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( SCH_EDIT_FRAME* aParent, SCH_COMPONENT* aComponent );
~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC() override;
SCH_EDIT_FRAME* GetParent() { return dynamic_cast<SCH_EDIT_FRAME*>( wxDialog::GetParent() ); }
private:
wxConfigBase* m_config;
SCH_COMPONENT* m_cmp;
LIB_PART* m_part;
int m_delayedFocusRow;
int m_delayedFocusColumn;
wxString m_shownColumns;
FIELDS_GRID_TABLE<SCH_FIELD>* m_fields;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
bool Validate() override;
// event handlers
void UpdateFieldsFromLibrary( wxCommandEvent& event ) override;
void OnAddField( wxCommandEvent& event ) override;
void OnDeleteField( wxCommandEvent& event ) override;
void OnMoveUp( wxCommandEvent& event ) override;
void OnMoveDown( wxCommandEvent& event ) override;
void OnBrowseLibrary( wxCommandEvent& event ) override;
void OnEditSpiceModel( wxCommandEvent& event ) override;
void OnSizeGrid( wxSizeEvent& event ) override;
void OnGridCellChanging( wxGridEvent& event );
void OnUpdateUI( wxUpdateUIEvent& event ) override;
void OnCancelButtonClick( wxCommandEvent& event ) override;
void OnInitDlg( wxInitDialogEvent& event ) override
{
TransferDataToWindow();
// Now all widgets have the size fixed, call FinishDialogSettings
FinishDialogSettings();
}
void AdjustGridColumns( int aWidth );
};
void SCH_EDIT_FRAME::EditComponent( SCH_COMPONENT* aComponent )
{
wxCHECK_RET( aComponent != nullptr && aComponent->Type() == SCH_COMPONENT_T,
wxT( "Invalid component object pointer. Bad Programmer!" ) );
m_canvas->SetIgnoreMouseEvents( true );
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC dlg( this, aComponent );
// This dialog itself subsequently can invoke a KIWAY_PLAYER as a quasimodal
// frame. Therefore this dialog as a modal frame parent, MUST be run under
// quasimodal mode for the quasimodal frame support to work. So don't use
// the QUASIMODAL macros here.
int ret = dlg.ShowQuasiModal();
m_canvas->SetIgnoreMouseEvents( false );
m_canvas->MoveCursorToCrossHair();
if( ret == wxID_OK )
{
if( m_autoplaceFields )
aComponent->AutoAutoplaceFields( GetScreen() );
GetCanvas()->Refresh();
}
}
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( SCH_EDIT_FRAME* aParent,
SCH_COMPONENT* aComponent ) :
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE( aParent )
@ -199,6 +116,12 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC()
}
SCH_EDIT_FRAME* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::GetParent()
{
return dynamic_cast<SCH_EDIT_FRAME*>( wxDialog::GetParent() );
}
bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataToWindow()
{
if( !wxDialog::TransferDataToWindow() )
@ -760,3 +683,12 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnSizeGrid( wxSizeEvent& event )
event.Skip();
}
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnInitDlg( wxInitDialogEvent& event )
{
TransferDataToWindow();
// Now all widgets have the size fixed, call FinishDialogSettings
FinishDialogSettings();
}

View File

@ -0,0 +1,85 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 1992-2019 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
*/
#ifndef _DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_H_
#define _DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_H_
#include <dialog_edit_component_in_schematic_base.h>
#include <fields_grid_table.h>
class SCH_EDIT_FRAME;
class LIB_PART;
/**
* Dialog used to edit #SCH_COMPONENT objects in a schematic.
*
* This is derived from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE which is maintained by
* wxFormBuilder.
*/
class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC : public DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE
{
public:
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( SCH_EDIT_FRAME* aParent, SCH_COMPONENT* aComponent );
~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC() override;
SCH_EDIT_FRAME* GetParent();
private:
wxConfigBase* m_config;
SCH_COMPONENT* m_cmp;
LIB_PART* m_part;
int m_delayedFocusRow;
int m_delayedFocusColumn;
wxString m_shownColumns;
FIELDS_GRID_TABLE<SCH_FIELD>* m_fields;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
bool Validate() override;
// event handlers
void UpdateFieldsFromLibrary( wxCommandEvent& event ) override;
void OnAddField( wxCommandEvent& event ) override;
void OnDeleteField( wxCommandEvent& event ) override;
void OnMoveUp( wxCommandEvent& event ) override;
void OnMoveDown( wxCommandEvent& event ) override;
void OnBrowseLibrary( wxCommandEvent& event ) override;
void OnEditSpiceModel( wxCommandEvent& event ) override;
void OnSizeGrid( wxSizeEvent& event ) override;
void OnGridCellChanging( wxGridEvent& event );
void OnUpdateUI( wxUpdateUIEvent& event ) override;
void OnCancelButtonClick( wxCommandEvent& event ) override;
void OnInitDlg( wxInitDialogEvent& event ) override;
void AdjustGridColumns( int aWidth );
};
#endif // _DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_H_

View File

@ -40,7 +40,8 @@
#include <sch_component.h>
#include <symbol_lib_table.h>
#include <dialog_edit_one_field.h>
#include <dialogs/dialog_edit_component_in_schematic.h>
#include <dialogs/dialog_edit_one_field.h>
void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField )
@ -113,3 +114,31 @@ void SCH_EDIT_FRAME::RotateField( SCH_FIELD* aField )
RefreshItem( aField );
OnModify();
}
void SCH_EDIT_FRAME::EditComponent( SCH_COMPONENT* aComponent )
{
wxCHECK_RET( aComponent != nullptr && aComponent->Type() == SCH_COMPONENT_T,
wxT( "Invalid component object pointer. Bad Programmer!" ) );
m_canvas->SetIgnoreMouseEvents( true );
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC dlg( this, aComponent );
// This dialog itself subsequently can invoke a KIWAY_PLAYER as a quasimodal
// frame. Therefore this dialog as a modal frame parent, MUST be run under
// quasimodal mode for the quasimodal frame support to work. So don't use
// the QUASIMODAL macros here.
int ret = dlg.ShowQuasiModal();
m_canvas->SetIgnoreMouseEvents( false );
m_canvas->MoveCursorToCrossHair();
if( ret == wxID_OK )
{
if( m_autoplaceFields )
aComponent->AutoAutoplaceFields( GetScreen() );
GetCanvas()->Refresh();
}
}