CHUI-573 FIXED Notification chiclet shown when object chiclets are shown

master
maksymsproductengine 2012-12-04 04:14:51 +02:00
parent 3f6f374c25
commit f1155c4fa5
43 changed files with 103 additions and 2366 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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.

View File

@ -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));

View File

@ -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)

View File

@ -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);
}
}
}

View File

@ -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();

View File

@ -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)
{

View File

@ -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

View File

@ -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" />

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>