kivio
kivio_stencil_spawner_set.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "kivio_common.h"
00020 #include "kivio_plugin_stencil_spawner.h"
00021 #include "kivio_sml_stencil_spawner.h"
00022 #include "kivio_dia_stencil_spawner.h"
00023 #include "kivio_py_stencil_spawner.h"
00024 #include "kivio_stencil_spawner.h"
00025 #include "kivio_stencil_spawner_set.h"
00026
00027 #include <qdir.h>
00028 #include <qfile.h>
00029 #include <qstring.h>
00030 #include <kdebug.h>
00031 #include <kglobal.h>
00032 #include <klocale.h>
00033
00034 KivioStencilSpawnerSet::KivioStencilSpawnerSet(const QString& name)
00035 : m_pSpawners(NULL),
00036 m_pSelected(NULL)
00037 {
00038 m_hidden = false;
00039 m_dir = "";
00040 m_name = name.isEmpty() ? QString("Untitled") : name;
00041
00042 m_pSpawners = new QPtrList<KivioStencilSpawner>;
00043 m_pSpawners->setAutoDelete(true);
00044 }
00045
00046 KivioStencilSpawnerSet::~KivioStencilSpawnerSet()
00047 {
00048 delete m_pSpawners;
00049 m_pSpawners = NULL;
00050 kdDebug(43000) << "KivioStencilSpawnerSet::~KivioStencilSpawnerSet() - " << m_name << endl;
00051 }
00052
00053
00063 bool KivioStencilSpawnerSet::loadXML( const QDomElement & )
00064 {
00065 return false;
00066 }
00067
00068
00079 QDomElement KivioStencilSpawnerSet::saveXML( QDomDocument &doc )
00080 {
00081 QDomElement spawnE = doc.createElement("KivioStencilSpawnerSet");
00082
00083 XmlWriteString( spawnE, "id", m_id );
00084 XmlWriteString(spawnE, "hidden", (m_hidden ? "true" : "false"));
00085
00086 KivioStencilSpawner *pSpawner = m_pSpawners->first();
00087 while( pSpawner )
00088 {
00089 spawnE.appendChild( pSpawner->saveXML( doc ) );
00090
00091 pSpawner = m_pSpawners->next();
00092 }
00093
00094
00095 return spawnE;
00096 }
00097
00098 bool KivioStencilSpawnerSet::loadDir( const QString &dirName )
00099 {
00100 QDir d(dirName);
00101 QString fileName;
00102
00103 m_dir = dirName;
00104 m_name = readTitle( dirName );
00105 m_id = readId( dirName );
00106
00107 d.setNameFilter("*.so *.sml *.ksp *.spy *.shape");
00108 m_files = d.entryList();
00109
00110 return true;
00111 }
00112
00113 KivioStencilSpawner* KivioStencilSpawnerSet::loadFile( const QString &fileName )
00114 {
00115 for (KivioStencilSpawner* ss = m_pSpawners->first(); ss; ss = m_pSpawners->next() )
00116 if (ss->fileName() == fileName)
00117 return ss;
00118
00119 KivioStencilSpawner *pSpawner;
00120
00121 if( fileName.contains( ".sml", false ) )
00122 {
00123 pSpawner = new KivioSMLStencilSpawner(this);
00124 }
00125 else if( fileName.contains( ".ksp", false ) )
00126 {
00127 pSpawner = new KivioPluginStencilSpawner(this);
00128 }
00129 else if( fileName.contains( ".so", false ) )
00130 {
00131 pSpawner = new KivioPluginStencilSpawner(this);
00132 }
00133 else if( fileName.contains( ".spy", false ) )
00134 {
00135 pSpawner = new KivioPyStencilSpawner(this);
00136 }
00137 else if( fileName.contains( ".shape", false ) )
00138 {
00139 pSpawner = new KivioDiaStencilSpawner(this);
00140 }
00141 else
00142 {
00143 return 0;
00144 }
00145
00146 if( pSpawner->load( fileName )==true )
00147 m_pSpawners->append( pSpawner );
00148 else
00149 {
00150 delete pSpawner;
00151 return 0;
00152 }
00153
00154 return pSpawner;
00155 }
00156
00157 QString KivioStencilSpawnerSet::readTitle( const QString &dir )
00158 {
00159 QDomDocument d("StencilSPawnerSet");
00160 QDomElement root, nodeElement;
00161 QDomNode node;
00162 QString nodeName;
00163 QString title, origTitle;
00164 QFile f(dir+"/desc");
00165
00166 if( f.open( IO_ReadOnly )==false )
00167 {
00168 kdDebug(43000) << "KivioStencilSpawnerSet::readTitle() - Error opening stencil set title: " <<
00169 dir << "/desc" << endl;
00170 return dir.right(dir.length() - dir.findRev('/')-1);
00171 }
00172
00173 d.setContent(&f);
00174
00175 root = d.documentElement();
00176 node = root.firstChild();
00177
00178 while( !node.isNull() )
00179 {
00180 nodeName = node.nodeName();
00181 nodeElement = node.toElement();
00182
00183 if( nodeName.compare("Title")==0 && nodeElement.hasAttribute("lang"))
00184 {
00185 if(nodeElement.attribute("lang") == KGlobal::locale()->language()) {
00186 title = XmlReadString( nodeElement, "data", dir );
00187 }
00188 }
00189 else if( nodeName.compare("Title")==0 && !nodeElement.hasAttribute("lang"))
00190 {
00191 origTitle = XmlReadString( nodeElement, "data", dir );
00192 }
00193
00194 node = node.nextSibling();
00195 }
00196
00197 if(title.isEmpty()) {
00198 title = i18n( "Stencils", origTitle.utf8() );
00199 }
00200
00201 return title;
00202 }
00203
00204 QString KivioStencilSpawnerSet::readId( const QString &dir )
00205 {
00206 QDomDocument d("StencilSPawnerSet");
00207 QDomElement root;
00208 QDomNode node;
00209 QString nodeName;
00210 QString theid;
00211 QFile f(dir+"/desc");
00212
00213 if( f.open( IO_ReadOnly )==false )
00214 {
00215 kdDebug(43000) << "KivioStencilSpawnerSet::readId() - Error opening stencil set description: " <<
00216 dir << "/desc" << endl;
00217 return "";
00218 }
00219
00220 d.setContent(&f);
00221
00222 root = d.documentElement();
00223 node = root.firstChild();
00224
00225 while( !node.isNull() )
00226 {
00227 nodeName = node.nodeName();
00228
00229 if( nodeName.compare("Id")==0 )
00230 {
00231 theid = XmlReadString( node.toElement(), "data", dir );
00232 return theid;
00233 }
00234
00235 node = node.nextSibling();
00236 }
00237
00238 kdDebug(43000) << "KivioStencilSpawnerSet::readId() - No id found in "
00239 << dir << "/desc" << endl;
00240
00241 return "";
00242 }
00243
00244 QString KivioStencilSpawnerSet::readDescription(const QString& dir)
00245 {
00246 QDomDocument d("StencilSPawnerSet");
00247 QDomElement root, nodeElement;
00248 QDomNode node;
00249 QString nodeName;
00250 QFile f(dir + "/desc");
00251
00252 if( f.open( IO_ReadOnly )==false )
00253 {
00254 kdDebug(43000) << "KivioStencilSpawnerSet::readId() - Error opening stencil set description: " <<
00255 dir << "/desc" << endl;
00256 return "";
00257 }
00258
00259 d.setContent(&f);
00260
00261 root = d.documentElement();
00262 node = root.firstChild();
00263 QString description, origDesc;
00264
00265 while( !node.isNull() )
00266 {
00267 nodeName = node.nodeName();
00268 nodeElement = node.toElement();
00269
00270 if( nodeName.compare("Description")==0 && nodeElement.hasAttribute("lang"))
00271 {
00272 if(nodeElement.attribute("lang") == KGlobal::locale()->language()) {
00273 description = nodeElement.text();
00274 }
00275 }
00276 else if( nodeName.compare("Description")==0 && !nodeElement.hasAttribute("lang"))
00277 {
00278 origDesc = nodeElement.text();
00279 }
00280
00281 node = node.nextSibling();
00282 }
00283
00284 if(description.isEmpty() && !origDesc.isEmpty()) {
00285 description = i18n( "Stencils", origDesc.utf8() );
00286 }
00287
00288 return description;
00289 }
00290
00291
00292 KivioStencilSpawner* KivioStencilSpawnerSet::find( const QString& id)
00293 {
00294 if(!m_pSpawners || m_pSpawners->isEmpty()) {
00295 return 0;
00296 }
00297
00298 KivioStencilSpawner* pSpawner = m_pSpawners->first();
00299
00300 while( pSpawner )
00301 {
00302
00303 if( pSpawner->info()->id() == id )
00304 {
00305 return pSpawner;
00306 }
00307
00308 pSpawner = m_pSpawners->next();
00309 }
00310
00311 return NULL;
00312 }
00313
00314 void KivioStencilSpawnerSet::addSpawner(KivioStencilSpawner* spawner)
00315 {
00316 if(spawner) {
00317 m_pSpawners->append(spawner);
00318 }
00319 }
|