Fix some PCB_SHAPE properties
Hide irrelevant position/start/end properties
for shape classes that don't use them.
(cherry picked from commit 1651b44ab1
)
This commit is contained in:
parent
1a208a1612
commit
009211c740
|
@ -1687,21 +1687,36 @@ static struct EDA_SHAPE_DESC
|
||||||
|
|
||||||
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();
|
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();
|
||||||
REGISTER_TYPE( EDA_SHAPE );
|
REGISTER_TYPE( EDA_SHAPE );
|
||||||
|
|
||||||
|
auto isNotPolygon =
|
||||||
|
[]( INSPECTABLE* aItem ) -> bool
|
||||||
|
{
|
||||||
|
// Polygons, unlike other shapes, have no meaningful start or end coordinates
|
||||||
|
if( EDA_SHAPE* shape = dynamic_cast<EDA_SHAPE*>( aItem ) )
|
||||||
|
return shape->GetShape() != SHAPE_T::POLY;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
auto shape = new PROPERTY_ENUM<EDA_SHAPE, SHAPE_T>( _HKI( "Shape" ),
|
auto shape = new PROPERTY_ENUM<EDA_SHAPE, SHAPE_T>( _HKI( "Shape" ),
|
||||||
NO_SETTER( EDA_SHAPE, SHAPE_T ), &EDA_SHAPE::GetShape );
|
NO_SETTER( EDA_SHAPE, SHAPE_T ), &EDA_SHAPE::GetShape );
|
||||||
propMgr.AddProperty( shape );
|
propMgr.AddProperty( shape );
|
||||||
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "Start X" ),
|
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "Start X" ),
|
||||||
&EDA_SHAPE::SetStartX, &EDA_SHAPE::GetStartX, PROPERTY_DISPLAY::PT_COORD,
|
&EDA_SHAPE::SetStartX, &EDA_SHAPE::GetStartX, PROPERTY_DISPLAY::PT_COORD,
|
||||||
ORIGIN_TRANSFORMS::ABS_X_COORD ) );
|
ORIGIN_TRANSFORMS::ABS_X_COORD ) )
|
||||||
|
.SetAvailableFunc( isNotPolygon );
|
||||||
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "Start Y" ),
|
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "Start Y" ),
|
||||||
&EDA_SHAPE::SetStartY, &EDA_SHAPE::GetStartY, PROPERTY_DISPLAY::PT_COORD,
|
&EDA_SHAPE::SetStartY, &EDA_SHAPE::GetStartY, PROPERTY_DISPLAY::PT_COORD,
|
||||||
ORIGIN_TRANSFORMS::ABS_Y_COORD ) );
|
ORIGIN_TRANSFORMS::ABS_Y_COORD ) )
|
||||||
|
.SetAvailableFunc( isNotPolygon );
|
||||||
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "End X" ),
|
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "End X" ),
|
||||||
&EDA_SHAPE::SetEndX, &EDA_SHAPE::GetEndX, PROPERTY_DISPLAY::PT_COORD,
|
&EDA_SHAPE::SetEndX, &EDA_SHAPE::GetEndX, PROPERTY_DISPLAY::PT_COORD,
|
||||||
ORIGIN_TRANSFORMS::ABS_X_COORD ) );
|
ORIGIN_TRANSFORMS::ABS_X_COORD ) )
|
||||||
|
.SetAvailableFunc( isNotPolygon );
|
||||||
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "End Y" ),
|
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "End Y" ),
|
||||||
&EDA_SHAPE::SetEndY, &EDA_SHAPE::GetEndY, PROPERTY_DISPLAY::PT_COORD,
|
&EDA_SHAPE::SetEndY, &EDA_SHAPE::GetEndY, PROPERTY_DISPLAY::PT_COORD,
|
||||||
ORIGIN_TRANSFORMS::ABS_Y_COORD ) );
|
ORIGIN_TRANSFORMS::ABS_Y_COORD ) )
|
||||||
|
.SetAvailableFunc( isNotPolygon );
|
||||||
// TODO: m_arcCenter, m_bezierC1, m_bezierC2, m_poly
|
// TODO: m_arcCenter, m_bezierC1, m_bezierC2, m_poly
|
||||||
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "Line Width" ),
|
propMgr.AddProperty( new PROPERTY<EDA_SHAPE, int>( _HKI( "Line Width" ),
|
||||||
&EDA_SHAPE::SetWidth, &EDA_SHAPE::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) );
|
&EDA_SHAPE::SetWidth, &EDA_SHAPE::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) );
|
||||||
|
|
|
@ -410,5 +410,21 @@ static struct PCB_SHAPE_DESC
|
||||||
_HKI( "Layer" ), &PCB_SHAPE::SetLayer, &PCB_SHAPE::GetLayer );
|
_HKI( "Layer" ), &PCB_SHAPE::SetLayer, &PCB_SHAPE::GetLayer );
|
||||||
|
|
||||||
propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Layer" ), layerProperty );
|
propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Layer" ), layerProperty );
|
||||||
|
|
||||||
|
// Only polygons have meaningful Position properties.
|
||||||
|
// On other shapes, these are duplicates of the Start properties.
|
||||||
|
auto isPolygon =
|
||||||
|
[]( INSPECTABLE* aItem ) -> bool
|
||||||
|
{
|
||||||
|
if( PCB_SHAPE* shape = dynamic_cast<PCB_SHAPE*>( aItem ) )
|
||||||
|
return shape->GetShape() == SHAPE_T::POLY;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
propMgr.OverrideAvailability( TYPE_HASH( PCB_SHAPE ), TYPE_HASH( BOARD_ITEM ),
|
||||||
|
_HKI( "Position X" ), isPolygon );
|
||||||
|
propMgr.OverrideAvailability( TYPE_HASH( PCB_SHAPE ), TYPE_HASH( BOARD_ITEM ),
|
||||||
|
_HKI( "Position Y" ), isPolygon );
|
||||||
}
|
}
|
||||||
} _PCB_SHAPE_DESC;
|
} _PCB_SHAPE_DESC;
|
||||||
|
|
Loading…
Reference in New Issue