diff --git a/pcbnew/dialogs/dialog_dimension_properties_base.cpp b/pcbnew/dialogs/dialog_dimension_properties_base.cpp index 5f34f55793..9d4615adfd 100644 --- a/pcbnew/dialogs/dialog_dimension_properties_base.cpp +++ b/pcbnew/dialogs/dialog_dimension_properties_base.cpp @@ -26,7 +26,7 @@ DIALOG_DIMENSION_PROPERTIES_BASE::DIALOG_DIMENSION_PROPERTIES_BASE( wxWindow* pa gbSizerLeader->SetFlexibleDirection( wxBOTH ); gbSizerLeader->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_lblLeaderValue = new wxStaticText( m_sizerLeader->GetStaticBox(), wxID_ANY, _("Value:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_lblLeaderValue = new wxStaticText( m_sizerLeader->GetStaticBox(), wxID_ANY, _("Text:"), wxDefaultPosition, wxDefaultSize, 0 ); m_lblLeaderValue->Wrap( -1 ); gbSizerLeader->Add( m_lblLeaderValue, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); diff --git a/pcbnew/dialogs/dialog_dimension_properties_base.fbp b/pcbnew/dialogs/dialog_dimension_properties_base.fbp index 314282c868..a36870c92e 100644 --- a/pcbnew/dialogs/dialog_dimension_properties_base.fbp +++ b/pcbnew/dialogs/dialog_dimension_properties_base.fbp @@ -126,7 +126,7 @@ 0 0 wxID_ANY - Value: + Text: 0 0 diff --git a/pcbnew/pcb_dimension.cpp b/pcbnew/pcb_dimension.cpp index a405829a3d..192aa6974a 100644 --- a/pcbnew/pcb_dimension.cpp +++ b/pcbnew/pcb_dimension.cpp @@ -1337,28 +1337,52 @@ static struct DIMENSION_DESC const wxString groupDimension = _HKI( "Dimension Properties" ); + auto isLeader = + []( INSPECTABLE* aItem ) -> bool + { + return dynamic_cast( aItem ) != nullptr; + }; + + auto isNotLeader = + []( INSPECTABLE* aItem ) -> bool + { + return dynamic_cast( aItem ) == nullptr; + }; + propMgr.AddProperty( new PROPERTY( _HKI( "Prefix" ), &PCB_DIMENSION_BASE::ChangePrefix, &PCB_DIMENSION_BASE::GetPrefix ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); propMgr.AddProperty( new PROPERTY( _HKI( "Suffix" ), &PCB_DIMENSION_BASE::ChangeSuffix, &PCB_DIMENSION_BASE::GetSuffix ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); propMgr.AddProperty( new PROPERTY( _HKI( "Override Text" ), &PCB_DIMENSION_BASE::ChangeOverrideText, &PCB_DIMENSION_BASE::GetOverrideText ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); + + propMgr.AddProperty( new PROPERTY( _HKI( "Text" ), + &PCB_DIMENSION_BASE::ChangeOverrideText, &PCB_DIMENSION_BASE::GetOverrideText ), + groupDimension ) + .SetAvailableFunc( isLeader ); propMgr.AddProperty( new PROPERTY_ENUM( _HKI( "Units" ), &PCB_DIMENSION_BASE::ChangeUnitsMode, &PCB_DIMENSION_BASE::GetUnitsMode ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); propMgr.AddProperty( new PROPERTY_ENUM( _HKI( "Units Format" ), &PCB_DIMENSION_BASE::ChangeUnitsFormat, &PCB_DIMENSION_BASE::GetUnitsFormat ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); propMgr.AddProperty( new PROPERTY_ENUM( _HKI( "Precision" ), &PCB_DIMENSION_BASE::ChangePrecision, &PCB_DIMENSION_BASE::GetPrecision ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); propMgr.AddProperty( new PROPERTY( _HKI( "Suppress Trailing Zeroes" ), &PCB_DIMENSION_BASE::ChangeSuppressZeroes, &PCB_DIMENSION_BASE::GetSuppressZeroes ), - groupDimension ); + groupDimension ) + .SetAvailableFunc( isNotLeader ); } } _DIMENSION_DESC; @@ -1397,11 +1421,20 @@ static struct ALIGNED_DIMENSION_DESC _HKI( "Visible" ), []( INSPECTABLE* aItem ) { return false; } ); propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), - _HKI( "Knockout" ), + _HKI( "Text" ), + []( INSPECTABLE* aItem ) { return false; } ); + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), + _HKI( "Vertical Justification" ), []( INSPECTABLE* aItem ) { return false; } ); propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), _HKI( "Hyperlink" ), []( INSPECTABLE* aItem ) { return false; } ); + + // This is actually defined on PCB_TEXT, but using PCB_TEXT as the base-class doesn't + // work, while using BOARD_ITEM does. ??? + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( BOARD_ITEM ), + _HKI( "Knockout" ), + []( INSPECTABLE* aItem ) { return false; } ); } } ALIGNED_DIMENSION_DESC; @@ -1423,15 +1456,24 @@ static struct ORTHOGONAL_DIMENSION_DESC propMgr.InheritsAfter( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( PCB_DIMENSION_BASE ) ); propMgr.InheritsAfter( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( PCB_DIM_ALIGNED ) ); - propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( EDA_TEXT ), _HKI( "Visible" ), []( INSPECTABLE* aItem ) { return false; } ); - propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), - _HKI( "Knockout" ), + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( EDA_TEXT ), + _HKI( "Text" ), []( INSPECTABLE* aItem ) { return false; } ); - propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( EDA_TEXT ), + _HKI( "Vertical Justification" ), + []( INSPECTABLE* aItem ) { return false; } ); + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( EDA_TEXT ), _HKI( "Hyperlink" ), []( INSPECTABLE* aItem ) { return false; } ); + + // This is actually defined on PCB_TEXT, but using PCB_TEXT as the base-class doesn't + // work, while using BOARD_ITEM does. ??? + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ORTHOGONAL ), TYPE_HASH( BOARD_ITEM ), + _HKI( "Knockout" ), + []( INSPECTABLE* aItem ) { return false; } ); } } ORTHOGONAL_DIMENSION_DESC; @@ -1458,15 +1500,24 @@ static struct RADIAL_DIMENSION_DESC PROPERTY_DISPLAY::PT_SIZE ), groupDimension ); - propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_RADIAL ), TYPE_HASH( EDA_TEXT ), _HKI( "Visible" ), []( INSPECTABLE* aItem ) { return false; } ); - propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), - _HKI( "Knockout" ), + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_RADIAL ), TYPE_HASH( EDA_TEXT ), + _HKI( "Text" ), []( INSPECTABLE* aItem ) { return false; } ); - propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_ALIGNED ), TYPE_HASH( EDA_TEXT ), + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_RADIAL ), TYPE_HASH( EDA_TEXT ), + _HKI( "Vertical Justification" ), + []( INSPECTABLE* aItem ) { return false; } ); + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_RADIAL ), TYPE_HASH( EDA_TEXT ), _HKI( "Hyperlink" ), []( INSPECTABLE* aItem ) { return false; } ); + + // This is actually defined on PCB_TEXT, but using PCB_TEXT as the base-class doesn't + // work, while using BOARD_ITEM does. ??? + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_RADIAL ), TYPE_HASH( BOARD_ITEM ), + _HKI( "Knockout" ), + []( INSPECTABLE* aItem ) { return false; } ); } } RADIAL_DIMENSION_DESC; @@ -1501,11 +1552,20 @@ static struct LEADER_DIMENSION_DESC _HKI( "Visible" ), []( INSPECTABLE* aItem ) { return false; } ); propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_LEADER ), TYPE_HASH( EDA_TEXT ), - _HKI( "Knockout" ), + _HKI( "Text" ), + []( INSPECTABLE* aItem ) { return false; } ); + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_LEADER ), TYPE_HASH( EDA_TEXT ), + _HKI( "Vertical Justification" ), []( INSPECTABLE* aItem ) { return false; } ); propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_LEADER ), TYPE_HASH( EDA_TEXT ), _HKI( "Hyperlink" ), []( INSPECTABLE* aItem ) { return false; } ); + + // This is actually defined on PCB_TEXT, but using PCB_TEXT as the base-class doesn't + // work, while using BOARD_ITEM does. ??? + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_LEADER ), TYPE_HASH( BOARD_ITEM ), + _HKI( "Knockout" ), + []( INSPECTABLE* aItem ) { return false; } ); } } LEADER_DIMENSION_DESC; @@ -1532,11 +1592,20 @@ static struct CENTER_DIMENSION_DESC _HKI( "Visible" ), []( INSPECTABLE* aItem ) { return false; } ); propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_CENTER ), TYPE_HASH( EDA_TEXT ), - _HKI( "Knockout" ), + _HKI( "Text" ), + []( INSPECTABLE* aItem ) { return false; } ); + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_CENTER ), TYPE_HASH( EDA_TEXT ), + _HKI( "Vertical Justification" ), []( INSPECTABLE* aItem ) { return false; } ); propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_CENTER ), TYPE_HASH( EDA_TEXT ), _HKI( "Hyperlink" ), []( INSPECTABLE* aItem ) { return false; } ); + + // This is actually defined on PCB_TEXT, but using PCB_TEXT as the base-class doesn't + // work, while using BOARD_ITEM does. ??? + propMgr.OverrideAvailability( TYPE_HASH( PCB_DIM_CENTER ), TYPE_HASH( BOARD_ITEM ), + _HKI( "Knockout" ), + []( INSPECTABLE* aItem ) { return false; } ); } } CENTER_DIMENSION_DESC;