phoenix-firestorm/indra/llui/llbutton.h

265 lines
8.5 KiB
C++

/**
* @file llbutton.h
* @brief Header for buttons
*
* Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
* $License$
*/
#ifndef LL_LLBUTTON_H
#define LL_LLBUTTON_H
#include "lluuid.h"
#include "llcontrol.h"
#include "lluictrl.h"
#include "v4color.h"
#include "llframetimer.h"
#include "llfontgl.h"
#include "llimage.h"
#include "lluistring.h"
//
// Constants
//
// PLEASE please use these "constants" when building your own buttons.
// They are loaded from settings.xml at run time.
extern S32 LLBUTTON_H_PAD;
extern S32 LLBUTTON_V_PAD;
extern S32 BTN_HEIGHT_SMALL;
extern S32 BTN_HEIGHT;
// All button widths should be rounded up to this size
extern S32 BTN_GRID;
class LLUICtrlFactory;
//
// Classes
//
class LLButton
: public LLUICtrl
{
public:
// simple button with text label
LLButton(const LLString& name, const LLRect &rect, const LLString& control_name = "",
void (*on_click)(void*) = NULL, void *data = NULL);
LLButton(const LLString& name, const LLRect& rect,
const LLString &unselected_image,
const LLString &selected_image,
const LLString& control_name,
void (*click_callback)(void*),
void *callback_data = NULL,
const LLFontGL* mGLFont = NULL,
const LLString& unselected_label = LLString::null,
const LLString& selected_label = LLString::null );
virtual ~LLButton();
void init(void (*click_callback)(void*), void *callback_data, const LLFontGL* font, const LLString& control_name);
virtual EWidgetType getWidgetType() const;
virtual LLString getWidgetTag() const;
void addImageAttributeToXML(LLXMLNodePtr node, const LLString& imageName,
const LLUUID& imageID,const LLString& xmlTagName) const;
virtual LLXMLNodePtr getXML(bool save_children = true) const;
static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual void draw();
// HACK: "committing" a button is the same as clicking on it.
virtual void onCommit();
void setUnselectedLabelColor( const LLColor4& c ) { mUnselectedLabelColor = c; }
void setSelectedLabelColor( const LLColor4& c ) { mSelectedLabelColor = c; }
void setClickedCallback( void (*cb)(void *data), void* data = NULL ); // mouse down and up within button
void setMouseDownCallback( void (*cb)(void *data) ) { mMouseDownCallback = cb; } // mouse down within button
void setMouseUpCallback( void (*cb)(void *data) ) { mMouseUpCallback = cb; } // mouse up, EVEN IF NOT IN BUTTON
void setHeldDownCallback( void (*cb)(void *data) ) { mHeldDownCallback = cb; } // Mouse button held down and in button
void setHeldDownDelay( F32 seconds) { mHeldDownDelay = seconds; }
F32 getHeldDownTime() const { return mMouseDownTimer.getElapsedTimeF32(); }
BOOL toggleState() { setToggleState( !mToggleState ); return mToggleState; }
BOOL getToggleState() const { return mToggleState; }
void setToggleState(BOOL b);
void setFlashing( BOOL b ) { mFlashing = b; }
BOOL getFlashing() const { return mFlashing; }
void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
void setLeftHPad( S32 pad ) { mLeftHPad = pad; }
void setRightHPad( S32 pad ) { mRightHPad = pad; }
const LLString getLabelUnselected() const { return wstring_to_utf8str(mUnselectedLabel); }
const LLString getLabelSelected() const { return wstring_to_utf8str(mSelectedLabel); }
// HACK to allow images to be freed when the caller knows he's done with it.
LLImageGL* getImageUnselected() const { return mImageUnselected; }
void setImageColor(const LLString& color_control);
void setImages(const LLString &image_name, const LLString &selected_name);
void setImageColor(const LLColor4& c);
void setDisabledImages(const LLString &image_name, const LLString &selected_name);
void setDisabledImages(const LLString &image_name, const LLString &selected_name, const LLColor4& c);
void setHoverImages(const LLString &image_name, const LLString &selected_name);
void setDisabledImageColor(const LLColor4& c) { mDisabledImageColor = c; }
void setDisabledSelectedLabelColor( const LLColor4& c ) { mDisabledSelectedLabelColor = c; }
virtual void setValue(const LLSD& value );
virtual LLSD getValue() const;
void setLabel( const LLString& label);
virtual BOOL setLabelArg( const LLString& key, const LLString& text );
void setLabelUnselected(const LLString& label);
void setLabelSelected(const LLString& label);
void setDisabledLabel(const LLString& disabled_label);
void setDisabledSelectedLabel(const LLString& disabled_label);
void setDisabledLabelColor( const LLColor4& c ) { mDisabledLabelColor = c; }
void setFont(const LLFontGL *font)
{ mGLFont = ( font ? font : LLFontGL::sSansSerif); }
void setScaleImage(BOOL scale) { mScaleImage = scale; }
void setDropShadowedText(BOOL b) { mDropShadowedText = b; }
void setBorderEnabled(BOOL b) { mBorderEnabled = b; }
static void onHeldDown(void *userdata); // to be called by gIdleCallbacks
static void onMouseCaptureLost(LLMouseHandler* old_captor);
void setFixedBorder(S32 width, S32 height) { mFixedWidth = width; mFixedHeight = height; }
void setHoverGlowStrength(F32 strength) { mHoverGlowStrength = strength; }
private:
void setImageUnselectedID(const LLUUID &image_id);
void setImageSelectedID(const LLUUID &image_id);
void setImageHoverSelectedID(const LLUUID &image_id);
void setImageHoverUnselectedID(const LLUUID &image_id);
void setImageDisabledID(const LLUUID &image_id);
void setImageDisabledSelectedID(const LLUUID &image_id);
public:
void setImageUnselected(const LLString &image_name);
void setImageSelected(const LLString &image_name);
void setImageHoverSelected(const LLString &image_name);
void setImageHoverUnselected(const LLString &image_name);
void setImageDisabled(const LLString &image_name);
void setImageDisabledSelected(const LLString &image_name);
void setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
BOOL getCommitOnReturn() { return mCommitOnReturn; }
protected:
virtual void drawBorder(const LLColor4& color, S32 size);
protected:
void (*mClickedCallback)(void* data );
void (*mMouseDownCallback)(void *data);
void (*mMouseUpCallback)(void *data);
void (*mHeldDownCallback)(void *data);
const LLFontGL *mGLFont;
LLFrameTimer mMouseDownTimer;
F32 mHeldDownDelay; // seconds, after which held-down callbacks get called
LLPointer<LLImageGL> mImageUnselected;
LLUIString mUnselectedLabel;
LLColor4 mUnselectedLabelColor;
LLPointer<LLImageGL> mImageSelected;
LLUIString mSelectedLabel;
LLColor4 mSelectedLabelColor;
LLPointer<LLImageGL> mImageHoverSelected;
LLPointer<LLImageGL> mImageHoverUnselected;
LLPointer<LLImageGL> mImageDisabled;
LLUIString mDisabledLabel;
LLColor4 mDisabledLabelColor;
LLPointer<LLImageGL> mImageDisabledSelected;
LLUIString mDisabledSelectedLabel;
LLColor4 mDisabledSelectedLabelColor;
LLUUID mImageUnselectedID;
LLUUID mImageSelectedID;
LLUUID mImageHoverSelectedID;
LLUUID mImageHoverUnselectedID;
LLUUID mImageDisabledID;
LLUUID mImageDisabledSelectedID;
LLString mImageUnselectedName;
LLString mImageSelectedName;
LLString mImageHoverSelectedName;
LLString mImageHoverUnselectedName;
LLString mImageDisabledName;
LLString mImageDisabledSelectedName;
LLColor4 mHighlightColor;
LLColor4 mUnselectedBgColor;
LLColor4 mSelectedBgColor;
LLColor4 mImageColor;
LLColor4 mDisabledImageColor;
BOOL mToggleState;
BOOL mScaleImage;
BOOL mDropShadowedText;
BOOL mBorderEnabled;
BOOL mFlashing;
LLFontGL::HAlign mHAlign;
S32 mLeftHPad;
S32 mRightHPad;
S32 mFixedWidth;
S32 mFixedHeight;
F32 mHoverGlowStrength;
F32 mCurGlowStrength;
BOOL mNeedsHighlight;
BOOL mCommitOnReturn;
LLPointer<LLImageGL> mImagep;
static LLFrameTimer sFlashingTimer;
};
class LLSquareButton
: public LLButton
{
public:
LLSquareButton(const LLString& name, const LLRect& rect,
const LLString& label,
const LLFontGL *font = NULL,
const LLString& control_name = "",
void (*click_callback)(void*) = NULL,
void *callback_data = NULL,
const LLString& selected_label = LLString::null );
};
// Helpful functions
S32 round_up(S32 grid, S32 value);
#endif // LL_LLBUTTON_H