Added viewer based profiles
Split picks and classifieds in to separate panels Moved getProfileURL to LLAvatarActions Removed dead XUI panels Removed picks/classifieds floatermaster
parent
0be2b5ce51
commit
b82d70cf2a
|
|
@ -280,6 +280,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterpay.cpp
|
||||
llfloaterperms.cpp
|
||||
llfloaterpostprocess.cpp
|
||||
llfloaterprofile.cpp
|
||||
llfloaterpreference.cpp
|
||||
llfloaterpreviewtrash.cpp
|
||||
llfloaterproperties.cpp
|
||||
|
|
@ -421,7 +422,6 @@ set(viewer_SOURCE_FILES
|
|||
llpanelavatar.cpp
|
||||
llpanelavatartag.cpp
|
||||
llpanelblockedlist.cpp
|
||||
llpanelclassified.cpp
|
||||
llpanelcontents.cpp
|
||||
llpaneleditwearable.cpp
|
||||
llpanelexperiencelisteditor.cpp
|
||||
|
|
@ -453,7 +453,6 @@ set(viewer_SOURCE_FILES
|
|||
llpanelmediasettingsgeneral.cpp
|
||||
llpanelmediasettingspermissions.cpp
|
||||
llpanelmediasettingssecurity.cpp
|
||||
llpanelme.cpp
|
||||
llpanelnearbymedia.cpp
|
||||
llpanelobject.cpp
|
||||
llpanelobjectinventory.cpp
|
||||
|
|
@ -464,7 +463,6 @@ set(viewer_SOURCE_FILES
|
|||
llpanelpeoplemenus.cpp
|
||||
llpanelpermissions.cpp
|
||||
llpanelpick.cpp
|
||||
llpanelpicks.cpp
|
||||
llpanelplaceinfo.cpp
|
||||
llpanelplaceprofile.cpp
|
||||
llpanelplaces.cpp
|
||||
|
|
@ -472,6 +470,8 @@ set(viewer_SOURCE_FILES
|
|||
llpanelpresetspulldown.cpp
|
||||
llpanelprimmediacontrols.cpp
|
||||
llpanelprofile.cpp
|
||||
llpanelprofileclassifieds.cpp
|
||||
llpanelprofilepicks.cpp
|
||||
llpanelsnapshot.cpp
|
||||
llpanelsnapshotinventory.cpp
|
||||
llpanelsnapshotlocal.cpp
|
||||
|
|
@ -909,6 +909,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterpay.h
|
||||
llfloaterperms.h
|
||||
llfloaterpostprocess.h
|
||||
llfloaterprofile.h
|
||||
llfloaterpreference.h
|
||||
llfloaterpreviewtrash.h
|
||||
llfloaterproperties.h
|
||||
|
|
@ -1040,7 +1041,6 @@ set(viewer_HEADER_FILES
|
|||
llpanelavatar.h
|
||||
llpanelavatartag.h
|
||||
llpanelblockedlist.h
|
||||
llpanelclassified.h
|
||||
llpanelcontents.h
|
||||
llpaneleditwearable.h
|
||||
llpanelexperiencelisteditor.h
|
||||
|
|
@ -1073,7 +1073,6 @@ set(viewer_HEADER_FILES
|
|||
llpanelmediasettingsgeneral.h
|
||||
llpanelmediasettingspermissions.h
|
||||
llpanelmediasettingssecurity.h
|
||||
llpanelme.h
|
||||
llpanelnearbymedia.h
|
||||
llpanelobject.h
|
||||
llpanelobjectinventory.h
|
||||
|
|
@ -1084,7 +1083,6 @@ set(viewer_HEADER_FILES
|
|||
llpanelpeoplemenus.h
|
||||
llpanelpermissions.h
|
||||
llpanelpick.h
|
||||
llpanelpicks.h
|
||||
llpanelplaceinfo.h
|
||||
llpanelplaceprofile.h
|
||||
llpanelplaces.h
|
||||
|
|
@ -1092,6 +1090,8 @@ set(viewer_HEADER_FILES
|
|||
llpanelpresetspulldown.h
|
||||
llpanelprimmediacontrols.h
|
||||
llpanelprofile.h
|
||||
llpanelprofileclassifieds.h
|
||||
llpanelprofilepicks.h
|
||||
llpanelsnapshot.h
|
||||
llpanelteleporthistory.h
|
||||
llpaneltiptoast.h
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
#include "llfloatergroups.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterpay.h"
|
||||
#include "llfloaterprofile.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llfloaterwebcontent.h"
|
||||
#include "llfloaterworldmap.h"
|
||||
|
|
@ -67,6 +68,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llviewermessage.h" // for handle_lure
|
||||
#include "llviewernetwork.h" //LLGridManager
|
||||
#include "llviewerregion.h"
|
||||
#include "lltrans.h"
|
||||
#include "llcallingcard.h"
|
||||
|
|
@ -81,6 +83,18 @@ const U32 KICK_FLAGS_FREEZE = 1 << 0;
|
|||
const U32 KICK_FLAGS_UNFREEZE = 1 << 1;
|
||||
|
||||
|
||||
std::string getProfileURL(const std::string& agent_name)
|
||||
{
|
||||
std::string url = "[WEB_PROFILE_URL][AGENT_NAME]";
|
||||
LLSD subs;
|
||||
subs["WEB_PROFILE_URL"] = LLGridManager::getInstance()->getWebProfileURL();
|
||||
subs["AGENT_NAME"] = agent_name;
|
||||
url = LLWeb::expandURLSubstitutions(url, subs);
|
||||
LLStringUtil::toLower(url);
|
||||
return url;
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name)
|
||||
{
|
||||
|
|
@ -319,7 +333,7 @@ void LLAvatarActions::startConference(const uuid_vec_t& ids, const LLUUID& float
|
|||
static const char* get_profile_floater_name(const LLUUID& avatar_id)
|
||||
{
|
||||
// Use different floater XML for our profile to be able to save its rect.
|
||||
return avatar_id == gAgentID ? "my_profile" : "profile";
|
||||
return avatar_id == gAgentID ? "my_profile_web" : "profile_web";
|
||||
}
|
||||
|
||||
static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarName& av_name)
|
||||
|
|
@ -333,40 +347,101 @@ static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarNa
|
|||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::showProfile(const LLUUID& id)
|
||||
void LLAvatarActions::showProfile(const LLUUID& avatar_id)
|
||||
{
|
||||
if (id.notNull())
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_show_profile, _1, _2));
|
||||
LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id));
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::showPicks(const LLUUID& avatar_id)
|
||||
{
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
|
||||
if (profilefloater)
|
||||
{
|
||||
profilefloater->showPick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::showPick(const LLUUID& avatar_id, const LLUUID& pick_id)
|
||||
{
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
|
||||
if (profilefloater)
|
||||
{
|
||||
profilefloater->showPick(pick_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::showClassifieds(const LLUUID& avatar_id)
|
||||
{
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
|
||||
if (profilefloater)
|
||||
{
|
||||
profilefloater->showClassified();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::showClassified(const LLUUID& avatar_id, const LLUUID& classified_id, bool edit)
|
||||
{
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
LLFloaterProfile* profilefloater = dynamic_cast<LLFloaterProfile*>(LLFloaterReg::showInstance("profile", LLSD().with("id", avatar_id)));
|
||||
if (profilefloater)
|
||||
{
|
||||
profilefloater->showClassified(classified_id, edit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLAvatarActions::profileVisible(const LLUUID& id)
|
||||
bool LLAvatarActions::profileVisible(const LLUUID& avatar_id)
|
||||
{
|
||||
LLSD sd;
|
||||
sd["id"] = id;
|
||||
LLFloater* browser = getProfileFloater(id);
|
||||
return browser && browser->isShown();
|
||||
sd["id"] = avatar_id;
|
||||
LLFloater* floater = getProfileFloater(avatar_id);
|
||||
return floater && floater->isShown();
|
||||
}
|
||||
|
||||
//static
|
||||
LLFloater* LLAvatarActions::getProfileFloater(const LLUUID& id)
|
||||
LLFloater* LLAvatarActions::getProfileFloater(const LLUUID& avatar_id)
|
||||
{
|
||||
LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*>
|
||||
(LLFloaterReg::findInstance(get_profile_floater_name(id), LLSD().with("id", id)));
|
||||
return browser;
|
||||
LLFloaterProfile* floater = LLFloaterReg::findTypedInstance<LLFloaterProfile>("profile", LLSD().with("id", avatar_id));
|
||||
return floater;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::showProfileWeb(const LLUUID& avatar_id)
|
||||
{
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
LLAvatarNameCache::get(avatar_id, boost::bind(&on_avatar_name_show_profile, _1, _2));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
void LLAvatarActions::hideProfile(const LLUUID& id)
|
||||
void LLAvatarActions::hideProfile(const LLUUID& avatar_id)
|
||||
{
|
||||
LLSD sd;
|
||||
sd["id"] = id;
|
||||
LLFloater* browser = getProfileFloater(id);
|
||||
if (browser)
|
||||
sd["id"] = avatar_id;
|
||||
LLFloater* floater = getProfileFloater(avatar_id);
|
||||
if (floater)
|
||||
{
|
||||
browser->closeFloater();
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class LLInventoryPanel;
|
|||
class LLFloater;
|
||||
class LLView;
|
||||
|
||||
std::string getProfileURL(const std::string& agent_name);
|
||||
|
||||
/**
|
||||
* Friend-related actions (add, remove, offer teleport, etc)
|
||||
*/
|
||||
|
|
@ -91,13 +93,18 @@ public:
|
|||
*/
|
||||
static void startConference(const uuid_vec_t& ids, const LLUUID& floater_id = LLUUID::null);
|
||||
|
||||
/**
|
||||
* Show avatar profile.
|
||||
*/
|
||||
static void showProfile(const LLUUID& id);
|
||||
static void hideProfile(const LLUUID& id);
|
||||
static bool profileVisible(const LLUUID& id);
|
||||
static LLFloater* getProfileFloater(const LLUUID& id);
|
||||
/**
|
||||
* Show avatar profile.
|
||||
*/
|
||||
static void showProfile(const LLUUID& avatar_id);
|
||||
static void showPicks(const LLUUID& avatar_id);
|
||||
static void showPick(const LLUUID& avatar_id, const LLUUID& pick_id);
|
||||
static void showClassifieds(const LLUUID& avatar_id);
|
||||
static void showClassified(const LLUUID& avatar_id, const LLUUID& classified_id, bool edit = false);
|
||||
static void hideProfile(const LLUUID& avatar_id);
|
||||
static bool profileVisible(const LLUUID& avatar_id);
|
||||
static LLFloater* getProfileFloater(const LLUUID& avatar_id);
|
||||
static void showProfileWeb(const LLUUID& avatar_id);
|
||||
|
||||
/**
|
||||
* Show avatar on world map.
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "lltoolfocus.h"
|
||||
#include "lltoolmgr.h"
|
||||
#include "llwebprofile.h"
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Local function declarations, constants, enums, and typedefs
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
/**
|
||||
* @file llfloaterprofile.cpp
|
||||
* @brief Avatar profile floater.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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 "llfloaterprofile.h"
|
||||
|
||||
#include "llpanelavatar.h"
|
||||
#include "llpanelprofile.h"
|
||||
#include "llagent.h" //gAgent
|
||||
|
||||
static const std::string PANEL_PROFILE_VIEW = "panel_profile_view";
|
||||
|
||||
LLFloaterProfile::LLFloaterProfile(const LLSD& key)
|
||||
: LLFloater(key),
|
||||
mAvatarId(key["id"].asUUID()),
|
||||
mNameCallbackConnection()
|
||||
{
|
||||
}
|
||||
|
||||
LLFloaterProfile::~LLFloaterProfile()
|
||||
{
|
||||
if (mNameCallbackConnection.connected())
|
||||
{
|
||||
mNameCallbackConnection.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterProfile::onOpen(const LLSD& key)
|
||||
{
|
||||
mPanelProfile->onOpen(key);
|
||||
|
||||
if (mAvatarId == gAgentID)
|
||||
{
|
||||
getChild<LLUICtrl>("ok_btn")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("cancel_btn")->setVisible(TRUE);
|
||||
}
|
||||
|
||||
// Update the avatar name.
|
||||
mNameCallbackConnection = LLAvatarNameCache::get(mAvatarId, boost::bind(&LLFloaterProfile::onAvatarNameCache, this, _1, _2));
|
||||
}
|
||||
|
||||
BOOL LLFloaterProfile::postBuild()
|
||||
{
|
||||
mPanelProfile = findChild<LLPanelProfile>(PANEL_PROFILE_VIEW);
|
||||
|
||||
childSetAction("ok_btn", boost::bind(&LLFloaterProfile::onOKBtn, this));
|
||||
childSetAction("cancel_btn", boost::bind(&LLFloaterProfile::onCancelBtn, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterProfile::showPick(const LLUUID& pick_id)
|
||||
{
|
||||
mPanelProfile->showPick(pick_id);
|
||||
}
|
||||
|
||||
void LLFloaterProfile::showClassified(const LLUUID& classified_id, bool edit)
|
||||
{
|
||||
mPanelProfile->showClassified(classified_id, edit);
|
||||
}
|
||||
|
||||
void LLFloaterProfile::onOKBtn()
|
||||
{
|
||||
if (mAvatarId == gAgentID)
|
||||
{
|
||||
mPanelProfile->apply();
|
||||
}
|
||||
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterProfile::onCancelBtn()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterProfile::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
|
||||
{
|
||||
mNameCallbackConnection.disconnect();
|
||||
setTitle(av_name.getCompleteName());
|
||||
}
|
||||
|
||||
// eof
|
||||
|
|
@ -1,50 +1,62 @@
|
|||
/**
|
||||
* @file llpanelme.h
|
||||
* @brief Side tray "Me" (My Profile) panel
|
||||
/**
|
||||
* @file llfloaterprofile.h
|
||||
* @brief Avatar profile floater.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELMEPROFILE_H
|
||||
#define LL_LLPANELMEPROFILE_H
|
||||
#ifndef LL_LLFLOATERPROFILE_H
|
||||
#define LL_LLFLOATERPROFILE_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llpanelprofile.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llfloater.h"
|
||||
|
||||
/**
|
||||
* Panel for displaying Agent's Picks and Classifieds panel.
|
||||
* LLPanelMe allows user to edit his picks and classifieds.
|
||||
*/
|
||||
class LLPanelMe : public LLPanelProfile
|
||||
class LLPanelProfile;
|
||||
|
||||
class LLFloaterProfile : public LLFloater
|
||||
{
|
||||
LOG_CLASS(LLPanelMe);
|
||||
|
||||
LOG_CLASS(LLFloaterProfile);
|
||||
public:
|
||||
LLFloaterProfile(const LLSD& key);
|
||||
virtual ~LLFloaterProfile();
|
||||
|
||||
LLPanelMe();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
void showPick(const LLUUID& pick_id = LLUUID::null);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
void showClassified(const LLUUID& classified_id = LLUUID::null, bool edit = false);
|
||||
|
||||
protected:
|
||||
void onOKBtn();
|
||||
void onCancelBtn();
|
||||
|
||||
private:
|
||||
LLAvatarNameCache::callback_connection_t mNameCallbackConnection;
|
||||
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
|
||||
|
||||
LLPanelProfile* mPanelProfile;
|
||||
|
||||
LLUUID mAvatarId;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELMEPROFILE_H
|
||||
#endif // LL_LLFLOATERPROFILE_H
|
||||
|
|
@ -65,22 +65,46 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
static const LLGroupComparator GROUP_COMPARATOR;
|
||||
static LLGroupComparator GROUP_COMPARATOR;
|
||||
|
||||
LLGroupList::Params::Params()
|
||||
: for_agent("for_agent", true)
|
||||
{
|
||||
}
|
||||
|
||||
LLGroupList::LLGroupList(const Params& p)
|
||||
: LLFlatListViewEx(p)
|
||||
, mForAgent(p.for_agent)
|
||||
, mDirty(true) // to force initial update
|
||||
, mShowIcons(false)
|
||||
, mShowNone(true)
|
||||
{
|
||||
// Listen for agent group changes.
|
||||
gAgent.addListener(this, "new group");
|
||||
|
||||
mShowIcons = gSavedSettings.getBOOL("GroupListShowIcons");
|
||||
setCommitOnSelectionChange(true);
|
||||
|
||||
// Set default sort order.
|
||||
setComparator(&GROUP_COMPARATOR);
|
||||
|
||||
if (mForAgent)
|
||||
{
|
||||
enableForAgent(true);
|
||||
}
|
||||
}
|
||||
|
||||
LLGroupList::~LLGroupList()
|
||||
{
|
||||
if (mForAgent) gAgent.removeListener(this);
|
||||
if (mContextMenuHandle.get()) mContextMenuHandle.get()->die();
|
||||
}
|
||||
|
||||
void LLGroupList::enableForAgent(bool show_icons)
|
||||
{
|
||||
mForAgent = true;
|
||||
|
||||
mShowIcons = mForAgent && gSavedSettings.getBOOL("GroupListShowIcons") && show_icons;
|
||||
|
||||
// Listen for agent group changes.
|
||||
gAgent.addListener(this, "new group");
|
||||
|
||||
// Set up context menu.
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
|
||||
|
|
@ -94,12 +118,6 @@ LLGroupList::LLGroupList(const Params& p)
|
|||
mContextMenuHandle = context_menu->getHandle();
|
||||
}
|
||||
|
||||
LLGroupList::~LLGroupList()
|
||||
{
|
||||
gAgent.removeListener(this);
|
||||
if (mContextMenuHandle.get()) mContextMenuHandle.get()->die();
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLGroupList::draw()
|
||||
{
|
||||
|
|
@ -114,12 +132,15 @@ BOOL LLGroupList::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
|||
{
|
||||
BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
|
||||
|
||||
LLToggleableMenu* context_menu = mContextMenuHandle.get();
|
||||
if (context_menu && size() > 0)
|
||||
{
|
||||
context_menu->buildDrawLabels();
|
||||
context_menu->updateParent(LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::showPopup(this, context_menu, x, y);
|
||||
if (mForAgent)
|
||||
{
|
||||
LLToggleableMenu* context_menu = mContextMenuHandle.get();
|
||||
if (context_menu && size() > 0)
|
||||
{
|
||||
context_menu->buildDrawLabels();
|
||||
context_menu->updateParent(LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::showPopup(this, context_menu, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
return handled;
|
||||
|
|
@ -164,34 +185,49 @@ static bool findInsensitive(std::string haystack, const std::string& needle_uppe
|
|||
|
||||
void LLGroupList::refresh()
|
||||
{
|
||||
const LLUUID& highlight_id = gAgent.getGroupID();
|
||||
S32 count = gAgent.mGroups.size();
|
||||
LLUUID id;
|
||||
bool have_filter = !mNameFilter.empty();
|
||||
if (mForAgent)
|
||||
{
|
||||
const LLUUID& highlight_id = gAgent.getGroupID();
|
||||
S32 count = gAgent.mGroups.size();
|
||||
LLUUID id;
|
||||
bool have_filter = !mNameFilter.empty();
|
||||
|
||||
clear();
|
||||
clear();
|
||||
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
{
|
||||
id = gAgent.mGroups.at(i).mID;
|
||||
const LLGroupData& group_data = gAgent.mGroups.at(i);
|
||||
if (have_filter && !findInsensitive(group_data.mName, mNameFilter))
|
||||
continue;
|
||||
addNewItem(id, group_data.mName, group_data.mInsigniaID, ADD_BOTTOM);
|
||||
}
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
{
|
||||
id = gAgent.mGroups.at(i).mID;
|
||||
const LLGroupData& group_data = gAgent.mGroups.at(i);
|
||||
if (have_filter && !findInsensitive(group_data.mName, mNameFilter))
|
||||
continue;
|
||||
addNewItem(id, group_data.mName, group_data.mInsigniaID, ADD_BOTTOM, group_data.mListInProfile);
|
||||
}
|
||||
|
||||
// Sort the list.
|
||||
sort();
|
||||
// Sort the list.
|
||||
sort();
|
||||
|
||||
// Add "none" to list at top if filter not set (what's the point of filtering "none"?).
|
||||
// but only if some real groups exists. EXT-4838
|
||||
if (!have_filter && count > 0)
|
||||
{
|
||||
std::string loc_none = LLTrans::getString("GroupsNone");
|
||||
addNewItem(LLUUID::null, loc_none, LLUUID::null, ADD_TOP);
|
||||
}
|
||||
// Add "none" to list at top if filter not set (what's the point of filtering "none"?).
|
||||
// but only if some real groups exists. EXT-4838
|
||||
if (!have_filter && count > 0 && mShowNone)
|
||||
{
|
||||
std::string loc_none = LLTrans::getString("GroupsNone");
|
||||
addNewItem(LLUUID::null, loc_none, LLUUID::null, ADD_TOP);
|
||||
}
|
||||
|
||||
selectItemByUUID(highlight_id);
|
||||
selectItemByUUID(highlight_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
clear();
|
||||
|
||||
for (group_map_t::iterator it = mGroups.begin(); it != mGroups.end(); ++it)
|
||||
{
|
||||
addNewItem(it->second, it->first, LLUUID::null, ADD_BOTTOM);
|
||||
}
|
||||
|
||||
// Sort the list.
|
||||
sort();
|
||||
}
|
||||
|
||||
setDirty(false);
|
||||
onCommit();
|
||||
|
|
@ -212,13 +248,19 @@ void LLGroupList::toggleIcons()
|
|||
}
|
||||
}
|
||||
|
||||
void LLGroupList::setGroups(const std::map< std::string,LLUUID> group_list)
|
||||
{
|
||||
mGroups = group_list;
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// PRIVATE Section
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LLUUID& icon_id, EAddPosition pos)
|
||||
void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LLUUID& icon_id, EAddPosition pos, bool visible_in_profile)
|
||||
{
|
||||
LLGroupListItem* item = new LLGroupListItem();
|
||||
LLGroupListItem* item = new LLGroupListItem(mForAgent && mShowIcons);
|
||||
|
||||
item->setGroupID(id);
|
||||
item->setName(name, mNameFilter);
|
||||
|
|
@ -227,7 +269,7 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
|
|||
item->getChildView("info_btn")->setVisible( false);
|
||||
item->getChildView("profile_btn")->setVisible( false);
|
||||
item->setGroupIconVisible(mShowIcons);
|
||||
|
||||
item->setVisibleInProfile(visible_in_profile);
|
||||
addItem(item, id, pos);
|
||||
|
||||
// setCommentVisible(false);
|
||||
|
|
@ -243,6 +285,29 @@ bool LLGroupList::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD&
|
|||
return true;
|
||||
}
|
||||
|
||||
if (event->desc() == "value_changed")
|
||||
{
|
||||
LLSD data = event->getValue();
|
||||
if (data.has("group_id") && data.has("visible"))
|
||||
{
|
||||
LLUUID group_id = data["group_id"].asUUID();
|
||||
bool visible = data["visible"].asBoolean();
|
||||
|
||||
std::vector<LLPanel*> items;
|
||||
getItems(items);
|
||||
for (std::vector<LLPanel*>::iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
LLGroupListItem* item = dynamic_cast<LLGroupListItem*>(*it);
|
||||
if (item && item->getGroupID() == group_id)
|
||||
{
|
||||
item->setVisibleInProfile(visible);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -294,18 +359,25 @@ bool LLGroupList::onContextMenuItemEnable(const LLSD& userdata)
|
|||
/* LLGroupListItem implementation */
|
||||
/************************************************************************/
|
||||
|
||||
LLGroupListItem::LLGroupListItem()
|
||||
LLGroupListItem::LLGroupListItem(bool for_agent)
|
||||
: LLPanel(),
|
||||
mGroupIcon(NULL),
|
||||
mGroupNameBox(NULL),
|
||||
mInfoBtn(NULL),
|
||||
mGroupID(LLUUID::null)
|
||||
{
|
||||
buildFromFile( "panel_group_list_item.xml");
|
||||
if (for_agent)
|
||||
{
|
||||
buildFromFile( "panel_group_list_item.xml");
|
||||
}
|
||||
else
|
||||
{
|
||||
buildFromFile( "panel_group_list_item_short.xml");
|
||||
}
|
||||
|
||||
// Remember group icon width including its padding from the name text box,
|
||||
// so that we can hide and show the icon again later.
|
||||
if (!sIconWidth)
|
||||
if (!sIconWidth && mGroupNameBox)
|
||||
{
|
||||
sIconWidth = mGroupNameBox->getRect().mLeft - mGroupIcon->getRect().mLeft;
|
||||
}
|
||||
|
|
@ -397,6 +469,11 @@ void LLGroupListItem::setGroupIconVisible(bool visible)
|
|||
mGroupNameBox->setRect(name_rect);
|
||||
}
|
||||
|
||||
void LLGroupListItem::setVisibleInProfile(bool visible)
|
||||
{
|
||||
mGroupNameBox->setColor(LLUIColorTable::instance().getColor((visible ? "GroupVisibleInProfile" : "GroupHiddenInProfile"), LLColor4::red).get());
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Private Section
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -433,8 +510,10 @@ void LLGroupListItem::onProfileBtnClick()
|
|||
void LLGroupListItem::changed(LLGroupChange gc)
|
||||
{
|
||||
LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mID);
|
||||
if(group_data)
|
||||
setGroupIconID(group_data->mInsigniaID);
|
||||
if ((gc == GC_ALL || gc == GC_PROPERTIES) && group_data)
|
||||
{
|
||||
setGroupIconID(group_data->mInsigniaID);
|
||||
}
|
||||
}
|
||||
|
||||
//EOF
|
||||
|
|
|
|||
|
|
@ -50,12 +50,15 @@ class LLGroupList: public LLFlatListViewEx, public LLOldEvents::LLSimpleListener
|
|||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLFlatListViewEx::Params>
|
||||
{
|
||||
Params(){};
|
||||
Optional<bool> for_agent;
|
||||
Params();
|
||||
};
|
||||
|
||||
LLGroupList(const Params& p);
|
||||
virtual ~LLGroupList();
|
||||
|
||||
void enableForAgent(bool show_icons);
|
||||
|
||||
virtual void draw(); // from LLView
|
||||
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); // from LLView
|
||||
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); // from LLView
|
||||
|
|
@ -63,13 +66,16 @@ public:
|
|||
void setNameFilter(const std::string& filter);
|
||||
void toggleIcons();
|
||||
bool getIconsVisible() const { return mShowIcons; }
|
||||
void setIconsVisible(bool show_icons) { mShowIcons = show_icons; }
|
||||
void setShowNone(bool show_none) { mShowNone = show_none; }
|
||||
void setGroups(const std::map< std::string,LLUUID> group_list);
|
||||
|
||||
LLToggleableMenu* getContextMenu() const { return mContextMenuHandle.get(); }
|
||||
|
||||
private:
|
||||
void setDirty(bool val = true) { mDirty = val; }
|
||||
void refresh();
|
||||
void addNewItem(const LLUUID& id, const std::string& name, const LLUUID& icon_id, EAddPosition pos = ADD_BOTTOM);
|
||||
void addNewItem(const LLUUID& id, const std::string& name, const LLUUID& icon_id, EAddPosition pos = ADD_BOTTOM, bool visible_in_profile = true);
|
||||
bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); // called on agent group list changes
|
||||
|
||||
bool onContextMenuItemClick(const LLSD& userdata);
|
||||
|
|
@ -80,6 +86,11 @@ private:
|
|||
bool mShowIcons;
|
||||
bool mDirty;
|
||||
std::string mNameFilter;
|
||||
|
||||
bool mForAgent;
|
||||
bool mShowNone;
|
||||
typedef std::map< std::string,LLUUID> group_map_t;
|
||||
group_map_t mGroups;
|
||||
};
|
||||
|
||||
class LLButton;
|
||||
|
|
@ -90,7 +101,7 @@ class LLGroupListItem : public LLPanel
|
|||
, public LLGroupMgrObserver
|
||||
{
|
||||
public:
|
||||
LLGroupListItem();
|
||||
LLGroupListItem(bool for_agent);
|
||||
~LLGroupListItem();
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void setValue(const LLSD& value);
|
||||
|
|
@ -106,6 +117,8 @@ public:
|
|||
void setGroupIconVisible(bool visible);
|
||||
|
||||
virtual void changed(LLGroupChange gc);
|
||||
|
||||
void setVisibleInProfile(bool visible);
|
||||
private:
|
||||
void setActive(bool active);
|
||||
void onInfoBtnClick();
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
/**
|
||||
/**
|
||||
* @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$
|
||||
*/
|
||||
|
|
@ -28,172 +28,107 @@
|
|||
#include "llpanelavatar.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llavataractions.h"
|
||||
#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 "llloadingindicator.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.
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// LLProfileDropTarget
|
||||
|
||||
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)
|
||||
LLProfileDropTarget::LLProfileDropTarget(const LLProfileDropTarget::Params& p)
|
||||
: LLView(p),
|
||||
mAgentID(p.agent_id)
|
||||
{}
|
||||
|
||||
LLDropTarget::~LLDropTarget()
|
||||
{}
|
||||
|
||||
void LLDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
|
||||
void LLProfileDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
|
||||
{
|
||||
LL_INFOS() << "LLDropTarget::doDrop()" << LL_ENDL;
|
||||
LL_INFOS() << "LLProfileDropTarget::doDrop()" << LL_ENDL;
|
||||
}
|
||||
|
||||
BOOL LLDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg)
|
||||
BOOL LLProfileDropTarget::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);
|
||||
if (getParent())
|
||||
{
|
||||
LLToolDragAndDrop::handleGiveDragAndDrop(mAgentID, LLUUID::null, drop,
|
||||
cargo_type, cargo_data, accept);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static LLDefaultChildRegistry::Register<LLDropTarget> r("drop_target");
|
||||
static LLDefaultChildRegistry::Register<LLProfileDropTarget> r("profile_drop_target");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// LLPanelProfileTab
|
||||
|
||||
LLPanelProfileTab::LLPanelProfileTab()
|
||||
: LLPanel()
|
||||
, mAvatarId(LLUUID::null)
|
||||
, mLoading(false)
|
||||
, mLoaded(false)
|
||||
, mEmbedded(false)
|
||||
, mSelfProfile(false)
|
||||
{
|
||||
}
|
||||
|
||||
LLPanelProfileTab::~LLPanelProfileTab()
|
||||
{
|
||||
if(getAvatarId().notNull())
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
|
||||
}
|
||||
if(getAvatarId().notNull())
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfileTab::setAvatarId(const LLUUID& id)
|
||||
void LLPanelProfileTab::setAvatarId(const LLUUID& avatar_id)
|
||||
{
|
||||
if(id.notNull())
|
||||
{
|
||||
if(getAvatarId().notNull())
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId,this);
|
||||
}
|
||||
mAvatarId = id;
|
||||
LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(),this);
|
||||
}
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
if (getAvatarId().notNull())
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId, this);
|
||||
}
|
||||
mAvatarId = avatar_id;
|
||||
LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
|
||||
|
||||
mSelfProfile = (getAvatarId() == gAgentID);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfileTab::onOpen(const LLSD& key)
|
||||
{
|
||||
// Don't reset panel if we are opening it for same avatar.
|
||||
if(getAvatarId() != key.asUUID())
|
||||
{
|
||||
resetControls();
|
||||
resetData();
|
||||
// Update data even if we are viewing same avatar profile as some data might been changed.
|
||||
setAvatarId(key.asUUID());
|
||||
|
||||
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());
|
||||
setApplyProgress(true);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
setApplyProgress(false);
|
||||
|
||||
bool enable_map_btn = (is_buddy_online &&
|
||||
is_agent_mappable(getAvatarId()))
|
||||
|| gAgent.isGodlike();
|
||||
getChildView("show_on_map_btn")->setEnabled(enable_map_btn);
|
||||
mLoaded = true;
|
||||
}
|
||||
|
||||
void LLPanelProfileTab::setApplyProgress(bool started)
|
||||
{
|
||||
LLLoadingIndicator* indicator = findChild<LLLoadingIndicator>("progress_indicator");
|
||||
|
||||
if (indicator)
|
||||
{
|
||||
indicator->setVisible(started);
|
||||
|
||||
if (started)
|
||||
{
|
||||
indicator->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
indicator->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
/**
|
||||
/**
|
||||
* @file llpanelavatar.h
|
||||
* @brief LLPanelAvatar and related class definitions
|
||||
* @brief Legacy profile panel base class
|
||||
*
|
||||
* $LicenseInfo:firstyear=2004&license=viewerlgpl$
|
||||
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* Copyright (C) 2019, 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$
|
||||
*/
|
||||
|
|
@ -29,80 +29,125 @@
|
|||
|
||||
#include "llpanel.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llvoiceclient.h"
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
class LLComboBox;
|
||||
class LLLineEditor;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLProfileDropTarget
|
||||
//
|
||||
// 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 LLProfileDropTarget : 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);
|
||||
}
|
||||
};
|
||||
|
||||
LLProfileDropTarget(const Params&);
|
||||
~LLProfileDropTarget() {}
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Base class for any Profile View.
|
||||
*/
|
||||
class LLPanelProfileTab
|
||||
: public LLPanel
|
||||
, public LLAvatarPropertiesObserver
|
||||
: public LLPanel
|
||||
, public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Sets avatar ID, sets panel as observer of avatar related info replies from server.
|
||||
*/
|
||||
virtual void setAvatarId(const LLUUID& id);
|
||||
/**
|
||||
* Sets avatar ID, sets panel as observer of avatar related info replies from server.
|
||||
*/
|
||||
virtual void setAvatarId(const LLUUID& avatar_id);
|
||||
|
||||
/**
|
||||
* Returns avatar ID.
|
||||
*/
|
||||
virtual const LLUUID& getAvatarId() { return mAvatarId; }
|
||||
/**
|
||||
* Returns avatar ID.
|
||||
*/
|
||||
virtual const LLUUID& getAvatarId() { return mAvatarId; }
|
||||
|
||||
/**
|
||||
* Sends update data request to server.
|
||||
*/
|
||||
virtual void updateData() = 0;
|
||||
/**
|
||||
* Sends update data request to server.
|
||||
*/
|
||||
virtual void updateData() {};
|
||||
|
||||
/**
|
||||
* Clears panel data if viewing avatar info for first time and sends update data request.
|
||||
*/
|
||||
virtual void onOpen(const LLSD& key);
|
||||
/**
|
||||
* Clears panel data if viewing avatar info for first time and sends update data request.
|
||||
*/
|
||||
virtual void onOpen(const LLSD& key);
|
||||
|
||||
/**
|
||||
* Profile tabs should close any opened panels here.
|
||||
*
|
||||
* Called from LLPanelProfile::onOpen() before opening new profile.
|
||||
* See LLPanelPicks::onClosePanel for example. LLPanelPicks closes picture info panel
|
||||
* before new profile is displayed, otherwise new profile will
|
||||
* be hidden behind picture info panel.
|
||||
*/
|
||||
virtual void onClosePanel() {}
|
||||
/**
|
||||
* Processes data received from server.
|
||||
*/
|
||||
virtual void processProperties(void* data, EAvatarProcessorType type) = 0;
|
||||
|
||||
/**
|
||||
* Resets controls visibility, state, etc.
|
||||
*/
|
||||
virtual void resetControls(){};
|
||||
/**
|
||||
* Clears all data received from server.
|
||||
*/
|
||||
virtual void resetData(){};
|
||||
|
||||
/**
|
||||
* Clears all data received from server.
|
||||
*/
|
||||
virtual void resetData(){};
|
||||
/*virtual*/ ~LLPanelProfileTab();
|
||||
|
||||
/*virtual*/ ~LLPanelProfileTab();
|
||||
void setEmbedded(bool embedded) { mEmbedded = embedded; }
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelProfileTab();
|
||||
LLPanelProfileTab();
|
||||
|
||||
/**
|
||||
* Scrolls panel to top when viewing avatar info for first time.
|
||||
*/
|
||||
void scrollToTop();
|
||||
|
||||
virtual void onMapButtonClick();
|
||||
// mLoading: false: Initial state, can request
|
||||
// true: Data requested, skip duplicate requests (happens due to LLUI's habit of repeated callbacks)
|
||||
// mLoaded: false: Initial state, show loading indicator
|
||||
// true: Data recieved, which comes in a single message, hide indicator
|
||||
bool getIsLoading() { return mLoading; }
|
||||
void setIsLoading() { mLoading = true; }
|
||||
bool getIsLoaded() { return mLoaded; }
|
||||
void resetLoading() { mLoading = false; mLoaded = false; }
|
||||
|
||||
virtual void updateButtons();
|
||||
const bool getEmbedded() const { return mEmbedded; }
|
||||
|
||||
const bool getSelfProfile() const { return mSelfProfile; }
|
||||
|
||||
void setApplyProgress(bool started);
|
||||
|
||||
virtual void updateButtons();
|
||||
|
||||
private:
|
||||
|
||||
LLUUID mAvatarId;
|
||||
LLUUID mAvatarId;
|
||||
bool mLoading;
|
||||
bool mLoaded;
|
||||
bool mEmbedded;
|
||||
bool mSelfProfile;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELAVATAR_H
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,301 +0,0 @@
|
|||
/**
|
||||
* @file llpanelclassified.h
|
||||
* @brief LLPanelClassified class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&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$
|
||||
*/
|
||||
|
||||
// Display of a classified used both for the global view in the
|
||||
// Find directory, and also for each individual user's classified in their
|
||||
// profile.
|
||||
#ifndef LL_LLPANELCLASSIFIED_H
|
||||
#define LL_LLPANELCLASSIFIED_H
|
||||
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llclassifiedinfo.h"
|
||||
#include "llfloater.h"
|
||||
#include "llpanel.h"
|
||||
#include "llrect.h"
|
||||
#include "lluuid.h"
|
||||
#include "v3dmath.h"
|
||||
#include "llcoros.h"
|
||||
#include "lleventcoro.h"
|
||||
|
||||
class LLScrollContainer;
|
||||
class LLTextureCtrl;
|
||||
class LLUICtrl;
|
||||
|
||||
class LLPublishClassifiedFloater : public LLFloater
|
||||
{
|
||||
public:
|
||||
LLPublishClassifiedFloater(const LLSD& key);
|
||||
virtual ~LLPublishClassifiedFloater();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void setPrice(S32 price);
|
||||
S32 getPrice();
|
||||
|
||||
void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
|
||||
{
|
||||
LOG_CLASS(LLPanelClassifiedInfo);
|
||||
public:
|
||||
|
||||
static LLPanelClassifiedInfo* create();
|
||||
|
||||
virtual ~LLPanelClassifiedInfo();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
|
||||
|
||||
LLUUID& getAvatarId() { return mAvatarId; }
|
||||
|
||||
void setSnapshotId(const LLUUID& id);
|
||||
|
||||
LLUUID getSnapshotId();
|
||||
|
||||
void setClassifiedId(const LLUUID& id) { mClassifiedId = id; }
|
||||
|
||||
LLUUID& getClassifiedId() { return mClassifiedId; }
|
||||
|
||||
void setClassifiedName(const std::string& name);
|
||||
|
||||
std::string getClassifiedName();
|
||||
|
||||
void setDescription(const std::string& desc);
|
||||
|
||||
std::string getDescription();
|
||||
|
||||
void setClassifiedLocation(const std::string& location);
|
||||
|
||||
std::string getClassifiedLocation();
|
||||
|
||||
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
|
||||
|
||||
LLVector3d& getPosGlobal() { return mPosGlobal; }
|
||||
|
||||
void setParcelId(const LLUUID& id) { mParcelId = id; }
|
||||
|
||||
LLUUID getParcelId() { return mParcelId; }
|
||||
|
||||
void setSimName(const std::string& sim_name) { mSimName = sim_name; }
|
||||
|
||||
std::string getSimName() { return mSimName; }
|
||||
|
||||
void setFromSearch(bool val) { mFromSearch = val; }
|
||||
|
||||
bool fromSearch() { return mFromSearch; }
|
||||
|
||||
bool getInfoLoaded() { return mInfoLoaded; }
|
||||
|
||||
void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; }
|
||||
|
||||
static void setClickThrough(
|
||||
const LLUUID& classified_id,
|
||||
S32 teleport,
|
||||
S32 map,
|
||||
S32 profile,
|
||||
bool from_new_table);
|
||||
|
||||
static void sendClickMessage(
|
||||
const std::string& type,
|
||||
bool from_search,
|
||||
const LLUUID& classified_id,
|
||||
const LLUUID& parcel_id,
|
||||
const LLVector3d& global_pos,
|
||||
const std::string& sim_name);
|
||||
|
||||
void setExitCallback(const commit_callback_t& cb);
|
||||
|
||||
void setEditClassifiedCallback(const commit_callback_t& cb);
|
||||
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
/*virtual*/ void draw();
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelClassifiedInfo();
|
||||
|
||||
virtual void resetData();
|
||||
|
||||
virtual void resetControls();
|
||||
|
||||
static std::string createLocationText(
|
||||
const std::string& original_name,
|
||||
const std::string& sim_name,
|
||||
const LLVector3d& pos_global);
|
||||
|
||||
void stretchSnapshot();
|
||||
void sendClickMessage(const std::string& type);
|
||||
|
||||
LLRect getDefaultSnapshotRect();
|
||||
|
||||
void scrollToTop();
|
||||
|
||||
void onMapClick();
|
||||
void onTeleportClick();
|
||||
void onExit();
|
||||
|
||||
bool mSnapshotStreched;
|
||||
LLRect mSnapshotRect;
|
||||
LLTextureCtrl* mSnapshotCtrl;
|
||||
|
||||
private:
|
||||
|
||||
LLUUID mAvatarId;
|
||||
LLUUID mClassifiedId;
|
||||
LLVector3d mPosGlobal;
|
||||
LLUUID mParcelId;
|
||||
std::string mSimName;
|
||||
bool mFromSearch;
|
||||
bool mInfoLoaded;
|
||||
|
||||
LLScrollContainer* mScrollContainer;
|
||||
LLPanel* mScrollingPanel;
|
||||
|
||||
S32 mScrollingPanelMinHeight;
|
||||
S32 mScrollingPanelWidth;
|
||||
|
||||
// Needed for stat tracking
|
||||
S32 mTeleportClicksOld;
|
||||
S32 mMapClicksOld;
|
||||
S32 mProfileClicksOld;
|
||||
S32 mTeleportClicksNew;
|
||||
S32 mMapClicksNew;
|
||||
S32 mProfileClicksNew;
|
||||
|
||||
static void handleSearchStatResponse(LLUUID classifiedId, LLSD result);
|
||||
|
||||
|
||||
typedef std::list<LLPanelClassifiedInfo*> panel_list_t;
|
||||
static panel_list_t sAllPanels;
|
||||
};
|
||||
|
||||
class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
|
||||
{
|
||||
LOG_CLASS(LLPanelClassifiedEdit);
|
||||
public:
|
||||
|
||||
static LLPanelClassifiedEdit* create();
|
||||
|
||||
virtual ~LLPanelClassifiedEdit();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void fillIn(const LLSD& key);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ BOOL isDirty() const;
|
||||
|
||||
/*virtual*/ void resetDirty();
|
||||
|
||||
void setSaveCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
void setCancelCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
/*virtual*/ void resetControls();
|
||||
|
||||
bool isNew() { return mIsNew; }
|
||||
|
||||
bool isNewWithErrors() { return mIsNewWithErrors; }
|
||||
|
||||
bool canClose();
|
||||
|
||||
void draw();
|
||||
|
||||
void stretchSnapshot();
|
||||
|
||||
U32 getCategory();
|
||||
|
||||
void setCategory(U32 category);
|
||||
|
||||
U32 getContentType();
|
||||
|
||||
void setContentType(U32 content_type);
|
||||
|
||||
bool getAutoRenew();
|
||||
|
||||
S32 getPriceForListing();
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelClassifiedEdit();
|
||||
|
||||
void sendUpdate();
|
||||
|
||||
void enableVerbs(bool enable);
|
||||
|
||||
void enableEditing(bool enable);
|
||||
|
||||
void showEditing(bool show);
|
||||
|
||||
std::string makeClassifiedName();
|
||||
|
||||
void setPriceForListing(S32 price);
|
||||
|
||||
U8 getFlags();
|
||||
|
||||
std::string getLocationNotice();
|
||||
|
||||
bool isValidName();
|
||||
|
||||
void notifyInvalidName();
|
||||
|
||||
void onSetLocationClick();
|
||||
void onChange();
|
||||
void onSaveClick();
|
||||
|
||||
void doSave();
|
||||
|
||||
void onPublishFloaterPublishClicked();
|
||||
|
||||
void onTexturePickerMouseEnter(LLUICtrl* ctrl);
|
||||
void onTexturePickerMouseLeave(LLUICtrl* ctrl);
|
||||
|
||||
void onTextureSelected();
|
||||
|
||||
private:
|
||||
bool mIsNew;
|
||||
bool mIsNewWithErrors;
|
||||
bool mCanClose;
|
||||
|
||||
LLPublishClassifiedFloater* mPublishFloater;
|
||||
|
||||
commit_signal_t mSaveButtonClickedSignal;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELCLASSIFIED_H
|
||||
|
|
@ -29,7 +29,6 @@
|
|||
|
||||
#include "llaccordionctrltab.h"
|
||||
#include "llflatlistview.h"
|
||||
#include "llpanelavatar.h"
|
||||
|
||||
class LLExperienceItem;
|
||||
class LLPanelProfile;
|
||||
|
|
|
|||
|
|
@ -1,68 +0,0 @@
|
|||
/**
|
||||
* @file llpanelme.cpp
|
||||
* @brief Side tray "Me" (My Profile) panel
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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 "llpanelme.h"
|
||||
|
||||
// Viewer includes
|
||||
#include "llpanelprofile.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "llfirstuse.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llhints.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerdisplayname.h"
|
||||
|
||||
// Linden libraries
|
||||
#include "llavatarnamecache.h" // IDEVO
|
||||
#include "lliconctrl.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llnotificationsutil.h" // IDEVO
|
||||
#include "lltabcontainer.h"
|
||||
#include "lltexturectrl.h"
|
||||
|
||||
static LLPanelInjector<LLPanelMe> t_panel_me_profile("panel_me");
|
||||
|
||||
LLPanelMe::LLPanelMe(void)
|
||||
: LLPanelProfile()
|
||||
{
|
||||
setAvatarId(gAgent.getID());
|
||||
}
|
||||
|
||||
BOOL LLPanelMe::postBuild()
|
||||
{
|
||||
LLPanelProfile::postBuild();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLPanelMe::onOpen(const LLSD& key)
|
||||
{
|
||||
LLPanelProfile::onOpen(key);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,314 +0,0 @@
|
|||
/**
|
||||
* @file llpanelpicks.h
|
||||
* @brief LLPanelPicks and related class definitions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELPICKS_H
|
||||
#define LL_LLPANELPICKS_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "v3dmath.h"
|
||||
#include "lluuid.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llpanelavatar.h"
|
||||
#include "llregistry.h"
|
||||
|
||||
class LLAccordionCtrlTab;
|
||||
class LLPanelProfile;
|
||||
class LLMessageSystem;
|
||||
class LLVector3d;
|
||||
class LLPanelProfileTab;
|
||||
class LLAgent;
|
||||
class LLMenuGL;
|
||||
class LLPickItem;
|
||||
class LLClassifiedItem;
|
||||
class LLFlatListView;
|
||||
class LLPanelPickInfo;
|
||||
class LLPanelPickEdit;
|
||||
class LLToggleableMenu;
|
||||
class LLPanelClassifiedInfo;
|
||||
class LLPanelClassifiedEdit;
|
||||
|
||||
// *TODO
|
||||
// Panel Picks has been consolidated with Classifieds (EXT-2095), give LLPanelPicks
|
||||
// and corresponding files (cpp, h, xml) a new name. (new name is TBD at the moment)
|
||||
|
||||
class LLPanelPicks
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
LLPanelPicks();
|
||||
~LLPanelPicks();
|
||||
|
||||
static void* create(void* data);
|
||||
|
||||
/*virtual*/ BOOL postBuild(void);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void onClosePanel();
|
||||
|
||||
void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void updateData();
|
||||
|
||||
// returns the selected pick item
|
||||
LLPickItem* getSelectedPickItem();
|
||||
LLClassifiedItem* getSelectedClassifiedItem();
|
||||
LLClassifiedItem* findClassifiedById(const LLUUID& classified_id);
|
||||
|
||||
//*NOTE top down approch when panel toggling is done only by
|
||||
// parent panels failed to work (picks related code was in my profile panel)
|
||||
void setProfilePanel(LLPanelProfile* profile_panel);
|
||||
|
||||
void createNewPick();
|
||||
void createNewClassified();
|
||||
|
||||
protected:
|
||||
/*virtual*/void updateButtons();
|
||||
|
||||
private:
|
||||
void onClickDelete();
|
||||
void onClickTeleport();
|
||||
void onClickMap();
|
||||
|
||||
void onPlusMenuItemClicked(const LLSD& param);
|
||||
bool isActionEnabled(const LLSD& userdata) const;
|
||||
|
||||
bool isClassifiedPublished(LLClassifiedItem* c_item);
|
||||
|
||||
void onListCommit(const LLFlatListView* f_list);
|
||||
void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab);
|
||||
|
||||
//------------------------------------------------
|
||||
// Callbacks which require panel toggling
|
||||
//------------------------------------------------
|
||||
void onClickPlusBtn();
|
||||
void onClickInfo();
|
||||
void onPanelPickClose(LLPanel* panel);
|
||||
void onPanelPickSave(LLPanel* panel);
|
||||
void onPanelClassifiedSave(LLPanelClassifiedEdit* panel);
|
||||
void onPanelClassifiedClose(LLPanelClassifiedInfo* panel);
|
||||
void openPickEdit(const LLSD& params);
|
||||
void onPanelPickEdit();
|
||||
void onPanelClassifiedEdit();
|
||||
void editClassified(const LLUUID& classified_id);
|
||||
void onClickMenuEdit();
|
||||
|
||||
bool onEnableMenuItem(const LLSD& user_data);
|
||||
|
||||
void openPickInfo();
|
||||
void openClassifiedInfo();
|
||||
void openClassifiedInfo(const LLSD& params);
|
||||
void openClassifiedEdit(const LLSD& params);
|
||||
friend class LLPanelProfile;
|
||||
|
||||
void showAccordion(const std::string& name, bool show);
|
||||
|
||||
void buildPickPanel();
|
||||
|
||||
bool callbackDeletePick(const LLSD& notification, const LLSD& response);
|
||||
bool callbackDeleteClassified(const LLSD& notification, const LLSD& response);
|
||||
bool callbackTeleport(const LLSD& notification, const LLSD& response);
|
||||
|
||||
|
||||
virtual void onDoubleClickPickItem(LLUICtrl* item);
|
||||
virtual void onDoubleClickClassifiedItem(LLUICtrl* item);
|
||||
virtual void onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask);
|
||||
|
||||
LLPanelProfile* getProfilePanel();
|
||||
|
||||
void createPickInfoPanel();
|
||||
void createPickEditPanel();
|
||||
void createClassifiedInfoPanel();
|
||||
void createClassifiedEditPanel(LLPanelClassifiedEdit** panel);
|
||||
|
||||
LLMenuGL* mPopupMenu;
|
||||
LLPanelProfile* mProfilePanel;
|
||||
LLPanelPickInfo* mPickPanel;
|
||||
LLFlatListView* mPicksList;
|
||||
LLFlatListView* mClassifiedsList;
|
||||
LLPanelPickInfo* mPanelPickInfo;
|
||||
LLPanelClassifiedInfo* mPanelClassifiedInfo;
|
||||
LLPanelPickEdit* mPanelPickEdit;
|
||||
LLToggleableMenu* mPlusMenu;
|
||||
LLUICtrl* mNoItemsLabel;
|
||||
|
||||
// <classified_id, edit_panel>
|
||||
typedef std::map<LLUUID, LLPanelClassifiedEdit*> panel_classified_edit_map_t;
|
||||
|
||||
// This map is needed for newly created classifieds. The purpose of panel is to
|
||||
// sit in this map and listen to LLPanelClassifiedEdit::processProperties callback.
|
||||
panel_classified_edit_map_t mEditClassifiedPanels;
|
||||
|
||||
LLAccordionCtrlTab* mPicksAccTab;
|
||||
LLAccordionCtrlTab* mClassifiedsAccTab;
|
||||
|
||||
//true if picks list is empty after processing picks
|
||||
bool mNoPicks;
|
||||
//true if classifieds list is empty after processing classifieds
|
||||
bool mNoClassifieds;
|
||||
};
|
||||
|
||||
class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
|
||||
LLPickItem();
|
||||
|
||||
static LLPickItem* create();
|
||||
|
||||
void init(LLPickData* pick_data);
|
||||
|
||||
void setPickName(const std::string& name);
|
||||
|
||||
void setPickDesc(const std::string& descr);
|
||||
|
||||
void setPickId(const LLUUID& id);
|
||||
|
||||
void setCreatorId(const LLUUID& id) {mCreatorID = id;};
|
||||
|
||||
void setSnapshotId(const LLUUID& id) {mSnapshotID = id;};
|
||||
|
||||
void setNeedData(bool need){mNeedData = need;};
|
||||
|
||||
const LLUUID& getPickId();
|
||||
|
||||
const std::string& getPickName();
|
||||
|
||||
const LLUUID& getCreatorId();
|
||||
|
||||
const LLUUID& getSnapshotId();
|
||||
|
||||
const LLVector3d& getPosGlobal();
|
||||
|
||||
const std::string getDescription();
|
||||
|
||||
const std::string& getSimName() { return mSimName; }
|
||||
|
||||
const std::string& getUserName() { return mUserName; }
|
||||
|
||||
const std::string& getOriginalName() { return mOriginalName; }
|
||||
|
||||
const std::string& getPickDesc() { return mPickDescription; }
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void update();
|
||||
|
||||
~LLPickItem();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/** setting on/off background icon to indicate selected state */
|
||||
/*virtual*/ void setValue(const LLSD& value);
|
||||
|
||||
protected:
|
||||
|
||||
LLUUID mPickID;
|
||||
LLUUID mCreatorID;
|
||||
LLUUID mParcelID;
|
||||
LLUUID mSnapshotID;
|
||||
LLVector3d mPosGlobal;
|
||||
bool mNeedData;
|
||||
|
||||
std::string mPickName;
|
||||
std::string mUserName;
|
||||
std::string mOriginalName;
|
||||
std::string mPickDescription;
|
||||
std::string mSimName;
|
||||
};
|
||||
|
||||
class LLClassifiedItem : public LLPanel, public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
|
||||
LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id);
|
||||
|
||||
virtual ~LLClassifiedItem();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void setValue(const LLSD& value);
|
||||
|
||||
void fillIn(LLPanelClassifiedEdit* panel);
|
||||
|
||||
LLUUID getAvatarId() {return mAvatarId;}
|
||||
|
||||
void setAvatarId(const LLUUID& avatar_id) {mAvatarId = avatar_id;}
|
||||
|
||||
LLUUID getClassifiedId() {return mClassifiedId;}
|
||||
|
||||
void setClassifiedId(const LLUUID& classified_id) {mClassifiedId = classified_id;}
|
||||
|
||||
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
|
||||
|
||||
const LLVector3d getPosGlobal() { return mPosGlobal; }
|
||||
|
||||
void setLocationText(const std::string location) { mLocationText = location; }
|
||||
|
||||
std::string getLocationText() { return mLocationText; }
|
||||
|
||||
void setClassifiedName (const std::string& name);
|
||||
|
||||
std::string getClassifiedName() { return getChild<LLUICtrl>("name")->getValue().asString(); }
|
||||
|
||||
void setDescription(const std::string& desc);
|
||||
|
||||
std::string getDescription() { return getChild<LLUICtrl>("description")->getValue().asString(); }
|
||||
|
||||
void setSnapshotId(const LLUUID& snapshot_id);
|
||||
|
||||
LLUUID getSnapshotId();
|
||||
|
||||
void setCategory(U32 cat) { mCategory = cat; }
|
||||
|
||||
U32 getCategory() { return mCategory; }
|
||||
|
||||
void setContentType(U32 ct) { mContentType = ct; }
|
||||
|
||||
U32 getContentType() { return mContentType; }
|
||||
|
||||
void setAutoRenew(U32 renew) { mAutoRenew = renew; }
|
||||
|
||||
bool getAutoRenew() { return mAutoRenew; }
|
||||
|
||||
void setPriceForListing(S32 price) { mPriceForListing = price; }
|
||||
|
||||
S32 getPriceForListing() { return mPriceForListing; }
|
||||
|
||||
private:
|
||||
LLUUID mAvatarId;
|
||||
LLUUID mClassifiedId;
|
||||
LLVector3d mPosGlobal;
|
||||
std::string mLocationText;
|
||||
U32 mCategory;
|
||||
U32 mContentType;
|
||||
bool mAutoRenew;
|
||||
S32 mPriceForListing;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELPICKS_H
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,25 +1,25 @@
|
|||
/**
|
||||
/**
|
||||
* @file llpanelprofile.h
|
||||
* @brief Profile panel
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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$
|
||||
*/
|
||||
|
|
@ -27,76 +27,386 @@
|
|||
#ifndef LL_LLPANELPROFILE_H
|
||||
#define LL_LLPANELPROFILE_H
|
||||
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llfloater.h"
|
||||
#include "llpanel.h"
|
||||
#include "llpanelavatar.h"
|
||||
#include "llmediactrl.h"
|
||||
#include "llvoiceclient.h"
|
||||
|
||||
// class LLPanelProfileClassifieds;
|
||||
// class LLTabContainer;
|
||||
|
||||
// class LLPanelProfileSecondLife;
|
||||
// class LLPanelProfileWeb;
|
||||
// class LLPanelProfileInterests;
|
||||
// class LLPanelProfilePicks;
|
||||
// class LLPanelProfileFirstLife;
|
||||
// class LLPanelProfileNotes;
|
||||
|
||||
class LLAvatarName;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLTabContainer;
|
||||
class LLTextBox;
|
||||
class LLTextureCtrl;
|
||||
class LLMediaCtrl;
|
||||
class LLGroupList;
|
||||
class LLTextBase;
|
||||
class LLMenuButton;
|
||||
class LLLineEditor;
|
||||
class LLTextEditor;
|
||||
class LLPanelProfileClassifieds;
|
||||
class LLPanelProfilePicks;
|
||||
|
||||
std::string getProfileURL(const std::string& agent_name);
|
||||
|
||||
/**
|
||||
* Base class for Profile View and My Profile.
|
||||
* Panel for displaying Avatar's second life related info.
|
||||
*/
|
||||
class LLPanelProfile : public LLPanel
|
||||
class LLPanelProfileSecondLife
|
||||
: public LLPanelProfileTab
|
||||
, public LLFriendObserver
|
||||
, public LLVoiceClientStatusObserver
|
||||
{
|
||||
LOG_CLASS(LLPanelProfile);
|
||||
|
||||
public:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
LLPanelProfileSecondLife();
|
||||
/*virtual*/ ~LLPanelProfileSecondLife();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
virtual void openPanel(LLPanel* panel, const LLSD& params);
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
void apply(LLAvatarData* data);
|
||||
|
||||
virtual void closePanel(LLPanel* panel);
|
||||
/**
|
||||
* LLFriendObserver trigger
|
||||
*/
|
||||
virtual void changed(U32 mask);
|
||||
|
||||
S32 notifyParent(const LLSD& info);
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable the call
|
||||
// button when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
/*virtual*/ void setAvatarId(const LLUUID& avatar_id);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void resetData();
|
||||
|
||||
/**
|
||||
* Sends update data request to server.
|
||||
*/
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Process profile related data received from server.
|
||||
*/
|
||||
virtual void processProfileProperties(const LLAvatarData* avatar_data);
|
||||
|
||||
LLPanelProfile();
|
||||
/**
|
||||
* Processes group related data received from server.
|
||||
*/
|
||||
virtual void processGroupProperties(const LLAvatarGroups* avatar_groups);
|
||||
|
||||
virtual void onTabSelected(const LLSD& param);
|
||||
/**
|
||||
* Fills common for Avatar profile and My Profile fields.
|
||||
*/
|
||||
virtual void fillCommonData(const LLAvatarData* avatar_data);
|
||||
|
||||
const LLUUID& getAvatarId() { return mAvatarId; }
|
||||
/**
|
||||
* Fills partner data.
|
||||
*/
|
||||
virtual void fillPartnerData(const LLAvatarData* avatar_data);
|
||||
|
||||
void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
|
||||
/**
|
||||
* Fills account status.
|
||||
*/
|
||||
virtual void fillAccountStatus(const LLAvatarData* avatar_data);
|
||||
|
||||
typedef std::map<std::string, LLPanelProfileTab*> profile_tabs_t;
|
||||
void onMapButtonClick();
|
||||
|
||||
profile_tabs_t& getTabContainer() { return mTabContainer; }
|
||||
/**
|
||||
* Opens "Pay Resident" dialog.
|
||||
*/
|
||||
void pay();
|
||||
|
||||
/**
|
||||
* Add/remove resident to/from your block list.
|
||||
*/
|
||||
void toggleBlock();
|
||||
|
||||
void onAddFriendButtonClick();
|
||||
void onIMButtonClick();
|
||||
void onTeleportButtonClick();
|
||||
|
||||
void onGroupInvite();
|
||||
|
||||
bool isGrantedToSeeOnlineStatus();
|
||||
|
||||
/**
|
||||
* Displays avatar's online status if possible.
|
||||
*
|
||||
* Requirements from EXT-3880:
|
||||
* For friends:
|
||||
* - Online when online and privacy settings allow to show
|
||||
* - Offline when offline and privacy settings allow to show
|
||||
* - Else: nothing
|
||||
* For other avatars:
|
||||
* - Online when online and was not set in Preferences/"Only Friends & Groups can see when I am online"
|
||||
* - Else: Offline
|
||||
*/
|
||||
void updateOnlineStatus();
|
||||
void processOnlineStatus(bool online);
|
||||
|
||||
private:
|
||||
/*virtual*/ void updateButtons();
|
||||
void onClickSetName();
|
||||
void onAvatarNameCacheSetName(const LLUUID& id, const LLAvatarName& av_name);
|
||||
|
||||
//-- ChildStack begins ----------------------------------------------------
|
||||
class ChildStack
|
||||
{
|
||||
LOG_CLASS(LLPanelProfile::ChildStack);
|
||||
public:
|
||||
ChildStack();
|
||||
~ChildStack();
|
||||
void setParent(LLPanel* parent);
|
||||
private:
|
||||
typedef std::map<std::string, LLUUID> group_map_t;
|
||||
group_map_t mGroups;
|
||||
void openGroupProfile();
|
||||
|
||||
bool push();
|
||||
bool pop();
|
||||
void preParentReshape();
|
||||
void postParentReshape();
|
||||
LLTextBox* mStatusText;
|
||||
LLGroupList* mGroupList;
|
||||
LLCheckBoxCtrl* mShowInSearchCheckbox;
|
||||
LLTextureCtrl* mSecondLifePic;
|
||||
LLTextBase* mDescriptionEdit;
|
||||
LLButton* mTeleportButton;
|
||||
LLButton* mShowOnMapButton;
|
||||
LLButton* mBlockButton;
|
||||
LLButton* mUnblockButton;
|
||||
LLUICtrl* mNameLabel;
|
||||
LLButton* mDisplayNameButton;
|
||||
LLButton* mAddFriendButton;
|
||||
LLButton* mGroupInviteButton;
|
||||
LLButton* mPayButton;
|
||||
LLButton* mIMButton;
|
||||
|
||||
private:
|
||||
void dump();
|
||||
bool mVoiceStatus;
|
||||
|
||||
typedef LLView::child_list_t view_list_t;
|
||||
typedef std::list<view_list_t> stack_t;
|
||||
boost::signals2::connection mAvatarNameCacheConnection;
|
||||
};
|
||||
|
||||
stack_t mStack;
|
||||
stack_t mSavedStack;
|
||||
LLPanel* mParent;
|
||||
};
|
||||
//-- ChildStack ends ------------------------------------------------------
|
||||
|
||||
profile_tabs_t mTabContainer;
|
||||
ChildStack mChildStack;
|
||||
LLUUID mAvatarId;
|
||||
/**
|
||||
* Panel for displaying Avatar's web profile and home page.
|
||||
*/
|
||||
class LLPanelProfileWeb
|
||||
: public LLPanelProfileTab
|
||||
, public LLViewerMediaObserver
|
||||
{
|
||||
public:
|
||||
LLPanelProfileWeb();
|
||||
/*virtual*/ ~LLPanelProfileWeb();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void resetData();
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
void apply(LLAvatarData* data);
|
||||
|
||||
/**
|
||||
* Loads web profile.
|
||||
*/
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
|
||||
|
||||
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
|
||||
|
||||
protected:
|
||||
/*virtual*/ void updateButtons();
|
||||
void onCommitLoad(LLUICtrl* ctrl);
|
||||
void onCommitWebProfile();
|
||||
|
||||
private:
|
||||
std::string mURLHome;
|
||||
std::string mURLWebProfile;
|
||||
LLMediaCtrl* mWebBrowser;
|
||||
LLButton* mWebProfileButton;
|
||||
LLUICtrl* mLoadButton;
|
||||
LLLineEditor* mUrlEdit;
|
||||
|
||||
LLFrameTimer mPerformanceTimer;
|
||||
bool mFirstNavigate;
|
||||
|
||||
boost::signals2::connection mAvatarNameCacheConnection;
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's interests.
|
||||
*/
|
||||
class LLPanelProfileInterests
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
LLPanelProfileInterests();
|
||||
/*virtual*/ ~LLPanelProfileInterests();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void resetData();
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
virtual void apply();
|
||||
|
||||
protected:
|
||||
/*virtual*/ void updateButtons();
|
||||
|
||||
private:
|
||||
LLCheckBoxCtrl* mWantChecks[8];
|
||||
LLCheckBoxCtrl* mSkillChecks[6];
|
||||
LLLineEditor* mWantToEditor;
|
||||
LLLineEditor* mSkillsEditor;
|
||||
LLLineEditor* mLanguagesEditor;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's first life related info.
|
||||
*/
|
||||
class LLPanelProfileFirstLife
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
LLPanelProfileFirstLife();
|
||||
/*virtual*/ ~LLPanelProfileFirstLife();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void resetData();
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
void apply(LLAvatarData* data);
|
||||
|
||||
protected:
|
||||
/*virtual*/ void updateButtons();
|
||||
void onDescriptionFocusReceived();
|
||||
|
||||
LLTextEditor* mDescriptionEdit;
|
||||
LLTextureCtrl* mPicture;
|
||||
|
||||
bool mIsEditing;
|
||||
std::string mCurrentDescription;
|
||||
};
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's notes and modifying friend's rights.
|
||||
*/
|
||||
class LLPanelProfileNotes
|
||||
: public LLPanelProfileTab
|
||||
, public LLFriendObserver
|
||||
{
|
||||
public:
|
||||
LLPanelProfileNotes();
|
||||
/*virtual*/ ~LLPanelProfileNotes();
|
||||
|
||||
virtual void setAvatarId(const LLUUID& avatar_id);
|
||||
|
||||
/**
|
||||
* LLFriendObserver trigger
|
||||
*/
|
||||
virtual void changed(U32 mask);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void resetData();
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
virtual void apply();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Fills rights data for friends.
|
||||
*/
|
||||
void fillRightsData();
|
||||
|
||||
void rightsConfirmationCallback(const LLSD& notification, const LLSD& response, S32 rights);
|
||||
void confirmModifyRights(bool grant, S32 rights);
|
||||
void onCommitRights();
|
||||
void onCommitNotes();
|
||||
void enableCheckboxes(bool enable);
|
||||
|
||||
LLCheckBoxCtrl* mOnlineStatus;
|
||||
LLCheckBoxCtrl* mMapRights;
|
||||
LLCheckBoxCtrl* mEditObjectRights;
|
||||
LLTextEditor* mNotesEditor;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Container panel for the profile tabs
|
||||
*/
|
||||
class LLPanelProfile
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
LLPanelProfile();
|
||||
/*virtual*/ ~LLPanelProfile();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
void apply();
|
||||
|
||||
void showPick(const LLUUID& pick_id = LLUUID::null);
|
||||
|
||||
void showClassified(const LLUUID& classified_id = LLUUID::null, bool edit = false);
|
||||
|
||||
private:
|
||||
void onTabChange();
|
||||
|
||||
LLPanelProfileSecondLife* mPanelSecondlife;
|
||||
LLPanelProfileWeb* mPanelWeb;
|
||||
LLPanelProfileInterests* mPanelInterests;
|
||||
LLPanelProfilePicks* mPanelPicks;
|
||||
LLPanelProfileClassifieds* mPanelClassifieds;
|
||||
LLPanelProfileFirstLife* mPanelFirstlife;
|
||||
LLPanelProfileNotes* mPanelNotes;
|
||||
LLTabContainer* mTabContainer;
|
||||
};
|
||||
|
||||
#endif //LL_LLPANELPROFILE_H
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,366 @@
|
|||
/**
|
||||
* @file llpanelprofileclassifieds.h
|
||||
* @brief LLPanelProfileClassifieds and related class implementations
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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$
|
||||
*/
|
||||
|
||||
#ifndef LL_PANELPROFILECLASSIFIEDS_H
|
||||
#define LL_PANELPROFILECLASSIFIEDS_H
|
||||
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llclassifiedinfo.h"
|
||||
#include "llfloater.h"
|
||||
#include "llpanel.h"
|
||||
#include "llpanelavatar.h"
|
||||
#include "llrect.h"
|
||||
#include "lluuid.h"
|
||||
#include "v3dmath.h"
|
||||
#include "llcoros.h"
|
||||
#include "lleventcoro.h"
|
||||
|
||||
class LLCheckBoxCtrl;
|
||||
class LLLineEditor;
|
||||
class LLMediaCtrl;
|
||||
class LLScrollContainer;
|
||||
class LLTabContainer;
|
||||
class LLTextEditor;
|
||||
class LLTextureCtrl;
|
||||
class LLUICtrl;
|
||||
|
||||
|
||||
class LLPublishClassifiedFloater : public LLFloater
|
||||
{
|
||||
public:
|
||||
LLPublishClassifiedFloater(const LLSD& key);
|
||||
virtual ~LLPublishClassifiedFloater();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void setPrice(S32 price);
|
||||
S32 getPrice();
|
||||
|
||||
void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's picks.
|
||||
*/
|
||||
class LLPanelProfileClassifieds
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
LLPanelProfileClassifieds();
|
||||
/*virtual*/ ~LLPanelProfileClassifieds();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
void selectClassified(const LLUUID& classified_id, bool edit);
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
/*virtual*/ void updateButtons();
|
||||
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
private:
|
||||
void onClickNewBtn();
|
||||
void onClickDelete();
|
||||
void callbackDeleteClassified(const LLSD& notification, const LLSD& response);
|
||||
|
||||
bool canAddNewClassified();
|
||||
bool canDeleteClassified();
|
||||
|
||||
LLTabContainer* mTabContainer;
|
||||
LLUICtrl* mNoItemsLabel;
|
||||
LLButton* mNewButton;
|
||||
LLButton* mDeleteButton;
|
||||
|
||||
LLUUID mClassifiedToSelectOnLoad;
|
||||
bool mClassifiedEditOnLoad;
|
||||
};
|
||||
|
||||
|
||||
class LLPanelProfileClassified
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
|
||||
static LLPanelProfileClassified* create();
|
||||
|
||||
LLPanelProfileClassified();
|
||||
|
||||
/*virtual*/ ~LLPanelProfileClassified();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void setSnapshotId(const LLUUID& id);
|
||||
|
||||
LLUUID getSnapshotId();
|
||||
|
||||
void setClassifiedId(const LLUUID& id) { mClassifiedId = id; }
|
||||
|
||||
LLUUID& getClassifiedId() { return mClassifiedId; }
|
||||
|
||||
void setClassifiedName(const std::string& name);
|
||||
|
||||
std::string getClassifiedName();
|
||||
|
||||
void setDescription(const std::string& desc);
|
||||
|
||||
std::string getDescription();
|
||||
|
||||
void setClassifiedLocation(const std::string& location);
|
||||
|
||||
std::string getClassifiedLocation();
|
||||
|
||||
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
|
||||
|
||||
LLVector3d& getPosGlobal() { return mPosGlobal; }
|
||||
|
||||
void setParcelId(const LLUUID& id) { mParcelId = id; }
|
||||
|
||||
LLUUID getParcelId() { return mParcelId; }
|
||||
|
||||
void setSimName(const std::string& sim_name) { mSimName = sim_name; }
|
||||
|
||||
std::string getSimName() { return mSimName; }
|
||||
|
||||
void setFromSearch(bool val) { mFromSearch = val; }
|
||||
|
||||
bool fromSearch() { return mFromSearch; }
|
||||
|
||||
bool getInfoLoaded() { return mInfoLoaded; }
|
||||
|
||||
void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; }
|
||||
|
||||
/*virtual*/ BOOL isDirty() const;
|
||||
|
||||
/*virtual*/ void resetDirty();
|
||||
|
||||
bool isNew() { return mIsNew; }
|
||||
|
||||
bool isNewWithErrors() { return mIsNewWithErrors; }
|
||||
|
||||
bool canClose();
|
||||
|
||||
U32 getCategory();
|
||||
|
||||
void setCategory(U32 category);
|
||||
|
||||
U32 getContentType();
|
||||
|
||||
void setContentType(bool mature);
|
||||
|
||||
bool getAutoRenew();
|
||||
|
||||
S32 getPriceForListing();
|
||||
|
||||
void setEditMode(BOOL edit_mode);
|
||||
bool getEditMode() {return mEditMode;}
|
||||
|
||||
static void setClickThrough(
|
||||
const LLUUID& classified_id,
|
||||
S32 teleport,
|
||||
S32 map,
|
||||
S32 profile,
|
||||
bool from_new_table);
|
||||
|
||||
static void sendClickMessage(
|
||||
const std::string& type,
|
||||
bool from_search,
|
||||
const LLUUID& classified_id,
|
||||
const LLUUID& parcel_id,
|
||||
const LLVector3d& global_pos,
|
||||
const std::string& sim_name);
|
||||
|
||||
protected:
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
void resetControls();
|
||||
|
||||
/*virtual*/ void updateButtons();
|
||||
|
||||
static std::string createLocationText(
|
||||
const std::string& original_name,
|
||||
const std::string& sim_name,
|
||||
const LLVector3d& pos_global);
|
||||
|
||||
void sendClickMessage(const std::string& type);
|
||||
|
||||
void scrollToTop();
|
||||
|
||||
void onEditClick();
|
||||
void onCancelClick();
|
||||
void onSaveClick();
|
||||
void onMapClick();
|
||||
void onTeleportClick();
|
||||
|
||||
void sendUpdate();
|
||||
|
||||
void enableSave(bool enable);
|
||||
|
||||
void enableEditing(bool enable);
|
||||
|
||||
std::string makeClassifiedName();
|
||||
|
||||
void setPriceForListing(S32 price);
|
||||
|
||||
U8 getFlags();
|
||||
|
||||
std::string getLocationNotice();
|
||||
|
||||
bool isValidName();
|
||||
|
||||
void notifyInvalidName();
|
||||
|
||||
void onSetLocationClick();
|
||||
void onChange();
|
||||
|
||||
void doSave();
|
||||
|
||||
void onPublishFloaterPublishClicked();
|
||||
|
||||
void onTexturePickerMouseEnter();
|
||||
void onTexturePickerMouseLeave();
|
||||
|
||||
void onTextureSelected();
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Callback for "Map" button, opens Map
|
||||
*/
|
||||
void onClickMap();
|
||||
|
||||
/**
|
||||
* Callback for "Teleport" button, teleports user to Pick location.
|
||||
*/
|
||||
void onClickTeleport();
|
||||
|
||||
/**
|
||||
* Enables/disables "Save" button
|
||||
*/
|
||||
void enableSaveButton(BOOL enable);
|
||||
|
||||
/**
|
||||
* Called when snapshot image changes.
|
||||
*/
|
||||
void onSnapshotChanged();
|
||||
|
||||
/**
|
||||
* Callback for Pick snapshot, name and description changed event.
|
||||
*/
|
||||
void onPickChanged(LLUICtrl* ctrl);
|
||||
|
||||
/**
|
||||
* Callback for "Set Location" button click
|
||||
*/
|
||||
void onClickSetLocation();
|
||||
|
||||
/**
|
||||
* Callback for "Save" button click
|
||||
*/
|
||||
void onClickSave();
|
||||
|
||||
void onDescriptionFocusReceived();
|
||||
|
||||
void updateTabLabel(const std::string& title);
|
||||
|
||||
private:
|
||||
|
||||
LLTextureCtrl* mSnapshotCtrl;
|
||||
LLUICtrl* mEditIcon;
|
||||
LLUICtrl* mClassifiedNameText;
|
||||
LLUICtrl* mClassifiedDescText;
|
||||
LLLineEditor* mClassifiedNameEdit;
|
||||
LLTextEditor* mClassifiedDescEdit;
|
||||
LLUICtrl* mLocationText;
|
||||
LLUICtrl* mLocationEdit;
|
||||
LLUICtrl* mCategoryText;
|
||||
LLComboBox* mCategoryCombo;
|
||||
LLUICtrl* mContentTypeText;
|
||||
LLIconCtrl* mContentTypeM;
|
||||
LLIconCtrl* mContentTypeG;
|
||||
LLComboBox* mContentTypeCombo;
|
||||
LLUICtrl* mPriceText;
|
||||
LLUICtrl* mPriceEdit;
|
||||
LLUICtrl* mPricelabel;
|
||||
LLUICtrl* mAutoRenewText;
|
||||
LLUICtrl* mAutoRenewEdit;
|
||||
|
||||
LLButton* mMapButton;
|
||||
LLButton* mTeleportButton;
|
||||
LLButton* mEditButton;
|
||||
LLButton* mSaveButton;
|
||||
LLButton* mSetLocationButton;
|
||||
LLButton* mCancelButton;
|
||||
|
||||
LLScrollContainer* mScrollContainer;
|
||||
LLPanel* mInfoPanel;
|
||||
LLPanel* mEditPanel;
|
||||
|
||||
|
||||
LLUUID mClassifiedId;
|
||||
LLVector3d mPosGlobal;
|
||||
LLUUID mParcelId;
|
||||
std::string mSimName;
|
||||
bool mFromSearch;
|
||||
bool mInfoLoaded;
|
||||
bool mEditMode;
|
||||
|
||||
// Needed for stat tracking
|
||||
S32 mTeleportClicksOld;
|
||||
S32 mMapClicksOld;
|
||||
S32 mProfileClicksOld;
|
||||
S32 mTeleportClicksNew;
|
||||
S32 mMapClicksNew;
|
||||
S32 mProfileClicksNew;
|
||||
|
||||
|
||||
static void handleSearchStatResponse(LLUUID classifiedId, LLSD result);
|
||||
|
||||
typedef std::list<LLPanelProfileClassified*> panel_list_t;
|
||||
static panel_list_t sAllPanels;
|
||||
|
||||
|
||||
bool mIsNew;
|
||||
bool mIsNewWithErrors;
|
||||
bool mCanClose;
|
||||
bool mEditOnLoad;
|
||||
|
||||
LLPublishClassifiedFloater* mPublishFloater;
|
||||
};
|
||||
|
||||
#endif // LL_PANELPROFILECLASSIFIEDS_H
|
||||
|
|
@ -0,0 +1,774 @@
|
|||
/**
|
||||
* @file llpanelprofilepicks.cpp
|
||||
* @brief LLPanelProfilePicks and related class implementations
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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 "llpanelprofilepicks.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentpicksinfo.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcommandhandler.h"
|
||||
#include "lldispatcher.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterworldmap.h"
|
||||
#include "lllineeditor.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpanelavatar.h"
|
||||
#include "llpanelprofile.h"
|
||||
#include "llparcel.h"
|
||||
#include "lltabcontainer.h"
|
||||
#include "lltextbox.h"
|
||||
#include "lltexteditor.h"
|
||||
#include "lltexturectrl.h"
|
||||
#include "lltexturectrl.h"
|
||||
#include "lltrans.h"
|
||||
#include "llviewergenericmessage.h" // send_generic_message
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llviewerregion.h"
|
||||
|
||||
static LLPanelInjector<LLPanelProfilePicks> t_panel_profile_picks("panel_profile_picks");
|
||||
static LLPanelInjector<LLPanelProfilePick> t_panel_profile_pick("panel_profile_pick");
|
||||
|
||||
|
||||
class LLPickHandler : public LLCommandHandler
|
||||
{
|
||||
public:
|
||||
|
||||
// requires trusted browser to trigger
|
||||
LLPickHandler() : LLCommandHandler("pick", UNTRUSTED_THROTTLE) { }
|
||||
|
||||
bool handle(const LLSD& params, const LLSD& query_map,
|
||||
LLMediaCtrl* web)
|
||||
{
|
||||
if (!LLUI::sSettingGroups["config"]->getBOOL("EnablePicks"))
|
||||
{
|
||||
LLNotificationsUtil::add("NoPicks", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
|
||||
return true;
|
||||
}
|
||||
|
||||
// handle app/classified/create urls first
|
||||
if (params.size() == 1 && params[0].asString() == "create")
|
||||
{
|
||||
LLAvatarActions::showPicks(gAgent.getID());
|
||||
return true;
|
||||
}
|
||||
|
||||
// then handle the general app/pick/{UUID}/{CMD} urls
|
||||
if (params.size() < 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// get the ID for the pick_id
|
||||
LLUUID pick_id;
|
||||
if (!pick_id.set(params[0], FALSE))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// edit the pick in the side tray.
|
||||
// need to ask the server for more info first though...
|
||||
const std::string verb = params[1].asString();
|
||||
if (verb == "edit")
|
||||
{
|
||||
LLAvatarActions::showPick(gAgent.getID(), pick_id);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "unknown verb " << verb << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
LLPickHandler gPickHandler;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLPanelProfilePicks
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLPanelProfilePicks::LLPanelProfilePicks()
|
||||
: LLPanelProfileTab()
|
||||
, mPickToSelectOnLoad(LLUUID::null)
|
||||
{
|
||||
}
|
||||
|
||||
LLPanelProfilePicks::~LLPanelProfilePicks()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::onOpen(const LLSD& key)
|
||||
{
|
||||
LLPanelProfileTab::onOpen(key);
|
||||
|
||||
resetData();
|
||||
|
||||
if (getSelfProfile() && !getEmbedded())
|
||||
{
|
||||
mNewButton->setVisible(TRUE);
|
||||
mNewButton->setEnabled(FALSE);
|
||||
|
||||
mDeleteButton->setVisible(TRUE);
|
||||
mDeleteButton->setEnabled(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::selectPick(const LLUUID& pick_id)
|
||||
{
|
||||
if (getIsLoaded())
|
||||
{
|
||||
for (S32 tab_idx = 0; tab_idx < mTabContainer->getTabCount(); ++tab_idx)
|
||||
{
|
||||
LLPanelProfilePick* pick_panel = dynamic_cast<LLPanelProfilePick*>(mTabContainer->getPanelByIndex(tab_idx));
|
||||
if (pick_panel)
|
||||
{
|
||||
if (pick_panel->getPickId() == pick_id)
|
||||
{
|
||||
mTabContainer->selectTabPanel(pick_panel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mPickToSelectOnLoad = pick_id;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLPanelProfilePicks::postBuild()
|
||||
{
|
||||
mTabContainer = getChild<LLTabContainer>("tab_picks");
|
||||
mNoItemsLabel = getChild<LLUICtrl>("picks_panel_text");
|
||||
mNewButton = getChild<LLButton>("new_btn");
|
||||
mDeleteButton = getChild<LLButton>("delete_btn");
|
||||
|
||||
mNewButton->setCommitCallback(boost::bind(&LLPanelProfilePicks::onClickNewBtn, this));
|
||||
mDeleteButton->setCommitCallback(boost::bind(&LLPanelProfilePicks::onClickDelete, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::onClickNewBtn()
|
||||
{
|
||||
mNoItemsLabel->setVisible(FALSE);
|
||||
LLPanelProfilePick* pick_panel = LLPanelProfilePick::create();
|
||||
pick_panel->setAvatarId(getAvatarId());
|
||||
mTabContainer->addTabPanel(
|
||||
LLTabContainer::TabPanelParams().
|
||||
panel(pick_panel).
|
||||
select_tab(true).
|
||||
label(pick_panel->getPickName()));
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::onClickDelete()
|
||||
{
|
||||
LLPanelProfilePick* pick_panel = dynamic_cast<LLPanelProfilePick*>(mTabContainer->getCurrentPanel());
|
||||
if (pick_panel)
|
||||
{
|
||||
LLUUID pick_id = pick_panel->getPickId();
|
||||
LLSD args;
|
||||
args["PICK"] = pick_panel->getPickName();
|
||||
LLSD payload;
|
||||
payload["pick_id"] = pick_id;
|
||||
payload["tab_idx"] = mTabContainer->getCurrentPanelIndex();
|
||||
LLNotificationsUtil::add("DeleteAvatarPick", args, payload,
|
||||
boost::bind(&LLPanelProfilePicks::callbackDeletePick, this, _1, _2));
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::callbackDeletePick(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
if (0 == option)
|
||||
{
|
||||
LLUUID pick_id = notification["payload"]["pick_id"].asUUID();
|
||||
S32 tab_idx = notification["payload"]["tab_idx"].asInteger();
|
||||
|
||||
LLPanelProfilePick* pick_panel = dynamic_cast<LLPanelProfilePick*>(mTabContainer->getPanelByIndex(tab_idx));
|
||||
if (pick_panel && pick_panel->getPickId() == pick_id)
|
||||
{
|
||||
mTabContainer->removeTabPanel(pick_panel);
|
||||
}
|
||||
|
||||
if (pick_id.notNull())
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendPickDelete(pick_id);
|
||||
}
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::processProperties(void* data, EAvatarProcessorType type)
|
||||
{
|
||||
if (APT_PICKS == type)
|
||||
{
|
||||
LLAvatarPicks* avatar_picks = static_cast<LLAvatarPicks*>(data);
|
||||
if (avatar_picks && getAvatarId() == avatar_picks->target_id)
|
||||
{
|
||||
LLUUID selected_id = mPickToSelectOnLoad;
|
||||
if (mPickToSelectOnLoad.isNull())
|
||||
{
|
||||
if (mTabContainer->getTabCount() > 0)
|
||||
{
|
||||
LLPanelProfilePick* active_pick_panel = dynamic_cast<LLPanelProfilePick*>(mTabContainer->getCurrentPanel());
|
||||
if (active_pick_panel)
|
||||
{
|
||||
selected_id = active_pick_panel->getPickId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mTabContainer->deleteAllTabs();
|
||||
|
||||
LLAvatarPicks::picks_list_t::const_iterator it = avatar_picks->picks_list.begin();
|
||||
for (; avatar_picks->picks_list.end() != it; ++it)
|
||||
{
|
||||
LLUUID pick_id = it->first;
|
||||
std::string pick_name = it->second;
|
||||
|
||||
LLPanelProfilePick* pick_panel = LLPanelProfilePick::create();
|
||||
|
||||
pick_panel->setPickId(pick_id);
|
||||
pick_panel->setPickName(pick_name);
|
||||
pick_panel->setAvatarId(getAvatarId());
|
||||
|
||||
mTabContainer->addTabPanel(
|
||||
LLTabContainer::TabPanelParams().
|
||||
panel(pick_panel).
|
||||
select_tab(selected_id == pick_id).
|
||||
label(pick_name));
|
||||
|
||||
if (selected_id == pick_id)
|
||||
{
|
||||
mPickToSelectOnLoad = LLUUID::null;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL no_data = !mTabContainer->getTabCount();
|
||||
mNoItemsLabel->setVisible(no_data);
|
||||
if (no_data)
|
||||
{
|
||||
if(getSelfProfile())
|
||||
{
|
||||
mNoItemsLabel->setValue(LLTrans::getString("NoPicksText"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mNoItemsLabel->setValue(LLTrans::getString("NoAvatarPicksText"));
|
||||
}
|
||||
}
|
||||
else if (selected_id.isNull())
|
||||
{
|
||||
mTabContainer->selectFirstTab();
|
||||
}
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::resetData()
|
||||
{
|
||||
resetLoading();
|
||||
mTabContainer->deleteAllTabs();
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::updateButtons()
|
||||
{
|
||||
LLPanelProfileTab::updateButtons();
|
||||
|
||||
if (getSelfProfile() && !getEmbedded())
|
||||
{
|
||||
mNewButton->setEnabled(canAddNewPick());
|
||||
mDeleteButton->setEnabled(canDeletePick());
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::apply()
|
||||
{
|
||||
if (getIsLoaded())
|
||||
{
|
||||
for (S32 tab_idx = 0; tab_idx < mTabContainer->getTabCount(); ++tab_idx)
|
||||
{
|
||||
LLPanelProfilePick* pick_panel = dynamic_cast<LLPanelProfilePick*>(mTabContainer->getPanelByIndex(tab_idx));
|
||||
if (pick_panel)
|
||||
{
|
||||
pick_panel->apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePicks::updateData()
|
||||
{
|
||||
// Send picks request only once
|
||||
LLUUID avatar_id = getAvatarId();
|
||||
if (!getIsLoading() && avatar_id.notNull())
|
||||
{
|
||||
setIsLoading();
|
||||
mNoItemsLabel->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
|
||||
mNoItemsLabel->setVisible(TRUE);
|
||||
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(avatar_id);
|
||||
}
|
||||
}
|
||||
|
||||
bool LLPanelProfilePicks::canAddNewPick()
|
||||
{
|
||||
return (!LLAgentPicksInfo::getInstance()->isPickLimitReached() &&
|
||||
mTabContainer->getTabCount() < LLAgentPicksInfo::getInstance()->getMaxNumberOfPicks());
|
||||
}
|
||||
|
||||
bool LLPanelProfilePicks::canDeletePick()
|
||||
{
|
||||
return (mTabContainer->getTabCount() > 0);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLPanelProfilePick
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLPanelProfilePick::LLPanelProfilePick()
|
||||
: LLPanelProfileTab()
|
||||
, LLRemoteParcelInfoObserver()
|
||||
, mSnapshotCtrl(NULL)
|
||||
, mPickId(LLUUID::null)
|
||||
, mParcelId(LLUUID::null)
|
||||
, mRequestedId(LLUUID::null)
|
||||
, mLocationChanged(false)
|
||||
, mNewPick(false)
|
||||
, mCurrentPickDescription("")
|
||||
, mIsEditing(false)
|
||||
{
|
||||
}
|
||||
|
||||
//static
|
||||
LLPanelProfilePick* LLPanelProfilePick::create()
|
||||
{
|
||||
LLPanelProfilePick* panel = new LLPanelProfilePick();
|
||||
panel->buildFromFile("panel_profile_pick.xml");
|
||||
return panel;
|
||||
}
|
||||
|
||||
LLPanelProfilePick::~LLPanelProfilePick()
|
||||
{
|
||||
if (mParcelId.notNull())
|
||||
{
|
||||
LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::setAvatarId(const LLUUID& avatar_id)
|
||||
{
|
||||
if (avatar_id.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLPanelProfileTab::setAvatarId(avatar_id);
|
||||
|
||||
// creating new Pick
|
||||
if (getPickId().isNull() && getSelfProfile())
|
||||
{
|
||||
mNewPick = true;
|
||||
|
||||
setPosGlobal(gAgent.getPositionGlobal());
|
||||
|
||||
LLUUID parcel_id = LLUUID::null, snapshot_id = LLUUID::null;
|
||||
std::string pick_name, pick_desc, region_name;
|
||||
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
|
||||
if (parcel)
|
||||
{
|
||||
parcel_id = parcel->getID();
|
||||
pick_name = parcel->getName();
|
||||
pick_desc = parcel->getDesc();
|
||||
snapshot_id = parcel->getSnapshotID();
|
||||
}
|
||||
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region)
|
||||
{
|
||||
region_name = region->getName();
|
||||
}
|
||||
|
||||
setParcelID(parcel_id);
|
||||
setPickName(pick_name.empty() ? region_name : pick_name);
|
||||
setPickDesc(pick_desc);
|
||||
setSnapshotId(snapshot_id);
|
||||
setPickLocation(createLocationText(getLocationNotice(), pick_name, region_name, getPosGlobal()));
|
||||
|
||||
enableSaveButton(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendPickInfoRequest(getAvatarId(), getPickId());
|
||||
|
||||
enableSaveButton(FALSE);
|
||||
}
|
||||
|
||||
resetDirty();
|
||||
|
||||
if (getSelfProfile() && !getEmbedded())
|
||||
{
|
||||
mPickName->setEnabled(TRUE);
|
||||
mPickDescription->setEnabled(TRUE);
|
||||
mSetCurrentLocationButton->setVisible(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSnapshotCtrl->setEnabled(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLPanelProfilePick::postBuild()
|
||||
{
|
||||
mPickName = getChild<LLLineEditor>("pick_name");
|
||||
mPickDescription = getChild<LLTextEditor>("pick_desc");
|
||||
mSaveButton = getChild<LLButton>("save_changes_btn");
|
||||
mSetCurrentLocationButton = getChild<LLButton>("set_to_curr_location_btn");
|
||||
|
||||
mSnapshotCtrl = getChild<LLTextureCtrl>("pick_snapshot");
|
||||
mSnapshotCtrl->setCommitCallback(boost::bind(&LLPanelProfilePick::onSnapshotChanged, this));
|
||||
|
||||
childSetAction("teleport_btn", boost::bind(&LLPanelProfilePick::onClickTeleport, this));
|
||||
childSetAction("show_on_map_btn", boost::bind(&LLPanelProfilePick::onClickMap, this));
|
||||
|
||||
mSaveButton->setCommitCallback(boost::bind(&LLPanelProfilePick::onClickSave, this));
|
||||
mSetCurrentLocationButton->setCommitCallback(boost::bind(&LLPanelProfilePick::onClickSetLocation, this));
|
||||
|
||||
mPickName->setKeystrokeCallback(boost::bind(&LLPanelProfilePick::onPickChanged, this, _1), NULL);
|
||||
mPickName->setEnabled(FALSE);
|
||||
|
||||
mPickDescription->setKeystrokeCallback(boost::bind(&LLPanelProfilePick::onPickChanged, this, _1));
|
||||
mPickDescription->setFocusReceivedCallback(boost::bind(&LLPanelProfilePick::onDescriptionFocusReceived, this));
|
||||
|
||||
getChild<LLUICtrl>("pick_location")->setEnabled(FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onDescriptionFocusReceived()
|
||||
{
|
||||
if (!mIsEditing && getSelfProfile())
|
||||
{
|
||||
mIsEditing = true;
|
||||
mPickDescription->setParseHTML(false);
|
||||
setPickDesc(mCurrentPickDescription);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::processProperties(void* data, EAvatarProcessorType type)
|
||||
{
|
||||
if (APT_PICK_INFO != type)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLPickData* pick_info = static_cast<LLPickData*>(data);
|
||||
if (!pick_info
|
||||
|| pick_info->creator_id != getAvatarId()
|
||||
|| pick_info->pick_id != getPickId())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mIsEditing = false;
|
||||
mPickDescription->setParseHTML(true);
|
||||
mParcelId = pick_info->parcel_id;
|
||||
setSnapshotId(pick_info->snapshot_id);
|
||||
if (!getSelfProfile() || getEmbedded())
|
||||
{
|
||||
mSnapshotCtrl->setEnabled(FALSE);
|
||||
}
|
||||
setPickName(pick_info->name);
|
||||
setPickDesc(pick_info->desc);
|
||||
setPosGlobal(pick_info->pos_global);
|
||||
mCurrentPickDescription = pick_info->desc;
|
||||
|
||||
// Send remote parcel info request to get parcel name and sim (region) name.
|
||||
sendParcelInfoRequest();
|
||||
|
||||
// *NOTE dzaporozhan
|
||||
// We want to keep listening to APT_PICK_INFO because user may
|
||||
// edit the Pick and we have to update Pick info panel.
|
||||
// revomeObserver is called from onClickBack
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::apply()
|
||||
{
|
||||
if ((mNewPick || getIsLoaded()) && isDirty())
|
||||
{
|
||||
sendUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::setSnapshotId(const LLUUID& id)
|
||||
{
|
||||
mSnapshotCtrl->setImageAssetID(id);
|
||||
mSnapshotCtrl->setValid(TRUE);
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::setPickName(const std::string& name)
|
||||
{
|
||||
mPickName->setValue(name);
|
||||
}
|
||||
|
||||
const std::string LLPanelProfilePick::getPickName()
|
||||
{
|
||||
return mPickName->getValue().asString();
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::setPickDesc(const std::string& desc)
|
||||
{
|
||||
mPickDescription->setValue(desc);
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::setPickLocation(const std::string& location)
|
||||
{
|
||||
getChild<LLUICtrl>("pick_location")->setValue(location);
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onClickMap()
|
||||
{
|
||||
LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
|
||||
LLFloaterReg::showInstance("world_map", "center");
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onClickTeleport()
|
||||
{
|
||||
if (!getPosGlobal().isExactlyZero())
|
||||
{
|
||||
gAgent.teleportViaLocation(getPosGlobal());
|
||||
LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::enableSaveButton(BOOL enable)
|
||||
{
|
||||
mSaveButton->setEnabled(enable);
|
||||
mSaveButton->setVisible(enable);
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onSnapshotChanged()
|
||||
{
|
||||
enableSaveButton(TRUE);
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onPickChanged(LLUICtrl* ctrl)
|
||||
{
|
||||
if (ctrl && ctrl == mPickName)
|
||||
{
|
||||
updateTabLabel(mPickName->getText());
|
||||
}
|
||||
|
||||
enableSaveButton(isDirty());
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::resetDirty()
|
||||
{
|
||||
LLPanel::resetDirty();
|
||||
|
||||
mPickName->resetDirty();
|
||||
mPickDescription->resetDirty();
|
||||
mSnapshotCtrl->resetDirty();
|
||||
mLocationChanged = false;
|
||||
}
|
||||
|
||||
BOOL LLPanelProfilePick::isDirty() const
|
||||
{
|
||||
if (mNewPick
|
||||
|| LLPanel::isDirty()
|
||||
|| mLocationChanged
|
||||
|| mSnapshotCtrl->isDirty()
|
||||
|| mPickName->isDirty()
|
||||
|| mPickDescription->isDirty())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onClickSetLocation()
|
||||
{
|
||||
// Save location for later use.
|
||||
setPosGlobal(gAgent.getPositionGlobal());
|
||||
|
||||
std::string parcel_name, region_name;
|
||||
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
|
||||
if (parcel)
|
||||
{
|
||||
mParcelId = parcel->getID();
|
||||
parcel_name = parcel->getName();
|
||||
}
|
||||
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region)
|
||||
{
|
||||
region_name = region->getName();
|
||||
}
|
||||
|
||||
setPickLocation(createLocationText(getLocationNotice(), parcel_name, region_name, getPosGlobal()));
|
||||
|
||||
mLocationChanged = true;
|
||||
enableSaveButton(TRUE);
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::onClickSave()
|
||||
{
|
||||
sendUpdate();
|
||||
|
||||
mLocationChanged = false;
|
||||
}
|
||||
|
||||
std::string LLPanelProfilePick::getLocationNotice()
|
||||
{
|
||||
static const std::string notice = getString("location_notice");
|
||||
return notice;
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::sendParcelInfoRequest()
|
||||
{
|
||||
if (mParcelId != mRequestedId)
|
||||
{
|
||||
if (mRequestedId.notNull())
|
||||
{
|
||||
LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedId, this);
|
||||
}
|
||||
LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelId, this);
|
||||
LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelId);
|
||||
|
||||
mRequestedId = mParcelId;
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::processParcelInfo(const LLParcelData& parcel_data)
|
||||
{
|
||||
setPickLocation(createLocationText(LLStringUtil::null, parcel_data.name, parcel_data.sim_name, getPosGlobal()));
|
||||
|
||||
// We have received parcel info for the requested ID so clear it now.
|
||||
mRequestedId.setNull();
|
||||
|
||||
if (mParcelId.notNull())
|
||||
{
|
||||
LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::sendUpdate()
|
||||
{
|
||||
LLPickData pick_data;
|
||||
|
||||
// If we don't have a pick id yet, we'll need to generate one,
|
||||
// otherwise we'll keep overwriting pick_id 00000 in the database.
|
||||
if (getPickId().isNull())
|
||||
{
|
||||
getPickId().generate();
|
||||
}
|
||||
|
||||
pick_data.agent_id = gAgentID;
|
||||
pick_data.session_id = gAgent.getSessionID();
|
||||
pick_data.pick_id = getPickId();
|
||||
pick_data.creator_id = gAgentID;;
|
||||
|
||||
//legacy var need to be deleted
|
||||
pick_data.top_pick = FALSE;
|
||||
pick_data.parcel_id = mParcelId;
|
||||
pick_data.name = getPickName();
|
||||
pick_data.desc = mPickDescription->getValue().asString();
|
||||
pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID();
|
||||
pick_data.pos_global = getPosGlobal();
|
||||
pick_data.sort_order = 0;
|
||||
pick_data.enabled = TRUE;
|
||||
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendPickInfoUpdate(&pick_data);
|
||||
|
||||
if(mNewPick)
|
||||
{
|
||||
// Assume a successful create pick operation, make new number of picks
|
||||
// available immediately. Actual number of picks will be requested in
|
||||
// LLAvatarPropertiesProcessor::sendPickInfoUpdate and updated upon server respond.
|
||||
LLAgentPicksInfo::getInstance()->incrementNumberOfPicks();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLPanelProfilePick::createLocationText(const std::string& owner_name, const std::string& original_name, const std::string& sim_name, const LLVector3d& pos_global)
|
||||
{
|
||||
std::string location_text(owner_name);
|
||||
if (!original_name.empty())
|
||||
{
|
||||
if (!location_text.empty())
|
||||
{
|
||||
location_text.append(", ");
|
||||
}
|
||||
location_text.append(original_name);
|
||||
|
||||
}
|
||||
|
||||
if (!sim_name.empty())
|
||||
{
|
||||
if (!location_text.empty())
|
||||
{
|
||||
location_text.append(", ");
|
||||
}
|
||||
location_text.append(sim_name);
|
||||
}
|
||||
|
||||
if (!location_text.empty())
|
||||
{
|
||||
location_text.append(" ");
|
||||
}
|
||||
|
||||
if (!pos_global.isNull())
|
||||
{
|
||||
S32 region_x = ll_round((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS;
|
||||
S32 region_y = ll_round((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS;
|
||||
S32 region_z = ll_round((F32)pos_global.mdV[VZ]);
|
||||
location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));
|
||||
}
|
||||
return location_text;
|
||||
}
|
||||
|
||||
void LLPanelProfilePick::updateTabLabel(const std::string& title)
|
||||
{
|
||||
setLabel(title);
|
||||
LLTabContainer* parent = dynamic_cast<LLTabContainer*>(getParent());
|
||||
if (parent)
|
||||
{
|
||||
parent->setCurrentTabName(title);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,234 @@
|
|||
/**
|
||||
* @file llpanelprofilepicks.h
|
||||
* @brief LLPanelProfilePicks and related class definitions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&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$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELPICKS_H
|
||||
#define LL_LLPANELPICKS_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "lluuid.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llpanelavatar.h"
|
||||
#include "llremoteparcelrequest.h"
|
||||
|
||||
class LLTabContainer;
|
||||
class LLTextureCtrl;
|
||||
class LLMediaCtrl;
|
||||
class LLLineEditor;
|
||||
class LLTextEditor;
|
||||
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's picks.
|
||||
*/
|
||||
class LLPanelProfilePicks
|
||||
: public LLPanelProfileTab
|
||||
{
|
||||
public:
|
||||
LLPanelProfilePicks();
|
||||
/*virtual*/ ~LLPanelProfilePicks();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
void selectPick(const LLUUID& pick_id);
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/*virtual*/ void resetData();
|
||||
|
||||
/*virtual*/ void updateButtons();
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
virtual void apply();
|
||||
|
||||
/**
|
||||
* Sends update data request to server.
|
||||
*/
|
||||
/*virtual*/ void updateData();
|
||||
|
||||
private:
|
||||
void onClickNewBtn();
|
||||
void onClickDelete();
|
||||
void callbackDeletePick(const LLSD& notification, const LLSD& response);
|
||||
|
||||
bool canAddNewPick();
|
||||
bool canDeletePick();
|
||||
|
||||
LLTabContainer* mTabContainer;
|
||||
LLUICtrl* mNoItemsLabel;
|
||||
LLButton* mNewButton;
|
||||
LLButton* mDeleteButton;
|
||||
|
||||
LLUUID mPickToSelectOnLoad;
|
||||
};
|
||||
|
||||
|
||||
class LLPanelProfilePick
|
||||
: public LLPanelProfileTab
|
||||
, public LLRemoteParcelInfoObserver
|
||||
{
|
||||
public:
|
||||
|
||||
// Creates new panel
|
||||
static LLPanelProfilePick* create();
|
||||
|
||||
LLPanelProfilePick();
|
||||
|
||||
/*virtual*/ ~LLPanelProfilePick();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void setAvatarId(const LLUUID& avatar_id);
|
||||
|
||||
void setPickId(const LLUUID& id) { mPickId = id; }
|
||||
virtual LLUUID& getPickId() { return mPickId; }
|
||||
|
||||
virtual void setPickName(const std::string& name);
|
||||
const std::string getPickName();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
/**
|
||||
* Saves changes.
|
||||
*/
|
||||
virtual void apply();
|
||||
|
||||
void updateTabLabel(const std::string& title);
|
||||
|
||||
//This stuff we got from LLRemoteParcelObserver, in the last one we intentionally do nothing
|
||||
/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
|
||||
/*virtual*/ void setParcelID(const LLUUID& parcel_id) { mParcelId = parcel_id; }
|
||||
/*virtual*/ void setErrorStatus(S32 status, const std::string& reason) {};
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Sends remote parcel info request to resolve parcel name from its ID.
|
||||
*/
|
||||
void sendParcelInfoRequest();
|
||||
|
||||
/**
|
||||
* "Location text" is actually the owner name, the original
|
||||
* name that owner gave the parcel, and the location.
|
||||
*/
|
||||
static std::string createLocationText(
|
||||
const std::string& owner_name,
|
||||
const std::string& original_name,
|
||||
const std::string& sim_name,
|
||||
const LLVector3d& pos_global);
|
||||
|
||||
/**
|
||||
* Sets snapshot id.
|
||||
*
|
||||
* Will mark snapshot control as valid if id is not null.
|
||||
* Will mark snapshot control as invalid if id is null. If null id is a valid value,
|
||||
* you have to manually mark snapshot is valid.
|
||||
*/
|
||||
virtual void setSnapshotId(const LLUUID& id);
|
||||
virtual void setPickDesc(const std::string& desc);
|
||||
virtual void setPickLocation(const std::string& location);
|
||||
|
||||
virtual void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
|
||||
virtual LLVector3d& getPosGlobal() { return mPosGlobal; }
|
||||
|
||||
/**
|
||||
* Callback for "Map" button, opens Map
|
||||
*/
|
||||
void onClickMap();
|
||||
|
||||
/**
|
||||
* Callback for "Teleport" button, teleports user to Pick location.
|
||||
*/
|
||||
void onClickTeleport();
|
||||
|
||||
/**
|
||||
* Enables/disables "Save" button
|
||||
*/
|
||||
void enableSaveButton(BOOL enable);
|
||||
|
||||
/**
|
||||
* Called when snapshot image changes.
|
||||
*/
|
||||
void onSnapshotChanged();
|
||||
|
||||
/**
|
||||
* Callback for Pick snapshot, name and description changed event.
|
||||
*/
|
||||
void onPickChanged(LLUICtrl* ctrl);
|
||||
|
||||
/**
|
||||
* Resets panel and all cantrols to unedited state
|
||||
*/
|
||||
/*virtual*/ void resetDirty();
|
||||
|
||||
/**
|
||||
* Returns true if any of Pick properties was changed by user.
|
||||
*/
|
||||
/*virtual*/ BOOL isDirty() const;
|
||||
|
||||
/**
|
||||
* Callback for "Set Location" button click
|
||||
*/
|
||||
void onClickSetLocation();
|
||||
|
||||
/**
|
||||
* Callback for "Save" button click
|
||||
*/
|
||||
void onClickSave();
|
||||
|
||||
std::string getLocationNotice();
|
||||
|
||||
/**
|
||||
* Sends Pick properties to server.
|
||||
*/
|
||||
void sendUpdate();
|
||||
|
||||
protected:
|
||||
|
||||
LLTextureCtrl* mSnapshotCtrl;
|
||||
LLLineEditor* mPickName;
|
||||
LLTextEditor* mPickDescription;
|
||||
LLButton* mSetCurrentLocationButton;
|
||||
LLButton* mSaveButton;
|
||||
|
||||
LLVector3d mPosGlobal;
|
||||
LLUUID mParcelId;
|
||||
LLUUID mPickId;
|
||||
LLUUID mRequestedId;
|
||||
|
||||
bool mLocationChanged;
|
||||
bool mNewPick;
|
||||
bool mIsEditing;
|
||||
|
||||
std::string mCurrentPickDescription;
|
||||
|
||||
void onDescriptionFocusReceived();
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELPICKS_H
|
||||
|
|
@ -106,6 +106,7 @@
|
|||
#include "llfloaterpostprocess.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterpreviewtrash.h"
|
||||
#include "llfloaterprofile.h"
|
||||
#include "llfloaterproperties.h"
|
||||
#include "llfloaterregiondebugconsole.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
|
|
@ -150,7 +151,7 @@
|
|||
#include "llmoveview.h"
|
||||
#include "llfloaterimnearbychat.h"
|
||||
#include "llpanelblockedlist.h"
|
||||
#include "llpanelclassified.h"
|
||||
#include "llpanelprofileclassifieds.h"
|
||||
#include "llpreviewanim.h"
|
||||
#include "llpreviewgesture.h"
|
||||
#include "llpreviewnotecard.h"
|
||||
|
|
@ -347,8 +348,9 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
|
||||
LLFloaterReg::add("outfit_snapshot", "floater_outfit_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOutfitSnapshot>);
|
||||
LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
|
||||
LLFloaterReg::add("my_profile", "floater_my_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create);
|
||||
LLFloaterReg::add("profile", "floater_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create);
|
||||
LLFloaterReg::add("my_profile_web", "floater_my_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create);
|
||||
LLFloaterReg::add("profile_web", "floater_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create);
|
||||
LLFloaterReg::add("profile", "floater_profile.xml",(LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProfile>);
|
||||
LLFloaterReg::add("how_to", "floater_how_to.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);
|
||||
|
||||
LLFloaterReg::add("fbc_web", "floater_fbc_web.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
#include "llmutelist.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpanelprofile.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llparcel.h"
|
||||
#include "llpluginclassmedia.h"
|
||||
#include "llurldispatcher.h"
|
||||
|
|
|
|||
|
|
@ -6521,6 +6521,15 @@ class LLShowAgentProfile : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
class LLShowAgentProfilePicks : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLAvatarActions::showPicks(gAgent.getID());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLToggleAgentProfile : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -9251,6 +9260,7 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLToggleSpeak(), "ToggleSpeak");
|
||||
view_listener_t::addMenu(new LLPromptShowURL(), "PromptShowURL");
|
||||
view_listener_t::addMenu(new LLShowAgentProfile(), "ShowAgentProfile");
|
||||
view_listener_t::addMenu(new LLShowAgentProfilePicks(), "ShowAgentProfilePicks");
|
||||
view_listener_t::addMenu(new LLToggleAgentProfile(), "ToggleAgentProfile");
|
||||
view_listener_t::addMenu(new LLToggleControl(), "ToggleControl");
|
||||
view_listener_t::addMenu(new LLCheckControl(), "CheckControl");
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
#include "llsdserialize.h"
|
||||
|
||||
// newview
|
||||
#include "llpanelprofile.h" // for getProfileURL(). FIXME: move the method to LLAvatarActions
|
||||
#include "llavataractions.h" // for getProfileURL()
|
||||
#include "llviewermedia.h" // FIXME: don't use LLViewerMedia internals
|
||||
|
||||
#include "llcorehttputil.h"
|
||||
|
|
|
|||
|
|
@ -877,6 +877,22 @@
|
|||
name="PanelNotificationListItem"
|
||||
value="0.3 0.3 0.3 .3" />
|
||||
|
||||
<!-- profiles -->
|
||||
<color
|
||||
name="StatusUserOnline"
|
||||
reference="White" />
|
||||
<color
|
||||
name="StatusUserOffline"
|
||||
reference="LtGray_35" />
|
||||
<!-- Groups visible in own profiles -->
|
||||
<color
|
||||
name="GroupVisibleInProfile"
|
||||
reference="TextBgFocusColor" />
|
||||
<color
|
||||
name="GroupHiddenInProfile"
|
||||
reference="Gray" />
|
||||
|
||||
|
||||
<!-- Generic color names (legacy) -->
|
||||
<color
|
||||
name="white"
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Min profil" name="panel_me">
|
||||
<tab_container name="tabs">
|
||||
<panel label="MIN PROFIL" name="panel_profile"/>
|
||||
<panel label="MINE FAVORITTER" name="panel_picks"/>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<!-- Side tray cannot show background because it is always
|
||||
partially on screen to hold tab buttons. -->
|
||||
<side_tray name="sidebar">
|
||||
<sidetray_tab description="Åbn/luk sidebar" name="sidebar_openclose" tab_title="Åbn/luk sidebar"/>
|
||||
<sidetray_tab description="Hjem." name="sidebar_home" tab_title="Hjem">
|
||||
<panel label="hjem" name="panel_home"/>
|
||||
</sidetray_tab>
|
||||
<sidetray_tab description="Redigér din profile og favoritter." name="sidebar_me" tab_title="Min profil">
|
||||
<panel_container name="panel_container">
|
||||
<panel label="Mig" name="panel_me"/>
|
||||
</panel_container>
|
||||
</sidetray_tab>
|
||||
<sidetray_tab description="Find venner, kontakter og personer tæt på." name="sidebar_people" tab_title="Personer">
|
||||
<panel_container name="panel_container">
|
||||
<panel label="Gruppe profil" name="panel_group_info_sidetray"/>
|
||||
<panel label="Blokerede beboere og objekter" name="panel_block_list_sidetray"/>
|
||||
</panel_container>
|
||||
</sidetray_tab>
|
||||
<sidetray_tab description="Find steder du vil hen og steder du har været før." label="Steder" name="sidebar_places" tab_title="Steder">
|
||||
<panel label="Steder" name="panel_places"/>
|
||||
</sidetray_tab>
|
||||
<sidetray_tab description="Browse din beholdning." name="sidebar_inventory" tab_title="Min beholdning">
|
||||
<panel label="Redigér beholdning" name="sidepanel_inventory"/>
|
||||
</sidetray_tab>
|
||||
<sidetray_tab description="Ændre dit nuværende udseende" name="sidebar_appearance" tab_title="Mit udseende">
|
||||
<panel label="Redigér udseende" name="sidepanel_appearance"/>
|
||||
</sidetray_tab>
|
||||
</side_tray>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Auswahlen"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Mein Profil" name="panel_me">
|
||||
<panel label="MEINE AUSWAHLEN" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<floater
|
||||
positioning="cascading"
|
||||
can_close="true"
|
||||
can_resize="true"
|
||||
height="572"
|
||||
help_topic="sidebar_me"
|
||||
min_width="333"
|
||||
min_height="440"
|
||||
name="floater_picks"
|
||||
save_rect="true"
|
||||
save_visibility="true"
|
||||
reuse_instance="true"
|
||||
title="Picks"
|
||||
width="333" >
|
||||
<panel
|
||||
class="panel_me"
|
||||
name="main_panel"
|
||||
filename="panel_me.xml"
|
||||
follows="all"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<floater
|
||||
name="avatarinfo"
|
||||
height="510"
|
||||
width="430"
|
||||
layout="topleft"
|
||||
can_close="true"
|
||||
can_resize="true"
|
||||
help_topic="panel_my_profile_tab"
|
||||
min_height="510"
|
||||
min_width="430"
|
||||
positioning="centered"
|
||||
save_rect="true"
|
||||
title="Profile"
|
||||
>
|
||||
<panel
|
||||
name="panel_profile_view"
|
||||
top="0"
|
||||
left="0"
|
||||
height="500"
|
||||
width="420"
|
||||
follows="all"
|
||||
class="panel_profile"
|
||||
>
|
||||
<tab_container
|
||||
name="panel_profile_tabs"
|
||||
top_pad="5"
|
||||
left="0"
|
||||
height="500"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
tab_min_width="55"
|
||||
tab_position="top"
|
||||
>
|
||||
<panel
|
||||
name="panel_profile_secondlife"
|
||||
label="2nd Life"
|
||||
layout="topleft"
|
||||
class="panel_profile_secondlife"
|
||||
filename="panel_profile_secondlife.xml"
|
||||
help_topic="profile_secondlife_tab"
|
||||
/>
|
||||
<panel
|
||||
name="panel_profile_web"
|
||||
label="Web"
|
||||
layout="topleft"
|
||||
class="panel_profile_web"
|
||||
filename="panel_profile_web.xml"
|
||||
help_topic="profile_web_tab"
|
||||
/>
|
||||
<panel
|
||||
name="panel_profile_interests"
|
||||
label="Interests"
|
||||
layout="topleft"
|
||||
class="panel_profile_interests"
|
||||
filename="panel_profile_interests.xml"
|
||||
help_topic="profile_interests_tab"
|
||||
/>
|
||||
<panel
|
||||
name="panel_profile_picks"
|
||||
label="Picks"
|
||||
layout="topleft"
|
||||
class="panel_profile_picks"
|
||||
filename="panel_profile_picks.xml"
|
||||
help_topic="profile_picks_tab"
|
||||
/>
|
||||
<panel
|
||||
name="panel_profile_classifieds"
|
||||
label="Classified"
|
||||
layout="topleft"
|
||||
class="panel_profile_classifieds"
|
||||
filename="panel_profile_classifieds.xml"
|
||||
help_topic="profile_classified_tab"
|
||||
/>
|
||||
<panel
|
||||
name="panel_profile_firstlife"
|
||||
label="1st Life"
|
||||
layout="topleft"
|
||||
class="panel_profile_firstlife"
|
||||
filename="panel_profile_firstlife.xml"
|
||||
help_topic="profile_firstlife_tab"
|
||||
/>
|
||||
<panel
|
||||
name="panel_profile_notes"
|
||||
label="Notes"
|
||||
layout="topleft"
|
||||
class="panel_profile_notes"
|
||||
filename="panel_profile_notes.xml"
|
||||
help_topic="profile_notes_tab"
|
||||
/>
|
||||
</tab_container>
|
||||
<button
|
||||
name="ok_btn"
|
||||
label="OK"
|
||||
tool_tip="Save changes to profile and close"
|
||||
bottom_delta="0"
|
||||
left="10"
|
||||
height="20"
|
||||
width="90"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<button
|
||||
name="cancel_btn"
|
||||
label="Cancel"
|
||||
bottom_delta="0"
|
||||
right="-10"
|
||||
height="20"
|
||||
width="90"
|
||||
follows="right|bottom"
|
||||
layout="topleft"
|
||||
label_selected="Cancel"
|
||||
visible="false"
|
||||
/>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -63,8 +63,7 @@
|
|||
label="Picks..."
|
||||
name="Picks">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.ToggleOrBringToFront"
|
||||
parameter="picks" />
|
||||
function="ShowAgentProfilePicks" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Experiences..."
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="group_list_item"
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="320"
|
||||
follows="top|right|left"
|
||||
layout="topleft"
|
||||
>
|
||||
<icon
|
||||
name="hovered_icon"
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="320"
|
||||
follows="top|right|left"
|
||||
layout="topleft"
|
||||
image_name="ListItem_Over"
|
||||
visible="false"
|
||||
/>
|
||||
<icon
|
||||
name="selected_icon"
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="320"
|
||||
follows="top|right|left"
|
||||
layout="topleft"
|
||||
image_name="ListItem_Select"
|
||||
visible="false"
|
||||
/>
|
||||
<group_icon
|
||||
name="group_icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="14"
|
||||
width="14"
|
||||
image_name="Generic_Group"
|
||||
mouse_opaque="true"
|
||||
use_draw_context_alpha="false"
|
||||
/>
|
||||
<text
|
||||
name="group_name"
|
||||
value="Unknown"
|
||||
top="0"
|
||||
left_pad="5"
|
||||
right="-2"
|
||||
height="16"
|
||||
follows="left|right"
|
||||
layout="topleft"
|
||||
parse_urls="false"
|
||||
text_color="ScrollUnselectedColor"
|
||||
use_ellipses="true"
|
||||
/>
|
||||
<button
|
||||
name="info_btn"
|
||||
tool_tip="More info"
|
||||
top_delta="-2"
|
||||
left_pad="3"
|
||||
right="-31"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="right"
|
||||
image_pressed="Info_Press"
|
||||
image_unselected="Info_Over"
|
||||
tab_stop="false"
|
||||
/>
|
||||
<!--*TODO: Should only appear on rollover-->
|
||||
<button
|
||||
name="profile_btn"
|
||||
tool_tip="View profile"
|
||||
top_delta="-2"
|
||||
left_pad="5"
|
||||
right="-3"
|
||||
height="20"
|
||||
width="20"
|
||||
follows="right"
|
||||
layout="topleft"
|
||||
image_overlay="Web_Profile_Off"
|
||||
tab_stop="false"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
background_visible="true"
|
||||
border="false"
|
||||
follows="all"
|
||||
height="570"
|
||||
label="My Profile"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="panel_me"
|
||||
top="0"
|
||||
width="333">
|
||||
<panel
|
||||
class="panel_picks"
|
||||
filename="panel_picks.xml"
|
||||
label="MY PICKS"
|
||||
help_topic="panel_my_picks_tab"
|
||||
name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,711 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_profile_classified"
|
||||
top="0"
|
||||
left="0"
|
||||
height="420"
|
||||
width="325"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
help_topic="panel_profile_classified"
|
||||
min_height="350"
|
||||
>
|
||||
<panel.string
|
||||
name="type_mature"
|
||||
>
|
||||
Moderate
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="type_pg"
|
||||
>
|
||||
General Content
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="l$_price"
|
||||
>
|
||||
L$[PRICE]
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="click_through_text_fmt"
|
||||
>
|
||||
[TELEPORT] teleport, [MAP] map, [PROFILE] profile
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="date_fmt"
|
||||
>
|
||||
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="auto_renew_on"
|
||||
>
|
||||
Enabled
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="auto_renew_off"
|
||||
>
|
||||
Disabled
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="location_notice"
|
||||
>
|
||||
(will update after save)
|
||||
</panel.string>
|
||||
<string
|
||||
name="publish_label"
|
||||
>
|
||||
Publish
|
||||
</string>
|
||||
<string
|
||||
name="save_label"
|
||||
>
|
||||
Save
|
||||
</string>
|
||||
<scroll_container
|
||||
name="profile_scroll"
|
||||
top="0"
|
||||
left="0"
|
||||
bottom="-45"
|
||||
width="320"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
color="DkGray2"
|
||||
opaque="true"
|
||||
reserve_scroll_corner="false"
|
||||
>
|
||||
<panel
|
||||
name="info_scroll_content_panel"
|
||||
top="0"
|
||||
left="0"
|
||||
height="570"
|
||||
width="290"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
background_visible="false"
|
||||
min_height="300"
|
||||
>
|
||||
<texture_picker
|
||||
name="classified_snapshot"
|
||||
enabled="false"
|
||||
top="0"
|
||||
left="10"
|
||||
height="197"
|
||||
width="275"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
fallback_image="default_land_picture.j2c"
|
||||
/>
|
||||
<icon
|
||||
name="edit_icon"
|
||||
label=""
|
||||
tool_tip="Click to select an image"
|
||||
top="0"
|
||||
left="0"
|
||||
height="197"
|
||||
width="272"
|
||||
layout="topleft"
|
||||
image_name="spacer24.tga"
|
||||
visible="false"
|
||||
/>
|
||||
<panel
|
||||
name="info_panel"
|
||||
top="180"
|
||||
left="0"
|
||||
height="520"
|
||||
width="320"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
visible="true"
|
||||
>
|
||||
<text_editor
|
||||
name="classified_name"
|
||||
top="0"
|
||||
left="10"
|
||||
height="35"
|
||||
width="280"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
font="SansSerifBig"
|
||||
font.style="BOLD"
|
||||
h_pad="0"
|
||||
read_only="true"
|
||||
text_color="white"
|
||||
use_ellipses="true"
|
||||
v_pad="0"
|
||||
>
|
||||
[name]
|
||||
</text_editor>
|
||||
<text
|
||||
name="classified_location_label"
|
||||
value="Location:"
|
||||
top_pad="-2"
|
||||
left="10"
|
||||
height="10"
|
||||
width="250"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text_editor
|
||||
name="classified_location"
|
||||
value="[loading...]"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
height="30"
|
||||
width="290"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<text
|
||||
name="content_type_label"
|
||||
value="Content Type:"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="10"
|
||||
width="140"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<icon
|
||||
name="content_type_moderate"
|
||||
top_pad="-11"
|
||||
left_pad="0"
|
||||
height="16"
|
||||
width="18"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
image_name="Parcel_M_Light"
|
||||
/>
|
||||
<icon
|
||||
name="content_type_general"
|
||||
top_delta="0"
|
||||
left_delta="0"
|
||||
height="16"
|
||||
width="18"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
image_name="Parcel_PG_Light"
|
||||
/>
|
||||
<text_editor
|
||||
name="content_type"
|
||||
value="[content type]"
|
||||
top_delta="1"
|
||||
left_pad="2"
|
||||
height="18"
|
||||
width="130"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
/>
|
||||
<text
|
||||
name="category_label"
|
||||
value="Category:"
|
||||
top_pad="0"
|
||||
left="10"
|
||||
height="10"
|
||||
width="140"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text_editor
|
||||
name="category"
|
||||
value="[category]"
|
||||
top_pad="-10"
|
||||
left_pad="0"
|
||||
height="18"
|
||||
width="150"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
parse_urls="true"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
/>
|
||||
<text
|
||||
name="creation_date_label"
|
||||
value="Creation date:"
|
||||
top_pad="0"
|
||||
left="10"
|
||||
height="10"
|
||||
width="140"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text_editor
|
||||
name="creation_date"
|
||||
value="[date]"
|
||||
tool_tip="Creation date"
|
||||
top_pad="-10"
|
||||
left_pad="0"
|
||||
height="16"
|
||||
width="150"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
halign="left"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
/>
|
||||
<text
|
||||
name="price_for_listing_label"
|
||||
value="Price for listing:"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
height="10"
|
||||
width="140"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text_editor
|
||||
name="price_for_listing"
|
||||
tool_tip="Price for listing."
|
||||
top_pad="-10"
|
||||
left_pad="0"
|
||||
height="16"
|
||||
width="105"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
halign="left"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
>
|
||||
[PRICE]
|
||||
</text_editor>
|
||||
<layout_stack
|
||||
name="descr_stack"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
height="215"
|
||||
width="290"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
animate="false"
|
||||
orientation="vertical"
|
||||
>
|
||||
<layout_panel
|
||||
name="clickthrough_layout_panel"
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="290"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
auto_resize="false"
|
||||
>
|
||||
<text
|
||||
name="click_through_label"
|
||||
value="Clicks:"
|
||||
top_pad="0"
|
||||
left="0"
|
||||
height="10"
|
||||
width="140"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text_editor
|
||||
name="click_through_text"
|
||||
value="[clicks]"
|
||||
tool_tip="Click through data"
|
||||
top_pad="-10"
|
||||
left_pad="0"
|
||||
height="16"
|
||||
width="150"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
halign="left"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
/>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="auto_renew_layout_panel"
|
||||
top="0"
|
||||
left="0"
|
||||
height="16"
|
||||
width="290"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
auto_resize="false"
|
||||
>
|
||||
<text
|
||||
name="auto_renew_label"
|
||||
value="Auto renew:"
|
||||
top="0"
|
||||
left="0"
|
||||
height="10"
|
||||
width="140"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text
|
||||
name="auto_renew"
|
||||
value="Enabled"
|
||||
top_pad="-10"
|
||||
left_pad="0"
|
||||
height="16"
|
||||
width="150"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
/>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="descr_layout_panel"
|
||||
top="0"
|
||||
left="0"
|
||||
height="220"
|
||||
width="290"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<text
|
||||
name="classified_desc_label"
|
||||
value="Description:"
|
||||
top="0"
|
||||
left="0"
|
||||
height="10"
|
||||
width="250"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<text_editor
|
||||
name="classified_desc"
|
||||
value="[description]"
|
||||
top_pad="7"
|
||||
left="0"
|
||||
height="200"
|
||||
width="280"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
allow_scroll="true"
|
||||
bg_visible="false"
|
||||
h_pad="0"
|
||||
max_length="1023"
|
||||
parse_urls="true"
|
||||
read_only="true"
|
||||
v_pad="0"
|
||||
word_wrap="true"
|
||||
/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel
|
||||
name="edit_panel"
|
||||
top="180"
|
||||
left="0"
|
||||
height="420"
|
||||
width="320"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
>
|
||||
<text
|
||||
name="Name:"
|
||||
top="0"
|
||||
left="10"
|
||||
height="15"
|
||||
width="280"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font="SansSerifSmall"
|
||||
font.style="BOLD"
|
||||
length="1"
|
||||
text_color="white"
|
||||
type="string"
|
||||
>
|
||||
Title:
|
||||
</text>
|
||||
<line_editor
|
||||
name="classified_name_edit"
|
||||
top_pad="2"
|
||||
left="10"
|
||||
height="20"
|
||||
width="273"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
font="SansSerif"
|
||||
max_length_bytes="30"
|
||||
prevalidate_callback="ascii"
|
||||
text_color="black"
|
||||
/>
|
||||
<text
|
||||
name="description_label"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="15"
|
||||
width="280"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font="SansSerifSmall"
|
||||
font.style="BOLD"
|
||||
length="1"
|
||||
text_color="white"
|
||||
type="string"
|
||||
>
|
||||
Description:
|
||||
</text>
|
||||
<text_editor
|
||||
name="classified_desc_edit"
|
||||
top_pad="2"
|
||||
left="10"
|
||||
height="100"
|
||||
width="273"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
max_length="256"
|
||||
text_color="black"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<text
|
||||
name="location_label"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="15"
|
||||
width="280"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font="SansSerifSmall"
|
||||
font.style="BOLD"
|
||||
length="1"
|
||||
text_color="white"
|
||||
type="string"
|
||||
>
|
||||
Location:
|
||||
</text>
|
||||
<text
|
||||
name="classified_location_edit"
|
||||
top_pad="2"
|
||||
left="10"
|
||||
right="-10"
|
||||
height="30"
|
||||
width="280"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
length="1"
|
||||
type="string"
|
||||
word_wrap="true"
|
||||
>
|
||||
loading...
|
||||
</text>
|
||||
<button
|
||||
name="set_to_curr_location_btn"
|
||||
label="Set to Current Location"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
height="23"
|
||||
width="200"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<text
|
||||
name="category_label"
|
||||
value="Category:"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="10"
|
||||
width="120"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<combo_box
|
||||
name="category_edit"
|
||||
label=""
|
||||
top_delta="-3"
|
||||
left_pad="0"
|
||||
height="23"
|
||||
width="156"
|
||||
follows="left|top"
|
||||
/>
|
||||
<text
|
||||
name="content_type_label"
|
||||
value="Content type:"
|
||||
top_pad="15"
|
||||
left="10"
|
||||
height="10"
|
||||
width="120"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
text_color="white"
|
||||
/>
|
||||
<icons_combo_box
|
||||
name="content_type_edit"
|
||||
label="General Content"
|
||||
top_delta="-3"
|
||||
left_pad="0"
|
||||
height="23"
|
||||
width="156"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
>
|
||||
<icons_combo_box.drop_down_button
|
||||
image_overlay="Parcel_PG_Light"
|
||||
image_overlay_alignment="left"
|
||||
imgoverlay_label_space="3"
|
||||
pad_left="3"
|
||||
/>
|
||||
<icons_combo_box.item
|
||||
name="mature_ci"
|
||||
label="Moderate Content"
|
||||
value="Mature"
|
||||
>
|
||||
<item.columns
|
||||
value="Parcel_M_Light"
|
||||
width="20"
|
||||
halign="center"
|
||||
type="icon"
|
||||
/>
|
||||
</icons_combo_box.item>
|
||||
<icons_combo_box.item
|
||||
name="pg_ci"
|
||||
label="General Content"
|
||||
value="PG"
|
||||
>
|
||||
<item.columns
|
||||
value="Parcel_PG_Light"
|
||||
width="20"
|
||||
halign="center"
|
||||
type="icon"
|
||||
/>
|
||||
</icons_combo_box.item>
|
||||
</icons_combo_box>
|
||||
<check_box
|
||||
name="auto_renew_edit"
|
||||
label="Auto renew each week"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="16"
|
||||
width="250"
|
||||
layout="topleft"
|
||||
/>
|
||||
<text
|
||||
name="price_for_listing_edit_label"
|
||||
value="Price for listing:"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="10"
|
||||
width="120"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
text_color="white"
|
||||
/>
|
||||
<spinner
|
||||
name="price_for_listing_edit"
|
||||
label="L$"
|
||||
value="50"
|
||||
tool_tip="Price for listing."
|
||||
top_delta="0"
|
||||
left_pad="0"
|
||||
height="23"
|
||||
width="105"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
decimal_digits="0"
|
||||
halign="left"
|
||||
increment="1"
|
||||
label_width="20"
|
||||
max_val="99999"
|
||||
min_val="50"
|
||||
/>
|
||||
</panel>
|
||||
</panel>
|
||||
</scroll_container>
|
||||
<panel
|
||||
name="button_panel"
|
||||
bottom="-1"
|
||||
left="9"
|
||||
height="35"
|
||||
follows="left|right|bottom"
|
||||
layout="topleft"
|
||||
>
|
||||
<button
|
||||
name="teleport_btn"
|
||||
label="Teleport"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="101"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
<button
|
||||
name="show_on_map_btn"
|
||||
label="Map"
|
||||
top="0"
|
||||
left_pad="5"
|
||||
height="23"
|
||||
width="100"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
<button
|
||||
name="edit_btn"
|
||||
label="Edit"
|
||||
top="0"
|
||||
left_pad="5"
|
||||
height="23"
|
||||
width="101"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
<button
|
||||
name="save_changes_btn"
|
||||
label="[LABEL]"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="155"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<button
|
||||
name="cancel_btn"
|
||||
label="Cancel"
|
||||
top="0"
|
||||
left_pad="5"
|
||||
height="23"
|
||||
width="156"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_profile_classifieds"
|
||||
label="Classified"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<string
|
||||
name="no_classifieds"
|
||||
value="No Classifieds"
|
||||
/>
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
top="20"
|
||||
right="-10"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<button
|
||||
name="new_btn"
|
||||
label="New..."
|
||||
enabled="false"
|
||||
top="25"
|
||||
left="5"
|
||||
height="20"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
visible="true"
|
||||
/>
|
||||
<button
|
||||
name="delete_btn"
|
||||
label="Delete..."
|
||||
enabled="false"
|
||||
left_pad="5"
|
||||
height="20"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
visible="true"
|
||||
/>
|
||||
<tab_container
|
||||
name="tab_classifieds"
|
||||
top="50"
|
||||
bottom="-5"
|
||||
left="4"
|
||||
right="-4"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
halign="left"
|
||||
tab_position="left"
|
||||
tab_width="85"
|
||||
use_ellipses="true"
|
||||
/>
|
||||
<text
|
||||
name="classifieds_panel_text"
|
||||
top="300"
|
||||
left="110"
|
||||
right="-110"
|
||||
height="25"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
mouse_opaque="false"
|
||||
wrap="true"
|
||||
>
|
||||
Loading...
|
||||
</text>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_profile_firstlife"
|
||||
label="Profile"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
top="5"
|
||||
right="-10"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<texture_picker
|
||||
name="real_world_pic"
|
||||
enabled="false"
|
||||
top="10"
|
||||
left="6"
|
||||
height="225"
|
||||
width="275"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
allow_no_texture="true"
|
||||
default_image_name="None"
|
||||
fallback_image="Generic_Person_Large"
|
||||
/>
|
||||
<view_border
|
||||
name="info_border"
|
||||
top="225"
|
||||
left="6"
|
||||
right="-6"
|
||||
height="185"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text_editor
|
||||
name="fl_description_edit"
|
||||
enabled="false"
|
||||
top_delta="1"
|
||||
left_delta="1"
|
||||
right="-7"
|
||||
height="183"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
bg_readonly_color="Transparent"
|
||||
max_length="253"
|
||||
parse_urls="true"
|
||||
word_wrap="true"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,250 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_profile_interests"
|
||||
label="Interests"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
top="5"
|
||||
right="-10"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<text
|
||||
name="I Want To:"
|
||||
top="10"
|
||||
left="4"
|
||||
height="16"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
>
|
||||
I Want To:
|
||||
</text>
|
||||
<check_box
|
||||
name="chk0"
|
||||
label="Build"
|
||||
enabled="false"
|
||||
top_delta="0"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk1"
|
||||
label="Explore"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk2"
|
||||
label="Meet"
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk6"
|
||||
label="Be Hired"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk3"
|
||||
label="Group"
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk4"
|
||||
label="Buy"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk5"
|
||||
label="Sell"
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="chk7"
|
||||
label="Hire"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<line_editor
|
||||
name="want_to_edit"
|
||||
enabled="false"
|
||||
top_pad="10"
|
||||
left="76"
|
||||
height="18"
|
||||
width="330"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
text_pad_left="4"
|
||||
max_length_bytes="254"
|
||||
>
|
||||
(loading...)
|
||||
</line_editor>
|
||||
|
||||
<text
|
||||
name="Skills:"
|
||||
top_pad="20"
|
||||
left="4"
|
||||
height="16"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
>
|
||||
Skills:
|
||||
</text>
|
||||
<check_box
|
||||
name="schk0"
|
||||
label="Textures"
|
||||
enabled="false"
|
||||
top_delta="0"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="schk1"
|
||||
label="Architecture"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<!-- The next two are out of order on purpose due to legacy ordering -->
|
||||
<check_box
|
||||
name="schk3"
|
||||
label="Modeling"
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="schk2"
|
||||
label="Event Planning"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="schk4"
|
||||
label="Scripting"
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="75"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="schk5"
|
||||
label="Custom Characters"
|
||||
enabled="false"
|
||||
left_pad="80"
|
||||
height="16"
|
||||
width="90"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<line_editor
|
||||
name="skills_edit"
|
||||
enabled="false"
|
||||
top_pad="10"
|
||||
left="76"
|
||||
height="18"
|
||||
width="330"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
text_pad_left="4"
|
||||
max_length_bytes="254"
|
||||
>
|
||||
(loading...)
|
||||
</line_editor>
|
||||
|
||||
<text
|
||||
name="Languages:"
|
||||
top_pad="20"
|
||||
left="4"
|
||||
height="16"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
>
|
||||
Languages:
|
||||
</text>
|
||||
<line_editor
|
||||
name="languages_edit"
|
||||
enabled="false"
|
||||
top_delta="-1"
|
||||
left="76"
|
||||
height="18"
|
||||
width="330"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
text_pad_left="4"
|
||||
max_length_bytes="254"
|
||||
>
|
||||
(loading...)
|
||||
</line_editor>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_notes"
|
||||
label="Notes & Privacy"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
top="3"
|
||||
right="-10"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<text
|
||||
name="status_message"
|
||||
value="Private notes on this avatar:"
|
||||
top="6"
|
||||
left="6"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
/>
|
||||
<text_editor
|
||||
name="notes_edit"
|
||||
enabled="false"
|
||||
top_pad="4"
|
||||
left="6"
|
||||
right="-6"
|
||||
height="335"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
max_length="1000"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<text
|
||||
name="status_message2"
|
||||
value="Allow this avatar to:"
|
||||
top_pad="8"
|
||||
left="6"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
/>
|
||||
<check_box
|
||||
name="status_check"
|
||||
label="See when I am online"
|
||||
enabled="false"
|
||||
left="10"
|
||||
height="16"
|
||||
width="293"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="map_check"
|
||||
label="Find me on the world map"
|
||||
enabled="false"
|
||||
left="10"
|
||||
height="16"
|
||||
width="293"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
<check_box
|
||||
name="objects_check"
|
||||
label="Edit, delete or take my objects"
|
||||
enabled="false"
|
||||
left="10"
|
||||
height="16"
|
||||
width="293"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_pick_info"
|
||||
top="0"
|
||||
left="0"
|
||||
height="360"
|
||||
width="310"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
help_topic="profile_pick_info"
|
||||
>
|
||||
<panel.string
|
||||
name="location_notice"
|
||||
>
|
||||
(will update after save)
|
||||
</panel.string>
|
||||
<texture_picker
|
||||
name="pick_snapshot"
|
||||
top="10"
|
||||
left="10"
|
||||
height="180"
|
||||
width="290"
|
||||
follows="left|right|top"
|
||||
layout="topleft"
|
||||
fallback_image="default_land_picture.j2c"
|
||||
/>
|
||||
<line_editor
|
||||
name="pick_name"
|
||||
enabled="false"
|
||||
top_pad="-15"
|
||||
left="10"
|
||||
height="20"
|
||||
width="290"
|
||||
follows="left|right|top"
|
||||
layout="topleft"
|
||||
/>
|
||||
<text_editor
|
||||
name="pick_desc"
|
||||
enabled="false"
|
||||
top_pad="8"
|
||||
left="10"
|
||||
height="70"
|
||||
width="290"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
allow_html="true"
|
||||
border_visible="true"
|
||||
h_pad="4"
|
||||
max_length="1023"
|
||||
v_pad="3"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<line_editor
|
||||
name="pick_location"
|
||||
enabled="false"
|
||||
left="10"
|
||||
height="20"
|
||||
width="290"
|
||||
follows="left|right|bottom"
|
||||
layout="topleft"
|
||||
length="1"
|
||||
type="string"
|
||||
>
|
||||
Loading...
|
||||
</line_editor>
|
||||
<button
|
||||
name="teleport_btn"
|
||||
label="Teleport"
|
||||
bottom="-40"
|
||||
left="10"
|
||||
height="20"
|
||||
width="80"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
/>
|
||||
<button
|
||||
name="show_on_map_btn"
|
||||
label="Show on Map"
|
||||
bottom_delta="0"
|
||||
left_pad="5"
|
||||
height="20"
|
||||
width="100"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
/>
|
||||
<button
|
||||
name="set_to_curr_location_btn"
|
||||
label="Set Location"
|
||||
tool_tip="Set to Current Location"
|
||||
bottom_delta="0"
|
||||
left_pad="5"
|
||||
height="20"
|
||||
width="100"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<button
|
||||
name="save_changes_btn"
|
||||
label="Save Pick"
|
||||
bottom="-15"
|
||||
left="10"
|
||||
height="20"
|
||||
width="100"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_picks"
|
||||
label="Picks"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<string
|
||||
name="no_picks"
|
||||
value="No Picks"
|
||||
/>
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
top="20"
|
||||
right="-10"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<text
|
||||
name="Tell everyone about your favorite places in Second Life."
|
||||
top="5"
|
||||
left="5"
|
||||
right="-5"
|
||||
height="16"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
>
|
||||
Tell everyone about your favorite places in Second Life.
|
||||
</text>
|
||||
<button
|
||||
name="new_btn"
|
||||
label="New..."
|
||||
enabled="false"
|
||||
top_pad="4"
|
||||
left="5"
|
||||
height="20"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<button
|
||||
name="delete_btn"
|
||||
label="Delete..."
|
||||
enabled="false"
|
||||
left_pad="5"
|
||||
height="20"
|
||||
width="70"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<tab_container
|
||||
name="tab_picks"
|
||||
top="50"
|
||||
bottom="-5"
|
||||
left="4"
|
||||
right="-4"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
halign="left"
|
||||
tab_position="left"
|
||||
use_ellipses="true"
|
||||
/>
|
||||
<text
|
||||
name="picks_panel_text"
|
||||
top="300"
|
||||
left="110"
|
||||
right="-110"
|
||||
height="25"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
mouse_opaque="false"
|
||||
wrap="true"
|
||||
>
|
||||
Loading...
|
||||
</text>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,512 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_profile"
|
||||
label="Profile"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<string
|
||||
name="status_online"
|
||||
>
|
||||
Currently Online
|
||||
</string>
|
||||
<string
|
||||
name="status_offline"
|
||||
>
|
||||
Currently Offline
|
||||
</string>
|
||||
<string
|
||||
name="CaptionTextAcctInfo"
|
||||
>
|
||||
</string>
|
||||
<string
|
||||
name="payment_update_link_url"
|
||||
>
|
||||
http://www.secondlife.com/account/billing.php?lang=en
|
||||
</string>
|
||||
<string
|
||||
name="partner_edit_link_url"
|
||||
>
|
||||
http://www.secondlife.com/account/partners.php?lang=en
|
||||
</string>
|
||||
<string
|
||||
name="my_account_link_url"
|
||||
value="http://secondlife.com/account"
|
||||
/>
|
||||
<string
|
||||
name="no_partner_text"
|
||||
value="None"
|
||||
/>
|
||||
<string
|
||||
name="no_group_text"
|
||||
value="None"
|
||||
/>
|
||||
<string
|
||||
name="RegisterDateFormat"
|
||||
>
|
||||
[REG_DATE]
|
||||
</string>
|
||||
<string
|
||||
name="name_text_args"
|
||||
>
|
||||
[NAME]
|
||||
</string>
|
||||
<string
|
||||
name="display_name_text_args"
|
||||
>
|
||||
[DISPLAY_NAME]
|
||||
</string>
|
||||
<string
|
||||
name="FSDev"
|
||||
value=" Developer"
|
||||
/>
|
||||
<string
|
||||
name="FSSupp"
|
||||
value=" Support"
|
||||
/>
|
||||
<string
|
||||
name="FSQualityAssurance"
|
||||
value=" Bug Hunter"
|
||||
/>
|
||||
<string
|
||||
name="FSGW"
|
||||
value=" Gateway"
|
||||
/>
|
||||
<!--
|
||||
|
||||
KC: Use view_border's around text_editor's due to text render issues with border_visible
|
||||
|
||||
-->
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
top="4"
|
||||
right="-10"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<text
|
||||
name="name_label"
|
||||
value="Name:"
|
||||
top="8"
|
||||
left="6"
|
||||
height="20"
|
||||
width="55"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
/>
|
||||
<button
|
||||
name="set_name"
|
||||
label="Name:"
|
||||
tool_tip="Set Display Name"
|
||||
enabled="false"
|
||||
top_delta="0"
|
||||
left_delta="0"
|
||||
height="20"
|
||||
width="55"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<view_border
|
||||
name="info_border"
|
||||
left_pad="4"
|
||||
right="-6"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text_editor
|
||||
name="complete_name"
|
||||
value="(loading...)"
|
||||
enabled="false"
|
||||
top_delta="0"
|
||||
left_delta="3"
|
||||
right="-6"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
border_visible="false"
|
||||
h_pad="1"
|
||||
v_pad="2"
|
||||
max_length="254"
|
||||
/>
|
||||
<texture_picker
|
||||
name="2nd_life_pic"
|
||||
enabled="false"
|
||||
top_pad="6"
|
||||
left_delta="0"
|
||||
height="180"
|
||||
width="220"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
allow_no_texture="true"
|
||||
default_image_name="None"
|
||||
fallback_image="Generic_Person_Large"
|
||||
/>
|
||||
<text
|
||||
name="status"
|
||||
value="Status Unknown"
|
||||
top_delta="1"
|
||||
left_pad="4"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
text_color="LtGray_50"
|
||||
/>
|
||||
<text
|
||||
name="label"
|
||||
value="Second Life Birthdate:"
|
||||
top_pad="2"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
/>
|
||||
<view_border
|
||||
name="info_border3"
|
||||
top_pad="0"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text_editor
|
||||
name="register_date"
|
||||
value="(loading...)"
|
||||
top_delta="0"
|
||||
left_delta="2"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
border_visible="false"
|
||||
h_pad="2"
|
||||
max_length="254"
|
||||
read_only="true"
|
||||
translate="false"
|
||||
v_pad="0"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<text
|
||||
name="label2"
|
||||
value="Account:"
|
||||
top_pad="6"
|
||||
left_delta="-2"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
/>
|
||||
<view_border
|
||||
name="acct_border"
|
||||
top_pad="0"
|
||||
left_delta="0"
|
||||
right="-6"
|
||||
height="48"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text_editor
|
||||
name="acc_status_text"
|
||||
top_delta="0"
|
||||
left_delta="2"
|
||||
right="-6"
|
||||
height="44"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
allow_scroll="false"
|
||||
bg_visible="false"
|
||||
border_visible="false"
|
||||
h_pad="2"
|
||||
read_only="true"
|
||||
translate="false"
|
||||
v_pad="0"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<text
|
||||
name="partner_label"
|
||||
value="Partner:"
|
||||
top_pad="6"
|
||||
left_delta="-2"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
/>
|
||||
<view_border
|
||||
name="info_border4"
|
||||
top_pad="0"
|
||||
left_delta="0"
|
||||
right="-6"
|
||||
height="18"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text
|
||||
name="partner_text"
|
||||
top_delta="2"
|
||||
left_delta="2"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
max_length="254"
|
||||
/>
|
||||
<text
|
||||
name="Groups:"
|
||||
value="Groups:"
|
||||
top_pad="8"
|
||||
left="6"
|
||||
height="16"
|
||||
width="55"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
/>
|
||||
<button
|
||||
name="group_invite"
|
||||
label="+"
|
||||
tool_tip="Invite to Group"
|
||||
top_delta="20"
|
||||
left="40"
|
||||
height="20"
|
||||
width="20"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
label_selected="+"
|
||||
/>
|
||||
<group_list
|
||||
name="group_list"
|
||||
top_delta="-20"
|
||||
left="66"
|
||||
right="-6"
|
||||
height="80"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
border_visible="true"
|
||||
color="ScrollBgWriteableColor"
|
||||
for_agent="false"
|
||||
/>
|
||||
<text
|
||||
name="About:"
|
||||
value="About:"
|
||||
top_pad="8"
|
||||
left="6"
|
||||
height="16"
|
||||
width="55"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
/>
|
||||
<view_border
|
||||
name="info_border5"
|
||||
top_delta="0"
|
||||
left="66"
|
||||
right="-6"
|
||||
height="102"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text_editor
|
||||
name="sl_description_edit"
|
||||
enabled="false"
|
||||
top_delta="1"
|
||||
left_delta="1"
|
||||
right="-7"
|
||||
height="100"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
bg_readonly_color="Transparent"
|
||||
border_visible="false"
|
||||
font="SansSerifSmall"
|
||||
h_pad="2"
|
||||
max_length="510"
|
||||
parse_urls="true"
|
||||
word_wrap="true"
|
||||
/>
|
||||
<text
|
||||
name="Give item:"
|
||||
value="Give item:"
|
||||
top_pad="10"
|
||||
left="6"
|
||||
height="16"
|
||||
width="55"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
/>
|
||||
<view_border
|
||||
name="drop_target_rect_vis"
|
||||
top_delta="0"
|
||||
left="66"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
bevel_style="in"
|
||||
/>
|
||||
<text
|
||||
name="Give inventory"
|
||||
tool_tip="Drop inventory items here to give them to this person."
|
||||
top_delta="0"
|
||||
left="66"
|
||||
right="-6"
|
||||
height="16"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
>
|
||||
Drop inventory item here.
|
||||
</text>
|
||||
<layout_stack
|
||||
name="buttonstack"
|
||||
bottom="-3"
|
||||
left="6"
|
||||
right="-6"
|
||||
height="44"
|
||||
follows="left|bottom|right"
|
||||
layout="topleft"
|
||||
orientation="horizontal"
|
||||
>
|
||||
<layout_panel
|
||||
name="left_buttonstack"
|
||||
left="2"
|
||||
right="-2"
|
||||
height="42"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
user_resize="false"
|
||||
>
|
||||
<button
|
||||
name="show_on_map_btn"
|
||||
label="Find on Map"
|
||||
tool_tip="Locate the Resident on the map"
|
||||
top="2"
|
||||
left="2"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
label_selected="Find on Map"
|
||||
/>
|
||||
<button
|
||||
name="pay"
|
||||
label="Pay"
|
||||
tool_tip="Pay money to the Resident"
|
||||
top_pad="2"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
label_selected="Pay"
|
||||
/>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="middle_buttonstack"
|
||||
left="2"
|
||||
right="-2"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
user_resize="false"
|
||||
>
|
||||
<button
|
||||
name="teleport"
|
||||
label="Offer Teleport"
|
||||
tool_tip="Offer a teleport to the Resident"
|
||||
top="2"
|
||||
left="2"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
label_selected="Offer Teleport"
|
||||
/>
|
||||
<button
|
||||
name="im"
|
||||
label="Instant Message"
|
||||
tool_tip="Open instant message session"
|
||||
top_pad="2"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
label_selected="Instant Message"
|
||||
/>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="right_buttonstack"
|
||||
left="2"
|
||||
right="-2"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
user_resize="false"
|
||||
>
|
||||
<button
|
||||
name="add_friend"
|
||||
label="Add Friend"
|
||||
tool_tip="Offer friendship to the Resident"
|
||||
top="2"
|
||||
left="2"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
label_selected="Add Friend"
|
||||
/>
|
||||
<button
|
||||
name="block"
|
||||
label="Block"
|
||||
tool_tip="Block this Resident"
|
||||
top_pad="2"
|
||||
height="20"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
<button
|
||||
name="unblock"
|
||||
label="Unblock"
|
||||
tool_tip="Unblock this Resident"
|
||||
top_delta="0"
|
||||
right="-40"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<check_box
|
||||
name="show_in_search_checkbox"
|
||||
label="Show in search"
|
||||
enabled="false"
|
||||
bottom="-30"
|
||||
left="60"
|
||||
height="16"
|
||||
width="130"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<profile_drop_target
|
||||
name="drop_target"
|
||||
top="0"
|
||||
bottom="-1"
|
||||
left="0"
|
||||
right="-1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
mouse_opaque="false"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
name="panel_profile_web"
|
||||
label="Web"
|
||||
top="0"
|
||||
left="0"
|
||||
height="480"
|
||||
width="420"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
>
|
||||
<panel.string
|
||||
name="LoadTime"
|
||||
value="Load Time: [TIME] seconds"
|
||||
/>
|
||||
<line_editor
|
||||
name="url_edit"
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
height="16"
|
||||
width="400"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
text_pad_left="4"
|
||||
max_length_bytes="254"
|
||||
>
|
||||
(loading..)
|
||||
</line_editor>
|
||||
<flyout_button
|
||||
name="load"
|
||||
label="Load"
|
||||
tool_tip="Load this profile page with embedded web browser."
|
||||
enabled="false"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
height="18"
|
||||
width="80"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
>
|
||||
<flyout_button.item
|
||||
name="open_item"
|
||||
label="Open in-viewer browser"
|
||||
value="popout"
|
||||
/>
|
||||
<flyout_button.item
|
||||
name="home_item"
|
||||
label="Open external browser"
|
||||
value="external"
|
||||
/>
|
||||
</flyout_button>
|
||||
<loading_indicator
|
||||
name="progress_indicator"
|
||||
left_pad="100"
|
||||
height="23"
|
||||
width="23"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
/>
|
||||
<button
|
||||
name="web_profile_popout_btn"
|
||||
top_delta="5"
|
||||
right="-10"
|
||||
height="16"
|
||||
width="16"
|
||||
follows="right|top"
|
||||
layout="topleft"
|
||||
image_overlay="tearoffbox.tga"
|
||||
tool_tip="Popout web profile"
|
||||
/>
|
||||
<web_browser
|
||||
name="profile_html"
|
||||
top="48"
|
||||
bottom="-18"
|
||||
left="10"
|
||||
right="-10"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
start_url=""
|
||||
/>
|
||||
<text
|
||||
name="status_text"
|
||||
bottom="-4"
|
||||
left="110"
|
||||
right="-110"
|
||||
follows="bottom|left|right"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
/>
|
||||
</panel>
|
||||
|
|
@ -2773,10 +2773,14 @@ If you continue to receive this message, please contact Second Life support for
|
|||
<string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string>
|
||||
<string name="ClassifiedUpdateAfterPublish">(will update after publish)</string>
|
||||
|
||||
<!-- panel picks -->
|
||||
<string name="NoPicksClassifiedsText">You haven't created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.</string>
|
||||
<string name="NoAvatarPicksClassifiedsText">User has no picks or classifieds</string>
|
||||
<string name="PicksClassifiedsLoadingText">Loading...</string>
|
||||
<!-- panel picks -->
|
||||
<string name="NoPicksClassifiedsText">You haven't created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.</string>
|
||||
<string name="NoPicksText">You haven't created any Picks. Click the New button to create a Pick.</string>
|
||||
<string name="NoClassifiedsText">You haven't created any Classifieds. Click the New button to create a Classified.</string>
|
||||
<string name="NoAvatarPicksClassifiedsText">User has no picks or classifieds</string>
|
||||
<string name="NoAvatarPicksText">User has no picks</string>
|
||||
<string name="NoAvatarClassifiedsText">User has no classifieds</string>
|
||||
<string name="PicksClassifiedsLoadingText">Loading...</string>
|
||||
|
||||
<!-- Multi Preview Floater -->
|
||||
<string name="MultiPreviewTitle">Preview</string>
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Destacados"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Mi perfil" name="panel_me">
|
||||
<panel label="MIS DESTACADOS" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Favoris"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Mon profil" name="panel_me">
|
||||
<panel label="MES FAVORIS" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Preferiti"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Il mio profilo" name="panel_me">
|
||||
<panel label="I MIEI PREFERITI" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="ピック"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="マイ プロフィール" name="panel_me">
|
||||
<panel label="マイ-ピック" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Miejsca" />
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel label="Mój Profil" name="panel_me">
|
||||
<panel label="MIEJSCA" name="panel_picks" />
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Destaques"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Meu perfil" name="panel_me">
|
||||
<panel label="MEUS DESTAQUES" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Подборка"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Мой профиль" name="panel_me">
|
||||
<panel label="МОЯ ПОДБОРКА" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="Seçmeler"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Profilim" name="panel_me">
|
||||
<panel label="SEÇMELERİM" name="panel_picks"/>
|
||||
</panel>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_picks" title="精選地點"/>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="我的個人檔案" name="panel_me">
|
||||
<panel label="我的精選地點" name="panel_picks"/>
|
||||
</panel>
|
||||
Loading…
Reference in New Issue