00001
00032 #ifndef LL_LLBUTTON_H
00033 #define LL_LLBUTTON_H
00034
00035 #include "lluuid.h"
00036 #include "llcontrol.h"
00037 #include "lluictrl.h"
00038 #include "v4color.h"
00039 #include "llframetimer.h"
00040 #include "llfontgl.h"
00041 #include "llimage.h"
00042 #include "lluistring.h"
00043
00044
00045
00046
00047
00048
00049
00050 extern S32 LLBUTTON_H_PAD;
00051 extern S32 LLBUTTON_V_PAD;
00052 extern S32 BTN_HEIGHT_SMALL;
00053 extern S32 BTN_HEIGHT;
00054
00055
00056
00057 extern S32 BTN_GRID;
00058
00059
00060 class LLUICtrlFactory;
00061
00062
00063
00064
00065
00066 class LLButton
00067 : public LLUICtrl
00068 {
00069 public:
00070
00071 LLButton(const LLString& name, const LLRect &rect, const LLString& control_name = LLString(),
00072 void (*on_click)(void*) = NULL, void *data = NULL);
00073
00074 LLButton(const LLString& name, const LLRect& rect,
00075 const LLString &unselected_image,
00076 const LLString &selected_image,
00077 const LLString& control_name,
00078 void (*click_callback)(void*),
00079 void *callback_data = NULL,
00080 const LLFontGL* mGLFont = NULL,
00081 const LLString& unselected_label = LLString::null,
00082 const LLString& selected_label = LLString::null );
00083
00084 virtual ~LLButton();
00085 void init(void (*click_callback)(void*), void *callback_data, const LLFontGL* font, const LLString& control_name);
00086 virtual EWidgetType getWidgetType() const;
00087 virtual LLString getWidgetTag() const;
00088
00089 void addImageAttributeToXML(LLXMLNodePtr node, const LLString& imageName,
00090 const LLUUID& imageID,const LLString& xmlTagName) const;
00091 virtual LLXMLNodePtr getXML(bool save_children = true) const;
00092 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
00093
00094 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
00095 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
00096 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
00097 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
00098 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
00099 virtual void draw();
00100
00101 virtual void onMouseCaptureLost();
00102
00103
00104 virtual void onCommit();
00105
00106 void setUnselectedLabelColor( const LLColor4& c ) { mUnselectedLabelColor = c; }
00107 void setSelectedLabelColor( const LLColor4& c ) { mSelectedLabelColor = c; }
00108
00109 void setClickedCallback( void (*cb)(void *data), void* data = NULL );
00110 void setMouseDownCallback( void (*cb)(void *data) ) { mMouseDownCallback = cb; }
00111 void setMouseUpCallback( void (*cb)(void *data) ) { mMouseUpCallback = cb; }
00112 void setHeldDownCallback( void (*cb)(void *data) ) { mHeldDownCallback = cb; }
00113 void setHeldDownDelay( F32 seconds, S32 frames = 0) { mHeldDownDelay = seconds; mHeldDownFrameDelay = frames; }
00114
00115 F32 getHeldDownTime() const { return mMouseDownTimer.getElapsedTimeF32(); }
00116
00117 BOOL toggleState() { setToggleState( !mToggleState ); return mToggleState; }
00118 BOOL getToggleState() const { return mToggleState; }
00119 void setToggleState(BOOL b);
00120
00121 void setFlashing( BOOL b ) { mFlashing = b; }
00122 BOOL getFlashing() const { return mFlashing; }
00123
00124 void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
00125 void setLeftHPad( S32 pad ) { mLeftHPad = pad; }
00126 void setRightHPad( S32 pad ) { mRightHPad = pad; }
00127
00128 const LLString getLabelUnselected() const { return wstring_to_utf8str(mUnselectedLabel); }
00129 const LLString getLabelSelected() const { return wstring_to_utf8str(mSelectedLabel); }
00130
00131
00132
00133 LLImageGL* getImageUnselected() const { return mImageUnselected; }
00134
00135 void setImageColor(const LLString& color_control);
00136 void setImages(const LLString &image_name, const LLString &selected_name);
00137 void setImageColor(const LLColor4& c);
00138
00139 void setDisabledImages(const LLString &image_name, const LLString &selected_name);
00140 void setDisabledImages(const LLString &image_name, const LLString &selected_name, const LLColor4& c);
00141
00142 void setHoverImages(const LLString &image_name, const LLString &selected_name);
00143
00144 void setDisabledImageColor(const LLColor4& c) { mDisabledImageColor = c; }
00145
00146 void setDisabledSelectedLabelColor( const LLColor4& c ) { mDisabledSelectedLabelColor = c; }
00147
00148 void setImageOverlay(const LLString &image_name, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
00149 LLPointer<LLImageGL> getImageOverlay() { return mImageOverlay; }
00150
00151
00152 virtual void setValue(const LLSD& value );
00153 virtual LLSD getValue() const;
00154
00155 void setLabel( const LLStringExplicit& label);
00156 virtual BOOL setLabelArg( const LLString& key, const LLStringExplicit& text );
00157 void setLabelUnselected(const LLStringExplicit& label);
00158 void setLabelSelected(const LLStringExplicit& label);
00159 void setDisabledLabel(const LLStringExplicit& disabled_label);
00160 void setDisabledSelectedLabel(const LLStringExplicit& disabled_label);
00161 void setDisabledLabelColor( const LLColor4& c ) { mDisabledLabelColor = c; }
00162
00163 void setFont(const LLFontGL *font)
00164 { mGLFont = ( font ? font : LLFontGL::sSansSerif); }
00165 void setScaleImage(BOOL scale) { mScaleImage = scale; }
00166
00167 void setDropShadowedText(BOOL b) { mDropShadowedText = b; }
00168
00169 void setBorderEnabled(BOOL b) { mBorderEnabled = b; }
00170
00171 static void onHeldDown(void *userdata);
00172
00173 void setFixedBorder(S32 width, S32 height) { mFixedWidth = width; mFixedHeight = height; }
00174 void setHoverGlowStrength(F32 strength) { mHoverGlowStrength = strength; }
00175
00176 private:
00177 void setImageUnselectedID(const LLUUID &image_id);
00178 void setImageSelectedID(const LLUUID &image_id);
00179 void setImageHoverSelectedID(const LLUUID &image_id);
00180 void setImageHoverUnselectedID(const LLUUID &image_id);
00181 void setImageDisabledID(const LLUUID &image_id);
00182 void setImageDisabledSelectedID(const LLUUID &image_id);
00183 public:
00184 void setImageUnselected(const LLString &image_name);
00185 void setImageSelected(const LLString &image_name);
00186 void setImageHoverSelected(const LLString &image_name);
00187 void setImageHoverUnselected(const LLString &image_name);
00188 void setImageDisabled(const LLString &image_name);
00189 void setImageDisabledSelected(const LLString &image_name);
00190 void setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
00191 BOOL getCommitOnReturn() { return mCommitOnReturn; }
00192
00193 void setHelpURLCallback(std::string help_url);
00194 LLString getHelpURL() { return mHelpURL; }
00195 protected:
00196 virtual void drawBorder(const LLColor4& color, S32 size);
00197
00198 protected:
00199
00200 void (*mClickedCallback)(void* data );
00201 void (*mMouseDownCallback)(void *data);
00202 void (*mMouseUpCallback)(void *data);
00203 void (*mHeldDownCallback)(void *data);
00204
00205 const LLFontGL *mGLFont;
00206
00207 LLFrameTimer mMouseDownTimer;
00208 S32 mMouseDownFrame;
00209 F32 mHeldDownDelay;
00210 S32 mHeldDownFrameDelay;
00211
00212 LLPointer<LLImageGL> mImageOverlay;
00213 LLFontGL::HAlign mImageOverlayAlignment;
00214 LLColor4 mImageOverlayColor;
00215
00216 LLPointer<LLImageGL> mImageUnselected;
00217 LLUIString mUnselectedLabel;
00218 LLColor4 mUnselectedLabelColor;
00219
00220 LLPointer<LLImageGL> mImageSelected;
00221 LLUIString mSelectedLabel;
00222 LLColor4 mSelectedLabelColor;
00223
00224 LLPointer<LLImageGL> mImageHoverSelected;
00225
00226 LLPointer<LLImageGL> mImageHoverUnselected;
00227
00228 LLPointer<LLImageGL> mImageDisabled;
00229 LLUIString mDisabledLabel;
00230 LLColor4 mDisabledLabelColor;
00231
00232 LLPointer<LLImageGL> mImageDisabledSelected;
00233 LLUIString mDisabledSelectedLabel;
00234 LLColor4 mDisabledSelectedLabelColor;
00235
00236
00237 LLUUID mImageUnselectedID;
00238 LLUUID mImageSelectedID;
00239 LLUUID mImageHoverSelectedID;
00240 LLUUID mImageHoverUnselectedID;
00241 LLUUID mImageDisabledID;
00242 LLUUID mImageDisabledSelectedID;
00243 LLString mImageUnselectedName;
00244 LLString mImageSelectedName;
00245 LLString mImageHoverSelectedName;
00246 LLString mImageHoverUnselectedName;
00247 LLString mImageDisabledName;
00248 LLString mImageDisabledSelectedName;
00249
00250 LLColor4 mHighlightColor;
00251 LLColor4 mUnselectedBgColor;
00252 LLColor4 mSelectedBgColor;
00253
00254 LLColor4 mImageColor;
00255 LLColor4 mDisabledImageColor;
00256
00257 BOOL mToggleState;
00258 BOOL mScaleImage;
00259
00260 BOOL mDropShadowedText;
00261
00262 BOOL mBorderEnabled;
00263
00264 BOOL mFlashing;
00265
00266 LLFontGL::HAlign mHAlign;
00267 S32 mLeftHPad;
00268 S32 mRightHPad;
00269
00270 S32 mFixedWidth;
00271 S32 mFixedHeight;
00272
00273 F32 mHoverGlowStrength;
00274 F32 mCurGlowStrength;
00275
00276 BOOL mNeedsHighlight;
00277 BOOL mCommitOnReturn;
00278
00279 LLString mHelpURL;
00280
00281 LLPointer<LLImageGL> mImagep;
00282
00283 static LLFrameTimer sFlashingTimer;
00284 };
00285
00286 class LLSquareButton
00287 : public LLButton
00288 {
00289 public:
00290 LLSquareButton(const LLString& name, const LLRect& rect,
00291 const LLString& label,
00292 const LLFontGL *font = NULL,
00293 const LLString& control_name = LLString(),
00294 void (*click_callback)(void*) = NULL,
00295 void *callback_data = NULL,
00296 const LLString& selected_label = LLString::null );
00297 };
00298
00299
00300 S32 round_up(S32 grid, S32 value);
00301
00302 #endif // LL_LLBUTTON_H