summaryrefslogtreecommitdiff
path: root/indra/newview/llscreenchannel.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llscreenchannel.h')
-rw-r--r--indra/newview/llscreenchannel.h180
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;