From d51bd95a1f9cdeae22f330389c5213a1093eb971 Mon Sep 17 00:00:00 2001
From: "dolphin@dolphin-THINK.home" <dolphin@dolphin-THINK.home>
Date: Tue, 13 Nov 2012 08:24:18 -0800
Subject: [PATCH] Added a simple ui for displaying experiences keys with
 hardcoded contents.

---
 indra/newview/CMakeLists.txt                  |   4 +
 indra/newview/llfloaterexperiences.cpp        |  14 +
 indra/newview/llfloaterexperiences.h          |  45 ++++
 indra/newview/llpanelexperiences.cpp          | 251 ++++++++++++++++++
 indra/newview/llpanelexperiences.h            | 124 +++++++++
 indra/newview/llviewerfloaterreg.cpp          |   4 +-
 .../default/xui/en/floater_experiences.xml    |  29 ++
 .../skins/default/xui/en/menu_viewer.xml      |   8 +
 .../default/xui/en/panel_experience_info.xml  |  79 ++++++
 .../default/xui/en/panel_experiences.xml      |  40 +++
 10 files changed, 597 insertions(+), 1 deletion(-)
 create mode 100644 indra/newview/llfloaterexperiences.cpp
 create mode 100644 indra/newview/llfloaterexperiences.h
 create mode 100644 indra/newview/llpanelexperiences.cpp
 create mode 100644 indra/newview/llpanelexperiences.h
 create mode 100644 indra/newview/skins/default/xui/en/floater_experiences.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_experience_info.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_experiences.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index ccf4ce8d1f1..039f2433234 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -199,6 +199,7 @@ set(viewer_SOURCE_FILES
     llfloatereditwater.cpp
     llfloaterenvironmentsettings.cpp
     llfloaterevent.cpp
+    llfloaterexperiences.cpp
     llfloaterfonttest.cpp
     llfloatergesture.cpp
     llfloatergodtools.cpp
@@ -367,6 +368,7 @@ set(viewer_SOURCE_FILES
     llpanelclassified.cpp
     llpanelcontents.cpp
     llpaneleditwearable.cpp
+    llpanelexperiences.cpp
     llpanelface.cpp
     llpanelgenerictip.cpp
     llpanelgroup.cpp
@@ -775,6 +777,7 @@ set(viewer_HEADER_FILES
     llfloatereditwater.h
     llfloaterenvironmentsettings.h
     llfloaterevent.h
+    llfloaterexperiences.h
     llfloaterfonttest.h
     llfloatergesture.h
     llfloatergodtools.h
@@ -937,6 +940,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 00000000000..b862b41bba9
--- /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 00000000000..1e5f216f8df
--- /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 00000000000..f174171a97e
--- /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 00000000000..2a0f101f8a5
--- /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 1f7cf0cdd44..5582d256f84 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 00000000000..57541c8b358
--- /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 1aa55acf2d8..36b1cea7017 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -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">
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 00000000000..47f366d857f
--- /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 00000000000..47a3005aae3
--- /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>
-- 
GitLab