diff options
Diffstat (limited to 'indra/newview/llscreenchannel.h')
-rw-r--r-- | indra/newview/llscreenchannel.h | 180 |
1 files changed, 119 insertions, 61 deletions
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index 746580b574..459c28ac7c 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -48,11 +48,102 @@ typedef enum e_notification_toast_alignment NA_BOTTOM, } EToastAlignment; +typedef enum e_channel_alignment +{ + CA_LEFT, + CA_CENTRE, + CA_RIGHT, +} EChannelAlignment; + +class LLScreenChannelBase : public LLUICtrl +{ + friend class LLChannelManager; +public: + LLScreenChannelBase(const LLUUID& id); + ~LLScreenChannelBase(); + + // Channel's outfit-functions + // update channel's size and position in the World View + virtual void updatePositionAndSize(LLRect old_world_rect, LLRect new_world_rect); + // initialization of channel's shape and position + virtual void init(S32 channel_left, S32 channel_right); + + + virtual void setToastAlignment(EToastAlignment align) {mToastAlignment = align;} + + virtual void setChannelAlignment(EChannelAlignment align) {mChannelAlignment = align;} + virtual void setOverflowFormatString ( const std::string& str) { mOverflowFormatString = str; } + + // kill or modify a toast by its ID + virtual void killToastByNotificationID(LLUUID id) {}; + virtual void modifyToastNotificationByID(LLUUID id, LLSD data) {}; + + // hide all toasts from screen, but not remove them from a channel + virtual void hideToastsFromScreen() {}; + // removes all toasts from a channel + virtual void removeToastsFromChannel() {}; + + // show all toasts in a channel + virtual void redrawToasts() {}; + + virtual void closeOverflowToastPanel() {}; + virtual void hideOverflowToastPanel() {}; + + + // Channel's behavior-functions + // set whether a channel will control hovering inside itself or not + virtual void setControlHovering(bool control) { mControlHovering = control; } + // set Hovering flag for a channel + virtual void setHovering(bool hovering) { mIsHovering = hovering; } + + void setCanStoreToasts(bool store) { mCanStoreToasts = store; } + + void setDisplayToastsAlways(bool display_toasts) { mDisplayToastsAlways = display_toasts; } + bool getDisplayToastsAlways() { return mDisplayToastsAlways; } + + // get number of hidden notifications from a channel + S32 getNumberOfHiddenToasts() { return mHiddenToastsNum;} + + + void setShowToasts(bool show) { mShowToasts = show; } + bool getShowToasts() { return mShowToasts; } + + // get toast allignment preset for a channel + e_notification_toast_alignment getToastAlignment() {return mToastAlignment;} + + // get ID of a channel + LLUUID getChannelID() { return mID; } + +protected: + // Channel's flags + bool mControlHovering; + bool mIsHovering; + bool mCanStoreToasts; + bool mDisplayToastsAlways; + bool mOverflowToastHidden; + // controls whether a channel shows toasts or not + bool mShowToasts; + // + EToastAlignment mToastAlignment; + EChannelAlignment mChannelAlignment; + + // attributes for the Overflow Toast + S32 mHiddenToastsNum; + LLToast* mOverflowToastPanel; + std::string mOverflowFormatString; + + // channel's ID + LLUUID mID; + + // store a connection to prevent futher crash that is caused by sending a signal to a destroyed channel + boost::signals2::connection mWorldViewRectConnection; +}; + /** * Screen channel manages toasts visibility and positioning on the screen. */ -class LLScreenChannel : public LLUICtrl +class LLScreenChannel : public LLScreenChannelBase { friend class LLChannelManager; public: @@ -60,14 +151,10 @@ public: virtual ~LLScreenChannel(); // Channel's outfit-functions - // classic reshape - void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); + // update channel's size and position in the World View + void updatePositionAndSize(LLRect old_world_rect, LLRect new_world_rect); // initialization of channel's shape and position void init(S32 channel_left, S32 channel_right); - // set allignment of toasts inside a channel - void setToastAlignment(e_notification_toast_alignment align) {mToastAlignment = align;} - // set a template for a string in the OverflowToast - void setOverflowFormatString ( std::string str) { mOverflowFormatString = str; } // Operating with toasts // add a toast to a channel @@ -80,61 +167,45 @@ public: // removes all toasts from a channel void removeToastsFromChannel(); // show all toasts in a channel - void showToasts(); + void redrawToasts(); // void loadStoredToastsToChannel(); - // finds a toast among stored by its ID and throws it on a screen to a channel - void loadStoredToastByIDToChannel(LLUUID id); - // removes a toast from stored finding it by its ID - void removeStoredToastByID(LLUUID id); - // remove all toasts from screen and store them - void removeAndStoreAllVisibleToasts(); + // finds a toast among stored by its Notification ID and throws it on a screen to a channel + void loadStoredToastByNotificationIDToChannel(LLUUID id); + // removes a toast from stored finding it by its Notification ID + void removeStoredToastByNotificationID(LLUUID id); + // removes from channel all toasts that belongs to the certain IM session + void removeToastsBySessionID(LLUUID id); + // remove all storable toasts from screen and store them + void removeAndStoreAllStorableToasts(); // close the Overflow Toast void closeOverflowToastPanel(); // close the StartUp Toast void closeStartUpToast(); - // Channel's behavior-functions - // set whether a channel will control hovering inside itself or not - void setControlHovering(bool control) { mControlHovering = control; } - // set Hovering flag for a channel - void setHovering(bool hovering) { mIsHovering = hovering; } - // set whether a channel will store faded toasts or not - void setCanStoreToasts(bool store) { mCanStoreToasts = store; } - // tell all channels that the StartUp toast was shown and allow them showing of toasts - static void setStartUpToastShown() { mWasStartUpToastShown = true; } // get StartUp Toast's state static bool getStartUpToastShown() { return mWasStartUpToastShown; } - // set mode for dislaying of toasts - void setDisplayToastsAlways(bool display_toasts) { mDisplayToastsAlways = display_toasts; } - // get mode for dislaying of toasts - bool getDisplayToastsAlways() { return mDisplayToastsAlways; } - // tell a channel to show toasts or not - void setShowToasts(bool show) { mShowToasts = show; } - // determine whether channel shows toasts or not - bool getShowToasts() { return mShowToasts; } + // tell all channels that the StartUp toast was shown and allow them showing of toasts + static void setStartUpToastShown() { mWasStartUpToastShown = true; } + // let a channel update its ShowToast flag + void updateShowToastsState(); + // Channel's other interface functions functions - // get number of hidden notifications from a channel - S32 getNumberOfHiddenToasts() { return mHiddenToastsNum;} // update number of notifications in the StartUp Toast void updateStartUpString(S32 num); - // get toast allignment preset for a channel - e_notification_toast_alignment getToastAlignment() {return mToastAlignment;} - // get ID of a channel - LLUUID getChannelID() { return mID; } - // Channel's callbacks - // callback for storing of faded toasts + // Channel's signals + // signal on storing of faded toasts event typedef boost::function<void (LLPanel* info_panel, const LLUUID id)> store_tost_callback_t; typedef boost::signals2::signal<void (LLPanel* info_panel, const LLUUID id)> store_tost_signal_t; store_tost_signal_t mOnStoreToast; boost::signals2::connection setOnStoreToastCallback(store_tost_callback_t cb) { return mOnStoreToast.connect(cb); } - // callback for discarding of a rejected toast - typedef boost::function<void (LLToast::Params p)> reject_tost_callback_t; - typedef boost::signals2::signal<void (LLToast::Params p)> reject_tost_signal_t; - reject_tost_signal_t mOnRejectToast; - boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mOnRejectToast.connect(cb); } + // signal on rejecting of a toast event + typedef boost::function<void (LLUUID id)> reject_tost_callback_t; + typedef boost::signals2::signal<void (LLUUID id)> reject_tost_signal_t; + reject_tost_signal_t mRejectToastSignal; + boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); } private: struct ToastElem @@ -142,7 +213,7 @@ private: LLUUID id; LLToast* toast; - ToastElem(LLToast::Params p) : id(p.id) + ToastElem(LLToast::Params p) : id(p.notif_id) { toast = new LLToast(p); } @@ -167,11 +238,14 @@ private: // Channel's handlers void onToastHover(LLToast* toast, bool mouse_enter); void onToastFade(LLToast* toast); + void onToastDestroyed(LLToast* toast); void onOverflowToastHide(); void onStartUpToastHide(); // void storeToast(ToastElem& toast_elem); + // send signal to observers about destroying of a toast, update channel's Hovering state, close the toast + void deleteToast(LLToast* toast); // show-functions depending on allignment of toasts void showToastsBottom(); @@ -186,26 +260,10 @@ private: // Channel's flags static bool mWasStartUpToastShown; - bool mControlHovering; - bool mIsHovering; - bool mCanStoreToasts; - bool mDisplayToastsAlways; - bool mOverflowToastHidden; - // controls whether a channel shows toasts or not - bool mShowToasts; - // - e_notification_toast_alignment mToastAlignment; - - // attributes for the Overflow Toast - S32 mHiddenToastsNum; - LLToast* mOverflowToastPanel; - std::string mOverflowFormatString; // attributes for the StartUp Toast LLToast* mStartUpToastPanel; - // channel's ID - LLUUID mID; std::vector<ToastElem> mToastList; std::vector<ToastElem> mStoredToastList; |