Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

omglayerset.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002   omglayerset.cpp  -  description
00003   -------------------
00004 begin                : March 2006
00005 copyright            : (C) 2006 by Tim Sutton
00006 email                : tim@linfiniti.com
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #include "omglayerset.h"
00019 #include <QStringList>
00020 #include <QMapIterator> 
00021 #include <QDebug>
00022 #include <QRegExp>
00023 #include <QDomDocument>
00024 #include <QDomElement>
00025 #include <QDir>
00026 
00027 #include <omgui.h>
00028 OmgLayerSet::OmgLayerSet() : OmgSerialisable(), OmgGuid() 
00029 {
00030 
00031 }
00032 OmgLayerSet::~OmgLayerSet()
00033 {
00034 
00035 }
00036 bool OmgLayerSet::addLayer(OmgLayer theLayer)
00037 {
00038   //@TODO add some quality control for the added layer?
00039   mLayersMap[theLayer.name()]=theLayer;
00040   return true;
00041 }
00042 bool OmgLayerSet::removeLayer(OmgLayer theLayer)
00043 {
00044   mLayersMap.remove(theLayer.name());
00045   return true;
00046 }
00047 bool OmgLayerSet::removeLayer(QString theLayer)
00048 {
00049   mLayersMap.remove(theLayer);
00050   return true;
00051 }
00052 
00053 //
00054 // Accessors
00055 //
00056 
00057 QString OmgLayerSet::name() const
00058 {
00059   return mName;
00060 }
00061 QString OmgLayerSet::description() const
00062 {
00063   return mDescription;
00064 }
00065 OmgLayer  OmgLayerSet::mask() const
00066 {
00067   return mMask;
00068 }
00069 
00070 //
00071 // Mutators
00072 //
00073 
00074 void OmgLayerSet::setName(QString theName)
00075 {
00076   mName=theName;
00077 }
00078 void OmgLayerSet::setDescription(QString theDescription)
00079 {
00080   mDescription = theDescription;
00081 }
00082 void OmgLayerSet::setMask(OmgLayer theMask)
00083 {
00084   mMask = theMask;
00085 }
00086 
00087 
00088 
00089 //
00090 // Ancilliary methods
00091 //
00092 
00093 QString OmgLayerSet::maskName() const
00094 {
00095   return mMask.name();
00096 }
00097 
00098 int OmgLayerSet::count() const
00099 {
00100   return mLayersMap.count();
00101 }
00102 
00103 QString OmgLayerSet::toString() const
00104 {
00105         QString myString ("Layer Set Name: " + mName + "\n");
00106         myString += "Layer Set Description: " + mDescription + "\n";
00107         myString += "Layer Set Unique Id: " + guid() + "\n";
00108   LayersMap::const_iterator myIterator;
00109   for (myIterator = mLayersMap.begin(); myIterator != mLayersMap.end(); ++myIterator)
00110   {
00111     OmgLayer myLayer = myIterator.value();
00112     myString += myLayer.name() + "\n";
00113   }
00114   return myString;
00115 }
00116 OmgLayerSet::LayersMap OmgLayerSet::layers() const
00117 {
00118   return mLayersMap;
00119 }
00120 QStringList OmgLayerSet::nameList() const
00121 {
00122   QStringList myList;
00123   LayersMap::const_iterator myIterator;
00124   for (myIterator = mLayersMap.begin(); myIterator != mLayersMap.end(); ++myIterator)
00125   {
00126     OmgLayer myLayer = myIterator.value();
00127     myList.append(myLayer.name());
00128   }
00129   return myList;
00130 
00131 }
00132 
00133 QString OmgLayerSet::toXml() const
00134 {
00135   QString myString = QString("    <Environment NumLayers=\"" 
00136       + QString::number(count())+"\" Name=\"" + Omgui::xmlEncode(mName) + "\" Description=\"" 
00137       + Omgui::xmlEncode(mDescription) 
00138       + "\" Guid=\"" + guid() + "\">\n");
00139 
00140   LayersMap::const_iterator myIterator;
00141   for (myIterator = mLayersMap.begin(); myIterator != mLayersMap.end(); ++myIterator)
00142   {
00143     OmgLayer myLayer = myIterator.value();
00144     myString += myLayer.toXml() + "\n";
00145   }
00146   //ignore categorical attribute for mask
00147   myString+=QString("      <Mask Id=\"" + mMask.name() + "\"/>\n");
00148   myString+=QString("    </Environment>\n");
00149 
00150   return myString;
00151 }
00152 
00153 
00154 
00155 QString OmgLayerSet::toHtml() const
00156 {
00157   //Iterate through creation layers
00158   QString  myString = QString("<h3>" + mName + "</h3>\n");
00159   myString += QString("<p>" + mDescription + "</p>\n");
00160   //myString += QString("<p>GUID: " + guid() + "</p>\n");
00161   myString += QString("        <ul>\n");
00162   LayersMap::const_iterator myIterator;
00163   for (myIterator = mLayersMap.begin(); myIterator != mLayersMap.end(); ++myIterator)
00164   {
00165     OmgLayer myLayer = myIterator.value();
00166     myString+=QString("          <li>"+myLayer.name()+"</li>\n");
00167   }
00168   myString+=QString("        </ul>\n");
00169   myString+="<p>Mask Layer: " + mMask.name() + "</p>\n";
00170   return myString;
00171 }
00172 
00173 bool OmgLayerSet::fromXml(const QString theXml) 
00174 {
00175   //qDebug("OmgLayerSet::fromXml called....");
00176   QDomDocument myDocument("mydocument");
00177   myDocument.setContent(theXml);
00178   QDomElement myTopElement = myDocument.firstChildElement("Environment");
00179   //get the name and description attributes from the top level tag
00180   mName=Omgui::xmlDecode(myTopElement.attribute("Name"));
00181   mDescription=Omgui::xmlDecode(myTopElement.attribute("Description"));
00182   setGuid(myTopElement.attribute("Guid"));
00183   //now get the layer names from the nested tags
00184   QDomNode myNode = myTopElement.firstChild();
00185   while(!myNode.isNull()) 
00186   {
00187     QDomElement myElement = myNode.toElement(); 
00188     if(!myElement.isNull()) 
00189     {
00190       OmgLayer myLayer;
00191       myLayer.setName(myElement.attribute("Id"));
00192       if (myElement.attribute("IsCategorical")=="0")
00193       {
00194         myLayer.setCategorical(false);
00195       }
00196       else
00197       {
00198         myLayer.setCategorical(true);
00199       }
00200 
00201       //see if its a layer or the mask
00202       if (myElement.tagName()=="Map")
00203       {
00204         addLayer(myLayer);
00205       }
00206       else if(myElement.tagName()=="Mask")
00207       {
00208         setMask(myLayer);
00209       }
00210       else
00211       {
00212         qDebug("Unrecognised tag!");
00213       }
00214     }
00215     myNode = myNode.nextSibling();
00216   }
00217   return true;
00218 }
00219 
00220 bool OmgLayerSet::save(QString theFileName) const
00221 {
00222   if (theFileName.isEmpty())
00223   {
00224     theFileName = Omgui::userLayersetDirPath() + QDir::separator() + guid() + ".xml";
00225   }
00226   QFile myFile(theFileName);
00227   if (!myFile.open(QIODevice::WriteOnly | QIODevice::Text))
00228   {
00229     return false;
00230   }
00231   QString myXml = toXml();
00232   QTextStream myStream(&myFile);
00233   myStream << myXml;
00234   myFile.close();
00235   qDebug("Layerset saved to: " + theFileName.toLocal8Bit());
00236   return true;
00237 }

Generated on Mon Apr 28 15:08:43 2008 for openModellerDesktop by  doxygen 1.4.1-20050210