00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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
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
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
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
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
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
00158 QString myString = QString("<h3>" + mName + "</h3>\n");
00159 myString += QString("<p>" + mDescription + "</p>\n");
00160
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
00176 QDomDocument myDocument("mydocument");
00177 myDocument.setContent(theXml);
00178 QDomElement myTopElement = myDocument.firstChildElement("Environment");
00179
00180 mName=Omgui::xmlDecode(myTopElement.attribute("Name"));
00181 mDescription=Omgui::xmlDecode(myTopElement.attribute("Description"));
00182 setGuid(myTopElement.attribute("Guid"));
00183
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
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 }