summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordolphin <dolphin@lindenlab.com>2013-09-06 17:09:50 -0700
committerdolphin <dolphin@lindenlab.com>2013-09-06 17:09:50 -0700
commitece98188a8e5c76adddf884886f44b6fc9c5ae21 (patch)
tree26181c5fae8fd22f6ba45f0b6db546d8429a639f
parentdf437553ede576df4e6a1c5e4a2e177f7d8275c2 (diff)
Added profile editing to the experience profile floater.
-rw-r--r--indra/newview/llfloaterexperienceprofile.cpp353
-rw-r--r--indra/newview/llfloaterexperienceprofile.h31
-rwxr-xr-xindra/newview/llviewerregion.cpp4
-rw-r--r--indra/newview/skins/default/xui/en/floater_experienceprofile.xml757
4 files changed, 811 insertions, 334 deletions
diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp
index 895fd5ee4d..292f6f0952 100644
--- a/indra/newview/llfloaterexperienceprofile.cpp
+++ b/indra/newview/llfloaterexperienceprofile.cpp
@@ -27,19 +27,25 @@
#include "llviewerprecompiledheaders.h"
+#include "llagent.h"
#include "llexpandabletextbox.h"
#include "llexperiencecache.h"
#include "llfloaterexperienceprofile.h"
#include "llfloaterreg.h"
+#include "llhttpclient.h"
#include "lllayoutstack.h"
#include "llsdserialize.h"
#include "llslurl.h"
+#include "lltabcontainer.h"
#include "lltextbox.h"
#include "lltexturectrl.h"
#include "lltrans.h"
#include "llviewerregion.h"
-#include "llagent.h"
-#include "llhttpclient.h"
+#include "lllineeditor.h"
+#include "llcombobox.h"
+#include "llcheckboxctrl.h"
+#include "llnotificationsutil.h"
+#include "llappviewer.h"
#define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml"
#define TF_NAME "experience_title"
@@ -48,6 +54,7 @@
#define TF_MRKT "marketplace"
#define TF_MATURITY "ContentRatingText"
#define TF_OWNER "OwnerText"
+#define EDIT "edit_"
#define IMG_LOGO "logo"
@@ -60,6 +67,10 @@
#define BTN_ALLOW "allow_btn"
#define BTN_FORGET "forget_btn"
#define BTN_BLOCK "block_btn"
+#define BTN_CANCEL "cancel_btn"
+#define BTN_SAVE "save_btn"
+#define BTN_ENABLE "enable_btn"
+#define BTN_PRIVATE "private_btn"
LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data)
@@ -69,78 +80,97 @@ LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data)
, mDescriptionPanel(NULL)
, mLocationPanel(NULL)
, mMarketplacePanel(NULL)
+ , mSaveCompleteAction(NOTHING)
+ , mDirty(false)
+ , mForceClose(false)
{
}
+
LLFloaterExperienceProfile::~LLFloaterExperienceProfile()
{
}
-class ExperiencePreferencesResponder : public LLHTTPClient::Responder
+template<class T>
+class HandleResponder : public LLHTTPClient::Responder
{
public:
- ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):mParent(parent)
+ HandleResponder(const LLHandle<T>& parent):mParent(parent){}
+ LLHandle<T> mParent;
+
+ virtual void error(U32 status, const std::string& reason)
{
+ llwarns << "HandleResponder failed with code: " << status<< ", reason: " << reason << llendl;
}
+};
- LLHandle<LLFloaterExperienceProfile> mParent;
+class ExperienceUpdateResponder : public HandleResponder<LLFloaterExperienceProfile>
+{
+public:
+ ExperienceUpdateResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder(parent)
+ {
+ }
virtual void result(const LLSD& content)
{
LLFloaterExperienceProfile* parent=mParent.get();
if(parent)
{
- parent->setPreferences(content);
+ parent->onSaveComplete(content);
}
}
- virtual void error(U32 status, const std::string& reason)
- {
- lldebugs << "ExperiencePreferencesResponder failed with code: " << status<< ", reason: " << reason << llendl;
- }
};
-class IsAdminResponder : public LLHTTPClient::Responder
+
+class ExperiencePreferencesResponder : public HandleResponder<LLFloaterExperienceProfile>
{
public:
- IsAdminResponder(const LLHandle<LLFloaterExperienceProfile>& parent):mParent(parent)
+ ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder(parent)
+ {
+ }
+
+
+ virtual void result(const LLSD& content)
{
+ LLFloaterExperienceProfile* parent=mParent.get();
+ if(parent)
+ {
+ parent->setPreferences(content);
+ }
}
+};
- LLHandle<LLFloaterExperienceProfile> mParent;
+class IsAdminResponder : public HandleResponder<LLFloaterExperienceProfile>
+{
+public:
+ IsAdminResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder(parent)
+ {
+ }
+
virtual void result(const LLSD& content)
{
LLFloaterExperienceProfile* parent = mParent.get();
if(!parent)
return;
-
- LLButton* edit=parent->getChild<LLButton>(BTN_EDIT);
- if(content.has("experience_ids"))
+ bool enabled = true;
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
{
- LLUUID id=parent->getKey().asUUID();
- const LLSD& xp_ids = content["experience_ids"];
- LLSD::array_const_iterator it = xp_ids.beginArray();
- while(it != xp_ids.endArray())
- {
- if(it->asUUID() == id)
- {
- edit->setVisible(TRUE);
- return;
- }
- ++it;
- }
+ enabled = false;
}
- edit->setVisible(FALSE);
-
- //parent->getChild<LLButton>(BTN_EDIT)->setVisible(content["status"].asBoolean());
- }
- virtual void error(U32 status, const std::string& reason)
- {
- lldebugs << "IsAdminResponder failed with code: " << status<< ", reason: " << reason << llendl;
+ else
+ {
+ std::string url=region->getCapability("UpdateExperience");
+ if(url.empty())
+ enabled = false;
+ }
+
+ parent->getChild<LLButton>(BTN_EDIT)->setVisible(enabled && content["status"].asBoolean());
}
};
@@ -160,16 +190,10 @@ BOOL LLFloaterExperienceProfile::postBuild()
LLViewerRegion* region = gAgent.getRegion();
if (region)
{
- // std::string lookup_url=region->getCapability("IsExperienceAdmin");
- // if(!lookup_url.empty())
- // {
- // LLHTTPClient::get(lookup_url+"/"+mExperienceId.asString(), new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
- // }
-
- std::string lookup_url=region->getCapability("GetAdminExperiences");
+ std::string lookup_url=region->getCapability("IsExperienceAdmin");
if(!lookup_url.empty())
{
- LLHTTPClient::get(lookup_url, new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+ LLHTTPClient::get(lookup_url+"?experience_id="+mExperienceId.asString(), new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
}
lookup_url=region->getCapability("ExperiencePreferences");
@@ -180,14 +204,25 @@ BOOL LLFloaterExperienceProfile::postBuild()
}
}
-
-
-
childSetAction(BTN_EDIT, boost::bind(&LLFloaterExperienceProfile::onClickEdit, this));
childSetAction(BTN_ALLOW, boost::bind(&LLFloaterExperienceProfile::onClickPermission, this, "Allow"));
childSetAction(BTN_FORGET, boost::bind(&LLFloaterExperienceProfile::onClickForget, this));
childSetAction(BTN_BLOCK, boost::bind(&LLFloaterExperienceProfile::onClickPermission, this, "Block"));
+ childSetAction(BTN_CANCEL, boost::bind(&LLFloaterExperienceProfile::onClickCancel, this));
+ childSetAction(BTN_SAVE, boost::bind(&LLFloaterExperienceProfile::onClickSave, this));
+
+
+ getChild<LLUICtrl>(EDIT TF_NAME)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ getChild<LLUICtrl>(EDIT TF_DESC)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ getChild<LLUICtrl>(EDIT TF_SLURL)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ getChild<LLUICtrl>(EDIT TF_MATURITY)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ getChild<LLUICtrl>(EDIT TF_MRKT)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ getChild<LLLineEditor>(EDIT TF_NAME)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ childSetAction(EDIT BTN_ENABLE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ childSetAction(EDIT BTN_PRIVATE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this));
+ getChild<LLTextEditor>(EDIT TF_DESC)->setCommitOnFocusLost(TRUE);
+
return TRUE;
}
@@ -202,7 +237,20 @@ void LLFloaterExperienceProfile::experienceCallback(LLHandle<LLFloaterExperience
void LLFloaterExperienceProfile::onClickEdit()
{
+ LLTabContainer* tabs = getChild<LLTabContainer>("tab_container");
+
+ tabs->selectTabByName("edit_panel_experience_info");
+}
+
+
+void LLFloaterExperienceProfile::onClickCancel()
+{
+ changeToView();
+}
+void LLFloaterExperienceProfile::onClickSave()
+{
+ doSave(NOTHING);
}
@@ -238,7 +286,7 @@ void LLFloaterExperienceProfile::onClickForget()
LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
}
-bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child )
+bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child, LLComboBox* combo )
{
LLStyle::Params style;
std::string access;
@@ -246,16 +294,19 @@ bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* chil
{
style.image(LLUI::getUIImage(getString("maturity_icon_general")));
access = LLTrans::getString("SIM_ACCESS_PG");
+ combo->setCurrentByIndex(2);
}
else if(maturity <= SIM_ACCESS_MATURE)
{
style.image(LLUI::getUIImage(getString("maturity_icon_moderate")));
access = LLTrans::getString("SIM_ACCESS_MATURE");
+ combo->setCurrentByIndex(1);
}
else if(maturity <= SIM_ACCESS_ADULT)
{
style.image(LLUI::getUIImage(getString("maturity_icon_adult")));
access = LLTrans::getString("SIM_ACCESS_ADULT");
+ combo->setCurrentByIndex(0);
}
else
{
@@ -286,29 +337,38 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience )
LLTextBox* child = getChild<LLTextBox>(TF_NAME);
child->setText(experience[LLExperienceCache::NAME].asString());
-
+
+ LLLineEditor* linechild = getChild<LLLineEditor>(EDIT TF_NAME);
+ linechild->setText(experience[LLExperienceCache::NAME].asString());
+
std::string value = experience[LLExperienceCache::DESCRIPTION].asString();
LLExpandableTextBox* exchild = getChild<LLExpandableTextBox>(TF_DESC);
exchild->setText(value);
mDescriptionPanel->setVisible(value.length()>0);
+
+ LLTextEditor* edit_child = getChild<LLTextEditor>(EDIT TF_DESC);
+ edit_child->setText(value);
value = experience[LLExperienceCache::SLURL].asString();
child = getChild<LLTextBox>(TF_SLURL);
child->setText(value);
mLocationPanel->setVisible(value.length()>0);
+
+ linechild = getChild<LLLineEditor>(EDIT TF_SLURL);
+ linechild->setText(value);
- child = getChild<LLTextBox>(TF_MATURITY);
- setMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()), child);
+ setMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()), getChild<LLTextBox>(TF_MATURITY), getChild<LLComboBox>(EDIT TF_MATURITY));
child = getChild<LLTextBox>(TF_OWNER);
- LLUUID id = experience[LLExperienceCache::OWNER_ID].asUUID();
- if(experience[LLExperienceCache::GROUP_ID].asUUID() == id)
+ LLUUID id = experience[LLExperienceCache::GROUP_ID].asUUID();
+ if(id.notNull())
{
value = LLSLURL("group", id, "inspect").getSLURLString();
}
else
{
+ id = experience[LLExperienceCache::AGENT_ID].asUUID();
value = LLSLURL("agent", id, "inspect").getSLURLString();
}
child->setText(value);
@@ -324,6 +384,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience )
std::istringstream is(value);
if(LLSDParser::PARSE_FAILURE != parser->parse(is, data, value.size()))
{
+ value="";
if(data.has(TF_MRKT))
{
value=data[TF_MRKT].asString();
@@ -336,21 +397,31 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience )
{
mMarketplacePanel->setVisible(FALSE);
}
+
+ linechild = getChild<LLLineEditor>(EDIT TF_MRKT);
+ linechild->setText(value);
if(data.has(IMG_LOGO))
{
LLTextureCtrl* logo = getChild<LLTextureCtrl>(IMG_LOGO);
logo->setImageAssetID(data[IMG_LOGO].asUUID());
mImagePanel->setVisible(TRUE);
+
+ logo = getChild<LLTextureCtrl>(EDIT IMG_LOGO);
+ logo->setImageAssetID(data[IMG_LOGO].asUUID());
}
}
-
-
-
+ LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE);
+ enable->set( 0 == (mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger() & LLExperienceCache::PROPERTY_DISABLED));
+ enable = getChild<LLCheckBoxCtrl>(EDIT BTN_PRIVATE);
+ enable->set( 0 != (mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger() & LLExperienceCache::PROPERTY_PRIVATE));
-
+ mDirty=false;
+ setCanClose(!mDirty);
+
+ getChild<LLButton>(BTN_SAVE)->setEnabled(mDirty);
}
void LLFloaterExperienceProfile::setPreferences( const LLSD& content )
@@ -402,3 +473,173 @@ void LLFloaterExperienceProfile::setPreferences( const LLSD& content )
button=getChild<LLButton>(BTN_BLOCK);
button->setEnabled(TRUE);
}
+
+void LLFloaterExperienceProfile::onFieldChanged()
+{
+ mDirty=true;
+ setCanClose(!mDirty);
+ getChild<LLButton>(BTN_SAVE)->setEnabled(mDirty);
+}
+
+
+BOOL LLFloaterExperienceProfile::canClose()
+{
+ if(mForceClose || !mDirty)
+ {
+ return TRUE;
+ }
+ else
+ {
+ // Bring up view-modal dialog: Save changes? Yes, No, Cancel
+ LLNotificationsUtil::add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLFloaterExperienceProfile::handleSaveChangesDialog, this, _1, _2, CLOSE));
+ return FALSE;
+ }
+}
+
+bool LLFloaterExperienceProfile::handleSaveChangesDialog( const LLSD& notification, const LLSD& response, int action )
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ switch( option )
+ {
+ case 0: // "Yes"
+ // close after saving
+ doSave( action );
+ break;
+
+ case 1: // "No"
+ if(action != NOTHING)
+ {
+ mForceClose = TRUE;
+ if(action==CLOSE)
+ {
+ closeFloater();
+ }
+ else
+ {
+ changeToView();
+ }
+ }
+ break;
+
+ case 2: // "Cancel"
+ default:
+ // If we were quitting, we didn't really mean it.
+ LLAppViewer::instance()->abortQuit();
+ break;
+ }
+ return false;
+}
+
+void LLFloaterExperienceProfile::doSave( int success_action )
+{
+ mSaveCompleteAction=success_action;
+
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
+ return;
+
+ std::string url=region->getCapability("UpdateExperience");
+ if(url.empty())
+ return;
+
+ LLSD package=mExperienceDetails;
+
+ package[LLExperienceCache::NAME] = getChild<LLLineEditor>(EDIT TF_NAME)->getText();
+ package[LLExperienceCache::DESCRIPTION] = getChild<LLTextEditor>(EDIT TF_DESC)->getText();
+ package[LLExperienceCache::SLURL] = getChild<LLLineEditor>(EDIT TF_SLURL)->getText();
+
+ package[LLExperienceCache::MATURITY] = getChild<LLComboBox>(EDIT TF_MATURITY)->getSelectedValue().asInteger();
+
+ LLSD metadata;
+
+ metadata[TF_MRKT] = getChild<LLLineEditor>(EDIT TF_MRKT)->getText();
+ metadata[IMG_LOGO] = getChild<LLTextureCtrl>(EDIT IMG_LOGO)->getImageAssetID();
+
+ LLPointer<LLSDXMLFormatter> formatter = new LLSDXMLFormatter();
+
+ std::ostringstream os;
+ if(formatter->format(metadata, os))
+ {
+ package[LLExperienceCache::METADATA]=os.str();
+ }
+
+ int properties = package[LLExperienceCache::PROPERTIES].asInteger();
+ LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE);
+ if(enable->get())
+ {
+ properties &= ~LLExperienceCache::PROPERTY_DISABLED;
+ }
+ else
+ {
+ properties |= LLExperienceCache::PROPERTY_DISABLED;
+ }
+
+ enable = getChild<LLCheckBoxCtrl>(EDIT BTN_PRIVATE);
+ if(enable->get())
+ {
+ properties |= LLExperienceCache::PROPERTY_PRIVATE;
+ }
+ else
+ {
+ properties &= ~LLExperienceCache::PROPERTY_PRIVATE;
+ }
+
+ package[LLExperienceCache::PROPERTIES] = properties;
+
+ LLHTTPClient::post(url, package, new ExperienceUpdateResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+}
+
+void LLFloaterExperienceProfile::onSaveComplete( const LLSD& content )
+{
+ LLUUID id = getExperienceId();
+
+ if(!content.has("experience_keys"))
+ {
+ llwarns << "LLFloaterExperienceProfile::onSaveComplete called with bad content" << llendl;
+ return;
+ }
+
+ const LLSD& experiences = content["experience_keys"];
+
+ LLSD::array_const_iterator it = experiences.beginArray();
+ if(it == experiences.endArray())
+ {
+ llwarns << "LLFloaterExperienceProfile::onSaveComplete called with empty content" << llendl;
+ return;
+ }
+
+ if(!it->has(LLExperienceCache::EXPERIENCE_ID) || ((*it)[LLExperienceCache::EXPERIENCE_ID].asUUID() != id))
+ {
+ llwarns << "LLFloaterExperienceProfile::onSaveComplete called with unexpected experience id" << llendl;
+ return;
+ }
+
+ refreshExperience(*it);
+ LLExperienceCache::fetch(id, true);
+
+ if(mSaveCompleteAction==VIEW)
+ {
+ LLTabContainer* tabs = getChild<LLTabContainer>("tab_container");
+ tabs->selectTabByName("panel_experience_info");
+ }
+ else if(mSaveCompleteAction == CLOSE)
+ {
+ closeFloater();
+ }
+}
+
+void LLFloaterExperienceProfile::changeToView()
+{
+ if(mForceClose || !mDirty)
+ {
+ refreshExperience(mExperienceDetails);
+ LLTabContainer* tabs = getChild<LLTabContainer>("tab_container");
+
+ tabs->selectTabByName("panel_experience_info");
+ }
+ else
+ {
+ // Bring up view-modal dialog: Save changes? Yes, No, Cancel
+ LLNotificationsUtil::add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLFloaterExperienceProfile::handleSaveChangesDialog, this, _1, _2, VIEW));
+ }
+}
diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h
index c486ca5f30..c32f274206 100644
--- a/indra/newview/llfloaterexperienceprofile.h
+++ b/indra/newview/llfloaterexperienceprofile.h
@@ -35,28 +35,47 @@
class LLLayoutPanel;
class LLTextBox;
+class LLComboBox;
class LLFloaterExperienceProfile : public LLFloater
{
LOG_CLASS(LLFloaterExperienceProfile);
public:
+ enum
+ {
+ NOTHING,
+ CLOSE,
+ VIEW,
+ };
+
+
LLFloaterExperienceProfile(const LLSD& data);
virtual ~LLFloaterExperienceProfile();
- void setExperienceId( const LLUUID& experience_id );
+ LLUUID getExperienceId() const { return mExperienceId; }
void setPreferences( const LLSD& content );
+ void refreshExperience(const LLSD& experience);
+ void onSaveComplete( const LLSD& content );
+ virtual BOOL canClose();
protected:
void onClickEdit();
void onClickPermission(const char* permission);
void onClickForget();
+ void onClickCancel();
+
+ void changeToView();
+ void onClickSave();
+
+ void onFieldChanged();
static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience);
- void refreshExperience(const LLSD& experience);
BOOL postBuild();
- bool setMaturityString(U8 maturity, LLTextBox* child);
+ bool setMaturityString(U8 maturity, LLTextBox* child, LLComboBox* combo);
+ bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response, int action);
+ void doSave( int success_action );
LLUUID mExperienceId;
LLSD mExperienceDetails;
@@ -64,9 +83,9 @@ protected:
LLLayoutPanel* mDescriptionPanel;
LLLayoutPanel* mLocationPanel;
LLLayoutPanel* mMarketplacePanel;
-
-private:
-
+ int mSaveCompleteAction;
+ bool mDirty;
+ bool mForceClose;
};
#endif // LL_LLFLOATEREXPERIENCEPROFILE_H
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index af993943ce..60e0df90a2 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1601,11 +1601,9 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("GetAdminExperiences");
capabilityNames.append("GetCreatorExperiences");
capabilityNames.append("ExperiencePreferences");
-/*
- DMH - Does not work, needs a modified people api to take the experience UUID
+ capabilityNames.append("UpdateExperience");
capabilityNames.append("IsExperienceAdmin");
capabilityNames.append("IsExperienceContributor");
-*/
capabilityNames.append("GetMesh");
capabilityNames.append("GetMetadata");
capabilityNames.append("GetObjectCost");
diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml
index 58c0ed70ef..f47042ea33 100644
--- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml
+++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml
@@ -3,15 +3,8 @@
<floater
positioning="cascading"
can_close="true"
- enabled="true"
+ enabled="true"
can_resize="true"
- height="580"
- min_height="350"
- min_width="300"
- layout="topleft"
- name="floater_experience_profile"
- single_instance="false"
- reuse_instance="false"
title="EXPERIENCE PROFILE"
width="358">
<floater.string
@@ -26,293 +19,519 @@
name="maturity_icon_adult">
"Parcel_R_Light"
</floater.string>
- <panel
- background_visible="true"
+ <text
+ follows="top|left|right"
+ font="SansSerifHugeBold"
+ height="26"
+ layout="topleft"
+ left_pad="4"
+ name="edit_title"
+ text_color="White"
+ top="2"
+ value="Experience Profile"
+ use_ellipses="true"
+ left="3"
+ right="-3"/>
+ <tab_container
+ hide_tabs="true"
follows="all"
- height="570"
+ height="540"
layout="topleft"
left="5"
min_height="250"
- top="5"
+ top_pad="3"
width="348"
- name="panel_experience_info">
- <text
- follows="top|left|right"
- font="SansSerifHugeBold"
- height="26"
- layout="topleft"
- left_pad="4"
- name="title"
- text_color="White"
- top="2"
- value="Experience Profile"
- use_ellipses="true"
- left="3"
- right="-3"/>
- <scroll_container
- color="DkGray2"
+ name="tab_container">
+ <panel
+ background_visible="true"
follows="all"
- height="532"
+ height="570"
layout="topleft"
- left="9"
- name="xp_scroll"
- opaque="true"
- top_pad="10"
- width="330">
- <panel
- bg_alpha_color="DkGray2"
- follows="top|left"
- height="480"
+ left="0"
+ min_height="250"
+ top="0"
+ width="348"
+ name="panel_experience_info">
+ <scroll_container
+ color="DkGray2"
+ follows="all"
+ height="532"
layout="topleft"
- left="0"
- min_height="480"
- name="scrolling_panel"
- top="0"
- width="315"
- min_width="315">
- <layout_stack
- follows="all"
+ left="9"
+ name="xp_scroll"
+ opaque="true"
+ top_pad="10"
+ width="330">
+ <panel
+ bg_alpha_color="DkGray2"
+ follows="top|left"
height="480"
layout="topleft"
left="0"
+ min_height="480"
+ name="scrolling_panel"
top="0"
- orientation="vertical"
- width="315">
- <layout_panel
+ width="315"
+ min_width="315">
+ <layout_stack
follows="all"
- height="197"
+ height="480"
layout="topleft"
left="0"
top="0"
- auto_resize="false"
- visible="false"
- width="315"
- name="image_panel">
- <texture_picker
- enabled="false"
- fallback_image="default_land_picture.j2c"
- follows="left|top"
+ orientation="vertical"
+ width="315">
+ <layout_panel
+ follows="all"
height="197"
layout="topleft"
- left="10"
- name="logo"
- top="10"
- width="290" />
- </layout_panel>
- <layout_panel
- follows="all"
- height="19"
- layout="topleft"
- left="0"
- top="5"
- width="313"
- auto_resize="false"
- >
- <text
- follows="left|top|right"
- font="SansSerifLarge"
- height="14"
- layout="topleft"
- left="10"
- name="experience_title"
- text_color="white"
+ left="0"
top="0"
- use_ellipses="true"
- value="Kyle's Superhero RPG"
- width="288"/>
- </layout_panel>
- <layout_panel
- follows=""
- height="50"
- layout="topleft"
- left="0"
- top="0"
- auto_resize="false"
- width="315"
- visible="false"
- name="description panel">
- <expandable_text
- follows="left|top|right"
- font="SansSerif"
- height="50"
+ auto_resize="false"
+ visible="false"
+ width="315"
+ name="image_panel">
+ <texture_picker
+ enabled="false"
+ fallback_image="default_land_picture.j2c"
+ follows="left|top"
+ height="197"
+ layout="topleft"
+ left="10"
+ name="logo"
+ top="10"
+ width="290" />
+ </layout_panel>
+ <layout_panel
+ follows="all"
+ height="19"
layout="topleft"
- left="7"
- name="experience_description"
- top="0"
- value="It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. "
- width="293"/>
- </layout_panel>
- <layout_panel
- follows="all"
- height="46"
- layout="topleft"
- left="0"
- top="5"
- width="313"
- visible="false"
- auto_resize="false"
- name="location panel"
+ left="0"
+ top="5"
+ width="313"
+ auto_resize="false"
>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
+ <text
+ follows="left|top|right"
+ font="SansSerifLarge"
+ height="14"
+ layout="topleft"
+ left="10"
+ name="experience_title"
+ text_color="white"
+ top="0"
+ use_ellipses="true"
+ value="Kyle's Superhero RPG"
+ width="288"/>
+ </layout_panel>
+ <layout_panel
+ follows=""
+ height="50"
layout="topleft"
- left="10"
- name="Location"
- width="290">
- Location:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="18"
+ left="0"
+ top="0"
+ auto_resize="false"
+ width="315"
+ visible="false"
+ name="description panel">
+ <expandable_text
+ follows="left|top|right"
+ font="SansSerif"
+ height="50"
+ layout="topleft"
+ left="7"
+ name="experience_description"
+ top="0"
+ value="It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. It is mainly just a lot of men in tights on patrol for evil-doers. "
+ width="293"/>
+ </layout_panel>
+ <layout_panel
+ follows="all"
+ height="46"
layout="topleft"
- left="10"
- valign="center"
- name="LocationTextText"
- width="288">
- someplace
- </text>
- </layout_panel>
- <layout_panel
- follows="all"
- height="53"
- layout="topleft"
- left="0"
- top="5"
- width="313"
- visible="false"
- auto_resize="false"
- name="marketplace panel"
-
+ left="0"
+ top="5"
+ width="313"
+ visible="false"
+ auto_resize="false"
+ name="location panel"
>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
- layout="topleft"
- left="10"
- width="290">
- Marketplace store:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="18"
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="Location"
+ width="290">
+ Location:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="18"
+ layout="topleft"
+ left="10"
+ valign="center"
+ name="LocationTextText"
+ width="288">
+ someplace
+ </text>
+ </layout_panel>
+ <layout_panel
+ follows="all"
+ height="53"
layout="topleft"
- left="10"
- valign="center"
- name="marketplace"
- width="288">
- someplace
- </text>
- </layout_panel>
- <layout_panel
- follows="left|top|right"
- height="92"
- left="0"
- top="0"
- auto_resize="false"
- width="315"
+ left="0"
+ top="5"
+ width="313"
+ visible="false"
+ auto_resize="false"
+ name="marketplace panel"
+
>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
- layout="topleft"
- left="10"
- name="ContentRating"
- width="100">
- Rating:
- </text>
- <text
- type="string"
- length="1"
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ width="290">
+ Marketplace store:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="18"
+ layout="topleft"
+ left="10"
+ valign="center"
+ name="marketplace"
+ width="288">
+ someplace
+ </text>
+ </layout_panel>
+ <layout_panel
follows="left|top|right"
- height="18"
- layout="topleft"
- left_pad="2"
- valign="center"
- name="ContentRatingText"
- top_delta="-3"
- width="188">
- Adult
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
- layout="topleft"
- left="10"
- name="Owner"
- width="100">
- Owner:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="18"
- layout="topleft"
- left_pad="2"
- valign="center"
- name="OwnerText"
- top_delta="-2"
- width="188">
- Kyle
- </text>
- <button
- follows="bottom|left"
- height="23"
- label="Edit"
- layout="topleft"
- name="edit_btn"
- top_pad="3"
- width="120"
- left="73"
- visible="true"/>
- <button
- follows="bottom|left"
- height="23"
- label="Allow"
- layout="topleft"
- name="allow_btn"
- width="80"
- top_pad="3"
- left="10"
- enabled="false"/>
- <button
- follows="bottom|left"
- height="23"
- label="Forget"
- layout="topleft"
- name="forget_btn"
- width="80"
- top_pad="-23"
- left_pad="3"
- enabled="false"/>
- <button
- follows="bottom|left"
- height="23"
- label="Block"
- layout="topleft"
- name="block_btn"
- width="80"
- top_pad="-23"
- left_pad="3"
- enabled="false"/>
-
- </layout_panel>
- </layout_stack>
- </panel>
- </scroll_container>
+ height="92"
+ left="0"
+ top="0"
+ auto_resize="false"
+ width="315"
+ >
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="ContentRating"
+ width="100">
+ Rating:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="18"
+ layout="topleft"
+ left_pad="2"
+ valign="center"
+ name="ContentRatingText"
+ top_delta="-3"
+ width="188">
+ Adult
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="Owner"
+ width="100">
+ Owner:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="18"
+ layout="topleft"
+ left_pad="2"
+ valign="center"
+ name="OwnerText"
+ top_delta="-2"
+ width="188">
+ Kyle
+ </text>
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Edit"
+ layout="topleft"
+ name="edit_btn"
+ top_pad="3"
+ width="120"
+ left="73"
+ visible="false"/>
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Allow"
+ layout="topleft"
+ name="allow_btn"
+ width="80"
+ top_pad="3"
+ left="10"
+ enabled="false"/>
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Forget"
+ layout="topleft"
+ name="forget_btn"
+ width="80"
+ top_pad="-23"
+ left_pad="3"
+ enabled="false"/>
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Block"
+ layout="topleft"
+ name="block_btn"
+ width="80"
+ top_pad="-23"
+ left_pad="3"
+ enabled="false"/>
- </panel>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </scroll_container>
+ </panel>
+ <panel
+ background_visible="true"
+ follows="all"
+ layout="topleft"
+ height="540"
+ left="0"
+ top="0"
+ width="348"
+ name="edit_panel_experience_info">
+ <scroll_container
+ color="DkGray2"
+ follows="all"
+ height="525"
+ layout="topleft"
+ left="9"
+ name="edit_xp_scroll"
+ opaque="true"
+ top_pad="10"
+ width="330">
+ <panel
+ bg_alpha_color="DkGray2"
+ follows="top|left|right"
+ height="525"
+ layout="topleft"
+ left="0"
+ name="edit_scrolling_panel"
+ top="0"
+ width="310">
+ <texture_picker
+ enabled="true"
+ fallback_image="default_land_picture.j2c"
+ follows="left|top"
+ height="197"
+ layout="topleft"
+ left="10"
+ name="edit_logo"
+ top="10"
+ width="290" />
+ <text
+ follows="left|top|right"
+ height="14"
+ layout="topleft"
+ left="10"
+ name="edit_experience_title_label"
+ use_ellipses="true"
+ value="Name:"
+ right="-10"/>
+ <line_editor
+ follows="left|top|right"
+ height="19"
+ layout="topleft"
+ left="10"
+ name="edit_experience_title"
+ max_length_bytes="63"
+ text_color="black"
+ right="-10"/>
+ <text
+ follows="left|top|right"
+ height="14"
+ layout="topleft"
+ left="10"
+ top_pad="10"
+ name="edit_experience_desc_label"
+ use_ellipses="true"
+ value="Description:"
+ right="-10"/>
+ <text_editor
+ follows="left|top|right"
+ height="57"
+ layout="topleft"
+ left="11"
+ name="edit_experience_description"
+ max_length="2048"
+ text_color="black"
+ right="-11"
+ word_wrap="true"/>
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="14"
+ layout="topleft"
+ left="10"
+ top_pad="10"
+ name="edit_Location"
+ right="-10">
+ Location:
+ </text>
+ <line_editor
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="19"
+ layout="topleft"
+ left="10"
+ max_length_bytes="255"
+ valign="center"
+ name="edit_LocationTextText"
+ right="-10"/>
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="14"
+ top_pad="10"
+ layout="topleft"
+ left="10"
+ right="-10">
+ Marketplace store:
+ </text>
+ <line_editor
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="19"
+ layout="topleft"
+ left="10"
+ max_length_bytes="255"
+ valign="center"
+ name="edit_marketplace"
+ right="-10"/>
+ <text
+ top_pad="10"
+ type="string"
+ length="1"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="edit_ContentRating"
+ right="-10">
+ Rating:
+ </text>
+ <icons_combo_box
+ follows="right|top"
+ height="20"
+ label="Moderate"
+ layout="topleft"
+ right="-10"
+ top_pad="-17"
+ name="edit_ContentRatingText"
+ width="105">
+ <icons_combo_box.drop_down_button
+ image_overlay="Parcel_M_Light"
+ image_overlay_alignment="left"
+ imgoverlay_label_space="3"
+ pad_left="3"/>
+ <icons_combo_box.item
+ label="Adult"
+ name="Adult"
+ value="42">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_R_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ <icons_combo_box.item
+ label="Moderate"
+ name="Mature"
+ value="21">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_M_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ <icons_combo_box.item
+ label="General"
+ name="PG"
+ value="13">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_PG_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ </icons_combo_box>
+ <check_box width="140"
+ height="21"
+ left="10"
+ layout="topleft"
+ follows="top|left"
+ label="Enable Experience"
+ name="edit_enable_btn"/>
+ <check_box width="130"
+ height="21"
+ top_pad="-21"
+ right="-10"
+ layout="topleft"
+ follows="top|left"
+ label="Hide In Search"
+ name="edit_private_btn"/>
+ <button
+ follows="top|left"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ name="cancel_btn"
+ width="120"
+ top_pad="15"
+ left="10"
+ visible="true"/>
+ <button
+ follows="top|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ name="save_btn"
+ top_pad="-23"
+ width="120"
+ right="-10"
+ visible="true"/>
+ </panel>
+ </scroll_container>
+ </panel>
+ </tab_container>
</floater>