00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "elements/CEGUIPushButton.h"
00027
00028
00029 namespace CEGUI
00030 {
00031
00032
00033
00034
00035
00036 const String PushButton::EventNamespace("PushButton");
00037 const String PushButton::EventClicked( (utf8*)"Clicked" );
00038
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
00049
00050 PushButton::PushButton(const String& type, const String& name) :
00051 ButtonBase(type, name)
00052 {
00053
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
00063 addPushButtonEvents();
00064
00065
00066 addPushButtonProperties();
00067 }
00068
00069
00070
00071
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
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
00209
00210 void PushButton::addPushButtonEvents(void)
00211 {
00212 addEvent(EventClicked);
00213 }
00214
00215
00216
00217
00218
00219 void PushButton::onClicked(WindowEventArgs& e)
00220 {
00221 fireEvent(EventClicked, e, EventNamespace);
00222 }
00223
00224
00225
00226
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
00237 if (this == sheet->getChildAtPosition(e.position))
00238 {
00239
00240 WindowEventArgs args(this);
00241 onClicked(args);
00242 }
00243
00244 }
00245
00246 e.handled = true;
00247 }
00248
00249
00250 ButtonBase::onMouseButtonUp(e);
00251 }
00252
00253 void PushButton::onSized(WindowEventArgs& e)
00254 {
00255
00256 ButtonBase::onSized(e);
00257
00258
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 }