diff options
author | Steven Bennetts <steve@lindenlab.com> | 2009-10-14 20:37:03 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2009-10-14 20:37:03 +0000 |
commit | b5ffeaff1ab53008a8f1ee72cd1f398bd1ff21c2 (patch) | |
tree | e12431a5c6945b2ece16765bcdb04c241c4d9a96 /indra | |
parent | 7475ec05fc81e358a6979f3e9d7050ab91511c57 (diff) |
merge -r 2014-2032 https://svn.aws.productengine.com/secondlife/pe/stable-2 -> viewer-2.0.0-3
* Bugs: EXT-1005 EXT-1488 EXT-320 EXT-1236 EXT-1236 EXT-1002 EXT-1030
* New Dev: EXT-1293 EXT-1416
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llavatarlistitem.cpp | 13 | ||||
-rw-r--r-- | indra/newview/llavatarlistitem.h | 2 | ||||
-rw-r--r-- | indra/newview/llcallingcard.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llchiclet.cpp | 34 | ||||
-rw-r--r-- | indra/newview/llchiclet.h | 7 | ||||
-rw-r--r-- | indra/newview/llgrouplist.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llimpanel.cpp | 62 | ||||
-rw-r--r-- | indra/newview/llimview.cpp | 125 | ||||
-rw-r--r-- | indra/newview/llimview.h | 24 | ||||
-rw-r--r-- | indra/newview/llinspectavatar.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llmutelist.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llnearbychatbar.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llpanelavatar.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llpanelgroupgeneral.cpp | 11 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_avatar_list_item.xml | 17 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_edit_profile.xml | 5 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_group_notify.xml | 8 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_profile.xml | 5 |
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" |