Crazy Eddie's GUI System
0.8.4
|
00001 /*********************************************************************** 00002 created: 21/2/2004 00003 author: Paul D Turner 00004 00005 purpose: Defines abstract base class for WindowFactory objects 00006 *************************************************************************/ 00007 /*************************************************************************** 00008 * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team 00009 * 00010 * Permission is hereby granted, free of charge, to any person obtaining 00011 * a copy of this software and associated documentation files (the 00012 * "Software"), to deal in the Software without restriction, including 00013 * without limitation the rights to use, copy, modify, merge, publish, 00014 * distribute, sublicense, and/or sell copies of the Software, and to 00015 * permit persons to whom the Software is furnished to do so, subject to 00016 * the following conditions: 00017 * 00018 * The above copyright notice and this permission notice shall be 00019 * included in all copies or substantial portions of the Software. 00020 * 00021 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00022 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00023 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00024 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 00025 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00026 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00027 * OTHER DEALINGS IN THE SOFTWARE. 00028 ***************************************************************************/ 00029 #ifndef _CEGUIWindowFactory_h_ 00030 #define _CEGUIWindowFactory_h_ 00031 00032 #include "CEGUI/Base.h" 00033 #include "CEGUI/String.h" 00034 #include "CEGUI/Window.h" 00035 00055 #define CEGUI_DECLARE_WINDOW_FACTORY( T )\ 00056 class T ## Factory : public WindowFactory\ 00057 {\ 00058 public:\ 00059 T ## Factory() : WindowFactory( T::WidgetTypeName ) {}\ 00060 Window* createWindow(const String& name)\ 00061 {\ 00062 return CEGUI_NEW_AO T(d_type, name);\ 00063 }\ 00064 void destroyWindow(Window* window)\ 00065 {\ 00066 CEGUI_DELETE_AO window;\ 00067 }\ 00068 };\ 00069 T ## Factory& get ## T ## Factory(); 00070 00076 #define CEGUI_DEFINE_WINDOW_FACTORY( T )\ 00077 T ## Factory& get ## T ## Factory()\ 00078 {\ 00079 static T ## Factory s_factory;\ 00080 return s_factory;\ 00081 } 00082 00088 #define CEGUI_WINDOW_FACTORY( T ) (get ## T ## Factory()) 00089 00090 // Start of CEGUI namespace section 00091 namespace CEGUI 00092 { 00115 class CEGUIEXPORT WindowFactory : 00116 public AllocatedObject<WindowFactory> 00117 { 00118 public: 00129 virtual Window* createWindow(const String& name) = 0; 00130 00141 virtual void destroyWindow(Window* window) = 0; 00142 00152 const String& getTypeName() const 00153 { return d_type; } 00154 00156 virtual ~WindowFactory() 00157 {} 00158 00159 protected: 00161 WindowFactory(const String& type) : 00162 d_type(type) 00163 {} 00164 00165 protected: 00167 String d_type; 00168 }; 00169 00170 } // End of CEGUI namespace section 00171 00172 #endif // end of guard _CEGUIWindowFactory_h_