00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "canvasitemparts.h"
00012 #include "circuitdocument.h"
00013 #include "ecsubcircuit.h"
00014 #include "node.h"
00015 #include "libraryitem.h"
00016 #include "subcircuits.h"
00017
00018 #include <kdebug.h>
00019 #include <klocale.h>
00020 #include <qfile.h>
00021
00022 Item* ECSubcircuit::construct( ItemDocument *itemDocument, bool newItem, const char *id )
00023 {
00024 return new ECSubcircuit( (ICNDocument*)itemDocument, newItem, id );
00025 }
00026
00027 LibraryItem* ECSubcircuit::libraryItem()
00028 {
00029 return new LibraryItem(
00030 QString::QString("ec/subcircuit"),
00031 QString::null,
00032 QString::null,
00033 QString::null,
00034 LibraryItem::lit_subcircuit,
00035 ECSubcircuit::construct );
00036 }
00037
00038 ECSubcircuit::ECSubcircuit( ICNDocument *icnDocument, bool newItem, const char *id )
00039 : Component( icnDocument, newItem, (id) ? id : "subcircuit" )
00040 {
00041 m_name = i18n("Subcircuit");
00042
00043 createProperty( "id", Variant::Type::Int );
00044 property("id")->setMinValue(1);
00045 property("id")->setMaxValue(1<<15);
00046 property("id")->setValue(1);
00047 property("id")->setHidden(true);
00048 }
00049
00050
00051 ECSubcircuit::~ECSubcircuit()
00052 {
00053 }
00054
00055
00056 void ECSubcircuit::removeItem()
00057 {
00058 emit subcircuitDeleted();
00059 Component::removeItem();
00060 }
00061
00062
00063 void ECSubcircuit::setNumExtCon( unsigned numExtCon )
00064 {
00065 m_conNames.resize(numExtCon);
00066
00067
00068 const NodeMap::iterator nodeMapEnd = m_nodeMap.end();
00069 for ( NodeMap::iterator it = m_nodeMap.begin(); it != nodeMapEnd; ++it )
00070 {
00071 p_icnDocument->appendDeleteList( p_icnDocument->nodeWithID(it.data().id) );
00072 }
00073 p_icnDocument->flushDeleteList();
00074 m_nodeMap.clear();
00075
00076 QStringList pins;
00077 for ( unsigned i=0; i<numExtCon; ++i )
00078 {
00079 pins += QString::number(i);
00080 }
00081
00082 initDIPSymbol( pins, 80 );
00083
00084
00085 for ( unsigned i = 0; i < numExtCon; ++i )
00086 removeDisplayText( QString::number(i) );
00087
00088 initDIP(pins);
00089 }
00090
00091
00092 void ECSubcircuit::dataChanged()
00093 {
00094 int subcircuitId = dataInt("id");
00095 if ( subcircuitId == -1 ) {
00096 return;
00097 }
00098 emit subcircuitDeleted();
00099 Subcircuits::initECSubcircuit( subcircuitId, this );
00100 }
00101
00102
00103 void ECSubcircuit::setExtConName( unsigned numId, const QString & name )
00104 {
00105 if ( numId > m_conNames.size() )
00106 return;
00107
00108 m_conNames[numId] = name;
00109 }
00110
00111
00112 void ECSubcircuit::doneSCInit()
00113 {
00114 QStringList pins;
00115 for ( unsigned i = 0; i < m_conNames.size(); ++i )
00116 pins << m_conNames[i];
00117 initDIPSymbol( pins, 80 );
00118 }
00119
00120
00121 void ECSubcircuit::drawShape( QPainter &p )
00122 {
00123 Component::drawShape(p);
00124 }
00125
00126
00127 #include "ecsubcircuit.moc"
00128
00129
00130