File indexing completed on 2024-05-05 05:46:05
0001 /*************************************************************************** 0002 * Copyright (C) 2005 by David Saxton * 0003 * david@bluehaze.org * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 ***************************************************************************/ 0010 0011 #include "ecsubcircuit.h" 0012 #include "canvasitemparts.h" 0013 #include "circuitdocument.h" 0014 #include "libraryitem.h" 0015 #include "node.h" 0016 #include "subcircuits.h" 0017 0018 #include <KLocalizedString> 0019 0020 #include <QDebug> 0021 #include <QFile> 0022 0023 Item *ECSubcircuit::construct(ItemDocument *itemDocument, bool newItem, const char *id) 0024 { 0025 return new ECSubcircuit(static_cast<ICNDocument *>(itemDocument), newItem, id); 0026 } 0027 0028 LibraryItem *ECSubcircuit::libraryItem() 0029 { 0030 return new LibraryItem(QStringList(QString("ec/subcircuit")), QString(), QString(), QString(), LibraryItem::lit_subcircuit, ECSubcircuit::construct); 0031 } 0032 0033 ECSubcircuit::ECSubcircuit(ICNDocument *icnDocument, bool newItem, const char *id) 0034 : Component(icnDocument, newItem, (id) ? id : "subcircuit") 0035 { 0036 m_name = i18n("Subcircuit"); 0037 0038 createProperty("id", Variant::Type::Int); 0039 property("id")->setMinValue(1); 0040 property("id")->setMaxValue(1 << 15); 0041 property("id")->setValue(1); 0042 property("id")->setHidden(true); 0043 } 0044 0045 ECSubcircuit::~ECSubcircuit() 0046 { 0047 } 0048 0049 void ECSubcircuit::removeItem() 0050 { 0051 emit subcircuitDeleted(); 0052 Component::removeItem(); 0053 } 0054 0055 void ECSubcircuit::setNumExtCon(unsigned numExtCon) 0056 { 0057 m_conNames.resize(numExtCon); 0058 0059 // Remove old pins 0060 const NodeInfoMap::iterator nodeMapEnd = m_nodeMap.end(); 0061 for (NodeInfoMap::iterator it = m_nodeMap.begin(); it != nodeMapEnd; ++it) { 0062 p_icnDocument->appendDeleteList(p_icnDocument->nodeWithID(it.value().id)); 0063 } 0064 p_icnDocument->flushDeleteList(); 0065 m_nodeMap.clear(); 0066 0067 QStringList pins; 0068 for (unsigned i = 0; i < numExtCon; ++i) { 0069 pins += QString::number(i); 0070 } 0071 0072 initDIPSymbol(pins, 80); 0073 0074 // We don't want the text that the dip symbol gave us as we initialize it later... 0075 for (unsigned i = 0; i < numExtCon; ++i) 0076 removeDisplayText(QString::number(i)); 0077 0078 initDIP(pins); 0079 } 0080 0081 void ECSubcircuit::dataChanged() 0082 { 0083 int subcircuitId = dataInt("id"); 0084 if (subcircuitId == -1) { 0085 return; 0086 } 0087 emit subcircuitDeleted(); 0088 Subcircuits::initECSubcircuit(subcircuitId, this); 0089 } 0090 0091 void ECSubcircuit::setExtConName(unsigned numId, const QString &name) 0092 { 0093 if (int(numId) > m_conNames.size()) 0094 return; 0095 0096 m_conNames[numId] = name; 0097 } 0098 0099 void ECSubcircuit::doneSCInit() 0100 { 0101 QStringList pins; 0102 for (int i = 0; i < m_conNames.size(); ++i) 0103 pins << m_conNames[i]; 0104 initDIPSymbol(pins, 80); 0105 } 0106 0107 void ECSubcircuit::drawShape(QPainter &p) 0108 { 0109 Component::drawShape(p); 0110 } 0111 0112 #include "moc_ecsubcircuit.cpp"