diff options
Diffstat (limited to 'indra/newview/llchiclet.h')
-rw-r--r-- | indra/newview/llchiclet.h | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h new file mode 100644 index 0000000000..f2b859a090 --- /dev/null +++ b/indra/newview/llchiclet.h @@ -0,0 +1,286 @@ +/** +* @file llchiclet.h +* @brief LLChiclet class header file +* +* $LicenseInfo:firstyear=2002&license=viewergpl$ +* +* Copyright (c) 2002-2009, Linden Research, Inc. +* +* Second Life Viewer Source Code +* The source code in this file ("Source Code") is provided by Linden Lab +* to you under the terms of the GNU General Public License, version 2.0 +* ("GPL"), unless you have obtained a separate licensing agreement +* ("Other License"), formally executed by you and Linden Lab. Terms of +* the GPL can be found in doc/GPL-license.txt in this distribution, or +* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 +* +* There are special exceptions to the terms and conditions of the GPL as +* it is applied to this Source Code. View the full text of the exception +* in the file doc/FLOSS-exception.txt in this software distribution, or +* online at +* http://secondlifegrid.net/programs/open_source/licensing/flossexception +* +* By copying, modifying or distributing this software, you acknowledge +* that you have read and understood your obligations described above, +* and agree to abide by those obligations. +* +* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +* COMPLETENESS OR PERFORMANCE. +* $/LicenseInfo$ +*/ + +#ifndef LL_LLCHICLET_H +#define LL_LLCHICLET_H + +#include "llpanel.h" + +class LLTextBox; +class LLIconCtrl; +class LLAvatarIconCtrl; +class LLVoiceControlPanel; +class LLOutputMonitorCtrl; + +class LLChiclet : public LLUICtrl +{ +public: + + struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> + { + Params(){}; + }; + + virtual ~LLChiclet(); + + virtual void setCounter(S32 counter) = 0; + + virtual S32 getCounter() = 0; + + virtual void setShowCounter(bool show) {mShowCounter = show;}; + + virtual bool getShowCounter() {return mShowCounter;}; + + virtual boost::signals::connection setLeftButtonClickCallback( + const commit_callback_t& cb); + +protected: + + friend class LLUICtrlFactory; + LLChiclet(const Params& p); + + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); + +protected: + S32 mCounter; + bool mShowCounter; +}; + +class LLIMChiclet : public LLChiclet +{ +public: + static LLChiclet* create(LLSD* imSessionId = NULL); + + void setCounter(S32); + + S32 getCounter() {return mCounter;}; + + const LLSD& getIMSessionId() const {return mIMSessionId;}; + + void setIMSessionId(LLSD* imSessionId) {if (imSessionId) mIMSessionId = *imSessionId;}; + void setIMSessionName(const std::string& name); + void setOtherParticipantId(const LLUUID& other_participant_id); + + void setShowSpeaker(bool show); + + bool getShowSpeaker() {return mShowSpeaker;}; + + enum SpeakerStatus + { + SPREAKER_ACTIVE, + SPEAKER_IDLE + }; + + void setSpeakerStatus(SpeakerStatus status); + + SpeakerStatus getSpeakerStatus() {return mSpeakerStatus;}; + + ~LLIMChiclet(); + +protected: + LLIMChiclet(const LLChiclet::Params& p); + friend class LLUICtrlFactory; + + S32 calcCounterWidth(); + + //overrides +public: + + void setShowCounter(bool show); + + void draw(); + + LLRect getRequiredRect(); + +protected: + LLAvatarIconCtrl* mAvatar; + LLTextBox* mCounterText; + LLIconCtrl* mSpeaker; + + LLSD mIMSessionId; + bool mShowSpeaker; + SpeakerStatus mSpeakerStatus; +}; + +class LLNotificationChiclet : public LLChiclet +{ +public: + + struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + { + Optional<LLUIImage*> + image_unselected, + image_selected, + image_hover_selected, + image_hover_unselected, + image_disabled_selected, + image_disabled, + image_overlay; + + Optional<S32> + label_left; + + Params(); + }; + + static LLChiclet* create(const Params& p); + + void setCounter(S32 counter); + + S32 getCounter() {return mCounter;}; + + boost::signals::connection setClickCallback(const commit_callback_t& cb); + + virtual ~ LLNotificationChiclet(); + +protected: + LLNotificationChiclet(const Params& p); + friend class LLUICtrlFactory; + +protected: + LLButton* mButton; + LLTextBox* mCounterText; +}; + +class LLChicletPanel : public LLPanel +{ +public: + + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + { + Params(){}; + }; + + static LLChicletPanel* create(); + + LLChiclet* createChiclet(LLSD* imSessionId = NULL, S32 pos = 0); + + bool addChiclet(LLChiclet*, S32 pos); + + LLChiclet* getChiclet(S32 pos); + + LLChiclet* findIMChiclet(LLSD* imSessionId); + + S32 getChicletCount() {return mChicletList.size();}; + + void removeChiclet(S32 pos); + + void removeChiclet(LLChiclet*); + + void removeIMChiclet(LLSD* imSessionId); + + void removeAll(); + + void arrange(); + + ~LLChicletPanel(); + + void scrollLeft(); + + void scrollRight(); + + void onLeftScrollClick(); + + void onRightScrollClick(); + + boost::signals::connection setChicletClickCallback( + const commit_callback_t& cb); + + void onChicletClick(LLUICtrl*ctrl,const LLSD¶m); + + //overrides +public: + + void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE ); + + void draw(); + + BOOL postBuild(); + +protected: + LLChicletPanel(const Params&p); + friend class LLUICtrlFactory; + + bool needsScrolling(); + + bool canScrollRight(); + + bool canScrollLeft(); + + enum ScrollDirection + { + SCROLL_LEFT = 1, + SCROLL_RIGHT = -1 + }; + + void scroll(ScrollDirection direction); + + typedef std::vector<LLChiclet*> chiclet_list_t; + + void removeChiclet(chiclet_list_t::iterator it); + + BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); + +protected: + + chiclet_list_t mChicletList; + LLButton* mLeftScroll; + LLButton* mRightScroll; + S32 mFirstToShow; + S32 mLastToShow; + LLPanel* mScrollArea; +}; + + +class LLTalkButton : public LLUICtrl +{ +public: + + virtual ~LLTalkButton(); + + void onClick_SpeakBtn(); + void onClick_ShowBtn(); + + void draw(); + +protected: + friend class LLUICtrlFactory; + LLTalkButton(const LLUICtrl::Params& p); + +private: + LLButton* mSpeakBtn; + LLButton* mShowBtn; + LLVoiceControlPanel* mPrivateCallPanel; + LLOutputMonitorCtrl* mOutputMonitor; +}; + +#endif // LL_LLCHICLET_H |