diff options
author | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
---|---|---|
committer | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
commit | 1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch) | |
tree | ab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/llscreenchannel.h | |
parent | 6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff) | |
parent | e1623bb276f83a43ce7a197e388720c05bdefe61 (diff) |
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
Diffstat (limited to 'indra/newview/llscreenchannel.h')
-rw-r--r-- | indra/newview/llscreenchannel.h | 620 |
1 files changed, 313 insertions, 307 deletions
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index ae9591ca8f..f28181f63a 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -1,307 +1,313 @@ -/** - * @file llscreenchannel.h - * @brief Class implements a channel on a screen in which appropriate toasts may appear. - * - * $LicenseInfo:firstyear=2003&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$ - */ - -#ifndef LL_LLSCREENCHANNEL_H -#define LL_LLSCREENCHANNEL_H - -#include "lltoast.h" - -#include <map> -#include <boost/shared_ptr.hpp> - -namespace LLNotificationsUI -{ - -typedef enum e_notification_toast_alignment -{ - NA_TOP, - NA_CENTRE, - NA_BOTTOM, -} EToastAlignment; - -typedef enum e_channel_alignment -{ - CA_LEFT, - CA_CENTRE, - CA_RIGHT, -} EChannelAlignment; - -class LLScreenChannelBase : public LLUICtrl -{ - friend class LLChannelManager; -public: - struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> - { - Mandatory<LLUUID> id; - Optional<bool> display_toasts_always; - Optional<EToastAlignment> toast_align; - Optional<EChannelAlignment> channel_align; - - Params() - : id("id", LLUUID("")), - display_toasts_always("display_toasts_always", false), - toast_align("toast_align", NA_BOTTOM), - channel_align("channel_align", CA_LEFT) - {} - }; - - LLScreenChannelBase(const Params&); - - bool postBuild(); - - void reshape(S32 width, S32 height, bool called_from_parent = true); - - // Channel's outfit-functions - // update channel's size and position in the World View - virtual void updatePositionAndSize(LLRect rect); - - // initialization of channel's shape and position - virtual void init(S32 channel_left, S32 channel_right); - - // kill or modify a toast by its ID - virtual void killToastByNotificationID(LLUUID id) {}; - virtual void modifyToastNotificationByID(LLUUID id, LLSD data) {}; - virtual void removeToastByNotificationID(LLUUID id){}; - - // 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() {}; - - - // Channel's behavior-functions - // set whether a channel will control hovering inside itself or not - virtual void setControlHovering(bool control) { mControlHovering = control; } - - - bool isHovering(); - - void setCanStoreToasts(bool store) { mCanStoreToasts = store; } - - 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; } - LLHandle<LLScreenChannelBase> getHandle() { return getDerivedHandle<LLScreenChannelBase>(); } - -protected: - void updateRect(); - LLRect getChannelRect(); - - // Channel's flags - bool mControlHovering; - LLToast* mHoveredToast; - bool mCanStoreToasts; - bool mDisplayToastsAlways; - // controls whether a channel shows toasts or not - bool mShowToasts; - // - EToastAlignment mToastAlignment; - EChannelAlignment mChannelAlignment; - - S32 mHiddenToastsNum; - - // channel's ID - LLUUID mID; - - LLView* mFloaterSnapRegion; - LLView* mChicletRegion; -}; - - -/** - * Screen channel manages toasts visibility and positioning on the screen. - */ -class LLScreenChannel : public LLScreenChannelBase -{ - friend class LLChannelManager; -public: - LLScreenChannel(const Params&); - virtual ~LLScreenChannel(); - - class Matcher - { - public: - Matcher(){} - virtual ~Matcher() {} - virtual bool matches(const LLNotificationPtr) const = 0; - }; - - std::list<const LLToast*> findToasts(const Matcher& matcher); - - // Channel's outfit-functions - // update channel's size and position in the World View - void updatePositionAndSize(LLRect new_rect); - // initialization of channel's shape and position - void init(S32 channel_left, S32 channel_right); - - // Operating with toasts - // add a toast to a channel - void addToast(const LLToast::Params& p); - // kill or modify a toast by its ID - void killToastByNotificationID(LLUUID id); - void removeToastByNotificationID(LLUUID id); - void killMatchedToasts(const Matcher& matcher); - void modifyToastByNotificationID(LLUUID id, LLPanel* panel); - // hide all toasts from screen, but not remove them from a channel - void hideToastsFromScreen(); - // hide toast by notification id - void hideToast(const LLUUID& notification_id); - - /** - * Closes hidden matched toasts from channel. - */ - void closeHiddenToasts(const Matcher& matcher); - - // removes all toasts from a channel - void removeToastsFromChannel(); - // show all toasts in a channel - void redrawToasts(); - // - void loadStoredToastsToChannel(); - // finds a toast among stored by its Notification ID and throws it on a screen to a channel - void loadStoredToastByNotificationIDToChannel(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 StartUp Toast - void closeStartUpToast(); - - - /** Stop fading given toast */ - virtual void stopToastTimer(LLToast* toast); - - /** Start fading given toast */ - virtual void startToastTimer(LLToast* toast); - - // get StartUp Toast's state - static bool getStartUpToastShown() { return mWasStartUpToastShown; } - // 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 - // update number of notifications in the StartUp Toast - void updateStartUpString(S32 num); - - LLToast* getToastByNotificationID(LLUUID id); - - // Channel's signals - // signal on storing of faded toasts event - typedef boost::signals2::signal<void (LLPanel* info_panel, const LLUUID id)> store_toast_signal_t; - boost::signals2::connection addOnStoreToastCallback(store_toast_signal_t::slot_type cb) { return mOnStoreToast.connect(cb); } - -private: - store_toast_signal_t mOnStoreToast; - - class ToastElem - { - public: - ToastElem(const LLHandle<LLToast>& toast) : mToast(toast) - { - } - - ToastElem(const ToastElem& toast_elem) : mToast(toast_elem.mToast) - { - } - - LLToast* getToast() const - { - return mToast.get(); - } - - LLUUID getID() const - { - return mToast.isDead() ? LLUUID() : mToast.get()->getNotificationID(); - } - - bool operator == (const LLUUID &id_op) const - { - return (getID() == id_op); - } - - bool operator == (LLPanel* panel_op) const - { - return (mToast.get() == panel_op); - } - - private: - LLHandle<LLToast> mToast; - }; - - // Channel's handlers - void onToastHover(LLToast* toast, bool mouse_enter); - void onToastFade(LLToast* toast); - void onToastDestroyed(LLToast* toast); - 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(); - void showToastsCentre(); - void showToastsTop(); - - // create the StartUp Toast - void createStartUpToast(S32 notif_num, F32 timer); - - /** - * Notification channel and World View ratio(0.0 - always show 1 notification, 1.0 - max ratio). - */ - static F32 getHeightRatio(); - - // Channel's flags - static bool mWasStartUpToastShown; - - // attributes for the StartUp Toast - LLToast* mStartUpToastPanel; - - - std::vector<ToastElem> mToastList; - std::vector<ToastElem> mStoredToastList; -}; - -} -#endif +/**
+ * @file llscreenchannel.h
+ * @brief Class implements a channel on a screen in which appropriate toasts may appear.
+ *
+ * $LicenseInfo:firstyear=2003&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$
+ */
+
+#ifndef LL_LLSCREENCHANNEL_H
+#define LL_LLSCREENCHANNEL_H
+
+#include "lltoast.h"
+
+#include <map>
+#include <boost/shared_ptr.hpp>
+
+namespace LLNotificationsUI
+{
+ const LLUUID ALERT_CHANNEL_UUID("F3E07BC8-A973-476D-8C7F-F3B7293975D1");
+ const LLUUID NOTIFICATION_CHANNEL_UUID("AEED3193-8709-4693-8558-7452CCA97AE5");
+ const LLUUID NEARBY_CHAT_CHANNEL_UUID("E1158BD6-661C-4981-9DAD-4DCBFF062502");
+ const LLUUID STARTUP_CHANNEL_UUID("B56AF90D-6684-48E4-B1E4-722D3DEB2CB6");
+
+ const S32 NOTIFY_BOX_WIDTH = 305;
+
+typedef enum e_notification_toast_alignment
+{
+ NA_TOP,
+ NA_CENTRE,
+ NA_BOTTOM,
+} EToastAlignment;
+
+typedef enum e_channel_alignment
+{
+ CA_LEFT,
+ CA_CENTRE,
+ CA_RIGHT,
+} EChannelAlignment;
+
+class LLScreenChannelBase : public LLUICtrl
+{
+ friend class LLChannelManager;
+public:
+ struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
+ {
+ Mandatory<LLUUID> id;
+ Optional<bool> display_toasts_always;
+ Optional<EToastAlignment> toast_align;
+ Optional<EChannelAlignment> channel_align;
+
+ Params()
+ : id("id", LLUUID("")),
+ display_toasts_always("display_toasts_always", false),
+ toast_align("toast_align", NA_BOTTOM),
+ channel_align("channel_align", CA_LEFT)
+ {}
+ };
+
+ LLScreenChannelBase(const Params&);
+
+ bool postBuild();
+
+ void reshape(S32 width, S32 height, bool called_from_parent = true);
+
+ // Channel's outfit-functions
+ // update channel's size and position in the World View
+ virtual void updatePositionAndSize(LLRect rect);
+
+ // initialization of channel's shape and position
+ virtual void init(S32 channel_left, S32 channel_right);
+
+ // kill or modify a toast by its ID
+ virtual void killToastByNotificationID(LLUUID id) {};
+ virtual void modifyToastNotificationByID(LLUUID id, LLSD data) {};
+ virtual void removeToastByNotificationID(LLUUID id){};
+
+ // 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() {};
+
+
+ // Channel's behavior-functions
+ // set whether a channel will control hovering inside itself or not
+ virtual void setControlHovering(bool control) { mControlHovering = control; }
+
+
+ bool isHovering();
+
+ void setCanStoreToasts(bool store) { mCanStoreToasts = store; }
+
+ 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; }
+ LLHandle<LLScreenChannelBase> getHandle() { return getDerivedHandle<LLScreenChannelBase>(); }
+
+protected:
+ void updateRect();
+ LLRect getChannelRect();
+
+ // Channel's flags
+ bool mControlHovering;
+ LLToast* mHoveredToast;
+ bool mCanStoreToasts;
+ bool mDisplayToastsAlways;
+ // controls whether a channel shows toasts or not
+ bool mShowToasts;
+ //
+ EToastAlignment mToastAlignment;
+ EChannelAlignment mChannelAlignment;
+
+ S32 mHiddenToastsNum;
+
+ // channel's ID
+ LLUUID mID;
+
+ LLView* mFloaterSnapRegion;
+ LLView* mChicletRegion;
+};
+
+
+/**
+ * Screen channel manages toasts visibility and positioning on the screen.
+ */
+class LLScreenChannel : public LLScreenChannelBase
+{
+ friend class LLChannelManager;
+public:
+ LLScreenChannel(const Params&);
+ virtual ~LLScreenChannel();
+
+ class Matcher
+ {
+ public:
+ Matcher(){}
+ virtual ~Matcher() {}
+ virtual bool matches(const LLNotificationPtr) const = 0;
+ };
+
+ std::list<const LLToast*> findToasts(const Matcher& matcher);
+
+ // Channel's outfit-functions
+ // update channel's size and position in the World View
+ void updatePositionAndSize(LLRect new_rect);
+ // initialization of channel's shape and position
+ void init(S32 channel_left, S32 channel_right);
+
+ // Operating with toasts
+ // add a toast to a channel
+ void addToast(const LLToast::Params& p);
+ // kill or modify a toast by its ID
+ void killToastByNotificationID(LLUUID id);
+ void removeToastByNotificationID(LLUUID id);
+ void killMatchedToasts(const Matcher& matcher);
+ void modifyToastByNotificationID(LLUUID id, LLPanel* panel);
+ // hide all toasts from screen, but not remove them from a channel
+ void hideToastsFromScreen();
+ // hide toast by notification id
+ void hideToast(const LLUUID& notification_id);
+
+ /**
+ * Closes hidden matched toasts from channel.
+ */
+ void closeHiddenToasts(const Matcher& matcher);
+
+ // removes all toasts from a channel
+ void removeToastsFromChannel();
+ // show all toasts in a channel
+ void redrawToasts();
+ //
+ void loadStoredToastsToChannel();
+ // finds a toast among stored by its Notification ID and throws it on a screen to a channel
+ void loadStoredToastByNotificationIDToChannel(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 StartUp Toast
+ void closeStartUpToast();
+
+
+ /** Stop fading given toast */
+ virtual void stopToastTimer(LLToast* toast);
+
+ /** Start fading given toast */
+ virtual void startToastTimer(LLToast* toast);
+
+ // get StartUp Toast's state
+ static bool getStartUpToastShown() { return mWasStartUpToastShown; }
+ // 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
+ // update number of notifications in the StartUp Toast
+ void updateStartUpString(S32 num);
+
+ LLToast* getToastByNotificationID(LLUUID id);
+
+ // Channel's signals
+ // signal on storing of faded toasts event
+ typedef boost::signals2::signal<void (LLPanel* info_panel, const LLUUID id)> store_toast_signal_t;
+ boost::signals2::connection addOnStoreToastCallback(store_toast_signal_t::slot_type cb) { return mOnStoreToast.connect(cb); }
+
+private:
+ store_toast_signal_t mOnStoreToast;
+
+ class ToastElem
+ {
+ public:
+ ToastElem(const LLHandle<LLToast>& toast) : mToast(toast)
+ {
+ }
+
+ ToastElem(const ToastElem& toast_elem) : mToast(toast_elem.mToast)
+ {
+ }
+
+ LLToast* getToast() const
+ {
+ return mToast.get();
+ }
+
+ LLUUID getID() const
+ {
+ return mToast.isDead() ? LLUUID() : mToast.get()->getNotificationID();
+ }
+
+ bool operator == (const LLUUID &id_op) const
+ {
+ return (getID() == id_op);
+ }
+
+ bool operator == (LLPanel* panel_op) const
+ {
+ return (mToast.get() == panel_op);
+ }
+
+ private:
+ LLHandle<LLToast> mToast;
+ };
+
+ // Channel's handlers
+ void onToastHover(LLToast* toast, bool mouse_enter);
+ void onToastFade(LLToast* toast);
+ void onToastDestroyed(LLToast* toast);
+ 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();
+ void showToastsCentre();
+ void showToastsTop();
+
+ // create the StartUp Toast
+ void createStartUpToast(S32 notif_num, F32 timer);
+
+ /**
+ * Notification channel and World View ratio(0.0 - always show 1 notification, 1.0 - max ratio).
+ */
+ static F32 getHeightRatio();
+
+ // Channel's flags
+ static bool mWasStartUpToastShown;
+
+ // attributes for the StartUp Toast
+ LLToast* mStartUpToastPanel;
+
+
+ std::vector<ToastElem> mToastList;
+ std::vector<ToastElem> mStoredToastList;
+};
+
+}
+#endif
|