summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2009-08-18 16:54:34 +0000
committerSteven Bennetts <steve@lindenlab.com>2009-08-18 16:54:34 +0000
commit0710d0da2ba0d4c0fe66b890f1598d8df7ea4917 (patch)
treecb9323d21b0316a5c2cdfa9143b7f4355c6188f1
parentac1b723fd79b63a9dab94c839d3c0acb2ddde129 (diff)
merge https://svn.aws.productengine.com/secondlife/export-from-ll/viewer-2-0@1378 https://svn.aws.productengine.com/secondlife/pe/stable-1@1386 -> viewer-2.0.0-3
EXT-357 EXT-370 EXT-385 EXT-409 EXT-472 EXT-479 EXT-513 EXT-532 EXT-541 EXT-544 EXT-546
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llchiclet.cpp100
-rw-r--r--indra/newview/llchiclet.h15
-rw-r--r--indra/newview/llfavoritesbar.cpp2
-rw-r--r--indra/newview/llimpanel.cpp6
-rw-r--r--indra/newview/llimpanel.h3
-rw-r--r--indra/newview/llpanelgroup.cpp5
-rw-r--r--indra/newview/llpanelgroupgeneral.cpp47
-rw-r--r--indra/newview/llpanelgroupgeneral.h3
-rw-r--r--indra/newview/llpanelpeople.cpp99
-rw-r--r--indra/newview/llpanelpeople.h10
-rw-r--r--indra/newview/llpanelplaceinfo.cpp23
-rw-r--r--indra/newview/llpanelplaceinfo.h6
-rw-r--r--indra/newview/llpanelplaces.cpp36
-rw-r--r--indra/newview/llpanelplaces.h3
-rw-r--r--indra/newview/llteleporthistorystorage.cpp164
-rw-r--r--indra/newview/llteleporthistorystorage.h108
-rw-r--r--indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_landmark.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml18
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml18
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml15
-rw-r--r--indra/newview/skins/default/xui/en/menu_place.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml24
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_general.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_land_money.xml15
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_notices.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml23
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml15
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml37
-rw-r--r--indra/newview/skins/default/xui/en/panel_side_tray.xml5
-rw-r--r--indra/newview/skins/default/xui/en/widgets/filter_editor.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml1
34 files changed, 657 insertions, 185 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 58d7a983a2..ffdacee22a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -361,6 +361,7 @@ set(viewer_SOURCE_FILES
llsyswellitem.cpp
llsyswellwindow.cpp
llteleporthistory.cpp
+ llteleporthistorystorage.cpp
lltexglobalcolor.cpp
lltexlayer.cpp
lltexlayerparams.cpp
@@ -810,6 +811,7 @@ set(viewer_HEADER_FILES
llsyswellwindow.h
lltable.h
llteleporthistory.h
+ llteleporthistorystorage.h
lltexglobalcolor.h
lltexlayer.h
lltexlayerparams.h
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index d98f03eccb..c844d70d89 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -45,6 +45,7 @@
#include "lltextbox.h"
#include "llvoiceclient.h"
#include "llvoicecontrolpanel.h"
+#include "llgroupmgr.h"
static const std::string P2P_MENU_NAME = "IMChiclet P2P Menu";
static const std::string GROUP_MENU_NAME = "IMChiclet Group Menu";
@@ -178,6 +179,7 @@ void LLChiclet::setValue(const LLSD& value)
LLIMChiclet::Params::Params()
: avatar_icon("avatar_icon")
+, group_insignia("group_insignia")
, unread_notifications("unread_notifications")
, speaker("speaker")
, show_speaker("show_speaker")
@@ -185,8 +187,14 @@ LLIMChiclet::Params::Params()
rect(LLRect(0, 25, 45, 0));
avatar_icon.name("avatar_icon");
+ avatar_icon.visible(false);
avatar_icon.rect(LLRect(0, 25, 25, 0));
+ //it's an icon for a group in case there is a group chat created
+ group_insignia.name("group_icon");
+ group_insignia.visible(false);
+ group_insignia.rect(LLRect(0, 25, 25, 0));
+
unread_notifications.name("unread");
unread_notifications.rect(LLRect(25, 25, 45, 0));
unread_notifications.font(LLFontGL::getFontSansSerif());
@@ -202,7 +210,9 @@ LLIMChiclet::Params::Params()
LLIMChiclet::LLIMChiclet(const Params& p)
: LLChiclet(p)
+, LLGroupMgrObserver(LLUUID())
, mAvatarCtrl(NULL)
+, mGroupInsignia(NULL)
, mCounterCtrl(NULL)
, mSpeakerCtrl(NULL)
, mShowSpeaker(p.show_speaker)
@@ -212,6 +222,12 @@ LLIMChiclet::LLIMChiclet(const Params& p)
mAvatarCtrl = LLUICtrlFactory::create<LLChicletAvatarIconCtrl>(avatar_params);
addChild(mAvatarCtrl);
+ //Before setOtherParticipantId() we are UNAWARE which dialog type will it be
+ //so keeping both icons for all both p2p and group chat cases
+ LLIconCtrl::Params grop_icon_params = p.group_insignia;
+ mGroupInsignia = LLUICtrlFactory::create<LLIconCtrl>(grop_icon_params);
+ addChild(mGroupInsignia);
+
LLChicletNotificationCounterCtrl::Params unread_params = p.unread_notifications;
mCounterCtrl = LLUICtrlFactory::create<LLChicletNotificationCounterCtrl>(unread_params);
addChild(mCounterCtrl);
@@ -228,7 +244,7 @@ LLIMChiclet::LLIMChiclet(const Params& p)
LLIMChiclet::~LLIMChiclet()
{
-
+ LLGroupMgr::getInstance()->removeObserver(this);
}
@@ -285,22 +301,80 @@ void LLIMChiclet::setIMSessionName(const std::string& name)
setToolTip(name);
}
+//session id should be set before calling this
void LLIMChiclet::setOtherParticipantId(const LLUUID& other_participant_id)
{
- if (mAvatarCtrl)
+ llassert(getSessionId().notNull());
+
+ LLFloaterIMPanel*floater = gIMMgr->findFloaterBySession(getSessionId());
+
+ //all alive sessions have alive floater, haven't they?
+ llassert(floater);
+
+ //in case participant id is being replaced with different id for a group chat
+ if (mOtherParticipantId.notNull() && mOtherParticipantId != other_participant_id &&
+ mID.notNull() && mGroupInsignia->getValue().isUUID())
{
- mAvatarCtrl->setValue(other_participant_id);
+ LLGroupMgr::getInstance()->removeObserver(this);
+ }
+
+ mOtherParticipantId = other_participant_id;
+
+ switch (floater->getDialogType())
+ {
+ case IM_NOTHING_SPECIAL:
+ if (mAvatarCtrl) {
+ mAvatarCtrl->setVisible(TRUE);
+ mAvatarCtrl->setValue(other_participant_id);
+ }
+ break;
+ case IM_SESSION_GROUP_START:
+ {
+ if (mGroupInsignia) {
+ LLGroupMgr* grp_mgr = LLGroupMgr::getInstance();
+ LLGroupMgrGroupData* group_data = grp_mgr->getGroupData(other_participant_id);
+ if (group_data && group_data->mInsigniaID.notNull())
+ {
+ mGroupInsignia->setVisible(TRUE);
+ mGroupInsignia->setValue(group_data->mInsigniaID);
+ }
+ else
+ {
+ mID = mOtherParticipantId; //needed for LLGroupMgrObserver
+ grp_mgr->addObserver(this);
+ grp_mgr->sendGroupPropertiesRequest(mOtherParticipantId);
+ }
+ }
+ }
+
+ break;
+ default:
+ llwarning("Unsupported dialog type", 0);
+ break;
}
+
}
-LLUUID LLIMChiclet::getOtherParticipantId()
+
+void LLIMChiclet::changed(LLGroupChange gc)
{
- LLUUID res = LLUUID::null;
- if (mAvatarCtrl)
+ LLSD group_insignia = mGroupInsignia->getValue();
+ if (group_insignia.isUUID() && group_insignia.asUUID().notNull()) return;
+
+ if (GC_PROPERTIES == gc)
{
- res = mAvatarCtrl->getAvatarId();
+ LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mOtherParticipantId);
+ if (group_data && group_data->mInsigniaID.notNull())
+ {
+ mGroupInsignia->setVisible(TRUE);
+ mGroupInsignia->setValue(group_data->mInsigniaID);
+ }
}
- return res;
+}
+
+LLUUID LLIMChiclet::getOtherParticipantId()
+{
+ return mOtherParticipantId;
}
void LLIMChiclet::updateMenuItems()
@@ -312,7 +386,7 @@ void LLIMChiclet::updateMenuItems()
if(P2P_MENU_NAME == mPopupMenu->getName())
{
- bool is_friend = LLAvatarActions::isFriend(mAvatarCtrl->getAvatarId());
+ bool is_friend = LLAvatarActions::isFriend(getOtherParticipantId());
mPopupMenu->getChild<LLUICtrl>("Add Friend")->setEnabled(!is_friend);
mPopupMenu->getChild<LLUICtrl>("Remove Friend")->setEnabled(is_friend);
@@ -321,7 +395,7 @@ void LLIMChiclet::updateMenuItems()
BOOL LLIMChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
{
- LLIMFloater::show(getSessionId());
+ LLIMFloater::toggle(getSessionId());
setCounter(0);
return LLChiclet::handleMouseDown(x, y, mask);
}
@@ -411,7 +485,7 @@ void LLIMChiclet::createPopupMenu()
void LLIMChiclet::onMenuItemClicked(const LLSD& user_data)
{
std::string level = user_data.asString();
- LLUUID other_participant_id = mAvatarCtrl->getAvatarId();
+ LLUUID other_participant_id = getOtherParticipantId();
if("profile" == level)
{
@@ -425,10 +499,6 @@ void LLIMChiclet::onMenuItemClicked(const LLSD& user_data)
{
LLAvatarActions::requestFriendshipDialog(other_participant_id);
}
- else if("remove" == level)
- {
- LLAvatarActions::removeFriendDialog(other_participant_id);
- }
else if("group chat" == level)
{
LLGroupActions::startChat(other_participant_id);
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index f66d799c25..c83caf8ff9 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -38,6 +38,7 @@
#include "llpanel.h"
#include "lltextbox.h"
#include "lloutputmonitorctrl.h"
+#include "llgroupmgr.h"
class LLVoiceControlPanel;
class LLMenuGL;
@@ -235,13 +236,15 @@ private:
* IMChiclet displays avatar's icon, number of unread messages(optional)
* and voice chat status(optional).
*/
-class LLIMChiclet : public LLChiclet
+class LLIMChiclet : public LLChiclet, LLGroupMgrObserver
{
public:
struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
{
Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
+ Optional<LLIconCtrl::Params> group_insignia;
+
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
Optional<LLChicletSpeakerCtrl::Params> speaker;
@@ -260,6 +263,7 @@ public:
/*
* Sets id of person/group user is chatting with.
+ * Session id should be set before calling this
*/
virtual void setOtherParticipantId(const LLUUID& other_participant_id);
@@ -305,6 +309,9 @@ public:
*/
/*virtual*/ LLRect getRequiredRect();
+ /** comes from LLGroupMgrObserver */
+ virtual void changed(LLGroupChange gc);
+
protected:
LLIMChiclet(const Params& p);
@@ -335,6 +342,9 @@ protected:
protected:
LLChicletAvatarIconCtrl* mAvatarCtrl;
+
+ /** the icon of a group in case of group chat */
+ LLIconCtrl* mGroupInsignia;
LLChicletNotificationCounterCtrl* mCounterCtrl;
LLChicletSpeakerCtrl* mSpeakerCtrl;
@@ -342,6 +352,9 @@ protected:
bool mShowSpeaker;
+ /** the id of another participant, either an avatar id or a group id*/
+ LLUUID mOtherParticipantId;
+
template<typename Container>
struct CollectChicletCombiner {
typedef Container result_type;
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index f739e159f3..7fc127f803 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -604,7 +604,7 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
}
else if (action == "copy")
{
- LLInventoryClipboard::instance().add(mSelectedItemID);
+ LLInventoryClipboard::instance().store(mSelectedItemID);
}
else if (action == "paste")
{
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 1037ef0403..65bf1176ff 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -2231,6 +2231,12 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
return floater;
}
+//static
+BOOL LLIMFloater::toggle(const LLUUID& session_id)
+{
+ return LLFloaterReg::toggleInstance("impanel", session_id);
+}
+
void LLIMFloater::updateMessages()
{
std::list<LLSD> messages = LLIMModel::instance().getMessages(mSessionID, mLastMessageIndex+1);
diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h
index d35aca0e42..52f67df4b7 100644
--- a/indra/newview/llimpanel.h
+++ b/indra/newview/llimpanel.h
@@ -386,6 +386,9 @@ public:
static LLIMFloater* show(const LLUUID& session_id);
+ // Toggle panel specified by session_id
+ static BOOL toggle(const LLUUID& session_id);
+
// get new messages from LLIMModel
void updateMessages();
static void onSendMsg( LLUICtrl*, void*);
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 615a41b143..a7c05af50b 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -257,6 +257,7 @@ void LLPanelGroup::notifyObservers()
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mID);
if(gdatap)
childSetValue("group_name", gdatap->mName);
+
}
@@ -270,6 +271,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
for(std::vector<LLPanelGroupTab* >::iterator it = mTabs.begin();it!=mTabs.end();++it)
(*it)->setGroupID(group_id);
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mID);
+ if(gdatap)
+ childSetValue("group_name", gdatap->mName);
+
LLButton* button_apply = findChild<LLButton>("btn_apply");
LLButton* button_refresh = findChild<LLButton>("btn_refresh");
LLButton* button_create = findChild<LLButton>("btn_create");
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 22706513e0..2d06dcdb36 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -71,11 +71,9 @@ LLPanelGroupGeneral::LLPanelGroupGeneral()
mChanged(FALSE),
mFirstUse(TRUE),
mGroupNameEditor(NULL),
- mGroupName(NULL),
mFounderName(NULL),
mInsignia(NULL),
mEditCharter(NULL),
- mBtnJoinGroup(NULL),
mListVisibleMembers(NULL),
mCtrlShowInGroupList(NULL),
mComboMature(NULL),
@@ -100,7 +98,6 @@ BOOL LLPanelGroupGeneral::postBuild()
// General info
mGroupNameEditor = getChild<LLLineEditor>("group_name_editor", recurse);
- mGroupName = getChild<LLTextBox>("group_name", recurse);
mInsignia = getChild<LLTextureCtrl>("insignia", recurse);
if (mInsignia)
@@ -117,17 +114,6 @@ BOOL LLPanelGroupGeneral::postBuild()
mEditCharter->setFocusChangedCallback(onFocusEdit, this);
}
- mBtnJoinGroup = getChild<LLButton>("join_button", recurse);
- if ( mBtnJoinGroup )
- {
- mBtnJoinGroup->setClickedCallback(onClickJoin, this);
- }
-
- mBtnInfo = getChild<LLButton>("info_button", recurse);
- if ( mBtnInfo )
- {
- mBtnInfo->setClickedCallback(onClickInfo, this);
- }
mFounderName = getChild<LLNameBox>("founder_name");
@@ -224,9 +210,6 @@ BOOL LLPanelGroupGeneral::postBuild()
mCtrlEnrollmentFee->setEnabled(TRUE);
mSpinEnrollmentFee->setEnabled(TRUE);
- mBtnJoinGroup->setVisible(FALSE);
- mBtnInfo->setVisible(FALSE);
- mGroupName->setVisible(FALSE);
}
return LLPanelGroupTab::postBuild();
@@ -692,28 +675,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
can_change_member_opts);
mSpinEnrollmentFee->resetDirty();
}
- if ( mBtnJoinGroup )
- {
- std::string fee_buff;
- bool visible;
-
- visible = !is_member && gdatap->mOpenEnrollment;
- mBtnJoinGroup->setVisible(visible);
-
- if ( visible )
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", gdatap->mMembershipFee);
- fee_buff = getString("group_join_btn", string_args);
- mBtnJoinGroup->setLabelSelected(fee_buff);
- mBtnJoinGroup->setLabelUnselected(fee_buff);
- }
- }
- if ( mBtnInfo )
- {
- mBtnInfo->setVisible(is_member && !mAllowEdit);
- }
-
if (mCtrlReceiveNotices)
{
mCtrlReceiveNotices->setVisible(is_member);
@@ -728,7 +689,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
if (mInsignia) mInsignia->setEnabled(mAllowEdit && can_change_ident);
if (mEditCharter) mEditCharter->setEnabled(mAllowEdit && can_change_ident);
- if (mGroupName) mGroupName->setText(gdatap->mName);
if (mGroupNameEditor) mGroupNameEditor->setVisible(FALSE);
if (mFounderName) mFounderName->setNameID(gdatap->mFounderID,FALSE);
if (mInsignia)
@@ -858,7 +818,6 @@ void LLPanelGroupGeneral::updateChanged()
LLUICtrl *check_list[] =
{
mGroupNameEditor,
- mGroupName,
mFounderName,
mInsignia,
mEditCharter,
@@ -914,10 +873,6 @@ void LLPanelGroupGeneral::reset()
mSpinEnrollmentFee->setEnabled(TRUE);
mSpinEnrollmentFee->set((F32)0);
- mBtnJoinGroup->setVisible(FALSE);
- mBtnInfo->setVisible(FALSE);
- mGroupName->setVisible(FALSE);
-
mGroupNameEditor->setVisible(true);
mComboActiveTitle->setVisible(false);
@@ -937,7 +892,6 @@ void LLPanelGroupGeneral::reset()
mListVisibleMembers->addElement(row);
}
- mBtnJoinGroup->setVisible(false);
{
mComboMature->setEnabled(true);
@@ -954,7 +908,6 @@ void LLPanelGroupGeneral::resetDirty()
LLUICtrl *check_list[] =
{
mGroupNameEditor,
- mGroupName,
mFounderName,
mInsignia,
mEditCharter,
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index e7028228b0..21d526f43d 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -96,12 +96,9 @@ private:
// Group information (include any updates in updateChanged)
LLLineEditor *mGroupNameEditor;
- LLTextBox *mGroupName;
LLNameBox *mFounderName;
LLTextureCtrl *mInsignia;
LLTextEditor *mEditCharter;
- LLButton *mBtnJoinGroup;
- LLButton *mBtnInfo;
LLNameListCtrl *mListVisibleMembers;
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 19a5f3a5f1..8770abcee3 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -320,6 +320,10 @@ LLPanelPeople::~LLPanelPeople()
delete mGroupListUpdater;
LLView::deleteViewByHandle(mGroupPlusMenuHandle);
+ LLView::deleteViewByHandle(mNearbyViewSortMenuHandle);
+ LLView::deleteViewByHandle(mFriendsViewSortMenuHandle);
+ LLView::deleteViewByHandle(mRecentViewSortMenuHandle);
+
}
BOOL LLPanelPeople::postBuild()
@@ -336,6 +340,7 @@ BOOL LLPanelPeople::postBuild()
mOfflineFriendList = getChild<LLPanel>(FRIENDS_TAB_NAME)->getChild<LLAvatarList>("avatars_offline");
mNearbyList = getChild<LLPanel>(NEARBY_TAB_NAME)->getChild<LLAvatarList>("avatar_list");
+
mRecentList = getChild<LLPanel>(RECENT_TAB_NAME)->getChild<LLAvatarList>("avatar_list");
mGroupList = getChild<LLGroupList>("group_list");
@@ -370,15 +375,38 @@ BOOL LLPanelPeople::postBuild()
buttonSetAction("share_btn", boost::bind(&LLPanelPeople::onShareButtonClicked, this));
buttonSetAction("more_btn", boost::bind(&LLPanelPeople::onMoreButtonClicked, this));
+ getChild<LLPanel>(NEARBY_TAB_NAME)->childSetAction("nearby_view_sort_btn",boost::bind(&LLPanelPeople::onNearbyViewSortButtonClicked, this));
+ getChild<LLPanel>(RECENT_TAB_NAME)->childSetAction("recent_viewsort_btn",boost::bind(&LLPanelPeople::onRecentViewSortButtonClicked, this));
+ getChild<LLPanel>(FRIENDS_TAB_NAME)->childSetAction("friends_viewsort_btn",boost::bind(&LLPanelPeople::onFriendsViewSortButtonClicked, this));
+
// Must go after setting commit callback and initializing all pointers to children.
mTabContainer->selectTabByName(FRIENDS_TAB_NAME);
// Create menus.
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+
registrar.add("People.Group.Plus.Action", boost::bind(&LLPanelPeople::onGroupPlusMenuItemClicked, this, _2));
+ registrar.add("People.Friends.ViewSort.Action", boost::bind(&LLPanelPeople::onFriendsViewSortMenuItemClicked, this, _2));
+ registrar.add("People.Nearby.ViewSort.Action", boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemClicked, this, _2));
+ registrar.add("People.Recent.ViewSort.Action", boost::bind(&LLPanelPeople::onRecentViewSortMenuItemClicked, this, _2));
+
LLMenuGL* plus_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mGroupPlusMenuHandle = plus_menu->getHandle();
+ LLMenuGL* nearby_view_sort = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_nearby_view_sort.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ if(nearby_view_sort)
+ mNearbyViewSortMenuHandle = nearby_view_sort->getHandle();
+
+ LLMenuGL* friend_view_sort = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_friends_view_sort.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ if(friend_view_sort)
+ mFriendsViewSortMenuHandle = friend_view_sort->getHandle();
+
+ LLMenuGL* recent_view_sort = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_recent_view_sort.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ if(recent_view_sort)
+ mRecentViewSortMenuHandle = recent_view_sort->getHandle();
+
+
+
// Perform initial update.
mFriendListUpdater->forceUpdate();
mRecentListUpdater->forceUpdate();
@@ -811,6 +839,56 @@ void LLPanelPeople::onGroupPlusMenuItemClicked(const LLSD& userdata)
LLGroupActions::createGroup();
}
+void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
+{
+ std::string chosen_item = userdata.asString();
+
+ if (chosen_item == "sort_name")
+ {
+ }
+ else if (chosen_item == "sort_status")
+ {
+ }
+ else if (chosen_item == "view_icons")
+ {
+ }
+ else if (chosen_item == "organize_offline")
+ {
+ }
+}
+void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
+{
+ std::string chosen_item = userdata.asString();
+
+ if (chosen_item == "sort_recent")
+ {
+ }
+ else if (chosen_item == "sort_name")
+ {
+ }
+ else if (chosen_item == "view_icons")
+ {
+ }
+ else if (chosen_item == "sort_distance")
+ {
+ }
+}
+void LLPanelPeople::onRecentViewSortMenuItemClicked(const LLSD& userdata)
+{
+ std::string chosen_item = userdata.asString();
+
+ if (chosen_item == "sort_most")
+ {
+ }
+ else if (chosen_item == "sort_name")
+ {
+ }
+ else if (chosen_item == "view_icons")
+ {
+ }
+}
+
+
void LLPanelPeople::onCallButtonClicked()
{
// *TODO: not implemented yet
@@ -830,6 +908,27 @@ void LLPanelPeople::onMoreButtonClicked()
{
// *TODO: not implemented yet
}
+void LLPanelPeople::onFriendsViewSortButtonClicked()
+{
+ LLMenuGL* menu = (LLMenuGL*)mFriendsViewSortMenuHandle.get();
+ if (!menu)
+ return;
+ showGroupMenu(menu);
+}
+void LLPanelPeople::onRecentViewSortButtonClicked()
+{
+ LLMenuGL* menu = (LLMenuGL*)mRecentViewSortMenuHandle.get();
+ if (!menu)
+ return;
+ showGroupMenu(menu);
+}
+void LLPanelPeople::onNearbyViewSortButtonClicked()
+{
+ LLMenuGL* menu = (LLMenuGL*)mNearbyViewSortMenuHandle.get();
+ if (!menu)
+ return;
+ showGroupMenu(menu);
+}
void LLPanelPeople::onOpen(const LLSD& key)
{
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 2b821a432b..d0f78f4247 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -93,12 +93,19 @@ private:
void onShareButtonClicked();
void onMoreButtonClicked();
void onActivateButtonClicked();
+ void onRecentViewSortButtonClicked();
+ void onNearbyViewSortButtonClicked();
+ void onFriendsViewSortButtonClicked();
void onAvatarListDoubleClicked(LLAvatarList* list);
void onAvatarListCommitted(LLAvatarList* list);
void onGroupPlusButtonClicked();
void onGroupMinusButtonClicked();
void onGroupPlusMenuItemClicked(const LLSD& userdata);
+ void onFriendsViewSortMenuItemClicked(const LLSD& userdata);
+ void onNearbyViewSortMenuItemClicked(const LLSD& userdata);
+ void onRecentViewSortMenuItemClicked(const LLSD& userdata);
+
// misc callbacks
bool onFriendListUpdate(U32 changed_mask);
static void onAvatarPicked(
@@ -115,6 +122,9 @@ private:
LLGroupList* mGroupList;
LLHandle<LLView> mGroupPlusMenuHandle;
+ LLHandle<LLView> mNearbyViewSortMenuHandle;
+ LLHandle<LLView> mFriendsViewSortMenuHandle;
+ LLHandle<LLView> mRecentViewSortMenuHandle;
Updater* mFriendListUpdater;
Updater* mNearbyListUpdater;
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 34feb0f5a9..c8e0a53764 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -49,6 +49,7 @@
#include "lltextbox.h"
#include "llagent.h"
+#include "llavatarpropertiesprocessor.h"
#include "llfloaterworldmap.h"
#include "llinventorymodel.h"
#include "lllandmarkactions.h"
@@ -513,6 +514,28 @@ void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
}
+void LLPanelPlaceInfo::createPick(const LLVector3d& global_pos)
+{
+ LLPickData pick_data;
+
+ pick_data.agent_id = gAgent.getID();
+ pick_data.session_id = gAgent.getSessionID();
+ pick_data.pick_id = LLUUID::generateNewID();
+ pick_data.creator_id = gAgentID;
+
+ //legacy var need to be deleted
+ pick_data.top_pick = FALSE;
+ pick_data.parcel_id = mParcelID;
+ pick_data.name = mParcelName->getText();
+ pick_data.desc = mDescEditor->getText();
+ pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID();
+ pick_data.pos_global = global_pos;
+ pick_data.sort_order = 0;
+ pick_data.enabled = TRUE;
+
+ LLAvatarPropertiesProcessor::instance().sendDataUpdate(&pick_data, APT_PICK_INFO);
+}
+
void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent)
{
if (mMinHeight > 0 && mScrollingPanel != NULL)
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index e7b81dc3e6..71c268c6c4 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -80,8 +80,12 @@ public:
void setInfoType(INFO_TYPE type);
// Create a landmark for the current location
- // in a folder specified by folder_id
+ // in a folder specified by folder_id.
void createLandmark(const LLUUID& folder_id);
+
+ // Create a pick for the location specified
+ // by global_pos.
+ void createPick(const LLVector3d& global_pos);
BOOL isMediaPanelVisible();
void toggleMediaPanel(BOOL visible);
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 41be268483..39f7d41a8d 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -301,16 +301,6 @@ void LLPanelPlaces::onShareButtonClicked()
}
*/
-void LLPanelPlaces::copySLURL()
-{
- LLLandmarkActions::getSLURLfromPosGlobal(mPosGlobal, boost::bind(&onSLURLBuilt, _1));
-}
-
-void LLPanelPlaces::deleteLandmark()
-{
- gInventory.removeItem(mItem->getUUID());
-}
-
void LLPanelPlaces::onTeleportButtonClicked()
{
if (!mPlaceInfo)
@@ -398,6 +388,17 @@ void LLPanelPlaces::onOverflowButtonClicked()
else if (is_landmark_info_visible && mLandmarkMenu != NULL)
{
menu = mLandmarkMenu;
+
+ BOOL is_landmark_removable = FALSE;
+ if (mItem.notNull())
+ {
+ const LLUUID& item_id = mItem->getUUID();
+ const LLUUID& trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+ is_landmark_removable = gInventory.isObjectDescendentOf(item_id, gInventory.getRootFolderID()) &&
+ !gInventory.isObjectDescendentOf(item_id, trash_id);
+ }
+
+ menu->getChild<LLMenuItemCallGL>("delete")->setEnabled(is_landmark_removable);
}
else
{
@@ -422,11 +423,22 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
}
else if (item == "copy")
{
- copySLURL();
+ LLLandmarkActions::getSLURLfromPosGlobal(mPosGlobal, boost::bind(&onSLURLBuilt, _1));
}
else if (item == "delete")
{
- deleteLandmark();
+ gInventory.removeItem(mItem->getUUID());
+
+ onBackButtonClicked();
+ }
+ else if (item == "pick")
+ {
+ if (!mPlaceInfo)
+ return;
+
+ mPlaceInfo->createPick(mPosGlobal);
+
+ onBackButtonClicked();
}
}
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index a200bc2d28..089a854762 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -81,9 +81,6 @@ private:
void updateVerbs();
void showLandmarkFoldersMenu();
-
- void copySLURL();
- void deleteLandmark();
LLFilterEditor* mFilterEditor;
LLPanelPlacesTab* mActivePanel;
diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp
new file mode 100644
index 0000000000..b31edf1e5d
--- /dev/null
+++ b/indra/newview/llteleporthistorystorage.cpp
@@ -0,0 +1,164 @@
+/**
+ * @file llteleporthistorystorage.cpp
+ * @brief Teleport history
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llteleporthistorystorage.h"
+
+#include "llsd.h"
+#include "llsdserialize.h"
+#include "lldir.h"
+
+static LLTeleportHistoryStorage tpstorage;
+
+LLTeleportHistoryPersistentItem::LLTeleportHistoryPersistentItem(const LLSD& val)
+{
+ mTitle = val["title"].asString();
+ mGlobalPos.setValue(val["global_pos"]);
+ mDate = val["date"];
+}
+
+LLSD LLTeleportHistoryPersistentItem::toLLSD() const
+{
+ LLSD val;
+
+ val["title"] = mTitle;
+ val["global_pos"] = mGlobalPos.getValue();
+ val["date"] = mDate;
+
+ return val;
+}
+
+LLTeleportHistoryStorage::LLTeleportHistoryStorage() :
+ mFilename("teleport_history.txt")
+{
+}
+
+LLTeleportHistoryStorage::~LLTeleportHistoryStorage()
+{
+}
+
+void LLTeleportHistoryStorage::purgeItems()
+{
+ mItems.clear();
+}
+
+void LLTeleportHistoryStorage::addItem(const std::string title, const LLVector3d& global_pos)
+{
+ mItems.push_back(LLTeleportHistoryPersistentItem(title, global_pos));
+}
+
+void LLTeleportHistoryStorage::addItem(const std::string title, const LLVector3d& global_pos, const LLDate& date)
+{
+ mItems.push_back(LLTeleportHistoryPersistentItem(title, global_pos, date));
+}
+
+void LLTeleportHistoryStorage::removeItem(S32 idx)
+{
+ if (idx < 0 || idx >= (S32)mItems.size())
+ return;
+
+ mItems.erase (mItems.begin() + idx);
+}
+
+void LLTeleportHistoryStorage::save()
+{
+ // build filename for each user
+ std::string resolvedFilename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+
+ // open the history file for writing
+ llofstream file (resolvedFilename);
+ if (!file.is_open())
+ {
+ llwarns << "can't open teleport history file \"" << mFilename << "\" for writing" << llendl;
+ return;
+ }
+
+ for (size_t i=0; i<mItems.size(); i++)
+ {
+ LLSD s_item = mItems[i].toLLSD();
+ file << LLSDOStreamer<LLSDNotationFormatter>(s_item) << std::endl;
+ }
+
+ file.close();
+}
+
+void LLTeleportHistoryStorage::load()
+{
+ // build filename for each user
+ std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+
+ // open the history file for reading
+ llifstream file(resolved_filename);
+ if (!file.is_open())
+ {
+ llwarns << "can't load teleport history from file \"" << mFilename << "\"" << llendl;
+ return;
+ }
+
+ // remove current entries before we load over them
+ mItems.clear();
+
+ // the parser's destructor is protected so we cannot create in the stack.
+ LLPointer<LLSDParser> parser = new LLSDNotationParser();
+ std::string line;
+ while (std::getline(file, line))
+ {
+ LLSD s_item;
+ std::istringstream iss(line);
+ if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE)
+ {
+ llinfos << "Parsing saved teleport history failed" << llendl;
+ break;
+ }
+
+ mItems.push_back(s_item);
+ }
+
+ file.close();
+}
+
+void LLTeleportHistoryStorage::dump() const
+{
+ llinfos << "Teleport history storage dump (" << mItems.size() << " items):" << llendl;
+
+ for (size_t i=0; i<mItems.size(); i++)
+ {
+ std::stringstream line;
+ line << i << ": " << mItems[i].mTitle;
+ line << " global pos: " << mItems[i].mGlobalPos;
+ line << " date: " << mItems[i].mDate;
+
+ llinfos << line.str() << llendl;
+ }
+}
+
diff --git a/indra/newview/llteleporthistorystorage.h b/indra/newview/llteleporthistorystorage.h
new file mode 100644
index 0000000000..fa836c0326
--- /dev/null
+++ b/indra/newview/llteleporthistorystorage.h
@@ -0,0 +1,108 @@
+/**
+ * @file llteleporthistorystorage.h
+ * @brief Saving/restoring of teleport history.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTELEPORTHISTORYSTORAGE_H
+#define LL_LLTELEPORTHISTORYSTORAGE_H
+
+#include <vector>
+
+#include "llsingleton.h"
+#include "lldate.h"
+#include "v3dmath.h"
+
+class LLSD;
+
+/**
+ * An item of the teleport history, stored in file
+ *
+ * Contains the location's global coordinates, title and date.
+ */
+class LLTeleportHistoryPersistentItem
+{
+public:
+ LLTeleportHistoryPersistentItem()
+ {}
+
+ LLTeleportHistoryPersistentItem(const std::string title, const LLVector3d& global_pos)
+ : mTitle(title), mGlobalPos(global_pos), mDate(LLDate::now())
+ {}
+
+ LLTeleportHistoryPersistentItem(const std::string title, const LLVector3d& global_pos, const LLDate& date)
+ : mTitle(title), mGlobalPos(global_pos), mDate(date)
+ {}
+
+ LLTeleportHistoryPersistentItem(const LLSD& val);
+ LLSD toLLSD() const;
+
+ std::string mTitle;
+ LLVector3d mGlobalPos;
+ LLDate mDate;
+};
+
+/**
+ * Persistent teleport history.
+ *
+ */
+class LLTeleportHistoryStorage: public LLSingleton<LLTeleportHistoryStorage>
+{
+ LOG_CLASS(LLTeleportHistoryStorage);
+
+public:
+
+ typedef std::vector<LLTeleportHistoryPersistentItem> item_list_list_t;
+
+ LLTeleportHistoryStorage();
+ ~LLTeleportHistoryStorage();
+
+ /**
+ * @return history items.
+ */
+ const item_list_list_t& getItems() const { return mItems; }
+ void purgeItems();
+
+ void addItem(const std::string title, const LLVector3d& global_pos);
+ void addItem(const std::string title, const LLVector3d& global_pos, const LLDate& date);
+
+ void removeItem(S32 idx);
+
+ void save();
+ void load();
+
+ void dump() const;
+
+private:
+
+ item_list_list_t mItems;
+ std::string mFilename;
+};
+
+#endif //LL_LLTELEPORTHISTORYSTORAGE_H
diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
index bad6e1e212..c205868429 100644
--- a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
@@ -32,12 +32,4 @@
function="IMChicletMenu.Action"
parameter="add" />
</menu_item_call>
- <menu_item_call
- label="Remove Friend..."
- layout="topleft"
- name="Remove Friend">
- <menu_item_call.on_click
- function="IMChicletMenu.Action"
- parameter="remove" />
- </menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_landmark.xml b/indra/newview/skins/default/xui/en/menu_landmark.xml
index 64f6ce9bb5..9263f75d24 100644
--- a/indra/newview/skins/default/xui/en/menu_landmark.xml
+++ b/indra/newview/skins/default/xui/en/menu_landmark.xml
@@ -22,7 +22,6 @@
parameter="delete" />
</menu_item_call>
<menu_item_call
- enabled="false"
label="Create Pick"
layout="topleft"
name="pick">
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
new file mode 100644
index 0000000000..bb5a4e51f7
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu name="menu_group_plus"
+ left="0" bottom="0" visible="false"
+ mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="true">
+ <menu_item_call name="sort_name" label="Sort by Name">
+ <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="sort_name" />
+ </menu_item_call>
+ <menu_item_call name="sort_status" label="Sort by Status">
+ <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="sort_status" />
+ </menu_item_call>
+ <menu_item_separator layout="topleft" />
+ <menu_item_call name="view_icons" label="View People Icons">
+ <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="view_icons" />
+ </menu_item_call>
+ <menu_item_call name="organize_offline" label="Organize Offline Friends">
+ <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="organize_offline" />
+ </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
new file mode 100644
index 0000000000..8c2c5e8c9e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu name="menu_group_plus"
+ left="0" bottom="0" visible="false"
+ mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="true">
+ <menu_item_call name="sort_recent" label="Sort by Recent Speakers">
+ <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_recent" />
+ </menu_item_call>
+ <menu_item_call name="sort_name" label="Sort by Name">
+ <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_name" />
+ </menu_item_call>
+ <menu_item_call name="sort_distance" label="Sort by Distance">
+ <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_distance" />
+ </menu_item_call>
+ <menu_item_separator layout="topleft" />
+ <menu_item_call name="view_icons" label="View People Icons">
+ <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="view_icons" />
+ </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
new file mode 100644
index 0000000000..00cf443cc6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu name="menu_group_plus"
+ left="0" bottom="0" visible="false"
+ mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="true">
+ <menu_item_call name="sort_most" label="Sort by Most Speakers">
+ <menu_item_call.on_click function="People.Recent.ViewSort.Action" userdata="sort_most" />
+ </menu_item_call>
+ <menu_item_call name="sort_name" label="Sort by Name">
+ <menu_item_call.on_click function="People.Recent.ViewSort.Action" userdata="sort_name" />
+ </menu_item_call>
+ <menu_item_separator layout="topleft" />
+ <menu_item_call name="view_icons" label="View People Icons">
+ <menu_item_call.on_click function="People.Recent.ViewSort.Action" userdata="view_icons" />
+ </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_place.xml b/indra/newview/skins/default/xui/en/menu_place.xml
index a9f98e35cc..01f62985ca 100644
--- a/indra/newview/skins/default/xui/en/menu_place.xml
+++ b/indra/newview/skins/default/xui/en/menu_place.xml
@@ -14,7 +14,6 @@
parameter="landmark" />
</menu_item_call>
<menu_item_call
- enabled="false"
label="Create Pick"
layout="topleft"
name="pick">
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 9910f99c17..4f241664fb 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -31,8 +31,7 @@
layout="topleft"
left="0"
top="0"
- width="5"
- min_width="5" />
+ width="5"/>
<layout_panel
follows="left|right"
height="28"
@@ -55,8 +54,7 @@
left="0"
name="DUMMY"
top="0"
- width="3"
- min_width="3"/>
+ width="3"/>
<layout_panel
auto_resize="false"
follows="right"
@@ -94,8 +92,7 @@
left="0"
name="DUMMY"
top="0"
- width="8"
- min_width="8"/>
+ width="8"/>
<layout_panel
auto_resize="false"
follows="right"
@@ -185,8 +182,7 @@
left="0"
name="DUMMY"
top="0"
- width="5"
- min_width="5" />
+ width="5"/>
<layout_panel
follows="left|right"
height="28"
@@ -216,8 +212,7 @@
layout="topleft"
left="0"
top="0"
- width="5"
- min_width="5" />
+ width="5"/>
<layout_panel
auto_resize="false"
follows="right"
@@ -261,8 +256,7 @@
layout="topleft"
left="0"
top="0"
- width="10"
- min_width="10"/>
+ width="10"/>
<view_border
auto_resize="false"
bevel_style="in"
@@ -282,8 +276,7 @@
layout="topleft"
left="0"
top="0"
- width="10"
- min_width="10" />
+ width="10"/>
<layout_panel
auto_resize="false"
follows="right"
@@ -327,7 +320,6 @@
layout="topleft"
left="0"
top="0"
- width="5"
- min_width="5" />
+ width="5"/>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index fd154792dd..9fa2765e97 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -43,7 +43,7 @@ Hover your mouse over the options for more help.
<line_editor
follows="left|top"
font="SansSerifSmall"
- prevalidate_callback="asci"
+ prevalidate_callback="ascii"
halign="left"
height="16"
label="Type your new group name here"
@@ -65,7 +65,6 @@ Hover your mouse over the options for more help.
width="100" />
<text
type="string"
- length="1"
follows="left|top"
height="16"
layout="topleft"
@@ -78,7 +77,6 @@ Hover your mouse over the options for more help.
<text_editor
type="string"
- length="1"
follows="left|top"
left="10"
height="75"
@@ -116,7 +114,6 @@ Hover your mouse over the options for more help.
<text
follows="left|top"
type="string"
- length="1"
font="SansSerifBig"
tool_tip="Owners are shown in bold."
height="16"
@@ -151,7 +148,6 @@ Hover your mouse over the options for more help.
follows="left|top"
height="16"
type="string"
- length="1"
top_pad="10"
font="SansSerifBig"
layout="topleft"
@@ -161,7 +157,6 @@ Hover your mouse over the options for more help.
<text
follows="left|top"
type="string"
- length="1"
height="16"
layout="topleft"
left_delta="0"
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index b85f1ed617..d24d11039a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -42,7 +42,6 @@
-->
<!-- <text
type="string"
- length="1"
follows="left|top"
font="SansSerifBig"
height="16"
@@ -98,7 +97,6 @@
enabled="false" />
<text
type="string"
- length="1"
follows="left|top"
halign="right"
height="16"
@@ -111,7 +109,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
height="16"
layout="topleft"
@@ -123,7 +120,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
halign="right"
height="16"
@@ -136,7 +132,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
height="16"
layout="topleft"
@@ -148,7 +143,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
halign="right"
height="16"
@@ -161,7 +155,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
height="16"
layout="topleft"
@@ -173,7 +166,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
halign="right"
height="16"
@@ -197,7 +189,6 @@
width="95" />
<text
type="string"
- length="1"
follows="left|top"
height="16"
layout="topleft"
@@ -208,7 +199,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
halign="right"
height="16"
@@ -231,7 +221,6 @@
<text
follows="left|top"
type="string"
- length="1"
word_wrap="true"
font="SansSerifSmall"
height="40"
@@ -245,7 +234,6 @@
</text>
<text
type="string"
- length="1"
follows="left|top"
font="SansSerifBig"
height="16"
@@ -277,7 +265,6 @@
width="265">
<text_editor
type="string"
- length="1"
bg_readonly_color="0.784314 0.819608 0.8 1"
follows="all"
font="Monospace"
@@ -303,7 +290,6 @@
width="265">
<text_editor
type="string"
- length="1"
bg_readonly_color="0.784314 0.819608 0.8 1"
follows="all"
font="Monospace"
@@ -349,7 +335,6 @@
width="265">
<text_editor
type="string"
- length="1"
bg_readonly_color="0.784314 0.819608 0.8 1"
follows="all"
font="Monospace"
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index c4dc4fcea9..ffc2f279bc 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -35,7 +35,6 @@ the General tab.
<!--<text
follows="left|top"
type="string"
- length="1"
font="SansSerifBig"
height="16"
layout="topleft"
@@ -48,7 +47,6 @@ the General tab.
<text
follows="left|top"
type="string"
- length="1"
word_wrap="true"
height="40"
layout="topleft"
@@ -92,7 +90,6 @@ the General tab.
<text
follows="left|top"
type="string"
- length="1"
layout="topleft"
name="notice_list_none_found"
visible="false">
@@ -132,7 +129,6 @@ the General tab.
<text
follows="left|top"
type="string"
- length="1"
font="SansSerifBig"
height="16"
layout="topleft"
@@ -147,7 +143,6 @@ the General tab.
follows="left|top"
type="string"
word_wrap="true"
- length="1"
height="90"
layout="topleft"
left_delta="0"
@@ -159,7 +154,6 @@ the General tab.
<text
follows="left|top"
type="string"
- length="1"
halign="left"
height="16"
layout="topleft"
@@ -182,7 +176,6 @@ the General tab.
<text
follows="left|top"
type="string"
- length="1"
halign="left"
height="16"
layout="topleft"
@@ -205,7 +198,6 @@ the General tab.
<text
follows="left|top"
type="string"
- length="1"
halign="left"
height="16"
layout="topleft"
@@ -292,7 +284,6 @@ the General tab.
width="265">
<text
type="string"
- length="1"
font="SansSerifBig"
height="16"
layout="topleft"
@@ -305,7 +296,6 @@ the General tab.
</text>
<text
type="string"
- length="1"
height="16"
word_wrap="true"
layout="topleft"
@@ -317,7 +307,6 @@ the General tab.
</text>
<text
type="string"
- length="1"
halign="left"
height="16"
layout="topleft"
@@ -342,7 +331,6 @@ the General tab.
width="200" />
<text
type="string"
- length="1"
halign="left"
height="16"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index c1d7393839..37c332b2b7 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -39,7 +39,6 @@
width="270">
<text
type="string"
- length="1"
font="SansSerifBig"
height="16"
layout="topleft"
@@ -51,7 +50,6 @@
</text>
<text
type="string"
- length="1"
word_wrap="true"
height="40"
layout="topleft"
@@ -73,7 +71,6 @@
width="270">
<text
type="string"
- length="1"
font="SansSerifBig"
height="16"
layout="topleft"
@@ -85,7 +82,6 @@
</text>
<text
type="string"
- length="1"
word_wrap="true"
height="40"
layout="topleft"
@@ -98,7 +94,6 @@
</text>
<text
type="string"
- length="1"
word_wrap="true"
height="40"
layout="topleft"
@@ -110,7 +105,6 @@
</text>
<text
type="string"
- length="1"
word_wrap="true"
height="16"
layout="topleft"
@@ -123,7 +117,6 @@
</text>
<text
type="string"
- length="1"
word_wrap="true"
height="16"
layout="topleft"
@@ -145,7 +138,6 @@
width="270">
<text
type="string"
- length="1"
font="SansSerifBig"
height="16"
layout="topleft"
@@ -157,7 +149,6 @@
</text>
<text
type="string"
- length="1"
word_wrap="true"
height="40"
layout="topleft"
@@ -525,7 +516,6 @@ things in this group. There&apos;s a broad variety of Abilities.
width="265">
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -538,7 +528,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -599,7 +588,6 @@ things in this group. There&apos;s a broad variety of Abilities.
width="270">
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -611,7 +599,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -623,7 +610,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<line_editor
type="string"
- length="1"
border_style="line"
border_thickness="1"
follows="left|top"
@@ -638,7 +624,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</line_editor>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -650,7 +635,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<line_editor
type="string"
- length="1"
border_style="line"
border_thickness="1"
follows="left|top"
@@ -665,7 +649,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</line_editor>
<text_editor
type="string"
- length="1"
halign="left"
height="48"
hide_scrollbar="true"
@@ -680,7 +663,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text_editor>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -692,7 +674,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -755,7 +736,6 @@ things in this group. There&apos;s a broad variety of Abilities.
width="265">
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -767,7 +747,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<text_editor
type="string"
- length="1"
enabled="false"
halign="left"
height="48"
@@ -783,7 +762,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text_editor>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
@@ -795,7 +773,6 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<text
type="string"
- length="1"
font="SansSerif"
height="16"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 1efe287cbe..a62d2a5cdb 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -93,7 +93,6 @@
name="bottom_panel"
width="285">
<button
- enabled="false"
follows="bottom|left"
font="SansSerifBigBold"
height="18"
@@ -101,7 +100,7 @@
image_unselected="OptionsMenu_Off"
layout="topleft"
left="20"
- name="gear_btn"
+ name="nearby_view_sort_btn"
picture_style="true"
top="7"
width="18" />
@@ -187,7 +186,6 @@
name="bottom_panel"
width="285">
<button
- enabled="false"
follows="bottom|left"
font="SansSerifBigBold"
height="18"
@@ -195,7 +193,7 @@
image_unselected="OptionsMenu_Off"
layout="topleft"
left="20"
- name="gear_btn"
+ name="friends_viewsort_btn"
picture_style="true"
top="7"
width="18" />
@@ -334,7 +332,6 @@
name="bottom_panel"
width="285">
<button
- enabled="false"
follows="bottom|left"
font="SansSerifBigBold"
height="18"
@@ -342,7 +339,7 @@
image_unselected="OptionsMenu_Off"
layout="topleft"
left="20"
- name="gear_btn"
+ name="recent_viewsort_btn"
picture_style="true"
top="7"
width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 0075eef9ef..33592d289f 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -13,10 +13,10 @@
font="SansSerifHugeBold"
height="15"
layout="topleft"
- left="0"
+ left="10"
name="title"
text_color="white"
- top="0"
+ top="5"
value="Pick Info"
width="150" />
<button
@@ -26,13 +26,14 @@
layout="topleft"
name="back_btn"
picture_style="true"
- right="-25"
- top="10"
+ right="-20"
+ top="7"
width="20" />
<panel
background_visible="true"
bg_alpha_color="DkGray2"
follows="left|right|top|bottom"
+ height="550"
layout="topleft"
left="0"
min_height="300"
@@ -46,7 +47,7 @@
left="10"
name="pick_snapshot"
top="10"
- width="260" />
+ width="245" />
<text
follows="left|top"
font="SansSerifBigBold"
@@ -111,10 +112,10 @@
value="[loading...]" />
</panel>
<panel
- bottom="660"
follows="left|right|bottom"
height="30"
layout="topleft"
+ top_pad="2"
left="8"
name="buttons"
right="-10">
@@ -134,6 +135,7 @@
height="25"
label="Teleport"
layout="topleft"
+ left_pad="2"
name="teleport_btn"
top="0"
width="80" />
@@ -143,6 +145,7 @@
height="25"
label="Show on Map"
layout="topleft"
+ left_pad="2"
name="show_on_map_btn"
top="0"
width="100" />
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index d00ff7a6a1..65db3cc7a1 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -72,7 +72,7 @@
top="0"
left="0"
width="240"
- height="500">
+ height="520">
<panel
follows="left|top"
@@ -251,6 +251,41 @@
width="40" />
</panel>
<text
+ type="string"
+ follows="left|top"
+ font="SansSerifBold"
+ height="15"
+ halign="right"
+ layout="topleft"
+ left="10"
+ name="online_me_status_text"
+ text_color="white"
+ top_pad="20"
+ width="100">
+ Status:
+ </text>
+ <combo_box
+ font="SansSerifBold"
+ height="18"
+ layout="topleft"
+ left_pad="0"
+ top_delta="0"
+ name="status_combo"
+ width="100">
+ <combo_box.item
+ label="Online"
+ name="online"
+ value="online" />
+ <combo_box.item
+ label="Away"
+ name="away"
+ value="away" />
+ <combo_box.item
+ label="Busy"
+ name="busy"
+ value="busy" />
+ </combo_box>
+ <text
follows="left|top"
font="SansSerifBold"
halign="right"
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 4f8adf6ecb..e9eac2c9dc 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -2,7 +2,6 @@
<side_tray
name="sidebar"
background_visible="false"
- color="DkGray"
mouse_opaque="true"
width="305"
collapsed="true"
@@ -15,7 +14,6 @@
mouse_opaque="false"
background_opaque="false"
background_visible="true"
-color="DkGray"
>
<panel
name="panel_home"
@@ -34,7 +32,6 @@ color="DkGray"
mouse_opaque="false"
background_opaque="false"
background_visible="true"
-color="DkGray"
>
<panel_container
name="panel_container"
@@ -71,7 +68,6 @@ color="DkGray"
image="TabIcon_Places_Off"
mouse_opaque="false"
background_visible="true"
- color="DkGray"
>
<panel
class="panel_places"
@@ -89,7 +85,6 @@ color="DkGray"
image="TabIcon_Me_Off"
mouse_opaque="false"
background_visible="true"
- color="DkGray"
>
<panel
class="panel_me_profile_view"
diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
index aef3363259..d7736832a3 100644
--- a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<filter_editor select_on_focus="true"
- background="TextField_Search_Off"
background_image_disabled="TextField_Search_Disabled"
background_image_focused="TextField_Search_Active">
<clear_filter_button label=""
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index 777651c452..89a88330c7 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -9,7 +9,6 @@
<location_input font="SansSerifSmall"
add_landmark_image_enabled="Favorite_Star_Active"
add_landmark_image_disabled="Favorite_Star_Off"
- hover_glow_amount="0.15"
add_landmark_hpad="2"
allow_text_entry="true"
list_position="below"