Merge
commit
723ab8b108
|
|
@ -38,6 +38,7 @@ set(llmessage_SOURCE_FILES
|
|||
llcurl.cpp
|
||||
lldatapacker.cpp
|
||||
lldispatcher.cpp
|
||||
llexperiencecache.cpp
|
||||
llfiltersd2xmlrpc.cpp
|
||||
llhost.cpp
|
||||
llhttpassetstorage.cpp
|
||||
|
|
@ -128,6 +129,7 @@ set(llmessage_HEADER_FILES
|
|||
lldbstrings.h
|
||||
lldispatcher.h
|
||||
lleventflags.h
|
||||
llexperiencecache.h
|
||||
llfiltersd2xmlrpc.h
|
||||
llfollowcamparams.h
|
||||
llhost.h
|
||||
|
|
|
|||
|
|
@ -0,0 +1,195 @@
|
|||
/**
|
||||
* @file llexperiencecache.cpp
|
||||
* @brief llexperiencecache and related class definitions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2012, 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 "linden_common.h"
|
||||
#include "llframetimer.h"
|
||||
#include "llhttpclient.h"
|
||||
#include <set>
|
||||
#include <map>
|
||||
|
||||
#include "llexperiencecache.h"
|
||||
|
||||
class LLExperienceData
|
||||
{
|
||||
public:
|
||||
std::string mDisplayName;
|
||||
};
|
||||
|
||||
|
||||
|
||||
namespace LLExperienceCache
|
||||
{
|
||||
bool sRunning = true;
|
||||
std::string sLookupURL;
|
||||
|
||||
typedef std::set<LLUUID> ask_queue_t;
|
||||
ask_queue_t sAskQueue;
|
||||
|
||||
typedef std::map<LLUUID, F64> pending_queue_t;
|
||||
pending_queue_t sPendingQueue;
|
||||
|
||||
|
||||
typedef std::map<LLUUID, LLExperienceData> cache_t;
|
||||
cache_t sCache;
|
||||
|
||||
LLFrameTimer sRequestTimer;
|
||||
|
||||
|
||||
class LLExperienceResponder : public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
LLExperienceResponder(std::vector<LLUUID> agent_ids)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void requestExperiences()
|
||||
{
|
||||
if(sAskQueue.empty())
|
||||
return;
|
||||
|
||||
F64 now = LLFrameTimer::getTotalSeconds();
|
||||
|
||||
const U32 NAME_URL_MAX = 4096;
|
||||
const U32 NAME_URL_SEND_THRESHOLD = 3000;
|
||||
|
||||
std::string url;
|
||||
url.reserve(NAME_URL_MAX);
|
||||
|
||||
std::vector<LLUUID> agent_ids;
|
||||
agent_ids.reserve(128);
|
||||
|
||||
url += sLookupURL;
|
||||
|
||||
std::string arg="?ids=";
|
||||
|
||||
for(ask_queue_t::const_iterator it = sAskQueue.begin(); it != sAskQueue.end() ; ++it)
|
||||
{
|
||||
const LLUUID& agent_id = *it;
|
||||
|
||||
url += arg;
|
||||
url += agent_id.asString();
|
||||
agent_ids.push_back(agent_id);
|
||||
|
||||
sPendingQueue[agent_id] = now;
|
||||
|
||||
arg[0]='&';
|
||||
|
||||
if(url.size() > NAME_URL_SEND_THRESHOLD)
|
||||
{
|
||||
LLHTTPClient::get(url, new LLExperienceResponder(agent_ids));
|
||||
url = sLookupURL;
|
||||
arg[0]='?';
|
||||
agent_ids.clear();
|
||||
}
|
||||
}
|
||||
|
||||
if(url.size() > sLookupURL.size())
|
||||
{
|
||||
LLHTTPClient::get(url, new LLExperienceResponder(agent_ids));
|
||||
}
|
||||
|
||||
sAskQueue.clear();
|
||||
}
|
||||
|
||||
bool isRequestPending(const LLUUID& agent_id)
|
||||
{
|
||||
bool isPending = false;
|
||||
const F64 PENDING_TIMEOUT_SECS = 5.0 * 60.0;
|
||||
|
||||
pending_queue_t::const_iterator it = sPendingQueue.find(agent_id);
|
||||
|
||||
if(it != sPendingQueue.end())
|
||||
{
|
||||
F64 expire_time = LLFrameTimer::getTotalSeconds() - PENDING_TIMEOUT_SECS;
|
||||
isPending = (it->second > expire_time);
|
||||
}
|
||||
|
||||
return isPending;
|
||||
}
|
||||
|
||||
|
||||
void setLookupURL( const std::string& lookup_url )
|
||||
{
|
||||
sLookupURL = lookup_url;
|
||||
}
|
||||
|
||||
bool hasLookupURL()
|
||||
{
|
||||
return !sLookupURL.empty();
|
||||
}
|
||||
|
||||
void idle()
|
||||
{
|
||||
sRunning = true;
|
||||
|
||||
if(!sAskQueue.empty())
|
||||
{
|
||||
requestExperiences();
|
||||
}
|
||||
}
|
||||
|
||||
void erase( const LLUUID& agent_id )
|
||||
{
|
||||
sCache.erase(agent_id);
|
||||
}
|
||||
|
||||
void fetch( const LLUUID& agent_id )
|
||||
{
|
||||
LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "queue request for agent" << agent_id << LL_ENDL ;
|
||||
sAskQueue.insert(agent_id);
|
||||
}
|
||||
|
||||
void insert( const LLUUID& agent_id, const LLExperienceData& experience_data )
|
||||
{
|
||||
sCache[agent_id]=experience_data;
|
||||
}
|
||||
|
||||
bool get( const LLUUID& agent_id, LLExperienceData* experience_data )
|
||||
{
|
||||
if(!sRunning)
|
||||
{
|
||||
|
||||
cache_t::const_iterator it = sCache.find(agent_id);
|
||||
if (it != sCache.end())
|
||||
{
|
||||
llassert(experience_data);
|
||||
*experience_data = it->second;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!isRequestPending(agent_id))
|
||||
{
|
||||
fetch(agent_id);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* @file llexperiencecache.h
|
||||
* @brief Caches information relating to experience keys
|
||||
*
|
||||
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2012, 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_LLEXPERIENCECACHE_H
|
||||
#define LL_LLEXPERIENCECACHE_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class LLUUID;
|
||||
class LLExperienceData;
|
||||
|
||||
namespace LLExperienceCache
|
||||
{
|
||||
void setLookupURL(const std::string& lookup_url);
|
||||
bool hasLookupURL();
|
||||
|
||||
|
||||
void idle();
|
||||
|
||||
void erase(const LLUUID& agent_id);
|
||||
void fetch(const LLUUID& agent_id);
|
||||
void insert(const LLUUID& agent_id, const LLExperienceData& experience_data);
|
||||
bool get(const LLUUID& agent_id, LLExperienceData* experience_data);
|
||||
|
||||
};
|
||||
|
||||
#endif // LL_LLEXPERIENCECACHE_H
|
||||
|
|
@ -202,6 +202,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloatereditwater.cpp
|
||||
llfloaterenvironmentsettings.cpp
|
||||
llfloaterevent.cpp
|
||||
llfloaterexperiences.cpp
|
||||
llfloaterfonttest.cpp
|
||||
llfloatergesture.cpp
|
||||
llfloatergodtools.cpp
|
||||
|
|
@ -370,6 +371,7 @@ set(viewer_SOURCE_FILES
|
|||
llpanelclassified.cpp
|
||||
llpanelcontents.cpp
|
||||
llpaneleditwearable.cpp
|
||||
llpanelexperiences.cpp
|
||||
llpanelface.cpp
|
||||
llpanelgenerictip.cpp
|
||||
llpanelgroup.cpp
|
||||
|
|
@ -779,6 +781,7 @@ set(viewer_HEADER_FILES
|
|||
llfloatereditwater.h
|
||||
llfloaterenvironmentsettings.h
|
||||
llfloaterevent.h
|
||||
llfloaterexperiences.h
|
||||
llfloaterfonttest.h
|
||||
llfloatergesture.h
|
||||
llfloatergodtools.h
|
||||
|
|
@ -941,6 +944,7 @@ set(viewer_HEADER_FILES
|
|||
llpanelclassified.h
|
||||
llpanelcontents.h
|
||||
llpaneleditwearable.h
|
||||
llpanelexperiences.h
|
||||
llpanelface.h
|
||||
llpanelgenerictip.h
|
||||
llpanelgroup.h
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llpanelexperiences.h"
|
||||
#include "llfloaterexperiences.h"
|
||||
|
||||
LLFloaterExperiences::LLFloaterExperiences(const LLSD& data)
|
||||
:LLFloater(data)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLFloaterExperiences::postBuild()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* @file llfloaterexperiences.h
|
||||
* @brief LLFloaterExperiences class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2012, 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_LLFLOATEREXPERIENCES_H
|
||||
#define LL_LLFLOATEREXPERIENCES_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLFloaterExperiences :
|
||||
public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterExperiences(const LLSD& data);
|
||||
|
||||
protected:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
#endif //LL_LLFLOATEREXPERIENCES_H
|
||||
|
|
@ -0,0 +1,251 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
|
||||
#include "llpanelprofile.h"
|
||||
#include "lluictrlfactory.h"
|
||||
|
||||
#include "llpanelexperiences.h"
|
||||
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelExperiences> register_experiences_panel("experiences_panel");
|
||||
|
||||
|
||||
LLPanelExperiences::LLPanelExperiences( )
|
||||
: mExperiencesList(NULL),
|
||||
mExperiencesAccTab(NULL),
|
||||
mProfilePanel(NULL),
|
||||
mPanelExperienceInfo(NULL),
|
||||
mNoExperiences(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void* LLPanelExperiences::create( void* data )
|
||||
{
|
||||
return new LLPanelExperiences();
|
||||
}
|
||||
|
||||
|
||||
BOOL LLPanelExperiences::postBuild( void )
|
||||
{
|
||||
mExperiencesList = getChild<LLFlatListView>("experiences_list");
|
||||
if(hasString("no_experiences"))
|
||||
{
|
||||
mExperiencesList->setNoItemsCommentText(getString("no_experiences"));
|
||||
}
|
||||
|
||||
LLExperienceItem* item = new LLExperienceItem();
|
||||
item->setExperienceName("experience 1");
|
||||
item->setExperienceDescription("hey, I\'m an experience!");
|
||||
mExperiencesList->addItem(item);
|
||||
|
||||
item = new LLExperienceItem();
|
||||
item->setExperienceName("experience 2");
|
||||
item->setExperienceDescription("hey, I\'m another experience!");
|
||||
mExperiencesList->addItem(item);
|
||||
|
||||
mExperiencesAccTab = getChild<LLAccordionCtrlTab>("tab_experiences");
|
||||
mExperiencesAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelExperiences::onAccordionStateChanged, this, mExperiencesAccTab));
|
||||
mExperiencesAccTab->setDisplayChildren(true);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLPanelExperiences::onOpen( const LLSD& key )
|
||||
{
|
||||
LLPanel::onOpen(key);
|
||||
}
|
||||
|
||||
void LLPanelExperiences::onClosePanel()
|
||||
{
|
||||
if (mPanelExperienceInfo)
|
||||
{
|
||||
onPanelExperienceClose(mPanelExperienceInfo);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelExperiences::updateData()
|
||||
{
|
||||
if(isDirty())
|
||||
{
|
||||
mNoExperiences = false;
|
||||
|
||||
/*
|
||||
mNoItemsLabel->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
|
||||
mNoItemsLabel->setVisible(TRUE);
|
||||
|
||||
mPicksList->clear();
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId());
|
||||
|
||||
mClassifiedsList->clear();
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId());
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
LLExperienceItem* LLPanelExperiences::getSelectedExperienceItem()
|
||||
{
|
||||
LLPanel* selected_item = mExperiencesList->getSelectedItem();
|
||||
if (!selected_item) return NULL;
|
||||
|
||||
return dynamic_cast<LLExperienceItem*>(selected_item);
|
||||
}
|
||||
|
||||
void LLPanelExperiences::setProfilePanel( LLPanelProfile* profile_panel )
|
||||
{
|
||||
mProfilePanel = profile_panel;
|
||||
}
|
||||
|
||||
void LLPanelExperiences::onListCommit( const LLFlatListView* f_list )
|
||||
{
|
||||
if(f_list == mExperiencesList)
|
||||
{
|
||||
mExperiencesList->resetSelection(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Unknown list" << llendl;
|
||||
}
|
||||
|
||||
//updateButtons();
|
||||
}
|
||||
|
||||
void LLPanelExperiences::onAccordionStateChanged( const LLAccordionCtrlTab* acc_tab )
|
||||
{
|
||||
if(!mExperiencesAccTab->getDisplayChildren())
|
||||
{
|
||||
mExperiencesList->resetSelection(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLPanelExperiences::openExperienceInfo()
|
||||
{
|
||||
LLSD selected_value = mExperiencesList->getSelectedValue();
|
||||
if(selected_value.isUndefined())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLExperienceItem* experience = (LLExperienceItem*)mExperiencesList->getSelectedItem();
|
||||
|
||||
createExperienceInfoPanel();
|
||||
|
||||
LLSD params;
|
||||
params["experience_name"] = experience->getExperienceName();
|
||||
params["experience_desc"] = experience->getExperienceDescription();
|
||||
|
||||
getProfilePanel()->openPanel(mPanelExperienceInfo, params);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void LLPanelExperiences::createExperienceInfoPanel()
|
||||
{
|
||||
if(!mPanelExperienceInfo)
|
||||
{
|
||||
mPanelExperienceInfo = LLPanelExperienceInfo::create();
|
||||
mPanelExperienceInfo->setExitCallback(boost::bind(&LLPanelExperiences::onPanelExperienceClose, this, mPanelExperienceInfo));
|
||||
mPanelExperienceInfo->setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelExperiences::onPanelExperienceClose( LLPanel* panel )
|
||||
{
|
||||
getProfilePanel()->closePanel(panel);
|
||||
}
|
||||
|
||||
LLPanelProfile* LLPanelExperiences::getProfilePanel()
|
||||
{
|
||||
llassert_always(NULL != mProfilePanel);
|
||||
|
||||
return mProfilePanel;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LLExperienceItem::LLExperienceItem()
|
||||
{
|
||||
buildFromFile("panel_experience_info.xml");
|
||||
}
|
||||
|
||||
void LLExperienceItem::init( LLExperienceData* experience_data )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void LLExperienceItem::setExperienceDescription( const std::string& val )
|
||||
{
|
||||
mExperienceDescription = val;
|
||||
getChild<LLUICtrl>("experience_desc")->setValue(val);
|
||||
}
|
||||
|
||||
void LLExperienceItem::setExperienceName( const std::string& val )
|
||||
{
|
||||
mExperienceName = val;
|
||||
getChild<LLUICtrl>("experience_name")->setValue(val);
|
||||
}
|
||||
|
||||
BOOL LLExperienceItem::postBuild()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLExperienceItem::update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void LLExperienceItem::processProperties( void* data, EAvatarProcessorType type )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
LLExperienceItem::~LLExperienceItem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void LLPanelExperienceInfo::setExperienceName( const std::string& name )
|
||||
{
|
||||
getChild<LLUICtrl>("experience_name")->setValue(name);
|
||||
}
|
||||
|
||||
void LLPanelExperienceInfo::setExperienceDesc( const std::string& desc )
|
||||
{
|
||||
getChild<LLUICtrl>("experience_desc")->setValue(desc);
|
||||
}
|
||||
|
||||
void LLPanelExperienceInfo::onOpen( const LLSD& key )
|
||||
{
|
||||
setExperienceName(key["experience_name"]);
|
||||
setExperienceDesc(key["experience_desc"]);
|
||||
|
||||
/*
|
||||
LLAvatarPropertiesProcessor::getInstance()->addObserver(
|
||||
getAvatarId(), this);
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendPickInfoRequest(
|
||||
getAvatarId(), getPickId());
|
||||
*/
|
||||
}
|
||||
|
||||
LLPanelExperienceInfo* LLPanelExperienceInfo::create()
|
||||
{
|
||||
LLPanelExperienceInfo* panel = new LLPanelExperienceInfo();
|
||||
panel->buildFromFile("panel_experience_info.xml");
|
||||
return panel;
|
||||
}
|
||||
|
||||
void LLPanelExperienceInfo::setExitCallback( const commit_callback_t& cb )
|
||||
{
|
||||
getChild<LLButton>("back_btn")->setClickedCallback(cb);
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
/**
|
||||
* @file llpanelpicks.h
|
||||
* @brief LLPanelPicks and related class definitions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2012, 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_LLPANELEXPERIENCES_H
|
||||
#define LL_LLPANELEXPERIENCES_H
|
||||
|
||||
#include "llaccordionctrltab.h"
|
||||
#include "llflatlistview.h"
|
||||
#include "llpanelavatar.h"
|
||||
|
||||
class LLExperienceItem;
|
||||
class LLPanelProfile;
|
||||
|
||||
class LLPanelExperienceInfo
|
||||
: public LLPanel
|
||||
{
|
||||
public:
|
||||
static LLPanelExperienceInfo* create();
|
||||
|
||||
void onOpen(const LLSD& key);
|
||||
void setExperienceName( const std::string& name );
|
||||
void setExperienceDesc( const std::string& desc );
|
||||
|
||||
|
||||
virtual void setExitCallback(const commit_callback_t& cb);
|
||||
};
|
||||
|
||||
|
||||
class LLPanelExperiences
|
||||
: public LLPanel /*LLPanelProfileTab*/
|
||||
{
|
||||
public:
|
||||
LLPanelExperiences();
|
||||
|
||||
static void* create(void* data);
|
||||
|
||||
/*virtual*/ BOOL postBuild(void);
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
/*virtual*/ void onClosePanel();
|
||||
|
||||
void updateData();
|
||||
|
||||
LLExperienceItem* getSelectedExperienceItem();
|
||||
|
||||
void setProfilePanel(LLPanelProfile* profile_panel);
|
||||
|
||||
protected:
|
||||
|
||||
void onListCommit(const LLFlatListView* f_list);
|
||||
void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab);
|
||||
|
||||
|
||||
void openExperienceInfo();
|
||||
void createExperienceInfoPanel();
|
||||
void onPanelExperienceClose(LLPanel* panel);
|
||||
LLPanelProfile* getProfilePanel();
|
||||
private:
|
||||
LLFlatListView* mExperiencesList;
|
||||
LLAccordionCtrlTab* mExperiencesAccTab;
|
||||
LLPanelProfile* mProfilePanel;
|
||||
LLPanelExperienceInfo* mPanelExperienceInfo;
|
||||
bool mNoExperiences;
|
||||
};
|
||||
|
||||
struct LLExperienceData
|
||||
{
|
||||
std::string name;
|
||||
std::string desc;
|
||||
};
|
||||
|
||||
class LLExperienceItem
|
||||
: public LLPanel
|
||||
//, public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
LLExperienceItem();
|
||||
~LLExperienceItem();
|
||||
|
||||
void init(LLExperienceData* experience_data);
|
||||
/*virtual*/ BOOL postBuild();
|
||||
void update();
|
||||
|
||||
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
void setCreatorID(const LLUUID& val) { mCreatorID = val; }
|
||||
void setExperienceDescription(const std::string& val);
|
||||
void setExperienceName(const std::string& val);
|
||||
|
||||
const LLUUID& getCreatorID() const { return mCreatorID; }
|
||||
const std::string& getExperienceName() const { return mExperienceName; }
|
||||
const std::string& getExperienceDescription() const { return mExperienceDescription; }
|
||||
|
||||
protected:
|
||||
LLUUID mCreatorID;
|
||||
|
||||
std::string mExperienceName;
|
||||
std::string mExperienceDescription;
|
||||
};
|
||||
#endif // LL_LLPANELEXPERIENCES_H
|
||||
|
|
@ -56,6 +56,7 @@
|
|||
#include "llfloatereditsky.h"
|
||||
#include "llfloatereditwater.h"
|
||||
#include "llfloaterenvironmentsettings.h"
|
||||
#include "llfloaterexperiences.h"
|
||||
#include "llfloaterevent.h"
|
||||
#include "llfloaterdestinations.h"
|
||||
#include "llfloaterfonttest.h"
|
||||
|
|
@ -204,7 +205,8 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("env_edit_day_cycle", "floater_edit_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditDayCycle>);
|
||||
|
||||
LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>);
|
||||
|
||||
LLFloaterReg::add("experiences", "floater_experiences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperiences>);
|
||||
|
||||
LLFloaterReg::add("font_test", "floater_font_test.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFontTest>);
|
||||
|
||||
LLFloaterReg::add("gestures", "floater_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGesture>);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
|
||||
<floater
|
||||
positioning="cascading"
|
||||
can_close="true"
|
||||
can_resize="true"
|
||||
height="400"
|
||||
help_topic="sidebar_experiences"
|
||||
min_height="300"
|
||||
min_width="300"
|
||||
layout="topleft"
|
||||
name="floater_experiences"
|
||||
save_rect="false"
|
||||
single_instance="true"
|
||||
reuse_instance="false"
|
||||
title="EXPERIENCES"
|
||||
width="400">
|
||||
<panel
|
||||
top="3"
|
||||
left="3"
|
||||
layout="topleft"
|
||||
right="-3"
|
||||
follows="all"
|
||||
height="300"
|
||||
class="experiences_panel"
|
||||
filename="panel_experiences.xml"
|
||||
>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -52,6 +52,14 @@
|
|||
function="Inventory.NewWindow"
|
||||
parameter="" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Experiences..."
|
||||
name="Experiences"
|
||||
shortcut="control|E">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.ToggleOrBringToFront"
|
||||
parameter="experiences"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Places..."
|
||||
name="Places">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,79 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
bg_opaque_color="DkGray2"
|
||||
background_visible="true"
|
||||
background_opaque="true"
|
||||
fit_parent="true"
|
||||
follows="all"
|
||||
height="120"
|
||||
label="Experiences"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="panel_experience_info"
|
||||
top_pad="0">
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerifHugeBold"
|
||||
height="26"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
name="title"
|
||||
text_color="White"
|
||||
top="2"
|
||||
value="Experience Info"
|
||||
use_ellipses="true"
|
||||
right="-3"/>
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerifBig"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
name="name_label"
|
||||
text_color="White"
|
||||
left="8"
|
||||
top_delta="28"
|
||||
value="Name"
|
||||
use_ellipses="true"
|
||||
right="-3" />
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="8"
|
||||
name="experience_name"
|
||||
text_color="White"
|
||||
left="16"
|
||||
top_delta="22"
|
||||
value="[loading...]"
|
||||
use_ellipses="true"
|
||||
right="-3" />
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerifBig"
|
||||
height="20"
|
||||
left="8"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
name="desc_label"
|
||||
text_color="White"
|
||||
top_delta="22"
|
||||
value="Description"
|
||||
use_ellipses="true"
|
||||
right="-3" />
|
||||
<expandable_text
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="8"
|
||||
name="experience_desc"
|
||||
text_color="White"
|
||||
left="16"
|
||||
top_delta="22"
|
||||
value="[loading...]"
|
||||
use_ellipses="true"
|
||||
right="-3"
|
||||
word_wrap="true" />
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
|
||||
<panel
|
||||
layout="topleft"
|
||||
top="3"
|
||||
left="3"
|
||||
right="-3"
|
||||
bottom="-3"
|
||||
label="Experiences"
|
||||
follows="all">
|
||||
<string
|
||||
name="no_experiences"
|
||||
value="No experiences."/>
|
||||
|
||||
<accordion
|
||||
fit_parent="true"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="3"
|
||||
right="-3"
|
||||
bottom="-3"
|
||||
single_expansion="true"
|
||||
follows="all">
|
||||
<accordion_tab
|
||||
name="tab_experiences"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
right="-3"
|
||||
title="Experiences"
|
||||
follows="all">
|
||||
<flat_list_view
|
||||
name="experiences_list"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
follows="all"/>
|
||||
</accordion_tab>
|
||||
</accordion>
|
||||
</panel>
|
||||
Loading…
Reference in New Issue