From c1f730ed46c14c12d5856109b622bf085c39abb0 Mon Sep 17 00:00:00 2001
From: dolphin <dolphin@lindenlab.com>
Date: Wed, 26 Feb 2014 17:32:21 -0800
Subject: Moved the experience acquire code to the experiences panel

---
 indra/newview/llfloaterexperiences.cpp             | 44 +++++++++++++++--
 indra/newview/llfloaterexperiences.h               |  5 +-
 indra/newview/llfloaterregioninfo.cpp              | 56 +---------------------
 indra/newview/llfloaterregioninfo.h                |  3 --
 indra/newview/llpanelexperiences.cpp               | 20 +++++++-
 indra/newview/llpanelexperiences.h                 |  2 +
 .../newview/skins/default/xui/en/notifications.xml | 15 ++++++
 .../skins/default/xui/en/panel_experiences.xml     | 53 ++++++++++++++++----
 .../default/xui/en/panel_region_experiences.xml    | 33 -------------
 indra/newview/skins/default/xui/en/strings.xml     |  1 +
 10 files changed, 127 insertions(+), 105 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp
index 3b15cc62a7..8e860a9ee0 100644
--- a/indra/newview/llfloaterexperiences.cpp
+++ b/indra/newview/llfloaterexperiences.cpp
@@ -34,20 +34,21 @@
 #include "lltrans.h"
 #include "llexperiencecache.h"
 #include "llevents.h"
+#include "llnotificationsutil.h"
 
 
 class LLExperienceListResponder : public LLHTTPClient::Responder
 {
 public:
     typedef std::map<std::string, std::string> NameMap;
-    LLExperienceListResponder(const LLHandle<LLFloaterExperiences>& parent, NameMap& nameMap):mParent(parent)
+    LLExperienceListResponder(const LLHandle<LLFloaterExperiences>& parent, NameMap& nameMap, const std::string& errorMessage="ErrorMessage"):mParent(parent),mErrorMessage(errorMessage)
     {
         mNameMap.swap(nameMap);
     }
 
     LLHandle<LLFloaterExperiences> mParent;
     NameMap mNameMap;
-
+	const std::string mErrorMessage;
     virtual void result(const LLSD& content)
     {
         if(mParent.isDead())
@@ -66,12 +67,19 @@ public:
                 {
                     const LLSD& ids = content[it->first];
                     tab->setExperienceList(ids);
-                    //parent->clearFromRecent(ids);
+					tab->enableButton(ids.beginArray() == ids.endArray());
                 }
             }
             ++it;
         }
     }
+
+	virtual void error(U32 status, const std::string& reason)
+	{
+		LLSD subs;
+		subs["ERROR_MESSAGE"] = reason;
+		LLNotificationsUtil::add(mErrorMessage, subs);
+	}
 };
 
 
@@ -81,12 +89,15 @@ LLFloaterExperiences::LLFloaterExperiences(const LLSD& data)
 {
 }
 
-void LLFloaterExperiences::addTab(const std::string& name, bool select)
+LLPanelExperiences* LLFloaterExperiences::addTab(const std::string& name, bool select)
 {
+	LLPanelExperiences* newPanel = LLPanelExperiences::create(name);
     getChild<LLTabContainer>("xp_tabs")->addTabPanel(LLTabContainer::TabPanelParams().
-        panel(LLPanelExperiences::create(name)).
+        panel(newPanel).
         label(LLTrans::getString(name)).
         select_tab(select));
+
+	return newPanel;
 }
 
 BOOL LLFloaterExperiences::postBuild()
@@ -96,6 +107,8 @@ BOOL LLFloaterExperiences::postBuild()
     addTab("Admin_Experiences_Tab", false);
     addTab("Contrib_Experiences_Tab", false);
     addTab("Recent_Experiences_Tab", false);
+	LLPanelExperiences* owned = addTab("Owned_Experiences_Tab", false);
+	owned->setButtonAction("acquire", boost::bind(&LLFloaterExperiences::sendPurchaseRequest, this));
     resizeToTabs();
 
    
@@ -184,6 +197,13 @@ void LLFloaterExperiences::refreshContents()
             nameMap["experience_ids"]="Contrib_Experiences_Tab";
             LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap));
         }
+
+		lookup_url = region->getCapability("AgentExperiences"); 
+		if(!lookup_url.empty())
+		{
+			nameMap["experience_ids"]="Owned_Experiences_Tab";
+			LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap));
+		}
     }
 }
 
@@ -260,3 +280,17 @@ void LLFloaterExperiences::onClose( bool app_quitting )
     LLEventPumps::instance().obtain("experience_permission").stopListening("LLFloaterExperiences");
     LLFloater::onClose(app_quitting);
 }
+
+void LLFloaterExperiences::sendPurchaseRequest() const
+{
+	LLViewerRegion* region = gAgent.getRegion();
+	std::string url = region->getCapability("AgentExperiences");
+	if(!url.empty())
+	{
+		LLSD content;
+
+		LLExperienceListResponder::NameMap nameMap;
+		nameMap["experience_ids"]="Owned_Experiences_Tab";
+		LLHTTPClient::post(url, content, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap, "ExperienceAcquireFailed"));
+	}
+}
diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h
index 27b453042b..bb2de2f0db 100644
--- a/indra/newview/llfloaterexperiences.h
+++ b/indra/newview/llfloaterexperiences.h
@@ -29,6 +29,8 @@
 
 #include "llfloater.h"
 
+class LLPanelExperiences;
+
 class LLFloaterExperiences :
 	public LLFloater
 {
@@ -43,9 +45,10 @@ protected:
 	/*virtual*/ BOOL	postBuild();
     void refreshContents();
     void setupRecentTabs();
-    void addTab(const std::string& name, bool select);
+    LLPanelExperiences* addTab(const std::string& name, bool select);
 
     bool updatePermissions(const LLSD& permission);
+	void sendPurchaseRequest() const;
 
 private:
 
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 43f0ba10a1..027815c593 100755
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -3483,10 +3483,6 @@ BOOL LLPanelRegionExperiences::postBuild()
 	mAllowed = setupList("panel_allowed");
 	mTrusted = setupList("panel_trusted");
 	mBlocked = setupList("panel_blocked");
-	mOwned = LLPanelExperiences::create("owned");
-	LLPanel* pOwned = findChild<LLPanel>("panel_owned");
-	pOwned->addChild(mOwned);
-	mOwned->setShape(pOwned->getRect());
 	return LLPanelRegionInfo::postBuild();
 }
 
@@ -3550,8 +3546,7 @@ public:
 
 
 void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content)
-{
-	
+{	
 	if(handle.isDead())
 		return;
 
@@ -3560,26 +3555,8 @@ void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> h
 	{
 		floater->processResponse(content);
 	}
-
 }
 
-
-void LLPanelRegionExperiences::ownedCallback( LLHandle<LLPanelRegionExperiences> handle, const LLSD& content )
-{
-	if(handle.isDead())
-		return;
-
-	LLPanelRegionExperiences* floater = handle.get();
-	if (floater && content.has("experience_ids"))
-	{
-		const LLSD& ids = content["experience_ids"];
-		floater->getChild<LLButton>("btn_buy")->setEnabled(ids.beginArray() == ids.endArray());
-
-		floater->setOwnedExperiences(content["experience_ids"]);
-	}
-}
-
-
 bool LLPanelRegionExperiences::FilterExisting(const LLSD& experience)
 {
 	LLUUID id = experience[LLExperienceCache::EXPERIENCE_ID].asUUID();
@@ -3612,18 +3589,7 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region)
 	mTrusted->setReadonly(!allow_modify);
 	mTrusted->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1));
 
-	std::string url = region->getCapability("AgentExperiences");
-	mOwned->getParent()->setVisible(!url.empty() && region && region->canManageEstate());
-
-	if(!url.empty())
-	{
-		LLHTTPClient::get(url, new LLRegionExperienceResponder(boost::bind(&LLPanelRegionExperiences::ownedCallback, 
-			getDerivedHandle<LLPanelRegionExperiences>(), _1)));
-
-		getChild<LLButton>("btn_buy")->setCommitCallback(boost::bind(&LLPanelRegionExperiences::sendPurchaseRequest, this));
-	}
-
-	url = region->getCapability("RegionExperiences");
+	std::string url = region->getCapability("RegionExperiences");
 	if (!url.empty())
 	{
 		LLHTTPClient::get(url, new LLRegionExperienceResponder(boost::bind(&LLPanelRegionExperiences::infoCallback, 
@@ -3667,21 +3633,3 @@ void LLPanelRegionExperiences::listChanged()
 {
 	onChangeAnything();
 }
-
-void LLPanelRegionExperiences::setOwnedExperiences( const LLSD& experiences )
-{
-	mOwned->setExperienceList(experiences);
-}
-
-void LLPanelRegionExperiences::sendPurchaseRequest() const
-{
-	LLViewerRegion* region = gAgent.getRegion();
-	std::string url = region->getCapability("AgentExperiences");
-	if(!url.empty())
-	{
-		LLSD content;
-
-		LLHTTPClient::post(url, content, new LLRegionExperienceResponder(boost::bind(&LLPanelRegionExperiences::ownedCallback, 
-			getDerivedHandle<LLPanelRegionExperiences>(), _1)));
-	}
-}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 066a5c5da9..d2bbcbea61 100755
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -466,8 +466,6 @@ public:
 	bool refreshFromRegion(LLViewerRegion* region);
 	void sendPurchaseRequest()const;
 private:
-	static void ownedCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content);
-	void setOwnedExperiences(const LLSD& experiences);
 	void processResponse( const LLSD& content );
 	boost::signals2::connection processResponse( LLPanelExperienceListEditor* panel, boost::signals2::connection& connection, const LLSD& content);
 	void refreshRegionExperiences();
@@ -477,7 +475,6 @@ private:
 	bool FilterExisting(const LLSD& experience );
 
 
-	LLPanelExperiences*		     mOwned;
 	LLPanelExperienceListEditor* mTrusted;
 	boost::signals2::connection  mTrustedConnection;
 	LLPanelExperienceListEditor* mAllowed;
diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp
index 3aca9eb68b..f1d6ea09ed 100644
--- a/indra/newview/llpanelexperiences.cpp
+++ b/indra/newview/llpanelexperiences.cpp
@@ -35,6 +35,7 @@
 
 #include "llpanelexperiences.h"
 #include "llslurl.h"
+#include "lllayoutstack.h"
 
 
 static LLRegisterPanelClassWrapper<LLPanelExperiences> register_experiences_panel("experiences_panel");
@@ -114,7 +115,25 @@ void LLPanelExperiences::addExperience( const LLUUID& id )
     }
 }
 
+void LLPanelExperiences::setButtonAction(const std::string& label, const commit_signal_t::slot_type& cb )
+{
+	if(label.empty())
+	{
+		getChild<LLLayoutPanel>("button_panel")->setVisible(false);
+	}
+	else
+	{
+		getChild<LLLayoutPanel>("button_panel")->setVisible(true);
+		LLButton* child = getChild<LLButton>("btn_action");
+		child->setCommitCallback(cb);
+		child->setLabel(getString(label));
+	}
+}
 
+void LLPanelExperiences::enableButton( bool enable )
+{
+	getChild<LLButton>("btn_action")->setEnabled(enable);
+}
 
 
 LLExperienceItem::LLExperienceItem()
@@ -142,7 +161,6 @@ LLPanelSearchExperiences* LLPanelSearchExperiences::create( const std::string& n
 {
     LLPanelSearchExperiences* panel= new LLPanelSearchExperiences();
     panel->getChild<LLPanel>("results")->addChild(LLPanelExperiences::create(name));
-    ///XXXif(
     return panel;
 }
 
diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h
index bda0f4b587..c525b1f548 100644
--- a/indra/newview/llpanelexperiences.h
+++ b/indra/newview/llpanelexperiences.h
@@ -63,6 +63,8 @@ public:
     void removeExperiences( const LLSD& ids );
     void removeExperience( const LLUUID& id);
     void addExperience( const LLUUID& id);
+	void setButtonAction(const std::string& label, const commit_signal_t::slot_type& cb);
+	void enableButton(bool enable);
 protected:
 
 private:
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index d473b8de00..75a7240c9e 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6985,6 +6985,21 @@ Is this OK?
        text="Block"/>
     </form>
   </notification>
+
+  <notification
+    icon="alertmodal.tga"
+    name="ExperienceAcquireFailed"
+    type="alertmodal">
+Unable to acquire a new experience:
+    [ERROR_MESSAGE]
+    <tag>fail</tag>
+    <usetemplate
+      name="okbutton"
+      yestext="OK"/>
+  </notification>
+  
+  
+  
   <notification
     icon="notify.tga"
     name="TeleportedHomeExperienceRemoved"
diff --git a/indra/newview/skins/default/xui/en/panel_experiences.xml b/indra/newview/skins/default/xui/en/panel_experiences.xml
index af264e73df..82b69fc344 100644
--- a/indra/newview/skins/default/xui/en/panel_experiences.xml
+++ b/indra/newview/skins/default/xui/en/panel_experiences.xml
@@ -12,14 +12,51 @@
   <string
     name="no_experiences"
     value="No experiences."/>
-  <flat_list_view
-    name="experiences_list"
+  <string
+    name="acquire"
+    value="Acquire an Experience" />
+  <layout_stack
     layout="topleft"
     top="0"
-    left="0"
-    width="200"
-    height="300"
-    follows="all"
-    >
-  </flat_list_view>
+    left="4" 
+    right="-1"
+    bottom="-4"
+    orientation="vertical"
+    follows="all">
+    <layout_panel
+      layout="topleft"
+      top="0"
+      left="1"
+      right="-1"
+      height="250"
+      follows="all">
+      <flat_list_view
+        name="experiences_list"
+        layout="topleft"
+        top="0"
+        left="1"
+        right="-1"
+        bottom="-1"
+        follows="all">
+      </flat_list_view>
+    </layout_panel>
+    <layout_panel
+      layout="topleft"
+      top="0"
+      left="1"
+      right="-1"
+      height="24"
+      min_height="24"
+      follows="all"
+      name="button_panel"
+      visible="false">
+      <button
+        layout="topleft"
+        left="2"
+        top="0"
+        follows="top|left"
+        name="btn_action"
+        enabled="true"/>
+    </layout_panel>
+  </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_experiences.xml b/indra/newview/skins/default/xui/en/panel_region_experiences.xml
index ee908348a3..b7602f8fd3 100644
--- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml
@@ -32,39 +32,6 @@
     height="320"
     min_height="140"
     orientation="vertical">
-    <layout_panel
-      layout="topleft"
-      height="100"
-      min_height="100"
-      width="530">
-      <text
-        layout="topleft"
-        follows="left|top"
-        height="18"
-        left="0"
-        top="4"
-        value="Your Experiences"
-        width="460"/>
-      <button
-        layout="topleft"
-        left="464"
-        top="4"
-        follows="top|right"
-        width="64"
-        name="btn_buy"
-        label="Buy"
-        enabled="false"/>
-      <panel
-        layout="topleft"
-        border="true"
-        left="0"
-        top="22"
-        height="74"
-        follows="all"
-        width="460"
-        name="panel_owned">        
-      </panel>      
-    </layout_panel>
     <layout_panel
       height="100"
       min_height="100"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index fed2d764d0..bf925e02f0 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3949,6 +3949,7 @@ Try enclosing path to the editor with double quotes.
   <string name="Contrib_Experiences_Tab">CONTRIBUTOR</string>
   <string name="Admin_Experiences_Tab">ADMIN</string>
   <string name="Recent_Experiences_Tab">RECENT</string>
+  <string name="Owned_Experiences_Tab">OWNED</string>
 
   <!-- Conversation log messages -->
   <string name="logging_calls_disabled_log_empty">
-- 
cgit v1.2.3