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 
00056 // All button widths should be rounded up to this size
00057 extern S32      BTN_GRID;
00058 
00059 
00060 class LLUICtrlFactory;
00061 
00062 //
00063 // Classes
00064 //
00065 
00066 class LLButton
00067 : public LLUICtrl
00068 {
00069 public:
00070         // simple button with text label
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         // HACK: "committing" a button is the same as clicking on it.
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 ); // mouse down and up within button
00110         void                    setMouseDownCallback( void (*cb)(void *data) )          { mMouseDownCallback = cb; }    // mouse down within button
00111         void                    setMouseUpCallback( void (*cb)(void *data) )            { mMouseUpCallback = cb; }              // mouse up, EVEN IF NOT IN BUTTON
00112         void                    setHeldDownCallback( void (*cb)(void *data) )           { mHeldDownCallback = cb; }             // Mouse button held down and in button
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         // HACK to allow images to be freed when the caller knows he's done with it.
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);  // to be called by gIdleCallbacks
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;         // seconds, after which held-down callbacks get called
00210         S32                             mHeldDownFrameDelay;    // frames, after which held-down callbacks get called
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 // Helpful functions
00300 S32 round_up(S32 grid, S32 value);
00301 
00302 #endif  // LL_LLBUTTON_H

Generated on Thu Jul 1 06:08:20 2010 for Second Life Viewer by  doxygen 1.4.7