WIP: First pass at new contacts list panel with inv based sets
Known issues: Cannot remove or rename created sets Cannot add/remove/move contacts in sets via UI, must be done thru inv by copying calling cards Newly created contact sets do not appear in UI till something causes the list to refresh (friend status change, add/remove friend, add/remove contact in to any set, or relog) Some view settings are not stored: show offline (default enabled at login), set open states (default open at login) Sorting many not update on displayname loading or on change Padding between lines is huge still even with avatar icons turned off (bug with the avatar list control) Cannot keyboard type-to contact by typing first few leters of name (viewer2 bug with all list controls, regression from viewer1) Very, very large friend lists (500+ maybe) might cause slow downs when panel is in view and friend online statuses are changing fequently.
parent
e013a215e3
commit
c0a8ee6f0e
|
|
@ -85,6 +85,7 @@ set(viewer_SOURCE_FILES
|
|||
chatbar_as_cmdline.cpp
|
||||
kcwlinterface.cpp
|
||||
floatermedialists.cpp
|
||||
fscontactlist.cpp
|
||||
fscontactsfloater.cpp
|
||||
fsareasearch.cpp
|
||||
fsdata.cpp
|
||||
|
|
@ -686,6 +687,7 @@ set(viewer_HEADER_FILES
|
|||
chatbar_as_cmdline.h
|
||||
kcwlinterface.h
|
||||
floatermedialists.h
|
||||
fscontactlist.h
|
||||
fscontactsfloater.h
|
||||
fsradarlistctrl.h
|
||||
fsareasearch.h
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,222 @@
|
|||
/**
|
||||
* @file fscontactlist.h
|
||||
* @brief Firestorm contacts list control
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2011, The Phoenix Viewer Project, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Viewer Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef FS_FSCONTACTLIST_H
|
||||
#define FS_FSCONTACTLIST_H
|
||||
|
||||
#include "llpanel.h"
|
||||
|
||||
#include "llcallingcard.h" // for avatar tracker
|
||||
#include "llvoiceclient.h"
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
// class FSContactListSet;
|
||||
class LLAvatarList;
|
||||
class LLAvatarName;
|
||||
class LLAccordionCtrl;
|
||||
class LLAccordionCtrlTab;
|
||||
// class LLFilterEditor;
|
||||
class LLMenuButton;
|
||||
class LLToggleableMenu;
|
||||
class LLMenuGL;
|
||||
class LLTextBox;
|
||||
|
||||
|
||||
typedef enum e_sort_oder
|
||||
{
|
||||
E_SORT_BY_NAME = 0,
|
||||
E_SORT_BY_USERNAME = 1,
|
||||
E_SORT_BY_STATUS = 2,
|
||||
E_SORT_BY_STATUSUSERNAME = 3
|
||||
} ESortOrder;
|
||||
|
||||
|
||||
|
||||
/// convenience class for holding keyframes mapped to sliders
|
||||
class FSContactSet : public LLPanel
|
||||
{
|
||||
LOG_CLASS(FSContactSet);
|
||||
public:
|
||||
// FSContactSet(const Params& p = LLPanel::Params());
|
||||
FSContactSet();
|
||||
virtual ~FSContactSet();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void update( const uuid_vec_t& buddies_uuids );
|
||||
void update();
|
||||
|
||||
LLAvatarList* getList() { return mAvatarList; }
|
||||
|
||||
void setTab(LLAccordionCtrlTab* tab);
|
||||
LLAccordionCtrlTab* getTab() { return mTab; }
|
||||
|
||||
void setName(std::string name);
|
||||
|
||||
void setHandleFriendsAll( bool handel_all ) { mHandleFriendsAll = handel_all; }
|
||||
|
||||
void setSortOrder( ESortOrder order );
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
|
||||
void onViewOptionChecked(LLSD::String param);
|
||||
bool isViewOptionChecked(LLSD::String param);
|
||||
bool isViewOptionEnabled(LLSD::String param);
|
||||
void forceUpdate();
|
||||
|
||||
LLAccordionCtrlTab* mTab;
|
||||
LLAvatarList* mAvatarList;
|
||||
LLMenuButton* mViewOptionMenuButton;
|
||||
LLToggleableMenu* mViewOptionMenu;
|
||||
LLTextBox* mInfoTextLabel;
|
||||
bool mShowOffline;
|
||||
bool mHandleFriendsAll;
|
||||
LLUUID mFriendSubFolderID;
|
||||
std::string mName;
|
||||
|
||||
// this contains all friends for this set
|
||||
uuid_vec_t mFriendsIDs;
|
||||
};
|
||||
|
||||
|
||||
class FSContactList : public LLPanel, public LLVoiceClientStatusObserver
|
||||
{
|
||||
LOG_CLASS(FSContactList);
|
||||
public:
|
||||
|
||||
FSContactList(const Params& p = LLPanel::Params());
|
||||
virtual ~FSContactList();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
bool isFriendsLoaded() { return mIsFriendsLoaded; }
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
typedef std::map<LLUUID, FSContactSet*> contact_set_map_t;
|
||||
contact_set_map_t mContactSets;
|
||||
|
||||
void onCreateContactSet();
|
||||
static void onContactSetCreate(const LLSD& notification, const LLSD& response);
|
||||
|
||||
FSContactSet* addContactSet(const LLUUID& sub_folder_ID, const std::string& set_name);
|
||||
FSContactSet* getConstactSet(const LLUUID& sub_folder_ID);
|
||||
FSContactSet* getOrCreateConstactSet(const LLUUID& sub_folder_ID);
|
||||
|
||||
FSContactSet* mAllFriendList;
|
||||
|
||||
public:
|
||||
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable call buttons
|
||||
// when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
// internals
|
||||
class Updater;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
// methods indirectly called by the updaters
|
||||
// void updateFriendListHelpText();
|
||||
void updateFriendList();
|
||||
void forceUpdate();
|
||||
|
||||
|
||||
|
||||
bool isItemsFreeOfFriends(const uuid_vec_t& uuids);
|
||||
|
||||
void updateButtons();
|
||||
LLUUID getCurrentItemID() const;
|
||||
void getCurrentItemIDs(uuid_vec_t& selected_uuids) const;
|
||||
void buttonSetEnabled(const std::string& btn_name, bool enabled);
|
||||
void buttonSetAction(const std::string& btn_name, const commit_signal_t::slot_type& cb);
|
||||
|
||||
|
||||
void onViewOptionChecked(LLSD::String param);
|
||||
bool isViewOptionChecked(LLSD::String param);
|
||||
// bool isViewOptionEnabled(LLSD::String param);
|
||||
void setSortOrder(ESortOrder order, bool save = true);
|
||||
|
||||
private:
|
||||
// UI callbacks
|
||||
// void onFilterEdit(const std::string& search_string);
|
||||
void onViewProfileButtonClicked();
|
||||
void onAddFriendWizButtonClicked();
|
||||
void onGlobalVisToggleButtonClicked();
|
||||
void onDeleteFriendButtonClicked();
|
||||
void onImButtonClicked();
|
||||
void onCallButtonClicked();
|
||||
void onTeleportButtonClicked();
|
||||
void onShareButtonClicked();
|
||||
void onAvatarListDoubleClicked(LLUICtrl* ctrl);
|
||||
void onAvatarListCommitted(LLAvatarList* list);
|
||||
|
||||
void showPermissions(bool visible);
|
||||
|
||||
// misc callbacks
|
||||
static void onAvatarPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
|
||||
|
||||
// void onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list);
|
||||
|
||||
// void showAccordion(const std::string name, bool show);
|
||||
|
||||
// void showFriendsAccordionsIfNeeded();
|
||||
|
||||
// void onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param);
|
||||
|
||||
// void setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed);
|
||||
// void setAccordionCollapsedByUser(const std::string& name, bool collapsed);
|
||||
// bool isAccordionCollapsedByUser(LLUICtrl* acc_tab);
|
||||
// bool isAccordionCollapsedByUser(const std::string& name);
|
||||
|
||||
void onFriendsLoaded();
|
||||
|
||||
LLHandle<LLView> mFriendsViewSortMenuHandle;
|
||||
|
||||
Updater* mFriendListUpdater;
|
||||
Updater* mButtonsUpdater;
|
||||
|
||||
LLMenuButton* mFriendsGearButton;
|
||||
|
||||
std::string mFilterSubString;
|
||||
std::string mFilterSubStringOrig;
|
||||
|
||||
LLMenuButton* mViewOptionMenuButton;
|
||||
LLToggleableMenu* mViewOptionMenu;
|
||||
LLAccordionCtrl* mAccordion;
|
||||
|
||||
bool mIsFriendsLoaded;
|
||||
};
|
||||
|
||||
|
||||
#endif // FS_FSCONTACTLIST_H
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file
|
||||
* @brief
|
||||
* @file fscontactsfloater.cpp
|
||||
* @brief Firestorm contacts floater
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
|
|
@ -36,6 +36,11 @@
|
|||
#include "llfloater.h"
|
||||
#include "lltabcontainer.h"
|
||||
|
||||
// #include "llaccordionctrl.h"
|
||||
// #include "llaccordionctrltab.h"
|
||||
// #include "llflatlistview.h"
|
||||
#include "fscontactlist.h"
|
||||
|
||||
#include "llavataractions.h"
|
||||
#include "llavatarlist.h"
|
||||
#include "llavatarlistitem.h"
|
||||
|
|
@ -81,6 +86,7 @@ protected:
|
|||
FSFloaterContacts* mFloater;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// FSFloaterContacts
|
||||
//
|
||||
|
|
@ -90,6 +96,8 @@ FSFloaterContacts::FSFloaterContacts(const LLSD& seed)
|
|||
mTabContainer(NULL),
|
||||
mObserver(NULL),
|
||||
mFriendsList(NULL),
|
||||
mContactsList(NULL),
|
||||
// mFriendsListAccordion(NULL),
|
||||
mGroupList(NULL),
|
||||
mAllowRightsChange(TRUE),
|
||||
mNumRightsChanged(0),
|
||||
|
|
@ -113,6 +121,9 @@ BOOL FSFloaterContacts::postBuild()
|
|||
{
|
||||
mTabContainer = getChild<LLTabContainer>("friends_and_groups");
|
||||
mFriendsTab = getChild<LLPanel>(FRIENDS_TAB_NAME);
|
||||
|
||||
//KC - incomplete
|
||||
mContactsList = mFriendsTab->findChild<FSContactList>("contacts_lists_panel");
|
||||
|
||||
mFriendsList = mFriendsTab->getChild<LLScrollListCtrl>("friend_list");
|
||||
mFriendsList->setMaxSelectable(MAX_FRIEND_SELECT);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file fscontactsfloater.h
|
||||
* @brief
|
||||
* @brief Firestorm contacts floater
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
|
|
@ -44,6 +44,7 @@ class LLGroupList;
|
|||
class LLRelationship;
|
||||
class LLPanel;
|
||||
class LLTabContainer;
|
||||
class FSContactList;
|
||||
|
||||
class FSFloaterContacts : public LLFloater
|
||||
{
|
||||
|
|
@ -131,6 +132,9 @@ private:
|
|||
void updateButtons();
|
||||
|
||||
LLTabContainer* mTabContainer;
|
||||
|
||||
FSContactList* mContactsList;
|
||||
// FSContactList* mFriendsListAccordion;
|
||||
|
||||
LLFriendObserver* mObserver;
|
||||
BOOL mAllowRightsChange;
|
||||
|
|
|
|||
|
|
@ -125,6 +125,29 @@ bool LLFindAgentCallingCard::operator()(LLInventoryCategory* cat, LLInventoryIte
|
|||
return mIsAgentCallingCardFound;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class LLFindAgentCallingCard
|
||||
*
|
||||
* An inventory collector functor for checking that agent's own calling card
|
||||
* exists within the Calling Cards category and its sub-folders.
|
||||
*/
|
||||
class LLFindFriendCallingCard : public LLInventoryCollectFunctor
|
||||
{
|
||||
public:
|
||||
LLFindFriendCallingCard() {}
|
||||
virtual ~LLFindFriendCallingCard() {}
|
||||
virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
|
||||
};
|
||||
|
||||
bool LLFindFriendCallingCard::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
{
|
||||
if (item && item->getType() == LLAssetType::AT_CALLINGCARD && item->getCreatorUUID() != gAgentID)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for fetching initial friend cards data
|
||||
*
|
||||
|
|
@ -322,6 +345,125 @@ void LLFriendCardsManager::syncFriendCardsFolders()
|
|||
}
|
||||
|
||||
|
||||
const LLUUID& LLFriendCardsManager::findFriendSubfolderUUID(const std::string& nonLocalizedName) const
|
||||
{
|
||||
LLUUID friendFolderUUID = findFriendFolderUUIDImpl();
|
||||
|
||||
return findChildFolderUUID(friendFolderUUID, nonLocalizedName);
|
||||
}
|
||||
|
||||
//Unused ast this time
|
||||
#if 0
|
||||
void LLFriendCardsManager::getOrCreateFriendSubfolder(LLUUID& sub_folder_ID, const std::string& nonLocalizedName, callback_t cb)
|
||||
{
|
||||
sub_folder_ID = findFriendSubfolderUUID(nonLocalizedName);
|
||||
|
||||
if (!sub_folder_ID.notNull())
|
||||
{
|
||||
LLUUID friends_folder_ID = findFriendFolderUUIDImpl();
|
||||
|
||||
if (!gInventory.isCategoryComplete(friends_folder_ID))
|
||||
{
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(friends_folder_ID);
|
||||
std::string cat_name = cat ? cat->getName() : "unknown";
|
||||
llwarns << "Failed to find \"" << cat_name << "\" category descendents in Category Tree." << llendl;
|
||||
}
|
||||
|
||||
sub_folder_ID = gInventory.createNewCategory(friends_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD, nonLocalizedName);
|
||||
}
|
||||
|
||||
if (sub_folder_ID.notNull())
|
||||
{
|
||||
fetchAndCheckFolderDescendents(sub_folder_ID, cb);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void LLFriendCardsManager::createFriendSubfolder(const std::string& nonLocalizedName)
|
||||
{
|
||||
LLUUID sub_folder_ID = findFriendSubfolderUUID(nonLocalizedName);
|
||||
|
||||
if (!sub_folder_ID.notNull())
|
||||
{
|
||||
LLUUID friends_folder_ID = findFriendFolderUUIDImpl();
|
||||
|
||||
if (!gInventory.isCategoryComplete(friends_folder_ID))
|
||||
{
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(friends_folder_ID);
|
||||
std::string cat_name = cat ? cat->getName() : "unknown";
|
||||
llwarns << "Failed to find \"" << cat_name << "\" category descendents in Category Tree." << llendl;
|
||||
}
|
||||
|
||||
sub_folder_ID = gInventory.createNewCategory(friends_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD, nonLocalizedName);
|
||||
}
|
||||
}
|
||||
|
||||
boost::signals2::connection LLFriendCardsManager::setFriendsDirLoadedCallback(const friends_loaded_signal_t::slot_type& cb)
|
||||
{
|
||||
return mFriendsLoadedSignal.connect(cb);
|
||||
}
|
||||
|
||||
//Unused at this time
|
||||
#if 0
|
||||
void LLFriendCardsManager::collectFriendSet(const LLUUID& sub_folder_ID, uuid_vec_t buddyUUIDs) const
|
||||
{
|
||||
LLInventoryModel::item_array_t* items;
|
||||
LLInventoryModel::cat_array_t* fakeCatsArg;
|
||||
LLInventoryModel::item_array_t::const_iterator itBuddy; // to iterate Buddies in each List
|
||||
|
||||
gInventory.getDirectDescendentsOf(sub_folder_ID, fakeCatsArg, items);
|
||||
|
||||
for (itBuddy = items->begin(); itBuddy != items->end(); ++itBuddy)
|
||||
{
|
||||
buddyUUIDs.push_back((*itBuddy)->getCreatorUUID());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBuddiesMap) const
|
||||
{
|
||||
folderBuddiesMap.clear();
|
||||
|
||||
LLInventoryModel::cat_array_t* listFolders;
|
||||
LLInventoryModel::item_array_t* fakeItems;
|
||||
|
||||
// get folders in the Friend folder. Items should be NULL due to Cards should be in lists.
|
||||
gInventory.getDirectDescendentsOf(findFriendFolderUUIDImpl(), listFolders, fakeItems);
|
||||
|
||||
if (NULL == listFolders)
|
||||
return;
|
||||
|
||||
LLInventoryModel::cat_array_t::const_iterator itCats; // to iterate Friend Lists (categories)
|
||||
LLInventoryModel::item_array_t::const_iterator itBuddy; // to iterate Buddies in each List
|
||||
|
||||
for (itCats = listFolders->begin(); itCats != listFolders->end(); ++itCats)
|
||||
{
|
||||
|
||||
// Everything but Friends/All content will collected here
|
||||
// Friends/All will be handled by LLAvatarTracker
|
||||
if ((*itCats)->getUUID() == findFriendAllSubfolderUUIDImpl())
|
||||
continue;
|
||||
|
||||
//NOTE* getDirectDescendentsOf is not used here as it was not returning all items most of the time.
|
||||
LLInventoryModel::cat_array_t fakeCatsArg;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLFindFriendCallingCard collector;
|
||||
gInventory.collectDescendentsIf((*itCats)->getUUID(), fakeCatsArg, items, LLInventoryModel::EXCLUDE_TRASH, collector);
|
||||
|
||||
uuid_vec_t buddyUUIDs;
|
||||
for (itBuddy = items.begin(); itBuddy != items.end(); ++itBuddy)
|
||||
{
|
||||
buddyUUIDs.push_back((*itBuddy)->getCreatorUUID());
|
||||
}
|
||||
|
||||
folderBuddiesMap.insert(make_pair((*itCats)->getUUID(), buddyUUIDs));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Private Methods */
|
||||
/************************************************************************/
|
||||
|
|
@ -513,6 +655,10 @@ void LLFriendCardsManager::syncFriendsFolder()
|
|||
const LLUUID& buddy_id = (*buddy_it).first;
|
||||
addFriendCardToInventory(buddy_id);
|
||||
}
|
||||
|
||||
mFriendsLoadedSignal();
|
||||
// This is a single-shot signal. Forget callbacks to save resources.
|
||||
mFriendsLoadedSignal.disconnect_all_slots();
|
||||
}
|
||||
|
||||
class CreateFriendCardCallback : public LLInventoryCallback
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#ifndef LL_LLFRIENDCARD_H
|
||||
#define LL_LLFRIENDCARD_H
|
||||
|
||||
#include <boost/signals2.hpp>
|
||||
|
||||
#include "llcallingcard.h"
|
||||
#include "llinventorymodel.h" // for LLInventoryModel::item_array_t
|
||||
|
|
@ -44,6 +45,8 @@ class LLFriendCardsManager
|
|||
|
||||
public:
|
||||
typedef std::map<LLUUID, uuid_vec_t > folderid_buddies_map_t;
|
||||
typedef boost::function<void()> callback_t;
|
||||
typedef boost::signals2::signal<void()> friends_loaded_signal_t;
|
||||
|
||||
// LLFriendObserver implementation
|
||||
void changed(U32 mask)
|
||||
|
|
@ -78,9 +81,29 @@ public:
|
|||
* (creates them otherwise) and fetches their contents to synchronize with Agent's Friends List.
|
||||
*/
|
||||
void syncFriendCardsFolders();
|
||||
|
||||
|
||||
const LLUUID& findFriendSubfolderUUID(const std::string& nonLocalizedName) const;
|
||||
// void getOrCreateFriendSubfolder(LLUUID& sub_folder_ID, const std::string& nonLocalizedName, callback_t cb);
|
||||
void createFriendSubfolder(const std::string& nonLocalizedName);
|
||||
boost::signals2::connection setFriendsDirLoadedCallback(const friends_loaded_signal_t::slot_type& cb);
|
||||
//void collectFriendSet(const LLUUID& sub_folder_ID, uuid_vec_t buddyUUIDs) const;
|
||||
|
||||
/*!
|
||||
* \brief
|
||||
* Collects folders' IDs with the buddies' IDs in the Inventory Calling Card/Friends folder.
|
||||
*
|
||||
* \param folderBuddiesMap
|
||||
* map into collected data will be put. It will be cleared before adding new data.
|
||||
*
|
||||
* Each item in the out map is a pair where first is an LLViewerInventoryCategory UUID,
|
||||
* second is a vector with UUID of Avatars from this folder.
|
||||
*
|
||||
* NOTE* Friends/All is excluded in folderBuddiesMap, LLAvatarTracker should be used instead
|
||||
*/
|
||||
void collectFriendsLists(folderid_buddies_map_t& folderBuddiesMap) const;
|
||||
|
||||
private:
|
||||
typedef boost::function<void()> callback_t;
|
||||
|
||||
LLFriendCardsManager();
|
||||
~LLFriendCardsManager();
|
||||
|
|
@ -144,6 +167,8 @@ private:
|
|||
typedef std::set<LLUUID> avatar_uuid_set_t;
|
||||
|
||||
avatar_uuid_set_t mBuddyIDSet;
|
||||
|
||||
friends_loaded_signal_t mFriendsLoadedSignal;
|
||||
};
|
||||
|
||||
#endif // LL_LLFRIENDCARD_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<!-- *NOTE: this xml is intended to be used inside panel_contact_list.xml for each contact set-->
|
||||
<!-- All accordion tabs in the Friends/Contacts list panel will be created from this one at runtime-->
|
||||
<!-- Non of string values of controls below are visible to user. They are not need to be translated. -->
|
||||
<accordion_tab
|
||||
height="80"
|
||||
width="0"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="contact_tab"
|
||||
selection_enabled="true"
|
||||
tab_stop="false"
|
||||
title="Mockup Tab"
|
||||
translate="false">
|
||||
<!--
|
||||
<flat_list_view
|
||||
allow_select="true"
|
||||
item_pad="3"
|
||||
follows="all"
|
||||
multi_select="true"
|
||||
keep_selection_visible_on_reshape="true"
|
||||
name="contact_set_list"
|
||||
translate="false"
|
||||
standalone="false">
|
||||
<flat_list_view.no_items_text
|
||||
value="No contacts to show" />
|
||||
</flat_list_view>
|
||||
<string
|
||||
name="no_friends"
|
||||
value="No friends" />
|
||||
-->
|
||||
<!-- <panel
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="contact_list_set"
|
||||
filename="panel_contact_list_set.xml" /> -->
|
||||
</accordion_tab>
|
||||
|
|
@ -25,21 +25,21 @@
|
|||
name="no_groups_msg"
|
||||
value="Looking for Groups to join? Try [secondlife:///app/search/groups Search]." />
|
||||
<tab_container
|
||||
top="1"
|
||||
bottom="-1"
|
||||
left="1"
|
||||
right="-1"
|
||||
follows="all"
|
||||
height="390"
|
||||
layout="topleft"
|
||||
left="4"
|
||||
name="friends_and_groups"
|
||||
tab_position="top"
|
||||
tab_width="80"
|
||||
tab_max_width = "80"
|
||||
tab_max_width = "120"
|
||||
tab_height="20"
|
||||
use_custom_icon_ctrl="false"
|
||||
tab_icon_ctrl_pad="2"
|
||||
halign="left"
|
||||
use_ellipses="true"
|
||||
top="0"
|
||||
width="393">
|
||||
use_ellipses="true">
|
||||
<first_tab
|
||||
tab_bottom_image_flash="Toolbar_Left_Flash"/>
|
||||
<middle_tab
|
||||
|
|
@ -47,6 +47,14 @@
|
|||
<last_tab
|
||||
tab_bottom_image_flash="Toolbar_Right_Flash"/>
|
||||
|
||||
<panel
|
||||
bottom="0"
|
||||
filename="panel_fs_contacts_lists.xml"
|
||||
label="Friends & Contacts"
|
||||
left="0"
|
||||
right="-1"
|
||||
name="contacts_lists_panel" />
|
||||
|
||||
<panel
|
||||
bottom="0"
|
||||
filename="panel_fs_contacts_friends.xml"
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@
|
|||
/>
|
||||
<font_size name="Large"
|
||||
comment="Size of large font (points, or 1/72 of an inch)"
|
||||
size="12.0"
|
||||
size="11.0"
|
||||
/>
|
||||
<font_size name="Medium"
|
||||
comment="Size of medium font (points, or 1/72 of an inch)"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<toggleable_menu
|
||||
bottom="806"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
mouse_opaque="false"
|
||||
name="menu_contact_list_sort_gear"
|
||||
visible="false">
|
||||
|
||||
<menu_item_check
|
||||
label="Sort By Status & Display Name"
|
||||
layout="topleft"
|
||||
name="sortby_name">
|
||||
<on_click
|
||||
function="ContactList.ViewOption.Action"
|
||||
parameter="sortby_statusname" />
|
||||
<on_check
|
||||
function="ContactList.ViewOption.Check"
|
||||
parameter="sortby_statusname" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Sort By Status & User Name"
|
||||
layout="topleft"
|
||||
name="sortby_statususername">
|
||||
<on_click
|
||||
function="ContactList.ViewOption.Action"
|
||||
parameter="sortby_statususername" />
|
||||
<on_check
|
||||
function="ContactList.ViewOption.Check"
|
||||
parameter="sortby_statususername" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Sort By Display Name"
|
||||
layout="topleft"
|
||||
name="sortby_name">
|
||||
<on_click
|
||||
function="ContactList.ViewOption.Action"
|
||||
parameter="sortby_name" />
|
||||
<on_check
|
||||
function="ContactList.ViewOption.Check"
|
||||
parameter="sortby_name" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Sort By User Name"
|
||||
layout="topleft"
|
||||
name="sortby_username">
|
||||
<on_click
|
||||
function="ContactList.ViewOption.Action"
|
||||
parameter="sortby_username" />
|
||||
<on_check
|
||||
function="ContactList.ViewOption.Check"
|
||||
parameter="sortby_username" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_separator layout="topleft" />
|
||||
|
||||
<menu_item_check name="view_icons" label="View People Icons">
|
||||
|
||||
<menu_item_check.on_click
|
||||
function="ContactList.ViewOption.Action"
|
||||
parameter="view_icons" />
|
||||
<menu_item_check.on_check
|
||||
function="CheckControl"
|
||||
parameter="FriendsListShowIcons" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check name="view_permissions" label="View Permissions Granted">
|
||||
<menu_item_check.on_click
|
||||
function="ContactList.ViewOption.Action"
|
||||
parameter="view_permissions" />
|
||||
<menu_item_check.on_check
|
||||
function="CheckControl"
|
||||
parameter="FriendsListShowPermissions" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_separator layout="topleft" />
|
||||
|
||||
<menu_item_call name="show_blocked_list" label="Show Blocked Residents & Objects">
|
||||
<menu_item_call.on_click
|
||||
function="SideTray.ShowPanel"
|
||||
parameter="panel_block_list_sidetray" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_separator layout="topleft" />
|
||||
|
||||
<menu_item_call name="create_set" label="Create New Contact Set">
|
||||
<menu_item_call.on_click
|
||||
function="ContactList.CreateSet.Action" />
|
||||
<menu_item_call.on_enable
|
||||
function="ContactList.CreateSet.Enabled" />
|
||||
</menu_item_call>
|
||||
|
||||
</toggleable_menu>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<toggleable_menu
|
||||
bottom="806"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
mouse_opaque="false"
|
||||
name="menu_contact_set_gear"
|
||||
visible="false">
|
||||
<menu_item_check
|
||||
label="Show Offline"
|
||||
layout="topleft"
|
||||
name="show_offline">
|
||||
<on_click
|
||||
function="ContactSet.ViewOption.Action"
|
||||
parameter="show_offline" />
|
||||
<on_check
|
||||
function="ContactSet.ViewOption.Check"
|
||||
parameter="show_offline" />
|
||||
<on_enable
|
||||
function="ContactSet.ViewOption.Enabled"
|
||||
parameter="show_offline" />
|
||||
</menu_item_check>
|
||||
</toggleable_menu>
|
||||
|
|
@ -8339,6 +8339,25 @@ Could not add [GRID] to the grid list.
|
|||
You may remove this name by right clicking the name and choosing Remove Alias.
|
||||
</notification>
|
||||
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
label="Create Contact Set"
|
||||
name="CreateContactSet"
|
||||
type="alertmodal">
|
||||
New contact set name:
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<input name="new_name" type="text" width="300" />
|
||||
<button
|
||||
default="true"
|
||||
index="0"
|
||||
name="OK"
|
||||
text="OK"/>
|
||||
<button
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
</notifications>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,372 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
width="550"
|
||||
height="600"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="contact_list" >
|
||||
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
<layout_stack
|
||||
top="3"
|
||||
left="4"
|
||||
right="-4"
|
||||
height="20"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
enabled="true"
|
||||
mouse_opaque="true"
|
||||
name="stack"
|
||||
orientation="horizontal">
|
||||
|
||||
<layout_panel
|
||||
name="panel_zoom"
|
||||
can_resize="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="16">
|
||||
<button
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="icon_online_status"
|
||||
tool_tip="Online status"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Contacts_Online_Status_Button" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_rotate"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20" >
|
||||
<button
|
||||
top="0"
|
||||
height="18"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
label="Username"
|
||||
name="sort_user_name"
|
||||
tool_tip="Offer friendship to a resident" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_rotate"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="30" >
|
||||
<button
|
||||
top="0"
|
||||
height="18"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
label="Display Name"
|
||||
name="sort_display_name"
|
||||
tool_tip="Offer friendship to a resident" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_zoom"
|
||||
can_resize="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="98">
|
||||
<button
|
||||
top="0"
|
||||
right="-80"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_visible_online"
|
||||
tool_tip="Friend can see when you're online"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Visible_Online_Mine_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-60"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_visible_map"
|
||||
tool_tip="Friend can locate you on the map"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Visible_Map_Mine_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-40"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_edit_mine"
|
||||
tool_tip="Friend can edit, delete or take objects"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Edit_Objects_Mine_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-20"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_visible_map_theirs"
|
||||
tool_tip="You can locate them on the map"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Visible_Map_Theirs_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-1"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_edit_theirs"
|
||||
tool_tip="You can edit this friend's objects"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Edit_Objects_Theirs_Button" />
|
||||
|
||||
<menu_button
|
||||
top="1"
|
||||
right="-2"
|
||||
height="18"
|
||||
width="25"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
image_hover_unselected="Toolbar_Left_Over"
|
||||
image_overlay="OptionsMenu_Off"
|
||||
image_selected="Toolbar_Left_Selected"
|
||||
image_unselected="Toolbar_Left_Off"
|
||||
name="sort_options_gear_btn"
|
||||
tool_tip="Sort Options" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
-->
|
||||
<panel
|
||||
top="0"
|
||||
left="1"
|
||||
right="-1"
|
||||
bottom="-28"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="contact_list_wrap"
|
||||
bevel_style="in"
|
||||
border="true" >
|
||||
|
||||
<accordion
|
||||
top="0"
|
||||
left="0"
|
||||
right="-1"
|
||||
bottom="-1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="accordion_list"
|
||||
no_matched_tabs_text.value="Overridden text" >
|
||||
|
||||
<!-- <accordion_tab
|
||||
height="80"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="contact_tab_all"
|
||||
selection_enabled="true"
|
||||
tab_stop="false"
|
||||
title="All"
|
||||
translate="false">
|
||||
<panel
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="contact_list_set_all"
|
||||
filename="panel_contact_list_set.xml" />
|
||||
</accordion_tab> -->
|
||||
|
||||
<!--
|
||||
<accordion_tab
|
||||
follows="all"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
name="contact_tab_online"
|
||||
selection_enabled="true"
|
||||
tab_stop="false"
|
||||
title="Online"
|
||||
translate="false"
|
||||
width="0">
|
||||
<contact_list_set
|
||||
follows="all"
|
||||
name="contact_list_set_online" />
|
||||
</accordion_tab>
|
||||
-->
|
||||
|
||||
</accordion>
|
||||
|
||||
</panel>
|
||||
|
||||
<panel
|
||||
bottom="-1"
|
||||
left="3"
|
||||
right="-3"
|
||||
height="24"
|
||||
background_visible="true"
|
||||
follows="left|right|bottom"
|
||||
label="button_bar"
|
||||
layout="topleft"
|
||||
name="button_bar">
|
||||
|
||||
<menu_button
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="31"
|
||||
follows="bottom|left"
|
||||
layout="topleft"
|
||||
tool_tip="Show additional options"
|
||||
image_hover_unselected="Toolbar_Left_Over"
|
||||
image_overlay="OptionsMenu_Off"
|
||||
image_selected="Toolbar_Left_Selected"
|
||||
image_unselected="Toolbar_Left_Off"
|
||||
name="sort_options_gear_btn" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="31"
|
||||
follows="bottom|left"
|
||||
layout="topleft"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="AddItem_Off"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
name="add_btn"
|
||||
tool_tip="Offer friendship to a Resident" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="67"
|
||||
follows="bottom|left"
|
||||
label="Profile"
|
||||
layout="topleft"
|
||||
name="view_profile_btn"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
tool_tip="Show picture, groups, and other Residents information" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
width="40"
|
||||
height="23"
|
||||
follows="bottom|left"
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="im_btn"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
tool_tip="Open instant message session" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="51"
|
||||
follows="bottom|left"
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
name="call_btn"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
tool_tip="Call this Resident" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="65"
|
||||
follows="bottom|left"
|
||||
label="Share"
|
||||
layout="topleft"
|
||||
name="share_btn"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
tool_tip="Share an inventory item" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="76"
|
||||
follows="bottom|left"
|
||||
label="Teleport"
|
||||
layout="topleft"
|
||||
name="teleport_btn"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
tool_tip="Offer teleport" />
|
||||
|
||||
|
||||
<dnd_button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="31"
|
||||
follows="bottom|left"
|
||||
image_hover_unselected="Toolbar_Right_Over"
|
||||
image_overlay="TrashItem_Off"
|
||||
image_selected="Toolbar_Right_Selected"
|
||||
image_unselected="Toolbar_Right_Off"
|
||||
layout="topleft"
|
||||
name="del_btn"
|
||||
tool_tip="Remove selected person from your Friends list"/>
|
||||
|
||||
<button
|
||||
top="0"
|
||||
left_pad="2"
|
||||
height="23"
|
||||
width="31"
|
||||
follows="bottom|left"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="Permission_Visible_Online"
|
||||
image_pressed="PushButton_Press"
|
||||
image_pressed_selected="PushButton_Selected_Press"
|
||||
image_selected="PushButton_Selected_Press"
|
||||
control_name="GlobalOnlineStatusToggle"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
name="GlobalOnlineStatusToggle"
|
||||
tool_tip="Toggle Global Visibility" />
|
||||
|
||||
<icon
|
||||
top="0"
|
||||
left_pad="2"
|
||||
right="-1"
|
||||
height="23"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
image_name="Toolbar_Middle_Off"
|
||||
name="dummy_icon" />
|
||||
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
class="contact_set"
|
||||
name="contact_list_set"
|
||||
bevel_style="in"
|
||||
border="true" >
|
||||
|
||||
<string
|
||||
name="no_friends_online"
|
||||
value="No friends online" />
|
||||
<string
|
||||
name="no_friends"
|
||||
value="No friends to show or loading..." />
|
||||
<string
|
||||
name="no_friends_msg">
|
||||
Find friends using [secondlife:///app/search/people Search] or right-click on a Resident to add them as a friend.
|
||||
Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests.
|
||||
</string>
|
||||
<string
|
||||
name="no_filtered_friends_msg">
|
||||
Didn't find what you're looking for? Try [secondlife:///app/search/people/[SEARCH_TERM] Search].
|
||||
</string>
|
||||
<string
|
||||
name="showing_offline"
|
||||
value="Showing All" />
|
||||
<string
|
||||
name="hiding_offline"
|
||||
value="Offline Contacts Hidden" />
|
||||
|
||||
|
||||
<!--<button
|
||||
top="-15"
|
||||
right="-5"
|
||||
height="20"
|
||||
width="80"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="hide_offline_button"
|
||||
tool_tip="Online status"
|
||||
label="Hide Offline" />-->
|
||||
|
||||
<text
|
||||
top="2"
|
||||
left="3"
|
||||
right="-35"
|
||||
height="18"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
type="string"
|
||||
halign="right"
|
||||
length="1"
|
||||
name="list_info_text">
|
||||
Test info line. Unused at this time.
|
||||
</text>
|
||||
|
||||
<menu_button
|
||||
top="1"
|
||||
right="-2"
|
||||
height="18"
|
||||
width="25"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
image_hover_unselected="Toolbar_Left_Over"
|
||||
image_overlay="OptionsMenu_Off"
|
||||
image_selected="Toolbar_Left_Selected"
|
||||
image_unselected="Toolbar_Left_Off"
|
||||
name="options_gear_btn"
|
||||
tool_tip="Options" />
|
||||
|
||||
|
||||
<avatar_list
|
||||
top="20"
|
||||
left="0"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="avatar_list"
|
||||
allow_select="true"
|
||||
multi_select="true"
|
||||
show_permissions_granted="true"
|
||||
magical_hacky_height_padding="20" />
|
||||
|
||||
</panel>
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
height="300"
|
||||
width="550"
|
||||
height="600"
|
||||
layout="topleft"
|
||||
mouse_opaque="true"
|
||||
name="friends"
|
||||
width="350">
|
||||
follows="all">
|
||||
<!--
|
||||
<view_border
|
||||
top="-9"
|
||||
|
|
@ -25,11 +26,230 @@
|
|||
top="-10"
|
||||
width="240" />
|
||||
-->
|
||||
<!--
|
||||
<contact_list
|
||||
top="5"
|
||||
left="4"
|
||||
right="-95"
|
||||
bottom="-69"
|
||||
follows="all"
|
||||
name="contact_list" />
|
||||
-->
|
||||
<!-- <panel
|
||||
top="5"
|
||||
left="4"
|
||||
right="-95"
|
||||
bottom="-69"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
class="contact_list"
|
||||
filename="panel_contact_list.xml"
|
||||
name="contacts_lists" /> -->
|
||||
|
||||
<!--
|
||||
<panel
|
||||
top="5"
|
||||
left="4"
|
||||
right="-95"
|
||||
bottom="-69"
|
||||
follows="all"
|
||||
bevel_style="in"
|
||||
bg_alpha_color="Transparent"
|
||||
bg_opaque_color="Black_25"
|
||||
border="true"
|
||||
layout="topleft"
|
||||
name="vlt_panel">
|
||||
|
||||
<layout_stack
|
||||
top="3"
|
||||
left="4"
|
||||
right="-4"
|
||||
height="20"
|
||||
follows="top|left|right"
|
||||
enabled="true"
|
||||
mouse_opaque="true"
|
||||
name="stack"
|
||||
orientation="horizontal">
|
||||
|
||||
<layout_panel
|
||||
name="panel_zoom"
|
||||
can_resize="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
height="20"
|
||||
width="16">
|
||||
<button
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="icon_online_status"
|
||||
tool_tip="Online status"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Contacts_Online_Status_Button" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_rotate"
|
||||
user_resize="false"
|
||||
height="20"
|
||||
width="20" >
|
||||
<button
|
||||
top="0"
|
||||
height="18"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
label="Username"
|
||||
name="user_name"
|
||||
tool_tip="Offer friendship to a resident" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_rotate"
|
||||
user_resize="false"
|
||||
height="20"
|
||||
width="30" >
|
||||
<button
|
||||
top="0"
|
||||
height="18"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
label="Display Name"
|
||||
name="full_name"
|
||||
tool_tip="Offer friendship to a resident" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_zoom"
|
||||
can_resize="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
height="20"
|
||||
width="98">
|
||||
<button
|
||||
top="0"
|
||||
right="-80"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_visible_online"
|
||||
tool_tip="Friend can see when you're online"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Visible_Online_Mine_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-60"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_visible_map"
|
||||
tool_tip="Friend can locate you on the map"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Visible_Map_Mine_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-40"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_edit_mine"
|
||||
tool_tip="Friend can edit, delete or take objects"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Edit_Objects_Mine_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-20"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_visible_map_theirs"
|
||||
tool_tip="You can locate them on the map"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Visible_Map_Theirs_Button" />
|
||||
|
||||
<button
|
||||
top="0"
|
||||
right="-1"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
name="icon_edit_theirs"
|
||||
tool_tip="You can edit this friend's objects"
|
||||
hover_glow_amount="0.15"
|
||||
image_unselected="Permission_Edit_Objects_Theirs_Button" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
||||
<panel
|
||||
top="22"
|
||||
left="2"
|
||||
right="-1"
|
||||
bottom="-1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="vlt_panel">
|
||||
|
||||
<contact_list
|
||||
top="0"
|
||||
left="0"
|
||||
right="-1"
|
||||
bottom="-1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="friends_accordion"
|
||||
no_matched_tabs_text.value="Overridden text" >
|
||||
<accordion_tab
|
||||
follows="all"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
name="contact_tab_all"
|
||||
selection_enabled="true"
|
||||
tab_stop="false"
|
||||
title="All"
|
||||
translate="false"
|
||||
width="0">
|
||||
<contact_list_set
|
||||
follows="all"
|
||||
name="contact_list_set_all" />
|
||||
</accordion_tab>
|
||||
|
||||
<accordion_tab
|
||||
follows="all"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
name="contact_tab_online"
|
||||
selection_enabled="true"
|
||||
tab_stop="false"
|
||||
title="Online"
|
||||
translate="false"
|
||||
width="0">
|
||||
<contact_list_set
|
||||
follows="all"
|
||||
name="contact_list_set_online" />
|
||||
</accordion_tab>
|
||||
|
||||
</contact_list>
|
||||
</panel>
|
||||
</panel>
|
||||
-->
|
||||
|
||||
|
||||
<scroll_list
|
||||
top="5"
|
||||
left="4"
|
||||
right="-100"
|
||||
top="10"
|
||||
bottom="-10"
|
||||
bottom="-5"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
column_padding="0"
|
||||
|
|
@ -82,6 +302,9 @@
|
|||
name="friend_last_update_generation"
|
||||
width="0" />
|
||||
</scroll_list>
|
||||
|
||||
|
||||
|
||||
<button
|
||||
top="10"
|
||||
follows="top|right"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
width="550"
|
||||
height="600"
|
||||
layout="topleft"
|
||||
mouse_opaque="true"
|
||||
name="contacts"
|
||||
follows="all">
|
||||
|
||||
<panel
|
||||
top="5"
|
||||
left="4"
|
||||
right="-4"
|
||||
bottom="-2"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
class="contact_list"
|
||||
filename="panel_contact_list.xml"
|
||||
name="contacts_lists" />
|
||||
|
||||
</panel>
|
||||
Loading…
Reference in New Issue