summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llavatarlistitem.cpp13
-rw-r--r--indra/newview/llavatarlistitem.h2
-rw-r--r--indra/newview/llcallingcard.cpp4
-rw-r--r--indra/newview/llchiclet.cpp34
-rw-r--r--indra/newview/llchiclet.h7
-rw-r--r--indra/newview/llgrouplist.cpp2
-rw-r--r--indra/newview/llimpanel.cpp62
-rw-r--r--indra/newview/llimview.cpp125
-rw-r--r--indra/newview/llimview.h24
-rw-r--r--indra/newview/llinspectavatar.cpp3
-rw-r--r--indra/newview/llmutelist.cpp2
-rw-r--r--indra/newview/llnearbychatbar.cpp2
-rw-r--r--indra/newview/llpanelavatar.cpp3
-rw-r--r--indra/newview/llpanelgroupgeneral.cpp11
-rw-r--r--indra/newview/skins/default/xui/en/panel_avatar_list_item.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_notify.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml5
18 files changed, 210 insertions, 119 deletions
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 51545bcc07..4179d7a58d 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -33,6 +33,7 @@
#include "llviewerprecompiledheaders.h"
+#include "llavataractions.h"
#include "llavatarlistitem.h"
#include "llfloaterreg.h"
@@ -49,6 +50,7 @@ LLAvatarListItem::LLAvatarListItem()
mStatus(NULL),
mSpeakingIndicator(NULL),
mInfoBtn(NULL),
+ mProfileBtn(NULL),
mContextMenu(NULL),
mAvatarId(LLUUID::null)
{
@@ -63,10 +65,14 @@ BOOL LLAvatarListItem::postBuild()
mSpeakingIndicator = getChild<LLOutputMonitorCtrl>("speaking_indicator");
mInfoBtn = getChild<LLButton>("info_btn");
+ mProfileBtn = getChild<LLButton>("profile_btn");
mInfoBtn->setVisible(false);
mInfoBtn->setClickedCallback(boost::bind(&LLAvatarListItem::onInfoBtnClick, this));
+ mProfileBtn->setVisible(false);
+ mProfileBtn->setClickedCallback(boost::bind(&LLAvatarListItem::onProfileBtnClick, this));
+
/*
if(!p.buttons.profile)
{
@@ -104,6 +110,7 @@ void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask)
{
childSetVisible("hovered_icon", true);
mInfoBtn->setVisible(true);
+ mProfileBtn->setVisible(true);
LLPanel::onMouseEnter(x, y, mask);
}
@@ -112,6 +119,7 @@ void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask)
{
childSetVisible("hovered_icon", false);
mInfoBtn->setVisible(false);
+ mProfileBtn->setVisible(false);
LLPanel::onMouseLeave(x, y, mask);
}
@@ -171,6 +179,11 @@ void LLAvatarListItem::onInfoBtnClick()
*/
}
+void LLAvatarListItem::onProfileBtnClick()
+{
+ LLAvatarActions::showProfile(mAvatarId);
+}
+
void LLAvatarListItem::showStatus(bool show_status)
{
// *HACK: dirty hack until we can determine correct avatar status (EXT-1076).
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index bde9250e4a..871441b2d3 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -66,6 +66,7 @@ public:
const std::string getAvatarName() const;
void onInfoBtnClick();
+ void onProfileBtnClick();
void showSpeakingIndicator(bool show) { mSpeakingIndicator->setVisible(show); }
void showInfoBtn(bool show_info_btn) {mInfoBtn->setVisible(show_info_btn); }
@@ -82,6 +83,7 @@ private:
LLOutputMonitorCtrl* mSpeakingIndicator;
LLButton* mInfoBtn;
+ LLButton* mProfileBtn;
ContextMenu* mContextMenu;
LLUUID mAvatarId;
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index e3440ee779..2b7bd83ca3 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -682,7 +682,11 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
{
std::string notifyMsg = notification->getMessage();
if (!notifyMsg.empty())
+ {
floater->addHistoryLine(notifyMsg,LLUIColorTable::instance().getColor("SystemChatColor"));
+
+ LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, notifyMsg);
+ }
}
}
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 23664fa6d6..340b0fa22c 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -763,15 +763,14 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index)
if(mScrollArea->addChild(chiclet))
{
S32 offset = 0;
- // Do not scroll chiclets if chiclets are scrolled right and new
- // chiclet is added to the beginning of the list
- if(canScrollLeft())
+
+ // if index == 0 and chickelt list isn't empty insert chiclet before first in the list
+ // without scrolling, so other visible chicklets aren't change screen position
+ if (0 == index && !mChicletList.empty())
{
- offset = - (chiclet->getRequiredRect().getWidth() + getChicletPadding());
- if(0 == index)
- {
- offset += getChiclet(0)->getRect().mLeft;
- }
+ offset = getChiclet(0)->getRect().mLeft
+ - (chiclet->getRequiredRect().getWidth()
+ + getChicletPadding());
}
mChicletList.insert(mChicletList.begin() + index, chiclet);
@@ -1128,6 +1127,25 @@ BOOL LLChicletPanel::handleScrollWheel(S32 x, S32 y, S32 clicks)
return TRUE;
}
+bool LLChicletPanel::isAnyIMFloaterDoked()
+{
+ bool res = false;
+ for (chiclet_list_t::iterator it = mChicletList.begin(); it
+ != mChicletList.end(); it++)
+ {
+ LLIMFloater* im_floater = LLFloaterReg::findTypedInstance<LLIMFloater>(
+ "impanel", (*it)->getSessionId());
+ if (im_floater != NULL && im_floater->getVisible()
+ && !im_floater->isMinimized() && im_floater->isDocked())
+ {
+ res = true;
+ break;
+ }
+ }
+
+ return res;
+}
+
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index ef47b54333..458bc73bc4 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -752,6 +752,8 @@ protected:
S32 getScrollingOffset() { return mScrollingOffset; }
+ bool isAnyIMFloaterDoked();
+
protected:
chiclet_list_t mChicletList;
@@ -818,7 +820,10 @@ T* LLChicletPanel::createChiclet(const LLUUID& session_id /*= LLUUID::null*/, S3
return NULL;
}
- scrollToChiclet(chiclet);
+ if (!isAnyIMFloaterDoked())
+ {
+ scrollToChiclet(chiclet);
+ }
chiclet->setSessionId(session_id);
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 4caef8e000..ae869d9ac4 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -315,7 +315,7 @@ void LLGroupListItem::setActive(bool active)
// rebuild the text. This will cause problems if the text contains
// hyperlinks, as their styles will be wrong.
std::string text = mGroupNameBox->getText();
- mGroupNameBox->clear();
+ mGroupNameBox->setText(LLStringUtil::null);// *HACK: replace with clear() when it's fixed.
mGroupNameBox->appendText(text, false, style_params);
}
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index c2d515f158..0ff3bd24e9 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -1013,33 +1013,28 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& session_label,
(void *)this);
}
- if ( !mSessionInitialized )
+ //*TODO we probably need the same "awaiting message" thing in LLIMFloater
+ LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionUUID);
+ if (!im_session)
{
- if ( !LLIMModel::instance().sendStartSession(
- mSessionUUID,
- mOtherParticipantUUID,
- mSessionInitialTargetIDs,
- mDialog) )
- {
- //we don't need to need to wait for any responses
- //so we're already initialized
- mSessionInitialized = TRUE;
- mSessionStartMsgPos = 0;
- }
- else
- {
- //locally echo a little "starting session" message
- LLUIString session_start = sSessionStartString;
+ llerror("im session with id " + mSessionUUID.asString() + " does not exist!", 0);
+ return;
+ }
- session_start.setArg("[NAME]", getTitle());
- mSessionStartMsgPos =
- mHistoryEditor->getWText().length();
+ mSessionInitialized = im_session->mSessionInitialized;
+ if (!mSessionInitialized)
+ {
+ //locally echo a little "starting session" message
+ LLUIString session_start = sSessionStartString;
- addHistoryLine(
- session_start,
- LLUIColorTable::instance().getColor("SystemChatColor"),
- false);
- }
+ session_start.setArg("[NAME]", getTitle());
+ mSessionStartMsgPos =
+ mHistoryEditor->getWText().length();
+
+ addHistoryLine(
+ session_start,
+ LLUIColorTable::instance().getColor("SystemChatColor"),
+ false);
}
}
@@ -1346,25 +1341,6 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
mHistoryEditor->appendText(utf8msg, prepend_newline, LLStyle::Params().color(color));
mHistoryEditor->blockUndo();
- S32 im_log_option = gSavedPerAccountSettings.getS32("IMLogOptions");
- if (log_to_file && (im_log_option!=LOG_CHAT))
- {
- std::string histstr;
- if (gSavedPerAccountSettings.getBOOL("LogTimestamp"))
- histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + name + separator_string + utf8msg;
- else
- histstr = name + separator_string + utf8msg;
-
- if(im_log_option==LOG_BOTH_TOGETHER)
- {
- LLLogChat::saveHistory(std::string("chat"),histstr);
- }
- else
- {
- LLLogChat::saveHistory(getTitle(),histstr);
- }
- }
-
if (!isInVisibleChain())
{
mNumUnreadMessages++;
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 6b947b2503..2ecd3eb448 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -86,6 +86,7 @@ LLIMMgr* gIMMgr = NULL;
//
// *FIXME: make these all either UIStrings or Strings
+const static std::string IM_SEPARATOR(": ");
std::map<LLUUID, LLIMModel::LLIMSession*> LLIMModel::sSessionsMap;
@@ -119,14 +120,16 @@ LLIMModel::LLIMModel()
}
-LLIMModel::LLIMSession::LLIMSession( const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id )
+LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids)
: mSessionID(session_id),
mName(name),
mType(type),
mNumUnread(0),
mOtherParticipantID(other_participant_id),
+ mInitialTargetIDs(ids),
mVoiceChannel(NULL),
- mSpeakers(NULL)
+ mSpeakers(NULL),
+ mSessionInitialized(false)
{
if (IM_NOTHING_SPECIAL == type || IM_SESSION_P2P_INVITE == type)
{
@@ -140,6 +143,14 @@ LLIMModel::LLIMSession::LLIMSession( const LLUUID& session_id, const std::string
// All participants will be added to the list of people we've recently interacted with.
mSpeakers->addListener(&LLRecentPeople::instance(), "add");
+
+ if (!LLIMModel::getInstance()->sendStartSession(mSessionID, mOtherParticipantID,
+ mInitialTargetIDs, mType))
+ {
+ //we don't need to wait for any responses
+ //so we're already initialized
+ mSessionInitialized = true;
+ }
}
LLIMModel::LLIMSession::~LLIMSession()
@@ -186,11 +197,18 @@ void LLIMModel::updateSessionID(const LLUUID& old_session_id, const LLUUID& new_
session->mSessionID = new_session_id;
session->mVoiceChannel->updateSessionID(new_session_id);
- //*TODO set session initialized flag here? (IB)
+ session->mSessionInitialized = true;
sSessionsMap.erase(old_session_id);
sSessionsMap[new_session_id] = session;
}
+
+ //*TODO remove this "floater" stuff when Communicate Floater is gone
+ LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(old_session_id);
+ if (floater)
+ {
+ floater->sessionInitReplyReceived(new_session_id);
+ }
}
void LLIMModel::testMessages()
@@ -219,7 +237,7 @@ void LLIMModel::testMessages()
}
-bool LLIMModel::newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id)
+bool LLIMModel::newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id, const std::vector<LLUUID>& ids)
{
if (is_in_map(sSessionsMap, session_id))
{
@@ -227,7 +245,7 @@ bool LLIMModel::newSession(LLUUID session_id, std::string name, EInstantMessage
return false;
}
- LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id);
+ LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids);
sSessionsMap[session_id] = session;
LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
@@ -303,9 +321,34 @@ bool LLIMModel::addToHistory(LLUUID session_id, std::string from, std::string ut
}
-
-bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id, std::string utf8_text) {
+//*TODO rewrite chat history persistence using LLSD serialization (IB)
+bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, const std::string& utf8_text)
+{
+ S32 im_log_option = gSavedPerAccountSettings.getS32("IMLogOptions");
+ if (im_log_option != LOG_CHAT)
+ {
+ std::string histstr;
+ if (gSavedPerAccountSettings.getBOOL("LogTimestamp"))
+ histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + from + IM_SEPARATOR + utf8_text;
+ else
+ histstr = from + IM_SEPARATOR + utf8_text;
+
+ if(im_log_option == LOG_BOTH_TOGETHER)
+ {
+ LLLogChat::saveHistory(std::string("chat"), histstr);
+ return true;
+ }
+ else
+ {
+ LLLogChat::saveHistory(LLIMModel::getInstance()->getName(session_id), histstr);
+ return true;
+ }
+ }
+ return false;
+}
+//*TODO add const qualifier and pass by references (IB)
+bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id, std::string utf8_text, bool log2file /* = true */) {
LLIMSession* session = findIMSession(session_id);
if (!session)
@@ -315,10 +358,8 @@ bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id,
}
addToHistory(session_id, from, utf8_text);
+ if (log2file) logToFile(session_id, from, utf8_text);
- std::string agent_name;
- LLAgentUI::buildFullname(agent_name);
-
session->mNumUnread++;
// notify listeners
@@ -527,7 +568,7 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
// Do we have to replace the /me's here?
std::string from;
LLAgentUI::buildFullname(from);
- LLIMModel::instance().addToHistory(im_session_id, from, utf8_text);
+ LLIMModel::getInstance()->addMessage(im_session_id, from, gAgentID, utf8_text);
//local echo for the legacy communicate panel
std::string history_echo;
@@ -1475,9 +1516,12 @@ LLUUID LLIMMgr::addSession(
if (!LLIMModel::getInstance()->findIMSession(session_id))
{
- LLIMModel::instance().newSession(session_id, name, dialog, other_participant_id);
+ LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids);
}
+ LLIMFloater::show(session_id);
+
+ //*TODO remove this "floater" thing when Communicate Floater's gone
LLFloaterIMPanel* floater = findFloaterBySession(session_id);
if(!floater)
{
@@ -1490,19 +1534,17 @@ LLUUID LLIMMgr::addSession(
dialog,
TRUE,
ids);
+ }
- if ( !floater ) return LLUUID::null;
-
- noteOfflineUsers(floater, ids);
+ noteOfflineUsers(session_id, floater, ids);
- // Only warn for regular IMs - not group IMs
- if( dialog == IM_NOTHING_SPECIAL )
- {
- noteMutedUsers(floater, ids);
- }
+ // Only warn for regular IMs - not group IMs
+ if( dialog == IM_NOTHING_SPECIAL )
+ {
+ noteMutedUsers(session_id, floater, ids);
}
- floater->setInputFocus(TRUE);
- LLIMFloater::show(session_id);
+
+
return session_id;
}
@@ -1868,18 +1910,25 @@ LLFloaterIMPanel* LLIMMgr::createFloater(
}
void LLIMMgr::noteOfflineUsers(
+ const LLUUID& session_id,
LLFloaterIMPanel* floater,
const LLDynamicArray<LLUUID>& ids)
{
S32 count = ids.count();
if(count == 0)
{
- floater->addHistoryLine(LLTrans::getString("only_user_message"), LLUIColorTable::instance().getColor("SystemChatColor"));
+ const std::string& only_user = LLTrans::getString("only_user_message");
+ if (floater)
+ {
+ floater->addHistoryLine(only_user, LLUIColorTable::instance().getColor("SystemChatColor"));
+ }
+ LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, only_user);
}
else
{
const LLRelationship* info = NULL;
LLAvatarTracker& at = LLAvatarTracker::instance();
+ LLIMModel* im_model = LLIMModel::getInstance();
for(S32 i = 0; i < count; ++i)
{
info = at.getBuddyInfo(ids.get(i));
@@ -1890,13 +1939,19 @@ void LLIMMgr::noteOfflineUsers(
LLUIString offline = LLTrans::getString("offline_message");
offline.setArg("[FIRST]", first);
offline.setArg("[LAST]", last);
- floater->addHistoryLine(offline, LLUIColorTable::instance().getColor("SystemChatColor"));
+
+ if (floater)
+ {
+ floater->addHistoryLine(offline, LLUIColorTable::instance().getColor("SystemChatColor"));
+ }
+
+ im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, offline);
}
}
}
}
-void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,
+void LLIMMgr::noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* floater,
const LLDynamicArray<LLUUID>& ids)
{
// Don't do this if we don't have a mute list.
@@ -1909,12 +1964,18 @@ void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,
S32 count = ids.count();
if(count > 0)
{
+ LLIMModel* im_model = LLIMModel::getInstance();
+
for(S32 i = 0; i < count; ++i)
{
if( ml->isMuted(ids.get(i)) )
{
LLUIString muted = LLTrans::getString("muted_message");
+
+ //*TODO remove this "floater" thing when Communicate Floater's gone
floater->addHistoryLine(muted);
+
+ im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, muted);
break;
}
}
@@ -1941,17 +2002,6 @@ void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing)
}
}
-void LLIMMgr::updateFloaterSessionID(
- const LLUUID& old_session_id,
- const LLUUID& new_session_id)
-{
- LLFloaterIMPanel* floater = findFloaterBySession(old_session_id);
- if (floater)
- {
- floater->sessionInitReplyReceived(new_session_id);
- }
-}
-
class LLViewerChatterBoxSessionStartReply : public LLHTTPNode
{
public:
@@ -1980,9 +2030,6 @@ public:
if ( success )
{
session_id = body["session_id"].asUUID();
- gIMMgr->updateFloaterSessionID(
- temp_session_id,
- session_id);
LLIMModel::getInstance()->updateSessionID(temp_session_id, session_id);
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 9a94d01bb2..df28c16bb1 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -53,18 +53,21 @@ public:
struct LLIMSession
{
LLIMSession(const LLUUID& session_id, const std::string& name,
- const EInstantMessage& type, const LLUUID& other_participant_id);
+ const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids);
virtual ~LLIMSession();
LLUUID mSessionID;
std::string mName;
EInstantMessage mType;
LLUUID mOtherParticipantID;
+ std::vector<LLUUID> mInitialTargetIDs;
S32 mNumUnread;
std::list<LLSD> mMsgs;
LLVoiceChannel* mVoiceChannel;
LLIMSpeakerMgr* mSpeakers;
+
+ bool mSessionInitialized;
};
@@ -88,11 +91,16 @@ public:
boost::signals2::connection addChangedCallback( boost::function<void (const LLSD& data)> cb );
- bool newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id);
+ bool newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id,
+ const std::vector<LLUUID>& ids = std::vector<LLUUID>());
bool clearSession(LLUUID session_id);
std::list<LLSD> getMessages(LLUUID session_id, int start_index = 0);
- bool addMessage(LLUUID session_id, std::string from, LLUUID other_participant_id, std::string utf8_text);
+
+ bool addMessage(LLUUID session_id, std::string from, LLUUID other_participant_id, std::string utf8_text, bool log2file = true);
bool addToHistory(LLUUID session_id, std::string from, std::string utf8_text);
+
+ bool logToFile(const LLUUID& session_id, const std::string& from, const std::string& utf8_text);
+
//used to get the name of the session, for use as the title
//currently just the other avatar name
const std::string& getName(const LLUUID& session_id) const;
@@ -223,12 +231,6 @@ public:
const std::string& session_handle = LLStringUtil::null,
const std::string& session_uri = LLStringUtil::null);
- //Updates a given session's session IDs. Does not open,
- //create or do anything new. If the old session doesn't
- //exist, then nothing happens.
- void updateFloaterSessionID(const LLUUID& old_session_id,
- const LLUUID& new_session_id);
-
void processIMTypingStart(const LLIMInfo* im_info);
void processIMTypingStop(const LLIMInfo* im_info);
@@ -293,8 +295,8 @@ private:
// prints a simple message if they are not online. Used to help
// reduce 'hello' messages to the linden employees unlucky enough
// to have their calling card in the default inventory.
- void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
- void noteMutedUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
+ void noteOfflineUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
+ void noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
void processIMTypingCore(const LLIMInfo* im_info, BOOL typing);
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 261d0836a0..44dd11dd86 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -39,7 +39,6 @@
#include "llavataractions.h"
#include "llavatarpropertiesprocessor.h"
#include "llcallingcard.h"
-#include "lldateutil.h" // ageFromDate()
#include "llfloaterreporter.h"
#include "llfloaterworldmap.h"
#include "llmutelist.h"
@@ -359,7 +358,7 @@ void LLInspectAvatar::processAvatarData(LLAvatarData* data)
{
LLStringUtil::format_map_t args;
args["[BORN_ON]"] = data->born_on;
- args["[AGE]"] = LLDateUtil::ageFromDate(data->born_on);
+ args["[AGE]"] = data->born_on;
args["[SL_PROFILE]"] = data->about_text;
args["[RW_PROFILE"] = data->fl_about_text;
args["[ACCTTYPE]"] = LLAvatarPropertiesProcessor::accountType(data);
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index b47d6f4214..ff7f08bf97 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -530,6 +530,8 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n
{
timp->addHistoryLine(message);
}
+
+ LLIMModel::getInstance()->addMessage(agent_id, SYSTEM_FROM, LLUUID::null, message);
}
LLChat auto_chat(message);
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index c2e1019f43..4f3bca50ff 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -192,7 +192,7 @@ BOOL LLNearbyChatBar::postBuild()
mChatBox->setKeystrokeCallback(&onChatBoxKeystroke, this);
mChatBox->setFocusLostCallback(boost::bind(&onChatBoxFocusLost, _1, this));
- mChatBox->setIgnoreArrowKeys(TRUE);
+ mChatBox->setIgnoreArrowKeys( FALSE );
mChatBox->setCommitOnFocusLost( FALSE );
mChatBox->setRevertOnEsc( FALSE );
mChatBox->setIgnoreTab(TRUE);
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index c543f85f22..3a3ea1fc3c 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -38,7 +38,6 @@
#include "llavatarconstants.h" // AVATAR_ONLINE
#include "llcallingcard.h"
#include "llcombobox.h"
-#include "lldateutil.h"
#include "llimview.h"
#include "lltexteditor.h"
#include "lltexturectrl.h"
@@ -448,7 +447,7 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g
void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)
{
- childSetValue("register_date", LLDateUtil::ageFromDate(avatar_data->born_on));
+ childSetValue("register_date", avatar_data->born_on );
childSetValue("sl_description_edit", avatar_data->about_text);
childSetValue("fl_description_edit",avatar_data->fl_about_text);
childSetValue("2nd_life_pic", avatar_data->image_id);
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index a6b67d668a..1c2875bf46 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -476,8 +476,15 @@ bool LLPanelGroupGeneral::confirmMatureApply(const LLSD& notification, const LLS
// If we got here it means they set a valid value
std::string mesg = "";
- apply(mesg);
- return false;
+ bool ret = apply(mesg);
+ if ( !mesg.empty() )
+ {
+ LLSD args;
+ args["MESSAGE"] = mesg;
+ LLNotifications::instance().add("GenericAlert", args);
+ }
+
+ return ret;
}
// static
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index c3ae2d953a..f7f08b9b6a 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -47,7 +47,7 @@
top="4"
use_ellipses="true"
value="Unknown"
- width="180" />
+ width="162" />
<text
follows="right"
font="SansSerif"
@@ -85,4 +85,19 @@
picture_style="true"
top="2"
width="18" />
+ <button
+ follows="right"
+ font="SansSerifBigBold"
+ height="18"
+ image_disabled="profile_chevron_btn.tga"
+ image_disabled_selected="profile_chevron_btn.tga"
+ image_hover_selected="profile_chevron_btn_active.tga"
+ image_selected="profile_chevron_btn_active.tga"
+ image_unselected="profile_chevron_btn.tga"
+ layout="topleft"
+ left_pad="2"
+ name="profile_btn"
+ picture_style="true"
+ top="2"
+ width="18" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index b13058f40a..b728c23bc5 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -14,7 +14,8 @@
width="255">
<string
name="CaptionTextAcctInfo">
- [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ [ACCTTYPE]
+[PAYMENTINFO] [AGEVERIFICATION]
</string>
<string
name="AcctTypeResident"
@@ -294,7 +295,7 @@
width="100"/>
<text
follows="left|top|right"
- height="15"
+ height="20"
layout="topleft"
left="10"
name="acc_status_text"
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index deea0a44ab..bd98996ae1 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -7,13 +7,13 @@
4
</string>
<panel follows="top" background_visible="true" bevel_style="in" bg_alpha_color="black"
- height="50" label="header" layout="topleft" left="0" name="header"
+ height="30" label="header" layout="topleft" left="0" name="header"
top="0" width="350">
- <icon follows="left|top|right|bottom" height="40" width="40" layout="topleft"
+ <icon follows="left|top|right|bottom" height="20" width="20" layout="topleft"
top="5" left="5" mouse_opaque="true" name="group_icon"/>
<text type="string" length="1" follows="left|top|right|bottom"
- font="SansSerifBigBold" height="20" layout="topleft" left="60" name="title"
- text_color="GroupNotifyTextColor" top="20" width="275" use_ellipses="true">
+ font="SansSerifBigBold" height="20" layout="topleft" left_pad="10" name="title"
+ text_color="GroupNotifyTextColor" top="5" width="275" use_ellipses="true">
Sender Name / Group Name
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 78aff64216..bdd1d80663 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -10,7 +10,8 @@
width="313">
<string
name="CaptionTextAcctInfo">
- [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ [ACCTTYPE]
+[PAYMENTINFO] [AGEVERIFICATION]
</string>
<string
name="payment_update_link_url">
@@ -198,7 +199,7 @@
width="100"/> -->
<text
follows="left|top"
- height="15"
+ height="20"
layout="topleft"
left="10"
name="acc_status_text"