Make sure PCB_GENERATOR's lock status follows their members.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/16372
This commit is contained in:
parent
bcc823e8ff
commit
4844cffc00
|
@ -297,6 +297,7 @@ public:
|
||||||
|
|
||||||
virtual bool IsLocked() const;
|
virtual bool IsLocked() const;
|
||||||
virtual void SetLocked( bool aLocked ) { m_isLocked = aLocked; }
|
virtual void SetLocked( bool aLocked ) { m_isLocked = aLocked; }
|
||||||
|
virtual void SetLockedProperty( bool aLocked );
|
||||||
|
|
||||||
virtual void StyleFromSettings( const BOARD_DESIGN_SETTINGS& settings ) { }
|
virtual void StyleFromSettings( const BOARD_DESIGN_SETTINGS& settings ) { }
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
#include <board_design_settings.h>
|
#include <board_design_settings.h>
|
||||||
#include <pcb_group.h>
|
#include <pcb_group.h>
|
||||||
|
#include <pcb_generator.h>
|
||||||
#include <footprint.h>
|
#include <footprint.h>
|
||||||
#include <font/font.h>
|
#include <font/font.h>
|
||||||
|
|
||||||
|
@ -72,8 +73,8 @@ BOARD* BOARD_ITEM::GetBoard()
|
||||||
|
|
||||||
bool BOARD_ITEM::IsLocked() const
|
bool BOARD_ITEM::IsLocked() const
|
||||||
{
|
{
|
||||||
if( GetParentGroup() )
|
if( GetParentGroup() && GetParentGroup()->IsLocked() )
|
||||||
return GetParentGroup()->IsLocked();
|
return true;
|
||||||
|
|
||||||
const BOARD* board = GetBoard();
|
const BOARD* board = GetBoard();
|
||||||
|
|
||||||
|
@ -81,6 +82,17 @@ bool BOARD_ITEM::IsLocked() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BOARD_ITEM::SetLockedProperty( bool aLocked )
|
||||||
|
{
|
||||||
|
PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( GetParentGroup() );
|
||||||
|
|
||||||
|
if( generator )
|
||||||
|
generator->SetLocked( aLocked );
|
||||||
|
else
|
||||||
|
SetLocked( aLocked );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
STROKE_PARAMS BOARD_ITEM::GetStroke() const
|
STROKE_PARAMS BOARD_ITEM::GetStroke() const
|
||||||
{
|
{
|
||||||
wxCHECK( false, STROKE_PARAMS( pcbIUScale.mmToIU( DEFAULT_LINE_WIDTH ) ) );
|
wxCHECK( false, STROKE_PARAMS( pcbIUScale.mmToIU( DEFAULT_LINE_WIDTH ) ) );
|
||||||
|
@ -338,7 +350,7 @@ static struct BOARD_ITEM_DESC
|
||||||
propMgr.AddProperty( new PROPERTY_ENUM<BOARD_ITEM, PCB_LAYER_ID>( _HKI( "Layer" ),
|
propMgr.AddProperty( new PROPERTY_ENUM<BOARD_ITEM, PCB_LAYER_ID>( _HKI( "Layer" ),
|
||||||
&BOARD_ITEM::SetLayer, &BOARD_ITEM::GetLayer ) );
|
&BOARD_ITEM::SetLayer, &BOARD_ITEM::GetLayer ) );
|
||||||
propMgr.AddProperty( new PROPERTY<BOARD_ITEM, bool>( _HKI( "Locked" ),
|
propMgr.AddProperty( new PROPERTY<BOARD_ITEM, bool>( _HKI( "Locked" ),
|
||||||
&BOARD_ITEM::SetLocked, &BOARD_ITEM::IsLocked ) )
|
&BOARD_ITEM::SetLockedProperty, &BOARD_ITEM::IsLocked ) )
|
||||||
.SetAvailableFunc(
|
.SetAvailableFunc(
|
||||||
[=]( INSPECTABLE* aItem ) -> bool
|
[=]( INSPECTABLE* aItem ) -> bool
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include <board_commit.h>
|
#include <board_commit.h>
|
||||||
#include <board_design_settings.h>
|
#include <board_design_settings.h>
|
||||||
#include <pcb_group.h>
|
#include <pcb_group.h>
|
||||||
|
#include <pcb_generator.h>
|
||||||
#include <footprint.h>
|
#include <footprint.h>
|
||||||
#include <pad.h>
|
#include <pad.h>
|
||||||
#include <pcb_target.h>
|
#include <pcb_target.h>
|
||||||
|
@ -1246,28 +1247,25 @@ int BOARD_EDITOR_CONTROL::modifyLockSelected( MODIFY_MODE aMode )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool modified = false;
|
|
||||||
|
|
||||||
for( EDA_ITEM* item : selection )
|
for( EDA_ITEM* item : selection )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* board_item = dynamic_cast<BOARD_ITEM*>( item );
|
BOARD_ITEM* board_item = dynamic_cast<BOARD_ITEM*>( item );
|
||||||
wxCHECK2( board_item, continue );
|
wxCHECK2( board_item, continue );
|
||||||
|
|
||||||
|
PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( board_item->GetParentGroup() );
|
||||||
|
|
||||||
|
if( generator )
|
||||||
|
commit.Modify( generator );
|
||||||
|
|
||||||
commit.Modify( board_item );
|
commit.Modify( board_item );
|
||||||
|
|
||||||
if( aMode == ON )
|
if( aMode == ON )
|
||||||
{
|
board_item->SetLockedProperty( true );
|
||||||
modified |= !board_item->IsLocked();
|
|
||||||
board_item->SetLocked( true );
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
board_item->SetLockedProperty( false );
|
||||||
modified |= board_item->IsLocked();
|
|
||||||
board_item->SetLocked( false );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( modified )
|
if( !commit.Empty() )
|
||||||
{
|
{
|
||||||
commit.Push( aMode == ON ? _( "Lock" ) : _( "Unlock" ) );
|
commit.Push( aMode == ON ? _( "Lock" ) : _( "Unlock" ) );
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,11 @@ void PCB_PROPERTIES_PANEL::valueChanged( wxPropertyGridEvent& aEvent )
|
||||||
for( EDA_ITEM* edaItem : selection )
|
for( EDA_ITEM* edaItem : selection )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item = static_cast<BOARD_ITEM*>( edaItem );
|
BOARD_ITEM* item = static_cast<BOARD_ITEM*>( edaItem );
|
||||||
|
PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( item->GetParentGroup() );
|
||||||
|
|
||||||
|
if( generator )
|
||||||
|
changes.Modify( generator );
|
||||||
|
|
||||||
changes.Modify( item );
|
changes.Modify( item );
|
||||||
item->Set( property, newValue );
|
item->Set( property, newValue );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue