CEGUIFactoryModule.h

00001 /************************************************************************
00002         filename:       CEGUIFactoryModule.h
00003         created:        12/4/2004
00004         author:         Paul D Turner
00005         
00006         purpose:        Defines interface for object that controls a loadable
00007                                 module (.dll/.so/ whatever) that contains concrete
00008                                 window / widget implementations and their factories.
00009 *************************************************************************/
00010 /*************************************************************************
00011     Crazy Eddie's GUI System (http://www.cegui.org.uk)
00012     Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
00013 
00014     This library is free software; you can redistribute it and/or
00015     modify it under the terms of the GNU Lesser General Public
00016     License as published by the Free Software Foundation; either
00017     version 2.1 of the License, or (at your option) any later version.
00018 
00019     This library is distributed in the hope that it will be useful,
00020     but WITHOUT ANY WARRANTY; without even the implied warranty of
00021     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022     Lesser General Public License for more details.
00023 
00024     You should have received a copy of the GNU Lesser General Public
00025     License along with this library; if not, write to the Free Software
00026     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027 *************************************************************************/
00028 #ifndef _CEGUIFactoryModule_h_
00029 #define _CEGUIFactoryModule_h_
00030 
00031 /*************************************************************************
00032         The following is basically taken from DynLib.h, which is part of
00033         the Ogre project (http://www.ogre3d.org/)
00034 *************************************************************************/
00035 #if defined(__WIN32__) || defined(_WIN32)
00036 #    define DYNLIB_HANDLE hInstance
00037 #    define DYNLIB_LOAD( a ) LoadLibrary( a )
00038 #    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
00039 #    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
00040 #    define DYNLIB_ERROR( )  "Unknown Error"
00041 
00042         struct HINSTANCE__;
00043         typedef struct HINSTANCE__* hInstance;
00044 
00045 #elif defined(__linux__)
00046 #    define DYNLIB_HANDLE void*
00047 #    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY )
00048 #    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
00049 #    define DYNLIB_UNLOAD( a ) dlclose( a )
00050 #    define DYNLIB_ERROR( ) dlerror( )
00051 
00052 #elif defined(__APPLE_CC__)
00053 #    define DYNLIB_HANDLE CFBundleRef
00054 #    define DYNLIB_LOAD( a ) mac_loadExeBundle( a )
00055 #    define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
00056 #    define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
00057 #    define DYNLIB_ERROR( ) mac_errorBundle()
00058 #endif
00059 
00060 
00061 // Start of CEGUI namespace section
00062 namespace CEGUI
00063 {
00064 
00069 class FactoryModule
00070 {
00071 public:
00082         FactoryModule(const String& filename);
00083 
00084 
00092         virtual ~FactoryModule(void);
00093 
00094 
00105         void    registerFactory(const String& type) const;
00106 
00107 
00115     uint registerAllFactories() const;
00116 
00117 private:
00118         /*************************************************************************
00119                 Implementation Data
00120         *************************************************************************/
00121         static const char       RegisterFactoryFunctionName[];
00122     static const char   RegisterAllFunctionName[];
00123 
00124         typedef void (*FactoryRegisterFunction)(const String&); 
00125     typedef uint (*RegisterAllFunction)(void);
00126 
00127         FactoryRegisterFunction d_regFunc;      
00128     RegisterAllFunction d_regAllFunc;   
00129         String                  d_moduleName;           
00130         DYNLIB_HANDLE   d_handle;                       
00131 };
00132 
00133 } // End of  CEGUI namespace section
00134 
00135 
00136 #endif  // end of guard _CEGUIFactoryModule_h_

Generated on Sat Nov 26 10:09:54 2005 for Crazy Eddies GUI System by  doxygen 1.4.5