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"