20#include "kivio_py_stencil_spawner.h"
24#include "kivio_common.h"
25#include "kivio_connector_target.h"
26#include "kivio_py_stencil.h"
27#include "kivio_stencil_spawner_set.h"
28#include "kivio_stencil_spawner.h"
29#include "kivio_stencil_spawner_info.h"
34#include <tqiodevice.h>
39#include <tqfileinfo.h>
43KivioPyStencilSpawner::KivioPyStencilSpawner( KivioStencilSpawnerSet *p )
44 : KivioStencilSpawner( p ),
47 m_pStencil =
new KivioPyStencil();
48 m_pStencil->setSpawner(
this);
50 m_pTargets =
new TQPtrList<KivioConnectorTarget>;
51 m_pTargets->setAutoDelete(
true);
54KivioPyStencilSpawner::~KivioPyStencilSpawner()
68 kdDebug(43000) <<
"* PyStencilSpawner "<< m_pInfo->id() <<
" deleted" << endl;
71TQDomElement KivioPyStencilSpawner::saveXML( TQDomDocument &doc )
73 TQDomElement spawnE = doc.createElement(
"KivioPyStencilSpawner");
75 XmlWriteString( spawnE,
"id", m_pInfo->id() );
80bool KivioPyStencilSpawner::load(
const TQString &file )
82 KivioConnectorTarget *pTarget;
83 TQDomDocument d(
"test");
85 m_filename = TQString(file);
88 if( f.open( IO_ReadOnly )==
false )
90 kdDebug(43000) <<
"KivioPyStencilSpawner::load() - Error opening stencil: " << file << endl;
96 TQDomElement root = d.documentElement();
98 TQDomNode node = root.firstChild();
101 while( !node.isNull() )
103 nodeName = node.nodeName();
105 if( nodeName.compare(
"KivioPyStencilSpawnerInfo")==0 )
107 m_pInfo->loadXML( (
const TQDomElement)node.toElement() );
109 else if( nodeName.compare(
"init")==0 )
111 m_pStencil->setSpawner(
this);
112 if ( ! m_pStencil->init( node.toElement().text() ) ) {
116 PyObject *targets = PyDict_GetItemString(m_pStencil->vars,
"connector_targets");
117 int size = PyList_Size( targets );
118 for (
int i=0; i<size; i++ ) {
120 PyObject *target = PyList_GetItem( targets, i );
121 float x = m_pStencil->getDoubleFromDict( target,
"x");
122 float y = m_pStencil->getDoubleFromDict( target,
"y");
123 pTarget =
new KivioConnectorTarget(x,y);
124 m_pStencil->m_pConnectorTargets->append( pTarget );
125 m_pTargets->append(pTarget->duplicate());
127 m_defWidth = m_pStencil->getDoubleFromDict( m_pStencil->vars,
"w");
128 m_defHeight = m_pStencil->getDoubleFromDict( m_pStencil->vars,
"h");
132 else if( nodeName.compare(
"resize")==0 )
134 e = node.toElement();
135 m_pStencil->resizeCode = node.toElement().text();
139 kdDebug(43000) <<
"KivioPyStencilSpawner::load() - Unknown node " << nodeName <<
" while loading " << file << endl;
142 node = node.nextSibling();
146 TQFileInfo finfo(file);
147 TQString pixFile = finfo.dirPath(
true) +
"/" + finfo.baseName() +
".xpm";
149 if(!m_icon.load( pixFile )) {
150 TQString pixFile = finfo.dirPath(
true) +
"/" + finfo.baseName() +
".png";
151 m_icon.load( pixFile );
164KivioStencil *KivioPyStencilSpawner::newStencil()
167 KivioStencil *pNewStencil = m_pStencil->duplicate();