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