You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktechlab/src/electronics/components/ecsubcircuit.cpp

131 lines
3.0 KiB

/***************************************************************************
* Copyright (C) 2005 by David Saxton *
* david@bluehaze.org *
* *
* 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 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#include "canvasitemparts.h"
#include "circuitdocument.h"
#include "ecsubcircuit.h"
#include "node.h"
#include "libraryitem.h"
#include "subcircuits.h"
#include <kdebug.h>
#include <tdelocale.h>
#include <tqfile.h>
Item* ECSubcircuit::construct( ItemDocument *itemDocument, bool newItem, const char *id )
{
return new ECSubcircuit( (ICNDocument*)itemDocument, newItem, id );
}
LibraryItem* ECSubcircuit::libraryItem()
{
return new LibraryItem(
TQString("ec/subcircuit"),
TQString(),
TQString(),
TQString(),
LibraryItem::lit_subcircuit,
ECSubcircuit::construct );
}
ECSubcircuit::ECSubcircuit( ICNDocument *icnDocument, bool newItem, const char *id )
: Component( icnDocument, newItem, (id) ? id : "subcircuit" )
{
m_name = i18n("Subcircuit");
createProperty( "id", Variant::Type::Int );
property("id")->setMinValue(1);
property("id")->setMaxValue(1<<15);
property("id")->setValue(1);
property("id")->setHidden(true);
}
ECSubcircuit::~ECSubcircuit()
{
}
void ECSubcircuit::removeItem()
{
emit subcircuitDeleted();
Component::removeItem();
}
void ECSubcircuit::setNumExtCon( unsigned numExtCon )
{
m_conNames.resize(numExtCon);
// Remove old pins
const NodeMap::iterator nodeMapEnd = m_nodeMap.end();
for ( NodeMap::iterator it = m_nodeMap.begin(); it != nodeMapEnd; ++it )
{
p_icnDocument->appendDeleteList( p_icnDocument->nodeWithID(it.data().id) );
}
p_icnDocument->flushDeleteList();
m_nodeMap.clear();
TQStringList pins;
for ( unsigned i=0; i<numExtCon; ++i )
{
pins += TQString::number(i);
}
initDIPSymbol( pins, 80 );
// We don't want the text that the dip symbol gave us as we initialize it later...
for ( unsigned i = 0; i < numExtCon; ++i )
removeDisplayText( TQString::number(i) );
initDIP(pins);
}
void ECSubcircuit::dataChanged()
{
int subcircuitId = dataInt("id");
if ( subcircuitId == -1 ) {
return;
}
emit subcircuitDeleted();
Subcircuits::initECSubcircuit( subcircuitId, this );
}
void ECSubcircuit::setExtConName( unsigned numId, const TQString & name )
{
if ( numId > m_conNames.size() )
return;
m_conNames[numId] = name;
}
void ECSubcircuit::doneSCInit()
{
TQStringList pins;
for ( unsigned i = 0; i < m_conNames.size(); ++i )
pins << m_conNames[i];
initDIPSymbol( pins, 80 );
}
void ECSubcircuit::drawShape( TQPainter &p )
{
Component::drawShape(p);
}
#include "ecsubcircuit.moc"