Add determination to which Kicad app type belongs

This commit is contained in:
Mikolaj Wielgus 2021-11-22 00:32:18 +01:00
parent 9f7db24871
commit 55ddc8161f
1 changed files with 221 additions and 0 deletions

View File

@ -266,4 +266,225 @@ constexpr KICAD_T BaseType( const KICAD_T aType )
} }
} }
constexpr bool IsNullType( const KICAD_T aType )
{
return aType <= 0;
}
constexpr bool IsInstatiableType( const KICAD_T aType )
{
if( IsNullType( aType ) )
return false;
if( BaseType( aType ) != aType )
return false;
switch( aType )
{
case SCH_SCREEN_T:
return false;
default:
break;
}
return true;
}
constexpr bool IsEeschemaType( const KICAD_T aType )
{
switch( aType )
{
case SCH_MARKER_T:
case SCH_JUNCTION_T:
case SCH_NO_CONNECT_T:
case SCH_BUS_WIRE_ENTRY_T:
case SCH_BUS_BUS_ENTRY_T:
case SCH_LINE_T:
case SCH_BITMAP_T:
case SCH_TEXT_T:
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_FIELD_T:
case SCH_SYMBOL_T:
case SCH_SHEET_PIN_T:
case SCH_SHEET_T:
case SCH_PIN_T:
case SCH_FIELD_LOCATE_REFERENCE_T:
case SCH_FIELD_LOCATE_VALUE_T:
case SCH_FIELD_LOCATE_FOOTPRINT_T:
case SCH_FIELD_LOCATE_DATASHEET_T:
case SCH_LINE_LOCATE_WIRE_T:
case SCH_LINE_LOCATE_BUS_T:
case SCH_LINE_LOCATE_GRAPHIC_LINE_T:
case SCH_LABEL_LOCATE_WIRE_T:
case SCH_LABEL_LOCATE_BUS_T:
case SCH_SYMBOL_LOCATE_POWER_T:
case SCH_LOCATE_ANY_T:
case SCH_SCREEN_T:
case SCHEMATIC_T:
case LIB_SYMBOL_T:
case LIB_ALIAS_T:
case LIB_SHAPE_T:
case LIB_TEXT_T:
case LIB_PIN_T:
case LIB_FIELD_T:
return true;
default:
return false;
}
}
constexpr bool IsPcbnewType( const KICAD_T aType )
{
switch( aType )
{
case PCB_T:
case PCB_FOOTPRINT_T:
case PCB_PAD_T:
case PCB_SHAPE_T:
case PCB_TEXT_T:
case PCB_FP_TEXT_T:
case PCB_FP_SHAPE_T:
case PCB_FP_ZONE_T:
case PCB_TRACE_T:
case PCB_VIA_T:
case PCB_ARC_T:
case PCB_MARKER_T:
case PCB_DIMENSION_T:
case PCB_DIM_ALIGNED_T:
case PCB_DIM_LEADER_T:
case PCB_DIM_CENTER_T:
case PCB_DIM_ORTHOGONAL_T:
case PCB_TARGET_T:
case PCB_ZONE_T:
case PCB_ITEM_LIST_T:
case PCB_NETINFO_T:
case PCB_GROUP_T:
case PCB_LOCATE_STDVIA_T:
case PCB_LOCATE_UVIA_T:
case PCB_LOCATE_BBVIA_T:
case PCB_LOCATE_TEXT_T:
case PCB_LOCATE_GRAPHIC_T:
case PCB_LOCATE_HOLE_T:
case PCB_LOCATE_PTH_T:
case PCB_LOCATE_NPTH_T:
case PCB_LOCATE_BOARD_EDGE_T:
return true;
default:
return false;
}
}
constexpr bool IsGerbviewType( const KICAD_T aType )
{
switch( aType )
{
case GERBER_LAYOUT_T:
case GERBER_DRAW_ITEM_T:
case GERBER_IMAGE_T:
return true;
default:
return false;
}
}
constexpr bool IsPageLayoutEditorType( const KICAD_T aType )
{
switch( aType )
{
case WSG_LINE_T:
case WSG_RECT_T:
case WSG_POLY_T:
case WSG_TEXT_T:
case WSG_BITMAP_T:
case WSG_PAGE_T:
case WS_PROXY_UNDO_ITEM_T:
case WS_PROXY_UNDO_ITEM_PLUS_T:
return true;
default:
return false;
}
}
constexpr bool IsMiscType( const KICAD_T aType )
{
switch( aType )
{
case SCREEN_T:
case SYMBOL_LIB_TABLE_T:
case FP_LIB_TABLE_T:
case SYMBOL_LIBS_T:
case SEARCH_STACK_T:
case S3D_CACHE_T:
return true;
default:
return false;
}
}
constexpr bool IsTypeCorrect( KICAD_T aType )
{
return IsNullType( aType )
|| IsEeschemaType( aType )
|| IsPcbnewType( aType )
|| IsGerbviewType( aType )
|| IsPageLayoutEditorType( aType )
|| IsMiscType( aType );
}
constexpr bool IsTypeAvailable( KICAD_T aType )
{
if( !IsInstatiableType( aType ) )
return false;
if( IsEeschemaType( aType ) )
{
#ifdef EESCHEMA
return true;
#endif // EESCHEMA
}
if( IsPcbnewType( aType ) )
{
#ifdef PCBNEW
return true;
#endif // PCBNEW
}
if( IsGerbviewType( aType ) )
{
#ifdef GERBVIEW
return true;
#endif // GERBVIEW
}
if( IsPageLayoutEditorType( aType ) )
{
#ifdef PL_EDITOR
return true;
#endif // PL_EDITOR
}
return false;
}
#endif // __KICAD_TYPEINFO_H #endif // __KICAD_TYPEINFO_H