diff options
-rw-r--r-- | indra/newview/llfloaterexperienceprofile.cpp | 353 | ||||
-rw-r--r-- | indra/newview/llfloaterexperienceprofile.h | 31 | ||||
-rwxr-xr-x | indra/newview/llviewerregion.cpp | 4 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_experienceprofile.xml | 757 |
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> |