19#include "kivio_common.h"
20#include "kivio_plugin_stencil_spawner.h"
21#include "kivio_sml_stencil_spawner.h"
22#include "kivio_dia_stencil_spawner.h"
23#include "kivio_py_stencil_spawner.h"
24#include "kivio_stencil_spawner.h"
25#include "kivio_stencil_spawner_set.h"
34KivioStencilSpawnerSet::KivioStencilSpawnerSet(
const TQString& name)
40 m_name = name.isEmpty() ? TQString(
"Untitled") : name;
42 m_pSpawners =
new TQPtrList<KivioStencilSpawner>;
43 m_pSpawners->setAutoDelete(
true);
46KivioStencilSpawnerSet::~KivioStencilSpawnerSet()
50 kdDebug(43000) <<
"KivioStencilSpawnerSet::~KivioStencilSpawnerSet() - " << m_name << endl;
63bool KivioStencilSpawnerSet::loadXML(
const TQDomElement & )
79TQDomElement KivioStencilSpawnerSet::saveXML( TQDomDocument &doc )
81 TQDomElement spawnE = doc.createElement(
"KivioStencilSpawnerSet");
83 XmlWriteString( spawnE,
"id", m_id );
84 XmlWriteString(spawnE,
"hidden", (m_hidden ?
"true" :
"false"));
86 KivioStencilSpawner *pSpawner = m_pSpawners->first();
89 spawnE.appendChild( pSpawner->saveXML( doc ) );
91 pSpawner = m_pSpawners->next();
98bool KivioStencilSpawnerSet::loadDir(
const TQString &dirName )
104 m_name = readTitle( dirName );
105 m_id = readId( dirName );
107 d.setNameFilter(
"*.so *.sml *.ksp *.spy *.shape");
108 m_files = d.entryList();
113KivioStencilSpawner* KivioStencilSpawnerSet::loadFile(
const TQString &fileName )
115 for (KivioStencilSpawner* ss = m_pSpawners->first(); ss; ss = m_pSpawners->next() )
116 if (ss->fileName() == fileName)
119 KivioStencilSpawner *pSpawner;
121 if( fileName.contains(
".sml",
false ) )
123 pSpawner =
new KivioSMLStencilSpawner(
this);
125 else if( fileName.contains(
".ksp",
false ) )
127 pSpawner =
new KivioPluginStencilSpawner(
this);
129 else if( fileName.contains(
".so",
false ) )
131 pSpawner =
new KivioPluginStencilSpawner(
this);
133 else if( fileName.contains(
".spy",
false ) )
135 pSpawner =
new KivioPyStencilSpawner(
this);
137 else if( fileName.contains(
".shape",
false ) )
139 pSpawner =
new KivioDiaStencilSpawner(
this);
146 if( pSpawner->load( fileName )==
true )
147 m_pSpawners->append( pSpawner );
157TQString KivioStencilSpawnerSet::readTitle(
const TQString &dir )
159 TQDomDocument d(
"StencilSPawnerSet");
160 TQDomElement root, nodeElement;
163 TQString title, origTitle;
164 TQFile f(dir+
"/desc");
166 if( f.open( IO_ReadOnly )==
false )
168 kdDebug(43000) <<
"KivioStencilSpawnerSet::readTitle() - Error opening stencil set title: " <<
169 dir <<
"/desc" << endl;
170 return dir.right(dir.length() - dir.findRev(
'/')-1);
175 root = d.documentElement();
176 node = root.firstChild();
178 while( !node.isNull() )
180 nodeName = node.nodeName();
181 nodeElement = node.toElement();
183 if( nodeName.compare(
"Title")==0 && nodeElement.hasAttribute(
"lang"))
185 if(nodeElement.attribute(
"lang") == TDEGlobal::locale()->language()) {
186 title = XmlReadString( nodeElement,
"data", dir );
189 else if( nodeName.compare(
"Title")==0 && !nodeElement.hasAttribute(
"lang"))
191 origTitle = XmlReadString( nodeElement,
"data", dir );
194 node = node.nextSibling();
197 if(title.isEmpty()) {
198 title = i18n(
"Stencils", origTitle.utf8() );
204TQString KivioStencilSpawnerSet::readId(
const TQString &dir )
206 TQDomDocument d(
"StencilSPawnerSet");
211 TQFile f(dir+
"/desc");
213 if( f.open( IO_ReadOnly )==
false )
215 kdDebug(43000) <<
"KivioStencilSpawnerSet::readId() - Error opening stencil set description: " <<
216 dir <<
"/desc" << endl;
222 root = d.documentElement();
223 node = root.firstChild();
225 while( !node.isNull() )
227 nodeName = node.nodeName();
229 if( nodeName.compare(
"Id")==0 )
231 theid = XmlReadString( node.toElement(),
"data", dir );
235 node = node.nextSibling();
238 kdDebug(43000) <<
"KivioStencilSpawnerSet::readId() - No id found in "
239 << dir <<
"/desc" << endl;
244TQString KivioStencilSpawnerSet::readDescription(
const TQString& dir)
246 TQDomDocument d(
"StencilSPawnerSet");
247 TQDomElement root, nodeElement;
250 TQFile f(dir +
"/desc");
252 if( f.open( IO_ReadOnly )==
false )
254 kdDebug(43000) <<
"KivioStencilSpawnerSet::readId() - Error opening stencil set description: " <<
255 dir <<
"/desc" << endl;
261 root = d.documentElement();
262 node = root.firstChild();
263 TQString description, origDesc;
265 while( !node.isNull() )
267 nodeName = node.nodeName();
268 nodeElement = node.toElement();
270 if( nodeName.compare(
"Description")==0 && nodeElement.hasAttribute(
"lang"))
272 if(nodeElement.attribute(
"lang") == TDEGlobal::locale()->language()) {
273 description = nodeElement.text();
276 else if( nodeName.compare(
"Description")==0 && !nodeElement.hasAttribute(
"lang"))
278 origDesc = nodeElement.text();
281 node = node.nextSibling();
284 if(description.isEmpty() && !origDesc.isEmpty()) {
285 description = i18n(
"Stencils", origDesc.utf8() );
292KivioStencilSpawner* KivioStencilSpawnerSet::find(
const TQString&
id)
294 if(!m_pSpawners || m_pSpawners->isEmpty()) {
298 KivioStencilSpawner* pSpawner = m_pSpawners->first();
303 if( pSpawner->info()->id() ==
id )
308 pSpawner = m_pSpawners->next();
314void KivioStencilSpawnerSet::addSpawner(KivioStencilSpawner* spawner)
317 m_pSpawners->append(spawner);