diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/lltextbase.cpp | 2 | ||||
| -rw-r--r-- | indra/llui/llurlentry.cpp | 49 | ||||
| -rw-r--r-- | indra/llui/llurlentry.h | 14 | ||||
| -rw-r--r-- | indra/llui/llurlregistry.cpp | 9 | ||||
| -rw-r--r-- | indra/llui/llurlregistry.h | 3 | ||||
| -rw-r--r-- | indra/newview/llviewerchat.cpp | 8 | 
6 files changed, 62 insertions, 23 deletions
| diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 5f62763683..677dc63b25 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2335,7 +2335,7 @@ void LLTextBase::appendTextImpl(const std::string& new_text, const LLStyle::Para          LLUrlMatch match;          std::string text = new_text;          while (LLUrlRegistry::instance().findUrl(text, match, -                boost::bind(&LLTextBase::replaceUrl, this, _1, _2, _3), isContentTrusted() || mAlwaysShowIcons)) +                boost::bind(&LLTextBase::replaceUrl, this, _1, _2, _3), isContentTrusted() || mAlwaysShowIcons, force_slurl))          {              start = match.getStart();              end = match.getEnd()+1; diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 9657dc9527..a2062d077e 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -580,7 +580,7 @@ LLUrlEntrySimpleSecondlifeURL::LLUrlEntrySimpleSecondlifeURL()  //  LLUrlEntryAgent::LLUrlEntryAgent()  { -    mPattern = boost::regex(APP_HEADER_REGEX "/agent/[\\da-f-]+/(mention|(?!mention)\\w+)", +    mPattern = boost::regex(APP_HEADER_REGEX "/agent/[\\da-f-]+/\\w+",                              boost::regex::perl|boost::regex::icase);      mMenuName = "menu_url_agent.xml";      mIcon = "Generic_Person"; @@ -673,19 +673,9 @@ LLUrlMatch::EUnderlineLink LLUrlEntryAgent::getUnderline(const std::string& stri      {          return LLUrlMatch::EUnderlineLink::UNDERLINE_ON_HOVER;      } -    else if (LLStringUtil::endsWith(url, "/mention")) -    { -        return LLUrlMatch::EUnderlineLink::UNDERLINE_NEVER; -    }      return LLUrlMatch::EUnderlineLink::UNDERLINE_ALWAYS;  } -bool LLUrlEntryAgent::getSkipProfileIcon(const std::string& string) const -{ -    std::string url = getUrl(string); -    return (LLStringUtil::endsWith(url, "/mention")) ? true : false; -} -  std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)  {      if (!gCacheName) @@ -730,14 +720,7 @@ LLStyle::Params LLUrlEntryAgent::getStyle(const std::string &url) const      LLStyle::Params style_params = LLUrlEntryBase::getStyle(url);      style_params.color = LLUIColorTable::instance().getColor("HTMLLinkColor");      style_params.readonly_color = LLUIColorTable::instance().getColor("HTMLLinkColor"); -    if (LLStringUtil::endsWith(url, "/mention")) -    { -        style_params.font.style = "NORMAL"; -        style_params.draw_highlight_bg = true; -        LLUUID agent_id(getIDStringFromUrl(url)); -        style_params.highlight_bg_color = LLUIColorTable::instance().getColor((agent_id == sAgentID) ? "ChatSelfMentionHighlight" : "ChatMentionHighlight"); -    }      return style_params;  } @@ -784,7 +767,35 @@ std::string LLUrlEntryAgent::getIcon(const std::string &url)  {      // *NOTE: Could look up a badge here by calling getIDStringFromUrl()      // and looking up the badge for the agent. -    return LLStringUtil::endsWith(url, "/mention") ? std::string() : mIcon; +    return mIcon; +} + +/// +/// LLUrlEntryAgentMention Describes a chat mention Url, e.g., +/// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/mention +/// +LLUrlEntryAgentMention::LLUrlEntryAgentMention() +{ +    mPattern  = boost::regex(APP_HEADER_REGEX "/agent/[\\da-f-]+/mention", boost::regex::perl | boost::regex::icase); +    mMenuName = "menu_url_agent.xml"; +    mIcon = std::string(); +} + +LLUrlMatch::EUnderlineLink LLUrlEntryAgentMention::getUnderline(const std::string& string) const +{ +    return LLUrlMatch::EUnderlineLink::UNDERLINE_NEVER; +} + +LLStyle::Params LLUrlEntryAgentMention::getStyle(const std::string& url) const +{ +    LLStyle::Params style_params = LLUrlEntryAgent::getStyle(url); +    style_params.font.style = "NORMAL"; +    style_params.draw_highlight_bg = true; + +    LLUUID agent_id(getIDStringFromUrl(url)); +    style_params.highlight_bg_color = LLUIColorTable::instance().getColor((agent_id == sAgentID) ? "ChatSelfMentionHighlight" : "ChatMentionHighlight"); + +    return style_params;  }  // diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index af5b8f5d83..df3932b2a0 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -234,7 +234,6 @@ public:      /*virtual*/ LLUUID  getID(const std::string &string) const;      LLUrlMatch::EUnderlineLink getUnderline(const std::string& string) const; -    bool getSkipProfileIcon(const std::string& string) const;  protected:      /*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon); @@ -246,6 +245,19 @@ private:  };  /// +/// LLUrlEntryAgentMention Describes a chat mention Url, e.g., +/// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/mention +class LLUrlEntryAgentMention : public LLUrlEntryAgent +{ +public: +    LLUrlEntryAgentMention(); + +    LLStyle::Params getStyle(const std::string& url) const; +    LLUrlMatch::EUnderlineLink getUnderline(const std::string& string) const; +    bool getSkipProfileIcon(const std::string& string) const { return true; }; +}; + +///  /// LLUrlEntryAgentName Describes a Second Life agent name Url, e.g.,  /// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username)  /// that displays various forms of user name diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 6e6e3be9b4..02d88c83fb 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -62,6 +62,8 @@ LLUrlRegistry::LLUrlRegistry()      registerUrl(new LLUrlEntryAgentUserName());      // LLUrlEntryAgent*Name must appear before LLUrlEntryAgent since      // LLUrlEntryAgent is a less specific (catchall for agent urls) +    mUrlEntryAgentMention = new LLUrlEntryAgentMention(); +    registerUrl(mUrlEntryAgentMention);      registerUrl(new LLUrlEntryAgent());      registerUrl(new LLUrlEntryChat());      registerUrl(new LLUrlEntryGroup()); @@ -155,7 +157,7 @@ static bool stringHasUrl(const std::string &text)              text.find("@") != std::string::npos);  } -bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LLUrlLabelCallback &cb, bool is_content_trusted) +bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LLUrlLabelCallback &cb, bool is_content_trusted, bool skip_non_mentions)  {      // avoid costly regexes if there is clearly no URL in the text      if (! stringHasUrl(text)) @@ -176,6 +178,11 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL              continue;          } +        if (skip_non_mentions && (mUrlEntryAgentMention != *it)) +        { +            continue; +        } +          LLUrlEntryBase *url_entry = *it;          U32 start = 0, end = 0; diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h index 64cfec3960..35c6c0d84f 100644 --- a/indra/llui/llurlregistry.h +++ b/indra/llui/llurlregistry.h @@ -76,7 +76,7 @@ public:      /// your callback is invoked if the matched Url's label changes in the future      bool findUrl(const std::string &text, LLUrlMatch &match,                   const LLUrlLabelCallback &cb = &LLUrlRegistryNullCallback, -                 bool is_content_trusted = false); +                 bool is_content_trusted = false, bool skip_non_mentions = false);      /// a slightly less efficient version of findUrl for wide strings      bool findUrl(const LLWString &text, LLUrlMatch &match, @@ -102,6 +102,7 @@ private:      LLUrlEntryBase* mUrlEntrySLLabel;      LLUrlEntryBase* mUrlEntryNoLink;      LLUrlEntryBase* mUrlEntryKeybinding; +    LLUrlEntryBase* mUrlEntryAgentMention;  };  #endif diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index 8b01c4ef88..2ca2c5c07d 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -36,6 +36,7 @@  #include "llviewerregion.h"  #include "llworld.h"  #include "llinstantmessage.h" //SYSTEM_FROM +#include "llurlregistry.h"  // LLViewerChat  LLViewerChat::font_change_signal_t LLViewerChat::sChatFontChangedSignal; @@ -222,6 +223,13 @@ void LLViewerChat::formatChatMsg(const LLChat& chat, std::string& formated_msg)  {      std::string tmpmsg = chat.mText; +    // show @name instead of slurl for chat mentions +    LLUrlMatch match; +    while (LLUrlRegistry::instance().findUrl(tmpmsg, match, LLUrlRegistryNullCallback, false, true)) +    { +        tmpmsg.replace(match.getStart(), match.getEnd() - match.getStart() + 1, match.getLabel()); +    } +      if(chat.mChatStyle == CHAT_STYLE_IRC)      {          formated_msg = chat.mFromName + tmpmsg.substr(3); | 
