diff options
Diffstat (limited to 'indra/newview/llchiclet.h')
-rw-r--r-- | indra/newview/llchiclet.h | 1274 |
1 files changed, 637 insertions, 637 deletions
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index 1698fa269a..39b5e01d80 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -1,25 +1,25 @@ -/** +/** * @file llchiclet.h * @brief LLChiclet class header file * * $LicenseInfo:firstyear=2002&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -42,55 +42,55 @@ class LLChicletNotificationCounterCtrl : public LLTextBox { public: - struct Params : public LLInitParam::Block<Params, LLTextBox::Params> - { - /** - * Contains maximum displayed count of unread messages. Default value is 9. - * - * If count is less than "max_unread_count" will be displayed as is. - * Otherwise 9+ will be shown (for default value). - */ - Optional<S32> max_displayed_count; - - Params(); - }; - - /** - * Sets number of notifications - */ - virtual void setCounter(S32 counter); - - /** - * Returns number of notifications - */ - virtual S32 getCounter() const { return mCounter; } - - /** - * Returns width, required to display amount of notifications in text form. - * Width is the only valid value. - */ - /*virtual*/ LLRect getRequiredRect(); - - /** - * Sets number of notifications using LLSD - */ - /*virtual*/ void setValue(const LLSD& value); - - /** - * Returns number of notifications wrapped in LLSD - */ - /*virtual*/ LLSD getValue() const; + struct Params : public LLInitParam::Block<Params, LLTextBox::Params> + { + /** + * Contains maximum displayed count of unread messages. Default value is 9. + * + * If count is less than "max_unread_count" will be displayed as is. + * Otherwise 9+ will be shown (for default value). + */ + Optional<S32> max_displayed_count; + + Params(); + }; + + /** + * Sets number of notifications + */ + virtual void setCounter(S32 counter); + + /** + * Returns number of notifications + */ + virtual S32 getCounter() const { return mCounter; } + + /** + * Returns width, required to display amount of notifications in text form. + * Width is the only valid value. + */ + /*virtual*/ LLRect getRequiredRect(); + + /** + * Sets number of notifications using LLSD + */ + /*virtual*/ void setValue(const LLSD& value); + + /** + * Returns number of notifications wrapped in LLSD + */ + /*virtual*/ LLSD getValue() const; protected: - LLChicletNotificationCounterCtrl(const Params& p); - friend class LLUICtrlFactory; + LLChicletNotificationCounterCtrl(const Params& p); + friend class LLUICtrlFactory; private: - S32 mCounter; - S32 mInitialWidth; - S32 mMaxDisplayedCount; + S32 mCounter; + S32 mInitialWidth; + S32 mMaxDisplayedCount; }; /** @@ -100,20 +100,20 @@ class LLChicletAvatarIconCtrl : public LLAvatarIconCtrl { public: - struct Params : public LLInitParam::Block<Params, LLAvatarIconCtrl::Params> - { - Params() - { - changeDefault(draw_tooltip, FALSE); - changeDefault(mouse_opaque, FALSE); - changeDefault(default_icon_name, "Generic_Person"); - }; - }; + struct Params : public LLInitParam::Block<Params, LLAvatarIconCtrl::Params> + { + Params() + { + changeDefault(draw_tooltip, FALSE); + changeDefault(mouse_opaque, FALSE); + changeDefault(default_icon_name, "Generic_Person"); + }; + }; protected: - LLChicletAvatarIconCtrl(const Params& p); - friend class LLUICtrlFactory; + LLChicletAvatarIconCtrl(const Params& p); + friend class LLUICtrlFactory; }; /** @@ -123,30 +123,30 @@ class LLChicletInvOfferIconCtrl : public LLChicletAvatarIconCtrl { public: - struct Params : - public LLInitParam::Block<Params, LLChicletAvatarIconCtrl::Params> - { - Optional<std::string> default_icon; + struct Params : + public LLInitParam::Block<Params, LLChicletAvatarIconCtrl::Params> + { + Optional<std::string> default_icon; - Params() - : default_icon("default_icon", "Generic_Object_Small") - { - changeDefault(avatar_id, LLUUID::null); - }; - }; + Params() + : default_icon("default_icon", "Generic_Object_Small") + { + changeDefault(avatar_id, LLUUID::null); + }; + }; - /** - * Sets icon, if value is LLUUID::null - default icon will be set. - */ - virtual void setValue(const LLSD& value ); + /** + * Sets icon, if value is LLUUID::null - default icon will be set. + */ + virtual void setValue(const LLSD& value ); protected: - LLChicletInvOfferIconCtrl(const Params& p); - friend class LLUICtrlFactory; + LLChicletInvOfferIconCtrl(const Params& p); + friend class LLUICtrlFactory; private: - std::string mDefaultIcon; + std::string mDefaultIcon; }; /** @@ -156,81 +156,81 @@ class LLChiclet : public LLUICtrl { public: - struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> - { - Optional<bool> show_counter, - enable_counter; + struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> + { + Optional<bool> show_counter, + enable_counter; - Params(); - }; + Params(); + }; - virtual ~LLChiclet() {} + virtual ~LLChiclet() {} - /** - * Associates chat session id with chiclet. - */ - virtual void setSessionId(const LLUUID& session_id) { mSessionId = session_id; } + /** + * Associates chat session id with chiclet. + */ + virtual void setSessionId(const LLUUID& session_id) { mSessionId = session_id; } - /** - * Returns associated chat session. - */ - virtual const LLUUID& getSessionId() const { return mSessionId; } + /** + * Returns associated chat session. + */ + virtual const LLUUID& getSessionId() const { return mSessionId; } - /** - * Sets show counter state. - */ - virtual void setShowCounter(bool show) { mShowCounter = show; } + /** + * Sets show counter state. + */ + virtual void setShowCounter(bool show) { mShowCounter = show; } - /** - * Connects chiclet clicked event with callback. - */ - /*virtual*/ boost::signals2::connection setLeftButtonClickCallback( - const commit_callback_t& cb); + /** + * Connects chiclet clicked event with callback. + */ + /*virtual*/ boost::signals2::connection setLeftButtonClickCallback( + const commit_callback_t& cb); - typedef boost::function<void (LLChiclet* ctrl, const LLSD& param)> - chiclet_size_changed_callback_t; + typedef boost::function<void (LLChiclet* ctrl, const LLSD& param)> + chiclet_size_changed_callback_t; - /** - * Connects chiclets size changed event with callback. - */ - virtual boost::signals2::connection setChicletSizeChangedCallback( - const chiclet_size_changed_callback_t& cb); + /** + * Connects chiclets size changed event with callback. + */ + virtual boost::signals2::connection setChicletSizeChangedCallback( + const chiclet_size_changed_callback_t& cb); - /** - * Sets IM Session id using LLSD - */ - /*virtual*/ LLSD getValue() const; + /** + * Sets IM Session id using LLSD + */ + /*virtual*/ LLSD getValue() const; - /** - * Returns IM Session id using LLSD - */ - /*virtual*/ void setValue(const LLSD& value); + /** + * Returns IM Session id using LLSD + */ + /*virtual*/ void setValue(const LLSD& value); protected: - friend class LLUICtrlFactory; - LLChiclet(const Params& p); + friend class LLUICtrlFactory; + LLChiclet(const Params& p); - /** - * Notifies subscribers about click on chiclet. - */ - /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + /** + * Notifies subscribers about click on chiclet. + */ + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); - /** - * Notifies subscribers about chiclet size changed event. - */ - virtual void onChicletSizeChanged(); + /** + * Notifies subscribers about chiclet size changed event. + */ + virtual void onChicletSizeChanged(); private: - LLUUID mSessionId; + LLUUID mSessionId; - bool mShowCounter; + bool mShowCounter; - typedef boost::signals2::signal<void (LLChiclet* ctrl, const LLSD& param)> - chiclet_size_changed_signal_t; + typedef boost::signals2::signal<void (LLChiclet* ctrl, const LLSD& param)> + chiclet_size_changed_signal_t; - chiclet_size_changed_signal_t mChicletSizeChangedSignal; + chiclet_size_changed_signal_t mChicletSizeChangedSignal; }; @@ -242,122 +242,122 @@ private: class LLIMChiclet : public LLChiclet { public: - enum EType { - TYPE_UNKNOWN, - TYPE_IM, - TYPE_GROUP, - TYPE_AD_HOC - }; - struct Params : public LLInitParam::Block<Params, LLChiclet::Params> - {}; - - - virtual ~LLIMChiclet(); - - /** - * It is used for default setting up of chicklet:click handler, etc. - */ - BOOL postBuild(); - - /** - * Sets IM session name. This name will be displayed in chiclet tooltip. - */ - virtual void setIMSessionName(const std::string& name) { setToolTip(name); } - - /** - * Sets id of person/group user is chatting with. - * Session id should be set before calling this - */ - virtual void setOtherParticipantId(const LLUUID& other_participant_id) { mOtherParticipantId = other_participant_id; } - - /** - * Enables/disables the counter control for a chiclet. - */ - virtual void enableCounterControl(bool enable); - - /** - * Sets required width for a chiclet according to visible controls. - */ - virtual void setRequiredWidth(); - - /** - * Shows/hides overlay icon concerning new unread messages. - */ - virtual void setShowNewMessagesIcon(bool show); - - /** - * Returns visibility of overlay icon concerning new unread messages. - */ - virtual bool getShowNewMessagesIcon(); - - /** - * The action taken on mouse down event. - * - * Made public so that it can be triggered from outside - * (more specifically, from the Active IM window). - */ - virtual void onMouseDown(); - - virtual void setToggleState(bool toggle); - - /** - * Displays popup menu. - */ - virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - - void hidePopupMenu(); + enum EType { + TYPE_UNKNOWN, + TYPE_IM, + TYPE_GROUP, + TYPE_AD_HOC + }; + struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + {}; + + + virtual ~LLIMChiclet(); + + /** + * It is used for default setting up of chicklet:click handler, etc. + */ + BOOL postBuild(); + + /** + * Sets IM session name. This name will be displayed in chiclet tooltip. + */ + virtual void setIMSessionName(const std::string& name) { setToolTip(name); } + + /** + * Sets id of person/group user is chatting with. + * Session id should be set before calling this + */ + virtual void setOtherParticipantId(const LLUUID& other_participant_id) { mOtherParticipantId = other_participant_id; } + + /** + * Enables/disables the counter control for a chiclet. + */ + virtual void enableCounterControl(bool enable); + + /** + * Sets required width for a chiclet according to visible controls. + */ + virtual void setRequiredWidth(); + + /** + * Shows/hides overlay icon concerning new unread messages. + */ + virtual void setShowNewMessagesIcon(bool show); + + /** + * Returns visibility of overlay icon concerning new unread messages. + */ + virtual bool getShowNewMessagesIcon(); + + /** + * The action taken on mouse down event. + * + * Made public so that it can be triggered from outside + * (more specifically, from the Active IM window). + */ + virtual void onMouseDown(); + + virtual void setToggleState(bool toggle); + + /** + * Displays popup menu. + */ + virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + + void hidePopupMenu(); protected: - LLIMChiclet(const LLIMChiclet::Params& p); + LLIMChiclet(const LLIMChiclet::Params& p); protected: - /** - * Creates chiclet popup menu. - */ - virtual void createPopupMenu() = 0; + /** + * Creates chiclet popup menu. + */ + virtual void createPopupMenu() = 0; - /** - * Enables/disables menus. - */ - virtual void updateMenuItems() {}; + /** + * Enables/disables menus. + */ + virtual void updateMenuItems() {}; - bool canCreateMenu(); + bool canCreateMenu(); - LLHandle<LLUICtrl> mPopupMenuHandle; + LLHandle<LLUICtrl> mPopupMenuHandle; - bool mShowSpeaker; - bool mCounterEnabled; - /* initial width of chiclet, should not include counter or speaker width */ - S32 mDefaultWidth; + bool mShowSpeaker; + bool mCounterEnabled; + /* initial width of chiclet, should not include counter or speaker width */ + S32 mDefaultWidth; - LLIconCtrl* mNewMessagesIcon; - LLButton* mChicletButton; + LLIconCtrl* mNewMessagesIcon; + LLButton* mChicletButton; - /** the id of another participant, either an avatar id or a group id*/ - LLUUID mOtherParticipantId; + /** the id of another participant, either an avatar id or a group id*/ + LLUUID mOtherParticipantId; - template<typename Container> - struct CollectChicletCombiner { - typedef Container result_type; + template<typename Container> + struct CollectChicletCombiner { + typedef Container result_type; - template<typename InputIterator> - Container operator()(InputIterator first, InputIterator last) const { - Container c = Container(); - for (InputIterator iter = first; iter != last; iter++) { - if (*iter != NULL) { - c.push_back(*iter); - } - } - return c; - } - }; + template<typename InputIterator> + Container operator()(InputIterator first, InputIterator last) const { + Container c = Container(); + for (InputIterator iter = first; iter != last; iter++) { + if (*iter != NULL) { + c.push_back(*iter); + } + } + return c; + } + }; public: - static boost::signals2::signal<LLChiclet* (const LLUUID&), - CollectChicletCombiner<std::list<LLChiclet*> > > - sFindChicletsSignal; + static boost::signals2::signal<LLChiclet* (const LLUUID&), + CollectChicletCombiner<std::list<LLChiclet*> > > + sFindChicletsSignal; }; @@ -368,42 +368,42 @@ class LLScriptChiclet : public LLIMChiclet { public: - struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> - { - Optional<LLButton::Params> chiclet_button; + struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> + { + Optional<LLButton::Params> chiclet_button; - Optional<LLIconCtrl::Params> icon; + Optional<LLIconCtrl::Params> icon; - Optional<LLIconCtrl::Params> new_message_icon; + Optional<LLIconCtrl::Params> new_message_icon; - Params(); - }; + Params(); + }; - /*virtual*/ void setSessionId(const LLUUID& session_id); + /*virtual*/ void setSessionId(const LLUUID& session_id); - /** - * Toggle script floater - */ - /*virtual*/ void onMouseDown(); + /** + * Toggle script floater + */ + /*virtual*/ void onMouseDown(); protected: - LLScriptChiclet(const Params&); - friend class LLUICtrlFactory; + LLScriptChiclet(const Params&); + friend class LLUICtrlFactory; - /** - * Creates chiclet popup menu. - */ - virtual void createPopupMenu(); + /** + * Creates chiclet popup menu. + */ + virtual void createPopupMenu(); - /** - * Processes clicks on chiclet popup menu. - */ - virtual void onMenuItemClicked(const LLSD& user_data); + /** + * Processes clicks on chiclet popup menu. + */ + virtual void onMenuItemClicked(const LLSD& user_data); private: - LLIconCtrl* mChicletIconCtrl; + LLIconCtrl* mChicletIconCtrl; }; /** @@ -413,493 +413,493 @@ class LLInvOfferChiclet: public LLIMChiclet { public: - struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> - { - Optional<LLButton::Params> chiclet_button; + struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> + { + Optional<LLButton::Params> chiclet_button; - Optional<LLChicletInvOfferIconCtrl::Params> icon; + Optional<LLChicletInvOfferIconCtrl::Params> icon; - Optional<LLIconCtrl::Params> new_message_icon; + Optional<LLIconCtrl::Params> new_message_icon; - Params(); - }; + Params(); + }; - /*virtual*/ void setSessionId(const LLUUID& session_id); + /*virtual*/ void setSessionId(const LLUUID& session_id); - /** - * Toggle script floater - */ - /*virtual*/ void onMouseDown(); + /** + * Toggle script floater + */ + /*virtual*/ void onMouseDown(); protected: - LLInvOfferChiclet(const Params&); - friend class LLUICtrlFactory; + LLInvOfferChiclet(const Params&); + friend class LLUICtrlFactory; - /** - * Creates chiclet popup menu. - */ - virtual void createPopupMenu(); + /** + * Creates chiclet popup menu. + */ + virtual void createPopupMenu(); - /** - * Processes clicks on chiclet popup menu. - */ - virtual void onMenuItemClicked(const LLSD& user_data); + /** + * Processes clicks on chiclet popup menu. + */ + virtual void onMenuItemClicked(const LLSD& user_data); private: - LLChicletInvOfferIconCtrl* mChicletIconCtrl; + LLChicletInvOfferIconCtrl* mChicletIconCtrl; }; /** - * Implements notification chiclet. Used to display total amount of unread messages + * Implements notification chiclet. Used to display total amount of unread messages * across all IM sessions, total amount of system notifications. See EXT-3147 for details */ class LLSysWellChiclet : public LLChiclet { public: - - struct Params : public LLInitParam::Block<Params, LLChiclet::Params> - { - Optional<LLButton::Params> button; - Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications; + struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + { + Optional<LLButton::Params> button; + + Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications; - /** - * Contains maximum displayed count of unread messages. Default value is 9. - * - * If count is less than "max_unread_count" will be displayed as is. - * Otherwise 9+ will be shown (for default value). - */ - Optional<S32> max_displayed_count; + /** + * Contains maximum displayed count of unread messages. Default value is 9. + * + * If count is less than "max_unread_count" will be displayed as is. + * Otherwise 9+ will be shown (for default value). + */ + Optional<S32> max_displayed_count; - Params(); - }; + Params(); + }; - /*virtual*/ void setCounter(S32 counter); + /*virtual*/ void setCounter(S32 counter); - // *TODO: mantipov: seems getCounter is not necessary for LLNotificationChiclet - // but inherited interface requires it to implement. - // Probably it can be safe removed. - /*virtual*/S32 getCounter() { return mCounter; } + // *TODO: mantipov: seems getCounter is not necessary for LLNotificationChiclet + // but inherited interface requires it to implement. + // Probably it can be safe removed. + /*virtual*/S32 getCounter() { return mCounter; } - boost::signals2::connection setClickCallback(const commit_callback_t& cb); + boost::signals2::connection setClickCallback(const commit_callback_t& cb); - /*virtual*/ ~LLSysWellChiclet(); + /*virtual*/ ~LLSysWellChiclet(); - void setToggleState(BOOL toggled); + void setToggleState(BOOL toggled); - void setNewMessagesState(bool new_messages); - //this method should change a widget according to state of the SysWellWindow - virtual void updateWidget(bool is_window_empty); + void setNewMessagesState(bool new_messages); + //this method should change a widget according to state of the SysWellWindow + virtual void updateWidget(bool is_window_empty); protected: - LLSysWellChiclet(const Params& p); - friend class LLUICtrlFactory; + LLSysWellChiclet(const Params& p); + friend class LLUICtrlFactory; - /** - * Change Well 'Lit' state from 'Lit' to 'Unlit' and vice-versa. - * - * There is an assumption that it will be called 2*N times to do not change its start state. - * @see FlashToLitTimer - */ - void changeLitState(bool blink); + /** + * Change Well 'Lit' state from 'Lit' to 'Unlit' and vice-versa. + * + * There is an assumption that it will be called 2*N times to do not change its start state. + * @see FlashToLitTimer + */ + void changeLitState(bool blink); - /** - * Displays menu. - */ - virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + /** + * Displays menu. + */ + virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - virtual void createMenu() = 0; + virtual void createMenu() = 0; protected: - class FlashToLitTimer; - LLButton* mButton; - S32 mCounter; - S32 mMaxDisplayedCount; - bool mIsNewMessagesState; - - LLFlashTimer* mFlashToLitTimer; - LLHandle<LLContextMenu> mContextMenuHandle; + class FlashToLitTimer; + LLButton* mButton; + S32 mCounter; + S32 mMaxDisplayedCount; + bool mIsNewMessagesState; + + LLFlashTimer* mFlashToLitTimer; + LLHandle<LLContextMenu> mContextMenuHandle; }; class LLNotificationChiclet : public LLSysWellChiclet { - LOG_CLASS(LLNotificationChiclet); - - friend class LLUICtrlFactory; + LOG_CLASS(LLNotificationChiclet); + + friend class LLUICtrlFactory; public: - struct Params : public LLInitParam::Block<Params, LLSysWellChiclet::Params>{}; - + struct Params : public LLInitParam::Block<Params, LLSysWellChiclet::Params>{}; + protected: - class ChicletNotificationChannel : public LLNotificationChannel - { + class ChicletNotificationChannel : public LLNotificationChannel + { public: - ChicletNotificationChannel(LLNotificationChiclet* chiclet) - : LLNotificationChannel(LLNotificationChannel::Params().filter(filterNotification).name(chiclet->getSessionId().asString())) - , mChiclet(chiclet) - { - // connect counter handlers to the signals - connectToChannel("Group Notifications"); - connectToChannel("Offer"); - connectToChannel("Notifications"); - } + ChicletNotificationChannel(LLNotificationChiclet* chiclet) + : LLNotificationChannel(LLNotificationChannel::Params().filter(filterNotification).name(chiclet->getSessionId().asString())) + , mChiclet(chiclet) + { + // connect counter handlers to the signals + connectToChannel("Group Notifications"); + connectToChannel("Offer"); + connectToChannel("Notifications"); + } virtual ~ChicletNotificationChannel() {} - - static bool filterNotification(LLNotificationPtr notify); - // connect counter updaters to the corresponding signals - /*virtual*/ void onAdd(LLNotificationPtr p) { mChiclet->setCounter(++mChiclet->mUreadSystemNotifications); } - /*virtual*/ void onLoad(LLNotificationPtr p) { mChiclet->setCounter(++mChiclet->mUreadSystemNotifications); } - /*virtual*/ void onDelete(LLNotificationPtr p) { mChiclet->setCounter(--mChiclet->mUreadSystemNotifications); } - - LLNotificationChiclet* const mChiclet; - }; - - boost::scoped_ptr<ChicletNotificationChannel> mNotificationChannel; + + static bool filterNotification(LLNotificationPtr notify); + // connect counter updaters to the corresponding signals + /*virtual*/ void onAdd(LLNotificationPtr p) { mChiclet->setCounter(++mChiclet->mUreadSystemNotifications); } + /*virtual*/ void onLoad(LLNotificationPtr p) { mChiclet->setCounter(++mChiclet->mUreadSystemNotifications); } + /*virtual*/ void onDelete(LLNotificationPtr p) { mChiclet->setCounter(--mChiclet->mUreadSystemNotifications); } + + LLNotificationChiclet* const mChiclet; + }; + + boost::scoped_ptr<ChicletNotificationChannel> mNotificationChannel; LLNotificationChiclet(const Params& p); ~LLNotificationChiclet(); - /** - * Processes clicks on chiclet menu. - */ - void onMenuItemClicked(const LLSD& user_data); - - /** - * Enables chiclet menu items. - */ - bool enableMenuItem(const LLSD& user_data); - - /** - * Creates menu. - */ - /*virtual*/ void createMenu(); - - /*virtual*/ void setCounter(S32 counter); - S32 mUreadSystemNotifications; + /** + * Processes clicks on chiclet menu. + */ + void onMenuItemClicked(const LLSD& user_data); + + /** + * Enables chiclet menu items. + */ + bool enableMenuItem(const LLSD& user_data); + + /** + * Creates menu. + */ + /*virtual*/ void createMenu(); + + /*virtual*/ void setCounter(S32 counter); + S32 mUreadSystemNotifications; }; /** - * Storage class for all IM chiclets. Provides mechanism to display, + * Storage class for all IM chiclets. Provides mechanism to display, * scroll, create, remove chiclets. */ class LLChicletPanel : public LLPanel { public: - struct Params : public LLInitParam::Block<Params, LLPanel::Params> - { - Optional<S32> chiclet_padding, - scrolling_offset, - scroll_button_hpad, - scroll_ratio; + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + { + Optional<S32> chiclet_padding, + scrolling_offset, + scroll_button_hpad, + scroll_ratio; - Optional<S32> min_width; + Optional<S32> min_width; - Params(); - }; + Params(); + }; - virtual ~LLChicletPanel(); + virtual ~LLChicletPanel(); - /** - * Creates chiclet and adds it to chiclet list at specified index. - */ - template<class T> T* createChiclet(const LLUUID& session_id, S32 index); + /** + * Creates chiclet and adds it to chiclet list at specified index. + */ + template<class T> T* createChiclet(const LLUUID& session_id, S32 index); - /** - * Creates chiclet and adds it to chiclet list at right. - */ - template<class T> T* createChiclet(const LLUUID& session_id); + /** + * Creates chiclet and adds it to chiclet list at right. + */ + template<class T> T* createChiclet(const LLUUID& session_id); - /** - * Returns pointer to chiclet of specified type at specified index. - */ - template<class T> T* getChiclet(S32 index); + /** + * Returns pointer to chiclet of specified type at specified index. + */ + template<class T> T* getChiclet(S32 index); - /** - * Returns pointer to LLChiclet at specified index. - */ - LLChiclet* getChiclet(S32 index) { return getChiclet<LLChiclet>(index); } + /** + * Returns pointer to LLChiclet at specified index. + */ + LLChiclet* getChiclet(S32 index) { return getChiclet<LLChiclet>(index); } - /** - * Searches a chiclet using IM session id. - */ - template<class T> T* findChiclet(const LLUUID& im_session_id); + /** + * Searches a chiclet using IM session id. + */ + template<class T> T* findChiclet(const LLUUID& im_session_id); - /** - * Returns number of hosted chiclets. - */ - S32 getChicletCount() {return mChicletList.size();}; + /** + * Returns number of hosted chiclets. + */ + S32 getChicletCount() {return mChicletList.size();}; - /** - * Returns index of chiclet in list. - */ - S32 getChicletIndex(const LLChiclet* chiclet); + /** + * Returns index of chiclet in list. + */ + S32 getChicletIndex(const LLChiclet* chiclet); - /** - * Removes chiclet by index. - */ - void removeChiclet(S32 index); + /** + * Removes chiclet by index. + */ + void removeChiclet(S32 index); - /** - * Removes chiclet by pointer. - */ - void removeChiclet(LLChiclet* chiclet); + /** + * Removes chiclet by pointer. + */ + void removeChiclet(LLChiclet* chiclet); - /** - * Removes chiclet by IM session id. - */ - void removeChiclet(const LLUUID& im_session_id); + /** + * Removes chiclet by IM session id. + */ + void removeChiclet(const LLUUID& im_session_id); - /** - * Removes all chiclets. - */ - void removeAll(); + /** + * Removes all chiclets. + */ + void removeAll(); - /** - * Scrolls the panel to the specified chiclet - */ - void scrollToChiclet(const LLChiclet* chiclet); + /** + * Scrolls the panel to the specified chiclet + */ + void scrollToChiclet(const LLChiclet* chiclet); - boost::signals2::connection setChicletClickedCallback( - const commit_callback_t& cb); + boost::signals2::connection setChicletClickedCallback( + const commit_callback_t& cb); - /*virtual*/ BOOL postBuild(); + /*virtual*/ BOOL postBuild(); - /** - * Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl - */ - void onCurrentVoiceChannelChanged(const LLUUID& session_id); + /** + * Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl + */ + void onCurrentVoiceChannelChanged(const LLUUID& session_id); - /** - * Reshapes controls and rearranges chiclets if needed. - */ - /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE ); + /** + * Reshapes controls and rearranges chiclets if needed. + */ + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE ); - /*virtual*/ void draw(); + /*virtual*/ void draw(); - S32 getMinWidth() const { return mMinWidth; } + S32 getMinWidth() const { return mMinWidth; } - /*virtual*/ S32 notifyParent(const LLSD& info); + /*virtual*/ S32 notifyParent(const LLSD& info); - /** - * Toggle chiclet by session id ON and toggle OFF all other chiclets. - */ - void setChicletToggleState(const LLUUID& session_id, bool toggle); + /** + * Toggle chiclet by session id ON and toggle OFF all other chiclets. + */ + void setChicletToggleState(const LLUUID& session_id, bool toggle); protected: - LLChicletPanel(const Params&p); - friend class LLUICtrlFactory; - - /** - * Adds chiclet to list and rearranges all chiclets. - * They should be right aligned, most recent right. See EXT-1293 - * - * It calculates position of the first chiclet in the list. Other chiclets are placed in arrange(). - * - * @see arrange() - */ - bool addChiclet(LLChiclet*, S32 index); - - /** - * Arranges chiclets to have them in correct positions. - * - * Method bases on assumption that first chiclet has correct rect and starts from the its position. - * - * @see addChiclet() - */ - void arrange(); - - /** - * Returns true if chiclets can be scrolled right. - */ - bool canScrollRight(); - - /** - * Returns true if we need to show scroll buttons - */ - bool needShowScroll(); - - /** - * Returns true if chiclets can be scrolled left. - */ - bool canScrollLeft(); - - /** - * Shows or hides chiclet scroll buttons if chiclets can or can not be scrolled. - */ - void showScrollButtonsIfNeeded(); - - /** - * Shifts chiclets left or right. - */ - void shiftChiclets(S32 offset, S32 start_index = 0); - - /** - * Removes gaps between first chiclet and scroll area left side, - * last chiclet and scroll area right side. - */ - void trimChiclets(); - - /** - * Scrolls chiclets to right or left. - */ - void scroll(S32 offset); - - /** - * Verifies that chiclets can be scrolled left, then calls scroll() - */ - void scrollLeft(); - - /** - * Verifies that chiclets can be scrolled right, then calls scroll() - */ - void scrollRight(); - - /** - * Callback for left scroll button clicked - */ - void onLeftScrollClick(); - - /** - * Callback for right scroll button clicked - */ - void onRightScrollClick(); - - /** - * Callback for right scroll button held down event - */ - void onLeftScrollHeldDown(); - - /** - * Callback for left scroll button held down event - */ - void onRightScrollHeldDown(); - - /** - * Callback for mouse wheel scrolled, calls scrollRight() or scrollLeft() - */ - BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); - - /** - * Notifies subscribers about click on chiclet. - * Do not place any code here, instead subscribe on event (see setChicletClickedCallback). - */ - void onChicletClick(LLUICtrl*ctrl,const LLSD¶m); - - /** - * Callback for chiclet size changed event, rearranges chiclets. - */ - void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param); - - void onMessageCountChanged(const LLSD& data); - - void objectChicletCallback(const LLSD& data); - - typedef std::vector<LLChiclet*> chiclet_list_t; - - /** - * Removes chiclet from scroll area and chiclet list. - */ - void removeChiclet(chiclet_list_t::iterator it); - - S32 getChicletPadding() { return mChicletPadding; } - - S32 getScrollingOffset() { return mScrollingOffset; } - - bool isAnyIMFloaterDoked(); + LLChicletPanel(const Params&p); + friend class LLUICtrlFactory; + + /** + * Adds chiclet to list and rearranges all chiclets. + * They should be right aligned, most recent right. See EXT-1293 + * + * It calculates position of the first chiclet in the list. Other chiclets are placed in arrange(). + * + * @see arrange() + */ + bool addChiclet(LLChiclet*, S32 index); + + /** + * Arranges chiclets to have them in correct positions. + * + * Method bases on assumption that first chiclet has correct rect and starts from the its position. + * + * @see addChiclet() + */ + void arrange(); + + /** + * Returns true if chiclets can be scrolled right. + */ + bool canScrollRight(); + + /** + * Returns true if we need to show scroll buttons + */ + bool needShowScroll(); + + /** + * Returns true if chiclets can be scrolled left. + */ + bool canScrollLeft(); + + /** + * Shows or hides chiclet scroll buttons if chiclets can or can not be scrolled. + */ + void showScrollButtonsIfNeeded(); + + /** + * Shifts chiclets left or right. + */ + void shiftChiclets(S32 offset, S32 start_index = 0); + + /** + * Removes gaps between first chiclet and scroll area left side, + * last chiclet and scroll area right side. + */ + void trimChiclets(); + + /** + * Scrolls chiclets to right or left. + */ + void scroll(S32 offset); + + /** + * Verifies that chiclets can be scrolled left, then calls scroll() + */ + void scrollLeft(); + + /** + * Verifies that chiclets can be scrolled right, then calls scroll() + */ + void scrollRight(); + + /** + * Callback for left scroll button clicked + */ + void onLeftScrollClick(); + + /** + * Callback for right scroll button clicked + */ + void onRightScrollClick(); + + /** + * Callback for right scroll button held down event + */ + void onLeftScrollHeldDown(); + + /** + * Callback for left scroll button held down event + */ + void onRightScrollHeldDown(); + + /** + * Callback for mouse wheel scrolled, calls scrollRight() or scrollLeft() + */ + BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); + + /** + * Notifies subscribers about click on chiclet. + * Do not place any code here, instead subscribe on event (see setChicletClickedCallback). + */ + void onChicletClick(LLUICtrl*ctrl,const LLSD¶m); + + /** + * Callback for chiclet size changed event, rearranges chiclets. + */ + void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param); + + void onMessageCountChanged(const LLSD& data); + + void objectChicletCallback(const LLSD& data); + + typedef std::vector<LLChiclet*> chiclet_list_t; + + /** + * Removes chiclet from scroll area and chiclet list. + */ + void removeChiclet(chiclet_list_t::iterator it); + + S32 getChicletPadding() { return mChicletPadding; } + + S32 getScrollingOffset() { return mScrollingOffset; } + + bool isAnyIMFloaterDoked(); protected: - chiclet_list_t mChicletList; - LLButton* mLeftScrollButton; - LLButton* mRightScrollButton; - LLPanel* mScrollArea; - - S32 mChicletPadding; - S32 mScrollingOffset; - S32 mScrollButtonHPad; - S32 mScrollRatio; - S32 mMinWidth; - bool mShowControls; - static const S32 s_scroll_ratio; + chiclet_list_t mChicletList; + LLButton* mLeftScrollButton; + LLButton* mRightScrollButton; + LLPanel* mScrollArea; + + S32 mChicletPadding; + S32 mScrollingOffset; + S32 mScrollButtonHPad; + S32 mScrollRatio; + S32 mMinWidth; + bool mShowControls; + static const S32 s_scroll_ratio; }; -template<class T> +template<class T> T* LLChicletPanel::createChiclet(const LLUUID& session_id, S32 index) { - typename T::Params params; - T* chiclet = LLUICtrlFactory::create<T>(params); - if(!chiclet) - { - LL_WARNS() << "Could not create chiclet" << LL_ENDL; - return NULL; - } - if(!addChiclet(chiclet, index)) - { - delete chiclet; - LL_WARNS() << "Could not add chiclet to chiclet panel" << LL_ENDL; - return NULL; - } - - if (!isAnyIMFloaterDoked()) - { - scrollToChiclet(chiclet); - } - - chiclet->setSessionId(session_id); - - return chiclet; + typename T::Params params; + T* chiclet = LLUICtrlFactory::create<T>(params); + if(!chiclet) + { + LL_WARNS() << "Could not create chiclet" << LL_ENDL; + return NULL; + } + if(!addChiclet(chiclet, index)) + { + delete chiclet; + LL_WARNS() << "Could not add chiclet to chiclet panel" << LL_ENDL; + return NULL; + } + + if (!isAnyIMFloaterDoked()) + { + scrollToChiclet(chiclet); + } + + chiclet->setSessionId(session_id); + + return chiclet; } template<class T> T* LLChicletPanel::createChiclet(const LLUUID& session_id) { - return createChiclet<T>(session_id, mChicletList.size()); + return createChiclet<T>(session_id, mChicletList.size()); } template<class T> T* LLChicletPanel::findChiclet(const LLUUID& im_session_id) { - if(im_session_id.isNull()) - { - return NULL; - } - - chiclet_list_t::const_iterator it = mChicletList.begin(); - for( ; mChicletList.end() != it; ++it) - { - LLChiclet* chiclet = *it; - - llassert(chiclet); - if (!chiclet) continue; - if(chiclet->getSessionId() == im_session_id) - { - T* result = dynamic_cast<T*>(chiclet); - if(!result) - { - LL_WARNS() << "Found chiclet but of wrong type " << LL_ENDL; - continue; - } - return result; - } - } - return NULL; + if(im_session_id.isNull()) + { + return NULL; + } + + chiclet_list_t::const_iterator it = mChicletList.begin(); + for( ; mChicletList.end() != it; ++it) + { + LLChiclet* chiclet = *it; + + llassert(chiclet); + if (!chiclet) continue; + if(chiclet->getSessionId() == im_session_id) + { + T* result = dynamic_cast<T*>(chiclet); + if(!result) + { + LL_WARNS() << "Found chiclet but of wrong type " << LL_ENDL; + continue; + } + return result; + } + } + return NULL; } template<class T> T* LLChicletPanel::getChiclet(S32 index) { - if(index < 0 || index >= getChicletCount()) - { - return NULL; - } - - LLChiclet* chiclet = mChicletList[index]; - T*result = dynamic_cast<T*>(chiclet); - if(!result && chiclet) - { - LL_WARNS() << "Found chiclet but of wrong type " << LL_ENDL; - } - return result; + if(index < 0 || index >= getChicletCount()) + { + return NULL; + } + + LLChiclet* chiclet = mChicletList[index]; + T*result = dynamic_cast<T*>(chiclet); + if(!result && chiclet) + { + LL_WARNS() << "Found chiclet but of wrong type " << LL_ENDL; + } + return result; } #endif // LL_LLCHICLET_H |