/************************************************************************ filename: CEGUIFalWidgetLookManager.h created: Mon Jun 13 2005 author: Paul D Turner *************************************************************************/ /************************************************************************* Crazy Eddie's GUI System (http://www.cegui.org.uk) Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *************************************************************************/ #ifndef _CEGUIFalWidgetLookManager_h_ #define _CEGUIFalWidgetLookManager_h_ #include "CEGUISingleton.h" #include "CEGUIString.h" #include "CEGUIExceptions.h" #include "falagard/CEGUIFalWidgetLookFeel.h" #include #if defined(_MSC_VER) # pragma warning(push) # pragma warning(disable : 4251) # pragma warning(disable : 4275) #endif // Start of CEGUI namespace section namespace CEGUI { /*! \brief Manager class that gives top-level access to widget data based "look and feel" specifications loaded into the system. */ class CEGUIEXPORT WidgetLookManager : public Singleton { public: /*! \brief Constructor. */ WidgetLookManager(); /*! \brief Destructor */ ~WidgetLookManager(); /*! \brief Return singleton WidgetLookManager object \return Singleton WidgetLookManager object */ static WidgetLookManager& getSingleton(void); /*! \brief Return pointer to singleton WindowFactoryManager object \return Pointer to singleton WindowFactoryManager object */ static WidgetLookManager* getSingletonPtr(void); /*! \brief Parses a file containing window look & feel specifications (in the form of XML). \note If the new file contains specifications for widget types that are already specified, it is not an error; the previous definitions are overwritten by the new data. An entry will appear in the log each time any look & feel component is overwritten. \param filename String object containing the filename of a file containing the widget look & feel data \param resourceGroup Resource group identifier to pass to the resource provider when loading the file. \return Nothing. \exception FileIOException thrown if there was some problem accessing or parsing the file \a filename \exception InvalidRequestException thrown if an invalid filename was provided. */ void parseLookNFeelSpecification(const String& filename, const String& resourceGroup = ""); /*! \brief Return whether a WidgetLookFeel has been created with the specified name. \param widget String object holding the name of a widget look to test for. \return - true if a WindowLookFeel named \a widget is available. - false if so such WindowLookFeel is currently available. */ bool isWidgetLookAvailable(const String& widget) const; /*! \brief Return a const reference to a WidgetLookFeel object which has the specified name. \param widget String object holding the name of a widget look that is to be returned. \return const reference to the requested WidgetLookFeel object. \exception UnknownObjectException thrown if no WindowLookFeel is available with the requested name. */ const WidgetLookFeel& getWidgetLook(const String& widget) const; /*! \brief Erase the WidgetLookFeel that has the specified name. \param widget String object holding the name of a widget look to be erased. If no such WindowLookFeel exists, nothing happens. \return Nothing. */ void eraseWidgetLook(const String& widget); /*! \brief Add the given WidgetLookFeel. \note If the WidgetLookFeel specification uses a name that already exists within the system, it is not an error; the previous definition is overwritten by the new data. An entry will appear in the log each time any look & feel component is overwritten. \param look WidgetLookFeel object to be added to the system. NB: The WidgetLookFeel is copied, no change of ownership of the input object occurrs. \return Nothing. */ void addWidgetLook(const WidgetLookFeel& look); /*! \brief Writes the xml header and opening 'Falagard' tags to a stream. */ void writeFalagardXMLHeadToStream(OutStream& out_stream) const; /*! \brief Writes closing xml 'Falagard' tag to a stream. \param out_stream OutStream where XML data should be sent. */ void writeFalagardXMLTailToStream(OutStream& out_stream) const; /*! \brief Writes a complete Widge Look to a stream. Note that xml file header and falagard opening/closing tags will also be written. \param name String holding the name of the widget look to be output to the stream. \param out_stream OutStream where XML data should be sent. */ void writeWidgetLookToStream(const String& name, OutStream& out_stream) const; /*! \brief Writes a series of complete Widge Look objects to a stream. Note that xml file header and falagard opening/closing tags will also be written. The \a prefix specifies a name prefix common to all widget looks to be written, you could specify this as "TaharezLook/" and then any defined widget look starting with that prefix, such as "TaharezLook/Button" and "TaharezLook/Listbox" will be written to the stream. \param prefix String holding the widget look name prefix, which will be used when searching for the widget looks to be output to the stream. \param out_stream OutStream where XML data should be sent. */ void writeWidgetLookSeriesToStream(const String& prefix, OutStream& out_stream) const; private: static const String FalagardSchemaName; //!< Name of schema file used for XML validation. typedef std::map WidgetLookList; WidgetLookList d_widgetLooks; }; } // End of CEGUI namespace section #if defined(_MSC_VER) # pragma warning(pop) #endif #endif // end of guard _CEGUIFalWidgetLookManager_h_