diff options
Diffstat (limited to 'indra/newview/lltoastimpanel.cpp')
| -rw-r--r-- | indra/newview/lltoastimpanel.cpp | 498 | 
1 files changed, 249 insertions, 249 deletions
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index 910e42addf..81dd402c31 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -1,249 +1,249 @@ -/** - * @file lltoastimpanel.cpp - * @brief Panel for IM toasts. - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" -#include "lltoastimpanel.h" - -#include "llagent.h" -#include "llavatarnamecache.h" -#include "llfloaterreg.h" -#include "llgroupactions.h" -#include "llgroupiconctrl.h" -#include "llimview.h" -#include "llnotifications.h" -#include "llinstantmessage.h" -#include "lltooltip.h" - -#include "llviewerchat.h" - -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), mGroupIcon(NULL) -{ -	buildFromFile( "panel_instant_message.xml"); - -	mGroupIcon = getChild<LLGroupIconCtrl>("group_icon"); -	mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon"); -	mAdhocIcon = getChild<LLAvatarIconCtrl>("adhoc_icon"); -	mAvatarName = getChild<LLTextBox>("user_name"); -	mTime = getChild<LLTextBox>("time_box"); -	mMessage = getChild<LLTextBox>("message"); -	mMessage->setContentTrusted(false); - -	LLStyle::Params style_params; -	LLFontGL* fontp = LLViewerChat::getChatFont(); -	std::string font_name = LLFontGL::nameFromFont(fontp); -	std::string font_size = LLFontGL::sizeFromFont(fontp); -	style_params.font.name(font_name); -	style_params.font.size(font_size); -	 -	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(p.session_id); -	mIsGroupMsg = (im_session && im_session->mSessionType == LLIMModel::LLIMSession::GROUP_SESSION); -	std::string title = mIsGroupMsg ? im_session->mName : p.from; -	mAvatarName->setValue(title); - -	//Handle IRC styled /me messages. -	std::string prefix = p.message.substr(0, 4); -	if (prefix == "/me " || prefix == "/me'") -	{ -		//style_params.font.style = "UNDERLINE"; -		mMessage->clear(); -		 -		style_params.font.style ="ITALIC"; -		mMessage->appendText(p.from, false, style_params); - -		style_params.font.style = "ITALIC"; -		mMessage->appendText(p.message.substr(3), false, style_params); -	} -	else -	{ -		if (mIsGroupMsg) -		{ -			LLAvatarName avatar_name; -			LLAvatarNameCache::get(p.avatar_id, &avatar_name); -			p.message = "[From " + avatar_name.getDisplayName() + "]\n" + p.message; -		} -		style_params.font.style =  "NORMAL"; -		mMessage->setText(p.message, style_params); -	} - -	mTime->setValue(p.time); -	mSessionID = p.session_id; -	mAvatarID = p.avatar_id; -	mNotification = p.notification; - - - -	initIcon(); - -	S32 maxLinesCount; -	std::istringstream ss( getString("message_max_lines_count") ); -	if (!(ss >> maxLinesCount)) -	{ -		maxLinesCount = DEFAULT_MESSAGE_MAX_LINE_COUNT; -	} -	snapToMessageHeight(mMessage, maxLinesCount); -} - -//-------------------------------------------------------------------------- -LLToastIMPanel::~LLToastIMPanel() -{ -} - -//virtual -bool LLToastIMPanel::handleMouseUp(S32 x, S32 y, MASK mask) -{ -	if (!LLPanel::handleMouseUp(x, y, mask)) -	{ -		mNotification->respond(mNotification->getResponseTemplate()); -	} - -	return true; -} - -//virtual -bool LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask) -{ -	// It's not our direct child, so parentPointInView() doesn't work. -	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::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); -	LLCoordGL pos(icon_x, sticky_rect.mTop); - -	LLToolTip::Params params; -	params.background_visible(false); -	if(!mIsGroupMsg) -	{ -	params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_avatar", LLSD().with("avatar_id", mAvatarID), false)); -	} -	else -	{ -		params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_group", LLSD().with("group_id", mSessionID), false)); -	} -	params.delay_time(0.0f);		// spawn instantly on hover -	params.image(LLUI::getUIImage("Info_Small")); -	params.message(""); -	params.padding(0); -	params.pos(pos); -	params.sticky_rect(sticky_rect); - -	LLToolTipMgr::getInstance()->show(params); -} - -void LLToastIMPanel::spawnGroupIconToolTip() -{ -	// 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)) -	{ -		LL_WARNS() << "Error getting group data" << LL_ENDL; -	} - -	LLInspector::Params params; -	params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); -	params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_group", LLSD().with("group_id", mSessionID), false)); -	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); -} - -void LLToastIMPanel::initIcon() -{ -	mAvatarIcon->setVisible(false); -	mGroupIcon->setVisible(false); -	mAdhocIcon->setVisible(false); - -	if(mAvatarName->getValue().asString() == SYSTEM_FROM) -	{ -		// "sys_msg_icon" was disabled by Erica in the changeset: 5109 (85181bc92cbe) -		// and "dummy widget" warnings appeared in log. -		// It does not make sense to have such image with empty name. Removed for EXT-5057. -	} -	else -	{ -		LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID); -		if(!im_session) -		{ -			LL_WARNS() << "Invalid IM session" << LL_ENDL; -			return; -		} - -		switch(im_session->mSessionType) -		{ -		case LLIMModel::LLIMSession::P2P_SESSION: -			mAvatarIcon->setVisible(true); -			mAvatarIcon->setValue(mAvatarID); -			break; -		case LLIMModel::LLIMSession::GROUP_SESSION: -			mGroupIcon->setVisible(true); -			mGroupIcon->setValue(mSessionID); -			break; -		case LLIMModel::LLIMSession::ADHOC_SESSION: -			mAdhocIcon->setVisible(true); -			mAdhocIcon->setValue(im_session->mOtherParticipantID); -			mAdhocIcon->setToolTip(im_session->mName); -			break; -		default: -			LL_WARNS() << "Unknown IM session type" << LL_ENDL; -			break; -		} -	} -} - -// EOF +/**
 + * @file lltoastimpanel.cpp
 + * @brief Panel for IM toasts.
 + *
 + * $LicenseInfo:firstyear=2001&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#include "llviewerprecompiledheaders.h"
 +#include "lltoastimpanel.h"
 +
 +#include "llagent.h"
 +#include "llavatarnamecache.h"
 +#include "llfloaterreg.h"
 +#include "llgroupactions.h"
 +#include "llgroupiconctrl.h"
 +#include "llimview.h"
 +#include "llnotifications.h"
 +#include "llinstantmessage.h"
 +#include "lltooltip.h"
 +
 +#include "llviewerchat.h"
 +
 +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), mGroupIcon(NULL)
 +{
 +    buildFromFile( "panel_instant_message.xml");
 +
 +    mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");
 +    mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
 +    mAdhocIcon = getChild<LLAvatarIconCtrl>("adhoc_icon");
 +    mAvatarName = getChild<LLTextBox>("user_name");
 +    mTime = getChild<LLTextBox>("time_box");
 +    mMessage = getChild<LLTextBox>("message");
 +    mMessage->setContentTrusted(false);
 +
 +    LLStyle::Params style_params;
 +    LLFontGL* fontp = LLViewerChat::getChatFont();
 +    std::string font_name = LLFontGL::nameFromFont(fontp);
 +    std::string font_size = LLFontGL::sizeFromFont(fontp);
 +    style_params.font.name(font_name);
 +    style_params.font.size(font_size);
 +
 +    LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(p.session_id);
 +    mIsGroupMsg = (im_session && im_session->mSessionType == LLIMModel::LLIMSession::GROUP_SESSION);
 +    std::string title = mIsGroupMsg ? im_session->mName : p.from;
 +    mAvatarName->setValue(title);
 +
 +    //Handle IRC styled /me messages.
 +    std::string prefix = p.message.substr(0, 4);
 +    if (prefix == "/me " || prefix == "/me'")
 +    {
 +        //style_params.font.style = "UNDERLINE";
 +        mMessage->clear();
 +
 +        style_params.font.style ="ITALIC";
 +        mMessage->appendText(p.from, false, style_params);
 +
 +        style_params.font.style = "ITALIC";
 +        mMessage->appendText(p.message.substr(3), false, style_params);
 +    }
 +    else
 +    {
 +        if (mIsGroupMsg)
 +        {
 +            LLAvatarName avatar_name;
 +            LLAvatarNameCache::get(p.avatar_id, &avatar_name);
 +            p.message = "[From " + avatar_name.getDisplayName() + "]\n" + p.message;
 +        }
 +        style_params.font.style =  "NORMAL";
 +        mMessage->setText(p.message, style_params);
 +    }
 +
 +    mTime->setValue(p.time);
 +    mSessionID = p.session_id;
 +    mAvatarID = p.avatar_id;
 +    mNotification = p.notification;
 +
 +
 +
 +    initIcon();
 +
 +    S32 maxLinesCount;
 +    std::istringstream ss( getString("message_max_lines_count") );
 +    if (!(ss >> maxLinesCount))
 +    {
 +        maxLinesCount = DEFAULT_MESSAGE_MAX_LINE_COUNT;
 +    }
 +    snapToMessageHeight(mMessage, maxLinesCount);
 +}
 +
 +//--------------------------------------------------------------------------
 +LLToastIMPanel::~LLToastIMPanel()
 +{
 +}
 +
 +//virtual
 +bool LLToastIMPanel::handleMouseUp(S32 x, S32 y, MASK mask)
 +{
 +    if (!LLPanel::handleMouseUp(x, y, mask))
 +    {
 +        mNotification->respond(mNotification->getResponseTemplate());
 +    }
 +
 +    return true;
 +}
 +
 +//virtual
 +bool LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask)
 +{
 +    // It's not our direct child, so parentPointInView() doesn't work.
 +    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::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);
 +    LLCoordGL pos(icon_x, sticky_rect.mTop);
 +
 +    LLToolTip::Params params;
 +    params.background_visible(false);
 +    if(!mIsGroupMsg)
 +    {
 +    params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_avatar", LLSD().with("avatar_id", mAvatarID), false));
 +    }
 +    else
 +    {
 +        params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_group", LLSD().with("group_id", mSessionID), false));
 +    }
 +    params.delay_time(0.0f);        // spawn instantly on hover
 +    params.image(LLUI::getUIImage("Info_Small"));
 +    params.message("");
 +    params.padding(0);
 +    params.pos(pos);
 +    params.sticky_rect(sticky_rect);
 +
 +    LLToolTipMgr::getInstance()->show(params);
 +}
 +
 +void LLToastIMPanel::spawnGroupIconToolTip()
 +{
 +    // 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))
 +    {
 +        LL_WARNS() << "Error getting group data" << LL_ENDL;
 +    }
 +
 +    LLInspector::Params params;
 +    params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
 +    params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_group", LLSD().with("group_id", mSessionID), false));
 +    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);
 +}
 +
 +void LLToastIMPanel::initIcon()
 +{
 +    mAvatarIcon->setVisible(false);
 +    mGroupIcon->setVisible(false);
 +    mAdhocIcon->setVisible(false);
 +
 +    if(mAvatarName->getValue().asString() == SYSTEM_FROM)
 +    {
 +        // "sys_msg_icon" was disabled by Erica in the changeset: 5109 (85181bc92cbe)
 +        // and "dummy widget" warnings appeared in log.
 +        // It does not make sense to have such image with empty name. Removed for EXT-5057.
 +    }
 +    else
 +    {
 +        LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID);
 +        if(!im_session)
 +        {
 +            LL_WARNS() << "Invalid IM session" << LL_ENDL;
 +            return;
 +        }
 +
 +        switch(im_session->mSessionType)
 +        {
 +        case LLIMModel::LLIMSession::P2P_SESSION:
 +            mAvatarIcon->setVisible(true);
 +            mAvatarIcon->setValue(mAvatarID);
 +            break;
 +        case LLIMModel::LLIMSession::GROUP_SESSION:
 +            mGroupIcon->setVisible(true);
 +            mGroupIcon->setValue(mSessionID);
 +            break;
 +        case LLIMModel::LLIMSession::ADHOC_SESSION:
 +            mAdhocIcon->setVisible(true);
 +            mAdhocIcon->setValue(im_session->mOtherParticipantID);
 +            mAdhocIcon->setToolTip(im_session->mName);
 +            break;
 +        default:
 +            LL_WARNS() << "Unknown IM session type" << LL_ENDL;
 +            break;
 +        }
 +    }
 +}
 +
 +// EOF
  | 
