llbutton.h

Go to the documentation of this file.
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 // Constants
00046 //
00047 
00048 // PLEASE please use these "constants" when building your own buttons.
00049 // They are loaded from settings.xml at run time.
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 // All button widths should be rounded up to this size
00056 extern S32      BTN_GRID;
00057 
00058 //
00059 // Helpful functions
00060 //
00061 S32 round_up(S32 grid, S32 value);
00062 
00063 
00064 class LLUICtrlFactory;
00065 
00066 //
00067 // Classes
00068 //
00069 
00070 class LLButton
00071 : public LLUICtrl
00072 {
00073 public:
00074         // simple button with text label
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 ); // mouse down and up within button
00112         void                    setMouseDownCallback( void (*cb)(void *data) )          { mMouseDownCallback = cb; }    // mouse down within button
00113         void                    setMouseUpCallback( void (*cb)(void *data) )            { mMouseUpCallback = cb; }              // mouse up, EVEN IF NOT IN BUTTON
00114         void                    setHeldDownCallback( void (*cb)(void *data) )           { mHeldDownCallback = cb; }             // Mouse button held down and in button
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);  // to be called by gIdleCallbacks
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;         // seconds, after which held-down callbacks get called
00228         S32                             mHeldDownFrameDelay;    // frames, after which held-down callbacks get called
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

Generated on Fri May 16 08:32:51 2008 for SecondLife by  doxygen 1.5.5