Crazy Eddies GUI System: CEGUIWindowFactoryManager.h Source File

Crazy Eddies GUI System 0.7.6

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

CEGUIWindowFactoryManager.h

    00001 /***********************************************************************
    00002         filename:       CEGUIWindowFactoryManager.h
    00003         created:        22/2/2004
    00004         author:         Paul D Turner
    00005
    00006         purpose:        Defines interface for WindowFactoryManager class
    00007 *************************************************************************/
    00008 /***************************************************************************
    00009  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
    00010  *
    00011  *   Permission is hereby granted, free of charge, to any person obtaining
    00012  *   a copy of this software and associated documentation files (the
    00013  *   "Software"), to deal in the Software without restriction, including
    00014  *   without limitation the rights to use, copy, modify, merge, publish,
    00015  *   distribute, sublicense, and/or sell copies of the Software, and to
    00016  *   permit persons to whom the Software is furnished to do so, subject to
    00017  *   the following conditions:
    00018  *
    00019  *   The above copyright notice and this permission notice shall be
    00020  *   included in all copies or substantial portions of the Software.
    00021  *
    00022  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    00023  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    00024  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    00025  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
    00026  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    00027  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    00028  *   OTHER DEALINGS IN THE SOFTWARE.
    00029  ***************************************************************************/
    00030 #ifndef _CEGUIWindowFactoryManager_h_
    00031 #define _CEGUIWindowFactoryManager_h_
    00032
    00033 #include "CEGUIBase.h"
    00034 #include "CEGUIString.h"
    00035 #include "CEGUISingleton.h"
    00036 #include "CEGUILogger.h"
    00037 #include "CEGUIIteratorBase.h"
    00038 #include "CEGUIWindowFactory.h"
    00039 #include <map>
    00040 #include <vector>
    00041
    00042 #if defined(_MSC_VER)
    00043 #       pragma warning(push)
    00044 #       pragma warning(disable : 4275)
    00045 #       pragma warning(disable : 4251)
    00046 #endif
    00047
    00048
    00049 // Start of CEGUI namespace section
    00050 namespace CEGUI
    00051 {
    00060 class CEGUIEXPORT WindowFactoryManager : public Singleton<WindowFactoryManager>
    00061 {
    00062 public:
    00067     struct CEGUIEXPORT FalagardWindowMapping
    00068     {
    00069         String  d_windowType;
    00070         String  d_lookName;
    00071         String  d_baseType;
    00072         String  d_rendererType;
    00073         String  d_effectName;
    00074     };
    00075
    00080         class CEGUIEXPORT AliasTargetStack
    00081         {
    00082         public:
    00087                 AliasTargetStack(void) {}
    00088
    00089
    00094                 ~AliasTargetStack(void) {}
    00095
    00096
    00104                 const String&   getActiveTarget(void) const;
    00105
    00113                 uint    getStackedTargetCount(void) const;
    00114
    00115
    00116         private:
    00117                 friend class WindowFactoryManager;
    00118                 typedef std::vector<String>     TargetTypeStack;
    00119
    00120                 TargetTypeStack d_targetStack;
    00121         };
    00122
    00123
    00124         /*************************************************************************
    00125                 Construction and Destruction
    00126         *************************************************************************/
    00131         WindowFactoryManager(void);
    00132
    00133
    00138         ~WindowFactoryManager(void)
    00139         {
    00140                 Logger::getSingleton().logEvent("CEGUI::WindowFactoryManager singleton destroyed");
    00141         }
    00142
    00143
    00144         /*************************************************************************
    00145                 Public Interface
    00146         *************************************************************************/
    00160         void    addFactory(WindowFactory* factory);
    00161
    00175     template <typename T>
    00176     static void addFactory();
    00177
    00178
    00193         void    removeFactory(const String& name);
    00194
    00195
    00210         void    removeFactory(WindowFactory* factory);
    00211
    00212
    00220     void removeAllFactories(void);
    00221
    00222
    00235         WindowFactory*  getFactory(const String& type) const;
    00236
    00237
    00252     bool        isFactoryPresent(const String& name) const;
    00253
    00254
    00280         void    addWindowTypeAlias(const String& aliasName, const String& targetType);
    00281
    00282
    00300         void    removeWindowTypeAlias(const String& aliasName, const String& targetType);
    00301
    00333     void addFalagardWindowMapping(const String& newType,
    00334                                   const String& targetType,
    00335                                   const String& lookName,
    00336                                   const String& renderer,
    00337                                   const String& effectName = String(""));
    00338
    00346     void removeFalagardWindowMapping(const String& type);
    00347
    00359     bool isFalagardMappedType(const String& type) const;
    00360
    00373     const String& getMappedLookForType(const String& type) const;
    00374
    00387     const String& getMappedRendererForType(const String& type) const;
    00388
    00407     String getDereferencedAliasType(const String& type) const;
    00408
    00421     const FalagardWindowMapping& getFalagardMappingForType(const String& type) const;
    00422
    00423 private:
    00424         /*************************************************************************
    00425                 Implementation Data
    00426         *************************************************************************/
    00427         typedef std::map<String, WindowFactory*, String::FastLessCompare>       WindowFactoryRegistry;
    00428         typedef std::map<String, AliasTargetStack, String::FastLessCompare>     TypeAliasRegistry;
    00429     typedef std::map<String, FalagardWindowMapping, String::FastLessCompare> FalagardMapRegistry;
    00430
    00431     typedef std::vector<WindowFactory*> OwnedWindowFactoryList;
    00432
    00433         WindowFactoryRegistry   d_factoryRegistry;
    00434         TypeAliasRegistry               d_aliasRegistry;
    00435     FalagardMapRegistry     d_falagardRegistry;
    00436
    00437     static OwnedWindowFactoryList  d_ownedFactories;
    00438
    00439 public:
    00440         /*************************************************************************
    00441                 Iterator stuff
    00442         *************************************************************************/
    00443         typedef ConstBaseIterator<WindowFactoryRegistry>        WindowFactoryIterator;
    00444         typedef ConstBaseIterator<TypeAliasRegistry>            TypeAliasIterator;
    00445     typedef ConstBaseIterator<FalagardMapRegistry>      FalagardMappingIterator;
    00446
    00451         WindowFactoryIterator   getIterator(void) const;
    00452
    00453
    00458         TypeAliasIterator       getAliasIterator(void) const;
    00459
    00460
    00465     FalagardMappingIterator getFalagardMappingIterator() const;
    00466 };
    00467
    00468 //----------------------------------------------------------------------------//
    00469 template <typename T>
    00470 void WindowFactoryManager::addFactory()
    00471 {
    00472     // create the factory object
    00473     WindowFactory* factory = new T;
    00474
    00475     // only do the actual add now if our singleton has already been created
    00476     if (WindowFactoryManager::getSingletonPtr())
    00477     {
    00478         Logger::getSingleton().logEvent("Created WindowFactory for '" +
    00479                                         factory->getTypeName() +
    00480                                         "' windows.");
    00481         // add the factory we just created
    00482         CEGUI_TRY
    00483         {
    00484             WindowFactoryManager::getSingleton().addFactory(factory);
    00485         }
    00486         CEGUI_CATCH (Exception&)
    00487         {
    00488             Logger::getSingleton().logEvent("Deleted WindowFactory for '" +
    00489                                             factory->getTypeName() +
    00490                                             "' windows.");
    00491             // delete the factory object
    00492             delete factory;
    00493             CEGUI_RETHROW;
    00494         }
    00495     }
    00496
    00497     d_ownedFactories.push_back(factory);
    00498 }
    00499
    00500 } // End of  CEGUI namespace section
    00501
    00502
    00503 #if defined(_MSC_VER)
    00504 #       pragma warning(pop)
    00505 #endif
    00506
    00507 #endif  // end of guard _CEGUIWindowFactoryManager_h_