CHUI-573 FIXED Notification chiclet shown when object chiclets are shown
parent
3f6f374c25
commit
f1155c4fa5
File diff suppressed because it is too large
Load Diff
|
|
@ -29,75 +29,10 @@
|
|||
|
||||
#include "llavatariconctrl.h"
|
||||
#include "llbutton.h"
|
||||
#include "llflashtimer.h"
|
||||
#include "llpanel.h"
|
||||
#include "lltextbox.h"
|
||||
#include "lloutputmonitorctrl.h"
|
||||
#include "llgroupmgr.h"
|
||||
#include "llimview.h"
|
||||
#include "llnotifications.h"
|
||||
|
||||
class LLMenuGL;
|
||||
class LLFloaterIMSession;
|
||||
|
||||
/**
|
||||
* Class for displaying amount of messages/notifications(unread).
|
||||
*/
|
||||
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;
|
||||
|
||||
protected:
|
||||
|
||||
LLChicletNotificationCounterCtrl(const Params& p);
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
private:
|
||||
|
||||
S32 mCounter;
|
||||
S32 mInitialWidth;
|
||||
S32 mMaxDisplayedCount;
|
||||
};
|
||||
|
||||
/**
|
||||
* Class for displaying avatar's icon in P2P chiclet.
|
||||
*/
|
||||
|
|
@ -121,35 +56,6 @@ protected:
|
|||
friend class LLUICtrlFactory;
|
||||
};
|
||||
|
||||
/**
|
||||
* Class for displaying group's icon in Group chiclet.
|
||||
*/
|
||||
class LLChicletGroupIconCtrl : public LLIconCtrl
|
||||
{
|
||||
public:
|
||||
|
||||
struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params>
|
||||
{
|
||||
Optional<std::string> default_icon;
|
||||
|
||||
Params()
|
||||
: default_icon("default_icon", "Generic_Group")
|
||||
{}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets icon, if value is LLUUID::null - default icon will be set.
|
||||
*/
|
||||
virtual void setValue(const LLSD& value );
|
||||
|
||||
protected:
|
||||
|
||||
LLChicletGroupIconCtrl(const Params& p);
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
std::string mDefaultIcon;
|
||||
};
|
||||
|
||||
/**
|
||||
* Class for displaying icon in inventory offer chiclet.
|
||||
*/
|
||||
|
|
@ -183,23 +89,6 @@ private:
|
|||
std::string mDefaultIcon;
|
||||
};
|
||||
|
||||
/**
|
||||
* Class for displaying of speaker's voice indicator
|
||||
*/
|
||||
class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl
|
||||
{
|
||||
public:
|
||||
|
||||
struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params>
|
||||
{
|
||||
Params(){};
|
||||
};
|
||||
protected:
|
||||
|
||||
LLChicletSpeakerCtrl(const Params&p);
|
||||
friend class LLUICtrlFactory;
|
||||
};
|
||||
|
||||
/**
|
||||
* Base class for all chiclets.
|
||||
*/
|
||||
|
|
@ -227,26 +116,6 @@ public:
|
|||
*/
|
||||
virtual const LLUUID& getSessionId() const { return mSessionId; }
|
||||
|
||||
/**
|
||||
* Sets number of unread notifications.
|
||||
*/
|
||||
virtual void setCounter(S32 counter) = 0;
|
||||
|
||||
/**
|
||||
* Returns number of unread notifications.
|
||||
*/
|
||||
virtual S32 getCounter() = 0;
|
||||
|
||||
/**
|
||||
* Sets show counter state.
|
||||
*/
|
||||
virtual void setShowCounter(bool show) { mShowCounter = show; }
|
||||
|
||||
/**
|
||||
* Returns show counter state.
|
||||
*/
|
||||
virtual bool getShowCounter() {return mShowCounter;};
|
||||
|
||||
/**
|
||||
* Connects chiclet clicked event with callback.
|
||||
*/
|
||||
|
|
@ -324,62 +193,6 @@ public:
|
|||
* 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; }
|
||||
|
||||
/**
|
||||
* Gets id of person/group user is chatting with.
|
||||
*/
|
||||
virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; }
|
||||
|
||||
/**
|
||||
* Init Speaker Control with speaker's ID
|
||||
*/
|
||||
virtual void initSpeakerControl();
|
||||
|
||||
/**
|
||||
* set status (Shows/Hide) for voice control.
|
||||
*/
|
||||
virtual void setShowSpeaker(bool show);
|
||||
|
||||
/**
|
||||
* Returns voice chat status control visibility.
|
||||
*/
|
||||
virtual bool getShowSpeaker() {return mShowSpeaker;};
|
||||
|
||||
/**
|
||||
* Shows/Hides for voice control for a chiclet.
|
||||
*/
|
||||
virtual void toggleSpeakerControl();
|
||||
|
||||
/**
|
||||
* Sets number of unread messages. Will update chiclet's width if number text
|
||||
* exceeds size of counter and notify it's parent about size change.
|
||||
*/
|
||||
virtual void setCounter(S32);
|
||||
|
||||
/**
|
||||
* Enables/disables the counter control for a chiclet.
|
||||
*/
|
||||
virtual void enableCounterControl(bool enable);
|
||||
|
||||
/**
|
||||
* Sets show counter state.
|
||||
*/
|
||||
virtual void setShowCounter(bool show);
|
||||
|
||||
/**
|
||||
* Shows/Hides for counter control for a chiclet.
|
||||
*/
|
||||
virtual void toggleCounterControl();
|
||||
|
||||
/**
|
||||
* Sets required width for a chiclet according to visible controls.
|
||||
|
|
@ -396,21 +209,6 @@ public:
|
|||
*/
|
||||
virtual bool getShowNewMessagesIcon();
|
||||
|
||||
virtual void draw();
|
||||
|
||||
/**
|
||||
* Determine whether given ID refers to a group or an IM chat session.
|
||||
*
|
||||
* This is used when we need to chose what IM chiclet (P2P/group)
|
||||
* class to instantiate.
|
||||
*
|
||||
* @param session_id session ID.
|
||||
* @return TYPE_GROUP in case of group chat session,
|
||||
* TYPE_IM in case of P2P session,
|
||||
* TYPE_UNKNOWN otherwise.
|
||||
*/
|
||||
static EType getIMSessionType(const LLUUID& session_id);
|
||||
|
||||
/**
|
||||
* The action taken on mouse down event.
|
||||
*
|
||||
|
|
@ -452,8 +250,6 @@ protected:
|
|||
S32 mDefaultWidth;
|
||||
|
||||
LLIconCtrl* mNewMessagesIcon;
|
||||
LLChicletNotificationCounterCtrl* mCounterCtrl;
|
||||
LLChicletSpeakerCtrl* mSpeakerCtrl;
|
||||
LLButton* mChicletButton;
|
||||
|
||||
/** the id of another participant, either an avatar id or a group id*/
|
||||
|
|
@ -481,137 +277,6 @@ public:
|
|||
sFindChicletsSignal;
|
||||
};
|
||||
|
||||
/**
|
||||
* Implements P2P chiclet.
|
||||
*/
|
||||
class LLIMP2PChiclet : public LLIMChiclet
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
|
||||
{
|
||||
Optional<LLButton::Params> chiclet_button;
|
||||
|
||||
Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
|
||||
|
||||
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
|
||||
|
||||
Optional<LLChicletSpeakerCtrl::Params> speaker;
|
||||
|
||||
Optional<LLIconCtrl::Params> new_message_icon;
|
||||
|
||||
Optional<bool> show_speaker;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
/* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id);
|
||||
|
||||
/**
|
||||
* Init Speaker Control with speaker's ID
|
||||
*/
|
||||
/*virtual*/ void initSpeakerControl();
|
||||
|
||||
/**
|
||||
* Returns number of unread messages.
|
||||
*/
|
||||
/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
|
||||
|
||||
protected:
|
||||
LLIMP2PChiclet(const Params& p);
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
/**
|
||||
* Creates chiclet popup menu. Will create P2P or Group IM Chat menu
|
||||
* based on other participant's id.
|
||||
*/
|
||||
virtual void createPopupMenu();
|
||||
|
||||
/**
|
||||
* Processes clicks on chiclet popup menu.
|
||||
*/
|
||||
virtual void onMenuItemClicked(const LLSD& user_data);
|
||||
|
||||
/**
|
||||
* Enables/disables menus based on relationship with other participant.
|
||||
* Enables/disables "show session" menu item depending on visible IM floater existence.
|
||||
*/
|
||||
virtual void updateMenuItems();
|
||||
|
||||
private:
|
||||
|
||||
LLChicletAvatarIconCtrl* mChicletIconCtrl;
|
||||
};
|
||||
|
||||
/**
|
||||
* Implements AD-HOC chiclet.
|
||||
*/
|
||||
class LLAdHocChiclet : public LLIMChiclet
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
|
||||
{
|
||||
Optional<LLButton::Params> chiclet_button;
|
||||
|
||||
Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
|
||||
|
||||
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
|
||||
|
||||
Optional<LLChicletSpeakerCtrl::Params> speaker;
|
||||
|
||||
Optional<LLIconCtrl::Params> new_message_icon;
|
||||
|
||||
Optional<bool> show_speaker;
|
||||
|
||||
Optional<LLColor4> avatar_icon_color;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets session id.
|
||||
* Session ID for group chat is actually Group ID.
|
||||
*/
|
||||
/*virtual*/ void setSessionId(const LLUUID& session_id);
|
||||
|
||||
/**
|
||||
* Keep Speaker Control with actual speaker's ID
|
||||
*/
|
||||
/*virtual*/ void draw();
|
||||
|
||||
/**
|
||||
* Init Speaker Control with speaker's ID
|
||||
*/
|
||||
/*virtual*/ void initSpeakerControl();
|
||||
|
||||
/**
|
||||
* Returns number of unread messages.
|
||||
*/
|
||||
/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
|
||||
|
||||
protected:
|
||||
LLAdHocChiclet(const Params& p);
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
/**
|
||||
* Creates chiclet popup menu. Will create AdHoc Chat menu
|
||||
* based on other participant's id.
|
||||
*/
|
||||
virtual void createPopupMenu();
|
||||
|
||||
/**
|
||||
* Processes clicks on chiclet popup menu.
|
||||
*/
|
||||
virtual void onMenuItemClicked(const LLSD& user_data);
|
||||
|
||||
/**
|
||||
* Finds a current speaker and resets the SpeakerControl with speaker's ID
|
||||
*/
|
||||
/*virtual*/ void switchToCurrentSpeaker();
|
||||
|
||||
private:
|
||||
|
||||
LLChicletAvatarIconCtrl* mChicletIconCtrl;
|
||||
};
|
||||
|
||||
/**
|
||||
* Chiclet for script floaters.
|
||||
|
|
@ -633,10 +298,6 @@ public:
|
|||
|
||||
/*virtual*/ void setSessionId(const LLUUID& session_id);
|
||||
|
||||
/*virtual*/ void setCounter(S32 counter);
|
||||
|
||||
/*virtual*/ S32 getCounter() { return 0; }
|
||||
|
||||
/**
|
||||
* Toggle script floater
|
||||
*/
|
||||
|
|
@ -682,10 +343,6 @@ public:
|
|||
|
||||
/*virtual*/ void setSessionId(const LLUUID& session_id);
|
||||
|
||||
/*virtual*/ void setCounter(S32 counter);
|
||||
|
||||
/*virtual*/ S32 getCounter() { return 0; }
|
||||
|
||||
/**
|
||||
* Toggle script floater
|
||||
*/
|
||||
|
|
@ -709,214 +366,6 @@ private:
|
|||
LLChicletInvOfferIconCtrl* mChicletIconCtrl;
|
||||
};
|
||||
|
||||
/**
|
||||
* Implements Group chat chiclet.
|
||||
*/
|
||||
class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
|
||||
{
|
||||
public:
|
||||
|
||||
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
|
||||
{
|
||||
Optional<LLButton::Params> chiclet_button;
|
||||
|
||||
Optional<LLChicletGroupIconCtrl::Params> group_icon;
|
||||
|
||||
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
|
||||
|
||||
Optional<LLChicletSpeakerCtrl::Params> speaker;
|
||||
|
||||
Optional<LLIconCtrl::Params> new_message_icon;
|
||||
|
||||
Optional<bool> show_speaker;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets session id.
|
||||
* Session ID for group chat is actually Group ID.
|
||||
*/
|
||||
/*virtual*/ void setSessionId(const LLUUID& session_id);
|
||||
|
||||
/**
|
||||
* Keep Speaker Control with actual speaker's ID
|
||||
*/
|
||||
/*virtual*/ void draw();
|
||||
|
||||
/**
|
||||
* Callback for LLGroupMgrObserver, we get this when group data is available or changed.
|
||||
* Sets group icon.
|
||||
*/
|
||||
/*virtual*/ void changed(LLGroupChange gc);
|
||||
|
||||
/**
|
||||
* Init Speaker Control with speaker's ID
|
||||
*/
|
||||
/*virtual*/ void initSpeakerControl();
|
||||
|
||||
/**
|
||||
* Returns number of unread messages.
|
||||
*/
|
||||
/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
|
||||
|
||||
~LLIMGroupChiclet();
|
||||
|
||||
protected:
|
||||
LLIMGroupChiclet(const Params& p);
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
/**
|
||||
* Finds a current speaker and resets the SpeakerControl with speaker's ID
|
||||
*/
|
||||
/*virtual*/ void switchToCurrentSpeaker();
|
||||
|
||||
/**
|
||||
* Creates chiclet popup menu. Will create P2P or Group IM Chat menu
|
||||
* based on other participant's id.
|
||||
*/
|
||||
virtual void createPopupMenu();
|
||||
|
||||
/**
|
||||
* Processes clicks on chiclet popup menu.
|
||||
*/
|
||||
virtual void onMenuItemClicked(const LLSD& user_data);
|
||||
|
||||
/**
|
||||
* Enables/disables "show session" menu item depending on visible IM floater existence.
|
||||
*/
|
||||
virtual void updateMenuItems();
|
||||
|
||||
private:
|
||||
|
||||
LLChicletGroupIconCtrl* mChicletIconCtrl;
|
||||
};
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* 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();
|
||||
};
|
||||
|
||||
/*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; }
|
||||
|
||||
boost::signals2::connection setClickCallback(const commit_callback_t& cb);
|
||||
|
||||
/*virtual*/ ~LLSysWellChiclet();
|
||||
|
||||
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);
|
||||
|
||||
protected:
|
||||
|
||||
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);
|
||||
|
||||
/**
|
||||
* Displays menu.
|
||||
*/
|
||||
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
|
||||
virtual void createMenu() = 0;
|
||||
|
||||
protected:
|
||||
class FlashToLitTimer;
|
||||
LLButton* mButton;
|
||||
S32 mCounter;
|
||||
S32 mMaxDisplayedCount;
|
||||
bool mIsNewMessagesState;
|
||||
|
||||
LLFlashTimer* mFlashToLitTimer;
|
||||
LLContextMenu* mContextMenu;
|
||||
};
|
||||
|
||||
class LLNotificationChiclet : public LLSysWellChiclet
|
||||
{
|
||||
LOG_CLASS(LLNotificationChiclet);
|
||||
|
||||
friend class LLUICtrlFactory;
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLSysWellChiclet::Params>{};
|
||||
|
||||
protected:
|
||||
struct ChicletNotificationChannel : public LLNotificationChannel
|
||||
{
|
||||
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");
|
||||
}
|
||||
|
||||
static bool filterNotification(LLNotificationPtr notify);
|
||||
// connect counter updaters to the corresponding signals
|
||||
/*virtual*/ void onAdd(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);
|
||||
|
||||
/**
|
||||
* 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,
|
||||
* scroll, create, remove chiclets.
|
||||
|
|
@ -1018,9 +467,7 @@ public:
|
|||
|
||||
S32 getMinWidth() const { return mMinWidth; }
|
||||
|
||||
S32 getTotalUnreadIMCount();
|
||||
|
||||
S32 notifyParent(const LLSD& info);
|
||||
/*virtual*/ S32 notifyParent(const LLSD& info);
|
||||
|
||||
/**
|
||||
* Toggle chiclet by session id ON and toggle OFF all other chiclets.
|
||||
|
|
|
|||
|
|
@ -25,18 +25,11 @@
|
|||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h" // must be first include
|
||||
|
||||
#include "llchicletbar.h"
|
||||
|
||||
// library includes
|
||||
#include "llfloaterreg.h"
|
||||
#include "lllayoutstack.h"
|
||||
|
||||
// newview includes
|
||||
#include "llchiclet.h"
|
||||
#include "llfloaterimsession.h" // for LLFloaterIMSession
|
||||
#include "lllayoutstack.h"
|
||||
#include "llpaneltopinfobar.h"
|
||||
#include "llsyswellwindow.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
|
@ -60,106 +53,11 @@ LLChicletBar::LLChicletBar(const LLSD&)
|
|||
buildFromFile("panel_chiclet_bar.xml");
|
||||
}
|
||||
|
||||
LLChicletBar::~LLChicletBar()
|
||||
{
|
||||
}
|
||||
|
||||
LLIMChiclet* LLChicletBar::createIMChiclet(const LLUUID& session_id)
|
||||
{
|
||||
LLIMChiclet::EType im_chiclet_type = LLIMChiclet::getIMSessionType(session_id);
|
||||
|
||||
switch (im_chiclet_type)
|
||||
{
|
||||
case LLIMChiclet::TYPE_IM:
|
||||
return getChicletPanel()->createChiclet<LLIMP2PChiclet>(session_id);
|
||||
case LLIMChiclet::TYPE_GROUP:
|
||||
return getChicletPanel()->createChiclet<LLIMGroupChiclet>(session_id);
|
||||
case LLIMChiclet::TYPE_AD_HOC:
|
||||
return getChicletPanel()->createChiclet<LLAdHocChiclet>(session_id);
|
||||
case LLIMChiclet::TYPE_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLChicletBar::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg)
|
||||
{
|
||||
if (!getChicletPanel()) return;
|
||||
|
||||
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
|
||||
if (!session) return;
|
||||
|
||||
// no need to spawn chiclets for participants in P2P calls called through Avaline
|
||||
if (session->isP2P() && session->isOtherParticipantAvaline()) return;
|
||||
|
||||
// Do not spawn chiclet when using the new multitab conversation UI
|
||||
if (LLFloaterIMSessionTab::isChatMultiTab())
|
||||
{
|
||||
LLFloaterIMSessionTab::addToHost(session_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return;
|
||||
|
||||
LLIMChiclet* chiclet = createIMChiclet(session_id);
|
||||
if(chiclet)
|
||||
{
|
||||
chiclet->setIMSessionName(name);
|
||||
chiclet->setOtherParticipantId(other_participant_id);
|
||||
|
||||
LLFloaterIMSession::onIMChicletCreated(session_id);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Could not create chiclet" << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLChicletBar::sessionRemoved(const LLUUID& session_id)
|
||||
{
|
||||
if(getChicletPanel())
|
||||
{
|
||||
// IM floater should be closed when session removed and associated chiclet closed
|
||||
LLFloaterIMSession* im_floater = LLFloaterReg::findTypedInstance<LLFloaterIMSession>("impanel", session_id);
|
||||
if (im_floater != NULL && !im_floater->getStartConferenceInSameFloater())
|
||||
{
|
||||
// Close the IM floater only if we are not planning to close the P2P chat
|
||||
// and start a new conference in the same floater.
|
||||
im_floater->closeFloater();
|
||||
}
|
||||
|
||||
getChicletPanel()->removeChiclet(session_id);
|
||||
}
|
||||
}
|
||||
|
||||
void LLChicletBar::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id)
|
||||
{
|
||||
//this is only needed in case of outgoing ad-hoc/group chat sessions
|
||||
LLChicletPanel* chiclet_panel = getChicletPanel();
|
||||
if (chiclet_panel)
|
||||
{
|
||||
//it should be ad-hoc im chiclet or group im chiclet
|
||||
LLChiclet* chiclet = chiclet_panel->findChiclet<LLChiclet>(old_session_id);
|
||||
if (chiclet) chiclet->setSessionId(new_session_id);
|
||||
}
|
||||
}
|
||||
|
||||
S32 LLChicletBar::getTotalUnreadIMCount()
|
||||
{
|
||||
return getChicletPanel()->getTotalUnreadIMCount();
|
||||
}
|
||||
|
||||
BOOL LLChicletBar::postBuild()
|
||||
{
|
||||
mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
|
||||
mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
|
||||
|
||||
showWellButton("notification_well", !LLNotificationWellWindow::getInstance()->isWindowEmpty());
|
||||
|
||||
LLPanelTopInfoBar::instance().setResizeCallback(boost::bind(&LLChicletBar::fitWithTopInfoBar, this));
|
||||
LLPanelTopInfoBar::instance().setVisibleCallback(boost::bind(&LLChicletBar::fitWithTopInfoBar, this));
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
#define LL_LLCHICLETBAR_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llimview.h"
|
||||
|
||||
class LLChicletPanel;
|
||||
class LLIMChiclet;
|
||||
|
|
@ -38,32 +37,17 @@ class LLLayoutStack;
|
|||
class LLChicletBar
|
||||
: public LLSingleton<LLChicletBar>
|
||||
, public LLPanel
|
||||
, public LLIMSessionObserver
|
||||
{
|
||||
LOG_CLASS(LLChicletBar);
|
||||
friend class LLSingleton<LLChicletBar>;
|
||||
public:
|
||||
~LLChicletBar();
|
||||
|
||||
BOOL postBuild();
|
||||
|
||||
LLChicletPanel* getChicletPanel() { return mChicletPanel; }
|
||||
|
||||
// LLIMSessionObserver observe triggers
|
||||
/*virtual*/ void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg);
|
||||
/*virtual*/ void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {};
|
||||
/*virtual*/ void sessionVoiceOrIMStarted(const LLUUID& session_id) {};
|
||||
/*virtual*/ void sessionRemoved(const LLUUID& session_id);
|
||||
/*virtual*/ void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
|
||||
|
||||
S32 getTotalUnreadIMCount();
|
||||
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
|
||||
|
||||
/**
|
||||
* Creates IM Chiclet based on session type (IM chat or Group chat)
|
||||
*/
|
||||
LLIMChiclet* createIMChiclet(const LLUUID& session_id);
|
||||
|
||||
/**
|
||||
* Shows/hides panel with specified well button (IM or Notification)
|
||||
|
|
|
|||
|
|
@ -616,10 +616,14 @@ void LLFloaterIMSession::setVisible(BOOL visible)
|
|||
|
||||
if(!visible)
|
||||
{
|
||||
LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(mSessionID);
|
||||
if(chiclet)
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
chiclet->setToggleState(false);
|
||||
LLIMChiclet * chicletp = chiclet_panelp->findChiclet<LLIMChiclet>(mSessionID);
|
||||
if(NULL != chicletp)
|
||||
{
|
||||
chicletp->setToggleState(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,12 @@ bool LLScriptFloater::toggle(const LLUUID& notification_id)
|
|||
show(notification_id);
|
||||
}
|
||||
|
||||
LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(notification_id, true);
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
chiclet_panelp->setChicletToggleState(notification_id, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -206,10 +211,14 @@ void LLScriptFloater::setVisible(BOOL visible)
|
|||
|
||||
if(!visible)
|
||||
{
|
||||
LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
|
||||
if(chiclet)
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
chiclet->setToggleState(false);
|
||||
LLIMChiclet * chicletp = chiclet_panelp->findChiclet<LLIMChiclet>(getNotificationId());
|
||||
if(NULL != chicletp)
|
||||
{
|
||||
chicletp->setToggleState(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -218,15 +227,19 @@ void LLScriptFloater::onMouseDown()
|
|||
{
|
||||
if(getNotificationId().notNull())
|
||||
{
|
||||
// Remove new message icon
|
||||
LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
|
||||
if (chiclet == NULL)
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
chiclet->setShowNewMessagesIcon(false);
|
||||
LLIMChiclet * chicletp = chiclet_panelp->findChiclet<LLIMChiclet>(getNotificationId());
|
||||
// Remove new message icon
|
||||
if (NULL == chicletp)
|
||||
{
|
||||
llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
chicletp->setShowNewMessagesIcon(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -262,7 +275,11 @@ void LLScriptFloater::onFocusLost()
|
|||
{
|
||||
if(getNotificationId().notNull())
|
||||
{
|
||||
LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), false);
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
chiclet_panelp->setChicletToggleState(getNotificationId(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -271,7 +288,11 @@ void LLScriptFloater::onFocusReceived()
|
|||
// first focus will be received before setObjectId() call - don't toggle chiclet
|
||||
if(getNotificationId().notNull())
|
||||
{
|
||||
LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), true);
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
chiclet_panelp->setChicletToggleState(getNotificationId(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -279,28 +300,30 @@ void LLScriptFloater::dockToChiclet(bool dock)
|
|||
{
|
||||
if (getDockControl() == NULL)
|
||||
{
|
||||
LLChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(getNotificationId());
|
||||
if (chiclet == NULL)
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
llwarns << "Dock chiclet for LLScriptFloater doesn't exist" << llendl;
|
||||
return;
|
||||
LLChiclet * chicletp = chiclet_panelp->findChiclet<LLChiclet>(getNotificationId());
|
||||
if (NULL == chicletp)
|
||||
{
|
||||
llwarns << "Dock chiclet for LLScriptFloater doesn't exist" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
chiclet_panelp->scrollToChiclet(chicletp);
|
||||
|
||||
// Stop saving position while we dock floater
|
||||
bool save = getSavePosition();
|
||||
setSavePosition(false);
|
||||
|
||||
setDockControl(new LLDockControl(chicletp, this, getDockTongue(),
|
||||
LLDockControl::BOTTOM));
|
||||
|
||||
setDocked(dock);
|
||||
|
||||
// Restore saving
|
||||
setSavePosition(save);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLChicletBar::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
|
||||
}
|
||||
|
||||
// Stop saving position while we dock floater
|
||||
bool save = getSavePosition();
|
||||
setSavePosition(false);
|
||||
|
||||
setDockControl(new LLDockControl(chiclet, this, getDockTongue(),
|
||||
LLDockControl::BOTTOM));
|
||||
|
||||
setDocked(dock);
|
||||
|
||||
// Restore saving
|
||||
setSavePosition(save);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -347,11 +370,15 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
|
|||
script_notification_map_t::const_iterator it = findUsingObjectId(object_id);
|
||||
if(it != mNotifications.end())
|
||||
{
|
||||
LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(it->first);
|
||||
if(chiclet)
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
// Pass the new_message icon state further.
|
||||
set_new_message = chiclet->getShowNewMessagesIcon();
|
||||
LLIMChiclet * chicletp = chiclet_panelp->findChiclet<LLIMChiclet>(it->first);
|
||||
if(NULL != chicletp)
|
||||
{
|
||||
// Pass the new_message icon state further.
|
||||
set_new_message = chicletp->getShowNewMessagesIcon();
|
||||
}
|
||||
}
|
||||
|
||||
LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", it->first);
|
||||
|
|
@ -367,14 +394,18 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
|
|||
|
||||
mNotifications.insert(std::make_pair(notification_id, object_id));
|
||||
|
||||
// Create inventory offer chiclet for offer type notifications
|
||||
if( OBJ_GIVE_INVENTORY == obj_type )
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
LLChicletBar::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(notification_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLChicletBar::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(notification_id);
|
||||
// Create inventory offer chiclet for offer type notifications
|
||||
if( OBJ_GIVE_INVENTORY == obj_type )
|
||||
{
|
||||
chiclet_panelp->createChiclet<LLInvOfferChiclet>(notification_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
chiclet_panelp->createChiclet<LLScriptChiclet>(notification_id);
|
||||
}
|
||||
}
|
||||
|
||||
LLIMWellWindow::getInstance()->addObjectRow(notification_id, set_new_message);
|
||||
|
|
@ -410,7 +441,11 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
|
|||
// remove related chiclet
|
||||
if (LLChicletBar::instanceExists())
|
||||
{
|
||||
LLChicletBar::getInstance()->getChicletPanel()->removeChiclet(notification_id);
|
||||
LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel();
|
||||
if (NULL != chiclet_panelp)
|
||||
{
|
||||
chiclet_panelp->removeChiclet(notification_id);
|
||||
}
|
||||
}
|
||||
|
||||
LLIMWellWindow* im_well_window = LLIMWellWindow::findInstance();
|
||||
|
|
|
|||
|
|
@ -23,35 +23,23 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
#include "llviewerprecompiledheaders.h" // must be first include
|
||||
|
||||
#include "llsyswellwindow.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
#include "llflatlistview.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llnotifications.h"
|
||||
|
||||
#include "llscriptfloater.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerwindow.h"
|
||||
|
||||
#include "llchiclet.h"
|
||||
#include "llchicletbar.h"
|
||||
#include "lltoastpanel.h"
|
||||
#include "llflatlistview.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llnotificationmanager.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llscriptfloater.h"
|
||||
#include "llspeakers.h"
|
||||
#include "lltoolbarview.h"
|
||||
#include "lltoastpanel.h"
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
LLSysWellWindow::LLSysWellWindow(const LLSD& key) : LLTransientDockableFloater(NULL, true, key),
|
||||
mChannel(NULL),
|
||||
mMessageList(NULL),
|
||||
mSysWellChiclet(NULL),
|
||||
NOTIFICATION_WELL_ANCHOR_NAME("notification_well_panel"),
|
||||
IM_WELL_ANCHOR_NAME("im_well_panel"),
|
||||
mIsReshapedByUser(false)
|
||||
|
|
@ -68,10 +56,6 @@ BOOL LLSysWellWindow::postBuild()
|
|||
// get a corresponding channel
|
||||
initChannel();
|
||||
|
||||
// click on SysWell Window should clear "new message" state (and 'Lit' status). EXT-3147.
|
||||
// mouse up callback is not called in this case.
|
||||
setMouseDownCallback(boost::bind(&LLSysWellWindow::releaseNewMessagesState, this));
|
||||
|
||||
return LLTransientDockableFloater::postBuild();
|
||||
}
|
||||
|
||||
|
|
@ -95,14 +79,6 @@ void LLSysWellWindow::onStartUpToastClick(S32 x, S32 y, MASK mask)
|
|||
setVisible(TRUE);
|
||||
}
|
||||
|
||||
void LLSysWellWindow::setSysWellChiclet(LLSysWellChiclet* chiclet)
|
||||
{
|
||||
mSysWellChiclet = chiclet;
|
||||
if(NULL != mSysWellChiclet)
|
||||
{
|
||||
mSysWellChiclet->updateWidget(isWindowEmpty());
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
LLSysWellWindow::~LLSysWellWindow()
|
||||
{
|
||||
|
|
@ -113,10 +89,6 @@ void LLSysWellWindow::removeItemByID(const LLUUID& id)
|
|||
{
|
||||
if(mMessageList->removeItemByValue(id))
|
||||
{
|
||||
if (NULL != mSysWellChiclet)
|
||||
{
|
||||
mSysWellChiclet->updateWidget(isWindowEmpty());
|
||||
}
|
||||
reshapeWindow();
|
||||
}
|
||||
else
|
||||
|
|
@ -170,11 +142,6 @@ void LLSysWellWindow::setVisible(BOOL visible)
|
|||
mChannel->updateShowToastsState();
|
||||
mChannel->redrawToasts();
|
||||
}
|
||||
|
||||
if (visible)
|
||||
{
|
||||
releaseNewMessagesState();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
|
|
@ -224,135 +191,12 @@ void LLSysWellWindow::reshapeWindow()
|
|||
}
|
||||
}
|
||||
|
||||
void LLSysWellWindow::releaseNewMessagesState()
|
||||
{
|
||||
if (NULL != mSysWellChiclet)
|
||||
{
|
||||
mSysWellChiclet->setNewMessagesState(false);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
bool LLSysWellWindow::isWindowEmpty()
|
||||
{
|
||||
return mMessageList->size() == 0;
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* RowPanel implementation */
|
||||
/************************************************************************/
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID& sessionId,
|
||||
S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId) :
|
||||
LLPanel(LLPanel::Params()), mChiclet(NULL), mParent(parent)
|
||||
{
|
||||
buildFromFile( "panel_activeim_row.xml");
|
||||
|
||||
// Choose which of the pre-created chiclets (IM/group) to use.
|
||||
// The other one gets hidden.
|
||||
|
||||
LLIMChiclet::EType im_chiclet_type = LLIMChiclet::getIMSessionType(sessionId);
|
||||
switch (im_chiclet_type)
|
||||
{
|
||||
case LLIMChiclet::TYPE_GROUP:
|
||||
mChiclet = getChild<LLIMGroupChiclet>("group_chiclet");
|
||||
break;
|
||||
case LLIMChiclet::TYPE_AD_HOC:
|
||||
mChiclet = getChild<LLAdHocChiclet>("adhoc_chiclet");
|
||||
break;
|
||||
case LLIMChiclet::TYPE_UNKNOWN: // assign mChiclet a non-null value anyway
|
||||
case LLIMChiclet::TYPE_IM:
|
||||
mChiclet = getChild<LLIMP2PChiclet>("p2p_chiclet");
|
||||
break;
|
||||
}
|
||||
|
||||
// Initialize chiclet.
|
||||
mChiclet->setChicletSizeChangedCallback(boost::bind(&LLIMWellWindow::RowPanel::onChicletSizeChanged, this, mChiclet, _2));
|
||||
mChiclet->enableCounterControl(true);
|
||||
mChiclet->setCounter(chicletCounter);
|
||||
mChiclet->setSessionId(sessionId);
|
||||
mChiclet->setIMSessionName(name);
|
||||
mChiclet->setOtherParticipantId(otherParticipantId);
|
||||
mChiclet->setVisible(true);
|
||||
|
||||
if (im_chiclet_type == LLIMChiclet::TYPE_IM)
|
||||
{
|
||||
LLAvatarNameCache::get(otherParticipantId,
|
||||
boost::bind(&LLIMWellWindow::RowPanel::onAvatarNameCache,
|
||||
this, _1, _2));
|
||||
}
|
||||
else
|
||||
{
|
||||
LLTextBox* contactName = getChild<LLTextBox>("contact_name");
|
||||
contactName->setValue(name);
|
||||
}
|
||||
|
||||
mCloseBtn = getChild<LLButton>("hide_btn");
|
||||
mCloseBtn->setCommitCallback(boost::bind(&LLIMWellWindow::RowPanel::onClosePanel, this));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::RowPanel::onAvatarNameCache(const LLUUID& agent_id,
|
||||
const LLAvatarName& av_name)
|
||||
{
|
||||
LLTextBox* contactName = getChild<LLTextBox>("contact_name");
|
||||
contactName->setValue( av_name.getCompleteName() );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::RowPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
|
||||
{
|
||||
LLTextBox* text = getChild<LLTextBox>("contact_name");
|
||||
S32 new_text_left = mChiclet->getRect().mRight + CHICLET_HPAD;
|
||||
LLRect text_rect = text->getRect();
|
||||
text_rect.mLeft = new_text_left;
|
||||
text->setShape(text_rect);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
LLIMWellWindow::RowPanel::~RowPanel()
|
||||
{
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::RowPanel::onClosePanel()
|
||||
{
|
||||
gIMMgr->leaveSession(mChiclet->getSessionId());
|
||||
// This row panel will be removed from the list in LLSysWellWindow::sessionRemoved().
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::RowPanel::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
setTransparentColor(LLUIColorTable::instance().getColor("SysWellItemSelected"));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::RowPanel::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
setTransparentColor(LLUIColorTable::instance().getColor("SysWellItemUnselected"));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// virtual
|
||||
BOOL LLIMWellWindow::RowPanel::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
// Pass the mouse down event to the chiclet (EXT-596).
|
||||
if (!mChiclet->pointInView(x, y) && !mCloseBtn->getRect().pointInRect(x, y)) // prevent double call of LLIMChiclet::onMouseDown()
|
||||
{
|
||||
mChiclet->onMouseDown();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return LLPanel::handleMouseDown(x, y, mask);
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLIMWellWindow::RowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
return mChiclet->handleRightMouseDown(x, y, mask);
|
||||
}
|
||||
/************************************************************************/
|
||||
/* ObjectRowPanel implementation */
|
||||
/************************************************************************/
|
||||
|
|
@ -490,9 +334,7 @@ void LLNotificationWellWindow::addItem(LLSysWellItem::Params p)
|
|||
LLSysWellItem* new_item = new LLSysWellItem(p);
|
||||
if (mMessageList->addItem(new_item, value, ADD_TOP))
|
||||
{
|
||||
mSysWellChiclet->updateWidget(isWindowEmpty());
|
||||
reshapeWindow();
|
||||
|
||||
new_item->setOnItemCloseCallback(boost::bind(&LLNotificationWellWindow::onItemClose, this, _1));
|
||||
new_item->setOnItemClickCallback(boost::bind(&LLNotificationWellWindow::onItemClick, this, _1));
|
||||
}
|
||||
|
|
@ -576,9 +418,6 @@ void LLNotificationWellWindow::onAdd( LLNotificationPtr notify )
|
|||
removeItemByID(notify->getID());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* LLIMWellWindow implementation */
|
||||
/************************************************************************/
|
||||
|
|
@ -588,12 +427,10 @@ void LLNotificationWellWindow::onAdd( LLNotificationPtr notify )
|
|||
LLIMWellWindow::LLIMWellWindow(const LLSD& key)
|
||||
: LLSysWellWindow(key)
|
||||
{
|
||||
LLIMMgr::getInstance()->addSessionObserver(this);
|
||||
}
|
||||
|
||||
LLIMWellWindow::~LLIMWellWindow()
|
||||
{
|
||||
LLIMMgr::getInstance()->removeSessionObserver(this);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -614,47 +451,11 @@ BOOL LLIMWellWindow::postBuild()
|
|||
BOOL rv = LLSysWellWindow::postBuild();
|
||||
setTitle(getString("title_im_well_window"));
|
||||
|
||||
LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLIMWellWindow::findIMChiclet, this, _1));
|
||||
LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLIMWellWindow::findObjectChiclet, this, _1));
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLIMWellWindow::sessionAdded(const LLUUID& session_id,
|
||||
const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg)
|
||||
{
|
||||
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
|
||||
if (!session) return;
|
||||
|
||||
// no need to spawn chiclets for participants in P2P calls called through Avaline
|
||||
if (session->isP2P() && session->isOtherParticipantAvaline()) return;
|
||||
|
||||
if (mMessageList->getItemByValue(session_id)) return;
|
||||
|
||||
addIMRow(session_id, 0, name, other_participant_id);
|
||||
reshapeWindow();
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLIMWellWindow::sessionRemoved(const LLUUID& sessionId)
|
||||
{
|
||||
delIMRow(sessionId);
|
||||
reshapeWindow();
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLIMWellWindow::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id)
|
||||
{
|
||||
//for outgoing ad-hoc and group im sessions only
|
||||
LLChiclet* chiclet = findIMChiclet(old_session_id);
|
||||
if (chiclet)
|
||||
{
|
||||
chiclet->setSessionId(new_session_id);
|
||||
mMessageList->updateValue(old_session_id, new_session_id);
|
||||
}
|
||||
}
|
||||
|
||||
LLChiclet* LLIMWellWindow::findObjectChiclet(const LLUUID& notification_id)
|
||||
{
|
||||
if (!mMessageList) return NULL;
|
||||
|
|
@ -671,66 +472,6 @@ LLChiclet* LLIMWellWindow::findObjectChiclet(const LLUUID& notification_id)
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// PRIVATE METHODS
|
||||
LLChiclet* LLIMWellWindow::findIMChiclet(const LLUUID& sessionId)
|
||||
{
|
||||
if (!mMessageList) return NULL;
|
||||
|
||||
LLChiclet* res = NULL;
|
||||
RowPanel* panel = mMessageList->getTypedItemByValue<RowPanel>(sessionId);
|
||||
if (panel != NULL)
|
||||
{
|
||||
res = panel->mChiclet;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::addIMRow(const LLUUID& sessionId, S32 chicletCounter,
|
||||
const std::string& name, const LLUUID& otherParticipantId)
|
||||
{
|
||||
RowPanel* item = new RowPanel(this, sessionId, chicletCounter, name, otherParticipantId);
|
||||
if (!mMessageList->addItem(item, sessionId))
|
||||
{
|
||||
llwarns << "Unable to add IM Row into the list, sessionID: " << sessionId
|
||||
<< ", name: " << name
|
||||
<< ", other participant ID: " << otherParticipantId
|
||||
<< llendl;
|
||||
|
||||
item->die();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::delIMRow(const LLUUID& sessionId)
|
||||
{
|
||||
//fix for EXT-3252
|
||||
//without this line LLIMWellWindow receive onFocusLost
|
||||
//and hide itself. It was becaue somehow LLIMChicklet was in focus group for
|
||||
//LLIMWellWindow...
|
||||
//But I didn't find why this happen..
|
||||
gFocusMgr.clearLastFocusForGroup(this);
|
||||
|
||||
if (!mMessageList->removeItemByValue(sessionId))
|
||||
{
|
||||
llwarns << "Unable to remove IM Row from the list, sessionID: " << sessionId
|
||||
<< llendl;
|
||||
}
|
||||
|
||||
// remove all toasts that belong to this session from a screen
|
||||
if(mChannel)
|
||||
mChannel->removeToastsBySessionID(sessionId);
|
||||
|
||||
// hide chiclet window if there are no items left
|
||||
if(isWindowEmpty())
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
setFocus(true);
|
||||
}
|
||||
}
|
||||
|
||||
void LLIMWellWindow::addObjectRow(const LLUUID& notification_id, bool new_message/* = false*/)
|
||||
{
|
||||
|
|
@ -761,21 +502,6 @@ void LLIMWellWindow::removeObjectRow(const LLUUID& notification_id)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void LLIMWellWindow::addIMRow(const LLUUID& session_id)
|
||||
{
|
||||
if (hasIMRow(session_id)) return;
|
||||
|
||||
LLIMModel* im_model = LLIMModel::getInstance();
|
||||
addIMRow(session_id, 0, im_model->getName(session_id), im_model->getOtherParticipantID(session_id));
|
||||
reshapeWindow();
|
||||
}
|
||||
|
||||
bool LLIMWellWindow::hasIMRow(const LLUUID& session_id)
|
||||
{
|
||||
return mMessageList->getItemByValue(session_id);
|
||||
}
|
||||
|
||||
void LLIMWellWindow::closeAll()
|
||||
{
|
||||
// Generate an ignorable alert dialog if there is an active voice IM sesion
|
||||
|
|
@ -820,13 +546,6 @@ void LLIMWellWindow::closeAllImpl()
|
|||
{
|
||||
LLPanel* panel = mMessageList->getItemByValue(*iter);
|
||||
|
||||
RowPanel* im_panel = dynamic_cast <RowPanel*> (panel);
|
||||
if (im_panel)
|
||||
{
|
||||
gIMMgr->leaveSession(*iter);
|
||||
continue;
|
||||
}
|
||||
|
||||
ObjectRowPanel* obj_panel = dynamic_cast <ObjectRowPanel*> (panel);
|
||||
if (obj_panel)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,32 +27,26 @@
|
|||
#ifndef LL_LLSYSWELLWINDOW_H
|
||||
#define LL_LLSYSWELLWINDOW_H
|
||||
|
||||
#include "llsyswellitem.h"
|
||||
|
||||
#include "lltransientdockablefloater.h"
|
||||
#include "llbutton.h"
|
||||
#include "llscreenchannel.h"
|
||||
#include "llscrollcontainer.h"
|
||||
#include "llimview.h"
|
||||
#include "llnotifications.h"
|
||||
|
||||
#include "boost/shared_ptr.hpp"
|
||||
#include "llscreenchannel.h"
|
||||
#include "llsyswellitem.h"
|
||||
#include "lltransientdockablefloater.h"
|
||||
|
||||
class LLAvatarName;
|
||||
class LLFlatListView;
|
||||
class LLChiclet;
|
||||
class LLFlatListView;
|
||||
class LLIMChiclet;
|
||||
class LLScriptChiclet;
|
||||
class LLSysWellChiclet;
|
||||
|
||||
|
||||
class LLSysWellWindow : public LLTransientDockableFloater
|
||||
{
|
||||
public:
|
||||
LOG_CLASS(LLSysWellWindow);
|
||||
|
||||
LLSysWellWindow(const LLSD& key);
|
||||
~LLSysWellWindow();
|
||||
virtual ~LLSysWellWindow();
|
||||
BOOL postBuild();
|
||||
|
||||
// other interface functions
|
||||
|
|
@ -72,8 +66,6 @@ public:
|
|||
|
||||
void onStartUpToastClick(S32 x, S32 y, MASK mask);
|
||||
|
||||
void setSysWellChiclet(LLSysWellChiclet* chiclet);
|
||||
|
||||
// size constants for the window and for its elements
|
||||
static const S32 MAX_WINDOW_HEIGHT = 200;
|
||||
static const S32 MIN_WINDOW_WIDTH = 318;
|
||||
|
|
@ -87,17 +79,11 @@ protected:
|
|||
virtual const std::string& getAnchorViewName() = 0;
|
||||
|
||||
void reshapeWindow();
|
||||
void releaseNewMessagesState();
|
||||
|
||||
// pointer to a corresponding channel's instance
|
||||
LLNotificationsUI::LLScreenChannel* mChannel;
|
||||
LLFlatListView* mMessageList;
|
||||
|
||||
/**
|
||||
* Reference to an appropriate Well chiclet to release "new message" state. EXT-3147
|
||||
*/
|
||||
LLSysWellChiclet* mSysWellChiclet;
|
||||
|
||||
bool mIsReshapedByUser;
|
||||
};
|
||||
|
||||
|
|
@ -157,7 +143,7 @@ private:
|
|||
*
|
||||
* It contains a list list of all active IM sessions.
|
||||
*/
|
||||
class LLIMWellWindow : public LLSysWellWindow, LLIMSessionObserver, LLInitClass<LLIMWellWindow>
|
||||
class LLIMWellWindow : public LLSysWellWindow, LLInitClass<LLIMWellWindow>
|
||||
{
|
||||
public:
|
||||
LLIMWellWindow(const LLSD& key);
|
||||
|
|
@ -169,59 +155,19 @@ public:
|
|||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
// LLIMSessionObserver observe triggers
|
||||
/*virtual*/ void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg);
|
||||
/*virtual*/ void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {}
|
||||
/*virtual*/ void sessionVoiceOrIMStarted(const LLUUID& session_id) {};
|
||||
/*virtual*/ void sessionRemoved(const LLUUID& session_id);
|
||||
/*virtual*/ void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
|
||||
|
||||
void addObjectRow(const LLUUID& notification_id, bool new_message = false);
|
||||
void removeObjectRow(const LLUUID& notification_id);
|
||||
|
||||
void addIMRow(const LLUUID& session_id);
|
||||
bool hasIMRow(const LLUUID& session_id);
|
||||
|
||||
void closeAll();
|
||||
|
||||
protected:
|
||||
/*virtual*/ const std::string& getAnchorViewName() { return IM_WELL_ANCHOR_NAME; }
|
||||
|
||||
private:
|
||||
LLChiclet * findIMChiclet(const LLUUID& sessionId);
|
||||
LLChiclet* findObjectChiclet(const LLUUID& notification_id);
|
||||
|
||||
void addIMRow(const LLUUID& sessionId, S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId);
|
||||
void delIMRow(const LLUUID& sessionId);
|
||||
bool confirmCloseAll(const LLSD& notification, const LLSD& response);
|
||||
void closeAllImpl();
|
||||
|
||||
/**
|
||||
* Scrolling row panel.
|
||||
*/
|
||||
class RowPanel: public LLPanel
|
||||
{
|
||||
public:
|
||||
RowPanel(const LLSysWellWindow* parent, const LLUUID& sessionId, S32 chicletCounter,
|
||||
const std::string& name, const LLUUID& otherParticipantId);
|
||||
virtual ~RowPanel();
|
||||
void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
|
||||
private:
|
||||
static const S32 CHICLET_HPAD = 10;
|
||||
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
|
||||
void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param);
|
||||
void onClosePanel();
|
||||
public:
|
||||
LLIMChiclet* mChiclet;
|
||||
private:
|
||||
LLButton* mCloseBtn;
|
||||
const LLSysWellWindow* mParent;
|
||||
};
|
||||
|
||||
class ObjectRowPanel: public LLPanel
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 3.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 602 B |
Binary file not shown.
|
Before Width: | Height: | Size: 669 B |
Binary file not shown.
|
Before Width: | Height: | Size: 639 B |
Binary file not shown.
|
Before Width: | Height: | Size: 547 B |
Binary file not shown.
|
Before Width: | Height: | Size: 526 B |
|
|
@ -365,8 +365,6 @@ with the same filename but different name
|
|||
|
||||
<texture name="Nearby_chat_icon" file_name="icons/nearby_chat_icon.png" preload="false" />
|
||||
|
||||
<texture name="Notices_Unread" file_name="bottomtray/Notices_Unread.png" preload="true" />
|
||||
|
||||
<texture name="NoEntryLines" file_name="world/NoEntryLines.png" use_mips="true" preload="false" />
|
||||
<texture name="NoEntryPassLines" file_name="world/NoEntryPassLines.png" use_mips="true" preload="false" />
|
||||
|
||||
|
|
@ -654,12 +652,6 @@ with the same filename but different name
|
|||
<texture name="VoicePTT_Off" file_name="bottomtray/VoicePTT_Off.png" preload="false" />
|
||||
<texture name="VoicePTT_On" file_name="bottomtray/VoicePTT_On.png" preload="false" />
|
||||
|
||||
<texture name="VoicePTT_Lvl1_Dark" file_name="bottomtray/VoicePTT_Lvl1_Dark.png" preload="false" />
|
||||
<texture name="VoicePTT_Lvl2_Dark" file_name="bottomtray/VoicePTT_Lvl2_Dark.png" preload="false" />
|
||||
<texture name="VoicePTT_Lvl3_Dark" file_name="bottomtray/VoicePTT_Lvl3_Dark.png" preload="false" />
|
||||
<texture name="VoicePTT_Off_Dark" file_name="bottomtray/VoicePTT_Off_Dark.png" preload="false" />
|
||||
<texture name="VoicePTT_On_Dark" file_name="bottomtray/VoicePTT_On_Dark.png" preload="false" />
|
||||
|
||||
<texture name="Wearables_Divider" file_name="windows/Wearables_Divider.png" preload="false" />
|
||||
|
||||
<texture name="Web_Profile_Off" file_name="icons/Web_Profile_Off.png" preload="false" />
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Luk alle" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Luk alle" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Alle schließen" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Alle schließen" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu
|
||||
layout="topleft"
|
||||
name="Notification Well Button Context Menu">
|
||||
<menu_item_call
|
||||
label="Close All"
|
||||
layout="topleft"
|
||||
name="Close All">
|
||||
<menu_item_call.on_click
|
||||
function="NotificationWellChicletMenu.Action"
|
||||
parameter="close all" />
|
||||
<menu_item_call.on_enable
|
||||
function="NotificationWellChicletMenu.EnableItem"
|
||||
parameter="can close all" />
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_activeim_row"
|
||||
layout="topleft"
|
||||
follows="left|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="35"
|
||||
width="318"
|
||||
background_opaque="false"
|
||||
background_visible="true"
|
||||
bg_alpha_color="0.0 0.0 0.0 0.0" >
|
||||
<chiclet_im_p2p
|
||||
name="p2p_chiclet"
|
||||
layout="topleft"
|
||||
follows="left"
|
||||
top="3"
|
||||
left="5"
|
||||
height="25"
|
||||
width="25"
|
||||
visible="false"
|
||||
speaker.name="speaker_p2p"
|
||||
speaker.width="20"
|
||||
speaker.height="25"
|
||||
speaker.left="25"
|
||||
speaker.top="25"
|
||||
speaker.auto_update="true"
|
||||
speaker.draw_border="false"
|
||||
speaker.visible="false">
|
||||
</chiclet_im_p2p>
|
||||
<chiclet_im_group
|
||||
name="group_chiclet"
|
||||
layout="topleft"
|
||||
follows="left"
|
||||
top="3"
|
||||
left="5"
|
||||
height="25"
|
||||
width="25"
|
||||
visible="false"
|
||||
speaker.name="speaker_grp"
|
||||
speaker.width="20"
|
||||
speaker.height="25"
|
||||
speaker.left="25"
|
||||
speaker.top="25"
|
||||
speaker.auto_update="true"
|
||||
speaker.draw_border="false"
|
||||
speaker.visible="false">
|
||||
</chiclet_im_group>
|
||||
<chiclet_im_adhoc
|
||||
name="adhoc_chiclet"
|
||||
layout="topleft"
|
||||
follows="left"
|
||||
top="3"
|
||||
left="5"
|
||||
height="25"
|
||||
width="25"
|
||||
visible="false"
|
||||
speaker.name="speaker_hoc"
|
||||
speaker.width="20"
|
||||
speaker.height="25"
|
||||
speaker.left="25"
|
||||
speaker.top="25"
|
||||
speaker.auto_update="true"
|
||||
speaker.draw_border="false"
|
||||
speaker.visible="false">
|
||||
</chiclet_im_adhoc>
|
||||
<text
|
||||
translate="false"
|
||||
type="string"
|
||||
name="contact_name"
|
||||
layout="topleft"
|
||||
top="10"
|
||||
left_pad="10"
|
||||
height="14"
|
||||
width="250"
|
||||
length="1"
|
||||
follows="right|left"
|
||||
parse_urls="false"
|
||||
use_ellipses="true"
|
||||
font="SansSerifBold">
|
||||
TestString PleaseIgnore
|
||||
</text>
|
||||
<button
|
||||
top="10"
|
||||
right="-5"
|
||||
width="17"
|
||||
height="17"
|
||||
layout="topleft"
|
||||
follows="right"
|
||||
name="hide_btn"
|
||||
mouse_opaque="true"
|
||||
label=""
|
||||
tab_stop="false"
|
||||
image_unselected="Toast_CloseBtn"
|
||||
image_selected="Toast_CloseBtn"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -77,49 +77,5 @@
|
|||
width="12" />
|
||||
</chiclet_panel>
|
||||
</layout_panel>
|
||||
<layout_panel auto_resize="false"
|
||||
width="4"
|
||||
min_width="4"/>
|
||||
<layout_panel
|
||||
auto_resize="false"
|
||||
follows="right"
|
||||
height="28"
|
||||
layout="topleft"
|
||||
min_height="28"
|
||||
min_width="37"
|
||||
name="notification_well_panel"
|
||||
top="0"
|
||||
width="37">
|
||||
<chiclet_notification
|
||||
follows="right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
max_displayed_count="99"
|
||||
name="notification_well"
|
||||
top="5"
|
||||
width="35">
|
||||
<button
|
||||
auto_resize="false"
|
||||
bottom_pad="3"
|
||||
follows="right"
|
||||
halign="center"
|
||||
height="23"
|
||||
image_overlay="Notices_Unread"
|
||||
image_overlay_alignment="center"
|
||||
image_pressed="WellButton_Lit"
|
||||
image_pressed_selected="WellButton_Lit_Selected"
|
||||
image_selected="PushButton_Press"
|
||||
label_color="Black"
|
||||
left="0"
|
||||
name="Unread"
|
||||
tool_tip="Notifications"
|
||||
width="34">
|
||||
<init_callback
|
||||
function="Button.SetDockableFloaterToggle"
|
||||
parameter="notification_well_window" />
|
||||
</button>
|
||||
</chiclet_notification>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,55 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<chiclet_im_adhoc
|
||||
height="23"
|
||||
name="im_adhoc_chiclet"
|
||||
show_speaker="false"
|
||||
width="25">
|
||||
<chiclet_im_adhoc.chiclet_button
|
||||
height="25"
|
||||
image_selected="PushButton_On"
|
||||
image_unselected="PushButton_Off"
|
||||
name="chiclet_button"
|
||||
tab_stop="false"
|
||||
width="25" />
|
||||
<chiclet_im_adhoc.speaker
|
||||
image_mute="Parcel_VoiceNo_Light"
|
||||
image_off="VoicePTT_Off_Dark"
|
||||
image_on="VoicePTT_On_Dark"
|
||||
image_level_1="VoicePTT_Lvl1_Dark"
|
||||
image_level_2="VoicePTT_Lvl2_Dark"
|
||||
image_level_3="VoicePTT_Lvl3_Dark"
|
||||
auto_update="true"
|
||||
draw_border="false"
|
||||
height="24"
|
||||
left="25"
|
||||
bottom="1"
|
||||
name="speaker"
|
||||
visible="false"
|
||||
width="20" />
|
||||
<chiclet_im_adhoc.avatar_icon
|
||||
bottom="3"
|
||||
follows="left|top|bottom"
|
||||
height="20"
|
||||
left="2"
|
||||
mouse_opaque="false"
|
||||
name="adhoc_icon"
|
||||
width="21" />
|
||||
<chiclet_im_adhoc.unread_notifications
|
||||
halign="center"
|
||||
height="23"
|
||||
left="25"
|
||||
mouse_opaque="false"
|
||||
name="unread"
|
||||
text_color="white"
|
||||
v_pad="3"
|
||||
visible="false"
|
||||
width="20" />
|
||||
<chiclet_im_adhoc.new_message_icon
|
||||
bottom="11"
|
||||
height="14"
|
||||
image_name="Unread_Chiclet"
|
||||
left="12"
|
||||
name="new_message_icon"
|
||||
visible="false"
|
||||
width="14" />
|
||||
</chiclet_im_adhoc>
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<chiclet_im_group
|
||||
height="23"
|
||||
name="im_group_chiclet"
|
||||
show_speaker="false"
|
||||
width="25">
|
||||
<chiclet_im_group.chiclet_button
|
||||
height="25"
|
||||
image_selected="PushButton_On"
|
||||
image_unselected="PushButton_Off"
|
||||
name="chiclet_button"
|
||||
tab_stop="false"
|
||||
width="25" />
|
||||
<chiclet_im_group.speaker
|
||||
image_mute="Parcel_VoiceNo_Light"
|
||||
image_off="VoicePTT_Off_Dark"
|
||||
image_on="VoicePTT_On_Dark"
|
||||
image_level_1="VoicePTT_Lvl1_Dark"
|
||||
image_level_2="VoicePTT_Lvl2_Dark"
|
||||
image_level_3="VoicePTT_Lvl3_Dark"
|
||||
auto_update="true"
|
||||
draw_border="false"
|
||||
height="24"
|
||||
left="25"
|
||||
bottom="1"
|
||||
name="speaker"
|
||||
visible="false"
|
||||
width="20" />
|
||||
<chiclet_im_group.group_icon
|
||||
bottom="3"
|
||||
default_icon="Generic_Group"
|
||||
follows="left|top|bottom"
|
||||
height="20"
|
||||
left="2"
|
||||
mouse_opaque="false"
|
||||
name="group_icon"
|
||||
width="21" />
|
||||
<chiclet_im_group.unread_notifications
|
||||
height="23"
|
||||
halign="center"
|
||||
left="25"
|
||||
mouse_opaque="false"
|
||||
name="unread"
|
||||
text_color="white"
|
||||
v_pad="3"
|
||||
visible="false"
|
||||
width="20"/>
|
||||
<chiclet_im_group.new_message_icon
|
||||
bottom="11"
|
||||
height="14"
|
||||
image_name="Unread_Chiclet"
|
||||
left="12"
|
||||
name="new_message_icon"
|
||||
visible="false"
|
||||
width="14" />
|
||||
</chiclet_im_group>
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<chiclet_im_p2p
|
||||
height="23"
|
||||
name="im_p2p_chiclet"
|
||||
show_speaker="false"
|
||||
width="25">
|
||||
<chiclet_im_p2p.chiclet_button
|
||||
height="25"
|
||||
image_selected="PushButton_On"
|
||||
image_unselected="PushButton_Off"
|
||||
name="chiclet_button"
|
||||
tab_stop="false"
|
||||
width="25"/>
|
||||
<chiclet_im_p2p.speaker
|
||||
image_mute="Parcel_VoiceNo_Light"
|
||||
image_off="VoicePTT_Off_Dark"
|
||||
image_on="VoicePTT_On_Dark"
|
||||
image_level_1="VoicePTT_Lvl1_Dark"
|
||||
image_level_2="VoicePTT_Lvl2_Dark"
|
||||
image_level_3="VoicePTT_Lvl3_Dark"
|
||||
auto_update="true"
|
||||
draw_border="false"
|
||||
height="24"
|
||||
left="25"
|
||||
bottom="1"
|
||||
name="speaker"
|
||||
visible="false"
|
||||
width="20" />
|
||||
<chiclet_im_p2p.avatar_icon
|
||||
bottom="3"
|
||||
color="white"
|
||||
follows="left|top|bottom"
|
||||
height="20"
|
||||
left="2"
|
||||
mouse_opaque="false"
|
||||
name="avatar_icon"
|
||||
width="21" />
|
||||
<chiclet_im_p2p.unread_notifications
|
||||
height="23"
|
||||
halign="center"
|
||||
left="25"
|
||||
mouse_opaque="false"
|
||||
name="unread"
|
||||
text_color="white"
|
||||
v_pad="3"
|
||||
visible="false"
|
||||
width="20"/>
|
||||
<chiclet_im_p2p.new_message_icon
|
||||
bottom="11"
|
||||
height="14"
|
||||
image_name="Unread_Chiclet"
|
||||
left="12"
|
||||
name="new_message_icon"
|
||||
visible="false"
|
||||
width="14" />
|
||||
</chiclet_im_p2p>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Cerrar todo" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Cerrar todo" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Tout fermer" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Tout fermer" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Chiudi tutto" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Chiudi tutto" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="すべて閉じる" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="すべて閉じる" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Zamknij wszystkie" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Zamknij" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Fechar tudo" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Fechar tudo" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Закрыть все" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Закрыть все" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="Tümünü Kapat" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="Tümünü Kapat" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="IM Well Button Context Menu">
|
||||
<menu_item_call label="全部關閉" name="Close All"/>
|
||||
</context_menu>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Notification Well Button Context Menu">
|
||||
<menu_item_call label="全部關閉" name="Close All"/>
|
||||
</context_menu>
|
||||
Loading…
Reference in New Issue