Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

CEGUIPushButton.cpp

Go to the documentation of this file.
00001 /************************************************************************
00002         filename:       CEGUIPushButton.cpp
00003         created:        13/4/2004
00004         author:         Paul D Turner
00005         
00006         purpose:        Implementation of PushButton widget base class
00007 *************************************************************************/
00008 /*************************************************************************
00009     Crazy Eddie's GUI System (http://www.cegui.org.uk)
00010     Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
00011 
00012     This library is free software; you can redistribute it and/or
00013     modify it under the terms of the GNU Lesser General Public
00014     License as published by the Free Software Foundation; either
00015     version 2.1 of the License, or (at your option) any later version.
00016 
00017     This library is distributed in the hope that it will be useful,
00018     but WITHOUT ANY WARRANTY; without even the implied warranty of
00019     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00020     Lesser General Public License for more details.
00021 
00022     You should have received a copy of the GNU Lesser General Public
00023     License along with this library; if not, write to the Free Software
00024     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025 *************************************************************************/
00026 #include "elements/CEGUIPushButton.h"
00027 
00028 // Start of CEGUI namespace section
00029 namespace CEGUI
00030 {
00031 
00032 /*************************************************************************
00033         constants
00034 *************************************************************************/
00035 // event strings
00036 const String PushButton::EventNamespace("PushButton");
00037 const String PushButton::EventClicked( (utf8*)"Clicked" );
00038 // properties
00039 PushButtonProperties::NormalImage PushButton::d_normalImageProperty;
00040 PushButtonProperties::PushedImage PushButton::d_pushedImageProperty;
00041 PushButtonProperties::HoverImage  PushButton::d_hoverImageProperty;
00042 PushButtonProperties::DisabledImage  PushButton::d_disabledImageProperty;
00043 PushButtonProperties::UseStandardImagery PushButton::d_useStandardImageryProperty;
00044 PushButtonProperties::TextXOffset PushButton::d_textXOffsetProperty;
00045 
00046 
00047 /*************************************************************************
00048         Constructor
00049 *************************************************************************/
00050 PushButton::PushButton(const String& type, const String& name) :
00051         ButtonBase(type, name)
00052 {
00053     // default options
00054     d_autoscaleImages           = true;
00055     d_useStandardImagery        = true;
00056     d_useNormalImage            = false;
00057     d_useHoverImage                     = false;
00058     d_usePushedImage            = false;
00059     d_useDisabledImage          = false;
00060     d_textXOffset = 0.0f;
00061 
00062         // add the additional events generated by this derived class
00063         addPushButtonEvents();
00064 
00065     // add properties for push button class
00066     addPushButtonProperties();
00067 }
00068 
00069 
00070 /*************************************************************************
00071         Destructor
00072 *************************************************************************/
00073 PushButton::~PushButton(void)
00074 {
00075 }
00076 
00077 bool PushButton::isStandardImageryEnabled(void) const
00078 {
00079     return d_useStandardImagery;
00080 }
00081 
00082 bool PushButton::isCustomImageryAutoSized(void) const
00083 {
00084     return d_autoscaleImages;
00085 }
00086 
00087 const RenderableImage* PushButton::getNormalImage(void) const
00088 {
00089     return d_useNormalImage ? &d_normalImage : static_cast<const RenderableImage*>(0);
00090 }
00091 
00092 const RenderableImage* PushButton::getHoverImage(void) const
00093 {
00094     return d_useHoverImage ? &d_hoverImage : static_cast<const RenderableImage*>(0);
00095 }
00096 
00097 const RenderableImage* PushButton::getPushedImage(void) const
00098 {
00099     return d_usePushedImage ? &d_pushedImage : static_cast<const RenderableImage*>(0);
00100 }
00101 
00102 const RenderableImage* PushButton::getDisabledImage(void) const
00103 {
00104     return d_useDisabledImage ? &d_disabledImage : static_cast<const RenderableImage*>(0);
00105 }
00106 
00107 float PushButton::getTextXOffset(void) const
00108 {
00109     return d_textXOffset;
00110 }
00111 
00112 void PushButton::setStandardImageryEnabled(bool setting)
00113 {
00114     if (d_useStandardImagery != setting)
00115     {
00116         d_useStandardImagery = setting;
00117         requestRedraw();
00118     }
00119 }
00120 
00121 void PushButton::setCustomImageryAutoSized(bool setting)
00122 {
00123     // if we are enabling auto-sizing, scale images for current size
00124     if (setting && setting != d_autoscaleImages)
00125     {
00126         Rect area(0, 0, getAbsoluteWidth(), getAbsoluteHeight());
00127         d_normalImage.setRect(area);
00128         d_hoverImage.setRect(area);
00129         d_pushedImage.setRect(area);
00130         d_disabledImage.setRect(area);
00131 
00132         requestRedraw();
00133     }
00134 
00135     d_autoscaleImages = setting;
00136 }
00137 
00138 void PushButton::setNormalImage(const RenderableImage* image)
00139 {
00140     if (image)
00141     {
00142         d_useNormalImage = true;
00143         d_normalImage = *image;
00144         d_normalImage.setRect(Rect(0, 0, getAbsoluteWidth(), getAbsoluteHeight()));
00145     }
00146     else
00147     {
00148         d_useNormalImage = false;
00149     }
00150 
00151     requestRedraw();
00152 }
00153 
00154 void PushButton::setHoverImage(const RenderableImage* image)
00155 {
00156     if (image)
00157     {
00158         d_useHoverImage = true;
00159         d_hoverImage = *image;
00160         d_hoverImage.setRect(Rect(0, 0, getAbsoluteWidth(), getAbsoluteHeight()));
00161     }
00162     else
00163     {
00164         d_useHoverImage = false;
00165     }
00166 
00167     requestRedraw();
00168 }
00169 
00170 void PushButton::setPushedImage(const RenderableImage* image)
00171 {
00172     if (image)
00173     {
00174         d_usePushedImage = true;
00175         d_pushedImage = *image;
00176         d_pushedImage.setRect(Rect(0, 0, getAbsoluteWidth(), getAbsoluteHeight()));
00177     }
00178     else
00179     {
00180         d_usePushedImage = false;
00181     }
00182 
00183     requestRedraw();
00184 }
00185 
00186 void PushButton::setDisabledImage(const RenderableImage* image)
00187 {
00188     if (image)
00189     {
00190         d_useDisabledImage = true;
00191         d_disabledImage = *image;
00192         d_disabledImage.setRect(Rect(0, 0, getAbsoluteWidth(), getAbsoluteHeight()));
00193     }
00194     else
00195     {
00196         d_useDisabledImage = false;
00197     }
00198 
00199     requestRedraw();
00200 }
00201 
00202 void PushButton::setTextXOffset(float offset)
00203 {
00204     d_textXOffset = offset;
00205 }
00206 
00207 /*************************************************************************
00208         Add button specific events      
00209 *************************************************************************/
00210 void PushButton::addPushButtonEvents(void)
00211 {
00212         addEvent(EventClicked);
00213 }
00214 
00215 
00216 /*************************************************************************
00217         handler invoked internally when the button is clicked.  
00218 *************************************************************************/
00219 void PushButton::onClicked(WindowEventArgs& e)
00220 {
00221         fireEvent(EventClicked, e, EventNamespace);
00222 }
00223 
00224 
00225 /*************************************************************************
00226         Handler for mouse button release events
00227 *************************************************************************/
00228 void PushButton::onMouseButtonUp(MouseEventArgs& e)
00229 {
00230         if ((e.button == LeftButton) && isPushed())
00231         {
00232                 Window* sheet = System::getSingleton().getGUISheet();
00233 
00234                 if (sheet != NULL)
00235                 {
00236                         // if mouse was released over this widget
00237                         if (this == sheet->getChildAtPosition(e.position))
00238                         {
00239                                 // fire event
00240                                 WindowEventArgs args(this);
00241                                 onClicked(args);
00242                         }
00243 
00244                 }
00245 
00246                 e.handled = true;
00247         }
00248 
00249         // default handling
00250         ButtonBase::onMouseButtonUp(e);
00251 }
00252 
00253 void PushButton::onSized(WindowEventArgs& e)
00254 {
00255     // default processing
00256     ButtonBase::onSized(e);
00257 
00258     // scale images if required.
00259     if (d_autoscaleImages)
00260     {
00261         Rect area(0, 0, getAbsoluteWidth(), getAbsoluteHeight());
00262         d_normalImage.setRect(area);
00263         d_hoverImage.setRect(area);
00264         d_pushedImage.setRect(area);
00265         d_disabledImage.setRect(area);
00266 
00267         e.handled = true;
00268     }
00269 
00270 }
00271 
00272 void PushButton::addPushButtonProperties(void)
00273 {
00274     addProperty(&d_normalImageProperty);
00275     addProperty(&d_pushedImageProperty);
00276     addProperty(&d_hoverImageProperty);
00277     addProperty(&d_disabledImageProperty);
00278     addProperty(&d_useStandardImageryProperty);
00279     addProperty(&d_textXOffsetProperty);
00280 }
00281 
00282 } // End of  CEGUI namespace section

Generated on Wed Sep 7 09:56:33 2005 for Crazy Eddies GUI System by  doxygen 1.4.3