diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llui/llpanel.h |
Print done when done.
Diffstat (limited to 'indra/llui/llpanel.h')
-rw-r--r-- | indra/llui/llpanel.h | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h new file mode 100644 index 0000000000..9da27b6f38 --- /dev/null +++ b/indra/llui/llpanel.h @@ -0,0 +1,229 @@ +/** + * @file llpanel.h + * @author James Cook, Tom Yedwab + * @brief LLPanel base class + * + * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLPANEL_H +#define LL_LLPANEL_H + +// Opaque view with a background and a border. Can contain LLUICtrls. + +#include "llcallbackmap.h" +#include "lluictrl.h" +#include "llviewborder.h" +#include "v4color.h" +#include <list> + +const S32 LLPANEL_BORDER_WIDTH = 1; +const BOOL BORDER_YES = TRUE; +const BOOL BORDER_NO = FALSE; + +class LLViewerImage; +class LLUUID; +class LLCheckBoxCtrl; +class LLComboBox; +class LLIconCtrl; +class LLLineEditor; +class LLRadioGroup; +class LLScrollListCtrl; +class LLSliderCtrl; +class LLSpinCtrl; +class LLTextBox; +class LLTextEditor; + +class LLAlertInfo +{ +public: + LLString mLabel; + LLString::format_map_t mArgs; + + LLAlertInfo(LLString label, LLString::format_map_t args) + : mLabel(label), mArgs(args) { } + + LLAlertInfo() { } +}; + +class LLPanel : public LLUICtrl +{ +public: + virtual EWidgetType getWidgetType() const; + virtual LLString getWidgetTag() const; + + // defaults to TRUE + virtual BOOL isPanel(); + + // minimal constructor for data-driven initialization + LLPanel(); + LLPanel(const LLString& name); + + // Position and size not saved + LLPanel(const LLString& name, const LLRect& rect, BOOL bordered = TRUE); + + // Position and size are saved to rect_control + LLPanel(const LLString& name, const LLString& rect_control, BOOL bordered = TRUE); + + void addBorder( LLViewBorder::EBevel border_bevel = LLViewBorder::BEVEL_OUT, + LLViewBorder::EStyle border_style = LLViewBorder::STYLE_LINE, + S32 border_thickness = LLPANEL_BORDER_WIDTH ); + + virtual ~LLPanel(); + virtual void draw(); + virtual void refresh(); // called in setFocus() + virtual void setFocus( BOOL b ); + void setFocusRoot(BOOL b) { mIsFocusRoot = b; } + virtual BOOL handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ); + virtual BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent ); + virtual BOOL postBuild(); + + void requires(LLString name, EWidgetType type = WIDGET_TYPE_DONTCARE); + BOOL checkRequirements(); + + static void alertXml(LLString label, LLString::format_map_t args = LLString::format_map_t()); + static BOOL nextAlert(LLAlertInfo &alert); + + void setBackgroundColor( const LLColor4& color ); + void setTransparentColor(const LLColor4& color); + void setBackgroundVisible( BOOL b ) { mBgVisible = b; } + void setBackgroundOpaque(BOOL b) { mBgOpaque = b; } + void setDefaultBtn(LLButton* btn = NULL); + void setDefaultBtn(const LLString& id); + void setLabel(LLString label) { mLabel = label; } + LLString getLabel() const { return mLabel; } + + void setRectControl(const LLString& rect_control) { mRectControl.assign(rect_control); } + + void setBorderVisible( BOOL b ); + + void setCtrlsEnabled(BOOL b); + virtual void clearCtrls(); + + LLViewHandle getHandle() { return mViewHandle; } + + S32 getLastTabGroup() { return mLastTabGroup; } + + LLView* getCtrlByNameAndType(const LLString& name, EWidgetType type); + + static LLPanel* getPanelByHandle(LLViewHandle handle); + + virtual const LLCallbackMap::map_t& getFactoryMap() const { return mFactoryMap; } + + virtual LLXMLNodePtr getXML(bool save_children = true) const; + static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); + void initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); + void setPanelParameters(LLXMLNodePtr node, LLView *parentp); + + // ** Wrappers for setting child properties by name ** -TomY + + // Override to set not found list + virtual LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const; + + // LLView + void childSetVisible(const LLString& name, bool visible); + void childShow(const LLString& name) { childSetVisible(name, true); } + void childHide(const LLString& name) { childSetVisible(name, false); } + bool childIsVisible(const LLString& id) const; + void childSetTentative(const LLString& name, bool tentative); + + void childSetEnabled(const LLString& name, bool enabled); + void childEnable(const LLString& name) { childSetEnabled(name, true); } + void childDisable(const LLString& name) { childSetEnabled(name, false); }; + bool childIsEnabled(const LLString& id) const; + + void childSetToolTip(const LLString& id, const LLString& msg); + void childSetRect(const LLString& id, const LLRect &rect); + bool childGetRect(const LLString& id, LLRect& rect) const; + + // LLUICtrl + void childSetFocus(const LLString& id, BOOL focus = TRUE); + BOOL childHasFocus(const LLString& id); + void childSetFocusChangedCallback(const LLString& id, void (*cb)(LLUICtrl*, void*)); + + void childSetCommitCallback(const LLString& id, void (*cb)(LLUICtrl*, void*), void* userdata = NULL ); + void childSetDoubleClickCallback(const LLString& id, void (*cb)(void*), void* userdata = NULL ); + void childSetValidate(const LLString& id, BOOL (*cb)(LLUICtrl*, void*) ); + void childSetUserData(const LLString& id, void* userdata); + + void childSetColor(const LLString& id, const LLColor4& color); + + LLCtrlSelectionInterface* childGetSelectionInterface(const LLString& id); + LLCtrlListInterface* childGetListInterface(const LLString& id); + LLCtrlScrollInterface* childGetScrollInterface(const LLString& id); + + // This is the magic bullet for data-driven UI + void childSetValue(const LLString& id, LLSD value); + LLSD childGetValue(const LLString& id) const; + + // For setting text / label replacement params, e.g. "Hello [NAME]" + // Not implemented for all types, defaults to noop, returns FALSE if not applicaple + BOOL childSetTextArg(const LLString& id, const LLString& key, const LLString& text); + BOOL childSetLabelArg(const LLString& id, const LLString& key, const LLString& text); + + // LLSlider / LLSpinCtrl + void childSetMinValue(const LLString& id, LLSD min_value); + void childSetMaxValue(const LLString& id, LLSD max_value); + + // LLTabContainer + void childShowTab(const LLString& id, const LLString& tabname, bool visible = true); + LLPanel *childGetVisibleTab(const LLString& id); + void childSetTabChangeCallback(const LLString& id, const LLString& tabname, void (*on_tab_clicked)(void*, bool), void *userdata); + + // LLTextBox + void childSetWrappedText(const LLString& id, const LLString& text, bool visible = true); + + // LLTextBox/LLTextEditor/LLLineEditor + void childSetText(const LLString& id, const LLString& text); + LLString childGetText(const LLString& id); + + // LLLineEditor + void childSetKeystrokeCallback(const LLString& id, void (*keystroke_callback)(LLLineEditor* caller, void* user_data), void *user_data); + void childSetPrevalidate(const LLString& id, BOOL (*func)(const LLWString &) ); + + // LLButton + void childSetAction(const LLString& id, void(*function)(void*), void* value); + void childSetActionTextbox(const LLString& id, void(*function)(void*)); + void childSetControlName(const LLString& id, const LLString& control_name); + + // Error reporting + void childNotFound(const LLString& id) const; + void childDisplayNotFound(); + + typedef std::queue<LLAlertInfo> alert_queue_t; + static alert_queue_t sAlertQueue; + +private: + // common constructor + void init(); + +protected: + virtual void addCtrl( LLUICtrl* ctrl, S32 tab_group ); + virtual void addCtrlAtEnd( LLUICtrl* ctrl, S32 tab_group); + + // Unified error reporting for the child* functions + typedef std::set<LLString> expected_members_list_t; + mutable expected_members_list_t mExpectedMembers; + mutable expected_members_list_t mNewExpectedMembers; + + LLString mRectControl; + LLColor4 mBgColorAlpha; + LLColor4 mBgColorOpaque; + LLColor4 mDefaultBtnHighlight; + BOOL mBgVisible; + BOOL mBgOpaque; + LLViewBorder* mBorder; + LLButton* mDefaultBtn; + LLCallbackMap::map_t mFactoryMap; + LLString mLabel; + S32 mLastTabGroup; + + typedef std::map<LLString, EWidgetType> requirements_map_t; + requirements_map_t mRequirements; + + typedef std::map<LLViewHandle, LLPanel*> panel_map_t; + static panel_map_t sPanelMap; +}; + +#endif |