From 29c8f92c277f472dfa276dffaf6fb32344eaaad3 Mon Sep 17 00:00:00 2001 From: John Beard Date: Wed, 20 Feb 2019 23:20:06 +0000 Subject: [PATCH] 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. --- .../dialogs/dialog_edit_component_in_lib.h | 7 +- .../dialog_edit_component_in_schematic.cpp | 118 ++++-------------- .../dialog_edit_component_in_schematic.h | 85 +++++++++++++ eeschema/edit_component_in_schematic.cpp | 31 ++++- 4 files changed, 141 insertions(+), 100 deletions(-) create mode 100644 eeschema/dialogs/dialog_edit_component_in_schematic.h diff --git a/eeschema/dialogs/dialog_edit_component_in_lib.h b/eeschema/dialogs/dialog_edit_component_in_lib.h index 8c698eea13..9b9efbf2b1 100644 --- a/eeschema/dialogs/dialog_edit_component_in_lib.h +++ b/eeschema/dialogs/dialog_edit_component_in_lib.h @@ -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_ diff --git a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp index 6681ee89a6..4bbf922587 100644 --- a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp +++ b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp @@ -21,23 +21,25 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include #include -#include -#include -#include + #include -#include #include +#include #include +#include + #include -#include + #include -#include #include - -#include #include +#include +#include +#include +#include #ifdef KICAD_SPICE #include @@ -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( 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* 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( 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(); +} \ No newline at end of file diff --git a/eeschema/dialogs/dialog_edit_component_in_schematic.h b/eeschema/dialogs/dialog_edit_component_in_schematic.h new file mode 100644 index 0000000000..6943e564db --- /dev/null +++ b/eeschema/dialogs/dialog_edit_component_in_schematic.h @@ -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 + +#include + + +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* 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_ diff --git a/eeschema/edit_component_in_schematic.cpp b/eeschema/edit_component_in_schematic.cpp index 29f409977e..7e4c7fda98 100644 --- a/eeschema/edit_component_in_schematic.cpp +++ b/eeschema/edit_component_in_schematic.cpp @@ -40,7 +40,8 @@ #include #include -#include +#include +#include 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(); + } +} \ No newline at end of file