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 "CEGUISchemeManager.h"
00027 #include "CEGUIExceptions.h"
00028 #include "CEGUILogger.h"
00029 #include "CEGUIScheme.h"
00030
00031
00032 namespace CEGUI
00033 {
00034
00035
00036
00037
00038 template<> SchemeManager* Singleton<SchemeManager>::ms_Singleton = NULL;
00039
00040
00041
00042
00043
00044
00045 SchemeManager::SchemeManager(void)
00046 {
00047 Logger::getSingleton().logEvent((utf8*)"CEGUI::SchemeManager singleton created.");
00048 }
00049
00050
00051
00052
00053
00054 SchemeManager::~SchemeManager(void)
00055 {
00056 Logger::getSingleton().logEvent((utf8*)"---- Begining cleanup of GUI Scheme system ----");
00057
00058 unloadAllSchemes();
00059
00060 Logger::getSingleton().logEvent((utf8*)"CEGUI::SchemeManager singleton destroyed.");
00061 }
00062
00063
00064
00065
00066
00067 Scheme* SchemeManager::loadScheme(const String& scheme_filename, const String& resourceGroup)
00068 {
00069 Logger::getSingleton().logEvent((utf8*)"Attempting to load Scheme from file '" + scheme_filename + "'.");
00070
00071 Scheme* tmp = new Scheme(scheme_filename, resourceGroup);
00072 String name = tmp->getName();
00073 d_schemes[name] = tmp;
00074 return tmp;
00075 }
00076
00077
00078
00079
00080
00081 void SchemeManager::unloadScheme(const String& scheme_name)
00082 {
00083 SchemeRegistry::iterator pos = d_schemes.find(scheme_name);
00084
00085 if (pos != d_schemes.end())
00086 {
00087 String tmpName(scheme_name);
00088
00089 delete pos->second;
00090 d_schemes.erase(pos);
00091
00092 Logger::getSingleton().logEvent((utf8*)"Scheme '" + tmpName + "' has been unloaded.");
00093 }
00094
00095 }
00096
00097
00098
00099
00100
00101 Scheme* SchemeManager::getScheme(const String& name) const
00102 {
00103 SchemeRegistry::const_iterator pos = d_schemes.find(name);
00104
00105 if (pos == d_schemes.end())
00106 {
00107 throw UnknownObjectException("SchemeManager::getScheme - A Scheme object with the specified name '" + name +"' does not exist within the system");
00108 }
00109
00110 return pos->second;
00111 }
00112
00113
00114 SchemeManager& SchemeManager::getSingleton(void)
00115 {
00116 return Singleton<SchemeManager>::getSingleton();
00117 }
00118
00119
00120 SchemeManager* SchemeManager::getSingletonPtr(void)
00121 {
00122 return Singleton<SchemeManager>::getSingletonPtr();
00123 }
00124
00125
00126
00127
00128
00129
00130 SchemeManager::SchemeIterator SchemeManager::getIterator(void) const
00131 {
00132 return SchemeIterator(d_schemes.begin(), d_schemes.end());
00133 }
00134
00135
00136
00137
00138
00139 void SchemeManager::unloadAllSchemes(void)
00140 {
00141
00142 while (!d_schemes.empty())
00143 {
00144 unloadScheme(d_schemes.begin()->first);
00145 }
00146
00147 }
00148
00149
00150 }