/indra/newview/llpanelavatar.cpp
https://bitbucket.org/lindenlab/viewer-beta/ · C++ · 200 lines · 135 code · 26 blank · 39 comment · 9 complexity · 5e43c8807092a416fe208690e4c141ca MD5 · raw file
- /**
- * @file llpanelavatar.cpp
- * @brief LLPanelAvatar and related class implementations
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, 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
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
- #include "llviewerprecompiledheaders.h"
- #include "llpanelavatar.h"
- #include "llagent.h"
- #include "llavataractions.h"
- #include "llavatarconstants.h" // AVATAR_ONLINE
- #include "llcallingcard.h"
- #include "llcombobox.h"
- #include "lldateutil.h" // ageFromDate()
- #include "llimview.h"
- #include "llmenubutton.h"
- #include "llnotificationsutil.h"
- #include "llslurl.h"
- #include "lltexteditor.h"
- #include "lltexturectrl.h"
- #include "lltoggleablemenu.h"
- #include "lltooldraganddrop.h"
- #include "llscrollcontainer.h"
- #include "llavatariconctrl.h"
- #include "llfloaterreg.h"
- #include "llnotificationsutil.h"
- #include "llvoiceclient.h"
- #include "lltextbox.h"
- #include "lltrans.h"
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Class LLDropTarget
- //
- // This handy class is a simple way to drop something on another
- // view. It handles drop events, always setting itself to the size of
- // its parent.
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- class LLDropTarget : public LLView
- {
- public:
- struct Params : public LLInitParam::Block<Params, LLView::Params>
- {
- Optional<LLUUID> agent_id;
- Params()
- : agent_id("agent_id")
- {
- changeDefault(mouse_opaque, false);
- changeDefault(follows.flags, FOLLOWS_ALL);
- }
- };
- LLDropTarget(const Params&);
- ~LLDropTarget();
- void doDrop(EDragAndDropType cargo_type, void* cargo_data);
- //
- // LLView functionality
- virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
- EDragAndDropType cargo_type,
- void* cargo_data,
- EAcceptance* accept,
- std::string& tooltip_msg);
- void setAgentID(const LLUUID &agent_id) { mAgentID = agent_id; }
- protected:
- LLUUID mAgentID;
- };
- LLDropTarget::LLDropTarget(const LLDropTarget::Params& p)
- : LLView(p),
- mAgentID(p.agent_id)
- {}
- LLDropTarget::~LLDropTarget()
- {}
- void LLDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
- {
- llinfos << "LLDropTarget::doDrop()" << llendl;
- }
- BOOL LLDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
- EDragAndDropType cargo_type,
- void* cargo_data,
- EAcceptance* accept,
- std::string& tooltip_msg)
- {
- if(getParent())
- {
- LLToolDragAndDrop::handleGiveDragAndDrop(mAgentID, LLUUID::null, drop,
- cargo_type, cargo_data, accept);
- return TRUE;
- }
- return FALSE;
- }
- static LLDefaultChildRegistry::Register<LLDropTarget> r("drop_target");
- //////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////
- LLPanelProfileTab::LLPanelProfileTab()
- : LLPanel()
- , mAvatarId(LLUUID::null)
- {
- }
- LLPanelProfileTab::~LLPanelProfileTab()
- {
- if(getAvatarId().notNull())
- {
- LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
- }
- }
- void LLPanelProfileTab::setAvatarId(const LLUUID& id)
- {
- if(id.notNull())
- {
- if(getAvatarId().notNull())
- {
- LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId,this);
- }
- mAvatarId = id;
- LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(),this);
- }
- }
- void LLPanelProfileTab::onOpen(const LLSD& key)
- {
- // Don't reset panel if we are opening it for same avatar.
- if(getAvatarId() != key.asUUID())
- {
- resetControls();
- resetData();
- scrollToTop();
- }
- // Update data even if we are viewing same avatar profile as some data might been changed.
- setAvatarId(key.asUUID());
- updateData();
- updateButtons();
- }
- void LLPanelProfileTab::scrollToTop()
- {
- LLScrollContainer* scrollContainer = findChild<LLScrollContainer>("profile_scroll");
- if (scrollContainer)
- scrollContainer->goToTop();
- }
- void LLPanelProfileTab::onMapButtonClick()
- {
- LLAvatarActions::showOnMap(getAvatarId());
- }
- void LLPanelProfileTab::updateButtons()
- {
- bool is_buddy_online = LLAvatarTracker::instance().isBuddyOnline(getAvatarId());
-
- if(LLAvatarActions::isFriend(getAvatarId()))
- {
- getChildView("teleport")->setEnabled(is_buddy_online);
- }
- else
- {
- getChildView("teleport")->setEnabled(true);
- }
- bool enable_map_btn = (is_buddy_online &&
- is_agent_mappable(getAvatarId()))
- || gAgent.isGodlike();
- getChildView("show_on_map_btn")->setEnabled(enable_map_btn);
- }