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 #ifndef _CEGUIWindowFactoryManager_h_
00027 #define _CEGUIWindowFactoryManager_h_
00028
00029 #include "CEGUIBase.h"
00030 #include "CEGUIString.h"
00031 #include "CEGUISingleton.h"
00032 #include "CEGUILogger.h"
00033 #include "CEGUIIteratorBase.h"
00034 #include <map>
00035 #include <vector>
00036
00037 #if defined(_MSC_VER)
00038 # pragma warning(push)
00039 # pragma warning(disable : 4275)
00040 # pragma warning(disable : 4251)
00041 #endif
00042
00043
00044
00045 namespace CEGUI
00046 {
00051 class CEGUIBASE_API WindowFactoryManager : public Singleton<WindowFactoryManager>
00052 {
00053 public:
00054
00055
00056
00057 class CEGUIBASE_API AliasTargetStack
00058 {
00059 public:
00064 AliasTargetStack(void) {}
00065
00066
00071 ~AliasTargetStack(void) {}
00072
00073
00081 const String& getActiveTarget(void) const;
00082
00090 uint getStackedTargetCount(void) const;
00091
00092
00093 private:
00094 friend class WindowFactoryManager;
00095 typedef std::vector<String> TargetTypeStack;
00096
00097 TargetTypeStack d_targetStack;
00098 };
00099
00100
00101
00102
00103
00108 WindowFactoryManager(void)
00109 {
00110 Logger::getSingleton().logEvent((utf8*)"CEGUI::WindowFactoryManager singleton created");
00111 }
00112
00113
00118 ~WindowFactoryManager(void)
00119 {
00120 Logger::getSingleton().logEvent((utf8*)"CEGUI::WindowFactoryManager singleton destroyed");
00121 }
00122
00123
00124
00125
00126
00134 static WindowFactoryManager& getSingleton(void);
00135
00136
00144 static WindowFactoryManager* getSingletonPtr(void);
00145
00146
00160 void addFactory(WindowFactory* factory);
00161
00162
00177 void removeFactory(const String& name);
00178
00179
00194 void removeFactory(WindowFactory* factory);
00195
00196
00204 void removeAllFactories(void) {d_factoryRegistry.clear();}
00205
00206
00219 WindowFactory* getFactory(const String& type) const;
00220
00221
00232 bool isFactoryPresent(const String& name) const;
00233
00234
00260 void addWindowTypeAlias(const String& aliasName, const String& targetType);
00261
00262
00280 void removeWindowTypeAlias(const String& aliasName, const String& targetType);
00281
00282
00283 private:
00284
00285
00286
00287 typedef std::map<String, WindowFactory*> WindowFactoryRegistry;
00288 typedef std::map<String, AliasTargetStack> TypeAliasRegistry;
00289
00290 WindowFactoryRegistry d_factoryRegistry;
00291 TypeAliasRegistry d_aliasRegistry;
00292
00293 public:
00294
00295
00296
00297 typedef ConstBaseIterator<WindowFactoryRegistry> WindowFactoryIterator;
00298 typedef ConstBaseIterator<TypeAliasRegistry> TypeAliasIterator;
00299
00304 WindowFactoryIterator getIterator(void) const;
00305
00306
00311 TypeAliasIterator getAliasIterator(void) const;
00312 };
00313
00314 }
00315
00316
00317 #if defined(_MSC_VER)
00318 # pragma warning(pop)
00319 #endif
00320
00321 #endif // end of guard _CEGUIWindowFactoryManager_h_