summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelavatar.cpp
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2009-06-21 08:04:56 +0000
committerSteven Bennetts <steve@lindenlab.com>2009-06-21 08:04:56 +0000
commit9ec432034dc3c45d7ce763eb02dae4cc7f6b8da8 (patch)
tree4a505c1e0919af52800b3ffb3eaf135e7d6f9ce6 /indra/newview/llpanelavatar.cpp
parent351ebe9fcb76f3b99c2957004bb8493a904869ee (diff)
merge -r 122421-124917 viewer-2.0.0-2 -> viewer-2.0.0-3
ignore-dead-branch
Diffstat (limited to 'indra/newview/llpanelavatar.cpp')
-rw-r--r--indra/newview/llpanelavatar.cpp2346
1 files changed, 354 insertions, 1992 deletions
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 9d5a4ad01c..d7929cc5c2 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -34,58 +34,17 @@
#include "llpanelavatar.h"
-#include "llclassifiedflags.h"
-#include "llfontgl.h"
-#include "llcachename.h"
-
-#include "llavatarconstants.h"
-#include "lluiconstants.h"
-#include "lltextbox.h"
-#include "llviewertexteditor.h"
-#include "lltexturectrl.h"
#include "llagent.h"
-#include "llviewerwindow.h"
-#include "llbutton.h"
+#include "llavatarconstants.h"
#include "llcallingcard.h"
-#include "llcheckboxctrl.h"
-#include "llfloater.h"
-
-#include "llfloaterfriends.h"
-#include "llfloatergroupinfo.h"
-#include "llfloaterworldmap.h"
-#include "llfloatermute.h"
-#include "llfloateravatarinfo.h"
-#include "lliconctrl.h"
-#include "llinventoryview.h"
-#include "lllineeditor.h"
-#include "llnameeditor.h"
-#include "llmutelist.h"
-#include "llpanelclassified.h"
-#include "llpanelpick.h"
-#include "llscrolllistctrl.h"
-#include "llstatusbar.h"
-#include "lltabcontainer.h"
-#include "lltabcontainervertical.h"
+#include "llcombobox.h"
+#include "llfriendactions.h"
#include "llimview.h"
+#include "lltexteditor.h"
+#include "lltexturectrl.h"
#include "lltooldraganddrop.h"
-#include "lluiconstants.h"
-#include "llvoavatar.h"
-#include "llviewercontrol.h"
#include "llviewermenu.h" // *FIX: for is_agent_friend()
-#include "llviewergenericmessage.h" // send_generic_message
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llweb.h"
-#include "llinventorymodel.h"
-#include "roles_constants.h"
-#include "lluictrlfactory.h"
-
-// Statics
-std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels;
-BOOL LLPanelAvatar::sAllowFirstLife = FALSE;
-
-extern void handle_lure(const LLUUID& invitee);
-extern void handle_pay_by_id(const LLUUID& payee);
+#include "llscrollcontainer.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLDropTarget
@@ -98,7 +57,17 @@ extern void handle_pay_by_id(const LLUUID& payee);
class LLDropTarget : public LLView
{
public:
- LLDropTarget(const std::string& name, const LLRect& rect, const LLUUID& agent_id);
+ struct Params : public LLInitParam::Block<Params, LLView::Params>
+ {
+ Optional<LLUUID> agent_id;
+ Params()
+ {
+ mouse_opaque(false);
+ follows.flags(FOLLOWS_ALL);
+ }
+ };
+
+ LLDropTarget(const Params&);
~LLDropTarget();
void doDrop(EDragAndDropType cargo_type, void* cargo_data);
@@ -115,17 +84,13 @@ protected:
LLUUID mAgentID;
};
-
-LLDropTarget::LLDropTarget(const std::string& name, const LLRect& rect,
- const LLUUID& agent_id) :
- LLView(name, rect, NOT_MOUSE_OPAQUE, FOLLOWS_ALL),
- mAgentID(agent_id)
-{
-}
+LLDropTarget::LLDropTarget(const LLDropTarget::Params& p)
+: LLView(p),
+ mAgentID(p.agent_id)
+{}
LLDropTarget::~LLDropTarget()
-{
-}
+{}
void LLDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
{
@@ -149,2156 +114,553 @@ BOOL LLDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
return FALSE;
}
+static LLDefaultWidgetRegistry::Register<LLDropTarget> r("drop_target");
+//////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
-// LLPanelAvatarTab()
-//-----------------------------------------------------------------------------
-LLPanelAvatarTab::LLPanelAvatarTab(const std::string& name, const LLRect &rect,
- LLPanelAvatar* panel_avatar)
-: LLPanel(name, rect),
- mPanelAvatar(panel_avatar),
- mDataRequested(false)
-{ }
-
-// virtual
-void LLPanelAvatarTab::draw()
-{
- refresh();
-
- LLPanel::draw();
-}
-
-void LLPanelAvatarTab::sendAvatarProfileRequestIfNeeded(const std::string& method)
-{
- if (!mDataRequested)
- {
- std::vector<std::string> strings;
- strings.push_back( mPanelAvatar->getAvatarID().asString() );
- send_generic_message(method, strings);
- mDataRequested = true;
- }
-}
-
-//-----------------------------------------------------------------------------
-// LLPanelAvatarSecondLife()
+// LLPanelProfileTab()
//-----------------------------------------------------------------------------
-LLPanelAvatarSecondLife::LLPanelAvatarSecondLife(const std::string& name,
- const LLRect &rect,
- LLPanelAvatar* panel_avatar )
-: LLPanelAvatarTab(name, rect, panel_avatar),
- mPartnerID()
+//////////////////////////////////////////////////////////////////////////
+LLPanelProfileTab::LLPanelProfileTab(const LLUUID& avatar_id)
+ : LLPanel()
+ , mAvatarId(LLUUID::null)
+ , mProfileType(PT_UNKNOWN)
{
+ setAvatarId(avatar_id);
}
-void LLPanelAvatarSecondLife::refresh()
+LLPanelProfileTab::LLPanelProfileTab(const Params& params )
+ : LLPanel()
+ , mAvatarId(LLUUID::null)
+ , mProfileType(PT_UNKNOWN)
{
- updatePartnerName();
-}
-void LLPanelAvatarSecondLife::updatePartnerName()
-{
- if (mPartnerID.notNull())
- {
- std::string first, last;
- BOOL found = gCacheName->getName(mPartnerID, first, last);
- if (found)
- {
- childSetTextArg("partner_edit", "[FIRST]", first);
- childSetTextArg("partner_edit", "[LAST]", last);
- }
- childSetEnabled("partner_info", TRUE);
- }
}
-//-----------------------------------------------------------------------------
-// clearControls()
-// Empty the data out of the controls, since we have to wait for new
-// data off the network.
-//-----------------------------------------------------------------------------
-void LLPanelAvatarSecondLife::clearControls()
+LLPanelProfileTab::~LLPanelProfileTab()
{
- LLTextureCtrl* image_ctrl = getChild<LLTextureCtrl>("img");
- if(image_ctrl)
+ // *TODO Vadim: use notNull() instead. (there are several similar cases below)
+ if(mAvatarId.notNull())
{
- image_ctrl->setImageAssetID(LLUUID::null);
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
- childSetValue("about", "");
- childSetValue("born", "");
- childSetValue("acct", "");
-
- childSetTextArg("partner_edit", "[FIRST]", LLStringUtil::null);
- childSetTextArg("partner_edit", "[LAST]", LLStringUtil::null);
-
- mPartnerID = LLUUID::null;
-
- LLScrollListCtrl* group_list = getChild<LLScrollListCtrl>("groups");
- if(group_list)
- {
- group_list->deleteAllItems();
- }
- LLScrollListCtrl* ratings_list = getChild<LLScrollListCtrl>("ratings");
- if(ratings_list)
- {
- ratings_list->deleteAllItems();
- }
-
}
-
-//-----------------------------------------------------------------------------
-// enableControls()
-//-----------------------------------------------------------------------------
-void LLPanelAvatarSecondLife::enableControls(BOOL self)
+void LLPanelProfileTab::setAvatarId(const LLUUID& avatar_id)
{
- childSetEnabled("img", self);
- childSetEnabled("about", self);
- childSetVisible("allow_publish", self);
- childSetEnabled("allow_publish", self);
- childSetVisible("?", self);
- childSetEnabled("?", self);
-}
-
-
-// static
-void LLPanelAvatarSecondLife::onClickImage(void *)
-{ }
-
-// static
-void LLPanelAvatarSecondLife::onDoubleClickGroup(void* data)
-{
- LLPanelAvatarSecondLife* self = (LLPanelAvatarSecondLife*)data;
-
-
- LLScrollListCtrl* group_list = self->getChild<LLScrollListCtrl>("groups");
- if(group_list)
+ if(avatar_id.notNull())
{
- LLScrollListItem* item = group_list->getFirstSelected();
-
- if(item && item->getUUID().notNull())
+ if(mAvatarId.notNull())
{
- llinfos << "Show group info " << item->getUUID() << llendl;
-
- LLFloaterGroupInfo::showFromUUID(item->getUUID());
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId,this);
}
+ mAvatarId = avatar_id;
+ LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(),this);
+ setProfileType();
}
}
-// static
-void LLPanelAvatarSecondLife::onClickPublishHelp(void *)
+void LLPanelProfileTab::setProfileType()
{
- LLNotifications::instance().add("ClickPublishHelpAvatar");
+ mProfileType = (gAgentID == mAvatarId) ? PT_OWN : PT_OTHER;
}
-// static
-void LLPanelAvatarSecondLife::onClickPartnerHelp(void *)
+void LLPanelProfileTab::onActivate(const LLUUID& id)
{
- LLNotifications::instance().add("ClickPartnerHelpAvatar", LLSD(), LLSD(), onClickPartnerHelpLoadURL);
+ setAvatarId(id);
+ updateData();
}
-// static
-bool LLPanelAvatarSecondLife::onClickPartnerHelpLoadURL(const LLSD& notification, const LLSD& response)
+void LLPanelProfileTab::onAddFriend()
{
- S32 option = LLNotification::getSelectedOption(notification, response);
- if (option == 0)
+ if (getAvatarId().notNull())
{
- LLWeb::loadURL("http://secondlife.com/partner");
+ std::string name;
+ gCacheName->getFullName(getAvatarId(),name);
+ LLFriendActions::requestFriendshipDialog(getAvatarId(), name);
}
- return false;
}
-// static
-void LLPanelAvatarSecondLife::onClickPartnerInfo(void *data)
+void LLPanelProfileTab::onIM()
{
- LLPanelAvatarSecondLife* self = (LLPanelAvatarSecondLife*) data;
- if (self->mPartnerID.notNull())
+ if (getAvatarId().notNull())
{
- LLFloaterAvatarInfo::showFromProfile(self->mPartnerID,
- self->getScreenRect());
+ std::string name;
+ gCacheName->getFullName(getAvatarId(), name);
+ gIMMgr->addSession(name, IM_NOTHING_SPECIAL, getAvatarId());
}
}
-//-----------------------------------------------------------------------------
-// LLPanelAvatarFirstLife()
-//-----------------------------------------------------------------------------
-LLPanelAvatarFirstLife::LLPanelAvatarFirstLife(const std::string& name,
- const LLRect &rect,
- LLPanelAvatar* panel_avatar )
-: LLPanelAvatarTab(name, rect, panel_avatar)
-{
-}
-
-void LLPanelAvatarFirstLife::enableControls(BOOL self)
-{
- childSetEnabled("img", self);
- childSetEnabled("about", self);
-}
-
-//-----------------------------------------------------------------------------
-// postBuild
-//-----------------------------------------------------------------------------
-
-BOOL LLPanelAvatarSecondLife::postBuild(void)
-{
- childSetEnabled("born", FALSE);
- childSetEnabled("partner_edit", FALSE);
- childSetAction("partner_help",onClickPartnerHelp,this);
- childSetAction("partner_info", onClickPartnerInfo, this);
- childSetEnabled("partner_info", mPartnerID.notNull());
-
- childSetAction("?",onClickPublishHelp,this);
- BOOL own_avatar = (getPanelAvatar()->getAvatarID() == gAgent.getID() );
- enableControls(own_avatar);
-
- childSetVisible("About:",LLPanelAvatar::sAllowFirstLife);
- childSetVisible("(500 chars)",LLPanelAvatar::sAllowFirstLife);
- childSetVisible("about",LLPanelAvatar::sAllowFirstLife);
-
- childSetVisible("allow_publish",LLPanelAvatar::sAllowFirstLife);
- childSetVisible("?",LLPanelAvatar::sAllowFirstLife);
-
- childSetVisible("online_yes",FALSE);
-
- // These are cruft but may still exist in some xml files
- // TODO: remove the following 2 lines once translators grab these changes
- childSetVisible("online_unknown",FALSE);
- childSetVisible("online_no",FALSE);
-
- childSetAction("Find on Map", LLPanelAvatar::onClickTrack, getPanelAvatar());
- childSetAction("Instant Message...", LLPanelAvatar::onClickIM, getPanelAvatar());
-
- childSetAction("Add Friend...", LLPanelAvatar::onClickAddFriend, getPanelAvatar());
- childSetAction("Pay...", LLPanelAvatar::onClickPay, getPanelAvatar());
- childSetAction("Mute", LLPanelAvatar::onClickMute, getPanelAvatar() );
-
- childSetAction("Offer Teleport...", LLPanelAvatar::onClickOfferTeleport,
- getPanelAvatar() );
-
- childSetDoubleClickCallback("groups", onDoubleClickGroup, this );
-
- getChild<LLTextureCtrl>("img")->setFallbackImageName("default_profile_picture.j2c");
-
- return TRUE;
-}
-
-BOOL LLPanelAvatarFirstLife::postBuild(void)
+void LLPanelProfileTab::onTeleport()
{
- BOOL own_avatar = (getPanelAvatar()->getAvatarID() == gAgent.getID() );
- enableControls(own_avatar);
-
- getChild<LLTextureCtrl>("img")->setFallbackImageName("default_profile_picture.j2c");
-
- return TRUE;
-}
-
-BOOL LLPanelAvatarNotes::postBuild(void)
-{
- childSetCommitCallback("notes edit",onCommitNotes,this);
-
- LLTextEditor* te = getChild<LLTextEditor>("notes edit");
- if(te) te->setCommitOnFocusLost(TRUE);
- return TRUE;
-}
-
-BOOL LLPanelAvatarWeb::postBuild(void)
-{
- childSetKeystrokeCallback("url_edit", onURLKeystroke, this);
- childSetCommitCallback("load", onCommitLoad, this);
-
- childSetAction("web_profile_help",onClickWebProfileHelp,this);
-
- childSetCommitCallback("url_edit",onCommitURL,this);
-
- childSetControlName("auto_load","AutoLoadWebProfiles");
-
- mWebBrowser = getChild<LLWebBrowserCtrl>("profile_html");
-
- // links open in internally
- mWebBrowser->setOpenInExternalBrowser( false );
-
- // observe browser events
- mWebBrowser->addObserver( this );
-
- return TRUE;
-}
-
-BOOL LLPanelAvatarClassified::postBuild(void)
-{
- childSetAction("New...",onClickNew,NULL);
- childSetAction("Delete...",onClickDelete,NULL);
- return TRUE;
-}
-
-BOOL LLPanelAvatarPicks::postBuild(void)
-{
- childSetAction("New...",onClickNew,NULL);
- childSetAction("Delete...",onClickDelete,NULL);
- return TRUE;
-}
-
-BOOL LLPanelAvatarAdvanced::postBuild()
-{
- for(size_t ii = 0; ii < LL_ARRAY_SIZE(mWantToCheck); ++ii)
- mWantToCheck[ii] = NULL;
- for(size_t ii = 0; ii < LL_ARRAY_SIZE(mSkillsCheck); ++ii)
- mSkillsCheck[ii] = NULL;
- mWantToCount = (8>LL_ARRAY_SIZE(mWantToCheck))?LL_ARRAY_SIZE(mWantToCheck):8;
- for(S32 tt=0; tt < mWantToCount; ++tt)
- {
- std::string ctlname = llformat("chk%d", tt);
- mWantToCheck[tt] = getChild<LLCheckBoxCtrl>(ctlname);
- }
- mSkillsCount = (6>LL_ARRAY_SIZE(mSkillsCheck))?LL_ARRAY_SIZE(mSkillsCheck):6;
-
- for(S32 tt=0; tt < mSkillsCount; ++tt)
+ if(getAvatarId().notNull())
{
- //Find the Skills checkboxes and save off thier controls
- std::string ctlname = llformat("schk%d",tt);
- mSkillsCheck[tt] = getChild<LLCheckBoxCtrl>(ctlname);
+ LLFriendActions::offerTeleport(getAvatarId());
}
-
- mWantToEdit = getChild<LLLineEditor>("want_to_edit");
- mSkillsEdit = getChild<LLLineEditor>("skills_edit");
- childSetVisible("skills_edit",LLPanelAvatar::sAllowFirstLife);
- childSetVisible("want_to_edit",LLPanelAvatar::sAllowFirstLife);
-
- return TRUE;
}
+//////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
-// LLPanelAvatarWeb
+// LLPanelAvatarProfile()
//-----------------------------------------------------------------------------
-LLPanelAvatarWeb::LLPanelAvatarWeb(const std::string& name, const LLRect& rect,
- LLPanelAvatar* panel_avatar)
-: LLPanelAvatarTab(name, rect, panel_avatar),
- mWebBrowser(NULL)
+//////////////////////////////////////////////////////////////////////////
+LLPanelAvatarProfile::LLPanelAvatarProfile(const LLUUID& avatar_id /* = LLUUID::null */)
+ : LLPanelProfileTab(avatar_id), mUpdated(false), mEditMode(false), mStatusCombobox(NULL), mStatusMessage(NULL)
{
+ updateData();
}
-LLPanelAvatarWeb::~LLPanelAvatarWeb()
+LLPanelAvatarProfile::LLPanelAvatarProfile(const Params& params )
+ : LLPanelProfileTab(params), mUpdated(false), mEditMode(false), mStatusCombobox(NULL), mStatusMessage(NULL)
{
- // stop observing browser events
- if ( mWebBrowser )
- {
- mWebBrowser->remObserver( this );
- };
}
-void LLPanelAvatarWeb::refresh()
+LLPanelAvatarProfile::~LLPanelAvatarProfile()
{
- if (mNavigateTo != "")
+ if(getAvatarId().notNull())
{
- llinfos << "Loading " << mNavigateTo << llendl;
- mWebBrowser->navigateTo( mNavigateTo );
- mNavigateTo = "";
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
}
-
-void LLPanelAvatarWeb::enableControls(BOOL self)
-{
- childSetEnabled("url_edit",self);
-}
-
-void LLPanelAvatarWeb::setWebURL(std::string url)
+void* LLPanelAvatarProfile::create(void* data /* = NULL */)
{
- bool changed_url = (mHome != url);
-
- mHome = url;
- bool have_url = !mHome.empty();
-
- childSetText("url_edit", mHome);
- childSetEnabled("load", mHome.length() > 0);
-
- if (have_url
- && gSavedSettings.getBOOL("AutoLoadWebProfiles"))
+ LLSD* id = NULL;
+ if(data)
{
- if (changed_url)
- {
- load(mHome);
- }
- }
- else
- {
- childSetVisible("profile_html",false);
- childSetVisible("status_text", false);
+ id = static_cast<LLSD*>(data);
+ return new LLPanelAvatarProfile(LLUUID(id->asUUID()));
}
+ return new LLPanelAvatarProfile();
}
-// static
-void LLPanelAvatarWeb::onCommitURL(LLUICtrl* ctrl, void* data)
+void LLPanelAvatarProfile::updateData()
{
- LLPanelAvatarWeb* self = (LLPanelAvatarWeb*)data;
-
- if (!self) return;
-
- self->load( self->childGetText("url_edit") );
-}
-
-// static
-void LLPanelAvatarWeb::onClickWebProfileHelp(void *)
-{
- LLNotifications::instance().add("ClickWebProfileHelpAvatar");
-}
-
-void LLPanelAvatarWeb::load(std::string url)
-{
- bool have_url = (!url.empty());
-
-
- childSetVisible("profile_html", have_url);
- childSetVisible("status_text", have_url);
- childSetText("status_text", LLStringUtil::null);
-
- if (have_url)
+ if (getAvatarId().notNull())
{
- mNavigateTo = url;
+ LLAvatarPropertiesProcessor::getInstance()->sendDataRequest(getAvatarId(),APT_PROPERTIES);
+ LLAvatarPropertiesProcessor::getInstance()->sendDataRequest(getAvatarId(),APT_GROUPS);
}
}
-//static
-void LLPanelAvatarWeb::onURLKeystroke(LLLineEditor* editor, void* data)
-{
- LLPanelAvatarWeb* self = (LLPanelAvatarWeb*)data;
- if (!self) return;
- LLSD::String url = editor->getText();
- self->childSetEnabled("load", url.length() > 0);
- return;
-}
-
-// static
-void LLPanelAvatarWeb::onCommitLoad(LLUICtrl* ctrl, void* data)
+void LLPanelAvatarProfile::processProperties(void* data, EAvatarProcessorType type)
{
- LLPanelAvatarWeb* self = (LLPanelAvatarWeb*)data;
-
- if (!self) return;
-
- LLSD::String valstr = ctrl->getValue().asString();
- LLSD::String urlstr = self->childGetText("url_edit");
- if (valstr == "") // load url string into browser panel
- {
- self->load(urlstr);
- }
- else if (valstr == "open") // open in user's external browser
+ if(APT_PROPERTIES == type)
{
- if (!urlstr.empty())
+ const LLAvatarData* avatar_data = static_cast<const LLAvatarData*>(data);
+ if(avatar_data && getAvatarId() == avatar_data->avatar_id)
{
- LLWeb::loadURLExternal(urlstr);
- }
- }
- else if (valstr == "home") // reload profile owner's home page
- {
- if (!self->mHome.empty())
- {
- self->load(self->mHome);
- }
- }
-}
+ childSetValue("register_date", avatar_data->born_on);
+ childSetValue("sl_description_edit", avatar_data->about_text);
+ childSetValue("fl_description_edit",avatar_data->fl_about_text);
+ childSetValue("2nd_life_pic", avatar_data->image_id);
+ childSetValue("1st_life_pic", avatar_data->fl_image_id);
+ childSetValue("homepage_edit", avatar_data->profile_url);
-void LLPanelAvatarWeb::onStatusTextChange( const EventType& eventIn )
-{
- childSetText("status_text", eventIn.getStringValue() );
-}
-
-void LLPanelAvatarWeb::onLocationChange( const EventType& eventIn )
-{
- childSetText("url_edit", eventIn.getStringValue() );
-}
-
-
-//-----------------------------------------------------------------------------
-// LLPanelAvatarAdvanced
-//-----------------------------------------------------------------------------
-LLPanelAvatarAdvanced::LLPanelAvatarAdvanced(const std::string& name,
- const LLRect& rect,
- LLPanelAvatar* panel_avatar)
-: LLPanelAvatarTab(name, rect, panel_avatar),
- mWantToCount(0),
- mSkillsCount(0),
- mWantToEdit( NULL ),
- mSkillsEdit( NULL )
-{
-}
-
-void LLPanelAvatarAdvanced::enableControls(BOOL self)
-{
- S32 t;
- for(t=0;t<mWantToCount;t++)
- {
- if(mWantToCheck[t])mWantToCheck[t]->setEnabled(self);
- }
- for(t=0;t<mSkillsCount;t++)
- {
- if(mSkillsCheck[t])mSkillsCheck[t]->setEnabled(self);
- }
-
- if (mWantToEdit) mWantToEdit->setEnabled(self);
- if (mSkillsEdit) mSkillsEdit->setEnabled(self);
- childSetEnabled("languages_edit",self);
-}
+ if (!isEditMode())
+ {
+ setCaptionText(avatar_data);
+ }
+ childSetValue("show_in_search_checkbox", (BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH));
-void LLPanelAvatarAdvanced::setWantSkills(U32 want_to_mask, const std::string& want_to_text,
- U32 skills_mask, const std::string& skills_text,
- const std::string& languages_text)
-{
- for(int id =0;id<mWantToCount;id++)
- {
- mWantToCheck[id]->set( want_to_mask & 1<<id );
- }
- for(int id =0;id<mSkillsCount;id++)
- {
- mSkillsCheck[id]->set( skills_mask & 1<<id );
- }
- if (mWantToEdit && mSkillsEdit)
- {
- mWantToEdit->setText( want_to_text );
- mSkillsEdit->setText( skills_text );
- }
+ if (avatar_data->partner_id.notNull())
+ {
+ std::string first, last;
+ BOOL found = gCacheName->getName(avatar_data->partner_id, first, last);
+ if (found)
+ {
+ childSetTextArg("partner_text", "[FIRST]", first);
+ childSetTextArg("partner_text", "[LAST]", last);
+ }
+ }
+ //http://secondlife.com/partner
- childSetText("languages_edit",languages_text);
-}
+ bool online = avatar_data->flags & AVATAR_ONLINE;
+ if(is_agent_friend(avatar_data->avatar_id))
+ {
+ // Online status NO could be because they are hidden
+ // If they are a friend, we may know the truth!
+ online = LLAvatarTracker::instance().isBuddyOnline(avatar_data->avatar_id);
+ }
+ childSetValue("online_status", online ?
+ "Online" : "Offline");
+ childSetColor("online_status", online ?
+ LLColor4::green : LLColor4::red);
-void LLPanelAvatarAdvanced::getWantSkills(U32* want_to_mask, std::string& want_to_text,
- U32* skills_mask, std::string& skills_text,
- std::string& languages_text)
-{
- if (want_to_mask)
- {
- *want_to_mask = 0;
- for(int t=0;t<mWantToCount;t++)
- {
- if(mWantToCheck[t]->get())
- *want_to_mask |= 1<<t;
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
- }
- if (skills_mask)
- {
- *skills_mask = 0;
- for(int t=0;t<mSkillsCount;t++)
- {
- if(mSkillsCheck[t]->get())
- *skills_mask |= 1<<t;
- }
- }
- if (mWantToEdit)
- {
- want_to_text = mWantToEdit->getText();
- }
-
- if (mSkillsEdit)
- {
- skills_text = mSkillsEdit->getText();
- }
-
- languages_text = childGetText("languages_edit");
-}
-
-//-----------------------------------------------------------------------------
-// LLPanelAvatarNotes()
-//-----------------------------------------------------------------------------
-LLPanelAvatarNotes::LLPanelAvatarNotes(const std::string& name, const LLRect& rect, LLPanelAvatar* panel_avatar)
-: LLPanelAvatarTab(name, rect, panel_avatar)
-{
-}
-
-void LLPanelAvatarNotes::refresh()
-{
- sendAvatarProfileRequestIfNeeded("avatarnotesrequest");
-}
-
-void LLPanelAvatarNotes::clearControls()
-{
- childSetText("notes edit", getString("Loading"));
- childSetEnabled("notes edit", false);
-}
-
-// static
-void LLPanelAvatarNotes::onCommitNotes(LLUICtrl*, void* userdata)
-{
- LLPanelAvatarNotes* self = (LLPanelAvatarNotes*)userdata;
-
- self->getPanelAvatar()->sendAvatarNotesUpdate();
-}
-
-
-//-----------------------------------------------------------------------------
-// LLPanelAvatarClassified()
-//-----------------------------------------------------------------------------
-LLPanelAvatarClassified::LLPanelAvatarClassified(const std::string& name, const LLRect& rect,
- LLPanelAvatar* panel_avatar)
-: LLPanelAvatarTab(name, rect, panel_avatar)
-{
-}
-
-
-void LLPanelAvatarClassified::refresh()
-{
- BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID());
-
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
-
- S32 tab_count = tabs ? tabs->getTabCount() : 0;
-
- bool allow_new = tab_count < MAX_CLASSIFIEDS;
- bool allow_delete = (tab_count > 0);
- bool show_help = (tab_count == 0);
-
- // *HACK: Don't allow making new classifieds from inside the directory.
- // The logic for save/don't save when closing is too hairy, and the
- // directory is conceptually read-only. JC
- bool in_directory = false;
- LLView* view = this;
- while (view)
- {
- if (view->getName() == "directory")
+ if (isOwnProfile() && NULL != mStatusCombobox)
{
- in_directory = true;
- break;
+ std::string status;
+ if (gAgent.getAFK())
+ {
+ status = "away";
+ }
+ else if (gAgent.getBusy())
+ {
+ status = "busy";
+ }
+ else
+ {
+ status = "online";
+ }
+ mStatusCombobox->setValue(status);
}
- view = view->getParent();
}
- childSetEnabled("New...", self && !in_directory && allow_new);
- childSetVisible("New...", !in_directory);
- childSetEnabled("Delete...", self && !in_directory && allow_delete);
- childSetVisible("Delete...", !in_directory);
- childSetVisible("classified tab",!show_help);
-
- sendAvatarProfileRequestIfNeeded("avatarclassifiedsrequest");
-}
-
-
-BOOL LLPanelAvatarClassified::canClose()
-{
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
- for (S32 i = 0; i < tabs->getTabCount(); i++)
+ else if(APT_GROUPS == type)
{
- LLPanelClassified* panel = (LLPanelClassified*)tabs->getPanelByIndex(i);
- if (!panel->canClose())
+ LLAvatarGroups* avatar_groups = static_cast<LLAvatarGroups*>(data);
+ if(avatar_groups)
{
- return FALSE;
+ std::string groups;
+ LLAvatarGroups::group_list_t::const_iterator it = avatar_groups->group_list.begin();
+ for(; avatar_groups->group_list.end() != it; ++it)
+ {
+ LLAvatarGroups::LLGroupData group_data = *it;
+ groups += group_data.group_name;
+ groups += ", ";
+ }
+ childSetValue("sl_groups",groups);
}
}
- return TRUE;
}
-BOOL LLPanelAvatarClassified::titleIsValid()
+void LLPanelAvatarProfile::clear()
{
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
- if ( tabs )
- {
- LLPanelClassified* panel = (LLPanelClassified*)tabs->getCurrentPanel();
- if ( panel )
- {
- if ( ! panel->titleIsValid() )
- {
- return FALSE;
- };
- };
- };
-
- return TRUE;
+ clearControls();
}
-void LLPanelAvatarClassified::apply()
+void LLPanelAvatarProfile::clearControls()
{
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
- for (S32 i = 0; i < tabs->getTabCount(); i++)
- {
- LLPanelClassified* panel = (LLPanelClassified*)tabs->getPanelByIndex(i);
- panel->apply();
- }
+ childSetValue("2nd_life_pic",LLUUID::null);
+ childSetValue("1st_life_pic",LLUUID::null);
+ childSetValue("online_status",LLStringUtil::null);
+ childSetValue("status_message",LLStringUtil::null);
+ childSetValue("sl_description_edit",LLStringUtil::null);
+ childSetValue("fl_description_edit",LLStringUtil::null);
+ childSetValue("sl_groups",LLStringUtil::null);
+ childSetValue("homepage_edit",LLStringUtil::null);
+ childSetValue("register_date",LLStringUtil::null);
+ childSetValue("acc_status_text",LLStringUtil::null);
+ childSetTextArg("partner_text", "[FIRST]", LLStringUtil::null);
+ childSetTextArg("partner_text", "[LAST]", LLStringUtil::null);
}
-
-void LLPanelAvatarClassified::deleteClassifiedPanels()
+void LLPanelAvatarProfile::setCaptionText(const LLAvatarData* avatar_data)
{
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
- if (tabs)
+ std::string caption_text = avatar_data->caption_text;
+ if(caption_text.empty())
{
- tabs->deleteAllTabs();
- }
-
- childSetVisible("New...", false);
- childSetVisible("Delete...", false);
- childSetVisible("loading_text", true);
-}
-
-
-void LLPanelAvatarClassified::processAvatarClassifiedReply(LLMessageSystem* msg, void**)
-{
- S32 block = 0;
- S32 block_count = 0;
- LLUUID classified_id;
- std::string classified_name;
- LLPanelClassified* panel_classified = NULL;
-
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
+ LLStringUtil::format_map_t args;
+ caption_text = getString("CaptionTextAcctInfo");
+ BOOL transacted = (avatar_data->flags & AVATAR_TRANSACTED);
+ BOOL identified = (avatar_data->flags & AVATAR_IDENTIFIED);
+ BOOL age_verified = (avatar_data->flags & AVATAR_AGEVERIFIED); // Not currently getting set in dataserver/lldataavatar.cpp for privacy considerations
- // Don't remove old panels. We need to be able to process multiple
- // packets for people who have lots of classifieds. JC
-
- block_count = msg->getNumberOfBlocksFast(_PREHASH_Data);
- for (block = 0; block < block_count; block++)
- {
- msg->getUUIDFast(_PREHASH_Data, _PREHASH_ClassifiedID, classified_id, block);
- msg->getStringFast(_PREHASH_Data, _PREHASH_Name, classified_name, block);
-
- panel_classified = new LLPanelClassified(false, false);
-
- panel_classified->setClassifiedID(classified_id);
-
- // This will request data from the server when the pick is first drawn.
- panel_classified->markForServerRequest();
+ const char* ACCT_TYPE[] = {
+ "AcctTypeResident",
+ "AcctTypeTrial",
+ "AcctTypeCharterMember",
+ "AcctTypeEmployee"
+ };
+ U8 caption_index = llclamp(avatar_data->caption_index, (U8)0, (U8)(LL_ARRAY_SIZE(ACCT_TYPE)-1));
+ args["[ACCTTYPE]"] = getString(ACCT_TYPE[caption_index]);
+
+ std::string payment_text = " ";
+ const S32 DEFAULT_CAPTION_LINDEN_INDEX = 3;
+ if(caption_index != DEFAULT_CAPTION_LINDEN_INDEX)
+ {
+ if(transacted)
+ {
+ payment_text = "PaymentInfoUsed";
+ }
+ else if (identified)
+ {
+ payment_text = "PaymentInfoOnFile";
+ }
+ else
+ {
+ payment_text = "NoPaymentInfoOnFile";
+ }
+ args["[PAYMENTINFO]"] = getString(payment_text);
- // The button should automatically truncate long names for us
- if(tabs)
+ std::string age_text = age_verified ? "AgeVerified" : "NotAgeVerified";
+ // Do not display age verification status at this time
+ //args["[[AGEVERIFICATION]]"] = mPanelSecondLife->getString(age_text);
+ args["[AGEVERIFICATION]"] = " ";
+ }
+ else
{
- tabs->addTabPanel(panel_classified, classified_name);
+ args["[PAYMENTINFO]"] = " ";
+ args["[AGEVERIFICATION]"] = " ";
}
+ LLStringUtil::format(caption_text, args);
}
- // Make sure somebody is highlighted. This works even if there
- // are no tabs in the container.
- if(tabs)
- {
- tabs->selectFirstTab();
- }
-
- childSetVisible("New...", true);
- childSetVisible("Delete...", true);
- childSetVisible("loading_text", false);
+ childSetValue("acc_status_text", caption_text);
}
-
-// Create a new classified panel. It will automatically handle generating
-// its own id when it's time to save.
-// static
-void LLPanelAvatarClassified::onClickNew(void* data)
+void LLPanelAvatarProfile::onAddFriendButtonClick()
{
- LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data;
-
- LLNotifications::instance().add("AddClassified", LLSD(), LLSD(), boost::bind(&LLPanelAvatarClassified::callbackNew, self, _1, _2));
-
+ onAddFriend();
}
-bool LLPanelAvatarClassified::callbackNew(const LLSD& notification, const LLSD& response)
+void LLPanelAvatarProfile::onIMButtonClick()
{
- S32 option = LLNotification::getSelectedOption(notification, response);
- if (0 == option)
- {
- LLPanelClassified* panel_classified = new LLPanelClassified(false, false);
- panel_classified->initNewClassified();
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
- if(tabs)
- {
- tabs->addTabPanel(panel_classified, panel_classified->getClassifiedName());
- tabs->selectLastTab();
- }
- }
- return false;
+ onIM();
}
-
-// static
-void LLPanelAvatarClassified::onClickDelete(void* data)
+void LLPanelAvatarProfile::onTeleportButtonClick()
{
- LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data;
-
- LLTabContainer* tabs = self->getChild<LLTabContainer>("classified tab");
- LLPanelClassified* panel_classified = NULL;
- if(tabs)
- {
- panel_classified = (LLPanelClassified*)tabs->getCurrentPanel();
- }
- if (!panel_classified) return;
-
- LLSD args;
- args["NAME"] = panel_classified->getClassifiedName();
- LLNotifications::instance().add("DeleteClassified", args, LLSD(), boost::bind(&LLPanelAvatarClassified::callbackDelete, self, _1, _2));
-
+ onTeleport();
}
-
-bool LLPanelAvatarClassified::callbackDelete(const LLSD& notification, const LLSD& response)
+void LLPanelAvatarProfile::onCallButtonClick()
{
- S32 option = LLNotification::getSelectedOption(notification, response);
- LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
- LLPanelClassified* panel_classified=NULL;
- if(tabs)
- {
- panel_classified = (LLPanelClassified*)tabs->getCurrentPanel();
- }
-
- LLMessageSystem* msg = gMessageSystem;
- if (!panel_classified) return false;
-
- if (0 == option)
- {
- msg->newMessageFast(_PREHASH_ClassifiedDelete);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Data);
- msg->addUUIDFast(_PREHASH_ClassifiedID, panel_classified->getClassifiedID());
- gAgent.sendReliableMessage();
-
- if(tabs)
- {
- tabs->removeTabPanel(panel_classified);
- }
- delete panel_classified;
- panel_classified = NULL;
- }
- return false;
}
-
-//-----------------------------------------------------------------------------
-// LLPanelAvatarPicks()
-//-----------------------------------------------------------------------------
-LLPanelAvatarPicks::LLPanelAvatarPicks(const std::string& name,
- const LLRect& rect,
- LLPanelAvatar* panel_avatar)
-: LLPanelAvatarTab(name, rect, panel_avatar)
+void LLPanelAvatarProfile::onShareButtonClick()
{
-}
-
-void LLPanelAvatarPicks::refresh()
-{
- BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID());
- LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
- S32 tab_count = tabs ? tabs->getTabCount() : 0;
- childSetEnabled("New...", self && tab_count < MAX_AVATAR_PICKS);
- childSetEnabled("Delete...", self && tab_count > 0);
- childSetVisible("New...", self && getPanelAvatar()->isEditable());
- childSetVisible("Delete...", self && getPanelAvatar()->isEditable());
-
- sendAvatarProfileRequestIfNeeded("avatarpicksrequest");
}
-
-void LLPanelAvatarPicks::deletePickPanels()
+/*virtual*/ BOOL LLPanelAvatarProfile::postBuild(void)
{
- LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
- if(tabs)
- {
- tabs->deleteAllTabs();
- }
-
- childSetVisible("New...", false);
- childSetVisible("Delete...", false);
- childSetVisible("loading_text", true);
-}
-
-void LLPanelAvatarPicks::processAvatarPicksReply(LLMessageSystem* msg, void**)
-{
- S32 block = 0;
- S32 block_count = 0;
- LLUUID pick_id;
- std::string pick_name;
- LLPanelPick* panel_pick = NULL;
-
- LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
-
- // Clear out all the old panels. We'll replace them with the correct
- // number of new panels.
- deletePickPanels();
-
- // The database needs to know for which user to look up picks.
- LLUUID avatar_id = getPanelAvatar()->getAvatarID();
-
- block_count = msg->getNumberOfBlocks("Data");
- for (block = 0; block < block_count; block++)
+ mStatusCombobox = getChild<LLComboBox>("status_combo", TRUE, FALSE);
+ if (NULL != mStatusCombobox)
{
- msg->getUUID("Data", "PickID", pick_id, block);
- msg->getString("Data", "PickName", pick_name, block);
-
- panel_pick = new LLPanelPick(FALSE);
-
- panel_pick->setPickID(pick_id, avatar_id);
-
- // This will request data from the server when the pick is first
- // drawn.
- panel_pick->markForServerRequest();
-
- // The button should automatically truncate long names for us
- if(tabs)
- {
- tabs->addTabPanel(panel_pick, pick_name);
- }
+ mStatusCombobox->setCommitCallback(boost::bind(&LLPanelAvatarProfile::onStatusChanged, this));
}
-
- // Make sure somebody is highlighted. This works even if there
- // are no tabs in the container.
- if(tabs)
+ mStatusMessage = getChild<LLLineEditor>("status_me_message_edit", TRUE, FALSE);
+ if (NULL != mStatusMessage)
{
- tabs->selectFirstTab();
+ mStatusMessage->setCommitCallback(boost::bind(&LLPanelAvatarProfile::onStatusMessageChanged, this));
}
- childSetVisible("New...", true);
- childSetVisible("Delete...", true);
- childSetVisible("loading_text", false);
-}
-
-
-// Create a new pick panel. It will automatically handle generating
-// its own id when it's time to save.
-// static
-void LLPanelAvatarPicks::onClickNew(void* data)
-{
- LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
- LLPanelPick* panel_pick = new LLPanelPick(FALSE);
- LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
+ childSetCommitCallback("add_friend",(boost::bind(&LLPanelAvatarProfile::onAddFriendButtonClick,this)),NULL);
+ childSetCommitCallback("im",(boost::bind(&LLPanelAvatarProfile::onIMButtonClick,this)),NULL);
+ childSetCommitCallback("call",(boost::bind(&LLPanelAvatarProfile::onCallButtonClick,this)),NULL);
+ childSetCommitCallback("teleport",(boost::bind(&LLPanelAvatarProfile::onTeleportButtonClick,this)),NULL);
+ childSetCommitCallback("share",(boost::bind(&LLPanelAvatarProfile::onShareButtonClick,this)),NULL);
- panel_pick->initNewPick();
- if(tabs)
+ LLTextureCtrl* pic = getChild<LLTextureCtrl>("2nd_life_pic",TRUE,FALSE);
+ if(pic)
{
- tabs->addTabPanel(panel_pick, panel_pick->getPickName());
- tabs->selectLastTab();
+ pic->setFallbackImageName("default_land_picture.j2c");
}
-}
-
-
-// static
-void LLPanelAvatarPicks::onClickDelete(void* data)
-{
- LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
- LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
- LLPanelPick* panel_pick = tabs?(LLPanelPick*)tabs->getCurrentPanel():NULL;
-
- if (!panel_pick) return;
-
- LLSD args;
- args["PICK"] = panel_pick->getPickName();
-
- LLNotifications::instance().add("DeleteAvatarPick", args, LLSD(),
- boost::bind(&LLPanelAvatarPicks::callbackDelete, self, _1, _2));
-}
-
-
-// static
-bool LLPanelAvatarPicks::callbackDelete(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
- LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
- LLPanelPick* panel_pick = tabs ? (LLPanelPick*)tabs->getCurrentPanel() : NULL;
- LLMessageSystem* msg = gMessageSystem;
-
- if (!panel_pick) return false;
-
- if (0 == option)
+ pic = getChild<LLTextureCtrl>("1st_life_pic",TRUE,FALSE);
+ if(pic)
{
- // If the viewer has a hacked god-mode, then this call will
- // fail.
- if(gAgent.isGodlike())
- {
- msg->newMessage("PickGodDelete");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("PickID", panel_pick->getPickID());
- // *HACK: We need to send the pick's creator id to accomplish
- // the delete, and we don't use the query id for anything. JC
- msg->addUUID( "QueryID", panel_pick->getPickCreatorID() );
- }
- else
- {
- msg->newMessage("PickDelete");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("PickID", panel_pick->getPickID());
- }
- gAgent.sendReliableMessage();
-
- if(tabs)
- {
- tabs->removeTabPanel(panel_pick);
- }
- delete panel_pick;
- panel_pick = NULL;
+ pic->setFallbackImageName("default_land_picture.j2c");
}
- return false;
-}
-
-
-//-----------------------------------------------------------------------------
-// LLPanelAvatar
-//-----------------------------------------------------------------------------
-LLPanelAvatar::LLPanelAvatar(
- const std::string& name,
- const LLRect &rect,
- BOOL allow_edit)
- :
- LLPanel(name, rect, FALSE),
- mPanelSecondLife(NULL),
- mPanelAdvanced(NULL),
- mPanelClassified(NULL),
- mPanelPicks(NULL),
- mPanelNotes(NULL),
- mPanelFirstLife(NULL),
- mPanelWeb(NULL),
- mDropTarget(NULL),
- mAvatarID( LLUUID::null ), // mAvatarID is set with 'setAvatar' or 'setAvatarID'
- mHaveProperties(FALSE),
- mHaveStatistics(FALSE),
- mHaveNotes(false),
- mLastNotes(),
- mAllowEdit(allow_edit)
-{
-
- sAllPanels.push_back(this);
-
- LLCallbackMap::map_t factory_map;
-
- factory_map["2nd Life"] = LLCallbackMap(createPanelAvatarSecondLife, this);
- factory_map["WebProfile"] = LLCallbackMap(createPanelAvatarWeb, this);
- factory_map["Interests"] = LLCallbackMap(createPanelAvatarInterests, this);
- factory_map["Picks"] = LLCallbackMap(createPanelAvatarPicks, this);
- factory_map["Classified"] = LLCallbackMap(createPanelAvatarClassified, this);
- factory_map["1st Life"] = LLCallbackMap(createPanelAvatarFirstLife, this);
- factory_map["My Notes"] = LLCallbackMap(createPanelAvatarNotes, this);
-
- LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar.xml", &factory_map);
-
- selectTab(0);
-
-
-}
-BOOL LLPanelAvatar::postBuild(void)
-{
- mTab = getChild<LLTabContainer>("tab");
- childSetAction("Kick",onClickKick,this);
- childSetAction("Freeze",onClickFreeze, this);
- childSetAction("Unfreeze", onClickUnfreeze, this);
- childSetAction("csr_btn", onClickCSR, this);
- childSetAction("OK", onClickOK, this);
- childSetAction("Cancel", onClickCancel, this);
-
- if(mTab && !sAllowFirstLife)
- {
- LLPanel* panel = mTab->getPanelByName("1st Life");
- if (panel) mTab->removeTabPanel(panel);
-
- panel = mTab->getPanelByName("WebProfile");
- if (panel) mTab->removeTabPanel(panel);
- }
- childSetVisible("Kick",FALSE);
- childSetEnabled("Kick",FALSE);
- childSetVisible("Freeze",FALSE);
- childSetEnabled("Freeze",FALSE);
- childSetVisible("Unfreeze",FALSE);
- childSetEnabled("Unfreeze",FALSE);
- childSetVisible("csr_btn", FALSE);
- childSetEnabled("csr_btn", FALSE);
+ clearControls();
+ updateChildrenList();
return TRUE;
}
-
-
-LLPanelAvatar::~LLPanelAvatar()
-{
- sAllPanels.remove(this);
-}
-
-
-BOOL LLPanelAvatar::canClose()
-{
- return mPanelClassified && mPanelClassified->canClose();
-}
-
-void LLPanelAvatar::setAvatar(LLViewerObject *avatarp)
+void LLPanelAvatarProfile::onOpen(const LLSD& key)
{
- // find the avatar and grab the name
- LLNameValue *firstname = avatarp->getNVPair("FirstName");
- LLNameValue *lastname = avatarp->getNVPair("LastName");
-
- std::string name;
- if (firstname && lastname)
- {
- name.assign( firstname->getString() );
- name.append(" ");
- name.append( lastname->getString() );
- }
- else
- {
- name.assign("");
- }
-
- // If we have an avatar pointer, they must be online.
- setAvatarID(avatarp->getID(), name, ONLINE_STATUS_YES);
+ setAvatarId(key);
+ scrollToTop();
+ updateChildrenList();
+ updateData();
}
-void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status)
+void LLPanelAvatarProfile::scrollToTop()
{
- // Online status NO could be because they are hidden
- // If they are a friend, we may know the truth!
- if ((ONLINE_STATUS_YES != online_status)
- && mIsFriend
- && (LLAvatarTracker::instance().isBuddyOnline( mAvatarID )))
- {
- online_status = ONLINE_STATUS_YES;
- }
-
- mPanelSecondLife->childSetVisible("online_yes", (online_status == ONLINE_STATUS_YES));
-
- // Since setOnlineStatus gets called after setAvatarID
- // need to make sure that "Offer Teleport" doesn't get set
- // to TRUE again for yourself
- if (mAvatarID != gAgent.getID())
- {
- childSetVisible("Offer Teleport...",TRUE);
- }
-
- BOOL in_prelude = gAgent.inPrelude();
- if(gAgent.isGodlike())
- {
- childSetEnabled("Offer Teleport...", TRUE);
- childSetToolTip("Offer Teleport...", childGetValue("TeleportGod").asString());
- }
- else if (in_prelude)
- {
- childSetEnabled("Offer Teleport...",FALSE);
- childSetToolTip("Offer Teleport...",childGetValue("TeleportPrelude").asString());
- }
- else
+ LLScrollContainer* scrollContainer = getChild<LLScrollContainer>("profile_scroll", FALSE, FALSE);
+ if (NULL != scrollContainer)
{
- childSetEnabled("Offer Teleport...", (online_status == ONLINE_STATUS_YES));
- childSetToolTip("Offer Teleport...", childGetValue("TeleportNormal").asString());
+ scrollContainer->goToTop();
}
}
-void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name,
- EOnlineStatus online_status)
+void LLPanelAvatarProfile::updateChildrenList()
{
- if (avatar_id.isNull()) return;
-
- BOOL avatar_changed = FALSE;
- if (avatar_id != mAvatarID)
- {
- avatar_changed = TRUE;
- }
- mAvatarID = avatar_id;
-
- // Determine if we have their calling card.
- mIsFriend = is_agent_friend(mAvatarID);
-
- // setOnlineStatus uses mIsFriend
- setOnlineStatus(online_status);
-
- BOOL own_avatar = (mAvatarID == gAgent.getID() );
- BOOL avatar_is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarID) != NULL;
-
- mPanelSecondLife->enableControls(own_avatar && mAllowEdit);
- mPanelWeb->enableControls(own_avatar && mAllowEdit);
- mPanelAdvanced->enableControls(own_avatar && mAllowEdit);
- // Teens don't have this.
- if (mPanelFirstLife) mPanelFirstLife->enableControls(own_avatar && mAllowEdit);
-
- LLView *target_view = getChild<LLView>("drop_target_rect");
- if(target_view)
- {
- if (mDropTarget)
- {
- delete mDropTarget;
- }
- mDropTarget = new LLDropTarget("drop target", target_view->getRect(), mAvatarID);
- addChild(mDropTarget);
- mDropTarget->setAgentID(mAvatarID);
- }
-
- LLNameEditor* name_edit = getChild<LLNameEditor>("name");
- if(name_edit)
- {
- if (name.empty())
- {
- name_edit->setNameID(avatar_id, FALSE);
- }
- else
- {
- name_edit->setText(name);
- }
- }
-// if (avatar_changed)
- {
- // While we're waiting for data off the network, clear out the
- // old data.
- mPanelSecondLife->clearControls();
-
- mPanelPicks->deletePickPanels();
- mPanelPicks->setDataRequested(false);
-
- mPanelClassified->deleteClassifiedPanels();
- mPanelClassified->setDataRequested(false);
-
- mPanelNotes->clearControls();
- mPanelNotes->setDataRequested(false);
- mHaveNotes = false;
- mLastNotes.clear();
-
- // Request just the first two pages of data. The picks,
- // classifieds, and notes will be requested when that panel
- // is made visible. JC
- sendAvatarPropertiesRequest();
-
- if (own_avatar)
- {
- if (mAllowEdit)
- {
- // OK button disabled until properties data arrives
- childSetVisible("OK", true);
- childSetEnabled("OK", false);
- childSetVisible("Cancel",TRUE);
- childSetEnabled("Cancel",TRUE);
- }
- else
- {
- childSetVisible("OK",FALSE);
- childSetEnabled("OK",FALSE);
- childSetVisible("Cancel",FALSE);
- childSetEnabled("Cancel",FALSE);
- }
- childSetVisible("Instant Message...",FALSE);
- childSetEnabled("Instant Message...",FALSE);
- childSetVisible("Mute",FALSE);
- childSetEnabled("Mute",FALSE);
- childSetVisible("Offer Teleport...",FALSE);
- childSetEnabled("Offer Teleport...",FALSE);
- childSetVisible("drop target",FALSE);
- childSetEnabled("drop target",FALSE);
- childSetVisible("Find on Map",FALSE);
- childSetEnabled("Find on Map",FALSE);
- childSetVisible("Add Friend...",FALSE);
- childSetEnabled("Add Friend...",FALSE);
- childSetVisible("Pay...",FALSE);
- childSetEnabled("Pay...",FALSE);
- }
- else
- {
- childSetVisible("OK",FALSE);
- childSetEnabled("OK",FALSE);
-
- childSetVisible("Cancel",FALSE);
- childSetEnabled("Cancel",FALSE);
-
- childSetVisible("Instant Message...",TRUE);
- childSetEnabled("Instant Message...",FALSE);
- childSetVisible("Mute",TRUE);
- childSetEnabled("Mute",FALSE);
-
- childSetVisible("drop target",TRUE);
- childSetEnabled("drop target",FALSE);
-
- childSetVisible("Find on Map",TRUE);
- // Note: we don't always know online status, so always allow gods to try to track
- BOOL enable_track = gAgent.isGodlike() || is_agent_mappable(mAvatarID);
- childSetEnabled("Find on Map",enable_track);
- if (!mIsFriend)
- {
- childSetToolTip("Find on Map",childGetValue("ShowOnMapNonFriend").asString());
- }
- else if (ONLINE_STATUS_YES != online_status)
- {
- childSetToolTip("Find on Map",childGetValue("ShowOnMapFriendOffline").asString());
- }
- else
- {
- childSetToolTip("Find on Map",childGetValue("ShowOnMapFriendOnline").asString());
- }
- childSetVisible("Add Friend...", true);
- childSetEnabled("Add Friend...", !avatar_is_friend);
- childSetVisible("Pay...",TRUE);
- childSetEnabled("Pay...",FALSE);
- }
- }
-
- BOOL is_god = FALSE;
- if (gAgent.isGodlike()) is_god = TRUE;
-
- childSetVisible("Kick", is_god);
- childSetEnabled("Kick", is_god);
- childSetVisible("Freeze", is_god);
- childSetEnabled("Freeze", is_god);
- childSetVisible("Unfreeze", is_god);
- childSetEnabled("Unfreeze", is_god);
- childSetVisible("csr_btn", is_god);
- childSetEnabled("csr_btn", is_god);
-}
-
-
-void LLPanelAvatar::resetGroupList()
-{
- // only get these updates asynchronously via the group floater, which works on the agent only
- if (mAvatarID != gAgent.getID())
+ if (mUpdated || isEditMode())
{
return;
}
-
- if (mPanelSecondLife)
+ switch (mProfileType)
{
- LLScrollListCtrl* group_list = mPanelSecondLife->getChild<LLScrollListCtrl>("groups");
- if (group_list)
- {
- group_list->deleteAllItems();
-
- S32 count = gAgent.mGroups.count();
- LLUUID id;
-
- for(S32 i = 0; i < count; ++i)
- {
- LLGroupData group_data = gAgent.mGroups.get(i);
- id = group_data.mID;
- std::string group_string;
- /* Show group title? DUMMY_POWER for Don Grep
- if(group_data.mOfficer)
- {
- group_string = "Officer of ";
- }
- else
- {
- group_string = "Member of ";
- }
- */
-
- group_string += group_data.mName;
-
- LLSD row;
-
- row["id"] = id ;
- row["columns"][0]["value"] = group_string;
- row["columns"][0]["font"] = "SANSSERIF_SMALL";
- row["columns"][0]["width"] = 0;
- group_list->addElement(row);
- }
- group_list->sortByColumnIndex(0, TRUE);
- }
- }
-}
-
-// static
-//-----------------------------------------------------------------------------
-// onClickIM()
-//-----------------------------------------------------------------------------
-void LLPanelAvatar::onClickIM(void* userdata)
-{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
- gIMMgr->setFloaterOpen(TRUE);
+ case PT_OWN:
+ childSetVisible("status_panel",FALSE);
+ childSetVisible("profile_buttons_panel",FALSE);
+ childSetVisible("title_groups_text",FALSE);
+ childSetVisible("sl_groups",FALSE);
+ mUpdated = true;
+ childSetVisible("status_me_panel",TRUE);
+ childSetVisible("profile_me_buttons_panel",TRUE);
- std::string name;
- LLNameEditor* nameedit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
- if (nameedit) name = nameedit->getText();
- gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID);
-}
+ break;
+ case PT_OTHER:
+ childSetVisible("status_me_panel",FALSE);
+ childSetVisible("profile_me_buttons_panel",FALSE);
+ childSetVisible("status_panel",TRUE);
+ childSetVisible("profile_buttons_panel",TRUE);
+ childSetVisible("title_groups_text",TRUE);
+ childSetVisible("sl_groups",TRUE);
-// static
-//-----------------------------------------------------------------------------
-// onClickTrack()
-//-----------------------------------------------------------------------------
-void LLPanelAvatar::onClickTrack(void* userdata)
-{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
-
- if( gFloaterWorldMap )
- {
- std::string name;
- LLNameEditor* nameedit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
- if (nameedit) name = nameedit->getText();
- gFloaterWorldMap->trackAvatar(self->mAvatarID, name);
- LLFloaterWorldMap::show(NULL, TRUE);
- }
-}
+ // account actions
+ childSetVisible("account_actions_panel", FALSE);
+ childSetVisible("partner_edit_link", FALSE);
-
-// static
-void LLPanelAvatar::onClickAddFriend(void* userdata)
-{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
- LLNameEditor* name_edit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
- if (name_edit)
- {
- LLPanelFriends::requestFriendshipDialog(self->getAvatarID(),
- name_edit->getText());
+ mUpdated = true;
+ break;
+ case PT_UNKNOWN: break;//do nothing
+ default:
+ llassert(false);
}
}
-
-//-----------------------------------------------------------------------------
-// onClickMute()
-//-----------------------------------------------------------------------------
-void LLPanelAvatar::onClickMute(void *userdata)
+void LLPanelAvatarProfile::onStatusChanged()
{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
-
- LLUUID agent_id = self->getAvatarID();
- LLNameEditor* name_edit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
+ LLSD::String status = mStatusCombobox->getValue().asString();
- if (name_edit)
+ if ("online" == status)
{
- std::string agent_name = name_edit->getText();
- LLFloaterMute::showInstance();
-
- if (LLMuteList::getInstance()->isMuted(agent_id))
- {
- LLFloaterMute::getInstance()->selectMute(agent_id);
- }
- else
- {
- LLMute mute(agent_id, agent_name, LLMute::AGENT);
- LLMuteList::getInstance()->add(mute);
- }
+ gAgent.clearAFK();
+ gAgent.clearBusy();
}
-}
-
-
-// static
-void LLPanelAvatar::onClickOfferTeleport(void *userdata)
-{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
-
- handle_lure(self->mAvatarID);
-}
-
-
-// static
-void LLPanelAvatar::onClickPay(void *userdata)
-{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
- handle_pay_by_id(self->mAvatarID);
-}
-
-
-// static
-void LLPanelAvatar::onClickOK(void *userdata)
-{
- LLPanelAvatar *self = (LLPanelAvatar *)userdata;
-
- // JC: Only save the data if we actually got the original
- // properties. Otherwise we might save blanks into
- // the database.
- if (self
- && self->mHaveProperties)
+ else if ("away" == status)
{
- self->sendAvatarPropertiesUpdate();
-
- LLTabContainer* tabs = self->getChild<LLTabContainer>("tab");
- if ( tabs->getCurrentPanel() != self->mPanelClassified )
- {
- self->mPanelClassified->apply();
-
- LLFloaterAvatarInfo *infop = LLFloaterAvatarInfo::getInstance(self->mAvatarID);
- if (infop)
- {
- infop->close();
- }
- }
- else
- {
- if ( self->mPanelClassified->titleIsValid() )
- {
- self->mPanelClassified->apply();
-
- LLFloaterAvatarInfo *infop = LLFloaterAvatarInfo::getInstance(self->mAvatarID);
- if (infop)
- {
- infop->close();
- }
- }
- }
+ gAgent.clearBusy();
+ gAgent.setAFK();
}
-}
-
-// static
-void LLPanelAvatar::onClickCancel(void *userdata)
-{
- LLPanelAvatar *self = (LLPanelAvatar *)userdata;
-
- if (self)
- {
- LLFloaterAvatarInfo *infop;
- if ((infop = LLFloaterAvatarInfo::getInstance(self->mAvatarID)))
- {
- infop->close();
- }
- else
- {
- // We're in the Search directory and are cancelling an edit
- // to our own profile, so reset.
- self->sendAvatarPropertiesRequest();
- }
- }
-}
-
-
-void LLPanelAvatar::sendAvatarPropertiesRequest()
-{
- lldebugs << "LLPanelAvatar::sendAvatarPropertiesRequest()" << llendl;
- LLMessageSystem *msg = gMessageSystem;
-
- msg->newMessageFast(_PREHASH_AvatarPropertiesRequest);
- msg->nextBlockFast( _PREHASH_AgentData);
- msg->addUUIDFast( _PREHASH_AgentID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast( _PREHASH_AvatarID, mAvatarID);
- gAgent.sendReliableMessage();
-}
-
-void LLPanelAvatar::sendAvatarNotesUpdate()
-{
- std::string notes = mPanelNotes->childGetValue("notes edit").asString();
-
- if (!mHaveNotes
- && (notes.empty() || notes == getString("Loading")))
+ else if ("busy" == status)
{
- // no notes from server and no user updates
- return;
+ gAgent.clearAFK();
+ gAgent.setBusy();
+ LLNotifications::instance().add("BusyModeSet");
}
- if (notes == mLastNotes)
+ else
{
- // Avatar notes unchanged
- return;
}
- LLMessageSystem *msg = gMessageSystem;
-
- msg->newMessage("AvatarNotesUpdate");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("TargetID", mAvatarID);
- msg->addString("Notes", notes);
-
- gAgent.sendReliableMessage();
}
-
-// static
-void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
+void LLPanelAvatarProfile::onStatusMessageChanged()
{
- LLUUID agent_id; // your id
- LLUUID avatar_id; // target of this panel
- LLUUID image_id;
- LLUUID fl_image_id;
- LLUUID partner_id;
- std::string about_text;
- std::string fl_about_text;
- std::string born_on;
- S32 charter_member_size = 0;
- BOOL allow_publish = FALSE;
- //BOOL mature = FALSE;
- BOOL identified = FALSE;
- BOOL transacted = FALSE;
- BOOL age_verified = FALSE;
- BOOL online = FALSE;
- std::string profile_url;
-
- U32 flags = 0x0;
-
- //llinfos << "properties packet size " << msg->getReceiveSize() << llendl;
-
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
-
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
- {
- LLPanelAvatar* self = *iter;
- if (self->mAvatarID != avatar_id)
- {
- continue;
- }
- self->childSetEnabled("Instant Message...",TRUE);
- self->childSetEnabled("Pay...",TRUE);
- self->childSetEnabled("Mute",TRUE);
-
- self->childSetEnabled("drop target",TRUE);
-
- self->mHaveProperties = TRUE;
- self->enableOKIfReady();
-
- msg->getUUIDFast( _PREHASH_PropertiesData, _PREHASH_ImageID, image_id );
- msg->getUUIDFast( _PREHASH_PropertiesData, _PREHASH_FLImageID, fl_image_id );
- msg->getUUIDFast(_PREHASH_PropertiesData, _PREHASH_PartnerID, partner_id);
- msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_AboutText, about_text );
- msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_FLAboutText, fl_about_text );
- msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_BornOn, born_on);
- msg->getString("PropertiesData","ProfileURL", profile_url);
- msg->getU32Fast(_PREHASH_PropertiesData, _PREHASH_Flags, flags);
-
- identified = (flags & AVATAR_IDENTIFIED);
- transacted = (flags & AVATAR_TRANSACTED);
- age_verified = (flags & AVATAR_AGEVERIFIED); // Not currently getting set in dataserver/lldataavatar.cpp for privacy considerations
- allow_publish = (flags & AVATAR_ALLOW_PUBLISH);
- online = (flags & AVATAR_ONLINE);
-
- U8 caption_index = 0;
- std::string caption_text;
- charter_member_size = msg->getSize("PropertiesData", "CharterMember");
- if(1 == charter_member_size)
- {
- msg->getBinaryData("PropertiesData", "CharterMember", &caption_index, 1);
- }
- else if(1 < charter_member_size)
- {
- msg->getString("PropertiesData", "CharterMember", caption_text);
- }
-
-
- if(caption_text.empty())
- {
- LLStringUtil::format_map_t args;
- caption_text = self->mPanelSecondLife->getString("CaptionTextAcctInfo");
-
- const char* ACCT_TYPE[] = {
- "AcctTypeResident",
- "AcctTypeTrial",
- "AcctTypeCharterMember",
- "AcctTypeEmployee"
- };
- caption_index = llclamp(caption_index, (U8)0, (U8)(LL_ARRAY_SIZE(ACCT_TYPE)-1));
- args["[ACCTTYPE]"] = self->mPanelSecondLife->getString(ACCT_TYPE[caption_index]);
-
- std::string payment_text = " ";
- const S32 DEFAULT_CAPTION_LINDEN_INDEX = 3;
- if(caption_index != DEFAULT_CAPTION_LINDEN_INDEX)
- {
- if(transacted)
- {
- payment_text = "PaymentInfoUsed";
- }
- else if (identified)
- {
- payment_text = "PaymentInfoOnFile";
- }
- else
- {
- payment_text = "NoPaymentInfoOnFile";
- }
- args["[PAYMENTINFO]"] = self->mPanelSecondLife->getString(payment_text);
- std::string age_text = age_verified ? "AgeVerified" : "NotAgeVerified";
- // Do not display age verification status at this time
- //args["[[AGEVERIFICATION]]"] = self->mPanelSecondLife->getString(age_text);
- args["[AGEVERIFICATION]"] = " ";
- }
- else
- {
- args["[PAYMENTINFO]"] = " ";
- args["[AGEVERIFICATION]"] = " ";
- }
- LLStringUtil::format(caption_text, args);
- }
-
- self->mPanelSecondLife->childSetValue("acct", caption_text);
- self->mPanelSecondLife->childSetValue("born", born_on);
-
- EOnlineStatus online_status = (online) ? ONLINE_STATUS_YES : ONLINE_STATUS_NO;
-
- self->setOnlineStatus(online_status);
-
- self->mPanelWeb->setWebURL(profile_url);
-
- LLTextureCtrl* image_ctrl = self->mPanelSecondLife->getChild<LLTextureCtrl>("img");
- if(image_ctrl)
- {
- image_ctrl->setImageAssetID(image_id);
- }
- self->childSetValue("about", about_text);
-
- self->mPanelSecondLife->setPartnerID(partner_id);
- self->mPanelSecondLife->updatePartnerName();
-
- if (self->mPanelFirstLife)
- {
- // Teens don't get these
- self->mPanelFirstLife->childSetValue("about", fl_about_text);
- LLTextureCtrl* image_ctrl = self->mPanelFirstLife->getChild<LLTextureCtrl>("img");
- if(image_ctrl)
- {
- image_ctrl->setImageAssetID(fl_image_id);
- }
-
- self->mPanelSecondLife->childSetValue("allow_publish", allow_publish);
-
- }
- }
+ updateData();
}
-// static
-void LLPanelAvatar::processAvatarInterestsReply(LLMessageSystem *msg, void**)
-{
- LLUUID agent_id; // your id
- LLUUID avatar_id; // target of this panel
-
- U32 want_to_mask;
- std::string want_to_text;
- U32 skills_mask;
- std::string skills_text;
- std::string languages_text;
-
- //llinfos << "properties packet size " << msg->getReceiveSize() << llendl;
-
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
-
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
- {
- LLPanelAvatar* self = *iter;
- if (self->mAvatarID != avatar_id)
- {
- continue;
- }
-
- msg->getU32Fast( _PREHASH_PropertiesData, _PREHASH_WantToMask, want_to_mask );
- msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_WantToText, want_to_text );
- msg->getU32Fast( _PREHASH_PropertiesData, _PREHASH_SkillsMask, skills_mask );
- msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_SkillsText, skills_text );
- msg->getString(_PREHASH_PropertiesData, "LanguagesText", languages_text );
-
- self->mPanelAdvanced->setWantSkills(want_to_mask, want_to_text, skills_mask, skills_text, languages_text);
- }
-}
-// Separate function because the groups list can be very long, almost
-// filling a packet. JC
-// static
-void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**)
+//-----------------------------------------------------------------------------
+// LLPanelAvatarNotes()
+//-----------------------------------------------------------------------------
+LLPanelAvatarNotes::LLPanelAvatarNotes(const LLUUID& id /* = LLUUID::null */)
+:LLPanelProfileTab(id)
{
- LLUUID agent_id; // your id
- LLUUID avatar_id; // target of this panel
- U64 group_powers;
- std::string group_title;
- LLUUID group_id;
- std::string group_name;
- LLUUID group_insignia_id;
-
- llinfos << "groups packet size " << msg->getReceiveSize() << llendl;
-
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
-
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
- {
- LLPanelAvatar* self = *iter;
- if (self->mAvatarID != avatar_id)
- {
- continue;
- }
-
- LLScrollListCtrl* group_list = self->mPanelSecondLife->getChild<LLScrollListCtrl>("groups");
-// if(group_list)
-// {
-// group_list->deleteAllItems();
-// }
-
- S32 group_count = msg->getNumberOfBlocksFast(_PREHASH_GroupData);
- if (0 == group_count)
- {
- if(group_list) group_list->addCommentText(std::string("None")); // *TODO: Translate
- }
- else
- {
- for(S32 i = 0; i < group_count; ++i)
- {
- msg->getU64( _PREHASH_GroupData, "GroupPowers", group_powers, i );
- msg->getStringFast(_PREHASH_GroupData, _PREHASH_GroupTitle, group_title, i );
- msg->getUUIDFast( _PREHASH_GroupData, _PREHASH_GroupID, group_id, i);
- msg->getStringFast(_PREHASH_GroupData, _PREHASH_GroupName, group_name, i );
- msg->getUUIDFast( _PREHASH_GroupData, _PREHASH_GroupInsigniaID, group_insignia_id, i );
-
- std::string group_string;
- if (group_id.notNull())
- {
- group_string.assign(group_name);
- }
- else
- {
- group_string.assign("");
- }
-
- // Is this really necessary? Remove existing entry if it exists.
- // TODO: clear the whole list when a request for data is made
- if (group_list)
- {
- S32 index = group_list->getItemIndex(group_id);
- if ( index >= 0 )
- {
- group_list->deleteSingleItem(index);
- }
- }
-
- LLSD row;
- row["id"] = group_id;
- row["columns"][0]["value"] = group_string;
- row["columns"][0]["font"] = "SANSSERIF_SMALL";
- if (group_list)
- {
- group_list->addElement(row);
- }
- }
- }
- if(group_list) group_list->sortByColumnIndex(0, TRUE);
- }
+ updateData();
}
-// Don't enable the OK button until you actually have the data.
-// Otherwise you will write blanks back into the database.
-void LLPanelAvatar::enableOKIfReady()
+LLPanelAvatarNotes::LLPanelAvatarNotes(const Params& params)
+: LLPanelProfileTab(params)
{
- if(mHaveProperties && childIsVisible("OK"))
- {
- childSetEnabled("OK", TRUE);
- }
- else
- {
- childSetEnabled("OK", FALSE);
- }
-}
-
-void LLPanelAvatar::sendAvatarPropertiesUpdate()
-{
- llinfos << "Sending avatarinfo update" << llendl;
- BOOL allow_publish = FALSE;
- BOOL mature = FALSE;
- if (LLPanelAvatar::sAllowFirstLife)
- {
- allow_publish = childGetValue("allow_publish");
- //A profile should never be mature.
- mature = FALSE;
- }
- U32 want_to_mask = 0x0;
- U32 skills_mask = 0x0;
- std::string want_to_text;
- std::string skills_text;
- std::string languages_text;
- mPanelAdvanced->getWantSkills(&want_to_mask, want_to_text, &skills_mask, skills_text, languages_text);
-
- LLUUID first_life_image_id;
- std::string first_life_about_text;
- if (mPanelFirstLife)
- {
- first_life_about_text = mPanelFirstLife->childGetValue("about").asString();
- LLTextureCtrl* image_ctrl = mPanelFirstLife->getChild<LLTextureCtrl>("img");
- if(image_ctrl)
- {
- first_life_image_id = image_ctrl->getImageAssetID();
- }
- }
-
- std::string about_text = mPanelSecondLife->childGetValue("about").asString();
-
- LLMessageSystem *msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_AvatarPropertiesUpdate);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast( _PREHASH_AgentID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
- msg->nextBlockFast(_PREHASH_PropertiesData);
-
- LLTextureCtrl* image_ctrl = mPanelSecondLife->getChild<LLTextureCtrl>("img");
- if(image_ctrl)
- {
- msg->addUUIDFast( _PREHASH_ImageID, image_ctrl->getImageAssetID());
- }
- else
- {
- msg->addUUIDFast( _PREHASH_ImageID, LLUUID::null);
- }
-// msg->addUUIDFast( _PREHASH_ImageID, mPanelSecondLife->mimage_ctrl->getImageAssetID() );
- msg->addUUIDFast( _PREHASH_FLImageID, first_life_image_id);
- msg->addStringFast( _PREHASH_AboutText, about_text);
- msg->addStringFast( _PREHASH_FLAboutText, first_life_about_text);
-
- msg->addBOOL("AllowPublish", allow_publish);
- msg->addBOOL("MaturePublish", mature);
- msg->addString("ProfileURL", mPanelWeb->childGetText("url_edit"));
- gAgent.sendReliableMessage();
-
- msg->newMessage("AvatarInterestsUpdate");
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast( _PREHASH_AgentID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
- msg->nextBlockFast(_PREHASH_PropertiesData);
- msg->addU32Fast( _PREHASH_WantToMask, want_to_mask);
- msg->addStringFast( _PREHASH_WantToText, want_to_text);
- msg->addU32Fast( _PREHASH_SkillsMask, skills_mask);
- msg->addStringFast( _PREHASH_SkillsText, skills_text);
- msg->addString( "LanguagesText", languages_text);
- gAgent.sendReliableMessage();
}
-void LLPanelAvatar::selectTab(S32 tabnum)
+LLPanelAvatarNotes::~LLPanelAvatarNotes()
{
- if(mTab)
+ if(getAvatarId().notNull())
{
- mTab->selectTab(tabnum);
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
}
-void LLPanelAvatar::selectTabByName(std::string tab_name)
+void* LLPanelAvatarNotes::create(void* data)
{
- if (mTab)
+ if(data)
{
- if (tab_name.empty())
- {
- mTab->selectFirstTab();
- }
- else
- {
- mTab->selectTabByName(tab_name);
- }
+ LLSD* id = static_cast<LLSD*>(data);
+ return new LLPanelAvatarNotes(LLUUID(id->asUUID()));
}
+ return new LLPanelAvatarNotes();
}
-
-void LLPanelAvatar::processAvatarNotesReply(LLMessageSystem *msg, void**)
+void LLPanelAvatarNotes::updateData()
{
- // extract the agent id
- LLUUID agent_id;
- msg->getUUID("AgentData", "AgentID", agent_id);
-
- LLUUID target_id;
- msg->getUUID("Data", "TargetID", target_id);
+ LLAvatarPropertiesProcessor::getInstance()->sendDataRequest(getAvatarId(),APT_NOTES);
- // look up all panels which have this avatar
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(getAvatarId());
+ if(relation)
{
- LLPanelAvatar* self = *iter;
- if (self->mAvatarID != target_id)
- {
- continue;
- }
-
- std::string text;
- msg->getString("Data", "Notes", text);
- self->childSetValue("notes edit", text);
- self->childSetEnabled("notes edit", true);
- self->mHaveNotes = true;
- self->mLastNotes = text;
- }
-}
-
-
-void LLPanelAvatar::processAvatarClassifiedReply(LLMessageSystem *msg, void** userdata)
-{
- LLUUID agent_id;
- LLUUID target_id;
-
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TargetID, target_id);
+ childSetEnabled("status_check",TRUE);
+ childSetEnabled("map_check",TRUE);
+ childSetEnabled("objects_check",TRUE);
- // look up all panels which have this avatar target
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
- {
- LLPanelAvatar* self = *iter;
- if (self->mAvatarID != target_id)
- {
- continue;
- }
+ S32 rights = relation->getRightsGrantedTo();
- self->mPanelClassified->processAvatarClassifiedReply(msg, userdata);
+ childSetValue("status_check",LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE);
+ childSetValue("map_check",LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE);
+ childSetValue("objects_check",LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE);
}
}
-void LLPanelAvatar::processAvatarPicksReply(LLMessageSystem *msg, void** userdata)
+BOOL LLPanelAvatarNotes::postBuild()
{
- LLUUID agent_id;
- LLUUID target_id;
+ childSetCommitCallback("status_check",boost::bind(&LLPanelAvatarNotes::onCommitRights,this),NULL);
+ childSetCommitCallback("map_check",boost::bind(&LLPanelAvatarNotes::onCommitRights,this),NULL);
+ childSetCommitCallback("objects_check",boost::bind(&LLPanelAvatarNotes::onCommitRights,this),NULL);
- msg->getUUID("AgentData", "AgentID", agent_id);
- msg->getUUID("AgentData", "TargetID", target_id);
+ childSetCommitCallback("add_friend",(boost::bind(&LLPanelAvatarProfile::onAddFriend,this)),NULL);
+ childSetCommitCallback("im",(boost::bind(&LLPanelAvatarProfile::onIM,this)),NULL);
+// childSetCommitCallback("call",(boost::bind(&LLPanelAvatarProfile::onCallButtonClick,this)));
+ childSetCommitCallback("teleport",(boost::bind(&LLPanelAvatarProfile::onTeleport,this)),NULL);
+// childSetCommitCallback("share",(boost::bind(&LLPanelAvatarProfile::onShareButtonClick,this)));
- // look up all panels which have this avatar target
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ LLTextEditor* te = getChild<LLTextEditor>("notes_edit",TRUE,FALSE);
+ if(te)
{
- LLPanelAvatar* self = *iter;
- if (self->mAvatarID != target_id)
- {
- continue;
- }
-
- self->mPanelPicks->processAvatarPicksReply(msg, userdata);
+ te->setCommitCallback(boost::bind(&LLPanelAvatarNotes::onCommitNotes,this));
+ te->setCommitOnFocusLost(TRUE);
}
-}
-
-// static
-void LLPanelAvatar::onClickKick(void* userdata)
-{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
- S32 left, top;
- gFloaterView->getNewFloaterPosition(&left, &top);
- LLRect rect(left, top, left+400, top-300);
-
- LLSD payload;
- payload["avatar_id"] = self->mAvatarID;
- LLNotifications::instance().add("KickUser", LLSD(), payload, finishKick);
+ return TRUE;
}
-//static
-bool LLPanelAvatar::finishKick(const LLSD& notification, const LLSD& response)
+void LLPanelAvatarNotes::onCommitNotes()
{
- S32 option = LLNotification::getSelectedOption(notification, response);
-
- if (option == 0)
- {
- LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
- LLMessageSystem* msg = gMessageSystem;
-
- msg->newMessageFast(_PREHASH_GodKickUser);
- msg->nextBlockFast(_PREHASH_UserInfo);
- msg->addUUIDFast(_PREHASH_GodID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_AgentID, avatar_id );
- msg->addU32("KickFlags", KICK_FLAGS_DEFAULT );
- msg->addStringFast(_PREHASH_Reason, response["message"].asString() );
- gAgent.sendReliableMessage();
- }
- return false;
+ std::string notes = childGetValue("notes_edit").asString();
+ LLAvatarPropertiesProcessor::getInstance()-> sendNotes(getAvatarId(),notes);
}
-// static
-void LLPanelAvatar::onClickFreeze(void* userdata)
+void LLPanelAvatarNotes::onCommitRights()
{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
- LLSD payload;
- payload["avatar_id"] = self->mAvatarID;
- LLNotifications::instance().add("FreezeUser", LLSD(), payload, LLPanelAvatar::finishFreeze);
-}
+ S32 rights = 0;
-// static
-bool LLPanelAvatar::finishFreeze(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ if(childGetValue("status_check").asBoolean())
+ rights |= LLRelationship::GRANT_ONLINE_STATUS;
+ if(childGetValue("map_check").asBoolean())
+ rights |= LLRelationship::GRANT_MAP_LOCATION;
+ if(childGetValue("objects_check").asBoolean())
+ rights |= LLRelationship::GRANT_MODIFY_OBJECTS;
- if (option == 0)
- {
- LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
- LLMessageSystem* msg = gMessageSystem;
-
- msg->newMessageFast(_PREHASH_GodKickUser);
- msg->nextBlockFast(_PREHASH_UserInfo);
- msg->addUUIDFast(_PREHASH_GodID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_AgentID, avatar_id );
- msg->addU32("KickFlags", KICK_FLAGS_FREEZE );
- msg->addStringFast(_PREHASH_Reason, response["message"].asString() );
- gAgent.sendReliableMessage();
- }
- return false;
+ LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(getAvatarId(),rights);
}
-// static
-void LLPanelAvatar::onClickUnfreeze(void* userdata)
+void LLPanelAvatarNotes::clear()
{
- LLPanelAvatar* self = (LLPanelAvatar*) userdata;
- LLSD payload;
- payload["avatar_id"] = self->mAvatarID;
- LLNotifications::instance().add("UnFreezeUser", LLSD(), payload, LLPanelAvatar::finishUnfreeze);
-}
+ childSetValue("notes_edit",LLStringUtil::null);
-// static
-bool LLPanelAvatar::finishUnfreeze(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
- std::string text = response["message"].asString();
- if (option == 0)
- {
- LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
- LLMessageSystem* msg = gMessageSystem;
-
- msg->newMessageFast(_PREHASH_GodKickUser);
- msg->nextBlockFast(_PREHASH_UserInfo);
- msg->addUUIDFast(_PREHASH_GodID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_AgentID, avatar_id );
- msg->addU32("KickFlags", KICK_FLAGS_UNFREEZE );
- msg->addStringFast(_PREHASH_Reason, text );
- gAgent.sendReliableMessage();
- }
- return false;
+ childSetEnabled("status_check",FALSE);
+ childSetEnabled("map_check",FALSE);
+ childSetEnabled("objects_check",FALSE);
}
-// static
-void LLPanelAvatar::onClickCSR(void* userdata)
+void LLPanelAvatarNotes::processProperties(void* data, EAvatarProcessorType type)
{
- LLPanelAvatar* self = (LLPanelAvatar*)userdata;
- if (!self) return;
-
- LLNameEditor* name_edit = self->getChild<LLNameEditor>("name");
- if (!name_edit) return;
-
- std::string name = name_edit->getText();
- if (name.empty()) return;
-
- std::string url = "http://csr.lindenlab.com/agent/";
-
- // slow and stupid, but it's late
- S32 len = name.length();
- for (S32 i = 0; i < len; i++)
+ if(APT_NOTES == type)
{
- if (name[i] == ' ')
+ LLAvatarNotes* avatar_notes = static_cast<LLAvatarNotes*>(data);
+ if(avatar_notes && getAvatarId() == avatar_notes->target_id)
{
- url += "%20";
- }
- else
- {
- url += name[i];
+ childSetValue("notes_edit",avatar_notes->notes);
+ childSetEnabled("notes edit", true);
+
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
}
-
- LLWeb::loadURL(url);
-}
-
-
-void* LLPanelAvatar::createPanelAvatarSecondLife(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelSecondLife = new LLPanelAvatarSecondLife(std::string("2nd Life"),LLRect(),self);
- return self->mPanelSecondLife;
-}
-
-void* LLPanelAvatar::createPanelAvatarWeb(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelWeb = new LLPanelAvatarWeb(std::string("Web"),LLRect(),self);
- return self->mPanelWeb;
-}
-
-void* LLPanelAvatar::createPanelAvatarInterests(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelAdvanced = new LLPanelAvatarAdvanced(std::string("Interests"),LLRect(),self);
- return self->mPanelAdvanced;
-}
-
-
-void* LLPanelAvatar::createPanelAvatarPicks(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelPicks = new LLPanelAvatarPicks(std::string("Picks"),LLRect(),self);
- return self->mPanelPicks;
-}
-
-void* LLPanelAvatar::createPanelAvatarClassified(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelClassified = new LLPanelAvatarClassified(std::string("Classified"),LLRect(),self);
- return self->mPanelClassified;
-}
-
-void* LLPanelAvatar::createPanelAvatarFirstLife(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelFirstLife = new LLPanelAvatarFirstLife(std::string("1st Life"), LLRect(), self);
- return self->mPanelFirstLife;
-}
-
-void* LLPanelAvatar::createPanelAvatarNotes(void* data)
-{
- LLPanelAvatar* self = (LLPanelAvatar*)data;
- self->mPanelNotes = new LLPanelAvatarNotes(std::string("My Notes"),LLRect(),self);
- return self->mPanelNotes;
}