diff options
| -rw-r--r-- | indra/llmessage/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/llmessage/llexperiencecache.cpp | 195 | ||||
| -rw-r--r-- | indra/llmessage/llexperiencecache.h | 52 | ||||
| -rwxr-xr-x | indra/newview/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterexperiences.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llfloaterexperiences.h | 45 | ||||
| -rw-r--r-- | indra/newview/llpanelexperiences.cpp | 251 | ||||
| -rw-r--r-- | indra/newview/llpanelexperiences.h | 124 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_experiences.xml | 29 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_experience_info.xml | 79 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_experiences.xml | 40 | 
13 files changed, 846 insertions, 1 deletions
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt index d98781e9e6..9974d103a2 100644 --- a/indra/llmessage/CMakeLists.txt +++ b/indra/llmessage/CMakeLists.txt @@ -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 diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp new file mode 100644 index 0000000000..8667ae8981 --- /dev/null +++ b/indra/llmessage/llexperiencecache.cpp @@ -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; +	} + + +} diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h new file mode 100644 index 0000000000..6be51b039e --- /dev/null +++ b/indra/llmessage/llexperiencecache.h @@ -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 diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7eea9ece5a..ccb18df1e0 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -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 diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp new file mode 100644 index 0000000000..b862b41bba --- /dev/null +++ b/indra/newview/llfloaterexperiences.cpp @@ -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; +} diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h new file mode 100644 index 0000000000..1e5f216f8d --- /dev/null +++ b/indra/newview/llfloaterexperiences.h @@ -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 diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp new file mode 100644 index 0000000000..f174171a97 --- /dev/null +++ b/indra/newview/llpanelexperiences.cpp @@ -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); +} diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h new file mode 100644 index 0000000000..2a0f101f8a --- /dev/null +++ b/indra/newview/llpanelexperiences.h @@ -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 diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 1f7cf0cdd4..5582d256f8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -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>); diff --git a/indra/newview/skins/default/xui/en/floater_experiences.xml b/indra/newview/skins/default/xui/en/floater_experiences.xml new file mode 100644 index 0000000000..57541c8b35 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_experiences.xml @@ -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> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 1aa55acf2d..36b1cea701 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -53,6 +53,14 @@           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">          <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/panel_experience_info.xml b/indra/newview/skins/default/xui/en/panel_experience_info.xml new file mode 100644 index 0000000000..47f366d857 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experience_info.xml @@ -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> diff --git a/indra/newview/skins/default/xui/en/panel_experiences.xml b/indra/newview/skins/default/xui/en/panel_experiences.xml new file mode 100644 index 0000000000..47a3005aae --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experiences.xml @@ -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>  | 
