00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "CEGUIImagesetManager.h"
00027 #include "CEGUIExceptions.h"
00028 #include "CEGUILogger.h"
00029 #include "CEGUIImageset.h"
00030
00031
00032 namespace CEGUI
00033 {
00034
00035
00036
00037
00038 template<> ImagesetManager* Singleton<ImagesetManager>::ms_Singleton = NULL;
00039
00040
00041
00042
00043
00044 ImagesetManager::ImagesetManager(void)
00045 {
00046 Logger::getSingleton().logEvent((utf8*)"CEGUI::ImagesetManager singleton created");
00047 }
00048
00049
00050
00051
00052
00053 ImagesetManager::~ImagesetManager(void)
00054 {
00055 Logger::getSingleton().logEvent((utf8*)"---- Begining cleanup of Imageset system ----");
00056
00057 destroyAllImagesets();
00058
00059 Logger::getSingleton().logEvent((utf8*)"CEGUI::ImagesetManager singleton destroyed");
00060 }
00061
00062
00063
00064
00065
00066
00067 Imageset* ImagesetManager::createImageset(const String& name, Texture* texture)
00068 {
00069 Logger::getSingleton().logEvent((utf8*)"Attempting to create Imageset '" + name +"' with texture only.");
00070
00071 if (isImagesetPresent(name))
00072 {
00073 throw AlreadyExistsException("ImagesetManager::createImageset - An Imageset object named '" + name + "' already exists.");
00074 }
00075
00076 Imageset* temp = new Imageset(name, texture);
00077 d_imagesets[name] = temp;
00078
00079 return temp;
00080 }
00081
00082
00083
00084
00085
00086 Imageset* ImagesetManager::createImageset(const String& filename, const String& resourceGroup)
00087 {
00088 Logger::getSingleton().logEvent((utf8*)"Attempting to create an Imageset from the information specified in file '" + filename + "'.");
00089
00090 Imageset* temp = new Imageset(filename, resourceGroup);
00091
00092 String name = temp->getName();
00093
00094 if (isImagesetPresent(name))
00095 {
00096 delete temp;
00097
00098 throw AlreadyExistsException("ImagesetManager::createImageset - An Imageset object named '" + name + "' already exists.");
00099 }
00100
00101 d_imagesets[name] = temp;
00102
00103 return temp;
00104 }
00105
00106
00107
00108
00109
00110 Imageset* ImagesetManager::createImagesetFromImageFile(const String& name, const String& filename, const String& resourceGroup)
00111 {
00112 Logger::getSingleton().logEvent((utf8*)"Attempting to create Imageset '" + name + "' using image file '" + filename + "'.");
00113
00114 if (isImagesetPresent(name))
00115 {
00116 throw AlreadyExistsException("ImagesetManager::createImageset - An Imageset object named '" + name + "' already exists.");
00117 }
00118
00119 Imageset* temp = new Imageset(name, filename, resourceGroup);
00120 d_imagesets[name] = temp;
00121
00122 return temp;
00123 }
00124
00125
00126
00127
00128
00129 void ImagesetManager::destroyImageset(const String& name)
00130 {
00131 ImagesetRegistry::iterator pos = d_imagesets.find(name);
00132
00133 if (pos != d_imagesets.end())
00134 {
00135 String tmpName(name);
00136
00137 delete pos->second;
00138 d_imagesets.erase(pos);
00139
00140 Logger::getSingleton().logEvent((utf8*)"Imageset '" + tmpName +"' has been destroyed.", Informative);
00141 }
00142
00143 }
00144
00145
00146
00147
00148
00149 void ImagesetManager::destroyImageset(Imageset* imageset)
00150 {
00151 if (imageset != NULL)
00152 {
00153 destroyImageset(imageset->getName());
00154 }
00155
00156 }
00157
00158
00159
00160
00161
00162 void ImagesetManager::destroyAllImagesets(void)
00163 {
00164 while (!d_imagesets.empty())
00165 {
00166 destroyImageset(d_imagesets.begin()->first);
00167 }
00168 }
00169
00170
00171
00172
00173 Imageset* ImagesetManager::getImageset(const String& name) const
00174 {
00175 ImagesetRegistry::const_iterator pos = d_imagesets.find(name);
00176
00177 if (pos == d_imagesets.end())
00178 {
00179 throw UnknownObjectException("ImagesetManager::getImageset - No Imageset named '" + name + "' is present in the system.");
00180 }
00181
00182 return pos->second;
00183 }
00184
00185
00186
00187
00188
00189
00190 void ImagesetManager::notifyScreenResolution(const Size& size)
00191 {
00192
00193 ImagesetRegistry::iterator pos = d_imagesets.begin(), end = d_imagesets.end();
00194
00195 for (; pos != end; ++pos)
00196 {
00197 pos->second->notifyScreenResolution(size);
00198 }
00199
00200 }
00201
00202
00203 ImagesetManager& ImagesetManager::getSingleton(void)
00204 {
00205 return Singleton<ImagesetManager>::getSingleton();
00206 }
00207
00208
00209 ImagesetManager* ImagesetManager::getSingletonPtr(void)
00210 {
00211 return Singleton<ImagesetManager>::getSingletonPtr();
00212 }
00213
00214
00215
00216
00217
00218
00219 ImagesetManager::ImagesetIterator ImagesetManager::getIterator(void) const
00220 {
00221 return ImagesetIterator(d_imagesets.begin(), d_imagesets.end());
00222 }
00223
00224
00225 void ImagesetManager::writeImagesetToStream(const String& imageset, OutStream& out_stream) const
00226 {
00227 const Imageset* iset = getImageset(imageset);
00228
00229
00230 out_stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl;
00231
00232
00233 iset->writeXMLToStream(out_stream);
00234 }
00235
00236
00237 }