ecsubcircuit.cpp

00001 /***************************************************************************
00002  *   Copyright (C) 2005 by David Saxton                                    *
00003  *   david@bluehaze.org                                                    *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
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         // Remove old pins
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         // We don't want the text that the dip symbol gave us as we initialize it later...
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 

Generated on Tue May 8 17:05:29 2007 for KTechLab by  doxygen 1.5.1