/indra/newview/llviewerchat.cpp
https://bitbucket.org/lindenlab/viewer-beta/ · C++ · 284 lines · 215 code · 30 blank · 39 comment · 39 complexity · 100ecddb9e83c6d4442e995f4bf335fa MD5 · raw file
- /**
- * @file llviewerchat.cpp
- * @brief Builds menus out of items.
- *
- * $LicenseInfo:firstyear=2002&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 "llviewerchat.h"
- // newview includes
- #include "llagent.h" // gAgent
- #include "llslurl.h"
- #include "lluicolor.h"
- #include "lluicolortable.h"
- #include "llviewercontrol.h" // gSavedSettings
- #include "llviewerregion.h"
- #include "llworld.h"
- #include "llinstantmessage.h" //SYSTEM_FROM
- // LLViewerChat
- LLViewerChat::font_change_signal_t LLViewerChat::sChatFontChangedSignal;
- //static
- void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)
- {
- if(chat.mMuted)
- {
- r_color= LLUIColorTable::instance().getColor("LtGray");
- }
- else
- {
- switch(chat.mSourceType)
- {
- case CHAT_SOURCE_SYSTEM:
- r_color = LLUIColorTable::instance().getColor("SystemChatColor");
- break;
- case CHAT_SOURCE_AGENT:
- if (chat.mFromID.isNull() || SYSTEM_FROM == chat.mFromName)
- {
- r_color = LLUIColorTable::instance().getColor("SystemChatColor");
- }
- else
- {
- if(gAgentID == chat.mFromID)
- {
- r_color = LLUIColorTable::instance().getColor("UserChatColor");
- }
- else
- {
- r_color = LLUIColorTable::instance().getColor("AgentChatColor");
- }
- }
- break;
- case CHAT_SOURCE_OBJECT:
- if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
- {
- r_color = LLUIColorTable::instance().getColor("ScriptErrorColor");
- }
- else if ( chat.mChatType == CHAT_TYPE_OWNER )
- {
- r_color = LLUIColorTable::instance().getColor("llOwnerSayChatColor");
- }
- else if ( chat.mChatType == CHAT_TYPE_DIRECT )
- {
- r_color = LLUIColorTable::instance().getColor("DirectChatColor");
- }
- else
- {
- r_color = LLUIColorTable::instance().getColor("ObjectChatColor");
- }
- break;
- default:
- r_color.setToWhite();
- }
-
- if (!chat.mPosAgent.isExactlyZero())
- {
- LLVector3 pos_agent = gAgent.getPositionAgent();
- F32 distance_squared = dist_vec_squared(pos_agent, chat.mPosAgent);
- F32 dist_near_chat = gAgent.getNearChatRadius();
- if (distance_squared > dist_near_chat * dist_near_chat)
- {
- // diminish far-off chat
- r_color.mV[VALPHA] = 0.8f;
- }
- }
- }
- }
- //static
- void LLViewerChat::getChatColor(const LLChat& chat, std::string& r_color_name, F32& r_color_alpha)
- {
- if(chat.mMuted)
- {
- r_color_name = "LtGray";
- }
- else
- {
- switch(chat.mSourceType)
- {
- case CHAT_SOURCE_SYSTEM:
- r_color_name = "SystemChatColor";
- break;
-
- case CHAT_SOURCE_AGENT:
- if (chat.mFromID.isNull())
- {
- r_color_name = "SystemChatColor";
- }
- else
- {
- if(gAgentID == chat.mFromID)
- {
- r_color_name = "UserChatColor";
- }
- else
- {
- r_color_name = "AgentChatColor";
- }
- }
- break;
-
- case CHAT_SOURCE_OBJECT:
- if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
- {
- r_color_name = "ScriptErrorColor";
- }
- else if ( chat.mChatType == CHAT_TYPE_OWNER )
- {
- r_color_name = "llOwnerSayChatColor";
- }
- else if ( chat.mChatType == CHAT_TYPE_DIRECT )
- {
- r_color_name = "DirectChatColor";
- }
- else
- {
- r_color_name = "ObjectChatColor";
- }
- break;
- default:
- r_color_name = "White";
- }
-
- if (!chat.mPosAgent.isExactlyZero())
- {
- LLVector3 pos_agent = gAgent.getPositionAgent();
- F32 distance_squared = dist_vec_squared(pos_agent, chat.mPosAgent);
- F32 dist_near_chat = gAgent.getNearChatRadius();
- if (distance_squared > dist_near_chat * dist_near_chat)
- {
- // diminish far-off chat
- r_color_alpha = 0.8f;
- }
- else
- {
- r_color_alpha = 1.0f;
- }
- }
- }
-
- }
- //static
- LLFontGL* LLViewerChat::getChatFont()
- {
- S32 font_size = gSavedSettings.getS32("ChatFontSize");
- LLFontGL* fontp = NULL;
- switch(font_size)
- {
- case 0:
- fontp = LLFontGL::getFontSansSerifSmall();
- break;
- default:
- case 1:
- fontp = LLFontGL::getFontSansSerif();
- break;
- case 2:
- fontp = LLFontGL::getFontSansSerifBig();
- break;
- }
-
- return fontp;
-
- }
- //static
- S32 LLViewerChat::getChatFontSize()
- {
- return gSavedSettings.getS32("ChatFontSize");
- }
- //static
- void LLViewerChat::formatChatMsg(const LLChat& chat, std::string& formated_msg)
- {
- std::string tmpmsg = chat.mText;
-
- if(chat.mChatStyle == CHAT_STYLE_IRC)
- {
- formated_msg = chat.mFromName + tmpmsg.substr(3);
- }
- else
- {
- formated_msg = tmpmsg;
- }
- }
- //static
- std::string LLViewerChat::getSenderSLURL(const LLChat& chat, const LLSD& args)
- {
- switch (chat.mSourceType)
- {
- case CHAT_SOURCE_AGENT:
- return LLSLURL("agent", chat.mFromID, "about").getSLURLString();
- case CHAT_SOURCE_OBJECT:
- return getObjectImSLURL(chat, args);
- default:
- llwarns << "Getting SLURL for an unsupported sender type: " << chat.mSourceType << llendl;
- }
- return LLStringUtil::null;
- }
- //static
- std::string LLViewerChat::getObjectImSLURL(const LLChat& chat, const LLSD& args)
- {
- std::string url = LLSLURL("objectim", chat.mFromID, "").getSLURLString();
- url += "?name=" + chat.mFromName;
- url += "&owner=" + chat.mOwnerID.asString();
- std::string slurl = args["slurl"].asString();
- if (slurl.empty())
- {
- LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
- if(region)
- {
- LLSLURL region_slurl(region->getName(), chat.mPosAgent);
- slurl = region_slurl.getLocationString();
- }
- }
- url += "&slurl=" + LLURI::escape(slurl);
- return url;
- }
- //static
- boost::signals2::connection LLViewerChat::setFontChangedCallback(const font_change_signal_t::slot_type& cb)
- {
- return sChatFontChangedSignal.connect(cb);
- }
- //static
- void LLViewerChat::signalChatFontChanged()
- {
- // Notify all observers that our font has changed
- sChatFontChangedSignal(getChatFont());
- }