106 lines
4.0 KiB
C++
106 lines
4.0 KiB
C++
/*
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
*
|
|
* Copyright (C) 2024 Jon Evans <jon@craftyjon.com>
|
|
* Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <lib_pin.h>
|
|
#include <lib_shape.h>
|
|
#include <lib_symbol.h>
|
|
#include <lib_text.h>
|
|
#include <lib_textbox.h>
|
|
|
|
#include <sch_bitmap.h>
|
|
#include <sch_bus_entry.h>
|
|
#include <sch_field.h>
|
|
#include <sch_junction.h>
|
|
#include <sch_label.h>
|
|
#include <sch_line.h>
|
|
#include <sch_no_connect.h>
|
|
#include <sch_pin.h>
|
|
#include <sch_shape.h>
|
|
#include <sch_sheet.h>
|
|
#include <sch_sheet_pin.h>
|
|
#include <sch_table.h>
|
|
#include <sch_tablecell.h>
|
|
#include <sch_text.h>
|
|
#include <sch_textbox.h>
|
|
|
|
#include "api_sch_utils.h"
|
|
|
|
|
|
std::unique_ptr<EDA_ITEM> CreateItemForType( KICAD_T aType, EDA_ITEM* aContainer )
|
|
{
|
|
SCH_ITEM* parentSchItem = dynamic_cast<SCH_ITEM*>( aContainer );
|
|
LIB_SYMBOL* parentLibSymbol = nullptr;
|
|
|
|
if( aContainer && aContainer->Type() == LIB_SYMBOL_T )
|
|
parentLibSymbol = static_cast<LIB_SYMBOL*>( aContainer );
|
|
|
|
switch( aType )
|
|
{
|
|
case SCH_JUNCTION_T: return std::make_unique<SCH_JUNCTION>();
|
|
case SCH_NO_CONNECT_T: return std::make_unique<SCH_NO_CONNECT>();
|
|
case SCH_BUS_WIRE_ENTRY_T: return std::make_unique<SCH_BUS_WIRE_ENTRY>();
|
|
case SCH_BUS_BUS_ENTRY_T: return std::make_unique<SCH_BUS_BUS_ENTRY>();
|
|
case SCH_LINE_T: return std::make_unique<SCH_LINE>();
|
|
case SCH_SHAPE_T: return std::make_unique<SCH_SHAPE>();
|
|
case SCH_BITMAP_T: return std::make_unique<SCH_BITMAP>();
|
|
case SCH_TEXTBOX_T: return std::make_unique<SCH_TEXTBOX>();
|
|
case SCH_TEXT_T: return std::make_unique<SCH_TEXT>();
|
|
case SCH_TABLE_T: return std::make_unique<SCH_TABLE>();
|
|
case SCH_TABLECELL_T: return std::make_unique<SCH_TABLECELL>();
|
|
case SCH_LABEL_T: return std::make_unique<SCH_LABEL>();
|
|
case SCH_GLOBAL_LABEL_T: return std::make_unique<SCH_GLOBALLABEL>();
|
|
case SCH_HIER_LABEL_T: return std::make_unique<SCH_HIERLABEL>();
|
|
case SCH_DIRECTIVE_LABEL_T: return std::make_unique<SCH_DIRECTIVE_LABEL>();
|
|
case SCH_FIELD_T: return std::make_unique<SCH_FIELD>( parentSchItem );
|
|
|
|
case SCH_SYMBOL_T:
|
|
{
|
|
// TODO: constructing currently requires more than just a "container" LIB_SYMBOL
|
|
return nullptr;
|
|
}
|
|
|
|
case SCH_SHEET_PIN_T:
|
|
{
|
|
if( aContainer && aContainer->Type() == SCH_SHEET_T )
|
|
return std::make_unique<SCH_SHEET_PIN>( static_cast<SCH_SHEET*>( aContainer ) );
|
|
|
|
return nullptr;
|
|
}
|
|
|
|
case SCH_SHEET_T: return std::make_unique<SCH_SHEET>();
|
|
|
|
case SCH_PIN_T:
|
|
{
|
|
// TODO: constructing currently requires LIB_PIN and SCH_SYMBOL ptr,
|
|
// or SCH_SYMBOL and number+alt. Need to determine ideal default ctor.
|
|
return nullptr;
|
|
}
|
|
|
|
case LIB_SYMBOL_T: return nullptr; // TODO: ctor currently requires non-null name
|
|
case LIB_SHAPE_T: return std::make_unique<LIB_SHAPE>( parentLibSymbol );
|
|
case LIB_TEXT_T: return std::make_unique<LIB_TEXT>( parentLibSymbol );
|
|
case LIB_TEXTBOX_T: return std::make_unique<LIB_TEXTBOX>( parentLibSymbol );
|
|
case LIB_PIN_T: return std::make_unique<LIB_PIN>( parentLibSymbol );
|
|
|
|
default:
|
|
return nullptr;
|
|
}
|
|
}
|