/************************************************************************ filename: CEGUIStatic.h created: 13/4/2004 author: Paul D Turner purpose: Interface to base class for Static widget *************************************************************************/ /************************************************************************* 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 _CEGUIStatic_h_ #define _CEGUIStatic_h_ #include "CEGUIBase.h" #include "CEGUIWindow.h" #include "CEGUIRenderableFrame.h" #include "elements/CEGUIStaticProperties.h" #if defined(_MSC_VER) # pragma warning(push) # pragma warning(disable : 4251) #endif // Start of CEGUI namespace section namespace CEGUI { /*! \brief Base class for static widgets. */ class CEGUIEXPORT Static : public Window { public: static const String EventNamespace; //!< Namespace for global events /************************************************************************* Accessors *************************************************************************/ /*! \brief Return whether the frame for this static widget is enabled or disabled. \return true if the frame is enabled and will be rendered. false is the frame is disabled and will not be rendered. */ bool isFrameEnabled(void) const {return d_frameEnabled;} /*! \brief Return whether the background for this static widget is enabled to disabled. \return true if the background is enabled and will be rendered. false if the background is disabled and will not be rendered. */ bool isBackgroundEnabled(void) const {return d_backgroundEnabled;} /*! \brief Return a ColourRect object containing the colours used when rendering this widget. \return ColourRect object initialised with the colours used when rendering the frame for this widget. */ ColourRect getFrameColours(void) const {return d_frameCols;} /*! \brief Return a ColourRect object containing the colours used when rendering this widget. \return ColourRect object initialised with the colours used when rendering the background for this widget. */ ColourRect getBackgroundColours(void) const {return d_backgroundCols;} // overridden so derived classes are auto-clipped to within the inner area of the frame when it's active. virtual Rect getUnclippedInnerRect(void) const; /*! \brief Return the Image being used for the specified location of the frame. \param location One of the FrameLocation enumerated values specifying the image to be returned. \return Pointer to the Image object currently set for the frame location specified in \a location. May return NULL if no Image is set for the requested position. */ const Image* getImageForFrameLocation(FrameLocation location) const; /*! \brief Return the Image currently set as the background image for the widget. \return Pointer to the Image object currently set as the background for this StaticWidget. May return NULL if no Image is currently set. */ const Image* getBackgroundImage(void) const; /************************************************************************* Manipulators *************************************************************************/ /*! \brief Enable or disable rendering of the frame for this static widget. Frame imagery can be customised via the setFrameImages method. \param setting true to enable rendering of a frame. false to disable rendering of a frame. */ void setFrameEnabled(bool setting); /*! \brief specify the Image objects to use for each part of the frame. A NULL may be used to omit any part. \param topleft Pointer to an Image object to render as the top-left corner of the frame. Specify NULL to omit this part of the frame. \param topright Pointer to an Image object to render as the top-right corner of the frame. Specify NULL to omit this part of the frame. \param bottomleft Pointer to an Image object to render as the bottom-left corner of the frame. Specify NULL to omit this part of the frame. \param bottomright Pointer to an Image object to render as the bottom-right corner of the frame. Specify NULL to omit this part of the frame. \param left Pointer to an Image object to render as the left edge of the frame. Specify NULL to omit this part of the frame. \param top Pointer to an Image object to render as the top edge of the frame. Specify NULL to omit this part of the frame. \param right Pointer to an Image object to render as the right edge of the frame. Specify NULL to omit this part of the frame. \param bottom Pointer to an Image object to render as the bottom edge of the frame. Specify NULL to omit this part of the frame. \return Nothing */ void setFrameImages(const Image* topleft, const Image* topright, const Image* bottomleft, const Image* bottomright, const Image* left, const Image* top, const Image* right, const Image* bottom); /*! \brief Sets the colours to be applied when rendering the frame. \param colours ColourRect object describing the colours to be used. \return Nothing. */ void setFrameColours(const ColourRect& colours); /*! \brief Sets the colours to be applied when rendering the frame. \param top_left_colour Colour to be applied to the top-left corner of each Image used in the frame. \param top_right_colour Colour to be applied to the top-right corner of each Image used in the frame. \param bottom_left_colour Colour to be applied to the bottom-left corner of each Image used in the frame. \param bottom_right_colour Colour to be applied to the bottom-right corner of each Image used in the frame. \return Nothing. */ void setFrameColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour); /*! \brief Sets the colour to be applied when rendering the frame. \param col colour value to be used when rendering. \return Nothing. */ void setFrameColours(const colour& col) {setFrameColours(col, col, col, col);} /*! \brief Enable or disable rendering of the background for this static widget. \param setting true to enable rendering of the background. false to disable rendering of the background. */ void setBackgroundEnabled(bool setting); /*! \brief Set the image to use as the background for the static widget. \param image Pointer to the Image object to be rendered. Can be NULL to specify no image is to be rendered. \return Nothing. */ void setBackgroundImage(const Image* image); /*! \brief Set the image to use as the background for the static widget. \param imageset String object specifying the name of the Imageset that holds the required image. \param image Name of the Image on the specified Imageset that is to be used. \return Nothing. \exception UnknownObjectException thrown if Imageset \a imageset does not exist in the system or if \a imageset contains no Image named \a image. */ void setBackgroundImage(const String& imageset, const String& image); /*! \brief Sets the colours to be applied when rendering the background. \param colours ColourRect object describing the colours to be used. \return Nothing. */ void setBackgroundColours(const ColourRect& colours); /*! \brief Sets the colours to be applied when rendering the background. \param top_left_colour Colour to be applied to the top-left corner of the background. \param top_right_colour Colour to be applied to the top-right corner of the background. \param bottom_left_colour Colour to be applied to the bottom-left corner of the background. \param bottom_right_colour Colour to be applied to the bottom-right corner of the background. \return Nothing. */ void setBackgroundColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour); /*! \brief Sets the colour to be applied when rendering the background. \param col colour value to be used when rendering. \return Nothing. */ void setBackgroundColours(const colour& col) {setBackgroundColours(col, col, col, col);} /*! \brief Set the Image to use for the specified location of the frame. \param location One of the FrameLocation enumerated values specifying the image to be returned. \param image Pointer to the Image to use for the frame location specified in \a location. May be NULL to indicate the frame component is not required. \return Nothing. */ void setImageForFrameLocation(FrameLocation location, const Image* image); /************************************************************************* Construction and Destruction *************************************************************************/ /*! \brief Constructor for static widget base class */ Static(const String& type, const String& name); /*! \brief Destructor for static widget base class. */ virtual ~Static(void); protected: /************************************************************************* Overridden from base class *************************************************************************/ virtual void populateRenderCache(); /************************************************************************* Event handling *************************************************************************/ virtual void onSized(WindowEventArgs& e); virtual void onAlphaChanged(WindowEventArgs& e); /************************************************************************* Implementation methods *************************************************************************/ /*! \brief update the internal RenderableFrame with currently set colours and alpha settings. */ void updateRenderableFrameColours(void); /*! \brief return ARGB colour value \a col, with its alpha component modulated by the value specified in float \a alpha. */ colour calculateModulatedAlphaColour(const colour& col, float alpha) const; /*! \brief This is used internally to indicate that the frame for the static widget has been modified, and as such derived classes may need to adjust their layouts or reconfigure their rendering somehow. \note This does not currently fire an external event. */ virtual void onStaticFrameChanged(WindowEventArgs& e) {} /*! \brief Return whether this window was inherited from the given class name at some point in the inheritance heirarchy. \param class_name The class name that is to be checked. \return true if this window was inherited from \a class_name. false if not. */ virtual bool testClassName_impl(const String& class_name) const { if (class_name==(const utf8*)"Static") return true; return Window::testClassName_impl(class_name); } /************************************************************************* Implementation Data *************************************************************************/ bool d_frameEnabled; //!< True when the frame is enabled. ColourRect d_frameCols; //!< Used to store frame colours. RenderableFrame d_frame; //!< Frame object used for rendering a frame for the static element. bool d_backgroundEnabled;//!< true when the background is enabled. ColourRect d_backgroundCols; //!< Colours to use when drawing background. const Image* d_background; //!< Image to use for widget background. // cache of frame edge sizes float d_left_width; //!< Width of the left edge image for the current frame. float d_right_width; //!< Width of the right edge image for the current frame. float d_top_height; //!< Height of the top edge image for the current frame. float d_bottom_height; //!< Height of the bottom edge image for the current frame. private: /************************************************************************* Static Properties for this class *************************************************************************/ static StaticProperties::FrameEnabled d_frameEnabledProperty; static StaticProperties::BackgroundEnabled d_backgroundEnabledProperty; static StaticProperties::FrameColours d_frameColoursProperty; static StaticProperties::BackgroundColours d_backgroundColoursProperty; static StaticProperties::BackgroundImage d_backgroundImageProperty; static StaticProperties::TopLeftFrameImage d_topLeftFrameProperty; static StaticProperties::TopRightFrameImage d_topRightFrameProperty; static StaticProperties::BottomLeftFrameImage d_bottomLeftFrameProperty; static StaticProperties::BottomRightFrameImage d_bottomRightFrameProperty; static StaticProperties::LeftFrameImage d_leftFrameProperty; static StaticProperties::RightFrameImage d_rightFrameProperty; static StaticProperties::TopFrameImage d_topFrameProperty; static StaticProperties::BottomFrameImage d_bottomFrameProperty; /************************************************************************* Private methods *************************************************************************/ void addStaticProperties(void); }; } // End of CEGUI namespace section #if defined(_MSC_VER) # pragma warning(pop) #endif #endif // end of guard _CEGUIStatic_h_