diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/lltoastimpanel.cpp | 88 | ||||
-rw-r--r-- | indra/newview/lltoastimpanel.h | 6 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_instant_message.xml | 10 |
3 files changed, 91 insertions, 13 deletions
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index 89a58cd736..a436dc0546 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -33,7 +33,10 @@ #include "llviewerprecompiledheaders.h" #include "lltoastimpanel.h" +#include "llagent.h" #include "llfloaterreg.h" +#include "llgroupactions.h" +#include "llgroupiconctrl.h" #include "llnotifications.h" #include "llinstantmessage.h" #include "lltooltip.h" @@ -45,11 +48,12 @@ const S32 LLToastIMPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT = 6; //-------------------------------------------------------------------------- LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notification), mAvatarIcon(NULL), mAvatarName(NULL), - mTime(NULL), mMessage(NULL) + mTime(NULL), mMessage(NULL), mGroupIcon(NULL) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml"); LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon"); + mGroupIcon = getChild<LLGroupIconCtrl>("group_icon"); mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon"); mAvatarName = getChild<LLTextBox>("user_name"); mTime = getChild<LLTextBox>("time_box"); @@ -86,17 +90,26 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif mAvatarID = p.avatar_id; mNotification = p.notification; + mAvatarIcon->setVisible(FALSE); + mGroupIcon->setVisible(FALSE); + sys_msg_icon->setVisible(FALSE); + if(p.from == SYSTEM_FROM) { - mAvatarIcon->setVisible(FALSE); sys_msg_icon->setVisible(TRUE); } else { - mAvatarIcon->setVisible(TRUE); - sys_msg_icon->setVisible(FALSE); - - mAvatarIcon->setValue(p.avatar_id); + if(LLGroupActions::isInGroup(mSessionID)) + { + mGroupIcon->setVisible(TRUE); + mGroupIcon->setValue(p.session_id); + } + else + { + mAvatarIcon->setVisible(TRUE); + mAvatarIcon->setValue(p.avatar_id); + } } S32 maxLinesCount; @@ -128,11 +141,39 @@ BOOL LLToastIMPanel::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask) { // It's not our direct child, so parentPointInView() doesn't work. - LLRect name_rect; - mAvatarName->localRectToOtherView(mAvatarName->getLocalRect(), &name_rect, this); - if (!name_rect.pointInRect(x, y)) - return LLToastPanel::handleToolTip(x, y, mask); + LLRect ctrl_rect; + + mAvatarName->localRectToOtherView(mAvatarName->getLocalRect(), &ctrl_rect, this); + if (ctrl_rect.pointInRect(x, y)) + { + spawnNameToolTip(); + return TRUE; + } + + mGroupIcon->localRectToOtherView(mGroupIcon->getLocalRect(), &ctrl_rect, this); + if(mGroupIcon->getVisible() && ctrl_rect.pointInRect(x, y)) + { + spawnGroupIconToolTip(); + return TRUE; + } + + return LLToastPanel::handleToolTip(x, y, mask); +} + +void LLToastIMPanel::showInspector() +{ + if(LLGroupActions::isInGroup(mSessionID)) + { + LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID)); + } + else + { + LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID)); + } +} +void LLToastIMPanel::spawnNameToolTip() +{ // Spawn at right side of the name textbox. LLRect sticky_rect = mAvatarName->calcScreenRect(); S32 icon_x = llmin(sticky_rect.mLeft + mAvatarName->getTextPixelWidth() + 3, sticky_rect.mRight - 16); @@ -149,10 +190,31 @@ BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask) params.sticky_rect(sticky_rect); LLToolTipMgr::getInstance()->show(params); - return TRUE; } -void LLToastIMPanel::showInspector() +void LLToastIMPanel::spawnGroupIconToolTip() { - LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID)); + // Spawn at right bottom side of group icon. + LLRect sticky_rect = mGroupIcon->calcScreenRect(); + LLCoordGL pos(sticky_rect.mRight, sticky_rect.mBottom); + + LLGroupData g_data; + if(!gAgent.getGroupData(mSessionID, g_data)) + { + llwarns << "Error getting group data" << llendl; + } + + LLInspector::Params params; + params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + params.click_callback(boost::bind(&LLToastIMPanel::showInspector, this)); + params.delay_time(0.100f); + params.image(LLUI::getUIImage("Info_Small")); + params.message(g_data.mName); + params.padding(3); + params.pos(pos); + params.max_width(300); + + LLToolTipMgr::getInstance()->show(params); } + +// EOF diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h index 154e6dae16..444c0af144 100644 --- a/indra/newview/lltoastimpanel.h +++ b/indra/newview/lltoastimpanel.h @@ -39,6 +39,7 @@ #include "llbutton.h" #include "llavatariconctrl.h" +class LLGroupIconCtrl; class LLToastIMPanel: public LLToastPanel { @@ -61,12 +62,17 @@ public: /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask); private: void showInspector(); + + void spawnNameToolTip(); + void spawnGroupIconToolTip(); + static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT; LLNotificationPtr mNotification; LLUUID mSessionID; LLUUID mAvatarID; LLAvatarIconCtrl* mAvatarIcon; + LLGroupIconCtrl* mGroupIcon; LLTextBox* mAvatarName; LLTextBox* mTime; LLTextBox* mMessage; diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index 7204e57479..5a1bc32db0 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -35,6 +35,16 @@ name="avatar_icon" top="3" width="18" /> + <group_icon + follows="right" + height="18" + default_icon_name="Generic_Group" + layout="topleft" + left="3" + mouse_opaque="false" + name="group_icon" + top="3" + width="18" /> <!--<icon follows="right" height="20" |