From 58df9c96f4a9c427470df37175ff8dd814ddcf40 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Thu, 21 Mar 2024 16:17:49 +0000 Subject: [PATCH] ADDED: Expose units and DeMorgan to properties system. (Also fixes inheritance bug in LIB_PIN's properties.) --- common/eda_shape.cpp | 42 +++++++++++++++++++++++++------------- eeschema/lib_item.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++ eeschema/lib_pin.cpp | 3 ++- eeschema/lib_shape.cpp | 3 ++- 4 files changed, 78 insertions(+), 16 deletions(-) diff --git a/common/eda_shape.cpp b/common/eda_shape.cpp index 2ee69b67fd..4c95593f1b 100644 --- a/common/eda_shape.cpp +++ b/common/eda_shape.cpp @@ -1973,53 +1973,65 @@ static struct EDA_SHAPE_DESC return false; }; + const wxString shapeProps = _HKI( "Shape Properties" ); + auto shape = new PROPERTY_ENUM( _HKI( "Shape" ), NO_SETTER( EDA_SHAPE, SHAPE_T ), &EDA_SHAPE::GetShape ); - propMgr.AddProperty( shape ); + propMgr.AddProperty( shape, shapeProps ); propMgr.AddProperty( new PROPERTY( _HKI( "Start X" ), &EDA_SHAPE::SetStartX, &EDA_SHAPE::GetStartX, PROPERTY_DISPLAY::PT_COORD, - ORIGIN_TRANSFORMS::ABS_X_COORD ) ) + ORIGIN_TRANSFORMS::ABS_X_COORD ), + shapeProps ) .SetAvailableFunc( isNotPolygonOrCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "Start Y" ), &EDA_SHAPE::SetStartY, &EDA_SHAPE::GetStartY, PROPERTY_DISPLAY::PT_COORD, - ORIGIN_TRANSFORMS::ABS_Y_COORD ) ) + ORIGIN_TRANSFORMS::ABS_Y_COORD ), + shapeProps ) .SetAvailableFunc( isNotPolygonOrCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "Center X" ), &EDA_SHAPE::SetStartX, &EDA_SHAPE::GetStartX, PROPERTY_DISPLAY::PT_COORD, - ORIGIN_TRANSFORMS::ABS_X_COORD ) ) + ORIGIN_TRANSFORMS::ABS_X_COORD ), + shapeProps ) .SetAvailableFunc( isCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "Center Y" ), &EDA_SHAPE::SetStartY, &EDA_SHAPE::GetStartY, PROPERTY_DISPLAY::PT_COORD, - ORIGIN_TRANSFORMS::ABS_Y_COORD ) ) + ORIGIN_TRANSFORMS::ABS_Y_COORD ), + shapeProps ) .SetAvailableFunc( isCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "Radius" ), &EDA_SHAPE::SetRadius, &EDA_SHAPE::GetRadius, PROPERTY_DISPLAY::PT_SIZE, - ORIGIN_TRANSFORMS::NOT_A_COORD ) ) + ORIGIN_TRANSFORMS::NOT_A_COORD ), + shapeProps ) .SetAvailableFunc( isCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "End X" ), &EDA_SHAPE::SetEndX, &EDA_SHAPE::GetEndX, PROPERTY_DISPLAY::PT_COORD, - ORIGIN_TRANSFORMS::ABS_X_COORD ) ) + ORIGIN_TRANSFORMS::ABS_X_COORD ), + shapeProps ) .SetAvailableFunc( isNotPolygonOrCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "End Y" ), &EDA_SHAPE::SetEndY, &EDA_SHAPE::GetEndY, PROPERTY_DISPLAY::PT_COORD, - ORIGIN_TRANSFORMS::ABS_Y_COORD ) ) + ORIGIN_TRANSFORMS::ABS_Y_COORD ), + shapeProps ) .SetAvailableFunc( isNotPolygonOrCircle ); propMgr.AddProperty( new PROPERTY( _HKI( "Line Width" ), - &EDA_SHAPE::SetWidth, &EDA_SHAPE::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) ); + &EDA_SHAPE::SetWidth, &EDA_SHAPE::GetWidth, PROPERTY_DISPLAY::PT_SIZE ), + shapeProps ); void ( EDA_SHAPE::*lineStyleSetter )( LINE_STYLE ) = &EDA_SHAPE::SetLineStyle; propMgr.AddProperty( new PROPERTY_ENUM( _HKI( "Line Style" ), - lineStyleSetter, &EDA_SHAPE::GetLineStyle ) ); + lineStyleSetter, &EDA_SHAPE::GetLineStyle ), + shapeProps ); propMgr.AddProperty( new PROPERTY( _HKI( "Line Color" ), - &EDA_SHAPE::SetLineColor, &EDA_SHAPE::GetLineColor ) ) + &EDA_SHAPE::SetLineColor, &EDA_SHAPE::GetLineColor ), + shapeProps ) .SetIsHiddenFromRulesEditor(); auto angle = new PROPERTY( _HKI( "Angle" ), @@ -2033,7 +2045,7 @@ static struct EDA_SHAPE_DESC return false; } ); - propMgr.AddProperty( angle ); + propMgr.AddProperty( angle, shapeProps ); auto fillAvailable = [=]( INSPECTABLE* aItem ) -> bool @@ -2056,11 +2068,13 @@ static struct EDA_SHAPE_DESC }; propMgr.AddProperty( new PROPERTY( _HKI( "Filled" ), - &EDA_SHAPE::SetFilled, &EDA_SHAPE::IsFilled ) ) + &EDA_SHAPE::SetFilled, &EDA_SHAPE::IsFilled ), + shapeProps ) .SetAvailableFunc( fillAvailable ); propMgr.AddProperty( new PROPERTY( _HKI( "Fill Color" ), - &EDA_SHAPE::SetFillColor, &EDA_SHAPE::GetFillColor ) ) + &EDA_SHAPE::SetFillColor, &EDA_SHAPE::GetFillColor ), + shapeProps ) .SetAvailableFunc( fillAvailable ) .SetIsHiddenFromRulesEditor(); } diff --git a/eeschema/lib_item.cpp b/eeschema/lib_item.cpp index f58dbd2b2f..8426ef5740 100644 --- a/eeschema/lib_item.cpp +++ b/eeschema/lib_item.cpp @@ -183,3 +183,49 @@ void LIB_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const aLayers[1] = LAYER_DEVICE_BACKGROUND; aLayers[2] = LAYER_SELECTION_SHADOWS; } + + +static struct LIB_ITEM_DESC +{ + LIB_ITEM_DESC() + { + PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance(); + REGISTER_TYPE( LIB_ITEM ); + propMgr.AddTypeCast( new TYPE_CAST ); + propMgr.InheritsAfter( TYPE_HASH( LIB_ITEM ), TYPE_HASH( EDA_ITEM ) ); + + auto multiUnit = + [=]( INSPECTABLE* aItem ) -> bool + { + if( LIB_ITEM* libItem = dynamic_cast( aItem ) ) + { + if( LIB_SYMBOL* symbol = libItem->GetParent() ) + return symbol->IsMulti(); + } + + return false; + }; + + auto multiBodyStyle = + [=]( INSPECTABLE* aItem ) -> bool + { + if( LIB_ITEM* libItem = dynamic_cast( aItem ) ) + { + if( LIB_SYMBOL* symbol = libItem->GetParent() ) + return symbol->HasAlternateBodyStyle(); + } + + return false; + }; + + propMgr.AddProperty( new PROPERTY( _HKI( "Unit" ), + &LIB_ITEM::SetUnit, &LIB_ITEM::GetUnit ) ) + .SetAvailableFunc( multiUnit ); + propMgr.AddProperty( new PROPERTY( _HKI( "Body Style" ), + &LIB_ITEM::SetBodyStyle, &LIB_ITEM::GetBodyStyle ) ) + .SetAvailableFunc( multiBodyStyle ); + + propMgr.AddProperty( new PROPERTY( _HKI( "Private" ), + &LIB_ITEM::SetPrivate, &LIB_ITEM::IsPrivate ) ); + } +} _LIB_ITEM_DESC; diff --git a/eeschema/lib_pin.cpp b/eeschema/lib_pin.cpp index f86e5cb544..7b840848f2 100644 --- a/eeschema/lib_pin.cpp +++ b/eeschema/lib_pin.cpp @@ -1661,7 +1661,8 @@ static struct LIB_PIN_DESC PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance(); REGISTER_TYPE( LIB_PIN ); - propMgr.InheritsAfter( TYPE_HASH( LIB_PIN ), TYPE_HASH( SCH_ITEM ) ); + propMgr.AddTypeCast( new TYPE_CAST ); + propMgr.InheritsAfter( TYPE_HASH( LIB_PIN ), TYPE_HASH( LIB_ITEM ) ); propMgr.AddProperty( new PROPERTY( _HKI( "Pin Name" ), &LIB_PIN::SetName, &LIB_PIN::GetName ) ); diff --git a/eeschema/lib_shape.cpp b/eeschema/lib_shape.cpp index dec84a686b..b41d8dc5f0 100644 --- a/eeschema/lib_shape.cpp +++ b/eeschema/lib_shape.cpp @@ -600,7 +600,8 @@ static struct LIB_SHAPE_DESC FILL_T ( LIB_SHAPE::*fillModeGetter )() const = &LIB_SHAPE::GetFillMode; propMgr.AddProperty( new PROPERTY_ENUM< LIB_SHAPE, FILL_T>( _HKI( "Fill" ), - fillModeSetter, fillModeGetter ) ); + fillModeSetter, fillModeGetter ), + _HKI( "Shape Properties" ) ); } } _LIB_SHAPE_DESC;