mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
groups: dialog needs shared_ptr for lifetime issues
Tool resets were deleting the commit out from under us.
This commit is contained in:
parent
9ca881112b
commit
71f71641c2
@ -32,9 +32,8 @@
|
||||
#include <dialogs/dialog_group_properties.h>
|
||||
|
||||
|
||||
DIALOG_GROUP_PROPERTIES::DIALOG_GROUP_PROPERTIES( EDA_DRAW_FRAME* aParent,
|
||||
EDA_GROUP* aGroup,
|
||||
COMMIT& aCommit ) :
|
||||
DIALOG_GROUP_PROPERTIES::DIALOG_GROUP_PROPERTIES( EDA_DRAW_FRAME* aParent, EDA_GROUP* aGroup,
|
||||
const std::shared_ptr<COMMIT>& aCommit ) :
|
||||
DIALOG_GROUP_PROPERTIES_BASE( aParent ),
|
||||
m_frame( aParent ),
|
||||
m_toolMgr( aParent->GetToolManager() ),
|
||||
@ -82,7 +81,7 @@ bool DIALOG_GROUP_PROPERTIES::TransferDataToWindow()
|
||||
|
||||
bool DIALOG_GROUP_PROPERTIES::TransferDataFromWindow()
|
||||
{
|
||||
m_commit.Modify( m_group->AsEdaItem(), m_frame->GetScreen() );
|
||||
m_commit->Modify( m_group->AsEdaItem(), m_frame->GetScreen() );
|
||||
|
||||
for( size_t ii = 0; ii < m_membersList->GetCount(); ++ii )
|
||||
{
|
||||
@ -91,10 +90,10 @@ bool DIALOG_GROUP_PROPERTIES::TransferDataFromWindow()
|
||||
|
||||
if( existingGroup != m_group )
|
||||
{
|
||||
m_commit.Modify( item, m_frame->GetScreen() );
|
||||
m_commit->Modify( item, m_frame->GetScreen() );
|
||||
|
||||
if( existingGroup )
|
||||
m_commit.Modify( existingGroup->AsEdaItem(), m_frame->GetScreen() );
|
||||
m_commit->Modify( existingGroup->AsEdaItem(), m_frame->GetScreen() );
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,7 +111,7 @@ bool DIALOG_GROUP_PROPERTIES::TransferDataFromWindow()
|
||||
|
||||
m_toolMgr->RunAction<EDA_ITEM*>( ACTIONS::selectItem, m_group->AsEdaItem() );
|
||||
|
||||
m_commit.Push( _( "Edit Group Properties" ) );
|
||||
m_commit->Push( _( "Edit Group Properties" ) );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#ifndef DIALOG_GROUP_PROPERTIES_H
|
||||
#define DIALOG_GROUP_PROPERTIES_H
|
||||
|
||||
#include <memory>
|
||||
#include <dialogs/dialog_group_properties_base.h>
|
||||
|
||||
class EDA_DRAW_FRAME;
|
||||
@ -37,7 +38,7 @@ class BASE_SCREEN;
|
||||
class DIALOG_GROUP_PROPERTIES : public DIALOG_GROUP_PROPERTIES_BASE
|
||||
{
|
||||
public:
|
||||
DIALOG_GROUP_PROPERTIES( EDA_DRAW_FRAME* aParent, EDA_GROUP* aTarget, COMMIT& aCommit );
|
||||
DIALOG_GROUP_PROPERTIES( EDA_DRAW_FRAME* aParent, EDA_GROUP* aTarget, const std::shared_ptr<COMMIT>& aCommit );
|
||||
~DIALOG_GROUP_PROPERTIES() override;
|
||||
|
||||
void OnMemberSelected( wxCommandEvent& event ) override;
|
||||
@ -53,7 +54,7 @@ private:
|
||||
EDA_DRAW_FRAME* m_frame;
|
||||
TOOL_MANAGER* m_toolMgr;
|
||||
EDA_GROUP* m_group;
|
||||
COMMIT& m_commit;
|
||||
std::shared_ptr<COMMIT> m_commit;
|
||||
};
|
||||
|
||||
#endif // DIALOG_GROUP_PROPERTIES_H
|
||||
|
@ -128,7 +128,7 @@ int GROUP_TOOL::GroupProperties( const TOOL_EVENT& aEvent )
|
||||
if( m_propertiesDialog )
|
||||
m_propertiesDialog->Destroy();
|
||||
|
||||
m_propertiesDialog = new DIALOG_GROUP_PROPERTIES( m_frame, group, *m_commit );
|
||||
m_propertiesDialog = new DIALOG_GROUP_PROPERTIES( m_frame, group, m_commit );
|
||||
|
||||
m_propertiesDialog->Show( true );
|
||||
|
||||
|
@ -66,12 +66,12 @@ protected:
|
||||
void setTransitions() override;
|
||||
|
||||
///< Subclasses implement to provide correct *_COMMIT object type
|
||||
virtual std::unique_ptr<COMMIT> createCommit() = 0;
|
||||
virtual std::shared_ptr<COMMIT> createCommit() = 0;
|
||||
|
||||
EDA_DRAW_FRAME* m_frame = nullptr;
|
||||
DIALOG_GROUP_PROPERTIES* m_propertiesDialog = nullptr;
|
||||
SELECTION_TOOL* m_selectionTool = nullptr;
|
||||
std::unique_ptr<COMMIT> m_commit = nullptr;
|
||||
std::shared_ptr<COMMIT> m_commit;
|
||||
bool m_isFootprintEditor = false;
|
||||
};
|
||||
|
||||
|
@ -13,5 +13,5 @@ public:
|
||||
int Group( const TOOL_EVENT& aEvent ) override;
|
||||
|
||||
protected:
|
||||
std::unique_ptr<COMMIT> createCommit() override { return std::make_unique<SCH_COMMIT>( m_toolMgr ); }
|
||||
std::shared_ptr<COMMIT> createCommit() override { return std::make_shared<SCH_COMMIT>( m_toolMgr ); }
|
||||
};
|
||||
|
@ -13,5 +13,5 @@ public:
|
||||
int Group( const TOOL_EVENT& aEvent ) override;
|
||||
|
||||
protected:
|
||||
std::unique_ptr<COMMIT> createCommit() override { return std::make_unique<BOARD_COMMIT>( this ); }
|
||||
std::shared_ptr<COMMIT> createCommit() override { return std::make_shared<BOARD_COMMIT>( this ); }
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user