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: 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 +- .../skins/default/xui/en/floater_experiences.xml | 29 +++ indra/newview/skins/default/xui/en/menu_viewer.xml | 8 + .../skins/default/xui/en/panel_experience_info.xml | 79 +++++++ .../skins/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 (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index ccf4ce8d1f..039f243323 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 0000000000..b862b41bba --- /dev/null +++ b/indra/newview/llfloaterexperiences.cpp @@ -0,0 +1,14 @@ +#include "llviewerprecompiledheaders.h" + +#include "llpanelexperiences.h" +#include "llfloaterexperiences.h" + +LLFloaterExperiences::LLFloaterExperiences(const LLSD& data) + :LLFloater(data) +{ +} + +BOOL LLFloaterExperiences::postBuild() +{ + return TRUE; +} diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h new file mode 100644 index 0000000000..1e5f216f8d --- /dev/null +++ b/indra/newview/llfloaterexperiences.h @@ -0,0 +1,45 @@ +/** + * @file llfloaterexperiences.h + * @brief LLFloaterExperiences class definition + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATEREXPERIENCES_H +#define LL_LLFLOATEREXPERIENCES_H + +#include "llfloater.h" + +class LLFloaterExperiences : + public LLFloater +{ +public: + LLFloaterExperiences(const LLSD& data); + +protected: + /*virtual*/ BOOL postBuild(); + +private: + +}; + +#endif //LL_LLFLOATEREXPERIENCES_H diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp new file mode 100644 index 0000000000..f174171a97 --- /dev/null +++ b/indra/newview/llpanelexperiences.cpp @@ -0,0 +1,251 @@ +#include "llviewerprecompiledheaders.h" + + +#include "llpanelprofile.h" +#include "lluictrlfactory.h" + +#include "llpanelexperiences.h" + + +static LLRegisterPanelClassWrapper<LLPanelExperiences> register_experiences_panel("experiences_panel"); + + +LLPanelExperiences::LLPanelExperiences( ) + : mExperiencesList(NULL), + mExperiencesAccTab(NULL), + mProfilePanel(NULL), + mPanelExperienceInfo(NULL), + mNoExperiences(false) +{ + +} + +void* LLPanelExperiences::create( void* data ) +{ + return new LLPanelExperiences(); +} + + +BOOL LLPanelExperiences::postBuild( void ) +{ + mExperiencesList = getChild<LLFlatListView>("experiences_list"); + if(hasString("no_experiences")) + { + mExperiencesList->setNoItemsCommentText(getString("no_experiences")); + } + + LLExperienceItem* item = new LLExperienceItem(); + item->setExperienceName("experience 1"); + item->setExperienceDescription("hey, I\'m an experience!"); + mExperiencesList->addItem(item); + + item = new LLExperienceItem(); + item->setExperienceName("experience 2"); + item->setExperienceDescription("hey, I\'m another experience!"); + mExperiencesList->addItem(item); + + mExperiencesAccTab = getChild<LLAccordionCtrlTab>("tab_experiences"); + mExperiencesAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelExperiences::onAccordionStateChanged, this, mExperiencesAccTab)); + mExperiencesAccTab->setDisplayChildren(true); + + return TRUE; +} + +void LLPanelExperiences::onOpen( const LLSD& key ) +{ + LLPanel::onOpen(key); +} + +void LLPanelExperiences::onClosePanel() +{ + if (mPanelExperienceInfo) + { + onPanelExperienceClose(mPanelExperienceInfo); + } +} + +void LLPanelExperiences::updateData() +{ + if(isDirty()) + { + mNoExperiences = false; + + /* + mNoItemsLabel->setValue(LLTrans::getString("PicksClassifiedsLoadingText")); + mNoItemsLabel->setVisible(TRUE); + + mPicksList->clear(); + LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId()); + + mClassifiedsList->clear(); + LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId()); + */ + } +} + +LLExperienceItem* LLPanelExperiences::getSelectedExperienceItem() +{ + LLPanel* selected_item = mExperiencesList->getSelectedItem(); + if (!selected_item) return NULL; + + return dynamic_cast<LLExperienceItem*>(selected_item); +} + +void LLPanelExperiences::setProfilePanel( LLPanelProfile* profile_panel ) +{ + mProfilePanel = profile_panel; +} + +void LLPanelExperiences::onListCommit( const LLFlatListView* f_list ) +{ + if(f_list == mExperiencesList) + { + mExperiencesList->resetSelection(true); + } + else + { + llwarns << "Unknown list" << llendl; + } + + //updateButtons(); +} + +void LLPanelExperiences::onAccordionStateChanged( const LLAccordionCtrlTab* acc_tab ) +{ + if(!mExperiencesAccTab->getDisplayChildren()) + { + mExperiencesList->resetSelection(true); + } + +} + +void LLPanelExperiences::openExperienceInfo() +{ + LLSD selected_value = mExperiencesList->getSelectedValue(); + if(selected_value.isUndefined()) + { + return; + } + + LLExperienceItem* experience = (LLExperienceItem*)mExperiencesList->getSelectedItem(); + + createExperienceInfoPanel(); + + LLSD params; + params["experience_name"] = experience->getExperienceName(); + params["experience_desc"] = experience->getExperienceDescription(); + + getProfilePanel()->openPanel(mPanelExperienceInfo, params); + +} + + +void LLPanelExperiences::createExperienceInfoPanel() +{ + if(!mPanelExperienceInfo) + { + mPanelExperienceInfo = LLPanelExperienceInfo::create(); + mPanelExperienceInfo->setExitCallback(boost::bind(&LLPanelExperiences::onPanelExperienceClose, this, mPanelExperienceInfo)); + mPanelExperienceInfo->setVisible(FALSE); + } +} + +void LLPanelExperiences::onPanelExperienceClose( LLPanel* panel ) +{ + getProfilePanel()->closePanel(panel); +} + +LLPanelProfile* LLPanelExperiences::getProfilePanel() +{ + llassert_always(NULL != mProfilePanel); + + return mProfilePanel; +} + + + + + + + + + + + +LLExperienceItem::LLExperienceItem() +{ + buildFromFile("panel_experience_info.xml"); +} + +void LLExperienceItem::init( LLExperienceData* experience_data ) +{ + +} + +void LLExperienceItem::setExperienceDescription( const std::string& val ) +{ + mExperienceDescription = val; + getChild<LLUICtrl>("experience_desc")->setValue(val); +} + +void LLExperienceItem::setExperienceName( const std::string& val ) +{ + mExperienceName = val; + getChild<LLUICtrl>("experience_name")->setValue(val); +} + +BOOL LLExperienceItem::postBuild() +{ + return TRUE; +} + +void LLExperienceItem::update() +{ + +} + +void LLExperienceItem::processProperties( void* data, EAvatarProcessorType type ) +{ + +} + +LLExperienceItem::~LLExperienceItem() +{ + +} + + +void LLPanelExperienceInfo::setExperienceName( const std::string& name ) +{ + getChild<LLUICtrl>("experience_name")->setValue(name); +} + +void LLPanelExperienceInfo::setExperienceDesc( const std::string& desc ) +{ + getChild<LLUICtrl>("experience_desc")->setValue(desc); +} + +void LLPanelExperienceInfo::onOpen( const LLSD& key ) +{ + setExperienceName(key["experience_name"]); + setExperienceDesc(key["experience_desc"]); + + /* + LLAvatarPropertiesProcessor::getInstance()->addObserver( + getAvatarId(), this); + LLAvatarPropertiesProcessor::getInstance()->sendPickInfoRequest( + getAvatarId(), getPickId()); + */ +} + +LLPanelExperienceInfo* LLPanelExperienceInfo::create() +{ + LLPanelExperienceInfo* panel = new LLPanelExperienceInfo(); + panel->buildFromFile("panel_experience_info.xml"); + return panel; +} + +void LLPanelExperienceInfo::setExitCallback( const commit_callback_t& cb ) +{ + getChild<LLButton>("back_btn")->setClickedCallback(cb); +} diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h new file mode 100644 index 0000000000..2a0f101f8a --- /dev/null +++ b/indra/newview/llpanelexperiences.h @@ -0,0 +1,124 @@ +/** + * @file llpanelpicks.h + * @brief LLPanelPicks and related class definitions + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLPANELEXPERIENCES_H +#define LL_LLPANELEXPERIENCES_H + +#include "llaccordionctrltab.h" +#include "llflatlistview.h" +#include "llpanelavatar.h" + +class LLExperienceItem; +class LLPanelProfile; + +class LLPanelExperienceInfo + : public LLPanel +{ +public: + static LLPanelExperienceInfo* create(); + + void onOpen(const LLSD& key); + void setExperienceName( const std::string& name ); + void setExperienceDesc( const std::string& desc ); + + + virtual void setExitCallback(const commit_callback_t& cb); +}; + + +class LLPanelExperiences + : public LLPanel /*LLPanelProfileTab*/ +{ +public: + LLPanelExperiences(); + + static void* create(void* data); + + /*virtual*/ BOOL postBuild(void); + + /*virtual*/ void onOpen(const LLSD& key); + + /*virtual*/ void onClosePanel(); + + void updateData(); + + LLExperienceItem* getSelectedExperienceItem(); + + void setProfilePanel(LLPanelProfile* profile_panel); + +protected: + + void onListCommit(const LLFlatListView* f_list); + void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab); + + + void openExperienceInfo(); + void createExperienceInfoPanel(); + void onPanelExperienceClose(LLPanel* panel); + LLPanelProfile* getProfilePanel(); +private: + LLFlatListView* mExperiencesList; + LLAccordionCtrlTab* mExperiencesAccTab; + LLPanelProfile* mProfilePanel; + LLPanelExperienceInfo* mPanelExperienceInfo; + bool mNoExperiences; +}; + +struct LLExperienceData +{ + std::string name; + std::string desc; +}; + +class LLExperienceItem + : public LLPanel + //, public LLAvatarPropertiesObserver +{ +public: + LLExperienceItem(); + ~LLExperienceItem(); + + void init(LLExperienceData* experience_data); + /*virtual*/ BOOL postBuild(); + void update(); + + /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); + + void setCreatorID(const LLUUID& val) { mCreatorID = val; } + void setExperienceDescription(const std::string& val); + void setExperienceName(const std::string& val); + + const LLUUID& getCreatorID() const { return mCreatorID; } + const std::string& getExperienceName() const { return mExperienceName; } + const std::string& getExperienceDescription() const { return mExperienceDescription; } + +protected: + LLUUID mCreatorID; + + std::string mExperienceName; + std::string mExperienceDescription; +}; +#endif // LL_LLPANELEXPERIENCES_H diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 1f7cf0cdd4..5582d256f8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -56,6 +56,7 @@ #include "llfloatereditsky.h" #include "llfloatereditwater.h" #include "llfloaterenvironmentsettings.h" +#include "llfloaterexperiences.h" #include "llfloaterevent.h" #include "llfloaterdestinations.h" #include "llfloaterfonttest.h" @@ -204,7 +205,8 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("env_edit_day_cycle", "floater_edit_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditDayCycle>); LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>); - + LLFloaterReg::add("experiences", "floater_experiences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperiences>); + LLFloaterReg::add("font_test", "floater_font_test.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFontTest>); LLFloaterReg::add("gestures", "floater_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGesture>); diff --git a/indra/newview/skins/default/xui/en/floater_experiences.xml b/indra/newview/skins/default/xui/en/floater_experiences.xml new file mode 100644 index 0000000000..57541c8b35 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_experiences.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> + +<floater + positioning="cascading" + can_close="true" + can_resize="true" + height="400" + help_topic="sidebar_experiences" + min_height="300" + min_width="300" + layout="topleft" + name="floater_experiences" + save_rect="false" + single_instance="true" + reuse_instance="false" + title="EXPERIENCES" + width="400"> + <panel + top="3" + left="3" + layout="topleft" + right="-3" + follows="all" + height="300" + class="experiences_panel" + filename="panel_experiences.xml" + > + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 1aa55acf2d..36b1cea701 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -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 0000000000..47f366d857 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experience_info.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + fit_parent="true" + follows="all" + height="120" + label="Experiences" + layout="topleft" + left="0" + name="panel_experience_info" + top_pad="0"> + <text + follows="top|left|right" + font="SansSerifHugeBold" + height="26" + layout="topleft" + left_pad="4" + name="title" + text_color="White" + top="2" + value="Experience Info" + use_ellipses="true" + right="-3"/> + <text + follows="top|left|right" + font="SansSerifBig" + height="20" + layout="topleft" + left_pad="4" + name="name_label" + text_color="White" + left="8" + top_delta="28" + value="Name" + use_ellipses="true" + right="-3" /> + <text + follows="top|left|right" + font="SansSerif" + height="20" + layout="topleft" + left_pad="8" + name="experience_name" + text_color="White" + left="16" + top_delta="22" + value="[loading...]" + use_ellipses="true" + right="-3" /> + <text + follows="top|left|right" + font="SansSerifBig" + height="20" + left="8" + layout="topleft" + left_pad="4" + name="desc_label" + text_color="White" + top_delta="22" + value="Description" + use_ellipses="true" + right="-3" /> + <expandable_text + follows="top|left|right" + font="SansSerif" + height="20" + layout="topleft" + left_pad="8" + name="experience_desc" + text_color="White" + left="16" + top_delta="22" + value="[loading...]" + use_ellipses="true" + right="-3" + word_wrap="true" /> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_experiences.xml b/indra/newview/skins/default/xui/en/panel_experiences.xml new file mode 100644 index 0000000000..47a3005aae --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experiences.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> + +<panel + layout="topleft" + top="3" + left="3" + right="-3" + bottom="-3" + label="Experiences" + follows="all"> + <string + name="no_experiences" + value="No experiences."/> + + <accordion + fit_parent="true" + layout="topleft" + top="0" + left="3" + right="-3" + bottom="-3" + single_expansion="true" + follows="all"> + <accordion_tab + name="tab_experiences" + layout="topleft" + top="0" + left="0" + right="-3" + title="Experiences" + follows="all"> + <flat_list_view + name="experiences_list" + layout="topleft" + top="0" + left="0" + follows="all"/> + </accordion_tab> + </accordion> +</panel> -- cgit v1.2.3 From 2cde962d5db94baf860eb94fecaf9671548b2c53 Mon Sep 17 00:00:00 2001 From: "dolphin@dolphin-THINK.lindenlab.com" <dolphin@dolphin-THINK.lindenlab.com> Date: Mon, 19 Nov 2012 08:06:42 -0800 Subject: Test populating the experience keys UI with avatar name data. --- indra/llmessage/llexperiencecache.cpp | 138 +++++++++++++++++++++++++++++++--- indra/llmessage/llexperiencecache.h | 21 +++++- indra/newview/llappviewer.cpp | 50 +++++++++++- indra/newview/llappviewer.h | 5 ++ indra/newview/llpanelexperiences.cpp | 23 +++--- indra/newview/llpanelexperiences.h | 6 +- indra/newview/llstartup.cpp | 12 +++ indra/newview/llstartup.h | 1 + indra/newview/llvoavatar.cpp | 4 + 9 files changed, 231 insertions(+), 29 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 8667ae8981..0d8f76c7e2 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -25,24 +25,20 @@ */ #include "linden_common.h" +#include "llavatarname.h" #include "llframetimer.h" #include "llhttpclient.h" +#include "llsdserialize.h" #include <set> #include <map> #include "llexperiencecache.h" -class LLExperienceData -{ -public: - std::string mDisplayName; -}; - namespace LLExperienceCache { - bool sRunning = true; + bool sRunning = false; std::string sLookupURL; typedef std::set<LLUUID> ask_queue_t; @@ -52,19 +48,122 @@ namespace LLExperienceCache pending_queue_t sPendingQueue; - typedef std::map<LLUUID, LLExperienceData> cache_t; cache_t sCache; LLFrameTimer sRequestTimer; + + void processExperience( const LLUUID& agent_id, const LLExperienceData& experience, bool add_to_cache ) + { + if(add_to_cache) + { + sCache[agent_id]=experience; + + sPendingQueue.erase(agent_id); + + + //signal + } + } + + void initClass( bool running ) + { + sRunning = false; + } + + const cache_t& getCached() + { + return sCache; + } + + + + void importFile(std::istream& istr) + { + LLSD data; + S32 parse_count = LLSDSerialize::fromXMLDocument(data, istr); + if(parse_count < 1) return; + + LLSD agents = data["agents"]; + + LLUUID agent_id; + LLExperienceData experience; + LLSD::map_const_iterator it = agents.beginMap(); + for(; it != agents.endMap() ; ++it) + { + agent_id.set(it->first); + experience.fromLLSD( it->second); + sCache[agent_id]=experience; + } + + LL_INFOS("ExperienceCache") << "loaded " << sCache.size() << LL_ENDL; + } + + void exportFile(std::ostream& ostr) + { + LLSD agents; + + cache_t::const_iterator it =sCache.begin(); + for( ; it != sCache.end() ; ++it) + { + agents[it->first.asString()] = it->second.asLLSD(); + } + + LLSD data; + data["agents"] = agents; + + LLSDSerialize::toPrettyXML(data, ostr); + } + class LLExperienceResponder : public LLHTTPClient::Responder { public: - LLExperienceResponder(std::vector<LLUUID> agent_ids) + LLExperienceResponder(const std::vector<LLUUID>& agent_ids) + :mAgentIds(agent_ids) { } + + virtual void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + mHeaders = content; + } + + virtual void result(const LLSD& content) + { + LLSD agents = content["agents"]; + LLSD::array_const_iterator it = agents.beginArray(); + for( /**/ ; it != agents.endArray(); ++it) + { + const LLSD& row = *it; + LLUUID agent_id = row["id"].asUUID(); + + LLExperienceData experience; + + if(experience.fromLLSD(row)) + { + LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Received result for " << agent_id + << "display '" << experience.mDisplayName << "'" << LL_ENDL ; + + processExperience(agent_id, experience, true); + } + } + + LLSD unresolved_agents = content["bad_ids"]; + S32 num_unresolved = unresolved_agents.size(); + if(num_unresolved > 0) + { + LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Ignoreing " << num_unresolved + << " bad ids" << LL_ENDL ; + } + + LL_DEBUGS("ExperienceCache") << __FUNCTION__ << sCache.size() << " cached experiences" << LL_ENDL; + } + + private: + std::vector<LLUUID> mAgentIds; + LLSD mHeaders; }; void requestExperiences() @@ -171,7 +270,7 @@ namespace LLExperienceCache bool get( const LLUUID& agent_id, LLExperienceData* experience_data ) { - if(!sRunning) + if(sRunning) { cache_t::const_iterator it = sCache.find(agent_id); @@ -193,3 +292,22 @@ namespace LLExperienceCache } + +bool LLExperienceData::fromLLSD( const LLSD& sd ) +{ + mDisplayName = sd["display_name"].asString(); + mDescription = sd["username"].asString(); + + if(mDisplayName.empty() || mDescription.empty()) return false; + + mDescription += " % Hey, this is a description!"; + return true; +} + +LLSD LLExperienceData::asLLSD() const +{ + LLSD sd; + sd["display_name"] = mDisplayName; + sd["username"] = mDescription.substr(0, llmin(mDescription.size(),mDescription.find(" %"))); + return sd; +} diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 6be51b039e..799cdea13a 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -32,7 +32,20 @@ #include <string> class LLUUID; -class LLExperienceData; + + +class LLExperienceData +{ +public: + bool fromLLSD(const LLSD& sd); + LLSD asLLSD() const; + + + std::string mDisplayName; + std::string mDescription; +}; + + namespace LLExperienceCache { @@ -41,12 +54,18 @@ namespace LLExperienceCache void idle(); + void exportFile(std::ostream& ostr); + void importFile(std::istream& istr); + void initClass(bool running); void erase(const LLUUID& agent_id); void fetch(const LLUUID& agent_id); void insert(const LLUUID& agent_id, const LLExperienceData& experience_data); bool get(const LLUUID& agent_id, LLExperienceData* experience_data); + typedef std::map<LLUUID, LLExperienceData> cache_t; + + const cache_t& getCached(); }; #endif // LL_LLEXPERIENCECACHE_H diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index a674ab0cf8..b80202bd45 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -100,6 +100,7 @@ // Linden library includes #include "llavatarnamecache.h" #include "lldiriterator.h" +#include "llexperiencecache.h" #include "llimagej2c.h" #include "llmemory.h" #include "llprimitive.h" @@ -4145,7 +4146,7 @@ void LLAppViewer::loadNameCache() } void LLAppViewer::saveNameCache() - { +{ // display names cache std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml"); @@ -4153,7 +4154,7 @@ void LLAppViewer::saveNameCache() if(name_cache_stream.is_open()) { LLAvatarNameCache::exportFile(name_cache_stream); -} + } if (!gCacheName) return; @@ -4166,6 +4167,32 @@ void LLAppViewer::saveNameCache() } } + +void LLAppViewer::saveExperienceCache() +{ + std::string filename = + gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "experience_cache.xml"); + LL_INFOS("ExperienceCache") << "Saving " << filename << LL_ENDL; + llofstream cache_stream(filename); + if(cache_stream.is_open()) + { + LLExperienceCache::exportFile(cache_stream); + } +} + +void LLAppViewer::loadExperienceCache() +{ + std::string filename = + gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "experience_cache.xml"); + LL_INFOS("ExperienceCache") << "Loading " << filename << LL_ENDL; + llifstream cache_stream(filename); + if(cache_stream.is_open()) + { + LLExperienceCache::importFile(cache_stream); + } +} + + /*! @brief This class is an LLFrameTimer that can be created with an elapsed time that starts counting up from the given value rather than 0.0. @@ -4368,7 +4395,7 @@ void LLAppViewer::idle() // floating throughout the various object lists. // idleNameCache(); - + idleExperienceCache(); idleNetwork(); @@ -4782,6 +4809,22 @@ void LLAppViewer::idleNameCache() LLAvatarNameCache::idle(); } +void LLAppViewer::idleExperienceCache() +{ + LLViewerRegion* region = gAgent.getRegion(); + if (!region) return; + + std::string lookup_url=region->getCapability("GetDisplayNames"); // use GetDisplayNames for testing round trip + if(!lookup_url.empty() && lookup_url.back() != '/') + { + lookup_url += '/'; + } + + LLExperienceCache::setLookupURL(lookup_url); + + LLExperienceCache::idle(); +} + // // Handle messages, and all message related stuff // @@ -4945,6 +4988,7 @@ void LLAppViewer::disconnectViewer() } saveNameCache(); + saveExperienceCache(); // close inventory interface, close all windows LLFloaterInventory::cleanup(); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 7a474f9122..4bf6bec0e8 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -114,6 +114,10 @@ public: void loadNameCache(); void saveNameCache(); + void loadExperienceCache(); + void saveExperienceCache(); + + void removeMarkerFile(bool leave_logout_marker = false); // LLAppViewer testing helpers. @@ -218,6 +222,7 @@ private: void idle(); void idleShutdown(); // update avatar SLID and display name caches + void idleExperienceCache(); void idleNameCache(); void idleNetwork(); diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index f174171a97..bc9d3cc0ee 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -3,6 +3,7 @@ #include "llpanelprofile.h" #include "lluictrlfactory.h" +#include "llexperiencecache.h" #include "llpanelexperiences.h" @@ -34,15 +35,16 @@ BOOL LLPanelExperiences::postBuild( void ) 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); + const LLExperienceCache::cache_t& experiences = LLExperienceCache::getCached(); + + LLExperienceCache::cache_t::const_iterator it = experiences.begin(); + for( ; it != experiences.end() && mExperiencesList->getChildCount() < 10 ; ++it) + { + LLExperienceItem* item = new LLExperienceItem(); + item->setExperienceName(it->second.mDisplayName); + item->setExperienceDescription(it->second.mDescription); + mExperiencesList->addItem(item); + } mExperiencesAccTab = getChild<LLAccordionCtrlTab>("tab_experiences"); mExperiencesAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelExperiences::onAccordionStateChanged, this, mExperiencesAccTab)); @@ -179,7 +181,8 @@ LLExperienceItem::LLExperienceItem() void LLExperienceItem::init( LLExperienceData* experience_data ) { - + setExperienceDescription(experience_data->mDescription); + setExperienceName(experience_data->mDisplayName); } void LLExperienceItem::setExperienceDescription( const std::string& val ) diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h index 2a0f101f8a..33bb0f944a 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -31,6 +31,7 @@ #include "llflatlistview.h" #include "llpanelavatar.h" +class LLExperienceData; class LLExperienceItem; class LLPanelProfile; @@ -87,11 +88,6 @@ private: bool mNoExperiences; }; -struct LLExperienceData -{ - std::string name; - std::string desc; -}; class LLExperienceItem : public LLPanel diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 42648b82c2..7b12d5509e 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -47,6 +47,7 @@ #include "llares.h" #include "llavatarnamecache.h" +#include "llexperiencecache.h" #include "lllandmark.h" #include "llcachename.h" #include "lldir.h" @@ -1398,6 +1399,9 @@ bool idle_startup() LLStartUp::initNameCache(); display_startup(); + LLStartUp::initExperienceCache(); + display_startup(); + // update the voice settings *after* gCacheName initialization // so that we can construct voice UI that relies on the name cache LLVoiceClient::getInstance()->updateSettings(); @@ -2809,6 +2813,13 @@ void LLStartUp::initNameCache() LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames")); } + +void LLStartUp::initExperienceCache() +{ + LLAppViewer::instance()->loadExperienceCache(); + LLExperienceCache::initClass(false); +} + void LLStartUp::cleanupNameCache() { LLAvatarNameCache::cleanupClass(); @@ -3507,3 +3518,4 @@ void transition_back_to_login_panel(const std::string& emsg) reset_login(); // calls LLStartUp::setStartupState( STATE_LOGIN_SHOW ); gSavedSettings.setBOOL("AutoLogin", FALSE); } + diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 760e38890b..00e03bcda6 100755 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -91,6 +91,7 @@ public: static void fontInit(); static void initNameCache(); + static void initExperienceCache(); static void cleanupNameCache(); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 627238b0f5..4635138fa3 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -48,6 +48,7 @@ #include "llanimationstates.h" #include "llavatarnamecache.h" #include "llavatarpropertiesprocessor.h" +#include "llexperiencecache.h" #include "llphysicsmotion.h" #include "llviewercontrol.h" #include "llcallingcard.h" // IDEVO for LLAvatarTracker @@ -2516,6 +2517,9 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) idleUpdateBelowWater(); // wind effect uses this idleUpdateWindEffect(); } + + LLExperienceData ed; + LLExperienceCache::get(getID(), &ed); idleUpdateNameTag( root_pos_last ); idleUpdateRenderCost(); -- cgit v1.2.3 From 2566e0d08fd7e8a47fc690a8163c1273d91141c2 Mon Sep 17 00:00:00 2001 From: "dolphin@dolphin-THINK.lindenlab.com" <dolphin@dolphin-THINK.lindenlab.com> Date: Mon, 26 Nov 2012 08:42:23 -0800 Subject: Added code for simulator integration. Added signals for cache update callbacks. Added expiration timers for cached experiences. --- indra/llmessage/llexperiencecache.cpp | 290 ++++++++++++++++++++++++++++++---- indra/llmessage/llexperiencecache.h | 18 ++- indra/newview/llstartup.cpp | 2 +- 3 files changed, 280 insertions(+), 30 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 0d8f76c7e2..562c4c40df 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -31,6 +31,7 @@ #include "llsdserialize.h" #include <set> #include <map> +#include "boost\tokenizer.hpp" #include "llexperiencecache.h" @@ -38,7 +39,6 @@ namespace LLExperienceCache { - bool sRunning = false; std::string sLookupURL; typedef std::set<LLUUID> ask_queue_t; @@ -47,29 +47,45 @@ namespace LLExperienceCache typedef std::map<LLUUID, F64> pending_queue_t; pending_queue_t sPendingQueue; - cache_t sCache; + int sMaximumLookups = 10; LLFrameTimer sRequestTimer; + // Periodically clean out expired entries from the cache + LLFrameTimer sEraseExpiredTimer; + + // May have multiple callbacks for a single ID, which are + // represented as multiple slots bound to the signal. + // Avoid copying signals via pointers. + typedef std::map<LLUUID, callback_signal_t*> signal_map_t; + signal_map_t sSignalMap; + + bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age); + void eraseExpired(); - void processExperience( const LLUUID& agent_id, const LLExperienceData& experience, bool add_to_cache ) + void processExperience( const LLUUID& agent_id, const LLExperienceData& experience ) { - if(add_to_cache) - { - sCache[agent_id]=experience; + sCache[agent_id]=experience; - sPendingQueue.erase(agent_id); + sPendingQueue.erase(agent_id); + + //signal + signal_map_t::iterator sig_it = sSignalMap.find(agent_id); + if (sig_it != sSignalMap.end()) + { + callback_signal_t* signal = sig_it->second; + (*signal)(agent_id, experience); + sSignalMap.erase(agent_id); - //signal + delete signal; } } - void initClass( bool running ) + void initClass( ) { - sRunning = false; } const cache_t& getCached() @@ -77,6 +93,91 @@ namespace LLExperienceCache return sCache; } + void setMaximumLookups( int maximumLookups) + { + sMaximumLookups = maximumLookups; + } + + + bool expirationFromCacheControl(LLSD headers, F64 *expires) + { + // Allow the header to override the default + LLSD cache_control_header = headers["cache-control"]; + if (cache_control_header.isDefined()) + { + S32 max_age = 0; + std::string cache_control = cache_control_header.asString(); + if (max_age_from_cache_control(cache_control, &max_age)) + { + LL_DEBUGS("ExperienceCache") + << "got expiration from headers, max_age " << max_age + << LL_ENDL; + F64 now = LLFrameTimer::getTotalSeconds(); + *expires = now + (F64)max_age; + return true; + } + } + return false; + } + + + static const std::string MAX_AGE("max-age"); + static const boost::char_separator<char> EQUALS_SEPARATOR("="); + static const boost::char_separator<char> COMMA_SEPARATOR(","); + + bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age) + { + // Split the string on "," to get a list of directives + typedef boost::tokenizer<boost::char_separator<char> > tokenizer; + tokenizer directives(cache_control, COMMA_SEPARATOR); + + tokenizer::iterator token_it = directives.begin(); + for ( ; token_it != directives.end(); ++token_it) + { + // Tokens may have leading or trailing whitespace + std::string token = *token_it; + LLStringUtil::trim(token); + + if (token.compare(0, MAX_AGE.size(), MAX_AGE) == 0) + { + // ...this token starts with max-age, so let's chop it up by "=" + tokenizer subtokens(token, EQUALS_SEPARATOR); + tokenizer::iterator subtoken_it = subtokens.begin(); + + // Must have a token + if (subtoken_it == subtokens.end()) return false; + std::string subtoken = *subtoken_it; + + // Must exactly equal "max-age" + LLStringUtil::trim(subtoken); + if (subtoken != MAX_AGE) return false; + + // Must have another token + ++subtoken_it; + if (subtoken_it == subtokens.end()) return false; + subtoken = *subtoken_it; + + // Must be a valid integer + // *NOTE: atoi() returns 0 for invalid values, so we have to + // check the string first. + // *TODO: Do servers ever send "0000" for zero? We don't handle it + LLStringUtil::trim(subtoken); + if (subtoken == "0") + { + *max_age = 0; + return true; + } + S32 val = atoi( subtoken.c_str() ); + if (val > 0 && val < S32_MAX) + { + *max_age = val; + return true; + } + return false; + } + } + return false; + } void importFile(std::istream& istr) @@ -146,7 +247,7 @@ namespace LLExperienceCache LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Received result for " << agent_id << "display '" << experience.mDisplayName << "'" << LL_ENDL ; - processExperience(agent_id, experience, true); + processExperience(agent_id, experience); } } @@ -154,13 +255,74 @@ namespace LLExperienceCache S32 num_unresolved = unresolved_agents.size(); if(num_unresolved > 0) { - LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Ignoreing " << num_unresolved + LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Ignoring " << num_unresolved << " bad ids" << LL_ENDL ; } LL_DEBUGS("ExperienceCache") << __FUNCTION__ << sCache.size() << " cached experiences" << LL_ENDL; } + void error(U32 status, const std::string& reason) + { + // We're going to construct a dummy record and cache it for a while, + // either briefly for a 503 Service Unavailable, or longer for other + // errors. + F64 retry_timestamp = errorRetryTimestamp(status); + + LLExperienceData experience; + experience.mDisplayName = LLExperienceCache::DUMMY_NAME; + experience.mDescription = LLExperienceCache::DUMMY_NAME; + experience.mExpires = retry_timestamp; + + // Add dummy records for all agent IDs in this request + std::vector<LLUUID>::const_iterator it = mAgentIds.begin(); + for ( ; it != mAgentIds.end(); ++it) + { + LLExperienceCache::processExperience((*it), experience); + } + } + + // Return time to retry a request that generated an error, based on + // error type and headers. Return value is seconds-since-epoch. + F64 errorRetryTimestamp(S32 status) + { + F64 now = LLFrameTimer::getTotalSeconds(); + + // Retry-After takes priority + LLSD retry_after = mHeaders["retry-after"]; + if (retry_after.isDefined()) + { + // We only support the delta-seconds type + S32 delta_seconds = retry_after.asInteger(); + if (delta_seconds > 0) + { + // ...valid delta-seconds + return now + F64(delta_seconds); + } + } + + // If no Retry-After, look for Cache-Control max-age + F64 expires = 0.0; + if (LLExperienceCache::expirationFromCacheControl(mHeaders, &expires)) + { + return expires; + } + + // No information in header, make a guess + if (status == 503) + { + // ...service unavailable, retry soon + const F64 SERVICE_UNAVAILABLE_DELAY = 600.0; // 10 min + return now + SERVICE_UNAVAILABLE_DELAY; + } + else + { + // ...other unexpected error + const F64 DEFAULT_DELAY = 3600.0; // 1 hour + return now + DEFAULT_DELAY; + } + } + private: std::vector<LLUUID> mAgentIds; LLSD mHeaders; @@ -186,13 +348,15 @@ namespace LLExperienceCache std::string arg="?ids="; - for(ask_queue_t::const_iterator it = sAskQueue.begin(); it != sAskQueue.end() ; ++it) + int request_count = 0; + for(ask_queue_t::const_iterator it = sAskQueue.begin() ; it != sAskQueue.end() && request_count < sMaximumLookups; ++it) { const LLUUID& agent_id = *it; url += arg; url += agent_id.asString(); agent_ids.push_back(agent_id); + request_count++; sPendingQueue[agent_id] = now; @@ -244,7 +408,20 @@ namespace LLExperienceCache void idle() { - sRunning = true; + + const F32 SECS_BETWEEN_REQUESTS = 0.1f; + if (!sRequestTimer.checkExpirationAndReset(SECS_BETWEEN_REQUESTS)) + { + return; + } + + // Must be large relative to above + const F32 ERASE_EXPIRED_TIMEOUT = 60.f; // seconds + if (sEraseExpiredTimer.checkExpirationAndReset(ERASE_EXPIRED_TIMEOUT)) + { + eraseExpired(); + } + if(!sAskQueue.empty()) { @@ -257,6 +434,25 @@ namespace LLExperienceCache sCache.erase(agent_id); } + void eraseExpired() + { + S32 expired_count = 0; + F64 now = LLFrameTimer::getTotalSeconds(); + cache_t::iterator it = sCache.begin(); + while (it != sCache.end()) + { + cache_t::iterator cur = it; + ++it; + const LLExperienceData& experience = cur->second; + if (experience.mExpires < now) + { + sCache.erase(cur); + expired_count++; + } + } + } + + void fetch( const LLUUID& agent_id ) { LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "queue request for agent" << agent_id << LL_ENDL ; @@ -270,16 +466,12 @@ namespace LLExperienceCache bool get( const LLUUID& agent_id, LLExperienceData* experience_data ) { - if(sRunning) + cache_t::const_iterator it = sCache.find(agent_id); + if (it != sCache.end()) { - - cache_t::const_iterator it = sCache.find(agent_id); - if (it != sCache.end()) - { - llassert(experience_data); - *experience_data = it->second; - return true; - } + llassert(experience_data); + *experience_data = it->second; + return true; } if(!isRequestPending(agent_id)) @@ -291,12 +483,54 @@ namespace LLExperienceCache } + + void get( const LLUUID& agent_id, callback_slot_t slot ) + { + cache_t::const_iterator it = sCache.find(agent_id); + if (it != sCache.end()) + { + // ...name already exists in cache, fire callback now + callback_signal_t signal; + signal.connect(slot); + signal(agent_id, it->second); + return; + } + + // schedule a request + if (!isRequestPending(agent_id)) + { + sAskQueue.insert(agent_id); + } + + // always store additional callback, even if request is pending + signal_map_t::iterator sig_it = sSignalMap.find(agent_id); + if (sig_it == sSignalMap.end()) + { + // ...new callback for this id + callback_signal_t* signal = new callback_signal_t(); + signal->connect(slot); + sSignalMap[agent_id] = signal; + } + else + { + // ...existing callback, bind additional slot + callback_signal_t* signal = sig_it->second; + signal->connect(slot); + } + } + } +static const std::string EXPERIENCE_NAME("username"); +static const std::string EXPERIENCE_DESCRIPTION("display_name"); +static const std::string EXPERIENCE_EXPIRATION("display_name_expires"); + bool LLExperienceData::fromLLSD( const LLSD& sd ) { - mDisplayName = sd["display_name"].asString(); - mDescription = sd["username"].asString(); + mDisplayName = sd[EXPERIENCE_NAME].asString(); + mDescription = sd[EXPERIENCE_DESCRIPTION].asString(); + LLDate expiration = sd[EXPERIENCE_EXPIRATION]; + mExpires = expiration.secondsSinceEpoch(); if(mDisplayName.empty() || mDescription.empty()) return false; @@ -307,7 +541,9 @@ bool LLExperienceData::fromLLSD( const LLSD& sd ) LLSD LLExperienceData::asLLSD() const { LLSD sd; - sd["display_name"] = mDisplayName; - sd["username"] = mDescription.substr(0, llmin(mDescription.size(),mDescription.find(" %"))); + sd[EXPERIENCE_NAME] = mDisplayName; + sd[EXPERIENCE_DESCRIPTION] = mDescription.substr(0, llmin(mDescription.size(),mDescription.find(" %"))); + sd[EXPERIENCE_EXPIRATION] = LLDate(mExpires); + return sd; } diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 799cdea13a..2f2647d5a3 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -30,6 +30,7 @@ #define LL_LLEXPERIENCECACHE_H #include <string> +#include <boost/signals2.hpp> class LLUUID; @@ -43,27 +44,40 @@ public: std::string mDisplayName; std::string mDescription; + F64 mExpires; }; namespace LLExperienceCache { + // dummy name used when we have nothing else + const std::string DUMMY_NAME = "\?\?\?"; + // Callback types for get() below + typedef boost::signals2::signal< + void (const LLUUID& agent_id, const LLExperienceData& experience)> + callback_signal_t; + typedef callback_signal_t::slot_type callback_slot_t; + typedef std::map<LLUUID, LLExperienceData> cache_t; + + void setLookupURL(const std::string& lookup_url); bool hasLookupURL(); + void setMaximumLookups(int maximumLookups); void idle(); void exportFile(std::ostream& ostr); void importFile(std::istream& istr); - void initClass(bool running); + void initClass(); void erase(const LLUUID& agent_id); void fetch(const LLUUID& agent_id); void insert(const LLUUID& agent_id, const LLExperienceData& experience_data); bool get(const LLUUID& agent_id, LLExperienceData* experience_data); - typedef std::map<LLUUID, LLExperienceData> cache_t; + // If name information is in cache, callback will be called immediately. + void get(const LLUUID& agent_id, callback_slot_t slot); const cache_t& getCached(); }; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ec8415b28e..a58a26b6fe 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2817,7 +2817,7 @@ void LLStartUp::initNameCache() void LLStartUp::initExperienceCache() { LLAppViewer::instance()->loadExperienceCache(); - LLExperienceCache::initClass(false); + LLExperienceCache::initClass(); } void LLStartUp::cleanupNameCache() -- cgit v1.2.3 From 179e944f45476e03eb7b828e427f9d299529ad12 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 18 Dec 2012 16:06:00 -0800 Subject: Updated client to use new caps brought over server changes to llExperienceCache --- indra/llmessage/llexperiencecache.cpp | 353 ++++++++++++++++++++-------------- indra/llmessage/llexperiencecache.h | 45 +++-- indra/newview/llappviewer.cpp | 4 +- indra/newview/llpanelexperiences.cpp | 90 +++++++-- indra/newview/llpanelexperiences.h | 5 +- indra/newview/llviewerregion.cpp | 2 + indra/newview/llvoavatar.cpp | 5 +- 7 files changed, 306 insertions(+), 198 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 562c4c40df..18b950b61e 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -23,25 +23,26 @@ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ +#include "llexperiencecache.h" -#include "linden_common.h" #include "llavatarname.h" #include "llframetimer.h" #include "llhttpclient.h" #include "llsdserialize.h" #include <set> #include <map> -#include "boost\tokenizer.hpp" +#include "boost/tokenizer.hpp" + -#include "llexperiencecache.h" namespace LLExperienceCache { + const std::string& MAP_KEY = PUBLIC_KEY; std::string sLookupURL; - typedef std::set<LLUUID> ask_queue_t; + typedef std::map<LLUUID, std::string> ask_queue_t; ask_queue_t sAskQueue; typedef std::map<LLUUID, F64> pending_queue_t; @@ -65,20 +66,40 @@ namespace LLExperienceCache bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age); void eraseExpired(); - void processExperience( const LLUUID& agent_id, const LLExperienceData& experience ) + void processExperience( const LLUUID& public_key, const LLSD& experience ) { - sCache[agent_id]=experience; + sCache[public_key]=experience; + LLSD & row = sCache[public_key]; + + if(row.has("expires")) + { + row["expires"] = row["expires"].asReal() + LLFrameTimer::getTotalSeconds(); + } + + if(row.has(PUBLIC_KEY)) + { + sPendingQueue.erase(row[PUBLIC_KEY].asUUID()); + } + + if(row.has(PRIVATE_KEY)) + { + sPendingQueue.erase(row[PRIVATE_KEY].asUUID()); + } + + if(row.has(CREATOR_KEY)) + { + sPendingQueue.erase(row[CREATOR_KEY].asUUID()); + } - sPendingQueue.erase(agent_id); //signal - signal_map_t::iterator sig_it = sSignalMap.find(agent_id); + signal_map_t::iterator sig_it = sSignalMap.find(public_key); if (sig_it != sSignalMap.end()) { callback_signal_t* signal = sig_it->second; - (*signal)(agent_id, experience); + (*signal)(experience); - sSignalMap.erase(agent_id); + sSignalMap.erase(public_key); delete signal; } @@ -109,7 +130,7 @@ namespace LLExperienceCache std::string cache_control = cache_control_header.asString(); if (max_age_from_cache_control(cache_control, &max_age)) { - LL_DEBUGS("ExperienceCache") + LL_WARNS("ExperienceCache") << "got expiration from headers, max_age " << max_age << LL_ENDL; F64 now = LLFrameTimer::getTotalSeconds(); @@ -186,16 +207,14 @@ namespace LLExperienceCache S32 parse_count = LLSDSerialize::fromXMLDocument(data, istr); if(parse_count < 1) return; - LLSD agents = data["agents"]; + LLSD experiences = data["experiences"]; - LLUUID agent_id; - LLExperienceData experience; - LLSD::map_const_iterator it = agents.beginMap(); - for(; it != agents.endMap() ; ++it) + LLUUID public_key; + LLSD::map_const_iterator it = experiences.beginMap(); + for(; it != experiences.endMap() ; ++it) { - agent_id.set(it->first); - experience.fromLLSD( it->second); - sCache[agent_id]=experience; + public_key.set(it->first); + sCache[public_key]=it->second; } LL_INFOS("ExperienceCache") << "loaded " << sCache.size() << LL_ENDL; @@ -203,16 +222,20 @@ namespace LLExperienceCache void exportFile(std::ostream& ostr) { - LLSD agents; + LLSD experiences; cache_t::const_iterator it =sCache.begin(); for( ; it != sCache.end() ; ++it) { - agents[it->first.asString()] = it->second.asLLSD(); + if(!it->second.has(PUBLIC_KEY) || it->second[PUBLIC_KEY].asUUID().isNull() || + it->second.has("error")) + continue; + + experiences[it->first.asString()] = it->second; } LLSD data; - data["agents"] = agents; + data["experiences"] = experiences; LLSDSerialize::toPrettyXML(data, ostr); } @@ -220,8 +243,8 @@ namespace LLExperienceCache class LLExperienceResponder : public LLHTTPClient::Responder { public: - LLExperienceResponder(const std::vector<LLUUID>& agent_ids) - :mAgentIds(agent_ids) + LLExperienceResponder(const ask_queue_t& keys) + :mKeys(keys) { } @@ -233,60 +256,65 @@ namespace LLExperienceCache virtual void result(const LLSD& content) { - LLSD agents = content["agents"]; - LLSD::array_const_iterator it = agents.beginArray(); - for( /**/ ; it != agents.endArray(); ++it) + LLSD experiences = content["experience_keys"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for( /**/ ; it != experiences.endArray(); ++it) { const LLSD& row = *it; - LLUUID agent_id = row["id"].asUUID(); + LLUUID public_key = row[PUBLIC_KEY].asUUID(); - LLExperienceData experience; - if(experience.fromLLSD(row)) - { - LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Received result for " << agent_id - << "display '" << experience.mDisplayName << "'" << LL_ENDL ; + LL_INFOS("ExperienceCache") << "Received result for " << public_key + << " display '" << row[LLExperienceCache::NAME].asString() << "'" << LL_ENDL ; - processExperience(agent_id, experience); - } + processExperience(public_key, row); } - LLSD unresolved_agents = content["bad_ids"]; - S32 num_unresolved = unresolved_agents.size(); - if(num_unresolved > 0) + LLSD error_ids = content["error_ids"]; + LLSD::map_const_iterator errIt = error_ids.beginMap(); + for( /**/ ; errIt != error_ids.endMap() ; ++errIt ) { - LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "Ignoring " << num_unresolved - << " bad ids" << LL_ENDL ; + LLUUID id = LLUUID(errIt->first); + for( it = errIt->second.beginArray(); it != errIt->second.endArray() ; ++it) + { + LL_INFOS("ExperienceCache") << "Clearing error result for " << id + << " of type '" << it->asString() << "'" << LL_ENDL ; + + erase(id, it->asString()); + } } - LL_DEBUGS("ExperienceCache") << __FUNCTION__ << sCache.size() << " cached experiences" << LL_ENDL; + LL_INFOS("ExperienceCache") << sCache.size() << " cached experiences" << LL_ENDL; } - void error(U32 status, const std::string& reason) + virtual void error(U32 status, const std::string& reason) { - // We're going to construct a dummy record and cache it for a while, - // either briefly for a 503 Service Unavailable, or longer for other - // errors. - F64 retry_timestamp = errorRetryTimestamp(status); - - LLExperienceData experience; - experience.mDisplayName = LLExperienceCache::DUMMY_NAME; - experience.mDescription = LLExperienceCache::DUMMY_NAME; - experience.mExpires = retry_timestamp; - - // Add dummy records for all agent IDs in this request - std::vector<LLUUID>::const_iterator it = mAgentIds.begin(); - for ( ; it != mAgentIds.end(); ++it) + LL_WARNS("ExperienceCache") << "Request failed "<<status<<" "<<reason<< LL_ENDL; + // We're going to construct a dummy record and cache it for a while, + // either briefly for a 503 Service Unavailable, or longer for other + // errors. + F64 retry_timestamp = errorRetryTimestamp(status); + + + // Add dummy records for all agent IDs in this request + ask_queue_t::const_iterator it = mKeys.begin(); + for ( ; it != mKeys.end(); ++it) { - LLExperienceCache::processExperience((*it), experience); - } + LLSD exp; + exp["expires"]=retry_timestamp; + exp[it->second] = it->first; + exp["key_type"] = it->second; + exp["uuid"] = it->first; + exp["error"] = (LLSD::Integer)status; + LLExperienceCache::processExperience(it->first, exp); + } + } // Return time to retry a request that generated an error, based on // error type and headers. Return value is seconds-since-epoch. F64 errorRetryTimestamp(S32 status) { - F64 now = LLFrameTimer::getTotalSeconds(); // Retry-After takes priority LLSD retry_after = mHeaders["retry-after"]; @@ -297,7 +325,7 @@ namespace LLExperienceCache if (delta_seconds > 0) { // ...valid delta-seconds - return now + F64(delta_seconds); + return F64(delta_seconds); } } @@ -313,78 +341,87 @@ namespace LLExperienceCache { // ...service unavailable, retry soon const F64 SERVICE_UNAVAILABLE_DELAY = 600.0; // 10 min - return now + SERVICE_UNAVAILABLE_DELAY; + return SERVICE_UNAVAILABLE_DELAY; + } + else if (status == 499) + { + // ...we were probably too busy, retry quickly + const F64 BUSY_DELAY = 10.0; // 10 seconds + return BUSY_DELAY; + } else { // ...other unexpected error const F64 DEFAULT_DELAY = 3600.0; // 1 hour - return now + DEFAULT_DELAY; + return DEFAULT_DELAY; } } private: - std::vector<LLUUID> mAgentIds; + ask_queue_t mKeys; LLSD mHeaders; }; void requestExperiences() { - if(sAskQueue.empty()) + if(sAskQueue.empty() || sLookupURL.empty()) return; F64 now = LLFrameTimer::getTotalSeconds(); - const U32 NAME_URL_MAX = 4096; - const U32 NAME_URL_SEND_THRESHOLD = 3000; + const U32 EXP_URL_SEND_THRESHOLD = 3000; - std::string url; - url.reserve(NAME_URL_MAX); - std::vector<LLUUID> agent_ids; - agent_ids.reserve(128); + std::ostringstream ostr; - url += sLookupURL; + ask_queue_t keys; - std::string arg="?ids="; + ostr << sLookupURL; + + char arg='?'; int request_count = 0; for(ask_queue_t::const_iterator it = sAskQueue.begin() ; it != sAskQueue.end() && request_count < sMaximumLookups; ++it) { - const LLUUID& agent_id = *it; + const LLUUID& key = it->first; + const std::string& key_type = it->second; + + ostr << arg << key_type << '=' << key.asString() ; - url += arg; - url += agent_id.asString(); - agent_ids.push_back(agent_id); + keys[key]=key_type; request_count++; - sPendingQueue[agent_id] = now; + sPendingQueue[key] = now; - arg[0]='&'; + arg='&'; - if(url.size() > NAME_URL_SEND_THRESHOLD) + if(ostr.tellp() > EXP_URL_SEND_THRESHOLD) { - LLHTTPClient::get(url, new LLExperienceResponder(agent_ids)); - url = sLookupURL; - arg[0]='?'; - agent_ids.clear(); + LL_INFOS("ExperienceCache") << " query: " << ostr.str() << LL_ENDL; + LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys)); + ostr.clear(); + ostr.str(sLookupURL); + arg='?'; + keys.clear(); } } - if(url.size() > sLookupURL.size()) + if(ostr.tellp() > sLookupURL.size()) { - LLHTTPClient::get(url, new LLExperienceResponder(agent_ids)); + LL_INFOS("ExperienceCache") << " query: " << ostr.str() << LL_ENDL; + LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys)); } sAskQueue.clear(); } - bool isRequestPending(const LLUUID& agent_id) + bool isRequestPending(const LLUUID& public_key) { bool isPending = false; const F64 PENDING_TIMEOUT_SECS = 5.0 * 60.0; - pending_queue_t::const_iterator it = sPendingQueue.find(agent_id); + pending_queue_t::const_iterator it = sPendingQueue.find(public_key); if(it != sPendingQueue.end()) { @@ -399,6 +436,10 @@ namespace LLExperienceCache void setLookupURL( const std::string& lookup_url ) { sLookupURL = lookup_url; + if(!sLookupURL.empty()) + { + sLookupURL += "id/"; + } } bool hasLookupURL() @@ -429,87 +470,136 @@ namespace LLExperienceCache } } - void erase( const LLUUID& agent_id ) + struct FindByKey + { + FindByKey(const LLUUID& key, const std::string& key_type):mKey(key), mKeyType(key_type){} + const LLUUID& mKey; + const std::string& mKeyType; + + bool operator()(cache_t::value_type& experience) + { + return experience.second.has(mKeyType) && experience.second[mKeyType].asUUID() == mKey; + } + }; + + + cache_t::iterator Find(const LLUUID& key, const std::string& key_type) + { + LL_INFOS("ExperienceCache") << " searching for " << key << " of type " << key_type << LL_ENDL; + if(key_type == MAP_KEY) + { + return sCache.find(key); + } + + return std::find_if(sCache.begin(), sCache.end(), FindByKey(key, key_type)); + } + + + void erase( const LLUUID& key, const std::string& key_type ) { - sCache.erase(agent_id); + cache_t::iterator it = Find(key, key_type); + + if(it != sCache.end()) + { + sCache.erase(it); + } } void eraseExpired() { - S32 expired_count = 0; F64 now = LLFrameTimer::getTotalSeconds(); cache_t::iterator it = sCache.begin(); while (it != sCache.end()) { cache_t::iterator cur = it; + LLSD& exp = cur->second; ++it; - const LLExperienceData& experience = cur->second; - if (experience.mExpires < now) + if(exp.has("expires") && exp["expires"].asReal() < now) { - sCache.erase(cur); - expired_count++; + if(exp.has("key_type") && exp.has("uuid")) + { + fetch(exp["uuid"].asUUID(), exp["key_type"].asString(), true); + sCache.erase(cur); + } + else if(exp.has(MAP_KEY)) + { + LLUUID id = exp[MAP_KEY]; + if(!id.isNull()) + { + fetch(id, MAP_KEY, true); + } + } } } } - - void fetch( const LLUUID& agent_id ) + + bool fetch( const LLUUID& key, const std::string& key_type, bool refresh/* = true*/ ) { - LL_DEBUGS("ExperienceCache") << __FUNCTION__ << "queue request for agent" << agent_id << LL_ENDL ; - sAskQueue.insert(agent_id); + if(!key.isNull() && !isRequestPending(key) && (refresh || Find(key, key_type)==sCache.end())) + { + LL_INFOS("ExperienceCache") << " queue request for " << key_type << " " << key << LL_ENDL ; + sAskQueue[key]=key_type; + + return true; + } + return false; } - void insert( const LLUUID& agent_id, const LLExperienceData& experience_data ) + void insert(const LLSD& experience_data ) { - sCache[agent_id]=experience_data; + if(experience_data.has(MAP_KEY)) + { + sCache[experience_data[MAP_KEY].asUUID()]=experience_data; + } + else + { + LL_WARNS("ExperienceCache") << ": Ignoring cache insert of experience which is missing " << MAP_KEY << LL_ENDL; + } } - bool get( const LLUUID& agent_id, LLExperienceData* experience_data ) + bool get( const LLUUID& key, const std::string& key_type, LLSD& experience_data ) { - cache_t::const_iterator it = sCache.find(agent_id); + if(key.isNull()) return false; + cache_t::const_iterator it = Find(key, key_type); + if (it != sCache.end()) { - llassert(experience_data); - *experience_data = it->second; + experience_data = it->second; return true; } - if(!isRequestPending(agent_id)) - { - fetch(agent_id); - } + fetch(key, key_type); return false; } - - void get( const LLUUID& agent_id, callback_slot_t slot ) + void get( const LLUUID& key, const std::string& key_type, callback_slot_t slot ) { - cache_t::const_iterator it = sCache.find(agent_id); + if(key.isNull()) return; + + cache_t::const_iterator it = Find(key, key_type); if (it != sCache.end()) { // ...name already exists in cache, fire callback now callback_signal_t signal; signal.connect(slot); - signal(agent_id, it->second); + + signal(it->second); return; } - // schedule a request - if (!isRequestPending(agent_id)) - { - sAskQueue.insert(agent_id); - } + fetch(key, key_type); // always store additional callback, even if request is pending - signal_map_t::iterator sig_it = sSignalMap.find(agent_id); + signal_map_t::iterator sig_it = sSignalMap.find(key); if (sig_it == sSignalMap.end()) { // ...new callback for this id callback_signal_t* signal = new callback_signal_t(); signal->connect(slot); - sSignalMap[agent_id] = signal; + sSignalMap[key] = signal; } else { @@ -520,30 +610,3 @@ namespace LLExperienceCache } } - -static const std::string EXPERIENCE_NAME("username"); -static const std::string EXPERIENCE_DESCRIPTION("display_name"); -static const std::string EXPERIENCE_EXPIRATION("display_name_expires"); - -bool LLExperienceData::fromLLSD( const LLSD& sd ) -{ - mDisplayName = sd[EXPERIENCE_NAME].asString(); - mDescription = sd[EXPERIENCE_DESCRIPTION].asString(); - LLDate expiration = sd[EXPERIENCE_EXPIRATION]; - mExpires = expiration.secondsSinceEpoch(); - - if(mDisplayName.empty() || mDescription.empty()) return false; - - mDescription += " % Hey, this is a description!"; - return true; -} - -LLSD LLExperienceData::asLLSD() const -{ - LLSD sd; - sd[EXPERIENCE_NAME] = mDisplayName; - sd[EXPERIENCE_DESCRIPTION] = mDescription.substr(0, llmin(mDescription.size(),mDescription.find(" %"))); - sd[EXPERIENCE_EXPIRATION] = LLDate(mExpires); - - return sd; -} diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 2f2647d5a3..396a244935 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -29,36 +29,35 @@ #ifndef LL_LLEXPERIENCECACHE_H #define LL_LLEXPERIENCECACHE_H -#include <string> +#include "linden_common.h" #include <boost/signals2.hpp> +class LLSD; class LLUUID; -class LLExperienceData -{ -public: - bool fromLLSD(const LLSD& sd); - LLSD asLLSD() const; - - - std::string mDisplayName; - std::string mDescription; - F64 mExpires; -}; - - namespace LLExperienceCache { + const std::string PUBLIC_KEY = "public-id"; + const std::string PRIVATE_KEY = "private-id"; + const std::string CREATOR_KEY = "creator-id"; + const std::string NAME = "name"; + const std::string PROPERTIES = "properties"; + const std::string EXPIRES = "expires"; + + const int EXPERIENCE_INVALID = (1 << 0); + const int EXPERIENCE_NORMAL = (1 << 1); + const int EXPERIENCE_REGION = (1 << 2); + const static F64 DEFAULT_EXPIRATION = 600.0; + // dummy name used when we have nothing else const std::string DUMMY_NAME = "\?\?\?"; // Callback types for get() below - typedef boost::signals2::signal< - void (const LLUUID& agent_id, const LLExperienceData& experience)> + typedef boost::signals2::signal<void (const LLSD& experience)> callback_signal_t; typedef callback_signal_t::slot_type callback_slot_t; - typedef std::map<LLUUID, LLExperienceData> cache_t; + typedef std::map<LLUUID, LLSD> cache_t; void setLookupURL(const std::string& lookup_url); @@ -70,14 +69,14 @@ namespace LLExperienceCache void exportFile(std::ostream& ostr); void importFile(std::istream& istr); void initClass(); - - void erase(const LLUUID& agent_id); - void fetch(const LLUUID& agent_id); - void insert(const LLUUID& agent_id, const LLExperienceData& experience_data); - bool get(const LLUUID& agent_id, LLExperienceData* experience_data); + + void erase(const LLUUID& key, const std::string& key_type); + bool fetch(const LLUUID& key, const std::string& key_type, bool refresh = false); + void insert(LLSD& experience_data); + bool get(const LLUUID& key, const std::string& key_type, LLSD& experience_data); // If name information is in cache, callback will be called immediately. - void get(const LLUUID& agent_id, callback_slot_t slot); + void get(const LLUUID& key, const std::string& key_type, callback_slot_t slot); const cache_t& getCached(); }; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index e49212d9de..c4fdc1ee21 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4818,12 +4818,12 @@ void LLAppViewer::idleExperienceCache() LLViewerRegion* region = gAgent.getRegion(); if (!region) return; - std::string lookup_url=region->getCapability("GetDisplayNames"); // use GetDisplayNames for testing round trip + std::string lookup_url=region->getCapability("GetExperienceInfo"); if(!lookup_url.empty() && lookup_url.back() != '/') { lookup_url += '/'; } - + LLExperienceCache::setLookupURL(lookup_url); LLExperienceCache::idle(); diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index bc9d3cc0ee..02a3c4c410 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -4,6 +4,7 @@ #include "llpanelprofile.h" #include "lluictrlfactory.h" #include "llexperiencecache.h" +#include "llagent.h" #include "llpanelexperiences.h" @@ -26,6 +27,61 @@ void* LLPanelExperiences::create( void* data ) return new LLPanelExperiences(); } +void ExperienceResult(LLHandle<LLPanelExperiences> panel, const LLSD& experience) +{ + LLPanelExperiences* experiencePanel = panel.get(); + if(experiencePanel) + { + experiencePanel->addExperienceInfo(experience); + } +} + +class LLExperienceListResponder : public LLHTTPClient::Responder +{ +public: + LLExperienceListResponder(const LLHandle<LLPanelExperiences>& parent):mParent(parent) + { + } + + LLHandle<LLPanelExperiences> mParent; + + virtual void result(const LLSD& content) + { + if(mParent.isDead()) + return; + + LLSD experiences = content["experiences"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for( /**/ ; it != experiences.endArray(); ++it) + { + LLUUID public_key = it->asUUID(); + + LLExperienceCache::get(public_key, LLExperienceCache::PUBLIC_KEY, boost::bind(ExperienceResult, mParent, _1)); + } + } +}; + +void LLPanelExperiences::addExperienceInfo(const LLSD& experience) +{ + LLExperienceItem* item = new LLExperienceItem(); + if(experience.has(LLExperienceCache::NAME)) + { + item->setExperienceName(experience[LLExperienceCache::NAME].asString()); + } + else if(experience.has("error")) + { + item->setExperienceName(experience["error"].asString()); + } + + if(experience.has(LLExperienceCache::PUBLIC_KEY)) + { + item->setExperienceDescription(experience[LLExperienceCache::PUBLIC_KEY].asString()); + } + + mExperiencesList->addItem(item); + +} + BOOL LLPanelExperiences::postBuild( void ) { @@ -35,15 +91,15 @@ BOOL LLPanelExperiences::postBuild( void ) mExperiencesList->setNoItemsCommentText(getString("no_experiences")); } - const LLExperienceCache::cache_t& experiences = LLExperienceCache::getCached(); - LLExperienceCache::cache_t::const_iterator it = experiences.begin(); - for( ; it != experiences.end() && mExperiencesList->getChildCount() < 10 ; ++it) + LLViewerRegion* region = gAgent.getRegion(); + if (region) { - LLExperienceItem* item = new LLExperienceItem(); - item->setExperienceName(it->second.mDisplayName); - item->setExperienceDescription(it->second.mDescription); - mExperiencesList->addItem(item); + std::string lookup_url=region->getCapability("GetExperiences"); + if(!lookup_url.empty()) + { + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLPanelExperiences>())); + } } mExperiencesAccTab = getChild<LLAccordionCtrlTab>("tab_experiences"); @@ -71,17 +127,6 @@ 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()); - */ } } @@ -179,10 +224,13 @@ LLExperienceItem::LLExperienceItem() buildFromFile("panel_experience_info.xml"); } -void LLExperienceItem::init( LLExperienceData* experience_data ) +void LLExperienceItem::init( LLSD* experience_data ) { - setExperienceDescription(experience_data->mDescription); - setExperienceName(experience_data->mDisplayName); + if(experience_data) + { + setExperienceDescription(experience_data->has(LLExperienceCache::PUBLIC_KEY)?(*experience_data)[LLExperienceCache::PUBLIC_KEY].asString() : std::string()); + setExperienceName(experience_data->has(LLExperienceCache::NAME)?(*experience_data)[LLExperienceCache::NAME].asString() : std::string()); + } } void LLExperienceItem::setExperienceDescription( const std::string& val ) diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h index 33bb0f944a..1fe3f6ae1d 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -31,7 +31,6 @@ #include "llflatlistview.h" #include "llpanelavatar.h" -class LLExperienceData; class LLExperienceItem; class LLPanelProfile; @@ -69,7 +68,7 @@ public: LLExperienceItem* getSelectedExperienceItem(); void setProfilePanel(LLPanelProfile* profile_panel); - + void addExperienceInfo(const LLSD& experience); protected: void onListCommit(const LLFlatListView* f_list); @@ -97,7 +96,7 @@ public: LLExperienceItem(); ~LLExperienceItem(); - void init(LLExperienceData* experience_data); + void init(LLSD* experience_data); /*virtual*/ BOOL postBuild(); void update(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b607afbd9d..7417e4fa06 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1536,6 +1536,8 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) } capabilityNames.append("GetDisplayNames"); + capabilityNames.append("GetExperiences"); + capabilityNames.append("GetExperienceInfo"); capabilityNames.append("GetMesh"); capabilityNames.append("GetObjectCost"); capabilityNames.append("GetObjectPhysicsData"); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4635138fa3..2d89db6e28 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2517,10 +2517,7 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) idleUpdateBelowWater(); // wind effect uses this idleUpdateWindEffect(); } - - LLExperienceData ed; - LLExperienceCache::get(getID(), &ed); - + idleUpdateNameTag( root_pos_last ); idleUpdateRenderCost(); } -- cgit v1.2.3 From 596522c7e5a9bff53a56db90597c7bcbcdbf1537 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 29 Jan 2013 13:58:13 -0800 Subject: Added a combox to the script editor to select an experience. Selected experience is sent with the script when saved. The list of experiences is currently populated with the avatar's current experience, if any. --- indra/newview/llpreviewscript.cpp | 105 +++++++++++++++++++-- indra/newview/llpreviewscript.h | 13 ++- .../skins/default/xui/en/panel_script_ed.xml | 9 ++ 3 files changed, 115 insertions(+), 12 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 9c25e69db0..98abd2c9dd 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -86,6 +86,7 @@ #include "lltrans.h" #include "llviewercontrol.h" #include "llappviewer.h" +#include "llexperiencecache.h" const std::string HELLO_LSL = "default\n" @@ -370,12 +371,21 @@ LLScriptEdCore::~LLScriptEdCore() delete mLiveFile; } +void LLScriptEdCore::experienceChanged() +{ + enableSave(TRUE); + getChildView("Save_btn")->setEnabled(true); +} + BOOL LLScriptEdCore::postBuild() { mErrorList = getChild<LLScrollListCtrl>("lsl errors"); mFunctions = getChild<LLComboBox>( "Insert..."); + mExperiences = getChild<LLComboBox>("Experiences..."); + mExperiences->setCommitCallback(boost::bind(&LLScriptEdCore::experienceChanged, this)); + childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this); mEditor = getChild<LLViewerTextEditor>("Script Editor"); @@ -385,6 +395,10 @@ BOOL LLScriptEdCore::postBuild() childSetAction("Edit_btn", boost::bind(&LLScriptEdCore::openInExternalEditor, this)); initMenu(); + + + + requestExperiences(); std::vector<std::string> funcs; @@ -1187,6 +1201,86 @@ bool LLScriptEdCore::enableLoadFromFileMenu(void* userdata) return (self && self->mEditor) ? self->mEditor->canLoadOrSaveToFile() : FALSE; } + +void AddExperienceResult(LLHandle<LLScriptEdCore> panel, const LLSD& experience) +{ + LLScriptEdCore* scriptCore = panel.get(); + if(scriptCore) + { + scriptCore->addExperienceInfo(experience); + } +} + + +class ExperienceResponder : public LLHTTPClient::Responder +{ +public: + ExperienceResponder(const LLHandle<LLScriptEdCore>& parent):mParent(parent) + { + } + + LLHandle<LLScriptEdCore> mParent; + + virtual void result(const LLSD& content) + { + LLScriptEdCore* scriptCore = mParent.get(); + if(!scriptCore) + return; + + scriptCore->clearExperiences(); + + LLSD experiences = content["experiences"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for( /**/ ; it != experiences.endArray(); ++it) + { + LLUUID public_key = it->asUUID(); + + LLExperienceCache::get(public_key, LLExperienceCache::PUBLIC_KEY, boost::bind(AddExperienceResult, mParent, _1)); + } + } +}; + +void LLScriptEdCore::requestExperiences() +{ + mExperiences->setEnabled(FALSE); + + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url=region->getCapability("GetExperiences"); + if(!lookup_url.empty()) + { + LLHTTPClient::get(lookup_url, new ExperienceResponder(getDerivedHandle<LLScriptEdCore>())); + } + } +} + +void LLScriptEdCore::addExperienceInfo( const LLSD& experience ) +{ + mExperiences->setEnabled(TRUE); + mExperiences->add(experience[LLExperienceCache::NAME], experience); +} + +void LLScriptEdCore::clearExperiences() +{ + mExperiences->removeall(); + mExperiences->add("No Experience"); +} + +LLUUID LLScriptEdCore::getSelectedExperience()const +{ + LLSD value = mExperiences->getSelectedValue(); + if(value.has(LLExperienceCache::PUBLIC_KEY)) + { + return value[LLExperienceCache::PUBLIC_KEY].asUUID(); + } + return LLUUID::null; +} + + + + + /// --------------------------------------------------------------------------- /// LLScriptEdContainer /// --------------------------------------------------------------------------- @@ -2142,8 +2236,8 @@ void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/) mPendingUploads++; BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get(); if (!url.empty()) - { - uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running); + { + uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running, mScriptEd->getSelectedExperience()); } else if (gAssetStorage) { @@ -2151,11 +2245,7 @@ void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/) } } -void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url, - const std::string& filename, - const LLUUID& task_id, - const LLUUID& item_id, - BOOL is_running) +void LLLiveLSLEditor::uploadAssetViaCaps( const std::string& url, const std::string& filename, const LLUUID& task_id, const LLUUID& item_id, BOOL is_running, const LLUUID& experience_public_id ) { llinfos << "Update Task Inventory via capability " << url << llendl; LLSD body; @@ -2163,6 +2253,7 @@ void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url, body["item_id"] = item_id; body["is_script_running"] = is_running; body["target"] = monoChecked() ? "mono" : "lsl2"; + body["experience"] = experience_public_id; LLHTTPClient::post(url, body, new LLUpdateTaskInventoryResponder(body, filename, LLAssetType::AT_LSL_TEXT)); } diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 7563cecd9d..27252d17a1 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -106,6 +106,9 @@ public: static bool enableLoadFromFileMenu(void* userdata); virtual bool hasAccelerators() const { return true; } + void addExperienceInfo( const LLSD& experience ); + void clearExperiences(); + LLUUID getSelectedExperience()const; private: void onBtnHelp(); @@ -120,6 +123,9 @@ private: void enableSave(BOOL b) {mEnableSave = b;} + void requestExperiences(); + void experienceChanged(); + protected: void deleteBridges(); void setHelpPage(const std::string& help_string); @@ -135,6 +141,7 @@ private: void (*mSearchReplaceCallback) (void* userdata); void* mUserdata; LLComboBox *mFunctions; + LLComboBox *mExperiences; BOOL mForceClose; LLPanel* mCodePanel; LLScrollListCtrl* mErrorList; @@ -237,11 +244,7 @@ private: virtual void loadAsset(); void loadAsset(BOOL is_new); /*virtual*/ void saveIfNeeded(bool sync = true); - void uploadAssetViaCaps(const std::string& url, - const std::string& filename, - const LLUUID& task_id, - const LLUUID& item_id, - BOOL is_running); + void uploadAssetViaCaps(const std::string& url, const std::string& filename, const LLUUID& task_id, const LLUUID& item_id, BOOL is_running, const LLUUID& experience_public_id); void uploadAssetLegacy(const std::string& filename, LLViewerObject* object, const LLTransactionID& tid, diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 765b07ed8b..7e4ac1d7fb 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -204,4 +204,13 @@ right="400" name="Edit_btn" width="81" /> + <combo_box + follows="right|bottom" + height="23" + label="Experience..." + layout="topleft" + name="Experiences..." + width="196" + right="487" + top_pad="5" /> </panel> -- cgit v1.2.3 From b03918c73d47290597bdf101d9b013ebfab1f95f Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 11 Feb 2013 11:57:42 -0800 Subject: removed reference to std::string::back for linuxy compilation --- indra/newview/llappviewer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 262175e009..3a218b58da 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4812,7 +4812,7 @@ void LLAppViewer::idleExperienceCache() if (!region) return; std::string lookup_url=region->getCapability("GetExperienceInfo"); - if(!lookup_url.empty() && lookup_url.back() != '/') + if(!lookup_url.empty() && *lookup_url.rbegin() != '/') { lookup_url += '/'; } -- cgit v1.2.3 From 61874872a7b4b8909f835650ab6732e24c61ffa2 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 13 Feb 2013 14:20:35 -0800 Subject: Updated experience cache to latest web service api Added new CAP request for experiences the avatar can sign --- indra/llmessage/llexperiencecache.cpp | 156 ++++++++++++++++++++-------------- indra/llmessage/llexperiencecache.h | 36 +++++--- indra/newview/llpanelexperiences.cpp | 8 +- indra/newview/llpreviewscript.cpp | 10 +-- indra/newview/llviewerregion.cpp | 1 + 5 files changed, 128 insertions(+), 83 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 18b950b61e..1a6e74d123 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -34,12 +34,15 @@ #include "boost/tokenizer.hpp" +namespace LLExperienceCache +{ + typedef std::map<LLUUID, LLUUID> PrivateKeyMap; + PrivateKeyMap experinceKeyMap; + + void mapPrivateKeys(const LLSD& legacyKeys); -namespace LLExperienceCache -{ - const std::string& MAP_KEY = PUBLIC_KEY; std::string sLookupURL; typedef std::map<LLUUID, std::string> ask_queue_t; @@ -76,19 +79,14 @@ namespace LLExperienceCache row["expires"] = row["expires"].asReal() + LLFrameTimer::getTotalSeconds(); } - if(row.has(PUBLIC_KEY)) - { - sPendingQueue.erase(row[PUBLIC_KEY].asUUID()); - } - - if(row.has(PRIVATE_KEY)) + if(row.has(EXPERIENCE_ID)) { - sPendingQueue.erase(row[PRIVATE_KEY].asUUID()); + sPendingQueue.erase(row[EXPERIENCE_ID].asUUID()); } - if(row.has(CREATOR_KEY)) + if(row.has(OWNER_ID)) { - sPendingQueue.erase(row[CREATOR_KEY].asUUID()); + sPendingQueue.erase(row[OWNER_ID].asUUID()); } @@ -119,6 +117,31 @@ namespace LLExperienceCache sMaximumLookups = maximumLookups; } + void bootstrap(const LLSD& legacyKeys, int initialExpiration) + { + mapPrivateKeys(legacyKeys); + LLSD::array_const_iterator it = legacyKeys.beginArray(); + for(/**/; it != legacyKeys.endArray(); ++it) + { + LLSD experience = *it; + if(experience.has(EXPERIENCE_ID)) + { + if(!experience.has("expires")) + { + experience["expires"] = initialExpiration; + } + processExperience(experience[EXPERIENCE_ID].asUUID(), experience); + } + else + { + LL_WARNS("ExperienceCache") + << "Skipping bootstrap entry which is missing " << EXPERIENCE_ID + << LL_ENDL; + } + } + } + + bool expirationFromCacheControl(LLSD headers, F64 *expires) { @@ -227,7 +250,7 @@ namespace LLExperienceCache cache_t::const_iterator it =sCache.begin(); for( ; it != sCache.end() ; ++it) { - if(!it->second.has(PUBLIC_KEY) || it->second[PUBLIC_KEY].asUUID().isNull() || + if(!it->second.has(EXPERIENCE_ID) || it->second[EXPERIENCE_ID].asUUID().isNull() || it->second.has("error")) continue; @@ -261,7 +284,7 @@ namespace LLExperienceCache for( /**/ ; it != experiences.endArray(); ++it) { const LLSD& row = *it; - LLUUID public_key = row[PUBLIC_KEY].asUUID(); + LLUUID public_key = row[EXPERIENCE_ID].asUUID(); LL_INFOS("ExperienceCache") << "Received result for " << public_key @@ -280,7 +303,7 @@ namespace LLExperienceCache LL_INFOS("ExperienceCache") << "Clearing error result for " << id << " of type '" << it->asString() << "'" << LL_ENDL ; - erase(id, it->asString()); + erase(id); } } @@ -301,8 +324,8 @@ namespace LLExperienceCache for ( ; it != mKeys.end(); ++it) { LLSD exp; - exp["expires"]=retry_timestamp; - exp[it->second] = it->first; + exp[EXPIRES]=retry_timestamp; + exp[EXPERIENCE_ID] = it->first; exp["key_type"] = it->second; exp["uuid"] = it->first; exp["error"] = (LLSD::Integer)status; @@ -470,34 +493,9 @@ namespace LLExperienceCache } } - struct FindByKey + void erase( const LLUUID& key ) { - FindByKey(const LLUUID& key, const std::string& key_type):mKey(key), mKeyType(key_type){} - const LLUUID& mKey; - const std::string& mKeyType; - - bool operator()(cache_t::value_type& experience) - { - return experience.second.has(mKeyType) && experience.second[mKeyType].asUUID() == mKey; - } - }; - - - cache_t::iterator Find(const LLUUID& key, const std::string& key_type) - { - LL_INFOS("ExperienceCache") << " searching for " << key << " of type " << key_type << LL_ENDL; - if(key_type == MAP_KEY) - { - return sCache.find(key); - } - - return std::find_if(sCache.begin(), sCache.end(), FindByKey(key, key_type)); - } - - - void erase( const LLUUID& key, const std::string& key_type ) - { - cache_t::iterator it = Find(key, key_type); + cache_t::iterator it = sCache.find(key); if(it != sCache.end()) { @@ -518,15 +516,15 @@ namespace LLExperienceCache { if(exp.has("key_type") && exp.has("uuid")) { - fetch(exp["uuid"].asUUID(), exp["key_type"].asString(), true); + fetch(exp[EXPERIENCE_ID].asUUID(), true); sCache.erase(cur); } - else if(exp.has(MAP_KEY)) + else if(exp.has(EXPERIENCE_ID)) { - LLUUID id = exp[MAP_KEY]; - if(!id.isNull()) + LLUUID id = exp[EXPERIENCE_ID].asUUID(); + if(id.notNull()) { - fetch(id, MAP_KEY, true); + fetch(id, true); } } } @@ -534,12 +532,12 @@ namespace LLExperienceCache } - bool fetch( const LLUUID& key, const std::string& key_type, bool refresh/* = true*/ ) + bool fetch( const LLUUID& key, bool refresh/* = true*/ ) { - if(!key.isNull() && !isRequestPending(key) && (refresh || Find(key, key_type)==sCache.end())) + if(!key.isNull() && !isRequestPending(key) && (refresh || sCache.find(key)==sCache.end())) { - LL_INFOS("ExperienceCache") << " queue request for " << key_type << " " << key << LL_ENDL ; - sAskQueue[key]=key_type; + LL_INFOS("ExperienceCache") << " queue request for " << EXPERIENCE_ID << " " << key << LL_ENDL ; + sAskQueue[key]=EXPERIENCE_ID; return true; } @@ -548,20 +546,20 @@ namespace LLExperienceCache void insert(const LLSD& experience_data ) { - if(experience_data.has(MAP_KEY)) + if(experience_data.has(EXPERIENCE_ID)) { - sCache[experience_data[MAP_KEY].asUUID()]=experience_data; + sCache[experience_data[EXPERIENCE_ID].asUUID()]=experience_data; } else { - LL_WARNS("ExperienceCache") << ": Ignoring cache insert of experience which is missing " << MAP_KEY << LL_ENDL; + LL_WARNS("ExperienceCache") << ": Ignoring cache insert of experience which is missing " << EXPERIENCE_ID << LL_ENDL; } } - bool get( const LLUUID& key, const std::string& key_type, LLSD& experience_data ) + bool get( const LLUUID& key, LLSD& experience_data ) { if(key.isNull()) return false; - cache_t::const_iterator it = Find(key, key_type); + cache_t::const_iterator it = sCache.find(key); if (it != sCache.end()) { @@ -569,17 +567,17 @@ namespace LLExperienceCache return true; } - fetch(key, key_type); + fetch(key); return false; } - void get( const LLUUID& key, const std::string& key_type, callback_slot_t slot ) + void get( const LLUUID& key, callback_slot_t slot ) { if(key.isNull()) return; - cache_t::const_iterator it = Find(key, key_type); + cache_t::const_iterator it = sCache.find(key); if (it != sCache.end()) { // ...name already exists in cache, fire callback now @@ -590,7 +588,7 @@ namespace LLExperienceCache return; } - fetch(key, key_type); + fetch(key); // always store additional callback, even if request is pending signal_map_t::iterator sig_it = sSignalMap.find(key); @@ -610,3 +608,37 @@ namespace LLExperienceCache } } + + + +void LLExperienceCache::mapPrivateKeys( const LLSD& legacyKeys ) +{ + LLSD::array_const_iterator exp = legacyKeys.beginArray(); + for(/**/ ; exp != legacyKeys.endArray() ; ++exp) + { + if(exp->has(LLExperienceCache::EXPERIENCE_ID) && exp->has(LLExperienceCache::PRIVATE_KEY)) + { + experinceKeyMap[(*exp)[LLExperienceCache::PRIVATE_KEY].asUUID()]=(*exp)[LLExperienceCache::EXPERIENCE_ID].asUUID(); + } + } +} + + +LLUUID LLExperienceCache::getExperienceId(const LLUUID& private_key, bool null_if_not_found) +{ + if (private_key.isNull()) + return LLUUID::null; + + + PrivateKeyMap::const_iterator it=experinceKeyMap.find(private_key); + if(it == experinceKeyMap.end()) + { + if(null_if_not_found) + { + return LLUUID::null; + } + return private_key; + } + LL_WARNS("LLExperience") << "converted private key " << private_key << " to experience_id " << it->second << LL_ENDL; + return it->second; +} diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 396a244935..7a21bd9729 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -39,20 +39,28 @@ class LLUUID; namespace LLExperienceCache { - const std::string PUBLIC_KEY = "public-id"; - const std::string PRIVATE_KEY = "private-id"; - const std::string CREATOR_KEY = "creator-id"; + const std::string PRIVATE_KEY = "private_id"; + + const std::string EXPERIENCE_ID = "public_id"; + const std::string OWNER_ID = "owner_id"; const std::string NAME = "name"; const std::string PROPERTIES = "properties"; const std::string EXPIRES = "expires"; + const std::string DESCRIPTION = "description"; + + // should be in sync with experience-api/experiences/models.py + const int PROPERTY_INVALID = 1 << 0; + const int PROPERTY_NORMAL = 1 << 1; + const int PROPERTY_REGION = 1 << 2; + const int PROPERTY_PRIVILEGED = 1 << 3; + const int PROPERTY_GRID = 1 << 4; + const int PROPERTY_PRIVATE = 1 << 5; + const int PROPERTY_DISABLED = 1 << 6; + const int PROPERTY_SUSPENDED = 1 << 7; + - const int EXPERIENCE_INVALID = (1 << 0); - const int EXPERIENCE_NORMAL = (1 << 1); - const int EXPERIENCE_REGION = (1 << 2); const static F64 DEFAULT_EXPIRATION = 600.0; - // dummy name used when we have nothing else - const std::string DUMMY_NAME = "\?\?\?"; // Callback types for get() below typedef boost::signals2::signal<void (const LLSD& experience)> callback_signal_t; @@ -69,16 +77,20 @@ namespace LLExperienceCache void exportFile(std::ostream& ostr); void importFile(std::istream& istr); void initClass(); + void bootstrap(const LLSD& legacyKeys, int initialExpiration); - void erase(const LLUUID& key, const std::string& key_type); - bool fetch(const LLUUID& key, const std::string& key_type, bool refresh = false); + void erase(const LLUUID& key); + bool fetch(const LLUUID& key, bool refresh=false); void insert(LLSD& experience_data); - bool get(const LLUUID& key, const std::string& key_type, LLSD& experience_data); + bool get(const LLUUID& key, LLSD& experience_data); // If name information is in cache, callback will be called immediately. - void get(const LLUUID& key, const std::string& key_type, callback_slot_t slot); + void get(const LLUUID& key, callback_slot_t slot); const cache_t& getCached(); + + LLUUID getExperienceId(const LLUUID& private_key, bool null_if_not_found=false); + }; #endif // LL_LLEXPERIENCECACHE_H diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index 02a3c4c410..617ceef615 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -56,7 +56,7 @@ public: { LLUUID public_key = it->asUUID(); - LLExperienceCache::get(public_key, LLExperienceCache::PUBLIC_KEY, boost::bind(ExperienceResult, mParent, _1)); + LLExperienceCache::get(public_key, boost::bind(ExperienceResult, mParent, _1)); } } }; @@ -73,9 +73,9 @@ void LLPanelExperiences::addExperienceInfo(const LLSD& experience) item->setExperienceName(experience["error"].asString()); } - if(experience.has(LLExperienceCache::PUBLIC_KEY)) + if(experience.has(LLExperienceCache::DESCRIPTION)) { - item->setExperienceDescription(experience[LLExperienceCache::PUBLIC_KEY].asString()); + item->setExperienceDescription(experience[LLExperienceCache::DESCRIPTION].asString()); } mExperiencesList->addItem(item); @@ -228,7 +228,7 @@ void LLExperienceItem::init( LLSD* experience_data ) { if(experience_data) { - setExperienceDescription(experience_data->has(LLExperienceCache::PUBLIC_KEY)?(*experience_data)[LLExperienceCache::PUBLIC_KEY].asString() : std::string()); + setExperienceDescription(experience_data->has(LLExperienceCache::DESCRIPTION)?(*experience_data)[LLExperienceCache::DESCRIPTION].asString() : std::string()); setExperienceName(experience_data->has(LLExperienceCache::NAME)?(*experience_data)[LLExperienceCache::NAME].asString() : std::string()); } } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 98abd2c9dd..ba16c4dde8 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1229,13 +1229,13 @@ public: scriptCore->clearExperiences(); - LLSD experiences = content["experiences"]; + LLSD experiences = content["experience_ids"]; LLSD::array_const_iterator it = experiences.beginArray(); for( /**/ ; it != experiences.endArray(); ++it) { LLUUID public_key = it->asUUID(); - LLExperienceCache::get(public_key, LLExperienceCache::PUBLIC_KEY, boost::bind(AddExperienceResult, mParent, _1)); + LLExperienceCache::get(public_key, boost::bind(AddExperienceResult, mParent, _1)); } } }; @@ -1247,7 +1247,7 @@ void LLScriptEdCore::requestExperiences() LLViewerRegion* region = gAgent.getRegion(); if (region) { - std::string lookup_url=region->getCapability("GetExperiences"); + std::string lookup_url=region->getCapability("GetCreatorExperiences"); if(!lookup_url.empty()) { LLHTTPClient::get(lookup_url, new ExperienceResponder(getDerivedHandle<LLScriptEdCore>())); @@ -1270,9 +1270,9 @@ void LLScriptEdCore::clearExperiences() LLUUID LLScriptEdCore::getSelectedExperience()const { LLSD value = mExperiences->getSelectedValue(); - if(value.has(LLExperienceCache::PUBLIC_KEY)) + if(value.has(LLExperienceCache::EXPERIENCE_ID)) { - return value[LLExperienceCache::PUBLIC_KEY].asUUID(); + return value[LLExperienceCache::EXPERIENCE_ID].asUUID(); } return LLUUID::null; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 70fb5d08e5..351c371994 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1534,6 +1534,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("GetDisplayNames"); capabilityNames.append("GetExperiences"); capabilityNames.append("GetExperienceInfo"); + capabilityNames.append("GetCreatorExperiences"); capabilityNames.append("GetMesh"); capabilityNames.append("GetObjectCost"); capabilityNames.append("GetObjectPhysicsData"); -- cgit v1.2.3 From 2d9ad6ba687cacc81251e1ce57e323b0c2782db9 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 13 Mar 2013 08:53:51 -0700 Subject: Added group roles for experiences and updated the roles management UI to access them. --- indra/llcommon/roles_constants.h | 5 ++++- indra/newview/skins/default/xui/en/role_actions.xml | 12 ++++++++++++ indra/newview/skins/default/xui/en/strings.xml | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/llcommon/roles_constants.h b/indra/llcommon/roles_constants.h index effd15ea72..65ec290200 100644 --- a/indra/llcommon/roles_constants.h +++ b/indra/llcommon/roles_constants.h @@ -53,7 +53,7 @@ enum LLRoleChangeType // KNOWN HOLES: use these for any single bit powers you need // bit 0x1 << 46 -// bit 0x1 << 49 and above +// bit 0x1 << 51 and above // These powers were removed to make group roles simpler // bit 0x1 << 41 (GP_ACCOUNTING_VIEW) @@ -146,6 +146,9 @@ const U64 GP_SESSION_JOIN = 0x1LL << 16; //can join session const U64 GP_SESSION_VOICE = 0x1LL << 27; //can hear/talk const U64 GP_SESSION_MODERATOR = 0x1LL << 37; //can mute people's session +const U64 GP_EXPERIENCE_ADMIN = 0x1LL << 49; // has admin rights to any experiences owned by this group +const U64 GP_EXPERIENCE_CREATOR = 0x1LL << 50; // can sign scripts for experiences owned by this group + const U64 GP_DEFAULT_MEMBER = GP_ACCOUNTING_ACCOUNTABLE | GP_LAND_ALLOW_SET_HOME | GP_NOTICES_RECEIVE diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml index 89aef57cca..65acc14b6a 100644 --- a/indra/newview/skins/default/xui/en/role_actions.xml +++ b/indra/newview/skins/default/xui/en/role_actions.xml @@ -187,4 +187,16 @@ longdescription="Members in a Role with this Ability can control access and participation in group voice and text chat sessions." name="moderate group chat" value="37" /> </action_set> + <action_set + description="These Abilities include power to modify experiences owned by this group." + name="experience_tools_experience"> + <action description="Experience Admin" + longdescription="Members in a role with this ability can edit the meta-data for an experience." + name="experience admin" + value ="49" /> + <action description="Experience Creator" + longdescription="Members in a role with this ability can create scripts for an experience." + name="experience creator" + value ="50" /> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4383b98592..2e1e740d6f 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3907,4 +3907,7 @@ Try enclosing path to the editor with double quotes. <!-- Spell check settings floater --> <string name="UserDictionary">[User]</string> + <!-- Experience Tools strings --> + <string name="experience_tools_experience">Experience</string> + </strings> -- cgit v1.2.3 From d5308c19f7c622538d61e3ebb174338ce95a7b72 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 13 Mar 2013 10:24:30 -0700 Subject: Fixed up expiration code for the experience cache --- indra/llmessage/llexperiencecache.cpp | 52 +++++++++++++++++++---------------- indra/llmessage/llexperiencecache.h | 2 +- 2 files changed, 30 insertions(+), 24 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 1a6e74d123..219e68b51c 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -74,9 +74,9 @@ namespace LLExperienceCache sCache[public_key]=experience; LLSD & row = sCache[public_key]; - if(row.has("expires")) + if(row.has(EXPIRES)) { - row["expires"] = row["expires"].asReal() + LLFrameTimer::getTotalSeconds(); + row[EXPIRES] = row[EXPIRES].asReal() + LLFrameTimer::getTotalSeconds(); } if(row.has(EXPERIENCE_ID)) @@ -126,9 +126,9 @@ namespace LLExperienceCache LLSD experience = *it; if(experience.has(EXPERIENCE_ID)) { - if(!experience.has("expires")) + if(!experience.has(EXPIRES)) { - experience["expires"] = initialExpiration; + experience[EXPIRES] = initialExpiration; } processExperience(experience[EXPERIENCE_ID].asUUID(), experience); } @@ -154,7 +154,7 @@ namespace LLExperienceCache if (max_age_from_cache_control(cache_control, &max_age)) { LL_WARNS("ExperienceCache") - << "got expiration from headers, max_age " << max_age + << "got EXPIRES from headers, max_age " << max_age << LL_ENDL; F64 now = LLFrameTimer::getTotalSeconds(); *expires = now + (F64)max_age; @@ -251,7 +251,7 @@ namespace LLExperienceCache for( ; it != sCache.end() ; ++it) { if(!it->second.has(EXPERIENCE_ID) || it->second[EXPERIENCE_ID].asUUID().isNull() || - it->second.has("error")) + it->second.has("DoesNotExist") || (it->second.has(PROPERTIES) && it->second[PROPERTIES].asInteger() & PROPERTY_INVALID)) continue; experiences[it->first.asString()] = it->second; @@ -294,17 +294,18 @@ namespace LLExperienceCache } LLSD error_ids = content["error_ids"]; - LLSD::map_const_iterator errIt = error_ids.beginMap(); - for( /**/ ; errIt != error_ids.endMap() ; ++errIt ) + LLSD::array_const_iterator errIt = error_ids.beginArray(); + for( /**/ ; errIt != error_ids.endArray() ; ++errIt ) { - LLUUID id = LLUUID(errIt->first); - for( it = errIt->second.beginArray(); it != errIt->second.endArray() ; ++it) - { - LL_INFOS("ExperienceCache") << "Clearing error result for " << id - << " of type '" << it->asString() << "'" << LL_ENDL ; + LLUUID id = errIt->asUUID(); + LLSD exp; + exp[EXPIRES]=DEFAULT_EXPIRATION; + exp[EXPERIENCE_ID] = id; + exp[PROPERTIES]=PROPERTY_INVALID; + exp["DoesNotExist"]=true; - erase(id); - } + processExperience(id, exp); + LL_INFOS("ExperienceCache") << "Error result for " << id << LL_ENDL ; } LL_INFOS("ExperienceCache") << sCache.size() << " cached experiences" << LL_ENDL; @@ -329,6 +330,7 @@ namespace LLExperienceCache exp["key_type"] = it->second; exp["uuid"] = it->first; exp["error"] = (LLSD::Integer)status; + exp[PROPERTIES]=PROPERTY_INVALID; LLExperienceCache::processExperience(it->first, exp); } @@ -512,20 +514,24 @@ namespace LLExperienceCache cache_t::iterator cur = it; LLSD& exp = cur->second; ++it; - if(exp.has("expires") && exp["expires"].asReal() < now) + if(exp.has(EXPIRES) && exp[EXPIRES].asReal() < now) { - if(exp.has("key_type") && exp.has("uuid")) - { - fetch(exp[EXPERIENCE_ID].asUUID(), true); - sCache.erase(cur); - } - else if(exp.has(EXPERIENCE_ID)) + if(exp.has(EXPERIENCE_ID)) { LLUUID id = exp[EXPERIENCE_ID].asUUID(); - if(id.notNull()) + S32 properties = PROPERTY_INVALID; + if(exp.has(PROPERTIES)) + { + properties = exp[PROPERTIES].asInteger(); + } + if(id.notNull() && ((properties & PROPERTY_INVALID) == 0)) { fetch(id, true); } + else + { + sCache.erase(cur); + } } } } diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 7a21bd9729..1490c978b3 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -45,7 +45,7 @@ namespace LLExperienceCache const std::string OWNER_ID = "owner_id"; const std::string NAME = "name"; const std::string PROPERTIES = "properties"; - const std::string EXPIRES = "expires"; + const std::string EXPIRES = "expiration"; const std::string DESCRIPTION = "description"; // should be in sync with experience-api/experiences/models.py -- cgit v1.2.3 From 4bdecca57ec82a5dbc323432b7b5cb6aba9c1303 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 2 Apr 2013 15:02:23 -0700 Subject: Removed outdated experience property flags --- indra/llmessage/llexperiencecache.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 1490c978b3..fb00ea31f0 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -50,8 +50,6 @@ namespace LLExperienceCache // should be in sync with experience-api/experiences/models.py const int PROPERTY_INVALID = 1 << 0; - const int PROPERTY_NORMAL = 1 << 1; - const int PROPERTY_REGION = 1 << 2; const int PROPERTY_PRIVILEGED = 1 << 3; const int PROPERTY_GRID = 1 << 4; const int PROPERTY_PRIVATE = 1 << 5; -- cgit v1.2.3 From 6308f93c6adddc9d396e8d2527e97e0d02c4aa52 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 20 May 2013 10:04:29 -0700 Subject: WIP check in, testing GetMeta --- indra/newview/llpreviewscript.cpp | 71 ++++++++++++++++++++++++++++++++++++--- indra/newview/llpreviewscript.h | 11 +++--- indra/newview/llviewerregion.cpp | 3 +- 3 files changed, 76 insertions(+), 9 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index f39a5ffd62..59a206b4d1 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1244,6 +1244,33 @@ public: } }; +class ExperienceAssociationResponder : public LLHTTPClient::Responder +{ +public: + ExperienceAssociationResponder(const LLUUID& parent):mParent(parent) + { + } + + LLUUID mParent; + + virtual void result(const LLSD& content) + { + + LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); + + if(!scriptCore || !content.has("experience")) + return; + + scriptCore->setAssociatedExperience(content["experience"].asUUID()); + } + + virtual void error(U32 status, const std::string& reason) + { + llinfos << "Failed to look up associated script: " << status << ": " << reason << llendl; + } + +}; + void LLScriptEdCore::requestExperiences() { mExperiences->setEnabled(FALSE); @@ -1262,13 +1289,13 @@ void LLScriptEdCore::requestExperiences() void LLScriptEdCore::addExperienceInfo( const LLSD& experience ) { mExperiences->setEnabled(TRUE); - mExperiences->add(experience[LLExperienceCache::NAME], experience); + mExperiences->add(experience[LLExperienceCache::NAME], experience[LLExperienceCache::EXPERIENCE_ID].asUUID()); } void LLScriptEdCore::clearExperiences() { mExperiences->removeall(); - mExperiences->add("No Experience"); + mExperiences->add("No Experience", LLUUID::null); } LLUUID LLScriptEdCore::getSelectedExperience()const @@ -1281,6 +1308,19 @@ LLUUID LLScriptEdCore::getSelectedExperience()const return LLUUID::null; } +void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) +{ + mAssociatedExperience = experience_id; + if(experience_id.isNull()) + { + if(!mExperiences->setSelectedByValue(mAssociatedExperience, TRUE)) + { + mExperiences->setSelectedByValue(LLUUID::null, TRUE); + } + } +} + + @@ -1954,7 +1994,7 @@ void LLLiveLSLEditor::loadAsset() LLHost host(object->getRegion()->getIP(), object->getRegion()->getPort()); gMessageSystem->sendReliable(host); - */ + */ } } else @@ -1987,11 +2027,26 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id, lldebugs << "LLLiveLSLEditor::onLoadComplete: got uuid " << asset_id << llendl; LLUUID* xored_id = (LLUUID*)user_data; - + + LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", *xored_id); if(instance ) { + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url=region->getCapability("GetMetadata"); + //lookup_url = "http://127.0.0.1:12035/meta"; + if(!lookup_url.empty()) + { + lookup_url += "/"; + lookup_url += asset_id.asString(); + lookup_url += "/experience"; + LLHTTPClient::get(lookup_url, new ExperienceAssociationResponder(*xored_id)); + } + } + if( LL_ERR_NOERR == status ) { instance->loadScriptText(vfs, asset_id, type); @@ -2509,3 +2564,11 @@ BOOL LLLiveLSLEditor::monoChecked() const } return FALSE; } + +void LLLiveLSLEditor::setAssociatedExperience( const LLUUID& experience_id ) +{ + if(mScriptEd) + { + mScriptEd->setAssociatedExperience(experience_id); + } +} diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 27252d17a1..b29d16c58d 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -108,7 +108,8 @@ public: virtual bool hasAccelerators() const { return true; } void addExperienceInfo( const LLSD& experience ); void clearExperiences(); - LLUUID getSelectedExperience()const; + LLUUID getSelectedExperience()const; + void setAssociatedExperience( const LLUUID& experience_id ); private: void onBtnHelp(); @@ -139,7 +140,7 @@ private: void (*mLoadCallback)(void* userdata); void (*mSaveCallback)(void* userdata, BOOL close_after_save); void (*mSearchReplaceCallback) (void* userdata); - void* mUserdata; + void* mUserdata; LLComboBox *mFunctions; LLComboBox *mExperiences; BOOL mForceClose; @@ -153,6 +154,7 @@ private: BOOL mEnableSave; BOOL mHasScriptData; LLLiveLSLFile* mLiveFile; + LLUUID mAssociatedExperience; LLScriptEdContainer* mContainer; // parent view }; @@ -234,7 +236,8 @@ public: /*virtual*/ BOOL postBuild(); - void setIsNew() { mIsNew = TRUE; } + void setIsNew() { mIsNew = TRUE; } + void setAssociatedExperience( const LLUUID& experience_id ); private: virtual BOOL canClose(); @@ -285,7 +288,7 @@ private: S32 mPendingUploads; BOOL getIsModifiable() const { return mIsModifiable; } // Evaluated on load assert - + LLCheckBoxCtrl* mMonoCheckbox; BOOL mIsModifiable; }; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index cd33442f7c..421e354610 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1599,7 +1599,8 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("GetExperiences"); capabilityNames.append("GetExperienceInfo"); capabilityNames.append("GetCreatorExperiences"); - capabilityNames.append("GetMesh"); + capabilityNames.append("GetMesh"); + capabilityNames.append("GetMetadata"); capabilityNames.append("GetObjectCost"); capabilityNames.append("GetObjectPhysicsData"); capabilityNames.append("GetTexture"); -- cgit v1.2.3 From 10c2758a057b7287894acbaf909b21b7fc656c06 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 20 May 2013 22:07:41 -0700 Subject: fixed LLScriptEdCore::getSelectedExperience --- indra/newview/llpreviewscript.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 59a206b4d1..0d7a8678a1 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1300,12 +1300,7 @@ void LLScriptEdCore::clearExperiences() LLUUID LLScriptEdCore::getSelectedExperience()const { - LLSD value = mExperiences->getSelectedValue(); - if(value.has(LLExperienceCache::EXPERIENCE_ID)) - { - return value[LLExperienceCache::EXPERIENCE_ID].asUUID(); - } - return LLUUID::null; + return (LLUUID)mExperiences->getSelectedValue(); } void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) -- cgit v1.2.3 From 3d45290f8511e435f4a5bd03e485eb3b1758a332 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 20 May 2013 22:54:05 -0700 Subject: changing cast for the mac build --- indra/newview/llpreviewscript.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 0d7a8678a1..7c1b83dfa9 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1300,7 +1300,7 @@ void LLScriptEdCore::clearExperiences() LLUUID LLScriptEdCore::getSelectedExperience()const { - return (LLUUID)mExperiences->getSelectedValue(); + return mExperiences->getSelectedValue().asUUID(); } void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) -- cgit v1.2.3 From 37bd01152ac278e3401a96b12baf5505c5c1f789 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 21 May 2013 22:57:15 -0700 Subject: Update experience request to use the new post service. --- indra/newview/llpreviewscript.cpp | 40 +++++++++++++++++++++++++-------------- indra/newview/llpreviewscript.h | 1 + 2 files changed, 27 insertions(+), 14 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 7c1b83dfa9..bba0f1330c 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1290,6 +1290,10 @@ void LLScriptEdCore::addExperienceInfo( const LLSD& experience ) { mExperiences->setEnabled(TRUE); mExperiences->add(experience[LLExperienceCache::NAME], experience[LLExperienceCache::EXPERIENCE_ID].asUUID()); + if(mAssociatedExperience == experience[LLExperienceCache::EXPERIENCE_ID].asUUID()) + { + setAssociatedExperience(mAssociatedExperience); + } } void LLScriptEdCore::clearExperiences() @@ -1306,7 +1310,7 @@ LLUUID LLScriptEdCore::getSelectedExperience()const void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) { mAssociatedExperience = experience_id; - if(experience_id.isNull()) + if(experience_id.notNull()) { if(!mExperiences->setSelectedByValue(mAssociatedExperience, TRUE)) { @@ -2028,19 +2032,8 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id, if(instance ) { - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - std::string lookup_url=region->getCapability("GetMetadata"); - //lookup_url = "http://127.0.0.1:12035/meta"; - if(!lookup_url.empty()) - { - lookup_url += "/"; - lookup_url += asset_id.asString(); - lookup_url += "/experience"; - LLHTTPClient::get(lookup_url, new ExperienceAssociationResponder(*xored_id)); - } - } + instance->fetchAssociatedExperience(asset_id); + if( LL_ERR_NOERR == status ) { @@ -2488,6 +2481,25 @@ void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* use delete data; } +void LLLiveLSLEditor::fetchAssociatedExperience(const LLUUID& asset_id) +{ + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url=region->getCapability("GetMetadata"); + if(!lookup_url.empty()) + { + LLSD request; + request["asset-id"]=asset_id; + LLSD fields; + fields.append("experience"); + request["fields"] = fields; + LLHTTPClient::post(lookup_url, request, new ExperienceAssociationResponder(getKey())); + } + } +} + + BOOL LLLiveLSLEditor::canClose() { return (mScriptEd->canClose()); diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index b29d16c58d..28e71b111a 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -238,6 +238,7 @@ public: void setIsNew() { mIsNew = TRUE; } void setAssociatedExperience( const LLUUID& experience_id ); + void fetchAssociatedExperience(const LLUUID& asset_id); private: virtual BOOL canClose(); -- cgit v1.2.3 From 08a1ae6839f07aeadb58326208c2c01b2ef667c3 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 6 Aug 2013 16:05:09 -0700 Subject: Checkpoint script editor --- indra/newview/llfloaterscriptexperience.cpp | 13 + indra/newview/llfloaterscriptexperience.h | 45 ++ indra/newview/llpreviewscript.cpp | 91 +++- indra/newview/llpreviewscript.h | 15 +- .../skins/default/xui/en/panel_script_ed.xml | 509 ++++++++++++--------- .../default/xui/en/panel_script_experience.xml | 97 ++++ 6 files changed, 544 insertions(+), 226 deletions(-) create mode 100644 indra/newview/llfloaterscriptexperience.cpp create mode 100644 indra/newview/llfloaterscriptexperience.h create mode 100644 indra/newview/skins/default/xui/en/panel_script_experience.xml (limited to 'indra') diff --git a/indra/newview/llfloaterscriptexperience.cpp b/indra/newview/llfloaterscriptexperience.cpp new file mode 100644 index 0000000000..497522e821 --- /dev/null +++ b/indra/newview/llfloaterscriptexperience.cpp @@ -0,0 +1,13 @@ +#include "llviewerprecompiledheaders.h" + +#include "llfloaterscriptexperience.h" + +LLFloaterScriptExperience::LLFloaterScriptExperience(const LLSD& data) + :LLFloater(data) +{ +} + +BOOL LLFloaterScriptExperience::postBuild() +{ + return TRUE; +} diff --git a/indra/newview/llfloaterscriptexperience.h b/indra/newview/llfloaterscriptexperience.h new file mode 100644 index 0000000000..c79ff78131 --- /dev/null +++ b/indra/newview/llfloaterscriptexperience.h @@ -0,0 +1,45 @@ +/** + * @file llfloaterscriptexperience.h + * @brief LLFloaterScriptExperience 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_LLFLOATERSCRIPTEXPERIENCE_H +#define LL_LLFLOATERSCRIPTEXPERIENCE_H + +#include "llfloater.h" + +class LLFloaterScriptExperience : + public LLFloater +{ +public: + LLFloaterScriptExperience(const LLSD& data); + +protected: + /*virtual*/ BOOL postBuild(); + +private: + +}; + +#endif //LL_LLFLOATERSCRIPTEXPERIENCE_H diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index bba0f1330c..ef2eb98ce9 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -378,9 +378,43 @@ LLScriptEdCore::~LLScriptEdCore() void LLScriptEdCore::experienceChanged() { enableSave(TRUE); - getChildView("Save_btn")->setEnabled(true); + getChildView("Save_btn")->setEnabled(TRUE); + mAssociatedExperience = mExperiences->getSelectedValue().asUUID(); } +void LLScriptEdCore::onToggleExperience( LLUICtrl *ui, void* userdata ) +{ + LLScriptEdCore* self = (LLScriptEdCore*)userdata; + BOOL checked = self->mExperienceEnabled->get(); + BOOL expand = checked && self->mAssociatedExperience.isNull(); + self->mExpandExperience->setToggleState(expand); + self->mExpandExperience->setEnabled(checked); + self->mExperienceDetails->setVisible(expand); + if(!checked) + { + if(self->mAssociatedExperience.notNull()) + { + self->enableSave(TRUE); + } + self->setAssociatedExperience(LLUUID::null); + } + else if (expand) + { + self->mExperiences->selectFirstItem(); + self->setAssociatedExperience(self->mExperiences->getSelectedValue().asUUID()); + self->enableSave(TRUE); + } +} + +void LLScriptEdCore::onToggleExperienceDetails( void* userdata ) +{ + LLScriptEdCore* self = (LLScriptEdCore*)userdata; + BOOL checked = self->mExperienceEnabled->get(); + BOOL expanded = self->mExpandExperience->getToggleState(); + self->mExperienceDetails->setVisible(checked && expanded); +} + + BOOL LLScriptEdCore::postBuild() { mErrorList = getChild<LLScrollListCtrl>("lsl errors"); @@ -390,6 +424,14 @@ BOOL LLScriptEdCore::postBuild() mExperiences = getChild<LLComboBox>("Experiences..."); mExperiences->setCommitCallback(boost::bind(&LLScriptEdCore::experienceChanged, this)); + mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp"); + mExpandExperience = getChild<LLButton>("Expand Experience"); + mExperienceDetails = getChild<LLUICtrl>("Experience Details"); + mExpandExperience->setClickedCallback(boost::bind(&LLScriptEdCore::onToggleExperienceDetails, this)); + + childSetCommitCallback("enable_xp", onToggleExperience, this); + + childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this); mEditor = getChild<LLViewerTextEditor>("Script Editor"); @@ -1258,10 +1300,15 @@ public: LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); - if(!scriptCore || !content.has("experience")) + if(!scriptCore) return; - scriptCore->setAssociatedExperience(content["experience"].asUUID()); + LLUUID id; + if(content.has("experience")) + { + id=content["experience"].asUUID(); + } + scriptCore->setAssociatedExperience(id); } virtual void error(U32 status, const std::string& reason) @@ -1294,31 +1341,53 @@ void LLScriptEdCore::addExperienceInfo( const LLSD& experience ) { setAssociatedExperience(mAssociatedExperience); } + LLUICtrl* no_experiences=getChild<LLUICtrl>("No Experiences"); + if(no_experiences) + { + no_experiences->setVisible(FALSE); + } } void LLScriptEdCore::clearExperiences() { mExperiences->removeall(); - mExperiences->add("No Experience", LLUUID::null); + mExperiences->setEnabled(FALSE); + LLUICtrl* no_experiences=getChild<LLUICtrl>("No Experiences"); + if(no_experiences) + { + no_experiences->setVisible(TRUE); + } } -LLUUID LLScriptEdCore::getSelectedExperience()const +LLUUID LLScriptEdCore::getAssociatedExperience()const { - return mExperiences->getSelectedValue().asUUID(); + return mAssociatedExperience; } void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) { + mExperienceEnabled->setEnabled(TRUE); mAssociatedExperience = experience_id; if(experience_id.notNull()) { - if(!mExperiences->setSelectedByValue(mAssociatedExperience, TRUE)) - { - mExperiences->setSelectedByValue(LLUUID::null, TRUE); - } + LLExperienceCache::get(experience_id, boost::bind(&LLScriptEdCore::addAssociatedExperience, this, _1)); } } +void LLScriptEdCore::addAssociatedExperience(const LLSD& experience) +{ + + if(mExperiences->setSelectedByValue(mAssociatedExperience, TRUE)) + { + mExperienceEnabled->set(TRUE); + mExpandExperience->setEnabled(TRUE); + } + else + { + mExperiences->add(experience[LLExperienceCache::NAME], experience[LLExperienceCache::EXPERIENCE_ID].asUUID(), ADD_TOP, FALSE); + mExperienceEnabled->set(FALSE); + } +} @@ -2284,7 +2353,7 @@ void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/) BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get(); if (!url.empty()) { - uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running, mScriptEd->getSelectedExperience()); + uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running, mScriptEd->getAssociatedExperience()); } else if (gAssetStorage) { diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 28e71b111a..043bf9c0b7 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -100,7 +100,9 @@ public: static void onBtnInsertSample(void*); static void onBtnInsertFunction(LLUICtrl*, void*); static void onBtnLoadFromFile(void*); - static void onBtnSaveToFile(void*); + static void onBtnSaveToFile(void*); + static void onToggleExperience(LLUICtrl *ui, void* userdata); + static void onToggleExperienceDetails(void* userdata); static bool enableSaveToFileMenu(void* userdata); static bool enableLoadFromFileMenu(void* userdata); @@ -108,7 +110,8 @@ public: virtual bool hasAccelerators() const { return true; } void addExperienceInfo( const LLSD& experience ); void clearExperiences(); - LLUUID getSelectedExperience()const; + LLUUID getAssociatedExperience()const; + void setAssociatedExperience( const LLUUID& experience_id ); private: @@ -125,7 +128,8 @@ private: void enableSave(BOOL b) {mEnableSave = b;} void requestExperiences(); - void experienceChanged(); + void experienceChanged(); + void addAssociatedExperience(const LLSD& experience); protected: void deleteBridges(); @@ -142,7 +146,10 @@ private: void (*mSearchReplaceCallback) (void* userdata); void* mUserdata; LLComboBox *mFunctions; - LLComboBox *mExperiences; + LLComboBox *mExperiences; + LLCheckBoxCtrl *mExperienceEnabled; + LLUICtrl *mExperienceDetails; + LLButton *mExpandExperience; BOOL mForceClose; LLPanel* mCodePanel; LLScrollListCtrl* mErrorList; diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 7e4ac1d7fb..331157d713 100755 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -1,216 +1,303 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - bevel_style="none" - border_style="line" - follows="left|top|right|bottom" - height="522" - layout="topleft" - left="0" - name="script panel" - width="497"> - <panel.string - name="loading"> - Loading... - </panel.string> - <panel.string - name="can_not_view"> - You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. - </panel.string> - <panel.string - name="public_objects_can_not_run"> - Public Objects cannot run scripts - </panel.string> - <panel.string - name="script_running"> - Running - </panel.string> - <panel.string - name="Title"> - Script: [NAME] - </panel.string> - <panel.string - name="external_editor_not_set"> - Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting. - </panel.string> - <menu_bar - bg_visible="false" - follows="left|top" - height="18" - layout="topleft" - left="0" - mouse_opaque="false" - name="script_menu" - width="476"> - <menu - top="0" - height="62" - label="File" - layout="topleft" - left="0" - mouse_opaque="false" - name="File" - width="138"> - <menu_item_call - label="Save" - layout="topleft" - name="Save" /> - <menu_item_separator - layout="topleft" /> - <menu_item_call - label="Revert All Changes" - layout="topleft" - name="Revert All Changes" /> - <menu_item_separator - layout="topleft" /> - <menu_item_call - label="Load from file..." - layout="topleft" - name="LoadFromFile" /> - <menu_item_call - label="Save to file..." - layout="topleft" - name="SaveToFile" /> - </menu> - <menu - top="0" - height="198" - label="Edit" - layout="topleft" - mouse_opaque="false" - name="Edit" - width="139"> - <menu_item_call - enabled="false" - label="Undo" - layout="topleft" - name="Undo" /> - <menu_item_call - enabled="false" - label="Redo" - layout="topleft" - name="Redo" /> - <menu_item_separator - layout="topleft" /> - <menu_item_call - enabled="false" - label="Cut" - layout="topleft" - name="Cut" /> - <menu_item_call - enabled="false" - label="Copy" - layout="topleft" - name="Copy" /> - <menu_item_call - enabled="false" - label="Paste" - layout="topleft" - name="Paste" /> - <menu_item_separator - layout="topleft" - name="separator2" /> - <menu_item_call - label="Select All" - layout="topleft" - name="Select All" /> - <menu_item_call - enabled="false" - label="Deselect" - layout="topleft" - name="Deselect" /> - <menu_item_separator - layout="topleft" - name="separator3" /> - <menu_item_call - label="Search / Replace..." - layout="topleft" - name="Search / Replace..." /> - </menu> - <menu - top="0" - height="34" - label="Help" - layout="topleft" - mouse_opaque="false" - name="Help" - width="112"> - <menu_item_call - label="Help..." - layout="topleft" - name="Help..." /> - <menu_item_call - label="Keyword Help..." - layout="topleft" - name="Keyword Help..." /> - </menu> - </menu_bar> - <text_editor - left="0" - type="string" - length="1" - follows="left|top|right|bottom" - font="Monospace" - height="376" - ignore_tab="false" - layout="topleft" - max_length="65536" - name="Script Editor" - text_readonly_color="DkGray" - width="487" - show_line_numbers="true" - enable_tooltip_paste="true" - word_wrap="true"> - Loading... - </text_editor> - <scroll_list - top_pad="10" + bevel_style="none" + border_style="line" + follows="left|top|right|bottom" + height="730" + layout="topleft" + left="0" + name="script panel" + width="497"> + <panel.string + name="loading"> + Loading... + </panel.string> + <panel.string + name="can_not_view"> + You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. + </panel.string> + <panel.string + name="public_objects_can_not_run"> + Public Objects cannot run scripts + </panel.string> + <panel.string + name="script_running"> + Running + </panel.string> + <panel.string + name="Title"> + Script: [NAME] + </panel.string> + <panel.string + name="external_editor_not_set"> + Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting. + </panel.string> + <menu_bar + bg_visible="false" + follows="left|top" + height="18" + layout="topleft" left="0" - follows="left|right|bottom" - height="60" - layout="topleft" - name="lsl errors" - width="487" /> - <text - follows="left|bottom" - height="12" - layout="topleft" - left="0" - name="line_col" - width="128" /> - <combo_box - follows="left|bottom" - height="23" - label="Insert..." - layout="topleft" - name="Insert..." - width="128" /> - <button - follows="right|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - top_pad="-35" - right="487" - name="Save_btn" - width="81" /> - <button - enabled="false" - follows="right|bottom" - height="23" - label="Edit..." - layout="topleft" - top_pad="-23" - right="400" - name="Edit_btn" - width="81" /> - <combo_box - follows="right|bottom" - height="23" - label="Experience..." + mouse_opaque="false" + name="script_menu" + width="476"> + <menu + top="0" + height="62" + label="File" layout="topleft" - name="Experiences..." - width="196" - right="487" - top_pad="5" /> + left="0" + mouse_opaque="false" + name="File" + width="138"> + <menu_item_call + label="Save" + layout="topleft" + name="Save" /> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Revert All Changes" + layout="topleft" + name="Revert All Changes" /> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Load from file..." + layout="topleft" + name="LoadFromFile" /> + <menu_item_call + label="Save to file..." + layout="topleft" + name="SaveToFile" /> + </menu> + <menu + top="0" + height="198" + label="Edit" + layout="topleft" + mouse_opaque="false" + name="Edit" + width="139"> + <menu_item_call + enabled="false" + label="Undo" + layout="topleft" + name="Undo" /> + <menu_item_call + enabled="false" + label="Redo" + layout="topleft" + name="Redo" /> + <menu_item_separator + layout="topleft" /> + <menu_item_call + enabled="false" + label="Cut" + layout="topleft" + name="Cut" /> + <menu_item_call + enabled="false" + label="Copy" + layout="topleft" + name="Copy" /> + <menu_item_call + enabled="false" + label="Paste" + layout="topleft" + name="Paste" /> + <menu_item_separator + layout="topleft" + name="separator2" /> + <menu_item_call + label="Select All" + layout="topleft" + name="Select All" /> + <menu_item_call + enabled="false" + label="Deselect" + layout="topleft" + name="Deselect" /> + <menu_item_separator + layout="topleft" + name="separator3" /> + <menu_item_call + label="Search / Replace..." + layout="topleft" + name="Search / Replace..." /> + </menu> + <menu + top="0" + height="34" + label="Help" + layout="topleft" + mouse_opaque="false" + name="Help" + width="112"> + <menu_item_call + label="Help..." + layout="topleft" + name="Help..." /> + <menu_item_call + label="Keyword Help..." + layout="topleft" + name="Keyword Help..." /> + </menu> + </menu_bar> + <layout_stack width="497" + height="700" + orientation="vertical" + follows="all"> + <layout_panel auto_resize="true" + height="350" + follows="all" > + <text_editor + left="3" + type="string" + length="1" + follows="left|top|right|bottom" + font="Monospace" + height="376" + ignore_tab="false" + layout="topleft" + max_length="65536" + name="Script Editor" + text_readonly_color="DkGray" + width="482" + show_line_numbers="true" + enable_tooltip_paste="true" + word_wrap="true"> + Loading... + </text_editor> + </layout_panel> + <layout_panel auto_resize="false" + height="115"> + <scroll_list + top_pad="10" + left="3" + follows="left|right|bottom" + height="60" + layout="topleft" + name="lsl errors" + width="482" /> + <text + follows="left|bottom" + height="12" + layout="topleft" + left="11" + name="line_col" + width="128" /> + <combo_box + follows="left|bottom" + height="23" + label="Insert..." + layout="topleft" + name="Insert..." + width="128" + left="3"/> + <button + follows="right|bottom" + height="23" + label="Save" + label_selected="Save" + layout="topleft" + top_pad="-35" + right="485" + name="Save_btn" + width="81" /> + <button + enabled="false" + follows="right|bottom" + height="23" + label="Edit..." + layout="topleft" + top_pad="-23" + right="400" + name="Edit_btn" + width="81" /> + </layout_panel> + <layout_panel auto_resize="false" + height="45" width="497"> + <layout_stack height="45" + width="497" + orientation="horizontal" follows="left|top|right"> + <layout_panel auto_resize="true" + width="197" + height="45" + follows="let|top|right" left="0"> + <button name="Expand Experience" + width="197" + height="35" + is_toggle="true" + tab_stop="false" + pad_left="35" + left="0" + label="Experience" + halign="left" + enabled="false" + handle_right_mouse="false" + follows="top|left|right" + image_unselected="MarketplaceBtn_Off" + image_selected="MarketplaceBtn_Selected"> + </button> + </layout_panel> + <layout_panel auto_resize="false" width="150" left="203" follows="top|right"> + <check_box + follows="top|right" + height="25" + enabled="false" + label="Use Experience:" + name="enable_xp"/> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel visible="false" + auto_resize="false" + height="65" + name="Experience Details"> + <layout_stack + follows="top|left|right" + + width="480" + height="65" + name="xp_details" + left="4" + top="0" + orientation="horizontal" + layout="topleft" + visible="true"> + <layout_panel width="157" + height="65" + auto_resize="false"> + <text bottom_delta="25"> + Associate with: + </text> + </layout_panel> + + <layout_panel width="330" + height="65" + auto_resize="true"> + <combo_box left="0" + bottom_delta="33" + label="Choose Experience..." + name="Experiences..." + follows="top|left|right" + /> + </layout_panel> + </layout_stack> + <text + follows="top|left|right" + width="497" + height="15" + bottom_delta="-12" + left="0" + halign="center" + name="No Experiences" + visible="true" + text_color="AlertCautionTextColor"> + You are not a contributor to any experiences. + </text> + + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_script_experience.xml b/indra/newview/skins/default/xui/en/panel_script_experience.xml new file mode 100644 index 0000000000..e798638751 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_script_experience.xml @@ -0,0 +1,97 @@ +<panel + name="script_experience" + title="EXPERIENCE" + width="400" + follows="top|left|right" + top="0" + left="0" + layout="topleft"> + <!-- <floater.string name="EXPERIENCE">EXPERIENCE!!!!</floater.string> + + <floater.string name="Script:">Script:</floater.string> + <floater.string name="Associated with:">Associated with:</floater.string> + <floater.string name="You can contribute:">You can contribute:</floater.string> + <floater.string name="Associate with:">Associate with:</floater.string> + <floater.string name="Yes">Yes</floater.string> + <floater.string name="No">No</floater.string> + <floater.string name="(none)"></floater.string> + <floater.string name="Choose Experience...">Choose Experience...</floater.string> + <floater.string name="You are not a contributor to any experiences.">You are not a contributor to any experiences.</floater.string> + --> + + <button name="Expand Experience" width="200" + height="35" + is_toggle="true" + tab_stop="false" + pad_left="35" + top="0" + left="3" + label="Experience" + halign="left" + handle_right_mouse="false" + follows="top|left|right" + image_unselected="MarketplaceBtn_Off" + image_selected="MarketplaceBtn_Selected"> + </button> + <check_box + follows="top|right" height="25" label="Uses Experience" left="215" width="0" top="0" name="enable_xp" + /> + <layout_stack + follows="top|left|right" + + width="384" + height="140" + name="xp_details" + left="4" + top="45" + orientation="horizontal" + layout="topleft" + visible="false"> + <layout_panel width="120" + height="140"> + <text > + Script: + </text> + <text bottom_delta="25"> + Associated with: + </text> + <text bottom_delta="25"> + You can contribute: + </text> + <text bottom_delta="25"> + Associate with: + </text> + </layout_panel> + + <layout_panel width="250" + height="140"> + <text > + EasySit Animator 1.2.4 + </text> + <text bottom_delta="25" + text_color="HTMLLinkColor" font.style="UNDERLINE"> + Kyle's Superhero RPG + </text> + <text bottom_delta="25"> + Yes + </text> + <combo_box left="0" bottom_delta="33" + label="Choose Experience..." + name="Experiences..." + follows="top|left|right" + /> + </layout_panel> + </layout_stack> + <text + follows="top|left|right" + width="400" + height="15" + bottom_delta="-12" + left="0" + halign="center" + name="No Experiences" + visible="false" + text_color="AlertCautionTextColor"> + You are not a contributor to any experiences. + </text> +</panel> -- cgit v1.2.3 From 6354ad379d0850b4cc3969130fb1b30b0e2c0ee9 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 8 Aug 2013 09:26:09 -0700 Subject: Simplified the experience panel to only the required elements --- indra/newview/llpreviewscript.cpp | 259 ++++++++++----------- indra/newview/llpreviewscript.h | 10 +- .../default/xui/en/floater_live_lsleditor.xml | 2 +- .../skins/default/xui/en/panel_script_ed.xml | 257 ++++++++------------ 4 files changed, 233 insertions(+), 295 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index ef2eb98ce9..bd8f65e767 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -119,6 +119,57 @@ static bool have_script_upload_cap(LLUUID& object_id) return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty()); } +class ExperienceAssociationResponder : public LLHTTPClient::Responder +{ +public: + ExperienceAssociationResponder(const LLUUID& parent):mParent(parent) + { + } + + LLUUID mParent; + + virtual void result(const LLSD& content) + { + + LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); + + if(!scriptCore) + return; + + LLUUID id; + if(content.has("experience")) + { + id=content["experience"].asUUID(); + } + scriptCore->setAssociatedExperience(id); + } + + virtual void error(U32 status, const std::string& reason) + { + llinfos << "Failed to look up associated script: " << status << ": " << reason << llendl; + } + +}; + +class ExperienceResponder : public LLHTTPClient::Responder +{ +public: + ExperienceResponder(const LLHandle<LLScriptEdCore>& parent):mParent(parent) + { + } + + LLHandle<LLScriptEdCore> mParent; + + virtual void result(const LLSD& content) + { + LLScriptEdCore* scriptCore = mParent.get(); + if(!scriptCore) + return; + + scriptCore->setExperienceIds(content["experience_ids"]); + } +}; + /// --------------------------------------------------------------------------- /// LLLiveLSLFile /// --------------------------------------------------------------------------- @@ -377,44 +428,34 @@ LLScriptEdCore::~LLScriptEdCore() void LLScriptEdCore::experienceChanged() { - enableSave(TRUE); - getChildView("Save_btn")->setEnabled(TRUE); - mAssociatedExperience = mExperiences->getSelectedValue().asUUID(); + if(mAssociatedExperience != mExperiences->getSelectedValue().asUUID()) + { + enableSave(TRUE); + getChildView("Save_btn")->setEnabled(TRUE); + mAssociatedExperience = mExperiences->getSelectedValue().asUUID(); + } } void LLScriptEdCore::onToggleExperience( LLUICtrl *ui, void* userdata ) { LLScriptEdCore* self = (LLScriptEdCore*)userdata; - BOOL checked = self->mExperienceEnabled->get(); - BOOL expand = checked && self->mAssociatedExperience.isNull(); - self->mExpandExperience->setToggleState(expand); - self->mExpandExperience->setEnabled(checked); - self->mExperienceDetails->setVisible(expand); - if(!checked) + + LLUUID id; + if(self->mExperienceEnabled->get()) { - if(self->mAssociatedExperience.notNull()) + if(self->mAssociatedExperience.isNull()) { - self->enableSave(TRUE); + id=self->mExperienceIds.beginArray()->asUUID(); } - self->setAssociatedExperience(LLUUID::null); } - else if (expand) + + if(id != self->mAssociatedExperience) { - self->mExperiences->selectFirstItem(); - self->setAssociatedExperience(self->mExperiences->getSelectedValue().asUUID()); self->enableSave(TRUE); } + self->setAssociatedExperience(id); } -void LLScriptEdCore::onToggleExperienceDetails( void* userdata ) -{ - LLScriptEdCore* self = (LLScriptEdCore*)userdata; - BOOL checked = self->mExperienceEnabled->get(); - BOOL expanded = self->mExpandExperience->getToggleState(); - self->mExperienceDetails->setVisible(checked && expanded); -} - - BOOL LLScriptEdCore::postBuild() { mErrorList = getChild<LLScrollListCtrl>("lsl errors"); @@ -425,9 +466,6 @@ BOOL LLScriptEdCore::postBuild() mExperiences->setCommitCallback(boost::bind(&LLScriptEdCore::experienceChanged, this)); mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp"); - mExpandExperience = getChild<LLButton>("Expand Experience"); - mExperienceDetails = getChild<LLUICtrl>("Experience Details"); - mExpandExperience->setClickedCallback(boost::bind(&LLScriptEdCore::onToggleExperienceDetails, this)); childSetCommitCallback("enable_xp", onToggleExperience, this); @@ -1247,152 +1285,107 @@ bool LLScriptEdCore::enableLoadFromFileMenu(void* userdata) return (self && self->mEditor) ? self->mEditor->canLoadOrSaveToFile() : FALSE; } - -void AddExperienceResult(LLHandle<LLScriptEdCore> panel, const LLSD& experience) +LLUUID LLScriptEdCore::getAssociatedExperience()const { - LLScriptEdCore* scriptCore = panel.get(); - if(scriptCore) - { - scriptCore->addExperienceInfo(experience); - } + return mAssociatedExperience; } - -class ExperienceResponder : public LLHTTPClient::Responder +void LLScriptEdCore::setExperienceIds( const LLSD& experience_ids ) { -public: - ExperienceResponder(const LLHandle<LLScriptEdCore>& parent):mParent(parent) - { - } - - LLHandle<LLScriptEdCore> mParent; - - virtual void result(const LLSD& content) - { - LLScriptEdCore* scriptCore = mParent.get(); - if(!scriptCore) - return; - - scriptCore->clearExperiences(); + mExperienceIds=experience_ids; + updateExperiencePanel(); +} - LLSD experiences = content["experience_ids"]; - LLSD::array_const_iterator it = experiences.beginArray(); - for( /**/ ; it != experiences.endArray(); ++it) - { - LLUUID public_key = it->asUUID(); - LLExperienceCache::get(public_key, boost::bind(AddExperienceResult, mParent, _1)); - } - } -}; - -class ExperienceAssociationResponder : public LLHTTPClient::Responder +void LLScriptEdCore::updateExperiencePanel() { -public: - ExperienceAssociationResponder(const LLUUID& parent):mParent(parent) - { - } + BOOL editable = mEditor->getEnabled(); - LLUUID mParent; - - virtual void result(const LLSD& content) + if(mAssociatedExperience.isNull()) { - - LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); - - if(!scriptCore) - return; - - LLUUID id; - if(content.has("experience")) + mExperienceEnabled->set(FALSE); + mExperiences->setVisible(FALSE); + if(mExperienceIds.size()>0) { - id=content["experience"].asUUID(); + mExperienceEnabled->setEnabled(TRUE); + mExperienceEnabled->setToolTip(getString("add_experiences")); } - scriptCore->setAssociatedExperience(id); + else + { + mExperienceEnabled->setEnabled(FALSE); + mExperienceEnabled->setToolTip(getString("no_experiences")); + } + getChild<LLButton>("view_profile")->setVisible(FALSE); } - - virtual void error(U32 status, const std::string& reason) + else { - llinfos << "Failed to look up associated script: " << status << ": " << reason << llendl; + mExperienceEnabled->setToolTip(getString("experience_enabled")); + mExperienceEnabled->setEnabled(editable); + mExperienceEnabled->set(TRUE); + mExperiences->setVisible(TRUE); + getChild<LLButton>("view_profile")->setVisible(TRUE); + buildExperienceList(); } - -}; - -void LLScriptEdCore::requestExperiences() -{ - mExperiences->setEnabled(FALSE); - - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - std::string lookup_url=region->getCapability("GetCreatorExperiences"); - if(!lookup_url.empty()) - { - LLHTTPClient::get(lookup_url, new ExperienceResponder(getDerivedHandle<LLScriptEdCore>())); - } - } } -void LLScriptEdCore::addExperienceInfo( const LLSD& experience ) -{ - mExperiences->setEnabled(TRUE); - mExperiences->add(experience[LLExperienceCache::NAME], experience[LLExperienceCache::EXPERIENCE_ID].asUUID()); - if(mAssociatedExperience == experience[LLExperienceCache::EXPERIENCE_ID].asUUID()) +void LLScriptEdCore::addExperienceInfo(const LLSD& experience, BOOL enabled) +{ + LLUUID id = experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); + EAddPosition position = (id == mAssociatedExperience)?ADD_TOP:ADD_BOTTOM; + LLScrollListItem* item=mExperiences->add(experience[LLExperienceCache::NAME], id, position ); + if(!enabled) { - setAssociatedExperience(mAssociatedExperience); - } - LLUICtrl* no_experiences=getChild<LLUICtrl>("No Experiences"); - if(no_experiences) - { - no_experiences->setVisible(FALSE); + item->setEnabled(FALSE); } } -void LLScriptEdCore::clearExperiences() +void LLScriptEdCore::buildExperienceList() { - mExperiences->removeall(); - mExperiences->setEnabled(FALSE); - LLUICtrl* no_experiences=getChild<LLUICtrl>("No Experiences"); - if(no_experiences) + mExperiences->clear(); + bool foundAssociated=false; + for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it) { - no_experiences->setVisible(TRUE); + LLUUID id = it->asUUID(); + foundAssociated |= (id == mAssociatedExperience); + LLExperienceCache::get(id, boost::bind(&LLScriptEdCore::addExperienceInfo, this, _1, TRUE)); + } + + if(!foundAssociated ) + { + LLExperienceCache::get(mAssociatedExperience, boost::bind(&LLScriptEdCore::addExperienceInfo, this, _1, FALSE)); } -} -LLUUID LLScriptEdCore::getAssociatedExperience()const -{ - return mAssociatedExperience; } + void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) { - mExperienceEnabled->setEnabled(TRUE); mAssociatedExperience = experience_id; - if(experience_id.notNull()) - { - LLExperienceCache::get(experience_id, boost::bind(&LLScriptEdCore::addAssociatedExperience, this, _1)); - } + updateExperiencePanel(); } -void LLScriptEdCore::addAssociatedExperience(const LLSD& experience) -{ - if(mExperiences->setSelectedByValue(mAssociatedExperience, TRUE)) + +void LLScriptEdCore::requestExperiences() +{ + if (!mEditor->getEnabled()) { - mExperienceEnabled->set(TRUE); - mExpandExperience->setEnabled(TRUE); + return; } - else + + LLViewerRegion* region = gAgent.getRegion(); + if (region) { - mExperiences->add(experience[LLExperienceCache::NAME], experience[LLExperienceCache::EXPERIENCE_ID].asUUID(), ADD_TOP, FALSE); - mExperienceEnabled->set(FALSE); + std::string lookup_url=region->getCapability("GetCreatorExperiences"); + if(!lookup_url.empty()) + { + LLHTTPClient::get(lookup_url, new ExperienceResponder(getDerivedHandle<LLScriptEdCore>())); + } } } - - /// --------------------------------------------------------------------------- /// LLScriptEdContainer /// --------------------------------------------------------------------------- diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 043bf9c0b7..9578396f91 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -102,17 +102,18 @@ public: static void onBtnLoadFromFile(void*); static void onBtnSaveToFile(void*); static void onToggleExperience(LLUICtrl *ui, void* userdata); - static void onToggleExperienceDetails(void* userdata); static bool enableSaveToFileMenu(void* userdata); static bool enableLoadFromFileMenu(void* userdata); virtual bool hasAccelerators() const { return true; } - void addExperienceInfo( const LLSD& experience ); - void clearExperiences(); + void addExperienceInfo( const LLSD& experience, BOOL enabled ); + void setExperienceIds(const LLSD& experience_ids); + void buildExperienceList(); LLUUID getAssociatedExperience()const; void setAssociatedExperience( const LLUUID& experience_id ); + void updateExperiencePanel(); private: void onBtnHelp(); @@ -148,8 +149,6 @@ private: LLComboBox *mFunctions; LLComboBox *mExperiences; LLCheckBoxCtrl *mExperienceEnabled; - LLUICtrl *mExperienceDetails; - LLButton *mExpandExperience; BOOL mForceClose; LLPanel* mCodePanel; LLScrollListCtrl* mErrorList; @@ -162,6 +161,7 @@ private: BOOL mHasScriptData; LLLiveLSLFile* mLiveFile; LLUUID mAssociatedExperience; + LLSD mExperienceIds; LLScriptEdContainer* mContainer; // parent view }; diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index 5cd7cd196d..562936ed80 100755 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -7,7 +7,7 @@ height="580" layout="topleft" min_height="271" - min_width="290" + min_width="328" name="script ed float" help_topic="script_ed_float" save_rect="true" diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 331157d713..18a8ddc1bf 100755 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -3,7 +3,7 @@ bevel_style="none" border_style="line" follows="left|top|right|bottom" - height="730" + height="515" layout="topleft" left="0" name="script panel" @@ -32,6 +32,18 @@ name="external_editor_not_set"> Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting. </panel.string> + <panel.string + name="experience_enabled"> + Uncheck to remove the current experience + </panel.string> + <panel.string + name="no_experiences"> + You are not authorized for any experiences + </panel.string> + <panel.string + name="add_experiences"> + Select to add an experience + </panel.string> <menu_bar bg_visible="false" follows="left|top" @@ -144,160 +156,93 @@ name="Keyword Help..." /> </menu> </menu_bar> - <layout_stack width="497" - height="700" - orientation="vertical" - follows="all"> - <layout_panel auto_resize="true" - height="350" - follows="all" > - <text_editor - left="3" - type="string" - length="1" - follows="left|top|right|bottom" - font="Monospace" - height="376" - ignore_tab="false" - layout="topleft" - max_length="65536" - name="Script Editor" - text_readonly_color="DkGray" - width="482" - show_line_numbers="true" - enable_tooltip_paste="true" - word_wrap="true"> - Loading... - </text_editor> - </layout_panel> - <layout_panel auto_resize="false" - height="115"> - <scroll_list - top_pad="10" - left="3" - follows="left|right|bottom" - height="60" - layout="topleft" - name="lsl errors" - width="482" /> - <text - follows="left|bottom" - height="12" - layout="topleft" - left="11" - name="line_col" - width="128" /> - <combo_box - follows="left|bottom" - height="23" - label="Insert..." - layout="topleft" - name="Insert..." - width="128" - left="3"/> - <button - follows="right|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - top_pad="-35" - right="485" - name="Save_btn" - width="81" /> - <button - enabled="false" - follows="right|bottom" - height="23" - label="Edit..." - layout="topleft" - top_pad="-23" - right="400" - name="Edit_btn" - width="81" /> - </layout_panel> - <layout_panel auto_resize="false" - height="45" width="497"> - <layout_stack height="45" - width="497" - orientation="horizontal" follows="left|top|right"> - <layout_panel auto_resize="true" - width="197" - height="45" - follows="let|top|right" left="0"> - <button name="Expand Experience" - width="197" - height="35" - is_toggle="true" - tab_stop="false" - pad_left="35" - left="0" - label="Experience" - halign="left" - enabled="false" - handle_right_mouse="false" - follows="top|left|right" - image_unselected="MarketplaceBtn_Off" - image_selected="MarketplaceBtn_Selected"> - </button> - </layout_panel> - <layout_panel auto_resize="false" width="150" left="203" follows="top|right"> - <check_box - follows="top|right" - height="25" - enabled="false" - label="Use Experience:" - name="enable_xp"/> - </layout_panel> - </layout_stack> - </layout_panel> - <layout_panel visible="false" - auto_resize="false" - height="65" - name="Experience Details"> - <layout_stack - follows="top|left|right" - - width="480" - height="65" - name="xp_details" - left="4" - top="0" - orientation="horizontal" - layout="topleft" - visible="true"> - <layout_panel width="157" - height="65" - auto_resize="false"> - <text bottom_delta="25"> - Associate with: - </text> - </layout_panel> - - <layout_panel width="330" - height="65" - auto_resize="true"> - <combo_box left="0" - bottom_delta="33" - label="Choose Experience..." - name="Experiences..." - follows="top|left|right" - /> - </layout_panel> - </layout_stack> - <text - follows="top|left|right" - width="497" - height="15" - bottom_delta="-12" - left="0" - halign="center" - name="No Experiences" - visible="true" - text_color="AlertCautionTextColor"> - You are not a contributor to any experiences. - </text> + <text_editor + left="0" + type="string" + length="1" + follows="left|top|right|bottom" + font="Monospace" + height="346" + ignore_tab="false" + layout="topleft" + max_length="65536" + name="Script Editor" + text_readonly_color="DkGray" + width="482" + show_line_numbers="true" + enable_tooltip_paste="true" + word_wrap="true"> + Loading... + </text_editor> + <scroll_list + top_pad="10" + left="0" + follows="left|right|bottom" + height="60" + layout="topleft" + name="lsl errors" + width="482" /> + <text + follows="left|bottom" + height="12" + layout="topleft" + left="11" + name="line_col" + width="128" /> + <combo_box + follows="left|bottom" + height="23" + label="Insert..." + layout="topleft" + name="Insert..." + width="128" + left="0"/> + <button + follows="right|bottom" + height="23" + label="Save" + label_selected="Save" + layout="topleft" + top_pad="-35" + right="482" + name="Save_btn" + width="81" /> + <button + enabled="false" + follows="right|bottom" + height="23" + label="Edit..." + layout="topleft" + top_pad="-23" + right="396" + name="Edit_btn" + width="81" /> + <check_box width="130" + height="21" + enabled="false" + left="0" + top="490" + layout="topleft" + follows="bottom|left" + label="Use Experience:" + name="enable_xp"/> + <combo_box + label="" + top_pad="-23" + left="135" + right="454" + layout="topleft" + follows="left|bottom|right" + visible="false" + name="Experiences..."/> + <button label=">" + name="view_profile" + height="23" + width="23" + right="482" + layout="topleft" + top_pad="-23" + follows="right" + visible="false"/> - </layout_panel> - </layout_stack> </panel> -- cgit v1.2.3 From 4038b972cc75da963d44db44da1f3f57736615f9 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 8 Aug 2013 20:44:29 -0700 Subject: Only save nvapi DRS settings if the settings change --- indra/newview/llappviewerwin32.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'indra') diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 3cf3c739d9..80a80f4298 100755 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -172,21 +172,20 @@ void ll_nvapi_init(NvDRSSessionHandle hSession) nvapi_error(status); return; } + + // (5) Now we apply (or save) our changes to the system + status = NvAPI_DRS_SaveSettings(hSession); + if (status != NVAPI_OK) + { + nvapi_error(status); + return; + } } else if (status != NVAPI_OK) { nvapi_error(status); return; } - - - - // (5) Now we apply (or save) our changes to the system - status = NvAPI_DRS_SaveSettings(hSession); - if (status != NVAPI_OK) - { - nvapi_error(status); - } } //#define DEBUGGING_SEH_FILTER 1 -- cgit v1.2.3 From 01b363ba52fcdbe4835b067df2d1abe0ea142a9c Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 9 Aug 2013 08:25:33 -0700 Subject: Removed unused files --- indra/newview/llfloaterscriptexperience.cpp | 13 -- indra/newview/llfloaterscriptexperience.h | 45 ----- .../skins/default/xui/en/panel_experience_info.xml | 197 +++++++++++++++------ 3 files changed, 138 insertions(+), 117 deletions(-) delete mode 100644 indra/newview/llfloaterscriptexperience.cpp delete mode 100644 indra/newview/llfloaterscriptexperience.h (limited to 'indra') diff --git a/indra/newview/llfloaterscriptexperience.cpp b/indra/newview/llfloaterscriptexperience.cpp deleted file mode 100644 index 497522e821..0000000000 --- a/indra/newview/llfloaterscriptexperience.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "llviewerprecompiledheaders.h" - -#include "llfloaterscriptexperience.h" - -LLFloaterScriptExperience::LLFloaterScriptExperience(const LLSD& data) - :LLFloater(data) -{ -} - -BOOL LLFloaterScriptExperience::postBuild() -{ - return TRUE; -} diff --git a/indra/newview/llfloaterscriptexperience.h b/indra/newview/llfloaterscriptexperience.h deleted file mode 100644 index c79ff78131..0000000000 --- a/indra/newview/llfloaterscriptexperience.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @file llfloaterscriptexperience.h - * @brief LLFloaterScriptExperience 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_LLFLOATERSCRIPTEXPERIENCE_H -#define LL_LLFLOATERSCRIPTEXPERIENCE_H - -#include "llfloater.h" - -class LLFloaterScriptExperience : - public LLFloater -{ -public: - LLFloaterScriptExperience(const LLSD& data); - -protected: - /*virtual*/ BOOL postBuild(); - -private: - -}; - -#endif //LL_LLFLOATERSCRIPTEXPERIENCE_H diff --git a/indra/newview/skins/default/xui/en/panel_experience_info.xml b/indra/newview/skins/default/xui/en/panel_experience_info.xml index 47f366d857..6df6c2e27d 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_info.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_info.xml @@ -1,16 +1,14 @@ <?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" + height="570" layout="topleft" left="0" - name="panel_experience_info" - top_pad="0"> + min_height="350" + top="0" + width="333" + name="panel_experience_info"> <text follows="top|left|right" font="SansSerifHugeBold" @@ -22,58 +20,139 @@ top="2" value="Experience Info" use_ellipses="true" + left="3" 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" + <scroll_container + color="DkGray2" + follows="all" + height="532" 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" /> + left="9" + name="xp_scroll" + opaque="true" + top_pad="10" + width="310"> + <panel + bg_alpha_color="DkGray2" + follows="left|top|right" + height="630" + layout="topleft" + left="0" + min_height="300" + name="scrolling_panel" + top="0" + width="310"> + <texture_picker + enabled="false" + fallback_image="default_land_picture.j2c" + follows="left|top|right" + height="197" + layout="topleft" + left="11" + name="logo" + top="10" + width="290" /> + <text + follows="left|top|right" + font="SansSerifLarge" + height="14" + layout="topleft" + left="10" + name="region_title" + text_color="white" + top_pad="10" + use_ellipses="true" + value=" Experience Name" + width="280"/> + + <expandable_text + follows="left|top|right" + height="50" + layout="topleft" + left="10" + name="description" + top_pad="10" + value="It's an experience" + width="280" /> + + <text + follows="left|top" + height="16" + layout="topleft" + left="10" + top_pad="10" + value="Maturity level:" + width="130" /> + <icon + follows="top|left" + height="16" + image_name="unknown" + layout="topleft" + left_pad="10" + name="maturity_icon" + top_pad="-18" + width="18" /> + <text + follows="top|left" + height="16" + layout="topleft" + left_pad="5" + name="maturity_value" + top_pad="-14" + value="unknown" + width="118" /> + <panel + follows="left|top|right" + name="location_panel" + left="10" + width="280" visible="false" + top_pad="10" height="42"> + <text + follows="left|top|right" + height="16" + layout="topleft" + left="00" + top="0" + value="Location:" + width="280" /> + + <text + follows="left|top|right" + height="16" + layout="topleft" + left="0" + top_pad="10" + value="Location:" + width="280" /> + </panel> + + <panel + follows="left|top|right" + name="location_panel" + left="10" + width="280" + top_pad="10" + height="42"> + <text + follows="left|top|right" + height="16" + layout="topleft" + left="00" + top="0" + value="Location:" + width="280" /> + + <text + follows="left|top|right" + height="16" + layout="topleft" + left="0" + top_pad="10" + value="Location:" + width="280" /> + </panel> + + </panel> + </scroll_container> + </panel> -- cgit v1.2.3 From 02b501e4dc9a389878cd323e4f781bc752fec737 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 15 Aug 2013 09:32:12 -0700 Subject: Move the experience panel to the bottom of the editor floater --- indra/newview/CMakeLists.txt | 2 + indra/newview/llexperienceassociationresponder.cpp | 80 ++ indra/newview/llexperienceassociationresponder.h | 53 ++ indra/newview/llpreviewscript.cpp | 132 ++- indra/newview/llpreviewscript.h | 35 +- .../default/xui/en/floater_live_lsleditor.xml | 167 ++-- .../skins/default/xui/en/panel_script_ed.xml | 41 +- .../skins/default/xui/en/sidepanel_item_info.xml | 889 +++++++++++---------- indra/tools/vstool/DispatchUtility.cs | 271 +++++++ indra/tools/vstool/app.config | 3 + 10 files changed, 1051 insertions(+), 622 deletions(-) create mode 100644 indra/newview/llexperienceassociationresponder.cpp create mode 100644 indra/newview/llexperienceassociationresponder.h create mode 100644 indra/tools/vstool/DispatchUtility.cs create mode 100644 indra/tools/vstool/app.config (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7d361e4f6a..9caff9e038 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -188,6 +188,7 @@ set(viewer_SOURCE_FILES lleventnotifier.cpp lleventpoll.cpp llexpandabletextbox.cpp + llexperienceassociationresponder.cpp llexternaleditor.cpp llface.cpp llfasttimerview.cpp @@ -773,6 +774,7 @@ set(viewer_HEADER_FILES lleventnotifier.h lleventpoll.h llexpandabletextbox.h + llexperienceassociationresponder.h llexternaleditor.h llface.h llfasttimerview.h diff --git a/indra/newview/llexperienceassociationresponder.cpp b/indra/newview/llexperienceassociationresponder.cpp new file mode 100644 index 0000000000..69451bc054 --- /dev/null +++ b/indra/newview/llexperienceassociationresponder.cpp @@ -0,0 +1,80 @@ +/** + * @file llexperienceassociationresponder.cpp + * @brief llexperienceassociationresponder implementation + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llexperienceassociationresponder.h" +#include "llexperiencecache.h" + +ExperienceAssociationResponder::ExperienceAssociationResponder(ExperienceAssociationResponder::callback_t callback):mCallback(callback) +{ + ref(); +} + +void ExperienceAssociationResponder::error( U32 status, const std::string& reason ) +{ + LLSD msg; + msg["error"]=(LLSD::Integer)status; + msg["message"]=reason; + LL_INFOS("ExperienceAssociation") << "Failed to look up associated experience: " << status << ": " << reason << LL_ENDL; + + sendResult(msg); + +} +void ExperienceAssociationResponder::result( const LLSD& content ) +{ + if(!content.has("experience")) + { + + LLSD msg; + msg["message"]="no experience"; + msg["error"]=-1; + sendResult(msg); + LL_ERRS("ExperienceAssociation") << "Associated experience missing" << LL_ENDL; + } + + LLExperienceCache::get(content["experience"].asUUID(), boost::bind(&ExperienceAssociationResponder::sendResult, this, _1)); + + /* LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); + + if(!scriptCore) + return; + + LLUUID id; + if(content.has("experience")) + { + id=content["experience"].asUUID(); + } + scriptCore->setAssociatedExperience(id);*/ +} + +void ExperienceAssociationResponder::sendResult( const LLSD& experience ) +{ + mCallback(experience); + unref(); +} + + + diff --git a/indra/newview/llexperienceassociationresponder.h b/indra/newview/llexperienceassociationresponder.h new file mode 100644 index 0000000000..aa0c51abb5 --- /dev/null +++ b/indra/newview/llexperienceassociationresponder.h @@ -0,0 +1,53 @@ +#include "llhttpclient.h" +#include "llsd.h" +/** + * @file llexperienceassociationresponder.h + * @brief llexperienceassociationresponder and related class definitions + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, 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_LLEXPERIENCEASSOCIATIONRESPONDER_H +#define LL_LLEXPERIENCEASSOCIATIONRESPONDER_H + +#include "llhttpclient.h" +#include "llsd.h" + +class ExperienceAssociationResponder : public LLHTTPClient::Responder +{ +public: + typedef boost::function<void(const LLSD& experience)> callback_t; + + ExperienceAssociationResponder(callback_t callback); + virtual void result(const LLSD& content); + virtual void error(U32 status, const std::string& reason); + +private: + void sendResult(const LLSD& experience); + + callback_t mCallback; + +}; + +#endif // LL_LLEXPERIENCEASSOCIATIONRESPONDER_H diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index bd8f65e767..09152ac060 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -87,6 +87,7 @@ #include "llviewercontrol.h" #include "llappviewer.h" #include "llexperiencecache.h" +#include "llexperienceassociationresponder.h" const std::string HELLO_LSL = "default\n" @@ -119,54 +120,23 @@ static bool have_script_upload_cap(LLUUID& object_id) return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty()); } -class ExperienceAssociationResponder : public LLHTTPClient::Responder -{ -public: - ExperienceAssociationResponder(const LLUUID& parent):mParent(parent) - { - } - - LLUUID mParent; - - virtual void result(const LLSD& content) - { - - LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); - - if(!scriptCore) - return; - - LLUUID id; - if(content.has("experience")) - { - id=content["experience"].asUUID(); - } - scriptCore->setAssociatedExperience(id); - } - - virtual void error(U32 status, const std::string& reason) - { - llinfos << "Failed to look up associated script: " << status << ": " << reason << llendl; - } - -}; class ExperienceResponder : public LLHTTPClient::Responder { public: - ExperienceResponder(const LLHandle<LLScriptEdCore>& parent):mParent(parent) + ExperienceResponder(const LLHandle<LLLiveLSLEditor>& parent):mParent(parent) { } - LLHandle<LLScriptEdCore> mParent; + LLHandle<LLLiveLSLEditor> mParent; virtual void result(const LLSD& content) { - LLScriptEdCore* scriptCore = mParent.get(); - if(!scriptCore) + LLLiveLSLEditor* parent = mParent.get(); + if(!parent) return; - scriptCore->setExperienceIds(content["experience_ids"]); + parent->setExperienceIds(content["experience_ids"]); } }; @@ -426,34 +396,37 @@ LLScriptEdCore::~LLScriptEdCore() delete mLiveFile; } -void LLScriptEdCore::experienceChanged() +void LLLiveLSLEditor::experienceChanged() { - if(mAssociatedExperience != mExperiences->getSelectedValue().asUUID()) + if(mScriptEd->getAssociatedExperience() != mExperiences->getSelectedValue().asUUID()) { - enableSave(TRUE); - getChildView("Save_btn")->setEnabled(TRUE); - mAssociatedExperience = mExperiences->getSelectedValue().asUUID(); + mScriptEd->enableSave(getIsModifiable()); + //getChildView("Save_btn")->setEnabled(TRUE); + mScriptEd->setAssociatedExperience(mExperiences->getSelectedValue().asUUID()); + updateExperiencePanel(); } } -void LLScriptEdCore::onToggleExperience( LLUICtrl *ui, void* userdata ) +void LLLiveLSLEditor::onToggleExperience( LLUICtrl *ui, void* userdata ) { - LLScriptEdCore* self = (LLScriptEdCore*)userdata; + LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata; LLUUID id; if(self->mExperienceEnabled->get()) { - if(self->mAssociatedExperience.isNull()) + if(self->mScriptEd->getAssociatedExperience().isNull()) { id=self->mExperienceIds.beginArray()->asUUID(); } } - if(id != self->mAssociatedExperience) + if(id != self->mScriptEd->getAssociatedExperience()) { - self->enableSave(TRUE); + self->mScriptEd->enableSave(self->getIsModifiable()); } - self->setAssociatedExperience(id); + self->mScriptEd->setAssociatedExperience(id); + + self->updateExperiencePanel(); } BOOL LLScriptEdCore::postBuild() @@ -462,12 +435,6 @@ BOOL LLScriptEdCore::postBuild() mFunctions = getChild<LLComboBox>( "Insert..."); - mExperiences = getChild<LLComboBox>("Experiences..."); - mExperiences->setCommitCallback(boost::bind(&LLScriptEdCore::experienceChanged, this)); - - mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp"); - - childSetCommitCallback("enable_xp", onToggleExperience, this); childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this); @@ -482,8 +449,6 @@ BOOL LLScriptEdCore::postBuild() - requestExperiences(); - std::vector<std::string> funcs; std::vector<std::string> tooltips; @@ -1290,18 +1255,18 @@ LLUUID LLScriptEdCore::getAssociatedExperience()const return mAssociatedExperience; } -void LLScriptEdCore::setExperienceIds( const LLSD& experience_ids ) +void LLLiveLSLEditor::setExperienceIds( const LLSD& experience_ids ) { mExperienceIds=experience_ids; updateExperiencePanel(); } -void LLScriptEdCore::updateExperiencePanel() +void LLLiveLSLEditor::updateExperiencePanel() { - BOOL editable = mEditor->getEnabled(); + BOOL editable = getIsModifiable(); - if(mAssociatedExperience.isNull()) + if(mScriptEd->getAssociatedExperience().isNull()) { mExperienceEnabled->set(FALSE); mExperiences->setVisible(FALSE); @@ -1328,10 +1293,10 @@ void LLScriptEdCore::updateExperiencePanel() } } -void LLScriptEdCore::addExperienceInfo(const LLSD& experience, BOOL enabled) +void LLLiveLSLEditor::addExperienceInfo(const LLSD& experience, BOOL enabled) { LLUUID id = experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); - EAddPosition position = (id == mAssociatedExperience)?ADD_TOP:ADD_BOTTOM; + EAddPosition position = (id == mScriptEd->getAssociatedExperience())?ADD_TOP:ADD_BOTTOM; LLScrollListItem* item=mExperiences->add(experience[LLExperienceCache::NAME], id, position ); if(!enabled) { @@ -1339,20 +1304,20 @@ void LLScriptEdCore::addExperienceInfo(const LLSD& experience, BOOL enabled) } } -void LLScriptEdCore::buildExperienceList() +void LLLiveLSLEditor::buildExperienceList() { mExperiences->clear(); bool foundAssociated=false; for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it) { LLUUID id = it->asUUID(); - foundAssociated |= (id == mAssociatedExperience); - LLExperienceCache::get(id, boost::bind(&LLScriptEdCore::addExperienceInfo, this, _1, TRUE)); + foundAssociated |= (id == mScriptEd->getAssociatedExperience()); + LLExperienceCache::get(id, boost::bind(&LLLiveLSLEditor::addExperienceInfo, this, _1, TRUE)); } if(!foundAssociated ) { - LLExperienceCache::get(mAssociatedExperience, boost::bind(&LLScriptEdCore::addExperienceInfo, this, _1, FALSE)); + LLExperienceCache::get(mScriptEd->getAssociatedExperience(), boost::bind(&LLLiveLSLEditor::addExperienceInfo, this, _1, FALSE)); } } @@ -1361,14 +1326,13 @@ void LLScriptEdCore::buildExperienceList() void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id ) { mAssociatedExperience = experience_id; - updateExperiencePanel(); } -void LLScriptEdCore::requestExperiences() +void LLLiveLSLEditor::requestExperiences() { - if (!mEditor->getEnabled()) + if (!getIsModifiable()) { return; } @@ -1379,7 +1343,7 @@ void LLScriptEdCore::requestExperiences() std::string lookup_url=region->getCapability("GetCreatorExperiences"); if(!lookup_url.empty()) { - LLHTTPClient::get(lookup_url, new ExperienceResponder(getDerivedHandle<LLScriptEdCore>())); + LLHTTPClient::get(lookup_url, new ExperienceResponder(getDerivedHandle<LLLiveLSLEditor>())); } } } @@ -1945,6 +1909,15 @@ BOOL LLLiveLSLEditor::postBuild() mScriptEd->mEditor->makePristine(); mScriptEd->mEditor->setFocus(TRUE); + + mExperiences = getChild<LLComboBox>("Experiences..."); + mExperiences->setCommitCallback(boost::bind(&LLLiveLSLEditor::experienceChanged, this)); + + mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp"); + + childSetCommitCallback("enable_xp", onToggleExperience, this); + + return LLPreview::postBuild(); } @@ -2078,6 +2051,8 @@ void LLLiveLSLEditor::loadAsset() time_corrected()); mAssetStatus = PREVIEW_ASSET_LOADED; } + + requestExperiences(); } // static @@ -2556,7 +2531,11 @@ void LLLiveLSLEditor::fetchAssociatedExperience(const LLUUID& asset_id) LLSD fields; fields.append("experience"); request["fields"] = fields; - LLHTTPClient::post(lookup_url, request, new ExperienceAssociationResponder(getKey())); + + ExperienceAssociationResponder::callback_t f = boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1); + LLHTTPClient::post(lookup_url, request, new ExperienceAssociationResponder(f)); + + //test me pls } } } @@ -2634,10 +2613,17 @@ BOOL LLLiveLSLEditor::monoChecked() const return FALSE; } -void LLLiveLSLEditor::setAssociatedExperience( const LLUUID& experience_id ) +void LLLiveLSLEditor::setAssociatedExperience( LLHandle<LLLiveLSLEditor> editor, const LLSD& experience ) { - if(mScriptEd) + LLLiveLSLEditor* scriptEd = editor.get(); + if(scriptEd) { - mScriptEd->setAssociatedExperience(experience_id); + LLUUID id; + if(experience.has(LLExperienceCache::EXPERIENCE_ID)) + { + id=experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); + } + scriptEd->mScriptEd->setAssociatedExperience(id); + scriptEd->updateExperiencePanel(); } } diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 9578396f91..bd594cdb9d 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -101,19 +101,13 @@ public: static void onBtnInsertFunction(LLUICtrl*, void*); static void onBtnLoadFromFile(void*); static void onBtnSaveToFile(void*); - static void onToggleExperience(LLUICtrl *ui, void* userdata); static bool enableSaveToFileMenu(void* userdata); static bool enableLoadFromFileMenu(void* userdata); - virtual bool hasAccelerators() const { return true; } - void addExperienceInfo( const LLSD& experience, BOOL enabled ); - void setExperienceIds(const LLSD& experience_ids); - void buildExperienceList(); + virtual bool hasAccelerators() const { return true; } LLUUID getAssociatedExperience()const; - void setAssociatedExperience( const LLUUID& experience_id ); - void updateExperiencePanel(); private: void onBtnHelp(); @@ -128,10 +122,6 @@ private: void enableSave(BOOL b) {mEnableSave = b;} - void requestExperiences(); - void experienceChanged(); - void addAssociatedExperience(const LLSD& experience); - protected: void deleteBridges(); void setHelpPage(const std::string& help_string); @@ -146,9 +136,7 @@ private: void (*mSaveCallback)(void* userdata, BOOL close_after_save); void (*mSearchReplaceCallback) (void* userdata); void* mUserdata; - LLComboBox *mFunctions; - LLComboBox *mExperiences; - LLCheckBoxCtrl *mExperienceEnabled; + LLComboBox *mFunctions; BOOL mForceClose; LLPanel* mCodePanel; LLScrollListCtrl* mErrorList; @@ -161,7 +149,6 @@ private: BOOL mHasScriptData; LLLiveLSLFile* mLiveFile; LLUUID mAssociatedExperience; - LLSD mExperienceIds; LLScriptEdContainer* mContainer; // parent view }; @@ -244,8 +231,19 @@ public: /*virtual*/ BOOL postBuild(); void setIsNew() { mIsNew = TRUE; } - void setAssociatedExperience( const LLUUID& experience_id ); + + static void setAssociatedExperience( LLHandle<LLLiveLSLEditor> editor, const LLSD& experience ); + static void onToggleExperience(LLUICtrl *ui, void* userdata); + void fetchAssociatedExperience(const LLUUID& asset_id); + + void addExperienceInfo( const LLSD& experience, BOOL enabled ); + void setExperienceIds(const LLSD& experience_ids); + void buildExperienceList(); + void updateExperiencePanel(); + void requestExperiences(); + void experienceChanged(); + void addAssociatedExperience(const LLSD& experience); private: virtual BOOL canClose(); @@ -299,6 +297,11 @@ private: LLCheckBoxCtrl* mMonoCheckbox; BOOL mIsModifiable; + + + LLComboBox *mExperiences; + LLCheckBoxCtrl *mExperienceEnabled; + LLSD mExperienceIds; }; #endif // LL_LLPREVIEWSCRIPT_H diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index 562936ed80..d8c2a753a1 100755 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -1,71 +1,110 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater - legacy_header_height="18" - bevel_style="none" - border_style="line" - can_resize="true" - height="580" - layout="topleft" - min_height="271" - min_width="328" - name="script ed float" - help_topic="script_ed_float" - save_rect="true" - title="SCRIPT: NEW SCRIPT" - width="508"> - <floater.string - name="not_allowed"> - You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. - </floater.string> - <floater.string - name="script_running"> - Running - </floater.string> - <floater.string - name="Title"> - SCRIPT: [NAME] - </floater.string> - <panel - bevel_style="none" + legacy_header_height="18" + bevel_style="none" + border_style="line" + can_resize="true" + height="582" + layout="topleft" + min_height="271" + min_width="328" + name="script ed float" + help_topic="script_ed_float" + save_rect="true" + title="SCRIPT: NEW SCRIPT" + width="508"> + <floater.string + name="not_allowed"> + You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. + </floater.string> + <floater.string + name="script_running"> + Running + </floater.string> + <floater.string + name="Title"> + SCRIPT: [NAME] + </floater.string> + <floater.string + name="experience_enabled"> + Uncheck to remove the current experience + </floater.string> + <floater.string + name="no_experiences"> + You are not authorized for any experiences + </floater.string> + <floater.string + name="add_experiences"> + Select to add an experience + </floater.string> + <panel + bevel_style="none" - border_style="line" - follows="left|top|right|bottom" - height="522" - layout="topleft" - left="10" - name="script ed panel" - top="20" - width="497" /> - <button - follows="left|bottom" - height="23" - label="Reset" - label_selected="Reset" - layout="topleft" - name="Reset" - left="10" - width="85" /> - <check_box + border_style="line" + follows="left|top|right|bottom" + height="499" + layout="topleft" + left="10" + name="script ed panel" + top="16" + width="501" /> + <button + follows="left|bottom" + height="23" + label="Reset" + label_selected="Reset" + layout="topleft" + name="Reset" + left="10" + width="85" /> + <check_box left_delta="90" top_delta="3" - enabled="false" - follows="left|bottom" - font="SansSerif" - height="18" - initial_value="true" - label="Running" - layout="topleft" - name="running" - width="205" /> - <check_box + enabled="false" + follows="left|bottom" + font="SansSerif" + height="18" + initial_value="true" + label="Running" + layout="topleft" + name="running" + width="205" /> + <check_box left_delta="140" - enabled="true" - follows="left|bottom" - font="SansSerif" - height="18" - initial_value="true" - label="Mono" - layout="topleft" - name="mono" - width="100" /> + enabled="true" + follows="left|bottom" + font="SansSerif" + height="18" + initial_value="true" + label="Mono" + layout="topleft" + name="mono" + width="100" /> + <check_box width="130" + height="21" + enabled="false" + left="9" + top_pad="10" + layout="topleft" + follows="bottom|left" + label="Use Experience:" + name="enable_xp"/> + <combo_box + label="" + top_pad="-21" + left="149" + right="467" + layout="topleft" + follows="left|bottom|right" + visible="false" + name="Experiences..."/> + <button label=">" + name="view_profile" + height="23" + width="23" + right="496" + layout="topleft" + top_pad="-23" + follows="right" + visible="false"/> </floater> diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 18a8ddc1bf..ed99651a78 100755 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -32,18 +32,6 @@ name="external_editor_not_set"> Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting. </panel.string> - <panel.string - name="experience_enabled"> - Uncheck to remove the current experience - </panel.string> - <panel.string - name="no_experiences"> - You are not authorized for any experiences - </panel.string> - <panel.string - name="add_experiences"> - Select to add an experience - </panel.string> <menu_bar bg_visible="false" follows="left|top" @@ -162,7 +150,7 @@ length="1" follows="left|top|right|bottom" font="Monospace" - height="346" + height="369" ignore_tab="false" layout="topleft" max_length="65536" @@ -217,32 +205,5 @@ right="396" name="Edit_btn" width="81" /> - <check_box width="130" - height="21" - enabled="false" - left="0" - top="490" - layout="topleft" - follows="bottom|left" - label="Use Experience:" - name="enable_xp"/> - <combo_box - label="" - top_pad="-23" - left="135" - right="454" - layout="topleft" - follows="left|bottom|right" - visible="false" - name="Experiences..."/> - <button label=">" - name="view_profile" - height="23" - width="23" - right="482" - layout="topleft" - top_pad="-23" - follows="right" - visible="false"/> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index c5dfb703e5..c9c19f6d57 100755 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,440 +1,471 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - follows="all" - height="570" - layout="topleft" - name="item properties" - help_topic="item_properties" - title="Item Profile" - width="333"> - <panel.string - name="unknown"> - (unknown) - </panel.string> - <panel.string - name="unknown_multiple"> - (unknown / multiple) - </panel.string> - <panel.string - name="public"> - (public) - </panel.string> - <panel.string - name="you_can"> - You can: - </panel.string> - <panel.string - name="owner_can"> - Owner can: - </panel.string> - <panel.string - name="acquiredDate"> - [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] - </panel.string> - <panel.string - name="origin_inventory"> - (Inventory) - </panel.string> - <panel.string - name="origin_inworld"> - (Inworld) - </panel.string> - <icon - follows="top|right" - height="18" - image_name="Lock" - layout="topleft" - right="-15" - mouse_opaque="true" - name="IconLocked" - top="8" - width="18" /> - <button - follows="top|left" - height="24" - image_hover_unselected="BackButton_Over" - image_pressed="BackButton_Press" - image_unselected="BackButton_Off" - layout="topleft" - left="12" - name="back_btn" - tab_stop="false" - top="2" - width="30" - use_draw_context_alpha="false" /> - <text - follows="top|left|right" - font="SansSerifHugeBold" - height="26" - layout="topleft" - left_pad="3" - name="title" - text_color="LtGray" - top="2" - use_ellipses="true" - value="Item Profile" - width="275" /> - <text - follows="top|left|right" - height="13" - layout="topleft" - left="45" - name="origin" - text_color="LtGray_50" - use_ellipses="true" - value="(Inventory)" - width="275" /> - <scroll_container - color="DkGray2" - follows="all" - layout="topleft" - left="9" - name="item_profile_scroll" - opaque="true" - height="493" - width="313" - top="45"> - <panel - follows="left|top|right" - height="390" - help_topic="" - label="" - layout="topleft" - left="0" - name="item_profile" - top="0" - width="295"> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="5" - name="LabelItemNameTitle" - top="10" - width="78"> - Name: - </text> - <line_editor - border_style="line" - border_thickness="1" - follows="left|top|right" - height="20" - layout="topleft" - left_delta="78" - max_length_bytes="63" - name="LabelItemName" - top_delta="0" - width="210" /> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="5" - name="LabelItemDescTitle" - top_pad="10" - width="78"> - Description: - </text> - <line_editor - border_style="line" - border_thickness="1" - follows="left|top|right" - height="23" - layout="topleft" - left_delta="78" - max_length_bytes="127" - name="LabelItemDesc" - top_delta="-5" - width="210" /> - <text - type="string" - length="1" - follows="left|top" - height="23" - layout="topleft" - left="5" - name="LabelCreatorTitle" - top_pad="10" - width="78"> - Creator: - </text> - <avatar_icon - follows="top|left" - height="20" - default_icon_name="Generic_Person" - layout="topleft" - left_pad="0" - top_delta="-6" - mouse_opaque="true" - width="20" /> - <text - type="string" - follows="left|right|top" - font="SansSerifSmall" - height="15" - layout="topleft" - left_pad="5" - name="LabelCreatorName" - top_delta="6" - use_ellipses="true" - width="165"> - </text> - <button - follows="top|right" - height="16" + follows="all" + height="570" + layout="topleft" + name="item properties" + help_topic="item_properties" + title="Item Profile" + width="333"> + <panel.string + name="no_experience"> + (none) + </panel.string> + <panel.string + name="unknown"> + (unknown) + </panel.string> + <panel.string + name="unknown_multiple"> + (unknown / multiple) + </panel.string> + <panel.string + name="public"> + (public) + </panel.string> + <panel.string + name="you_can"> + You can: + </panel.string> + <panel.string + name="owner_can"> + Owner can: + </panel.string> + <panel.string + name="acquiredDate"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </panel.string> + <panel.string + name="origin_inventory"> + (Inventory) + </panel.string> + <panel.string + name="origin_inworld"> + (Inworld) + </panel.string> + <icon + follows="top|right" + height="18" + image_name="Lock" + layout="topleft" + right="-15" + mouse_opaque="true" + name="IconLocked" + top="8" + width="18" /> + <button + follows="top|left" + height="24" + image_hover_unselected="BackButton_Over" + image_pressed="BackButton_Press" + image_unselected="BackButton_Off" + layout="topleft" + left="12" + name="back_btn" + tab_stop="false" + top="2" + width="30" + use_draw_context_alpha="false" /> + <text + follows="top|left|right" + font="SansSerifHugeBold" + height="26" + layout="topleft" + left_pad="3" + name="title" + text_color="LtGray" + top="2" + use_ellipses="true" + value="Item Profile" + width="275" /> + <text + follows="top|left|right" + height="13" + layout="topleft" + left="45" + name="origin" + text_color="LtGray_50" + use_ellipses="true" + value="(Inventory)" + width="275" /> + <scroll_container + color="DkGray2" + follows="all" + layout="topleft" + left="9" + name="item_profile_scroll" + opaque="true" + height="493" + width="313" + top="45"> + <panel + follows="left|top|right" + height="390" + help_topic="" + label="" + layout="topleft" + left="0" + name="item_profile" + top="0" + width="295"> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="5" + name="LabelItemNameTitle" + top="10" + width="78"> + Name: + </text> + <line_editor + border_style="line" + border_thickness="1" + follows="left|top|right" + height="20" + layout="topleft" + left_delta="78" + max_length_bytes="63" + name="LabelItemName" + top_delta="0" + width="210" /> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="5" + name="LabelItemDescTitle" + top_pad="10" + width="78"> + Description: + </text> + <line_editor + border_style="line" + border_thickness="1" + follows="left|top|right" + height="23" + layout="topleft" + left_delta="78" + max_length_bytes="127" + name="LabelItemDesc" + top_delta="-5" + width="210" /> + <text + type="string" + length="1" + follows="left|top" + height="23" + layout="topleft" + left="5" + name="LabelCreatorTitle" + top_pad="10" + width="78"> + Creator: + </text> + <avatar_icon + follows="top|left" + height="20" + default_icon_name="Generic_Person" + layout="topleft" + left_pad="0" + top_delta="-6" + mouse_opaque="true" + width="20" /> + <text + type="string" + follows="left|right|top" + font="SansSerifSmall" + height="15" + layout="topleft" + left_pad="5" + name="LabelCreatorName" + top_delta="6" + use_ellipses="true" + width="165"> + </text> + <button + follows="top|right" + height="16" + image_selected="Inspector_I" + image_unselected="Inspector_I" + layout="topleft" + right="-5" + name="BtnCreator" + top_delta="-6" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + height="23" + layout="topleft" + left="5" + name="LabelOwnerTitle" + top_pad="10" + width="78"> + Owner: + </text> + <avatar_icon + follows="top|left" + height="20" + default_icon_name="Generic_Person" + layout="topleft" + left_pad="0" + top_delta="-6" + mouse_opaque="true" + width="20" /> + <text + type="string" + follows="left|right|top" + font="SansSerifSmall" + height="15" + layout="topleft" + left_pad="5" + name="LabelOwnerName" + top_delta="6" + use_ellipses="true" + width="165"> + </text> + <button + follows="top|right" + height="16" image_selected="Inspector_I" image_unselected="Inspector_I" + layout="topleft" + right="-5" + name="BtnOwner" + top_delta="-3" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + height="23" + layout="topleft" + left="5" + name="LabelAcquiredTitle" + top_pad="10" + width="78"> + Acquired: + </text> + <text + type="string" + length="1" + follows="left|top|right" + height="23" + layout="topleft" + left_delta="78" + name="LabelAcquiredDate" + top_delta="0" + width="210"> + </text> + <panel + border="false" + follows="left|top|right" + layout="topleft" + mouse_opaque="false" + name="perms_inv" + left="0" + top_pad="25" + height="155" + width="313"> + <text + type="string" + length="1" + left="10" + top_pad="13" + text_color="EmphasisColor" + height="15" + follows="left|top|right" + layout="topleft" + name="perm_modify" + width="200"> + You can: + </text> + <check_box + height="18" + label="Modify" + layout="topleft" + left="20" + name="CheckOwnerModify" + top_pad="0" + width="90" /> + <check_box + height="18" + label="Copy" + layout="topleft" + left_pad="0" + name="CheckOwnerCopy" + width="90" /> + <check_box + height="18" + label="Transfer" + layout="topleft" + left_pad="0" + name="CheckOwnerTransfer" + width="106" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="AnyoneLabel" + top_pad="8" + width="100"> + Anyone: + </text> + <check_box + height="18" + label="Copy" layout="topleft" - right="-5" - name="BtnCreator" - top_delta="-6" - width="16" /> - <text + left_pad="0" + name="CheckEveryoneCopy" + top_delta="-2" + width="150" /> + <text type="string" length="1" follows="left|top" - height="23" + height="16" layout="topleft" - left="5" - name="LabelOwnerTitle" - top_pad="10" - width="78"> - Owner: - </text> - <avatar_icon - follows="top|left" - height="20" - default_icon_name="Generic_Person" - layout="topleft" - left_pad="0" - top_delta="-6" - mouse_opaque="true" - width="20" /> - <text + left="10" + name="GroupLabel" + top_pad="8" + width="100"> + Group: + </text> + <check_box + height="18" + label="Share" + layout="topleft" + left_pad="0" + top_delta="-2" + name="CheckShareWithGroup" + tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." + width="150" /> + <text type="string" - follows="left|right|top" - font="SansSerifSmall" - height="15" - layout="topleft" - left_pad="5" - name="LabelOwnerName" - top_delta="6" - use_ellipses="true" - width="165"> - </text> - <button - follows="top|right" - height="16" - image_selected="Inspector_I" - image_unselected="Inspector_I" - layout="topleft" - right="-5" - name="BtnOwner" - top_delta="-3" - width="16" /> - <text - type="string" - length="1" - follows="left|top" - height="23" - layout="topleft" - left="5" - name="LabelAcquiredTitle" - top_pad="10" - width="78"> - Acquired: - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="23" - layout="topleft" - left_delta="78" - name="LabelAcquiredDate" - top_delta="0" - width="210"> - </text> - <panel - border="false" - follows="left|top|right" - layout="topleft" - mouse_opaque="false" - name="perms_inv" - left="0" - top_pad="25" - height="155" - width="313"> - <text - type="string" - length="1" - left="10" - top_pad="13" - text_color="EmphasisColor" - height="15" - follows="left|top|right" - layout="topleft" - name="perm_modify" - width="200"> - You can: - </text> - <check_box - height="18" - label="Modify" - layout="topleft" - left="20" - name="CheckOwnerModify" - top_pad="0" - width="90" /> - <check_box - height="18" - label="Copy" - layout="topleft" - left_pad="0" - name="CheckOwnerCopy" - width="90" /> - <check_box - height="18" - label="Transfer" - layout="topleft" - left_pad="0" - name="CheckOwnerTransfer" - width="106" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="AnyoneLabel" - top_pad="8" - width="100"> - Anyone: - </text> - <check_box - height="18" - label="Copy" - layout="topleft" - left_pad="0" - name="CheckEveryoneCopy" - top_delta="-2" - width="150" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="GroupLabel" - top_pad="8" - width="100"> - Group: - </text> - <check_box - height="18" - label="Share" - layout="topleft" - left_pad="0" - top_delta="-2" - name="CheckShareWithGroup" - tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." - width="150" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="NextOwnerLabel" - top_pad="8" - width="200" - word_wrap="true"> - Next owner: - </text> - <check_box - height="18" - label="Modify" - layout="topleft" - left="20" - top_pad="0" - name="CheckNextOwnerModify" - width="90" /> - <check_box - height="18" - label="Copy" - layout="topleft" - left_pad="0" - name="CheckNextOwnerCopy" - width="90" /> - <check_box - height="18" - label="Transfer" - layout="topleft" - left_pad="0" - name="CheckNextOwnerTransfer" - tool_tip="Next owner can give away or resell this object" - width="106" /> - </panel> + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="NextOwnerLabel" + top_pad="8" + width="200" + word_wrap="true"> + Next owner: + </text> <check_box - height="18" - label="For Sale" - layout="topleft" - left="20" - name="CheckPurchase" - top_pad="20" - width="100" /> - <combo_box - height="23" - left_pad="0" - layout="topleft" - follows="left|top" - name="combobox sale copy" - width="170"> - <combo_box.item - label="Copy" - name="Copy" - value="Copy" /> - <combo_box.item - label="Original" - name="Original" - value="Original" /> - </combo_box> - <spinner - follows="left|top" - decimal_digits="0" - increment="1" - control_name="Edit Cost" - name="Edit Cost" - label="Price: L$" - label_width="75" - left="120" - width="170" - min_val="0" - height="23" - max_val="999999999" - top_pad="10"/> - </panel> - </scroll_container> - <panel - height="30" - layout="topleft" - name="button_panel" - left="5" - top_pad="0" - width="313"> - <button - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - right="-1" - width="100" /> - </panel> - </panel> + height="18" + label="Modify" + layout="topleft" + left="20" + top_pad="0" + name="CheckNextOwnerModify" + width="90" /> + <check_box + height="18" + label="Copy" + layout="topleft" + left_pad="0" + name="CheckNextOwnerCopy" + width="90" /> + <check_box + height="18" + label="Transfer" + layout="topleft" + left_pad="0" + name="CheckNextOwnerTransfer" + tool_tip="Next owner can give away or resell this object" + width="106" /> + </panel> + <check_box + height="18" + label="For Sale" + layout="topleft" + left="20" + name="CheckPurchase" + top_pad="20" + width="100" /> + <combo_box + height="23" + left_pad="0" + layout="topleft" + follows="left|top" + name="combobox sale copy" + width="170"> + <combo_box.item + label="Copy" + name="Copy" + value="Copy" /> + <combo_box.item + label="Original" + name="Original" + value="Original" /> + </combo_box> + <spinner + follows="left|top" + decimal_digits="0" + increment="1" + control_name="Edit Cost" + name="Edit Cost" + label="Price: L$" + label_width="75" + left="120" + width="170" + min_val="0" + height="23" + max_val="999999999" + top_pad="10"/> + + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="5" + name="LabelItemExperienceTitle" + top_pad="10" + width="78"> + Experience: + </text> + <text + type="string" + length="1" + follows="left|top|right" + height="10" + layout="topleft" + left_delta="78" + name="LabelItemExperience" + top_delta="0" + width="210" + >(loading)</text> + </panel> + + </scroll_container> + <panel + height="30" + layout="topleft" + name="button_panel" + left="5" + top_pad="0" + width="313" + follows="top|right|left"> + <button + follows="top|right" + height="23" + label="Cancel" + layout="topleft" + name="cancel_btn" + right="-1" + width="100" /> + </panel> +</panel> diff --git a/indra/tools/vstool/DispatchUtility.cs b/indra/tools/vstool/DispatchUtility.cs new file mode 100644 index 0000000000..6056ac55a1 --- /dev/null +++ b/indra/tools/vstool/DispatchUtility.cs @@ -0,0 +1,271 @@ +#region Using Directives + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Reflection; +using System.Security.Permissions; + +#endregion + +namespace TestDispatchUtility +{ + /// <summary> + /// Provides helper methods for working with COM IDispatch objects that have a registered type library. + /// </summary> + public static class DispatchUtility + { + #region Private Constants + + private const int S_OK = 0; //From WinError.h + private const int LOCALE_SYSTEM_DEFAULT = 2 << 10; //From WinNT.h == 2048 == 0x800 + + #endregion + + #region Public Methods + + /// <summary> + /// Gets whether the specified object implements IDispatch. + /// </summary> + /// <param name="obj">An object to check.</param> + /// <returns>True if the object implements IDispatch. False otherwise.</returns> + public static bool ImplementsIDispatch(object obj) + { + bool result = obj is IDispatchInfo; + return result; + } + + /// <summary> + /// Gets a Type that can be used with reflection. + /// </summary> + /// <param name="obj">An object that implements IDispatch.</param> + /// <param name="throwIfNotFound">Whether an exception should be thrown if a Type can't be obtained.</param> + /// <returns>A .NET Type that can be used with reflection.</returns> + /// <exception cref="InvalidCastException">If <paramref name="obj"/> doesn't implement IDispatch.</exception> + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + public static Type GetType(object obj, bool throwIfNotFound) + { + RequireReference(obj, "obj"); + Type result = GetType((IDispatchInfo)obj, throwIfNotFound); + return result; + } + + /// <summary> + /// Tries to get the DISPID for the requested member name. + /// </summary> + /// <param name="obj">An object that implements IDispatch.</param> + /// <param name="name">The name of a member to lookup.</param> + /// <param name="dispId">If the method returns true, this holds the DISPID on output. + /// If the method returns false, this value should be ignored.</param> + /// <returns>True if the member was found and resolved to a DISPID. False otherwise.</returns> + /// <exception cref="InvalidCastException">If <paramref name="obj"/> doesn't implement IDispatch.</exception> + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + public static bool TryGetDispId(object obj, string name, out int dispId) + { + RequireReference(obj, "obj"); + bool result = TryGetDispId((IDispatchInfo)obj, name, out dispId); + return result; + } + + /// <summary> + /// Invokes a member by DISPID. + /// </summary> + /// <param name="obj">An object that implements IDispatch.</param> + /// <param name="dispId">The DISPID of a member. This can be obtained using + /// <see cref="TryGetDispId(object, string, out int)"/>.</param> + /// <param name="args">The arguments to pass to the member.</param> + /// <returns>The member's return value.</returns> + /// <remarks> + /// This can invoke a method or a property get accessor. + /// </remarks> + public static object Invoke(object obj, int dispId, object[] args) + { + string memberName = "[DispId=" + dispId + "]"; + object result = Invoke(obj, memberName, args); + return result; + } + + /// <summary> + /// Invokes a member by name. + /// </summary> + /// <param name="obj">An object.</param> + /// <param name="memberName">The name of the member to invoke.</param> + /// <param name="args">The arguments to pass to the member.</param> + /// <returns>The member's return value.</returns> + /// <remarks> + /// This can invoke a method or a property get accessor. + /// </remarks> + public static object Invoke(object obj, string memberName, object[] args) + { + RequireReference(obj, "obj"); + Type type = obj.GetType(); + object result = type.InvokeMember(memberName, BindingFlags.InvokeMethod | BindingFlags.GetProperty, + null, obj, args, null); + return result; + } + + #endregion + + #region Private Methods + + /// <summary> + /// Requires that the value is non-null. + /// </summary> + /// <typeparam name="T">The type of the value.</typeparam> + /// <param name="value">The value to check.</param> + /// <param name="name">The name of the value.</param> + private static void RequireReference<T>(T value, string name) where T : class + { + if (value == null) + { + throw new ArgumentNullException(name); + } + } + + /// <summary> + /// Gets a Type that can be used with reflection. + /// </summary> + /// <param name="dispatch">An object that implements IDispatch.</param> + /// <param name="throwIfNotFound">Whether an exception should be thrown if a Type can't be obtained.</param> + /// <returns>A .NET Type that can be used with reflection.</returns> + private static Type GetType(IDispatchInfo dispatch, bool throwIfNotFound) + { + RequireReference(dispatch, "dispatch"); + + Type result = null; + int typeInfoCount; + int hr = dispatch.GetTypeInfoCount(out typeInfoCount); + if (hr == S_OK && typeInfoCount > 0) + { + // Type info isn't usually culture-aware for IDispatch, so we might as well pass + // the default locale instead of looking up the current thread's LCID each time + // (via CultureInfo.CurrentCulture.LCID). + dispatch.GetTypeInfo(0, LOCALE_SYSTEM_DEFAULT, out result); + } + + if (result == null && throwIfNotFound) + { + // If the GetTypeInfoCount called failed, throw an exception for that. + Marshal.ThrowExceptionForHR(hr); + + // Otherwise, throw the same exception that Type.GetType would throw. + throw new TypeLoadException(); + } + + return result; + } + + /// <summary> + /// Tries to get the DISPID for the requested member name. + /// </summary> + /// <param name="dispatch">An object that implements IDispatch.</param> + /// <param name="name">The name of a member to lookup.</param> + /// <param name="dispId">If the method returns true, this holds the DISPID on output. + /// If the method returns false, this value should be ignored.</param> + /// <returns>True if the member was found and resolved to a DISPID. False otherwise.</returns> + private static bool TryGetDispId(IDispatchInfo dispatch, string name, out int dispId) + { + RequireReference(dispatch, "dispatch"); + RequireReference(name, "name"); + + bool result = false; + + // Members names aren't usually culture-aware for IDispatch, so we might as well + // pass the default locale instead of looking up the current thread's LCID each time + // (via CultureInfo.CurrentCulture.LCID). + Guid iidNull = Guid.Empty; + int hr = dispatch.GetDispId(ref iidNull, ref name, 1, LOCALE_SYSTEM_DEFAULT, out dispId); + + const int DISP_E_UNKNOWNNAME = unchecked((int)0x80020006); //From WinError.h + const int DISPID_UNKNOWN = -1; //From OAIdl.idl + if (hr == S_OK) + { + result = true; + } + else if (hr == DISP_E_UNKNOWNNAME && dispId == DISPID_UNKNOWN) + { + // This is the only supported "error" case because it means IDispatch + // is saying it doesn't know the member we asked about. + result = false; + } + else + { + // The other documented result codes are all errors. + Marshal.ThrowExceptionForHR(hr); + } + + return result; + } + + #endregion + + #region Private Interfaces + + /// <summary> + /// A partial declaration of IDispatch used to lookup Type information and DISPIDs. + /// </summary> + /// <remarks> + /// This interface only declares the first three methods of IDispatch. It omits the + /// fourth method (Invoke) because there are already plenty of ways to do dynamic + /// invocation in .NET. But the first three methods provide dynamic type metadata + /// discovery, which .NET doesn't provide normally if you have a System.__ComObject + /// RCW instead of a strongly-typed RCW. + /// <para/> + /// Note: The original declaration of IDispatch is in OAIdl.idl. + /// </remarks> + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("00020400-0000-0000-C000-000000000046")] + private interface IDispatchInfo + { + /// <summary> + /// Gets the number of Types that the object provides (0 or 1). + /// </summary> + /// <param name="typeInfoCount">Returns 0 or 1 for the number of Types provided by <see cref="GetTypeInfo"/>.</param> + /// <remarks> + /// http://msdn.microsoft.com/en-us/library/da876d53-cb8a-465c-a43e-c0eb272e2a12(VS.85) + /// </remarks> + [PreserveSig] + int GetTypeInfoCount(out int typeInfoCount); + + /// <summary> + /// Gets the Type information for an object if <see cref="GetTypeInfoCount"/> returned 1. + /// </summary> + /// <param name="typeInfoIndex">Must be 0.</param> + /// <param name="lcid">Typically, LOCALE_SYSTEM_DEFAULT (2048).</param> + /// <param name="typeInfo">Returns the object's Type information.</param> + /// <remarks> + /// http://msdn.microsoft.com/en-us/library/cc1ec9aa-6c40-4e70-819c-a7c6dd6b8c99(VS.85) + /// </remarks> + void GetTypeInfo(int typeInfoIndex, int lcid, [MarshalAs(UnmanagedType.CustomMarshaler, + MarshalTypeRef = typeof(System.Runtime.InteropServices.CustomMarshalers.TypeToTypeInfoMarshaler))] out Type typeInfo); + + /// <summary> + /// Gets the DISPID of the specified member name. + /// </summary> + /// <param name="riid">Must be IID_NULL. Pass a copy of Guid.Empty.</param> + /// <param name="name">The name of the member to look up.</param> + /// <param name="nameCount">Must be 1.</param> + /// <param name="lcid">Typically, LOCALE_SYSTEM_DEFAULT (2048).</param> + /// <param name="dispId">If a member with the requested <paramref name="name"/> + /// is found, this returns its DISPID and the method's return value is 0. + /// If the method returns a non-zero value, then this parameter's output value is + /// undefined.</param> + /// <returns>Zero for success. Non-zero for failure.</returns> + /// <remarks> + /// http://msdn.microsoft.com/en-us/library/6f6cf233-3481-436e-8d6a-51f93bf91619(VS.85) + /// </remarks> + [PreserveSig] + int GetDispId(ref Guid riid, ref string name, int nameCount, int lcid, out int dispId); + + // NOTE: The real IDispatch also has an Invoke method next, but we don't need it. + // We can invoke methods using .NET's Type.InvokeMember method with the special + // [DISPID=n] syntax for member "names", or we can get a .NET Type using GetTypeInfo + // and invoke methods on that through reflection. + // Type.InvokeMember: http://msdn.microsoft.com/en-us/library/de3dhzwy.aspx + } + + #endregion + } +} diff --git a/indra/tools/vstool/app.config b/indra/tools/vstool/app.config new file mode 100644 index 0000000000..8494f728ff --- /dev/null +++ b/indra/tools/vstool/app.config @@ -0,0 +1,3 @@ +<?xml version="1.0"?> +<configuration> +<startup><supportedRuntime version="v2.0.50727"/></startup></configuration> -- cgit v1.2.3 From b980efd014ddb56650fffeb7968901b8e6bc2837 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 19 Aug 2013 09:24:04 -0700 Subject: Added experience association info llsidepaneliteminfo for scripts. Changed the cap which looks up a script association to take a object/item id pair instead of a asset id. Updated llpreviewscript to use the new cap (which also improves loading time since it can be done in parallel with the lsltext retrieval). --- indra/newview/llexperienceassociationresponder.cpp | 43 +++++++++++++++------- indra/newview/llexperienceassociationresponder.h | 7 +++- indra/newview/llpreviewscript.cpp | 28 +------------- indra/newview/llpreviewscript.h | 4 +- indra/newview/llsidepaneliteminfo.cpp | 35 ++++++++++++++++++ indra/newview/llsidepaneliteminfo.h | 2 + .../skins/default/xui/en/sidepanel_item_info.xml | 14 +++++-- 7 files changed, 85 insertions(+), 48 deletions(-) (limited to 'indra') diff --git a/indra/newview/llexperienceassociationresponder.cpp b/indra/newview/llexperienceassociationresponder.cpp index 69451bc054..33ada4906d 100644 --- a/indra/newview/llexperienceassociationresponder.cpp +++ b/indra/newview/llexperienceassociationresponder.cpp @@ -1,6 +1,8 @@ /** * @file llexperienceassociationresponder.cpp - * @brief llexperienceassociationresponder implementation + * @brief llexperienceassociationresponder implementation. This class combines + * a lookup for a script association and an experience details request. The first + * is always async, but the second may be cached locally. * * $LicenseInfo:firstyear=2013&license=viewerlgpl$ * Second Life Viewer Source Code @@ -27,12 +29,38 @@ #include "llviewerprecompiledheaders.h" #include "llexperienceassociationresponder.h" #include "llexperiencecache.h" +#include "llviewerregion.h" +#include "llagent.h" ExperienceAssociationResponder::ExperienceAssociationResponder(ExperienceAssociationResponder::callback_t callback):mCallback(callback) { ref(); } +void ExperienceAssociationResponder::fetchAssociatedExperience( const LLUUID& object_id, const LLUUID& item_id, callback_t callback ) +{ + LLSD request; + request["object-id"]=object_id; + request["item-id"]=item_id; + fetchAssociatedExperience(request, callback); +} + +void ExperienceAssociationResponder::fetchAssociatedExperience(LLSD& request, callback_t callback) +{ + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url=region->getCapability("GetMetadata"); + if(!lookup_url.empty()) + { + LLSD fields; + fields.append("experience"); + request["fields"] = fields; + LLHTTPClient::post(lookup_url, request, new ExperienceAssociationResponder(callback)); + } + } +} + void ExperienceAssociationResponder::error( U32 status, const std::string& reason ) { LLSD msg; @@ -52,22 +80,11 @@ void ExperienceAssociationResponder::result( const LLSD& content ) msg["message"]="no experience"; msg["error"]=-1; sendResult(msg); - LL_ERRS("ExperienceAssociation") << "Associated experience missing" << LL_ENDL; + return; } LLExperienceCache::get(content["experience"].asUUID(), boost::bind(&ExperienceAssociationResponder::sendResult, this, _1)); - /* LLLiveLSLEditor* scriptCore = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", mParent); - - if(!scriptCore) - return; - - LLUUID id; - if(content.has("experience")) - { - id=content["experience"].asUUID(); - } - scriptCore->setAssociatedExperience(id);*/ } void ExperienceAssociationResponder::sendResult( const LLSD& experience ) diff --git a/indra/newview/llexperienceassociationresponder.h b/indra/newview/llexperienceassociationresponder.h index aa0c51abb5..8ff62a3dbc 100644 --- a/indra/newview/llexperienceassociationresponder.h +++ b/indra/newview/llexperienceassociationresponder.h @@ -40,10 +40,15 @@ public: typedef boost::function<void(const LLSD& experience)> callback_t; ExperienceAssociationResponder(callback_t callback); + virtual void result(const LLSD& content); virtual void error(U32 status, const std::string& reason); -private: + static void fetchAssociatedExperience(const LLUUID& object_it, const LLUUID& item_id, callback_t callback); + +private: + static void fetchAssociatedExperience(LLSD& request, callback_t callback); + void sendResult(const LLSD& experience); callback_t mCallback; diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 09152ac060..f5a6ec3dd3 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1966,8 +1966,8 @@ void LLLiveLSLEditor::loadAsset() || gAgent.isGodlike())) { mItem = new LLViewerInventoryItem(item); - //llinfos << "asset id " << mItem->getAssetUUID() << llendl; } + ExperienceAssociationResponder::fetchAssociatedExperience(item->getParentUUID(), item->getUUID(), boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1)); if(!gAgent.isGodlike() && (item @@ -2069,9 +2069,6 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id, if(instance ) { - instance->fetchAssociatedExperience(asset_id); - - if( LL_ERR_NOERR == status ) { instance->loadScriptText(vfs, asset_id, type); @@ -2518,29 +2515,6 @@ void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* use delete data; } -void LLLiveLSLEditor::fetchAssociatedExperience(const LLUUID& asset_id) -{ - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - std::string lookup_url=region->getCapability("GetMetadata"); - if(!lookup_url.empty()) - { - LLSD request; - request["asset-id"]=asset_id; - LLSD fields; - fields.append("experience"); - request["fields"] = fields; - - ExperienceAssociationResponder::callback_t f = boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1); - LLHTTPClient::post(lookup_url, request, new ExperienceAssociationResponder(f)); - - //test me pls - } - } -} - - BOOL LLLiveLSLEditor::canClose() { return (mScriptEd->canClose()); diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index bd594cdb9d..faeb4a5b8a 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -234,9 +234,7 @@ public: static void setAssociatedExperience( LLHandle<LLLiveLSLEditor> editor, const LLSD& experience ); static void onToggleExperience(LLUICtrl *ui, void* userdata); - - void fetchAssociatedExperience(const LLUUID& asset_id); - + void addExperienceInfo( const LLSD& experience, BOOL enabled ); void setExperienceIds(const LLSD& experience_ids); void buildExperienceList(); diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 92c2863ffd..040c4ee72d 100755 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -43,6 +43,8 @@ #include "llviewercontrol.h" #include "llviewerinventory.h" #include "llviewerobjectlist.h" +#include "llexperiencecache.h" +#include "llexperienceassociationresponder.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -316,6 +318,15 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) is_obj_modify = object->permOwnerModify(); } + if(item->getInventoryType() == LLInventoryType::IT_LSL) + { + getChildView("LabelItemExperienceTitle")->setVisible(TRUE); + LLTextBox* tb = getChild<LLTextBox>("LabelItemExperience"); + tb->setText(getString("loading_experience")); + tb->setVisible(TRUE); + ExperienceAssociationResponder::fetchAssociatedExperience(item->getParentUUID(), item->getUUID(), boost::bind(&LLSidepanelItemInfo::setAssociatedExperience, getDerivedHandle<LLSidepanelItemInfo>(), _1)); + } + ////////////////////// // ITEM NAME & DESC // ////////////////////// @@ -666,6 +677,30 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) } } + +void LLSidepanelItemInfo::setAssociatedExperience( LLHandle<LLSidepanelItemInfo> hInfo, const LLSD& experience ) +{ + LLSidepanelItemInfo* info = hInfo.get(); + if(info) + { + LLUUID id; + if(experience.has(LLExperienceCache::EXPERIENCE_ID) && experience.has(LLExperienceCache::NAME)) + { + id=experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); + } + LLTextBox* xpName = info->getChild<LLTextBox>("LabelItemExperience"); + if(id.isNull()) + { + xpName->setText(info->getString("no_experience")); + } + else + { + xpName->setText(experience[LLExperienceCache::NAME].asString()); + } + } +} + + void LLSidepanelItemInfo::startObjectInventoryObserver() { if (!mObjectInventoryObserver) diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h index 12aaca923e..2e24e58a2a 100755 --- a/indra/newview/llsidepaneliteminfo.h +++ b/indra/newview/llsidepaneliteminfo.h @@ -67,6 +67,8 @@ protected: void refreshFromItem(LLViewerInventoryItem* item); private: + static void setAssociatedExperience( LLHandle<LLSidepanelItemInfo> hInfo, const LLSD& experience ); + void startObjectInventoryObserver(); void stopObjectInventoryObserver(); diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index c9c19f6d57..f1f8843a9d 100755 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -11,6 +11,10 @@ name="no_experience"> (none) </panel.string> + <panel.string + name="loading_experience"> + (loading) + </panel.string> <panel.string name="unknown"> (unknown) @@ -434,7 +438,8 @@ left="5" name="LabelItemExperienceTitle" top_pad="10" - width="78"> + width="78" + visible="false"> Experience: </text> <text @@ -446,10 +451,11 @@ left_delta="78" name="LabelItemExperience" top_delta="0" - width="210" - >(loading)</text> + width="210" + visible="false" + ></text> </panel> - + </scroll_container> <panel height="30" -- cgit v1.2.3 From b33354e1d19f8efafda8b41748c576227595bf5e Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 19 Aug 2013 17:16:56 -0700 Subject: Updated experience profile panel layout --- .../skins/default/xui/en/panel_experience_info.xml | 437 ++++++++++++++++----- 1 file changed, 328 insertions(+), 109 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/panel_experience_info.xml b/indra/newview/skins/default/xui/en/panel_experience_info.xml index 6df6c2e27d..268e7462c1 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_info.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_info.xml @@ -4,10 +4,10 @@ follows="all" height="570" layout="topleft" - left="0" + left="5" min_height="350" - top="0" - width="333" + top="5" + width="348" name="panel_experience_info"> <text follows="top|left|right" @@ -18,7 +18,7 @@ name="title" text_color="White" top="2" - value="Experience Info" + value="Experience Profile" use_ellipses="true" left="3" right="-3"/> @@ -31,127 +31,346 @@ name="xp_scroll" opaque="true" top_pad="10" - width="310"> + width="330"> <panel bg_alpha_color="DkGray2" - follows="left|top|right" - height="630" + follows="top|left" + height="480" layout="topleft" left="0" - min_height="300" + min_height="480" name="scrolling_panel" top="0" - width="310"> - <texture_picker - enabled="false" - fallback_image="default_land_picture.j2c" - follows="left|top|right" - height="197" + width="315" + min_width="315"> + <layout_stack + follows="all" + height="480" layout="topleft" - left="11" - name="logo" - top="10" - width="290" /> - <text - follows="left|top|right" - font="SansSerifLarge" - height="14" - layout="topleft" - left="10" - name="region_title" - text_color="white" - top_pad="10" - use_ellipses="true" - value=" Experience Name" - width="280"/> - - <expandable_text - follows="left|top|right" - height="50" - layout="topleft" - left="10" - name="description" - top_pad="10" - value="It's an experience" - width="280" /> - - <text - follows="left|top" - height="16" - layout="topleft" - left="10" - top_pad="10" - value="Maturity level:" - width="130" /> - <icon - follows="top|left" - height="16" - image_name="unknown" - layout="topleft" - left_pad="10" - name="maturity_icon" - top_pad="-18" - width="18" /> - <text - follows="top|left" - height="16" - layout="topleft" - left_pad="5" - name="maturity_value" - top_pad="-14" - value="unknown" - width="118" /> - <panel - follows="left|top|right" - name="location_panel" - left="10" - width="280" visible="false" - top_pad="10" height="42"> - <text - follows="left|top|right" - height="16" + left="0" + top="0" + orientation="vertical" + width="315"> + <layout_panel + follows="all" + height="197" layout="topleft" - left="00" + left="0" top="0" - value="Location:" - width="280" /> - - <text - follows="left|top|right" - height="16" + auto_resize="false" + visible="true" + 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="0" - top_pad="10" - value="Location:" - width="280" /> - </panel> - - <panel - follows="left|top|right" - name="location_panel" - left="10" - width="280" - top_pad="10" - height="42"> - <text - follows="left|top|right" - height="16" + 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" + top="0" + use_ellipses="true" + value="Kyle's Superhero RPG" + width="288"/> + </layout_panel> + <layout_panel + follows="" + height="50" layout="topleft" - left="00" + left="0" top="0" - value="Location:" - width="280" /> - - <text - follows="left|top|right" - height="16" + auto_resize="false" + width="315" + 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="69" layout="topleft" left="0" - top_pad="10" - value="Location:" - width="280" /> - </panel> + top="5" + width="313" + visible="true" + auto_resize="false" + name="location panel" + > + <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> + <button + follows="bottom|left" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + width="151" + left="10"/> + <button + follows="bottom|left" + height="23" + label="Map" + layout="topleft" + name="map_btn" + top_pad="-23" + width="101" + left_pad="5"/> + </layout_panel> + <layout_panel + follows="all" + height="53" + layout="topleft" + left="0" + top="5" + width="313" + visible="true" + auto_resize="false" + name="marketplace panel" + + > + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="Location" + width="290"> + Marketplace store: + </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="left|top|right" + height="69" + 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="-2" + 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="0" + width="151" + left="10"/> + <!-- + + + <expandable_text + allow_scroll="false" + bg_visible="false" + follows="left|top|right" + h_pad="0" + height="35" + width="280" + layout="topleft" + font="SansSerifBig" + font.style="BOLD" + left="10" + top_pad="10" + name="pick_name" + read_only="false" + text_color="white" + v_pad="0" + use_ellipses="true" + value="It's an experience" /> + + <text + follows="left|top" + height="16" + layout="topleft" + left="10" + top_pad="10" + value="Maturity level:" + width="130" /> + <icon + follows="top|left" + height="16" + image_name="unknown" + layout="topleft" + left_pad="10" + name="maturity_icon" + top_pad="-18" + width="18" /> + <text + follows="top|left" + height="16" + layout="topleft" + left_pad="5" + name="maturity_value" + top_pad="-14" + value="unknown" + width="118" /> + <panel + follows="left|top|right" + name="location_panel" + left="10" + width="280" + visible="false" + top_pad="10" + height="42"> + <text + follows="left|top|right" + height="16" + layout="topleft" + left="00" + top="0" + value="Location:" + width="280" /> + + <text + follows="left|top|right" + height="16" + layout="topleft" + left="0" + top_pad="10" + value="Location:" + width="280" /> + </panel> + + <panel + follows="left|top|right" + name="location_panel" + left="10" + width="280" + top_pad="10" + height="42"> + <text + follows="left|top|right" + height="16" + layout="topleft" + left="00" + top="0" + value="Location:" + width="280" /> + + <text + follows="left|top|right" + height="16" + layout="topleft" + left="0" + top_pad="10" + value="Location:" + width="280" /> + </panel> +--> + </layout_panel> + </layout_stack> </panel> </scroll_container> -- cgit v1.2.3 From 257110c11e5546f0a5a07b087694cfc9059367b4 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 21 Aug 2013 15:43:09 -0700 Subject: Added new fields to the experience cache. Experience profile moved to it's own floater, will probalby be moving again. XP profile displays most data, though the presentation is not final Fixed a bug with the XP selection combobox in the script editor --- indra/llmessage/llexperiencecache.cpp | 61 +++-- indra/llmessage/llexperiencecache.h | 17 +- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloaterexperienceprofile.cpp | 215 +++++++++++++++ indra/newview/llfloaterexperienceprofile.h | 70 +++++ indra/newview/llpreviewscript.cpp | 20 +- indra/newview/llpreviewscript.h | 4 + indra/newview/llviewerfloaterreg.cpp | 6 +- .../default/xui/en/floater_experienceprofile.xml | 293 +++++++++++++++++++++ 9 files changed, 662 insertions(+), 26 deletions(-) create mode 100644 indra/newview/llfloaterexperienceprofile.cpp create mode 100644 indra/newview/llfloaterexperienceprofile.h create mode 100644 indra/newview/skins/default/xui/en/floater_experienceprofile.xml (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 219e68b51c..2e260ecdef 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -37,11 +37,10 @@ namespace LLExperienceCache { - typedef std::map<LLUUID, LLUUID> PrivateKeyMap; - PrivateKeyMap experinceKeyMap; - - void mapPrivateKeys(const LLSD& legacyKeys); + typedef std::map<LLUUID, LLUUID> KeyMap; + KeyMap privateToPublicKeyMap; + void mapKeys(const LLSD& legacyKeys); std::string sLookupURL; @@ -66,6 +65,7 @@ namespace LLExperienceCache signal_map_t sSignalMap; + bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age); void eraseExpired(); @@ -89,6 +89,17 @@ namespace LLExperienceCache sPendingQueue.erase(row[OWNER_ID].asUUID()); } + if(!row.has(OWNER_ID)) + { + if(row.has(AGENT_ID) && row[AGENT_ID].asUUID().notNull()) + { + row[OWNER_ID]=row[AGENT_ID]; + } + else + { + row[OWNER_ID]=row[GROUP_ID]; + } + } //signal signal_map_t::iterator sig_it = sSignalMap.find(public_key); @@ -119,7 +130,7 @@ namespace LLExperienceCache void bootstrap(const LLSD& legacyKeys, int initialExpiration) { - mapPrivateKeys(legacyKeys); + mapKeys(legacyKeys); LLSD::array_const_iterator it = legacyKeys.beginArray(); for(/**/; it != legacyKeys.endArray(); ++it) { @@ -302,7 +313,8 @@ namespace LLExperienceCache exp[EXPIRES]=DEFAULT_EXPIRATION; exp[EXPERIENCE_ID] = id; exp[PROPERTIES]=PROPERTY_INVALID; - exp["DoesNotExist"]=true; + exp[MISSING]=true; + exp[QUOTA] = DEFAULT_QUOTA; processExperience(id, exp); LL_INFOS("ExperienceCache") << "Error result for " << id << LL_ENDL ; @@ -324,14 +336,22 @@ namespace LLExperienceCache ask_queue_t::const_iterator it = mKeys.begin(); for ( ; it != mKeys.end(); ++it) { + LLSD exp; + //leave the properties alone if we already have a cache entry for this xp + if(!get(it->first, exp)) + { + exp[PROPERTIES]=PROPERTY_INVALID; + } exp[EXPIRES]=retry_timestamp; exp[EXPERIENCE_ID] = it->first; exp["key_type"] = it->second; exp["uuid"] = it->first; exp["error"] = (LLSD::Integer)status; - exp[PROPERTIES]=PROPERTY_INVALID; + exp[QUOTA] = DEFAULT_QUOTA; + LLExperienceCache::processExperience(it->first, exp); + LL_INFOS("ExperienceCache") << "Error result for " << it->first << LL_ENDL ; } } @@ -514,22 +534,25 @@ namespace LLExperienceCache cache_t::iterator cur = it; LLSD& exp = cur->second; ++it; + if(exp.has(EXPIRES) && exp[EXPIRES].asReal() < now) { - if(exp.has(EXPERIENCE_ID)) + if(!exp.has(EXPERIENCE_ID)) { - LLUUID id = exp[EXPERIENCE_ID].asUUID(); - S32 properties = PROPERTY_INVALID; - if(exp.has(PROPERTIES)) - { - properties = exp[PROPERTIES].asInteger(); + LL_INFOS("ExperienceCache") << "Removing experience with no id " << LL_ENDL ; + sCache.erase(cur); } - if(id.notNull() && ((properties & PROPERTY_INVALID) == 0)) + else + { + LLUUID id = exp[EXPERIENCE_ID].asUUID(); + LLUUID private_key = exp.has(LLExperienceCache::PRIVATE_KEY) ? exp[LLExperienceCache::PRIVATE_KEY].asUUID():LLUUID::null; + if(private_key.notNull() || !exp.has("DoesNotExist")) { fetch(id, true); } else { + LL_INFOS("ExperienceCache") << "Removing invalid experience " << id << LL_ENDL ; sCache.erase(cur); } } @@ -616,15 +639,14 @@ namespace LLExperienceCache } - -void LLExperienceCache::mapPrivateKeys( const LLSD& legacyKeys ) +void LLExperienceCache::mapKeys( const LLSD& legacyKeys ) { LLSD::array_const_iterator exp = legacyKeys.beginArray(); for(/**/ ; exp != legacyKeys.endArray() ; ++exp) { if(exp->has(LLExperienceCache::EXPERIENCE_ID) && exp->has(LLExperienceCache::PRIVATE_KEY)) { - experinceKeyMap[(*exp)[LLExperienceCache::PRIVATE_KEY].asUUID()]=(*exp)[LLExperienceCache::EXPERIENCE_ID].asUUID(); + privateToPublicKeyMap[(*exp)[LLExperienceCache::PRIVATE_KEY].asUUID()]=(*exp)[LLExperienceCache::EXPERIENCE_ID].asUUID(); } } } @@ -635,9 +657,8 @@ LLUUID LLExperienceCache::getExperienceId(const LLUUID& private_key, bool null_i if (private_key.isNull()) return LLUUID::null; - - PrivateKeyMap::const_iterator it=experinceKeyMap.find(private_key); - if(it == experinceKeyMap.end()) + KeyMap::const_iterator it=privateToPublicKeyMap.find(private_key); + if(it == privateToPublicKeyMap.end()) { if(null_if_not_found) { diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index fb00ea31f0..8b3443e5a9 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -40,13 +40,21 @@ class LLUUID; namespace LLExperienceCache { const std::string PRIVATE_KEY = "private_id"; + const std::string MISSING = "DoesNotExist"; + const std::string AGENT_ID = "agent_id"; + const std::string GROUP_ID = "group_id"; const std::string EXPERIENCE_ID = "public_id"; const std::string OWNER_ID = "owner_id"; const std::string NAME = "name"; const std::string PROPERTIES = "properties"; const std::string EXPIRES = "expiration"; - const std::string DESCRIPTION = "description"; + const std::string DESCRIPTION = "description"; + const std::string QUOTA = "quota"; + const std::string MATURITY = "maturity"; + const std::string METADATA = "extended_metadata"; + const std::string SLURL = "slurl"; + // should be in sync with experience-api/experiences/models.py const int PROPERTY_INVALID = 1 << 0; @@ -54,10 +62,12 @@ namespace LLExperienceCache const int PROPERTY_GRID = 1 << 4; const int PROPERTY_PRIVATE = 1 << 5; const int PROPERTY_DISABLED = 1 << 6; - const int PROPERTY_SUSPENDED = 1 << 7; + const int PROPERTY_SUSPENDED = 1 << 7; + // default values const static F64 DEFAULT_EXPIRATION = 600.0; + const static S32 DEFAULT_QUOTA = 128; // this is megabytes // Callback types for get() below typedef boost::signals2::signal<void (const LLSD& experience)> @@ -79,7 +89,7 @@ namespace LLExperienceCache void erase(const LLUUID& key); bool fetch(const LLUUID& key, bool refresh=false); - void insert(LLSD& experience_data); + void insert(const LLSD& experience_data); bool get(const LLUUID& key, LLSD& experience_data); // If name information is in cache, callback will be called immediately. @@ -87,6 +97,7 @@ namespace LLExperienceCache const cache_t& getCached(); + // maps an experience private key to the experience id LLUUID getExperienceId(const LLUUID& private_key, bool null_if_not_found=false); }; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 9caff9e038..1c86884a80 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -227,6 +227,7 @@ set(viewer_SOURCE_FILES llfloatereditwater.cpp llfloaterenvironmentsettings.cpp llfloaterevent.cpp + llfloaterexperienceprofile.cpp llfloaterexperiences.cpp llfloaterfonttest.cpp llfloatergesture.cpp @@ -813,6 +814,7 @@ set(viewer_HEADER_FILES llfloatereditwater.h llfloaterenvironmentsettings.h llfloaterevent.h + llfloaterexperienceprofile.h llfloaterexperiences.h llfloaterfonttest.h llfloatergesture.h diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp new file mode 100644 index 0000000000..821a1de6f7 --- /dev/null +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -0,0 +1,215 @@ +/** + * @file llfloaterexperienceprofile.cpp + * @brief llfloaterexperienceprofile and related class definitions + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterexperienceprofile.h" +#include "llexperiencecache.h" +#include "llfloaterworldmap.h" +#include "llfloaterreg.h" +#include "lllayoutstack.h" +#include "lltextbox.h" +#include "llsdserialize.h" +#include "llexpandabletextbox.h" +#include "lltexturectrl.h" +#include "lltrans.h" + +#define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" +#define TF_NAME "experience_title" +#define TF_DESC "experience_description" +#define TF_SLURL "LocationTextText" +#define TF_MRKT "marketplace" +#define TF_MATURITY "ContentRatingText" +#define TF_OWNER "OwnerText" + +#define IMG_LOGO "logo" + +#define PNL_IMAGE "image_panel" +#define PNL_DESC "description panel" +#define PNL_LOC "location panel" +#define PNL_MRKT "marketplace panel" + +#define BTN_TP "teleport_btn" +#define BTN_MAP "show_on_map_btn" +#define BTN_EDIT "edit_btn" + + +LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data) + : LLFloater(data) + , mExperienceId(data.asUUID()) + , mImagePanel(NULL) + , mDescriptionPanel(NULL) + , mLocationPanel(NULL) + , mMarketplacePanel(NULL) +{ + +} + +LLFloaterExperienceProfile::~LLFloaterExperienceProfile() +{ + +} + + +BOOL LLFloaterExperienceProfile::postBuild() +{ + mImagePanel = getChild<LLLayoutPanel>(PNL_IMAGE); + mDescriptionPanel = getChild<LLLayoutPanel>(PNL_DESC); + mLocationPanel = getChild<LLLayoutPanel>(PNL_LOC); + mMarketplacePanel = getChild<LLLayoutPanel>(PNL_MRKT); + + if (mExperienceId.notNull()) + { + LLExperienceCache::fetch(mExperienceId, true); + LLExperienceCache::get(mExperienceId, boost::bind(&LLFloaterExperienceProfile::experienceCallback, + getDerivedHandle<LLFloaterExperienceProfile>(), _1)); + } + + + childSetAction(BTN_TP, boost::bind(&LLFloaterExperienceProfile::onClickTeleport, this)); + childSetAction(BTN_MAP, boost::bind(&LLFloaterExperienceProfile::onClickMap, this)); + childSetAction(BTN_EDIT, boost::bind(&LLFloaterExperienceProfile::onClickEdit, this)); + + return TRUE; +} + +void LLFloaterExperienceProfile::experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience ) +{ + LLFloaterExperienceProfile* pllpep = handle.get(); + if(pllpep) + { + pllpep->refreshExperience(experience); + } +} + +void LLFloaterExperienceProfile::onClickMap() +{ +// LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal()); +// LLFloaterReg::showInstance("world_map", "center"); + +} + +void LLFloaterExperienceProfile::onClickTeleport() +{ +// if (!getPosGlobal().isExactlyZero()) +// { +// gAgent.teleportViaLocation(getPosGlobal()); +// LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal()); +// } + +} + +void LLFloaterExperienceProfile::onClickEdit() +{ + +} + +std::string LLFloaterExperienceProfile::getMaturityString(U8 maturity) +{ + if(maturity <= SIM_ACCESS_MIN) + return LLTrans::getString("SIM_ACCESS_MIN"); + if(maturity <= SIM_ACCESS_PG) + return LLTrans::getString("SIM_ACCESS_PG"); + if(maturity <= SIM_ACCESS_MATURE) + return LLTrans::getString("SIM_ACCESS_MATURE"); + if(maturity <= SIM_ACCESS_ADULT) + return LLTrans::getString("SIM_ACCESS_ADULT"); + + return LLStringUtil::null; +} + + +void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) +{ + mExperienceDetails = experience; + + if(experience.has(LLExperienceCache::MISSING)) + { + mImagePanel->setVisible(FALSE); + mDescriptionPanel->setVisible(FALSE); + mLocationPanel->setVisible(FALSE); + mMarketplacePanel->setVisible(FALSE); + } + + LLTextBox* child = getChild<LLTextBox>(TF_NAME); + child->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); + + value = experience[LLExperienceCache::SLURL].asString(); + child = getChild<LLTextBox>(TF_SLURL); + child->setText(value); + mLocationPanel->setVisible(value.length()>0); + + child = getChild<LLTextBox>(TF_MATURITY); + child->setText(getMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()))); + + child = getChild<LLTextBox>(TF_OWNER); + child->setText(experience[LLExperienceCache::OWNER_ID].asString()); + + value=experience[LLExperienceCache::METADATA].asString(); + if(value.empty()) + return; + + LLPointer<LLSDParser> parser = new LLSDXMLParser(); + + LLSD data; + + std::istringstream is = std::istringstream(value); + if(LLSDParser::PARSE_FAILURE != parser->parse(is, data, value.size())) + { + if(data.has(TF_MRKT)) + { + value=data[TF_MRKT].asString(); + + child = getChild<LLTextBox>(TF_MRKT); + child->setText(value); + mMarketplacePanel->setVisible(TRUE); + } + else + { + mMarketplacePanel->setVisible(FALSE); + } + + if(data.has(IMG_LOGO)) + { + LLTextureCtrl* logo = getChild<LLTextureCtrl>(IMG_LOGO); + logo->setImageAssetID(data[IMG_LOGO].asUUID()); + mImagePanel->setVisible(TRUE); + } + } + + + + + + + +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h new file mode 100644 index 0000000000..1d1e4c50cf --- /dev/null +++ b/indra/newview/llfloaterexperienceprofile.h @@ -0,0 +1,70 @@ +/** + * @file llfloaterexperienceprofile.h + * @brief llfloaterexperienceprofile and related class definitions + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, 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_LLFLOATEREXPERIENCEPROFILE_H +#define LL_LLFLOATEREXPERIENCEPROFILE_H + +#include "llfloater.h" +#include "lluuid.h" +#include "llsd.h" + +class LLLayoutPanel; + +class LLFloaterExperienceProfile : public LLFloater +{ + LOG_CLASS(LLFloaterExperienceProfile); +public: + LLFloaterExperienceProfile(const LLSD& data); + virtual ~LLFloaterExperienceProfile(); + + void setExperienceId( const LLUUID& experience_id ); + +protected: + + void onClickMap(); + void onClickTeleport(); + void onClickEdit(); + + + static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience); + void refreshExperience(const LLSD& experience); + BOOL postBuild(); + std::string getMaturityString(U8 maturity); + LLUUID mExperienceId; + LLSD mExperienceDetails; + + LLLayoutPanel* mImagePanel; + LLLayoutPanel* mDescriptionPanel; + LLLayoutPanel* mLocationPanel; + LLLayoutPanel* mMarketplacePanel; + +private: + +}; + +#endif // LL_LLFLOATEREXPERIENCEPROFILE_H diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index f5a6ec3dd3..7c2638d82b 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -87,6 +87,7 @@ #include "llviewercontrol.h" #include "llappviewer.h" #include "llexperiencecache.h" +#include "llfloaterexperienceprofile.h" #include "llexperienceassociationresponder.h" const std::string HELLO_LSL = @@ -407,6 +408,22 @@ void LLLiveLSLEditor::experienceChanged() } } +void LLLiveLSLEditor::onViewProfile( LLUICtrl *ui, void* userdata ) +{ + LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata; + + LLUUID id; + if(self->mExperienceEnabled->get()) + { + id=self->mScriptEd->getAssociatedExperience(); + if(id.notNull()) + { + LLFloaterReg::showInstance("experience_profile", id, true); + } + } + +} + void LLLiveLSLEditor::onToggleExperience( LLUICtrl *ui, void* userdata ) { LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata; @@ -1306,7 +1323,7 @@ void LLLiveLSLEditor::addExperienceInfo(const LLSD& experience, BOOL enabled) void LLLiveLSLEditor::buildExperienceList() { - mExperiences->clear(); + mExperiences->clearRows(); bool foundAssociated=false; for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it) { @@ -1916,6 +1933,7 @@ BOOL LLLiveLSLEditor::postBuild() mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp"); childSetCommitCallback("enable_xp", onToggleExperience, this); + childSetCommitCallback("view_profile", onViewProfile, this); return LLPreview::postBuild(); diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index faeb4a5b8a..4e76238c71 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -49,6 +49,7 @@ class LLKeywordToken; class LLVFS; class LLViewerInventoryItem; class LLScriptEdContainer; +class LLFloaterExperienceProfile; // Inner, implementation class. LLPreviewScript and LLLiveLSLEditor each own one of these. class LLScriptEdCore : public LLPanel @@ -234,6 +235,7 @@ public: static void setAssociatedExperience( LLHandle<LLLiveLSLEditor> editor, const LLSD& experience ); static void onToggleExperience(LLUICtrl *ui, void* userdata); + static void onViewProfile(LLUICtrl *ui, void* userdata); void addExperienceInfo( const LLSD& experience, BOOL enabled ); void setExperienceIds(const LLSD& experience_ids); @@ -300,6 +302,8 @@ private: LLComboBox *mExperiences; LLCheckBoxCtrl *mExperienceEnabled; LLSD mExperienceIds; + + LLHandle<LLFloater> mExperienceProfile; }; #endif // LL_LLPREVIEWSCRIPT_H diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index c6296a20d7..13ceaf491c 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -58,6 +58,7 @@ #include "llfloatereditsky.h" #include "llfloatereditwater.h" #include "llfloaterenvironmentsettings.h" +#include "llfloaterexperienceprofile.h" #include "llfloaterexperiences.h" #include "llfloaterevent.h" #include "llfloaterdestinations.h" @@ -207,8 +208,9 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("env_edit_water", "floater_edit_water_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditWater>); 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("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>); + LLFloaterReg::add("experiences", "floater_experiences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperiences>); + LLFloaterReg::add("experience_profile", "floater_experienceprofile.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperienceProfile>); LLFloaterReg::add("font_test", "floater_font_test.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFontTest>); diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml new file mode 100644 index 0000000000..d9990f3a59 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -0,0 +1,293 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> + +<floater + positioning="cascading" + can_close="true" + enabled="true" + can_resize="true" + height="580" + min_height="350" + min_width="300" + layout="topleft" + name="floater_experience_profile" + save_rect="yes" + single_instance="false" + reuse_instance="false" + title="EXPERIENCE PROFILE" + width="358"> + <panel + background_visible="true" + follows="all" + height="570" + layout="topleft" + left="5" + min_height="350" + top="5" + 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" + follows="all" + height="532" + layout="topleft" + 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" + width="315" + min_width="315"> + <layout_stack + follows="all" + height="480" + layout="topleft" + left="0" + top="0" + orientation="vertical" + width="315"> + <layout_panel + follows="all" + height="197" + 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" + 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" + 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" + 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="69" + layout="topleft" + 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" + 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> + <button + follows="bottom|left" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + width="151" + left="10"/> + <button + follows="bottom|left" + height="23" + label="Map" + layout="topleft" + name="map_btn" + top_pad="-23" + width="101" + left_pad="5"/> + </layout_panel> + <layout_panel + follows="all" + height="53" + layout="topleft" + 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" + 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="69" + 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="-2" + 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="0" + width="151" + left="10"/> + + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + + </panel> +</floater> -- cgit v1.2.3 From ed48c490e0e72e745f443adbca28aa65543f6bda Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 22 Aug 2013 09:38:32 -0700 Subject: fixed XP_ERROR rules --- indra/lscript/lscript_compile/indra.l | 17 +++++++++++++++++ indra/newview/app_settings/keywords.ini | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) (limited to 'indra') diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 1c9f50202d..9cbddb60e2 100755 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -685,6 +685,23 @@ int yyerror(const char *fmt, ...); "PRIM_MEDIA_MAX_WIDTH_PIXELS" { count(); yylval.ival = LLMediaEntry::MAX_WIDTH_PIXELS; return(INTEGER_CONSTANT); } "PRIM_MEDIA_MAX_HEIGHT_PIXELS" { count(); yylval.ival = LLMediaEntry::MAX_HEIGHT_PIXELS; return(INTEGER_CONSTANT); } +"XP_ERROR_NONE" { char* sval= "no error"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_THROTTLED" { char* sval= "exceeded throttle"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_EXPERIENCES_DISABLED" { char* sval= "experiences are disabled"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_INVALID_PARAMETERS" { char* sval= "invalid parameters"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NOT_PERMITTED" { char* sval= "operation not permitted"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NO_EXPERIENCE" { char* sval= "script not associated with an experience";yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NOT_FOUND" { char* sval= "not found"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_INVALID_EXPERIENCE" { char* sval= "invalid experience"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_EXPERIENCE_DISABLED" { char* sval= "experience is disabled"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_EXPERIENCE_SUSPENDED" { char* sval= "experience is suspended"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_UNKNOWN_ERROR" { char* sval= "unknown error"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_QUOTA_EXCEEDED" { char* sval= "experience data quota exceeded"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_STORE_DISABLED" { char* sval= "key-value store is disabled"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_STORAGE_EXCEPTION" { char* sval= "key-value store communication failed"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_KEY_NOT_FOUND" { char* sval= "key doesn't exist"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_RETRY_UPDATE" { char* sval= "retry update"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } + "STATUS_OK" { count(); yylval.ival = LSL_STATUS_OK; return(INTEGER_CONSTANT); } "STATUS_MALFORMED_PARAMS" { count(); yylval.ival = LSL_STATUS_MALFORMED_PARAMS; return(INTEGER_CONSTANT); } "STATUS_TYPE_MISMATCH" { count(); yylval.ival = LSL_STATUS_TYPE_MISMATCH; return(INTEGER_CONSTANT); } diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index a87310955f..5de79b4bf5 100755 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -52,6 +52,7 @@ remote_data remote_data(integer event_type, key channel, key message_id, str http_response http_response(key request_id, integer status, list metadata, string body):Triggered when task receives a response to one of its llHTTPRequests http_request http_request(key id, string method, string body):Triggered when task receives an http request against a public URL + # integer constants [word .1, .1, .5] TRUE Integer constant for Boolean operations @@ -668,6 +669,24 @@ TEXTURE_TRANSPARENT UUID for the "White - Transparent" texture URL_REQUEST_GRANTED Used with http_request when a public URL is successfully granted URL_REQUEST_DENIED Used with http_request when a public URL is not available +XP_ERROR_NONE No error was detected +XP_ERROR_THROTTLED The call failed due to too many recent calls. +XP_ERROR_EXPERIENCES_DISABLED The region currently has experiences disabled. +XP_ERROR_INVALID_PARAMETERS One of the string arguments was too big to fit in the key-value store. +XP_ERROR_NOT_PERMITTED This experience is not allowed to run on the current region. +XP_ERROR_NO_EXPERIENCE This script is not associated with an experience. +XP_ERROR_NOT_FOUND The sim was unable to verify the validity of the experience. Retrying after a short wait is advised. +XP_ERROR_INVALID_EXPERIENCE The script is associated with an experience that no longer exists. +XP_ERROR_EXPERIENCE_DISABLED The experience owner has temporarily disabled the experience. +XP_ERROR_EXPERIENCE_SUSPENDED The experience has been suspended by Linden Customer Support. +XP_ERROR_QUOTA_EXCEEDED An attempted write data to the key-value store failed due to the data quota being met. +XP_ERROR_STORE_DISABLED The key-value store is currently disabled on this region. +XP_ERROR_STORAGE_EXCEPTION Unable to communicate with the key-value store. +XP_ERROR_KEY_NOT_FOUND The requested key does not exist. +XP_ERROR_RETRY_UPDATE A checked update failed due to an out of date request. +XP_ERROR_UNKNOWN_ERROR Other unknown error. + + # float constants [word .3, .1, .5] PI 3.1415926535897932384626433832795 -- cgit v1.2.3 From f86da8b241b22fba8f771c5403a9bc1f16984693 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 22 Aug 2013 11:23:19 -0700 Subject: constify sgring constants for gcc --- indra/lscript/lscript_compile/indra.l | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'indra') diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 9cbddb60e2..6fbdf13df7 100755 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -685,23 +685,6 @@ int yyerror(const char *fmt, ...); "PRIM_MEDIA_MAX_WIDTH_PIXELS" { count(); yylval.ival = LLMediaEntry::MAX_WIDTH_PIXELS; return(INTEGER_CONSTANT); } "PRIM_MEDIA_MAX_HEIGHT_PIXELS" { count(); yylval.ival = LLMediaEntry::MAX_HEIGHT_PIXELS; return(INTEGER_CONSTANT); } -"XP_ERROR_NONE" { char* sval= "no error"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_THROTTLED" { char* sval= "exceeded throttle"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_EXPERIENCES_DISABLED" { char* sval= "experiences are disabled"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_INVALID_PARAMETERS" { char* sval= "invalid parameters"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_NOT_PERMITTED" { char* sval= "operation not permitted"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_NO_EXPERIENCE" { char* sval= "script not associated with an experience";yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_NOT_FOUND" { char* sval= "not found"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_INVALID_EXPERIENCE" { char* sval= "invalid experience"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_EXPERIENCE_DISABLED" { char* sval= "experience is disabled"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_EXPERIENCE_SUSPENDED" { char* sval= "experience is suspended"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_UNKNOWN_ERROR" { char* sval= "unknown error"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_QUOTA_EXCEEDED" { char* sval= "experience data quota exceeded"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_STORE_DISABLED" { char* sval= "key-value store is disabled"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_STORAGE_EXCEPTION" { char* sval= "key-value store communication failed"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_KEY_NOT_FOUND" { char* sval= "key doesn't exist"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_RETRY_UPDATE" { char* sval= "retry update"; yylval.sval = new char[strlen(sval)]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } - "STATUS_OK" { count(); yylval.ival = LSL_STATUS_OK; return(INTEGER_CONSTANT); } "STATUS_MALFORMED_PARAMS" { count(); yylval.ival = LSL_STATUS_MALFORMED_PARAMS; return(INTEGER_CONSTANT); } "STATUS_TYPE_MISMATCH" { count(); yylval.ival = LSL_STATUS_TYPE_MISMATCH; return(INTEGER_CONSTANT); } @@ -711,6 +694,23 @@ int yyerror(const char *fmt, ...); "STATUS_INTERNAL_ERROR" { count(); yylval.ival = LSL_STATUS_INTERNAL_ERROR; return(INTEGER_CONSTANT); } "STATUS_WHITELIST_FAILED" { count(); yylval.ival = LSL_STATUS_WHITELIST_FAILED; return(INTEGER_CONSTANT); } +"XP_ERROR_NONE" { const char* sval= "no error"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_THROTTLED" { const char* sval= "exceeded throttle"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_EXPERIENCES_DISABLED" { const char* sval= "experiences are disabled"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_INVALID_PARAMETERS" { const char* sval= "invalid parameters"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NOT_PERMITTED" { const char* sval= "operation not permitted"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NO_EXPERIENCE" { const char* sval= "script not associated with an experience";yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NOT_FOUND" { const char* sval= "not found"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_INVALID_EXPERIENCE" { const char* sval= "invalid experience"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_EXPERIENCE_DISABLED" { const char* sval= "experience is disabled"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_EXPERIENCE_SUSPENDED" { const char* sval= "experience is suspended"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_UNKNOWN_ERROR" { const char* sval= "unknown error"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_QUOTA_EXCEEDED" { const char* sval= "experience data quota exceeded"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_STORE_DISABLED" { const char* sval= "key-value store is disabled"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_STORAGE_EXCEPTION" { const char* sval= "key-value store communication failed"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_KEY_NOT_FOUND" { const char* sval= "key doesn't exist"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_RETRY_UPDATE" { const char* sval= "retry update"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } + {L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); } {N}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } -- cgit v1.2.3 From 373d37cd7bd41daa85850280e985a43edcca0a47 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 22 Aug 2013 12:04:07 -0700 Subject: added missing include --- indra/newview/llfloaterexperienceprofile.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 821a1de6f7..e074f83baa 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -37,6 +37,7 @@ #include "llexpandabletextbox.h" #include "lltexturectrl.h" #include "lltrans.h" +#include <sstream> #define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" #define TF_NAME "experience_title" -- cgit v1.2.3 From eaf847e60df3c078d15f8991e9448b06ffa83bf7 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 27 Aug 2013 16:37:08 -0700 Subject: experience profile work in progress --- indra/newview/llfloaterexperienceprofile.cpp | 125 ++++++++++++++------- indra/newview/llfloaterexperienceprofile.h | 7 +- indra/newview/llviewerregion.cpp | 5 +- .../default/xui/en/floater_experienceprofile.xml | 67 +++++++---- 4 files changed, 135 insertions(+), 69 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index e074f83baa..8e5a7a7588 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -27,17 +27,19 @@ #include "llviewerprecompiledheaders.h" -#include "llfloaterexperienceprofile.h" +#include "llexpandabletextbox.h" #include "llexperiencecache.h" -#include "llfloaterworldmap.h" +#include "llfloaterexperienceprofile.h" #include "llfloaterreg.h" #include "lllayoutstack.h" -#include "lltextbox.h" #include "llsdserialize.h" -#include "llexpandabletextbox.h" +#include "llslurl.h" +#include "lltextbox.h" #include "lltexturectrl.h" #include "lltrans.h" -#include <sstream> +#include "llviewerregion.h" +#include "llagent.h" +#include "llhttpclient.h" #define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" #define TF_NAME "experience_title" @@ -54,8 +56,6 @@ #define PNL_LOC "location panel" #define PNL_MRKT "marketplace panel" -#define BTN_TP "teleport_btn" -#define BTN_MAP "show_on_map_btn" #define BTN_EDIT "edit_btn" @@ -76,6 +76,29 @@ LLFloaterExperienceProfile::~LLFloaterExperienceProfile() } +class IsAdminResponder : public LLHTTPClient::Responder +{ +public: + IsAdminResponder(const LLHandle<LLFloaterExperienceProfile>& parent):mParent(parent) + { + } + + LLHandle<LLFloaterExperienceProfile> mParent; + + virtual void result(const LLSD& content) + { + LLFloaterExperienceProfile* parent = mParent.get(); + if(!parent) + return; + + 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; + } +}; + BOOL LLFloaterExperienceProfile::postBuild() { mImagePanel = getChild<LLLayoutPanel>(PNL_IMAGE); @@ -87,12 +110,22 @@ BOOL LLFloaterExperienceProfile::postBuild() { LLExperienceCache::fetch(mExperienceId, true); LLExperienceCache::get(mExperienceId, boost::bind(&LLFloaterExperienceProfile::experienceCallback, - getDerivedHandle<LLFloaterExperienceProfile>(), _1)); + getDerivedHandle<LLFloaterExperienceProfile>(), _1)); + + 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>())); + } + } } + + - childSetAction(BTN_TP, boost::bind(&LLFloaterExperienceProfile::onClickTeleport, this)); - childSetAction(BTN_MAP, boost::bind(&LLFloaterExperienceProfile::onClickMap, this)); childSetAction(BTN_EDIT, boost::bind(&LLFloaterExperienceProfile::onClickEdit, this)); return TRUE; @@ -107,40 +140,42 @@ void LLFloaterExperienceProfile::experienceCallback(LLHandle<LLFloaterExperience } } -void LLFloaterExperienceProfile::onClickMap() +void LLFloaterExperienceProfile::onClickEdit() { -// LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal()); -// LLFloaterReg::showInstance("world_map", "center"); } -void LLFloaterExperienceProfile::onClickTeleport() +bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child ) { -// if (!getPosGlobal().isExactlyZero()) -// { -// gAgent.teleportViaLocation(getPosGlobal()); -// LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal()); -// } - -} + LLStyle::Params style; + std::string access; + if(maturity <= SIM_ACCESS_PG) + { + style.image(LLUI::getUIImage(getString("maturity_icon_general"))); + access = LLTrans::getString("SIM_ACCESS_PG"); + } + else if(maturity <= SIM_ACCESS_MATURE) + { + style.image(LLUI::getUIImage(getString("maturity_icon_moderate"))); + access = LLTrans::getString("SIM_ACCESS_MATURE"); + } + else if(maturity <= SIM_ACCESS_ADULT) + { + style.image(LLUI::getUIImage(getString("maturity_icon_adult"))); + access = LLTrans::getString("SIM_ACCESS_ADULT"); + } + else + { + return false; + } -void LLFloaterExperienceProfile::onClickEdit() -{ + child->setText(LLStringUtil::null); -} + child->appendImageSegment(style); -std::string LLFloaterExperienceProfile::getMaturityString(U8 maturity) -{ - if(maturity <= SIM_ACCESS_MIN) - return LLTrans::getString("SIM_ACCESS_MIN"); - if(maturity <= SIM_ACCESS_PG) - return LLTrans::getString("SIM_ACCESS_PG"); - if(maturity <= SIM_ACCESS_MATURE) - return LLTrans::getString("SIM_ACCESS_MATURE"); - if(maturity <= SIM_ACCESS_ADULT) - return LLTrans::getString("SIM_ACCESS_ADULT"); + child->appendText(access, false); - return LLStringUtil::null; + return true; } @@ -170,11 +205,21 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) mLocationPanel->setVisible(value.length()>0); child = getChild<LLTextBox>(TF_MATURITY); - child->setText(getMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()))); + setMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()), child); child = getChild<LLTextBox>(TF_OWNER); - child->setText(experience[LLExperienceCache::OWNER_ID].asString()); - + + LLUUID id = experience[LLExperienceCache::OWNER_ID].asUUID(); + if(experience[LLExperienceCache::GROUP_ID].asUUID() == id) + { + value = LLSLURL("group", id, "inspect").getSLURLString(); + } + else + { + value = LLSLURL("agent", id, "inspect").getSLURLString(); + } + child->setText(value); + value=experience[LLExperienceCache::METADATA].asString(); if(value.empty()) return; @@ -183,7 +228,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) LLSD data; - std::istringstream is = std::istringstream(value); + std::istringstream is(value); if(LLSDParser::PARSE_FAILURE != parser->parse(is, data, value.size())) { if(data.has(TF_MRKT)) @@ -213,4 +258,4 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) -} +} \ No newline at end of file diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index 1d1e4c50cf..e19a63aca7 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -34,6 +34,7 @@ #include "llsd.h" class LLLayoutPanel; +class LLTextBox; class LLFloaterExperienceProfile : public LLFloater { @@ -45,16 +46,14 @@ public: void setExperienceId( const LLUUID& experience_id ); protected: - - void onClickMap(); - void onClickTeleport(); void onClickEdit(); static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience); + void refreshExperience(const LLSD& experience); BOOL postBuild(); - std::string getMaturityString(U8 maturity); + bool setMaturityString(U8 maturity, LLTextBox* child); LLUUID mExperienceId; LLSD mExperienceDetails; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index adc346529e..e0eb8b5f46 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1597,8 +1597,11 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("GetDisplayNames"); capabilityNames.append("GetExperiences"); - capabilityNames.append("GetExperienceInfo"); + capabilityNames.append("GetExperienceInfo"); + capabilityNames.append("GetAdminExperiences"); capabilityNames.append("GetCreatorExperiences"); + capabilityNames.append("ExperiencePreferences"); + capabilityNames.append("IsExperienceAdmin"); 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 d9990f3a59..668a3bcc2e 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -10,18 +10,33 @@ min_width="300" layout="topleft" name="floater_experience_profile" - save_rect="yes" single_instance="false" reuse_instance="false" title="EXPERIENCE PROFILE" width="358"> + <floater.string + name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string + name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string + name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <floater.string + name="forget_experience"> + "Forget" + </floater.string> <panel background_visible="true" follows="all" height="570" layout="topleft" left="5" - min_height="350" + min_height="250" top="5" width="348" name="panel_experience_info"> @@ -133,7 +148,7 @@ </layout_panel> <layout_panel follows="all" - height="69" + height="46" layout="topleft" left="0" top="5" @@ -165,23 +180,6 @@ width="288"> someplace </text> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - name="teleport_btn" - width="151" - left="10"/> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - name="map_btn" - top_pad="-23" - width="101" - left_pad="5"/> </layout_panel> <layout_panel follows="all" @@ -246,7 +244,7 @@ left_pad="2" valign="center" name="ContentRatingText" - top_delta="-2" + top_delta="-3" width="188"> Adult </text> @@ -280,9 +278,30 @@ label="Edit" layout="topleft" name="edit_btn" - top_pad="0" - width="151" - left="10"/> + top_pad="3" + width="80" + left="10" + visible="false"/> + <button + follows="bottom|left" + height="23" + label="Allow" + layout="topleft" + name="allow_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> -- cgit v1.2.3 From df437553ede576df4e6a1c5e4a2e177f7d8275c2 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 3 Sep 2013 10:14:24 -0700 Subject: Updated experience profile floater to have permission buttons --- indra/newview/llfloaterexperienceprofile.cpp | 151 ++++++++++++++++++++- indra/newview/llfloaterexperienceprofile.h | 5 +- indra/newview/llviewerregion.cpp | 4 + .../default/xui/en/floater_experienceprofile.xml | 22 +-- 4 files changed, 169 insertions(+), 13 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 8e5a7a7588..895fd5ee4d 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -57,6 +57,9 @@ #define PNL_MRKT "marketplace panel" #define BTN_EDIT "edit_btn" +#define BTN_ALLOW "allow_btn" +#define BTN_FORGET "forget_btn" +#define BTN_BLOCK "block_btn" LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data) @@ -75,6 +78,29 @@ LLFloaterExperienceProfile::~LLFloaterExperienceProfile() } +class ExperiencePreferencesResponder : public LLHTTPClient::Responder +{ +public: + ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):mParent(parent) + { + } + + LLHandle<LLFloaterExperienceProfile> mParent; + + virtual void result(const LLSD& content) + { + LLFloaterExperienceProfile* parent=mParent.get(); + if(parent) + { + parent->setPreferences(content); + } + } + virtual void error(U32 status, const std::string& reason) + { + lldebugs << "ExperiencePreferencesResponder failed with code: " << status<< ", reason: " << reason << llendl; + } +}; + class IsAdminResponder : public LLHTTPClient::Responder { @@ -90,8 +116,27 @@ public: LLFloaterExperienceProfile* parent = mParent.get(); if(!parent) return; + + LLButton* edit=parent->getChild<LLButton>(BTN_EDIT); - parent->getChild<LLButton>(BTN_EDIT)->setVisible(content["status"].asBoolean()); + if(content.has("experience_ids")) + { + 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; + } + } + edit->setVisible(FALSE); + + //parent->getChild<LLButton>(BTN_EDIT)->setVisible(content["status"].asBoolean()); } virtual void error(U32 status, const std::string& reason) { @@ -115,10 +160,22 @@ BOOL LLFloaterExperienceProfile::postBuild() LLViewerRegion* region = gAgent.getRegion(); if (region) { - std::string lookup_url=region->getCapability("IsExperienceAdmin"); + // 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"); + if(!lookup_url.empty()) + { + LLHTTPClient::get(lookup_url, new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>())); + } + + lookup_url=region->getCapability("ExperiencePreferences"); if(!lookup_url.empty()) { - LLHTTPClient::get(lookup_url+"/"+mExperienceId.asString(), new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>())); + LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>())); } } } @@ -127,6 +184,9 @@ 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")); return TRUE; } @@ -145,6 +205,39 @@ void LLFloaterExperienceProfile::onClickEdit() } + +void LLFloaterExperienceProfile::onClickPermission(const char* perm) +{ + LLViewerRegion* region = gAgent.getRegion(); + if (!region) + return; + + std::string lookup_url=region->getCapability("ExperiencePreferences"); + if(lookup_url.empty()) + return; + LLSD permission; + LLSD data; + permission["permission"]=perm; + + data[mExperienceId.asString()]=permission; + LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>())); + +} + + +void LLFloaterExperienceProfile::onClickForget() +{ + LLViewerRegion* region = gAgent.getRegion(); + if (!region) + return; + + std::string lookup_url=region->getCapability("ExperiencePreferences"); + if(lookup_url.empty()) + return; + + LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>())); +} + bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child ) { LLStyle::Params style; @@ -258,4 +351,54 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) -} \ No newline at end of file +} + +void LLFloaterExperienceProfile::setPreferences( const LLSD& content ) +{ + const LLSD& experiences = content["experiences"]; + const LLSD& blocked = content["blocked"]; + LLButton* button; + + + for(LLSD::array_const_iterator it = experiences.beginArray(); it != experiences.endArray() ; ++it) + { + if(it->asUUID()==mExperienceId) + { + button=getChild<LLButton>(BTN_ALLOW); + button->setEnabled(FALSE); + + button=getChild<LLButton>(BTN_FORGET); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_BLOCK); + button->setEnabled(TRUE); + return; + } + } + + for(LLSD::array_const_iterator it = blocked.beginArray(); it != blocked.endArray() ; ++it) + { + if(it->asUUID()==mExperienceId) + { + button=getChild<LLButton>(BTN_ALLOW); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_FORGET); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_BLOCK); + button->setEnabled(FALSE); + return; + } + } + + + button=getChild<LLButton>(BTN_ALLOW); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_FORGET); + button->setEnabled(FALSE); + + button=getChild<LLButton>(BTN_BLOCK); + button->setEnabled(TRUE); +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index e19a63aca7..c486ca5f30 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -44,9 +44,12 @@ public: virtual ~LLFloaterExperienceProfile(); void setExperienceId( const LLUUID& experience_id ); + void setPreferences( const LLSD& content ); protected: - void onClickEdit(); + void onClickEdit(); + void onClickPermission(const char* permission); + void onClickForget(); static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index e0eb8b5f46..af993943ce 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1601,7 +1601,11 @@ 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("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 668a3bcc2e..58c0ed70ef 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -26,10 +26,6 @@ name="maturity_icon_adult"> "Parcel_R_Light" </floater.string> - <floater.string - name="forget_experience"> - "Forget" - </floater.string> <panel background_visible="true" follows="all" @@ -218,7 +214,7 @@ </layout_panel> <layout_panel follows="left|top|right" - height="69" + height="92" left="0" top="0" auto_resize="false" @@ -279,9 +275,9 @@ layout="topleft" name="edit_btn" top_pad="3" - width="80" - left="10" - visible="false"/> + width="120" + left="73" + visible="true"/> <button follows="bottom|left" height="23" @@ -289,6 +285,16 @@ 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"/> -- cgit v1.2.3 From ece98188a8e5c76adddf884886f44b6fc9c5ae21 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 6 Sep 2013 17:09:50 -0700 Subject: Added profile editing to the experience profile floater. --- indra/newview/llfloaterexperienceprofile.cpp | 353 ++++++++-- indra/newview/llfloaterexperienceprofile.h | 31 +- indra/newview/llviewerregion.cpp | 4 +- .../default/xui/en/floater_experienceprofile.xml | 757 +++++++++++++-------- 4 files changed, 811 insertions(+), 334 deletions(-) (limited to 'indra') 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> -- cgit v1.2.3 From 541e92c3653e112ec54ea322c9c5c54cacb0fd21 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 9 Sep 2013 10:26:18 -0700 Subject: Added some explicitness for the mac build --- indra/newview/llfloaterexperienceprofile.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 292f6f0952..e1e4039626 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -109,7 +109,7 @@ public: class ExperienceUpdateResponder : public HandleResponder<LLFloaterExperienceProfile> { public: - ExperienceUpdateResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder(parent) + ExperienceUpdateResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder<LLFloaterExperienceProfile>(parent) { } @@ -128,7 +128,7 @@ public: class ExperiencePreferencesResponder : public HandleResponder<LLFloaterExperienceProfile> { public: - ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder(parent) + ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder<LLFloaterExperienceProfile>(parent) { } @@ -147,7 +147,7 @@ public: class IsAdminResponder : public HandleResponder<LLFloaterExperienceProfile> { public: - IsAdminResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder(parent) + IsAdminResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder<LLFloaterExperienceProfile>(parent) { } -- cgit v1.2.3 From 51c01f5294b68b66706685346ecea16246b85cce Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 9 Sep 2013 11:19:41 -0700 Subject: More explicitnexx for the mac build Also update the experience cache when the update returns. --- indra/llmessage/llexperiencecache.cpp | 2 +- indra/newview/llfloaterexperienceprofile.cpp | 3 ++- indra/newview/llfloaterexperienceprofile.h | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 2e260ecdef..b131156905 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -577,7 +577,7 @@ namespace LLExperienceCache { if(experience_data.has(EXPERIENCE_ID)) { - sCache[experience_data[EXPERIENCE_ID].asUUID()]=experience_data; + processExperience(experience_data[EXPERIENCE_ID].asUUID(), experience_data); } else { diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index e1e4039626..a565b5c8e7 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -496,7 +496,7 @@ BOOL LLFloaterExperienceProfile::canClose() } } -bool LLFloaterExperienceProfile::handleSaveChangesDialog( const LLSD& notification, const LLSD& response, int action ) +bool LLFloaterExperienceProfile::handleSaveChangesDialog( const LLSD& notification, const LLSD& response, PostSaveAction action ) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); switch( option ) @@ -615,6 +615,7 @@ void LLFloaterExperienceProfile::onSaveComplete( const LLSD& content ) } refreshExperience(*it); + LLExperienceCache::insert(*it); LLExperienceCache::fetch(id, true); if(mSaveCompleteAction==VIEW) diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index c32f274206..1f1e135c01 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -41,7 +41,7 @@ class LLFloaterExperienceProfile : public LLFloater { LOG_CLASS(LLFloaterExperienceProfile); public: - enum + enum PostSaveAction { NOTHING, CLOSE, @@ -74,7 +74,7 @@ protected: BOOL postBuild(); bool setMaturityString(U8 maturity, LLTextBox* child, LLComboBox* combo); - bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response, int action); + bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response, PostSaveAction action); void doSave( int success_action ); LLUUID mExperienceId; LLSD mExperienceDetails; -- cgit v1.2.3 From f5b7343238626f52ea45ee74ed06294ae1f22a74 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 17 Sep 2013 19:58:20 -0700 Subject: Updated position of the edit button the experience profile and added the Grid Wide tag. --- indra/llmessage/llexperiencecache.cpp | 19 +- indra/newview/llfloaterexperienceprofile.cpp | 74 ++++--- indra/newview/llfloaterexperienceprofile.h | 5 - .../default/xui/en/floater_experienceprofile.xml | 221 ++++++++++++--------- 4 files changed, 177 insertions(+), 142 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index b131156905..921c1edc2e 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -251,7 +251,7 @@ namespace LLExperienceCache sCache[public_key]=it->second; } - LL_INFOS("ExperienceCache") << "loaded " << sCache.size() << LL_ENDL; + LL_DEBUGS("ExperienceCache") << "importFile() loaded " << sCache.size() << LL_ENDL; } void exportFile(std::ostream& ostr) @@ -298,7 +298,7 @@ namespace LLExperienceCache LLUUID public_key = row[EXPERIENCE_ID].asUUID(); - LL_INFOS("ExperienceCache") << "Received result for " << public_key + LL_DEBUGS("ExperienceCache") << "Received result for " << public_key << " display '" << row[LLExperienceCache::NAME].asString() << "'" << LL_ENDL ; processExperience(public_key, row); @@ -317,10 +317,10 @@ namespace LLExperienceCache exp[QUOTA] = DEFAULT_QUOTA; processExperience(id, exp); - LL_INFOS("ExperienceCache") << "Error result for " << id << LL_ENDL ; + LL_WARNS("ExperienceCache") << "LLExperienceResponder::result() error result for " << id << LL_ENDL ; } - LL_INFOS("ExperienceCache") << sCache.size() << " cached experiences" << LL_ENDL; + LL_DEBUGS("ExperienceCache") << sCache.size() << " cached experiences" << LL_ENDL; } virtual void error(U32 status, const std::string& reason) @@ -351,7 +351,6 @@ namespace LLExperienceCache exp[QUOTA] = DEFAULT_QUOTA; LLExperienceCache::processExperience(it->first, exp); - LL_INFOS("ExperienceCache") << "Error result for " << it->first << LL_ENDL ; } } @@ -443,7 +442,7 @@ namespace LLExperienceCache if(ostr.tellp() > EXP_URL_SEND_THRESHOLD) { - LL_INFOS("ExperienceCache") << " query: " << ostr.str() << LL_ENDL; + LL_DEBUGS("ExperienceCache") << "requestExperiences() query: " << ostr.str() << LL_ENDL; LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys)); ostr.clear(); ostr.str(sLookupURL); @@ -454,7 +453,7 @@ namespace LLExperienceCache if(ostr.tellp() > sLookupURL.size()) { - LL_INFOS("ExperienceCache") << " query: " << ostr.str() << LL_ENDL; + LL_DEBUGS("ExperienceCache") << "requestExperiences() query 2: " << ostr.str() << LL_ENDL; LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys)); } @@ -539,7 +538,7 @@ namespace LLExperienceCache { if(!exp.has(EXPERIENCE_ID)) { - LL_INFOS("ExperienceCache") << "Removing experience with no id " << LL_ENDL ; + LL_WARNS("ExperienceCache") << "Removing experience with no id " << LL_ENDL ; sCache.erase(cur); } else @@ -552,7 +551,7 @@ namespace LLExperienceCache } else { - LL_INFOS("ExperienceCache") << "Removing invalid experience " << id << LL_ENDL ; + LL_WARNS("ExperienceCache") << "Removing invalid experience " << id << LL_ENDL ; sCache.erase(cur); } } @@ -565,7 +564,7 @@ namespace LLExperienceCache { if(!key.isNull() && !isRequestPending(key) && (refresh || sCache.find(key)==sCache.end())) { - LL_INFOS("ExperienceCache") << " queue request for " << EXPERIENCE_ID << " " << key << LL_ENDL ; + LL_DEBUGS("ExperienceCache") << " queue request for " << EXPERIENCE_ID << " " << key << LL_ENDL ; sAskQueue[key]=EXPERIENCE_ID; return true; diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index a565b5c8e7..49dd2a59ac 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -54,10 +54,12 @@ #define TF_MRKT "marketplace" #define TF_MATURITY "ContentRatingText" #define TF_OWNER "OwnerText" +#define TF_GRID_WIDE "grid_wide" #define EDIT "edit_" #define IMG_LOGO "logo" +#define PNL_TOP "top panel" #define PNL_IMAGE "image_panel" #define PNL_DESC "description panel" #define PNL_LOC "location panel" @@ -76,10 +78,6 @@ LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data) : LLFloater(data) , mExperienceId(data.asUUID()) - , mImagePanel(NULL) - , mDescriptionPanel(NULL) - , mLocationPanel(NULL) - , mMarketplacePanel(NULL) , mSaveCompleteAction(NOTHING) , mDirty(false) , mForceClose(false) @@ -169,17 +167,16 @@ public: if(url.empty()) enabled = false; } - - parent->getChild<LLButton>(BTN_EDIT)->setVisible(enabled && content["status"].asBoolean()); + if(enabled && content["status"].asBoolean()) + { + parent->getChild<LLLayoutPanel>(PNL_TOP)->setVisible(TRUE); + parent->getChild<LLButton>(BTN_EDIT)->setVisible(TRUE); + } } }; BOOL LLFloaterExperienceProfile::postBuild() { - mImagePanel = getChild<LLLayoutPanel>(PNL_IMAGE); - mDescriptionPanel = getChild<LLLayoutPanel>(PNL_DESC); - mLocationPanel = getChild<LLLayoutPanel>(PNL_LOC); - mMarketplacePanel = getChild<LLLayoutPanel>(PNL_MRKT); if (mExperienceId.notNull()) { @@ -327,13 +324,20 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) { mExperienceDetails = experience; - if(experience.has(LLExperienceCache::MISSING)) - { - mImagePanel->setVisible(FALSE); - mDescriptionPanel->setVisible(FALSE); - mLocationPanel->setVisible(FALSE); - mMarketplacePanel->setVisible(FALSE); - } + + LLLayoutPanel* imagePanel = getChild<LLLayoutPanel>(PNL_IMAGE); + LLLayoutPanel* descriptionPanel = getChild<LLLayoutPanel>(PNL_DESC); + LLLayoutPanel* locationPanel = getChild<LLLayoutPanel>(PNL_LOC); + LLLayoutPanel* marketplacePanel = getChild<LLLayoutPanel>(PNL_MRKT); + LLLayoutPanel* topPanel = getChild<LLLayoutPanel>(PNL_TOP); + + + imagePanel->setVisible(FALSE); + descriptionPanel->setVisible(FALSE); + locationPanel->setVisible(FALSE); + marketplacePanel->setVisible(FALSE); + topPanel->setVisible(FALSE); + LLTextBox* child = getChild<LLTextBox>(TF_NAME); child->setText(experience[LLExperienceCache::NAME].asString()); @@ -344,7 +348,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) std::string value = experience[LLExperienceCache::DESCRIPTION].asString(); LLExpandableTextBox* exchild = getChild<LLExpandableTextBox>(TF_DESC); exchild->setText(value); - mDescriptionPanel->setVisible(value.length()>0); + descriptionPanel->setVisible(value.length()>0); LLTextEditor* edit_child = getChild<LLTextEditor>(EDIT TF_DESC); edit_child->setText(value); @@ -352,7 +356,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) value = experience[LLExperienceCache::SLURL].asString(); child = getChild<LLTextBox>(TF_SLURL); child->setText(value); - mLocationPanel->setVisible(value.length()>0); + locationPanel->setVisible(value.length()>0); linechild = getChild<LLLineEditor>(EDIT TF_SLURL); linechild->setText(value); @@ -372,7 +376,20 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) value = LLSLURL("agent", id, "inspect").getSLURLString(); } child->setText(value); - + + LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE); + S32 properties = mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger(); + enable->set(properties & LLExperienceCache::PROPERTY_DISABLED); + + enable = getChild<LLCheckBoxCtrl>(EDIT BTN_PRIVATE); + enable->set(properties & LLExperienceCache::PROPERTY_PRIVATE); + + if(properties & LLExperienceCache::PROPERTY_GRID) + { + topPanel->setVisible(TRUE); + getChild<LLTextBox>(TF_GRID_WIDE)->setVisible(TRUE); + } + value=experience[LLExperienceCache::METADATA].asString(); if(value.empty()) return; @@ -391,11 +408,11 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) child = getChild<LLTextBox>(TF_MRKT); child->setText(value); - mMarketplacePanel->setVisible(TRUE); + marketplacePanel->setVisible(TRUE); } else { - mMarketplacePanel->setVisible(FALSE); + marketplacePanel->setVisible(FALSE); } linechild = getChild<LLLineEditor>(EDIT TF_MRKT); @@ -405,18 +422,17 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) { LLTextureCtrl* logo = getChild<LLTextureCtrl>(IMG_LOGO); logo->setImageAssetID(data[IMG_LOGO].asUUID()); - mImagePanel->setVisible(TRUE); + imagePanel->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)); + else + { + marketplacePanel->setVisible(FALSE); + imagePanel->setVisible(FALSE); + } mDirty=false; setCanClose(!mDirty); diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index 1f1e135c01..4aa9820a91 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -78,11 +78,6 @@ protected: void doSave( int success_action ); LLUUID mExperienceId; LLSD mExperienceDetails; - - LLLayoutPanel* mImagePanel; - LLLayoutPanel* mDescriptionPanel; - LLLayoutPanel* mLocationPanel; - LLLayoutPanel* mMarketplacePanel; int mSaveCompleteAction; bool mDirty; bool mForceClose; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index f47042ea33..8cf9714305 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -26,11 +26,10 @@ layout="topleft" left_pad="4" name="edit_title" - text_color="White" top="2" value="Experience Profile" use_ellipses="true" - left="3" + left="6" right="-3"/> <tab_container hide_tabs="true" @@ -64,7 +63,7 @@ width="330"> <panel bg_alpha_color="DkGray2" - follows="top|left" + follows="top|left|right" height="480" layout="topleft" left="0" @@ -81,6 +80,41 @@ top="0" orientation="vertical" width="315"> + <layout_panel + follows="all" + height="29" + layout="topleft" + left="0" + top="0" + auto_resize="false" + visible="false" + width="315" + name="top panel"> + <text + type="string" + length="1" + follows="left|top|right" + font="SansSerif" + height="19" + top="10" + layout="topleft" + left="10" + right="-123" + visible="false" + name="grid_wide"> + Grid-wide + </text> + <button + follows="top|right" + height="23" + label="Edit" + layout="topleft" + name="edit_btn" + width="100" + visible="false" + top_pad="-23" + right="-14"/> + </layout_panel> <layout_panel follows="all" height="197" @@ -109,8 +143,7 @@ left="0" top="5" width="313" - auto_resize="false" - > + auto_resize="false"> <text follows="left|top|right" font="SansSerifLarge" @@ -118,10 +151,9 @@ layout="topleft" left="10" name="experience_title" - text_color="white" top="0" use_ellipses="true" - value="Kyle's Superhero RPG" + value="" width="288"/> </layout_panel> <layout_panel @@ -142,20 +174,19 @@ 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. " + value="" width="293"/> </layout_panel> <layout_panel - follows="all" - height="46" + follows="" + height="18" layout="topleft" left="0" - top="5" - width="313" - visible="false" + top="0" auto_resize="false" - name="location panel" - > + width="315" + visible="true" + name="maturity panel"> <text type="string" length="1" @@ -163,9 +194,9 @@ height="16" layout="topleft" left="10" - name="Location" - width="290"> - Location: + name="ContentRating" + width="100"> + Rating: </text> <text type="string" @@ -173,25 +204,23 @@ follows="left|top|right" height="18" layout="topleft" - left="10" + left_pad="2" valign="center" - name="LocationTextText" - width="288"> - someplace + name="ContentRatingText" + top_delta="-3" + width="188"> </text> </layout_panel> <layout_panel follows="all" - height="53" + height="46" layout="topleft" left="0" top="5" width="313" visible="false" auto_resize="false" - name="marketplace panel" - - > + name="location panel"> <text type="string" length="1" @@ -199,8 +228,9 @@ height="16" layout="topleft" left="10" + name="Location" width="290"> - Marketplace store: + Location: </text> <text type="string" @@ -210,19 +240,20 @@ layout="topleft" left="10" valign="center" - name="marketplace" + name="LocationTextText" width="288"> - someplace </text> </layout_panel> <layout_panel - follows="left|top|right" - height="92" + follows="all" + height="53" + layout="topleft" left="0" - top="0" + top="5" + width="313" + visible="false" auto_resize="false" - width="315" - > + name="marketplace panel"> <text type="string" length="1" @@ -230,9 +261,8 @@ height="16" layout="topleft" left="10" - name="ContentRating" - width="100"> - Rating: + width="290"> + Marketplace store: </text> <text type="string" @@ -240,13 +270,19 @@ follows="left|top|right" height="18" layout="topleft" - left_pad="2" + left="10" valign="center" - name="ContentRatingText" - top_delta="-3" - width="188"> - Adult + name="marketplace" + width="288"> </text> + </layout_panel> + <layout_panel + follows="left|top|right" + height="75" + left="0" + top="0" + auto_resize="false" + width="315"> <text type="string" length="1" @@ -269,18 +305,7 @@ 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" @@ -393,51 +418,6 @@ 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" @@ -495,6 +475,51 @@ width="20"/> </icons_combo_box.item> </icons_combo_box> + <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"/> <check_box width="140" height="21" left="10" -- cgit v1.2.3 From c8144f7405178621f779b814fd4cb3e632786e0a Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 18 Sep 2013 15:55:42 -0700 Subject: Fixed enabled checkbox in the edit experience profile floater --- indra/newview/llfloaterexperienceprofile.cpp | 17 ++++++++++++++--- .../skins/default/xui/en/floater_experienceprofile.xml | 10 ++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 49dd2a59ac..ec2e7f0f10 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -379,7 +379,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE); S32 properties = mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger(); - enable->set(properties & LLExperienceCache::PROPERTY_DISABLED); + enable->set(!(properties & LLExperienceCache::PROPERTY_DISABLED)); enable = getChild<LLCheckBoxCtrl>(EDIT BTN_PRIVATE); enable->set(properties & LLExperienceCache::PROPERTY_PRIVATE); @@ -408,7 +408,14 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) child = getChild<LLTextBox>(TF_MRKT); child->setText(value); - marketplacePanel->setVisible(TRUE); + if(value.size()) + { + marketplacePanel->setVisible(TRUE); + } + else + { + marketplacePanel->setVisible(FALSE); + } } else { @@ -421,11 +428,15 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) if(data.has(IMG_LOGO)) { LLTextureCtrl* logo = getChild<LLTextureCtrl>(IMG_LOGO); - logo->setImageAssetID(data[IMG_LOGO].asUUID()); + + LLUUID id = data[IMG_LOGO].asUUID(); + logo->setImageAssetID(id); imagePanel->setVisible(TRUE); logo = getChild<LLTextureCtrl>(EDIT IMG_LOGO); logo->setImageAssetID(data[IMG_LOGO].asUUID()); + + imagePanel->setVisible(id.notNull()); } } else diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index 8cf9714305..a3408c5e58 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -6,7 +6,9 @@ enabled="true" can_resize="true" title="EXPERIENCE PROFILE" - width="358"> + min_width="325" + width="358" + height="580"> <floater.string name="maturity_icon_general"> "Parcel_PG_Light" @@ -44,7 +46,7 @@ <panel background_visible="true" follows="all" - height="570" + height="550" layout="topleft" left="0" min_height="250" @@ -532,13 +534,13 @@ top_pad="-21" right="-10" layout="topleft" - follows="top|left" + follows="top|left|right" label="Hide In Search" name="edit_private_btn"/> <button follows="top|left" height="23" - label="Cancel" + label="Back" layout="topleft" name="cancel_btn" width="120" -- cgit v1.2.3 From 48e1e10fd69aaea6ef22feb2518e80a120e9f999 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 23 Sep 2013 11:44:21 -0700 Subject: Added LLUrlEntryExperienceProfile to link to experience profiles Added LLExperienceHandler to handle experience links Updated LLSidepanelItemInfo to use profile links --- indra/llui/llurlentry.cpp | 48 ++++++++++++++++++ indra/llui/llurlentry.h | 14 ++++++ indra/llui/llurlregistry.cpp | 1 + indra/newview/llfloaterexperienceprofile.cpp | 42 +++++++++++++--- indra/newview/llsidepaneliteminfo.cpp | 12 ++--- indra/newview/skins/default/textures/textures.xml | 1 + .../skins/default/xui/en/sidepanel_item_info.xml | 57 ++++++++++------------ indra/newview/skins/default/xui/en/strings.xml | 2 +- 8 files changed, 133 insertions(+), 44 deletions(-) (limited to 'indra') diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index b1cc502c4b..6f7d072d00 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -37,6 +37,7 @@ #include "lltrans.h" #include "lluicolortable.h" #include "message.h" +#include "llexperiencecache.h" #define APP_HEADER_REGEX "((x-grid-location-info://[-\\w\\.]+/app)|(secondlife:///app))" @@ -1200,3 +1201,50 @@ std::string LLUrlEntryIcon::getIcon(const std::string &url) LLStringUtil::trim(mIcon); return mIcon; } + +LLUrlEntryExperienceProfile::LLUrlEntryExperienceProfile() +{ + mPattern = boost::regex(APP_HEADER_REGEX "/experience/[\\da-f-]+/\\w+\\S*", + boost::regex::perl|boost::regex::icase); + mIcon = "Generic_Experience"; +} + +std::string LLUrlEntryExperienceProfile::getLabel( const std::string &url, const LLUrlLabelCallback &cb ) +{ + if (!gCacheName) + { + // probably at the login screen, use short string for layout + return LLTrans::getString("LoadingData"); + } + + std::string experience_id_string = getIDStringFromUrl(url); + if (experience_id_string.empty()) + { + // something went wrong, just give raw url + return unescapeUrl(url); + } + + LLUUID experience_id(experience_id_string); + if (experience_id.isNull()) + { + return LLTrans::getString("ExperienceNameNull"); + } + + LLSD experience_details; + if(LLExperienceCache::get(experience_id, experience_details)) + { + return experience_details[LLExperienceCache::NAME].asString(); + } + + addObserver(experience_id_string, url, cb); + LLExperienceCache::get(experience_id, boost::bind(&LLUrlEntryExperienceProfile::onExperienceDetails, this, _1)); + return LLTrans::getString("LoadingData"); + +} + +void LLUrlEntryExperienceProfile::onExperienceDetails( const LLSD& experience_details ) +{ + callObservers(experience_details[LLExperienceCache::EXPERIENCE_ID].asString(), experience_details[LLExperienceCache::NAME].asString(), LLStringUtil::null); +} + + diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 8c6c32178a..48b4a1d531 100755 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -257,6 +257,20 @@ private: /*virtual*/ std::string getName(const LLAvatarName& avatar_name); }; +/// +/// LLUrlEntryExperienceProfile Describes a Second Life experience profile Url, e.g., +/// secondlife:///app/experience/0e346d8b-4433-4d66-a6b0-fd37083abc4c/profile +/// that displays the experience name +class LLUrlEntryExperienceProfile : public LLUrlEntryBase +{ +public: + LLUrlEntryExperienceProfile(); + /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); +private: + void onExperienceDetails(const LLSD& experience_details); +}; + + /// /// LLUrlEntryGroup Describes a Second Life group Url, e.g., /// secondlife:///app/group/00005ff3-4044-c79f-9de8-fb28ae0df991/about diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 523ee5d78c..480f05bd72 100755 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -60,6 +60,7 @@ LLUrlRegistry::LLUrlRegistry() registerUrl(new LLUrlEntryPlace()); registerUrl(new LLUrlEntryInventory()); registerUrl(new LLUrlEntryObjectIM()); + registerUrl(new LLUrlEntryExperienceProfile()); //LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern, //so it should be registered in the end of list registerUrl(new LLUrlEntrySL()); diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index ec2e7f0f10..01af6b1cab 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -26,14 +26,20 @@ #include "llviewerprecompiledheaders.h" +#include "llfloaterexperienceprofile.h" #include "llagent.h" +#include "llappviewer.h" +#include "llcheckboxctrl.h" +#include "llcombobox.h" +#include "llcommandhandler.h" #include "llexpandabletextbox.h" #include "llexperiencecache.h" -#include "llfloaterexperienceprofile.h" #include "llfloaterreg.h" #include "llhttpclient.h" #include "lllayoutstack.h" +#include "lllineeditor.h" +#include "llnotificationsutil.h" #include "llsdserialize.h" #include "llslurl.h" #include "lltabcontainer.h" @@ -41,11 +47,6 @@ #include "lltexturectrl.h" #include "lltrans.h" #include "llviewerregion.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" @@ -75,6 +76,34 @@ #define BTN_PRIVATE "private_btn" + +class LLExperienceHandler : public LLCommandHandler +{ +public: + LLExperienceHandler() : LLCommandHandler("experience", UNTRUSTED_THROTTLE) { } + + bool handle(const LLSD& params, const LLSD& query_map, + LLMediaCtrl* web) + { + if(params.size() != 2 || params[1].asString() != "profile") + return false; + + LLExperienceCache::get(params[0].asUUID(), boost::bind(&LLExperienceHandler::experienceCallback, this, _1)); + return true; + } + + void experienceCallback(const LLSD& experienceDetails) + { + if(!experienceDetails.has(LLExperienceCache::MISSING)) + { + LLFloaterReg::showInstance("experience_profile", experienceDetails[LLExperienceCache::EXPERIENCE_ID].asUUID(), true); + } + } +}; + +LLExperienceHandler gExperienceHandler; + + LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data) : LLFloater(data) , mExperienceId(data.asUUID()) @@ -355,6 +384,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) value = experience[LLExperienceCache::SLURL].asString(); child = getChild<LLTextBox>(TF_SLURL); + value = LLSLURL(value).getSLURLString(); child->setText(value); locationPanel->setVisible(value.length()>0); diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 040c4ee72d..072b001890 100755 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -43,8 +43,9 @@ #include "llviewercontrol.h" #include "llviewerinventory.h" #include "llviewerobjectlist.h" -#include "llexperiencecache.h" #include "llexperienceassociationresponder.h" +#include "llexperiencecache.h" +#include "lltrans.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -684,18 +685,17 @@ void LLSidepanelItemInfo::setAssociatedExperience( LLHandle<LLSidepanelItemInfo> if(info) { LLUUID id; - if(experience.has(LLExperienceCache::EXPERIENCE_ID) && experience.has(LLExperienceCache::NAME)) + if(experience.has(LLExperienceCache::EXPERIENCE_ID)) { id=experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); } - LLTextBox* xpName = info->getChild<LLTextBox>("LabelItemExperience"); - if(id.isNull()) + if(id.notNull()) { - xpName->setText(info->getString("no_experience")); + info->getChild<LLTextBox>("LabelItemExperience")->setText(LLSLURL("experience", id, "profile").getSLURLString()); } else { - xpName->setText(experience[LLExperienceCache::NAME].asString()); + info->getChild<LLTextBox>("LabelItemExperience")->setText(LLTrans::getString("ExperienceNameNull")); } } } diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 54f60f4441..1cbf2d8282 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -217,6 +217,7 @@ with the same filename but different name <texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" /> <texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" /> + <texture name="Generic_Experience" file_name="Blank.png" preload="false" /> <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" /> <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" /> <texture name="icon_group.tga" file_name="icons/Generic_Group.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index f1f8843a9d..fc3fdbcfa5 100755 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -8,11 +8,7 @@ title="Item Profile" width="333"> <panel.string - name="no_experience"> - (none) - </panel.string> - <panel.string - name="loading_experience"> + name="loading_experience"> (loading) </panel.string> <panel.string @@ -267,6 +263,31 @@ top_delta="0" width="210"> </text> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="5" + name="LabelItemExperienceTitle" + top_pad="0" + width="78" + visible="true"> + Experience: + </text> + <text + type="string" + length="1" + follows="left|top|right" + height="10" + layout="topleft" + left_delta="78" + name="LabelItemExperience" + top_delta="0" + width="210" + visible="true" + /> <panel border="false" follows="left|top|right" @@ -428,32 +449,6 @@ height="23" max_val="999999999" top_pad="10"/> - - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="5" - name="LabelItemExperienceTitle" - top_pad="10" - width="78" - visible="false"> - Experience: - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="10" - layout="topleft" - left_delta="78" - name="LabelItemExperience" - top_delta="0" - width="210" - visible="false" - ></text> </panel> </scroll_container> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index b02d4e5d8f..0c84d904a8 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3922,7 +3922,7 @@ Try enclosing path to the editor with double quotes. <!-- Experience Tools strings --> <string name="experience_tools_experience">Experience</string> - + <string name="ExperienceNameNull">(no experience)</string> <!-- Conversation log messages --> <string name="logging_calls_disabled_log_empty"> -- cgit v1.2.3 From 09964ec6ede2c9dba5954448bff6b2da2dc179af Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 24 Sep 2013 19:10:43 -0700 Subject: Created an experience specific permissions dialog. --- indra/llmessage/message_prehash.cpp | 2 + indra/llmessage/message_prehash.h | 2 + indra/newview/llfloaterexperienceprofile.cpp | 4 +- indra/newview/llviewermessage.cpp | 79 ++++++++++++++++++---- .../default/xui/en/floater_experienceprofile.xml | 4 +- .../newview/skins/default/xui/en/notifications.xml | 34 ++++++++++ indra/newview/skins/default/xui/en/strings.xml | 4 +- 7 files changed, 109 insertions(+), 20 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 39cfb6019e..e0f69dc2d3 100755 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1383,3 +1383,5 @@ char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()-> char const* const _PREHASH_AppearanceData = LLMessageStringTable::getInstance()->getString("AppearanceData"); char const* const _PREHASH_AppearanceVersion = LLMessageStringTable::getInstance()->getString("AppearanceVersion"); char const* const _PREHASH_CofVersion = LLMessageStringTable::getInstance()->getString("CofVersion"); +char const* const _PREHASH_Experience = LLMessageStringTable::getInstance()->getString("Experience"); +char const* const _PREHASH_ExperienceID = LLMessageStringTable::getInstance()->getString("ExperienceID"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index 573e10dc0b..fb8dcc17fb 100755 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1383,4 +1383,6 @@ extern char const* const _PREHASH_GroupAVSounds; extern char const* const _PREHASH_AppearanceData; extern char const* const _PREHASH_AppearanceVersion; extern char const* const _PREHASH_CofVersion; +extern char const* const _PREHASH_Experience; +extern char const* const _PREHASH_ExperienceID; #endif diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 01af6b1cab..f99e20f7e0 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -417,7 +417,9 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) if(properties & LLExperienceCache::PROPERTY_GRID) { topPanel->setVisible(TRUE); - getChild<LLTextBox>(TF_GRID_WIDE)->setVisible(TRUE); + child=getChild<LLTextBox>(TF_GRID_WIDE); + child->setVisible(TRUE); + child->setText(LLTrans::getString("GRID_WIDE")); } value=experience[LLExperienceCache::METADATA].asString(); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index e3335c9cd8..9be5de3433 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -115,6 +115,7 @@ #include <boost/regex.hpp> #include "llnotificationmanager.h" // +#include "llexperiencecache.h" #if LL_MSVC // disable boost::lexical_cast warning @@ -6354,6 +6355,26 @@ bool script_question_cb(const LLSD& notification, const LLSD& response) if ( response["Mute"] ) // mute { script_question_mute(task_id,notification["payload"]["object_name"].asString()); + } + + if ( response["BlockExperience"] ) + { + if(notification["payload"].has("experience")) + { + LLViewerRegion* region = gAgent.getRegion(); + if (!region) + return false; + + std::string lookup_url=region->getCapability("ExperiencePreferences"); + if(lookup_url.empty()) + return false; + LLSD permission; + LLSD data; + permission["permission"]="Block"; + + data[notification["payload"]["experience"].asString()]=permission; + LLHTTPClient::put(lookup_url, data, NULL); + } } return false; @@ -6388,8 +6409,26 @@ void script_question_mute(const LLUUID& task_id, const std::string& object_name) static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb); static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb); +static LLNotificationFunctorRegistration script_question_cb_reg_3("ScriptQuestionExperience", script_question_cb); static LLNotificationFunctorRegistration unknown_script_question_cb_reg("UnknownScriptQuestion", unknown_script_question_cb); + +void process_script_experience_details(const LLSD& experience_details, LLSD args, LLSD payload) +{ + if(experience_details[LLExperienceCache::PROPERTIES].asInteger() & LLExperienceCache::PROPERTY_GRID) + { + args["GRID_WIDE"] = LLTrans::getString("GRID_WIDE")+ " "; + } + else + { + args["GRID_WIDE"] = ""; + } + args["EXPERIENCE"] = LLSLURL("experience", experience_details[LLExperienceCache::EXPERIENCE_ID].asUUID(), "profile").getSLURLString(); + + LLNotificationsUtil::add("ScriptQuestionExperience", args, payload); +} + + void process_script_question(LLMessageSystem *msg, void **user_data) { // *TODO: Translate owner name -> [FIRST] [LAST] @@ -6401,6 +6440,9 @@ void process_script_question(LLMessageSystem *msg, void **user_data) S32 questions; std::string object_name; std::string owner_name; + LLUUID experienceid; + + // taskid -> object key of object requesting permissions msg->getUUIDFast(_PREHASH_Data, _PREHASH_TaskID, taskid ); @@ -6410,6 +6452,11 @@ void process_script_question(LLMessageSystem *msg, void **user_data) msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, owner_name); msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions ); + if(msg->has(_PREHASH_Experience)) + { + msg->getUUIDFast(_PREHASH_Experience, _PREHASH_ExperienceID, experienceid); + } + // Special case. If the objects are owned by this agent, throttle per-object instead // of per-owner. It's common for residents to reset a ton of scripts that re-request // permissions, as with tier boxes. UUIDs can't be valid agent names and vice-versa, @@ -6495,26 +6542,28 @@ void process_script_question(LLMessageSystem *msg, void **user_data) payload["object_name"] = object_name; payload["owner_name"] = owner_name; - // check whether cautions are even enabled or not - if (gSavedSettings.getBOOL("PermissionsCautionEnabled")) - { - if (caution) - { - args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : ""; - } - // display the caution permissions prompt - LLNotificationsUtil::add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload); - } - else - { - // fall back to default behavior if cautions are entirely disabled - LLNotificationsUtil::add("ScriptQuestion", args, payload); - } + + const char* notification = "ScriptQuestion"; + + if(caution && gSavedSettings.getBOOL("PermissionsCautionEnabled")) + { + args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : ""; + notification = "ScriptQuestionCaution"; + } + else if(experienceid.notNull()) + { + payload["experience"]=experienceid; + LLExperienceCache::get(experienceid, boost::bind(process_script_experience_details, _1, args, payload)); + return; + } + + LLNotificationsUtil::add(notification, args, payload); } } } + void process_derez_container(LLMessageSystem *msg, void**) { LL_WARNS("Messaging") << "call to deprecated process_derez_container" << LL_ENDL; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index a3408c5e58..ca9469474c 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -103,9 +103,7 @@ left="10" right="-123" visible="false" - name="grid_wide"> - Grid-wide - </text> + name="grid_wide"/> <button follows="top|right" height="23" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ebd2799ebf..ef4044bedd 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6930,6 +6930,40 @@ Is this OK? text="Block"/> </form> </notification> + <notification + icon="notify.tga" + name="ScriptQuestionExperience" + persist="true" + type="notify"> +'<nolink>[OBJECTNAME]</nolink>', an object owned by '[NAME]', requests your participation in the [GRID_WIDE]experience: + +[EXPERIENCE] + +Once permission is granted you will not see this message again for this experience unless it is revoked from the experience profile. + +Scripts associated with this experience will be able to do the following on regions where the experience is active: + +[QUESTIONS]Is this OK? + <tag>confirm</tag> + <form name="form"> + <button + index="0" + name="Yes" + text="Yes"/> + <button + index="1" + name="No" + text="No"/> + <button + index="2" + name="Mute" + text="Block Object"/> + <button + index="3" + name="BlockExperience" + text="Block Experience"/> + </form> + </notification> <notification icon="notify.tga" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 0c84d904a8..fc189b5d62 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -414,7 +414,8 @@ Please try logging in again in a minute.</string> <string name="NotConnected">Not Connected</string> <string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name --> <string name="TeleportYourAgent">Teleport you</string> - <string name="JoinAnExperience">Join an experience</string> <!-- not used --> + <string name="JoinAnExperience"></string> <!-- intentionally left blank --> + <string name="SilentlyManageEstateAccess">Suppress alerts when managing estate access lists</string> <string name="OverrideYourAnimations">Replace your default animations</string> <string name="ScriptReturnObjects">Return objects on your behalf</string> @@ -3923,6 +3924,7 @@ Try enclosing path to the editor with double quotes. <!-- Experience Tools strings --> <string name="experience_tools_experience">Experience</string> <string name="ExperienceNameNull">(no experience)</string> + <string name="GRID_WIDE">Grid-wide</string> <!-- Conversation log messages --> <string name="logging_calls_disabled_log_empty"> -- cgit v1.2.3 From 977ee4cd6d20d6c3018c7d005ca40c523178678a Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 24 Sep 2013 23:25:29 -0700 Subject: Added stubs for llurlentry_test.cpp --- indra/llui/tests/llurlentry_test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'indra') diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp index c3f0e92cb0..e8b9dde753 100755 --- a/indra/llui/tests/llurlentry_test.cpp +++ b/indra/llui/tests/llurlentry_test.cpp @@ -32,9 +32,22 @@ #include "lltut.h" #include "../lluicolortable.h" #include "../llrender/lluiimage.h" +#include "../llmessage/llexperiencecache.h" #include <boost/regex.hpp> + +namespace LLExperienceCache +{ + bool get( const LLUUID& key, LLSD& experience_data ) + { + return false; + } + + void get( const LLUUID& key, callback_slot_t slot ){} + +} + typedef std::map<std::string, LLControlGroup*> settings_map_t; settings_map_t LLUI::sSettingGroups; -- cgit v1.2.3 From aed3cbce26a9e1e7ec70a43146fd405f3162f9d7 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 3 Oct 2013 10:16:52 -0700 Subject: Fix for ACME-986 and some cleanup --- indra/newview/llpreviewscript.cpp | 95 +++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 48 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 1d3c7a3f20..d7d1ed3dfc 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1996,59 +1996,58 @@ void LLLiveLSLEditor::loadAsset() if(object) { LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemUUID)); - if(item - && (gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE) - || gAgent.isGodlike())) - { - mItem = new LLViewerInventoryItem(item); - } - ExperienceAssociationResponder::fetchAssociatedExperience(item->getParentUUID(), item->getUUID(), boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1)); - if(!gAgent.isGodlike() - && (item - && (!gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE) - || !gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)))) - { - mItem = new LLViewerInventoryItem(item); - mScriptEd->setScriptText(getString("not_allowed"), FALSE); - mScriptEd->mEditor->makePristine(); - mScriptEd->enableSave(FALSE); - mAssetStatus = PREVIEW_ASSET_LOADED; - } - else if(item && mItem.notNull()) - { - // request the text from the object - LLUUID* user_data = new LLUUID(mItemUUID); // ^ mObjectUUID - gAssetStorage->getInvItemAsset(object->getRegion()->getHost(), - gAgent.getID(), - gAgent.getSessionID(), - item->getPermissions().getOwner(), - object->getID(), - item->getUUID(), - item->getAssetUUID(), - item->getType(), - &LLLiveLSLEditor::onLoadComplete, - (void*)user_data, - TRUE); - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_GetScriptRunning); - msg->nextBlockFast(_PREHASH_Script); - msg->addUUIDFast(_PREHASH_ObjectID, mObjectUUID); - msg->addUUIDFast(_PREHASH_ItemID, mItemUUID); - msg->sendReliable(object->getRegion()->getHost()); - mAskedForRunningInfo = TRUE; - mAssetStatus = PREVIEW_ASSET_LOADING; - } - else - { + if(item) + { + ExperienceAssociationResponder::fetchAssociatedExperience(item->getParentUUID(), item->getUUID(), boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1)); + + bool isGodlike = gAgent.isGodlike(); + bool copyManipulate = gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE); + mIsModifiable = gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE); + + if(!isGodlike && (!copyManipulate || !mIsModifiable)) + { + mItem = new LLViewerInventoryItem(item); + mScriptEd->setScriptText(getString("not_allowed"), FALSE); + mScriptEd->mEditor->makePristine(); + mScriptEd->enableSave(FALSE); + mAssetStatus = PREVIEW_ASSET_LOADED; + } + else if(copyManipulate || isGodlike) + { + mItem = new LLViewerInventoryItem(item); + // request the text from the object + LLUUID* user_data = new LLUUID(mItemUUID); // ^ mObjectUUID + gAssetStorage->getInvItemAsset(object->getRegion()->getHost(), + gAgent.getID(), + gAgent.getSessionID(), + item->getPermissions().getOwner(), + object->getID(), + item->getUUID(), + item->getAssetUUID(), + item->getType(), + &LLLiveLSLEditor::onLoadComplete, + (void*)user_data, + TRUE); + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_GetScriptRunning); + msg->nextBlockFast(_PREHASH_Script); + msg->addUUIDFast(_PREHASH_ObjectID, mObjectUUID); + msg->addUUIDFast(_PREHASH_ItemID, mItemUUID); + msg->sendReliable(object->getRegion()->getHost()); + mAskedForRunningInfo = TRUE; + mAssetStatus = PREVIEW_ASSET_LOADING; + } + } + + if(mItem.isNull()) + { mScriptEd->setScriptText(LLStringUtil::null, FALSE); mScriptEd->mEditor->makePristine(); mAssetStatus = PREVIEW_ASSET_LOADED; - } + mIsModifiable = FALSE; + } - mIsModifiable = item && gAgent.allowOperation(PERM_MODIFY, - item->getPermissions(), - GP_OBJECT_MANIPULATE); // This is commented out, because we don't completely // handle script exports yet. -- cgit v1.2.3 From e510fa3ee064ce03a48852fdea26be781e8fa8b6 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 3 Oct 2013 12:59:44 -0700 Subject: First pass at functional experience list floater --- indra/newview/llfloaterexperiences.cpp | 126 ++++++++++ indra/newview/llfloaterexperiences.h | 5 + indra/newview/llpanelexperiences.cpp | 265 ++------------------- indra/newview/llpanelexperiences.h | 63 +---- .../skins/default/xui/en/floater_experiences.xml | 20 +- .../skins/default/xui/en/panel_experiences.xml | 36 +-- indra/newview/skins/default/xui/en/strings.xml | 5 + 7 files changed, 189 insertions(+), 331 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index b862b41bba..398ced2632 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -2,13 +2,139 @@ #include "llpanelexperiences.h" #include "llfloaterexperiences.h" +#include "llagent.h" +#include "llfloaterregioninfo.h" +#include "lltabcontainer.h" +#include "lltrans.h" +#include "llexperiencecache.h" + + +class LLExperienceListResponder : public LLHTTPClient::Responder +{ +public: + typedef std::map<std::string, std::string> NameMap; + LLExperienceListResponder(const LLHandle<LLFloaterExperiences>& parent, NameMap& nameMap):mParent(parent) + { + mNameMap.swap(nameMap); + } + + LLHandle<LLFloaterExperiences> mParent; + NameMap mNameMap; + + virtual void result(const LLSD& content) + { + if(mParent.isDead()) + return; + + LLFloaterExperiences* parent=mParent.get(); + + LLTabContainer* tabs = parent->getChild<LLTabContainer>("xp_tabs"); + + NameMap::iterator it = mNameMap.begin(); + while(it != mNameMap.end()) + { + if(content.has(it->first)) + { + LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName(it->second); + if(tab) + { + const LLSD& ids = content[it->first]; + tab->setExperienceList(ids); + parent->clearFromRecent(ids); + } + } + ++it; + } + } +}; + + LLFloaterExperiences::LLFloaterExperiences(const LLSD& data) :LLFloater(data) { } +void LLFloaterExperiences::addTab(const std::string& name, bool select) +{ + getChild<LLTabContainer>("xp_tabs")->addTabPanel(LLTabContainer::TabPanelParams(). + panel(LLPanelExperiences::create(name)). + label(LLTrans::getString(name)). + select_tab(select)); +} + BOOL LLFloaterExperiences::postBuild() { + addTab("Allowed_Experiences_Tab", true); + addTab("Blocked_Experiences_Tab", false); + addTab("Admin_Experiences_Tab", false); + addTab("Contrib_Experiences_Tab", false); + addTab("Recent_Experiences_Tab", false); + + setupRecentTabs(); + + LLViewerRegion* region = gAgent.getRegion(); + + if (region) + { + LLExperienceListResponder::NameMap nameMap; + std::string lookup_url=region->getCapability("GetExperiences"); + if(!lookup_url.empty()) + { + nameMap["experiences"]="Allowed_Experiences_Tab"; + nameMap["blocked"]="Blocked_Experiences_Tab"; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + + lookup_url = region->getCapability("GetAdminExperiences"); + if(!lookup_url.empty()) + { + nameMap["experience_ids"]="Admin_Experiences_Tab"; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + + lookup_url = region->getCapability("GetAdminExperiences"); + if(!lookup_url.empty()) + { + nameMap["experience_ids"]="Contrib_Experiences_Tab"; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + } return TRUE; } + +void LLFloaterExperiences::clearFromRecent(const LLSD& ids) +{ + LLTabContainer* tabs = getChild<LLTabContainer>("xp_tabs"); + + LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName("Recent_Experiences_Tab"); + if(!tab) + return; + + tab->removeExperiences(ids); +} + +void LLFloaterExperiences::setupRecentTabs() +{ + LLTabContainer* tabs = getChild<LLTabContainer>("xp_tabs"); + + LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName("Recent_Experiences_Tab"); + if(!tab) + return; + + LLSD recent; + + const LLExperienceCache::cache_t& experiences = LLExperienceCache::getCached(); + + LLExperienceCache::cache_t::const_iterator it = experiences.begin(); + while( it != experiences.end() ) + { + if(!it->second.has(LLExperienceCache::MISSING)) + { + recent.append(it->first); + } + ++it; + } + + tab->setExperienceList(recent); +} diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h index 1e5f216f8d..7d8c4a4be7 100644 --- a/indra/newview/llfloaterexperiences.h +++ b/indra/newview/llfloaterexperiences.h @@ -35,9 +35,14 @@ class LLFloaterExperiences : public: LLFloaterExperiences(const LLSD& data); + void clearFromRecent(const LLSD& ids); protected: /*virtual*/ BOOL postBuild(); + void setupRecentTabs(); + void addTab(const std::string& name, bool select); + + private: }; diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index 617ceef615..0d7cdce6e8 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -7,82 +7,18 @@ #include "llagent.h" #include "llpanelexperiences.h" +#include "llslurl.h" static LLRegisterPanelClassWrapper<LLPanelExperiences> register_experiences_panel("experiences_panel"); LLPanelExperiences::LLPanelExperiences( ) - : mExperiencesList(NULL), - mExperiencesAccTab(NULL), - mProfilePanel(NULL), - mPanelExperienceInfo(NULL), - mNoExperiences(false) + : mExperiencesList(NULL) { - -} - -void* LLPanelExperiences::create( void* data ) -{ - return new LLPanelExperiences(); -} - -void ExperienceResult(LLHandle<LLPanelExperiences> panel, const LLSD& experience) -{ - LLPanelExperiences* experiencePanel = panel.get(); - if(experiencePanel) - { - experiencePanel->addExperienceInfo(experience); - } -} - -class LLExperienceListResponder : public LLHTTPClient::Responder -{ -public: - LLExperienceListResponder(const LLHandle<LLPanelExperiences>& parent):mParent(parent) - { - } - - LLHandle<LLPanelExperiences> mParent; - - virtual void result(const LLSD& content) - { - if(mParent.isDead()) - return; - - LLSD experiences = content["experiences"]; - LLSD::array_const_iterator it = experiences.beginArray(); - for( /**/ ; it != experiences.endArray(); ++it) - { - LLUUID public_key = it->asUUID(); - - LLExperienceCache::get(public_key, boost::bind(ExperienceResult, mParent, _1)); - } - } -}; - -void LLPanelExperiences::addExperienceInfo(const LLSD& experience) -{ - LLExperienceItem* item = new LLExperienceItem(); - if(experience.has(LLExperienceCache::NAME)) - { - item->setExperienceName(experience[LLExperienceCache::NAME].asString()); - } - else if(experience.has("error")) - { - item->setExperienceName(experience["error"].asString()); - } - - if(experience.has(LLExperienceCache::DESCRIPTION)) - { - item->setExperienceDescription(experience[LLExperienceCache::DESCRIPTION].asString()); - } - - mExperiencesList->addItem(item); - + buildFromFile("panel_experiences.xml"); } - BOOL LLPanelExperiences::postBuild( void ) { mExperiencesList = getChild<LLFlatListView>("experiences_list"); @@ -91,44 +27,10 @@ BOOL LLPanelExperiences::postBuild( void ) mExperiencesList->setNoItemsCommentText(getString("no_experiences")); } - - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - std::string lookup_url=region->getCapability("GetExperiences"); - if(!lookup_url.empty()) - { - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLPanelExperiences>())); - } - } - - 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; - } -} LLExperienceItem* LLPanelExperiences::getSelectedExperienceItem() { @@ -138,165 +40,50 @@ LLExperienceItem* LLPanelExperiences::getSelectedExperienceItem() 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() +void LLPanelExperiences::setExperienceList( const LLSD& experiences ) { - LLSD selected_value = mExperiencesList->getSelectedValue(); - if(selected_value.isUndefined()) - { - return; - } - - LLExperienceItem* experience = (LLExperienceItem*)mExperiencesList->getSelectedItem(); - - createExperienceInfoPanel(); + mExperiencesList->clear(); - LLSD params; - params["experience_name"] = experience->getExperienceName(); - params["experience_desc"] = experience->getExperienceDescription(); + LLSD::array_const_iterator it = experiences.beginArray(); + for( /**/ ; it != experiences.endArray(); ++it) + { + LLUUID public_key = it->asUUID(); + LLExperienceItem* item = new LLExperienceItem(); - getProfilePanel()->openPanel(mPanelExperienceInfo, params); - -} - - -void LLPanelExperiences::createExperienceInfoPanel() -{ - if(!mPanelExperienceInfo) - { - mPanelExperienceInfo = LLPanelExperienceInfo::create(); - mPanelExperienceInfo->setExitCallback(boost::bind(&LLPanelExperiences::onPanelExperienceClose, this, mPanelExperienceInfo)); - mPanelExperienceInfo->setVisible(FALSE); - } + item->init(public_key); + mExperiencesList->addItem(item, public_key); + } } -void LLPanelExperiences::onPanelExperienceClose( LLPanel* panel ) +LLPanelExperiences* LLPanelExperiences::create(const std::string& name) { - getProfilePanel()->closePanel(panel); + LLPanelExperiences* panel= new LLPanelExperiences(); + panel->setName(name); + return panel; } -LLPanelProfile* LLPanelExperiences::getProfilePanel() +void LLPanelExperiences::removeExperiences( const LLSD& ids ) { - llassert_always(NULL != mProfilePanel); - - return mProfilePanel; + LLSD::array_const_iterator it = ids.beginArray(); + for( /**/ ; it != ids.endArray(); ++it) + { + mExperiencesList->removeItemByUUID(it->asUUID()); + } } - - - - - - - - - LLExperienceItem::LLExperienceItem() { - buildFromFile("panel_experience_info.xml"); -} - -void LLExperienceItem::init( LLSD* experience_data ) -{ - if(experience_data) - { - setExperienceDescription(experience_data->has(LLExperienceCache::DESCRIPTION)?(*experience_data)[LLExperienceCache::DESCRIPTION].asString() : std::string()); - setExperienceName(experience_data->has(LLExperienceCache::NAME)?(*experience_data)[LLExperienceCache::NAME].asString() : std::string()); - } -} - -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); + buildFromFile("panel_experience_list_item.xml"); } -BOOL LLExperienceItem::postBuild() +void LLExperienceItem::init( const LLUUID& id) { - return TRUE; + getChild<LLUICtrl>("experience_name")->setValue(LLSLURL("experience", id, "profile").getSLURLString()); } -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 index 1fe3f6ae1d..e3c223d9db 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -34,86 +34,37 @@ 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 LLPanel { public: - LLPanelExperiences(); + LLPanelExperiences(); - static void* create(void* data); + static LLPanelExperiences* create(const std::string& name); /*virtual*/ BOOL postBuild(void); - - /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClosePanel(); - void updateData(); + void setExperienceList(const LLSD& experiences); - LLExperienceItem* getSelectedExperienceItem(); - - void setProfilePanel(LLPanelProfile* profile_panel); - void addExperienceInfo(const LLSD& experience); + LLExperienceItem* getSelectedExperienceItem(); + void removeExperiences( const LLSD& ids ); 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; }; class LLExperienceItem : public LLPanel - //, public LLAvatarPropertiesObserver { public: LLExperienceItem(); ~LLExperienceItem(); - void init(LLSD* 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; } - + void init(const LLUUID& experience_id); protected: - LLUUID mCreatorID; - - std::string mExperienceName; - std::string mExperienceDescription; }; #endif // LL_LLPANELEXPERIENCES_H diff --git a/indra/newview/skins/default/xui/en/floater_experiences.xml b/indra/newview/skins/default/xui/en/floater_experiences.xml index 57541c8b35..1258ce26ac 100644 --- a/indra/newview/skins/default/xui/en/floater_experiences.xml +++ b/indra/newview/skins/default/xui/en/floater_experiences.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <floater - positioning="cascading" can_close="true" can_resize="true" height="400" - help_topic="sidebar_experiences" + width="300" min_height="300" min_width="300" layout="topleft" @@ -13,17 +12,16 @@ save_rect="false" single_instance="true" reuse_instance="false" - title="EXPERIENCES" - width="400"> - <panel + bg_opaque_color="0 0.5 0 0.3" + title="EXPERIENCES"> + <tab_container top="3" left="3" layout="topleft" - right="-3" + width="294" follows="all" - height="300" - class="experiences_panel" - filename="panel_experiences.xml" - > - </panel> + height="394" + name="xp_tabs"> + </tab_container> + </floater> diff --git a/indra/newview/skins/default/xui/en/panel_experiences.xml b/indra/newview/skins/default/xui/en/panel_experiences.xml index 47a3005aae..bc78d0813c 100644 --- a/indra/newview/skins/default/xui/en/panel_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_experiences.xml @@ -4,37 +4,23 @@ layout="topleft" top="3" left="3" - right="-3" - bottom="-3" + width="200" + height="300" label="Experiences" + bg_opaque_color="0 0.5 0 0.3" follows="all"> <string name="no_experiences" value="No experiences."/> - <accordion - fit_parent="true" + <flat_list_view + name="experiences_list" 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> + left="0" + width="200" + height="300" + follows="all" + > + </flat_list_view> </panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index fc189b5d62..70c990872e 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3925,6 +3925,11 @@ Try enclosing path to the editor with double quotes. <string name="experience_tools_experience">Experience</string> <string name="ExperienceNameNull">(no experience)</string> <string name="GRID_WIDE">Grid-wide</string> + <string name="Allowed_Experiences_Tab">Allowed</string> + <string name="Blocked_Experiences_Tab">Blocked</string> + <string name="Contrib_Experiences_Tab">Contributor</string> + <string name="Admin_Experiences_Tab">Admin</string> + <string name="Recent_Experiences_Tab">Recent</string> <!-- Conversation log messages --> <string name="logging_calls_disabled_log_empty"> -- cgit v1.2.3 From d44c85c6dc575c0c67019ce1bffecfaa5bc275d1 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 3 Oct 2013 13:00:35 -0700 Subject: Missed file --- .../default/xui/en/panel_experience_list_item.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 indra/newview/skins/default/xui/en/panel_experience_list_item.xml (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/panel_experience_list_item.xml b/indra/newview/skins/default/xui/en/panel_experience_list_item.xml new file mode 100644 index 0000000000..064f80a945 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experience_list_item.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> + +<panel + layout="topleft" + top="100" + left="5" + width="200" + height="19" + label="Experiences" + follows="top|right|left"> + <text + left="0" + top="3" + height="16" + width="200" + follows="all" + name="experience_name" + > + Dummy Name + </text> +</panel> -- cgit v1.2.3 From c08e8205269dcc835a5f22eafce8c0930919814e Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 7 Oct 2013 09:36:01 -0700 Subject: Fixed typo in experience list floater --- indra/newview/llfloaterexperiences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 398ced2632..9ec94f457b 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -93,7 +93,7 @@ BOOL LLFloaterExperiences::postBuild() LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); } - lookup_url = region->getCapability("GetAdminExperiences"); + lookup_url = region->getCapability("GetCreatorExperiences"); if(!lookup_url.empty()) { nameMap["experience_ids"]="Contrib_Experiences_Tab"; -- cgit v1.2.3 From 8add9a00f81b84f5268fc264f5871b04ae8547b8 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 14 Oct 2013 11:25:21 -0700 Subject: Updated strings for the experience list floater --- indra/newview/skins/default/xui/en/menu_viewer.xml | 15 +++++++-------- indra/newview/skins/default/xui/en/strings.xml | 10 +++++----- 2 files changed, 12 insertions(+), 13 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 3b23b54d57..ad461a2991 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -52,14 +52,6 @@ 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"> @@ -74,6 +66,13 @@ function="Floater.ToggleOrBringToFront" parameter="picks" /> </menu_item_call> + <menu_item_call + label="Experiences..." + name="Experiences"> + <menu_item_call.on_click + function="Floater.ToggleOrBringToFront" + parameter="experiences"/> + </menu_item_call> <menu_item_separator/> <menu_item_call label="Camera Controls..." diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 530ed160bd..eda35474ac 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3927,11 +3927,11 @@ Try enclosing path to the editor with double quotes. <string name="experience_tools_experience">Experience</string> <string name="ExperienceNameNull">(no experience)</string> <string name="GRID_WIDE">Grid-wide</string> - <string name="Allowed_Experiences_Tab">Allowed</string> - <string name="Blocked_Experiences_Tab">Blocked</string> - <string name="Contrib_Experiences_Tab">Contributor</string> - <string name="Admin_Experiences_Tab">Admin</string> - <string name="Recent_Experiences_Tab">Recent</string> + <string name="Allowed_Experiences_Tab">ALLOWED</string> + <string name="Blocked_Experiences_Tab">BLOCKED</string> + <string name="Contrib_Experiences_Tab">CONTRIBUTOR</string> + <string name="Admin_Experiences_Tab">ADMIN</string> + <string name="Recent_Experiences_Tab">RECENT</string> <!-- Conversation log messages --> <string name="logging_calls_disabled_log_empty"> -- cgit v1.2.3 From 1aed2f848c4f2a86d6c2ea6385ebb920e7658aa8 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 15 Oct 2013 16:42:55 -0700 Subject: Added LLTabContainer::getTotalTabWidth Cleaned up experience profile floater --- indra/llui/lltabcontainer.cpp | 5 + indra/llui/lltabcontainer.h | 5 +- indra/newview/llfloaterexperienceprofile.cpp | 66 +++++++--- indra/newview/llfloaterexperienceprofile.h | 8 +- indra/newview/llfloaterexperiences.cpp | 79 ++++++----- indra/newview/llfloaterexperiences.h | 6 + indra/newview/llpanelexperiences.cpp | 19 +++ indra/newview/llpanelexperiences.h | 11 ++ .../default/xui/en/floater_experienceprofile.xml | 145 +++++++++++++++------ .../skins/default/xui/en/floater_experiences.xml | 2 +- .../default/xui/en/panel_experience_list_item.xml | 6 +- .../skins/default/xui/en/panel_experiences.xml | 1 - 12 files changed, 255 insertions(+), 98 deletions(-) (limited to 'indra') diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index fd98155704..148dc6b232 100755 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -2060,3 +2060,8 @@ void LLTabContainer::commitHoveredButton(S32 x, S32 y) } } } + +S32 LLTabContainer::getTotalTabWidth() const +{ + return mTotalTabWidth; +} diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h index 57862fc626..057809dc42 100755 --- a/indra/llui/lltabcontainer.h +++ b/indra/llui/lltabcontainer.h @@ -182,7 +182,8 @@ public: LLPanel* getPanelByIndex(S32 index); S32 getIndexForPanel(LLPanel* panel); S32 getPanelIndexByTitle(const std::string& title); - LLPanel* getPanelByName(const std::string& name); + LLPanel* getPanelByName(const std::string& name); + S32 getTotalTabWidth() const; void setCurrentTabName(const std::string& name); void selectFirstTab(); @@ -287,7 +288,7 @@ private: S32 mMaxTabWidth; S32 mTotalTabWidth; - S32 mTabHeight; + S32 mTabHeight; // Padding under the text labels of tab buttons S32 mLabelPadBottom; diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index f99e20f7e0..e1667a39b7 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -55,6 +55,7 @@ #define TF_MRKT "marketplace" #define TF_MATURITY "ContentRatingText" #define TF_OWNER "OwnerText" +#define TF_GROUP "GroupText" #define TF_GRID_WIDE "grid_wide" #define EDIT "edit_" @@ -65,6 +66,7 @@ #define PNL_DESC "description panel" #define PNL_LOC "location panel" #define PNL_MRKT "marketplace panel" +#define PNL_GROUP "group_panel" #define BTN_EDIT "edit_btn" #define BTN_ALLOW "allow_btn" @@ -74,6 +76,8 @@ #define BTN_SAVE "save_btn" #define BTN_ENABLE "enable_btn" #define BTN_PRIVATE "private_btn" +#define BTN_SET_LOCATION "location_btn" +#define BTN_CLEAR_LOCATION "clear_btn" @@ -236,14 +240,15 @@ BOOL LLFloaterExperienceProfile::postBuild() 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)); + childSetAction(BTN_SET_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickLocation, this)); + childSetAction(BTN_CLEAR_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickClear, 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<LLTextEditor>(EDIT TF_DESC)->setKeystrokeCallback(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)); + getChild<LLLineEditor>(EDIT TF_MRKT)->setKeystrokeCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); + getChild<LLLineEditor>(EDIT TF_NAME)->setKeystrokeCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); + childSetAction(EDIT BTN_ENABLE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); childSetAction(EDIT BTN_PRIVATE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); @@ -384,28 +389,35 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) value = experience[LLExperienceCache::SLURL].asString(); child = getChild<LLTextBox>(TF_SLURL); + bool has_value = value.length()>0; + locationPanel->setVisible(has_value); value = LLSLURL(value).getSLURLString(); child->setText(value); - locationPanel->setVisible(value.length()>0); - - linechild = getChild<LLLineEditor>(EDIT TF_SLURL); - linechild->setText(value); - - setMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()), getChild<LLTextBox>(TF_MATURITY), getChild<LLComboBox>(EDIT TF_MATURITY)); - child = getChild<LLTextBox>(TF_OWNER); - LLUUID id = experience[LLExperienceCache::GROUP_ID].asUUID(); - if(id.notNull()) + child = getChild<LLTextBox>(EDIT TF_SLURL); + if(has_value) { - value = LLSLURL("group", id, "inspect").getSLURLString(); + child->setText(value); } else { - id = experience[LLExperienceCache::AGENT_ID].asUUID(); - value = LLSLURL("agent", id, "inspect").getSLURLString(); + child->setText(getString("empty_slurl")); } + + setMaturityString((U8)(experience[LLExperienceCache::MATURITY].asInteger()), getChild<LLTextBox>(TF_MATURITY), getChild<LLComboBox>(EDIT TF_MATURITY)); + + LLUUID id = experience[LLExperienceCache::AGENT_ID].asUUID(); + child = getChild<LLTextBox>(TF_OWNER); + value = LLSLURL("agent", id, "inspect").getSLURLString(); + child->setText(value); + + + id = experience[LLExperienceCache::GROUP_ID].asUUID(); + child = getChild<LLTextBox>(TF_GROUP); + value = LLSLURL("group", id, "inspect").getSLURLString(); child->setText(value); + getChild<LLLayoutPanel>(PNL_GROUP)->setVisible(id.notNull()); LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE); S32 properties = mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger(); @@ -479,7 +491,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) mDirty=false; setCanClose(!mDirty); - + mForceClose = false; getChild<LLButton>(BTN_SAVE)->setEnabled(mDirty); } @@ -703,3 +715,21 @@ void LLFloaterExperienceProfile::changeToView() LLNotificationsUtil::add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLFloaterExperienceProfile::handleSaveChangesDialog, this, _1, _2, VIEW)); } } + +void LLFloaterExperienceProfile::onClickLocation() +{ + LLViewerRegion* region = gAgent.getRegion(); + if(region) + { + LLTextBox* child = getChild<LLTextBox>(EDIT TF_SLURL); + child->setText(LLSLURL(region->getName(), gAgent.getPositionGlobal()).getSLURLString()); + onFieldChanged(); + } +} + +void LLFloaterExperienceProfile::onClickClear() +{ + LLTextBox* child = getChild<LLTextBox>(EDIT TF_SLURL); + child->setText(getString("empty_slurl")); + onFieldChanged(); +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index 4aa9820a91..feaff0547e 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -63,13 +63,13 @@ protected: void onClickPermission(const char* permission); void onClickForget(); void onClickCancel(); - - void changeToView(); - void onClickSave(); - + void onClickLocation(); + void onClickClear(); void onFieldChanged(); + void changeToView(); + static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience); BOOL postBuild(); diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 9ec94f457b..57f08742be 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -27,7 +27,6 @@ public: return; LLFloaterExperiences* parent=mParent.get(); - LLTabContainer* tabs = parent->getChild<LLTabContainer>("xp_tabs"); NameMap::iterator it = mNameMap.begin(); @@ -40,7 +39,7 @@ public: { const LLSD& ids = content[it->first]; tab->setExperienceList(ids); - parent->clearFromRecent(ids); + //parent->clearFromRecent(ids); } } ++it; @@ -70,36 +69,10 @@ BOOL LLFloaterExperiences::postBuild() addTab("Admin_Experiences_Tab", false); addTab("Contrib_Experiences_Tab", false); addTab("Recent_Experiences_Tab", false); + resizeToTabs(); - setupRecentTabs(); - - LLViewerRegion* region = gAgent.getRegion(); - - if (region) - { - LLExperienceListResponder::NameMap nameMap; - std::string lookup_url=region->getCapability("GetExperiences"); - if(!lookup_url.empty()) - { - nameMap["experiences"]="Allowed_Experiences_Tab"; - nameMap["blocked"]="Blocked_Experiences_Tab"; - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); - } + refreshContents(); - lookup_url = region->getCapability("GetAdminExperiences"); - if(!lookup_url.empty()) - { - nameMap["experience_ids"]="Admin_Experiences_Tab"; - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); - } - - lookup_url = region->getCapability("GetCreatorExperiences"); - if(!lookup_url.empty()) - { - nameMap["experience_ids"]="Contrib_Experiences_Tab"; - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); - } - } return TRUE; } @@ -138,3 +111,49 @@ void LLFloaterExperiences::setupRecentTabs() tab->setExperienceList(recent); } + +void LLFloaterExperiences::resizeToTabs() +{ + const S32 TAB_WIDTH_PADDING = 16; + + LLTabContainer* tabs = getChild<LLTabContainer>("xp_tabs"); + LLRect rect = getRect(); + if(rect.getWidth() < tabs->getTotalTabWidth() + TAB_WIDTH_PADDING) + { + rect.mRight = rect.mLeft + tabs->getTotalTabWidth() + TAB_WIDTH_PADDING; + } + reshape(rect.getWidth(), rect.getHeight(), FALSE); +} + +void LLFloaterExperiences::refreshContents() +{ + setupRecentTabs(); + + LLViewerRegion* region = gAgent.getRegion(); + + if (region) + { + LLExperienceListResponder::NameMap nameMap; + std::string lookup_url=region->getCapability("GetExperiences"); + if(!lookup_url.empty()) + { + nameMap["experiences"]="Allowed_Experiences_Tab"; + nameMap["blocked"]="Blocked_Experiences_Tab"; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + + lookup_url = region->getCapability("GetAdminExperiences"); + if(!lookup_url.empty()) + { + nameMap["experience_ids"]="Admin_Experiences_Tab"; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + + lookup_url = region->getCapability("GetCreatorExperiences"); + if(!lookup_url.empty()) + { + nameMap["experience_ids"]="Contrib_Experiences_Tab"; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + } +} diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h index 7d8c4a4be7..01a0f4c551 100644 --- a/indra/newview/llfloaterexperiences.h +++ b/indra/newview/llfloaterexperiences.h @@ -36,9 +36,15 @@ public: LLFloaterExperiences(const LLSD& data); void clearFromRecent(const LLSD& ids); + void resizeToTabs(); + protected: /*virtual*/ BOOL postBuild(); + void refreshContents(); + + + void setupRecentTabs(); void addTab(const std::string& name, bool select); diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index 0d7cdce6e8..67ce3d3aa6 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -87,3 +87,22 @@ LLExperienceItem::~LLExperienceItem() { } + +void LLPanelSearchExperiences::doSearch() +{ + +} + +LLPanelSearchExperiences* LLPanelSearchExperiences::create( const std::string& name ) +{ + LLPanelSearchExperiences* panel= new LLPanelSearchExperiences(); + panel->getChild<LLPanel>("results")->addChild(LLPanelExperiences::create(name)); + ///XXXif( + return panel; +} + +BOOL LLPanelSearchExperiences::postBuild( void ) +{ + childSetAction("search_button", boost::bind(&LLPanelSearchExperiences::doSearch, this)); + return TRUE; +} diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h index e3c223d9db..45773adda9 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -35,6 +35,17 @@ class LLExperienceItem; class LLPanelProfile; +class LLPanelSearchExperiences + : public LLPanel +{ +public: + LLPanelSearchExperiences(){} + static LLPanelSearchExperiences* create(const std::string& name); + /*virtual*/ BOOL postBuild(void); + + void doSearch(); +}; + class LLPanelExperiences : public LLPanel { diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index ca9469474c..e70151c64e 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -6,9 +6,15 @@ enabled="true" can_resize="true" title="EXPERIENCE PROFILE" + save_rect="true" min_width="325" + min_height="325" width="358" height="580"> + <floater.string + name="empty_slurl"> + (none) + </floater.string> <floater.string name="maturity_icon_general"> "Parcel_PG_Light" @@ -195,7 +201,7 @@ layout="topleft" left="10" name="ContentRating" - width="100"> + width="75"> Rating: </text> <text @@ -240,6 +246,7 @@ layout="topleft" left="10" valign="center" + use_ellipses="true" name="LocationTextText" width="288"> </text> @@ -272,13 +279,14 @@ layout="topleft" left="10" valign="center" + use_ellipses="true" name="marketplace" width="288"> </text> </layout_panel> <layout_panel follows="left|top|right" - height="75" + height="18" left="0" top="0" auto_resize="false" @@ -291,7 +299,7 @@ layout="topleft" left="10" name="Owner" - width="100"> + width="75"> Owner: </text> <text @@ -303,39 +311,85 @@ left_pad="2" valign="center" name="OwnerText" + use_ellipses="true" top_delta="-2" width="188"> </text> - <button - follows="bottom|left" - height="23" - label="Allow" + </layout_panel> + <layout_panel + follows="all" + height="18" + layout="topleft" + left="0" + top="5" + width="313" + visible="false" + auto_resize="false" + name="group_panel"> + <text + type="string" + length="1" + follows="left|top" + height="16" 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" + name="Group" + width="75"> + Group: + </text> + <text + type="string" + length="1" + follows="left|top|right" + height="18" layout="topleft" - name="block_btn" - width="80" - top_pad="-23" - left_pad="3" - enabled="false"/> + left_pad="2" + valign="center" + name="GroupText" + use_ellipses="true" + top_delta="-2" + width="188"> + </text> + </layout_panel> + <layout_panel + follows="all" + height="33" + layout="topleft" + left="0" + top="5" + width="313" + auto_resize="false" + name="perm panel"> + <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> @@ -436,7 +490,7 @@ label="Moderate" layout="topleft" right="-10" - top_pad="-17" + top_pad="-19" name="edit_ContentRatingText" width="105"> <icons_combo_box.drop_down_button @@ -478,26 +532,39 @@ <text type="string" length="1" - follows="left|top|right" + follows="left|top" height="14" layout="topleft" left="10" top_pad="10" name="edit_Location" - right="-10"> + right="90"> Location: </text> - <line_editor + <text type="string" length="1" follows="left|top|right" - height="19" + height="14" layout="topleft" - left="10" - max_length_bytes="255" - valign="center" + left_pad="5" + top_pad="-14" name="edit_LocationTextText" - right="-10"/> + right="-10">Location</text> + <button + left="10" + width="150" + height="23" + name="location_btn" + label="Set to Current" + /> + <button + top_pad="-23" + follows="top|right" + right="-10" + width="80" + name="clear_btn" + label="Clear"/> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/floater_experiences.xml b/indra/newview/skins/default/xui/en/floater_experiences.xml index 1258ce26ac..e727512b7f 100644 --- a/indra/newview/skins/default/xui/en/floater_experiences.xml +++ b/indra/newview/skins/default/xui/en/floater_experiences.xml @@ -9,7 +9,7 @@ min_width="300" layout="topleft" name="floater_experiences" - save_rect="false" + save_rect="true" single_instance="true" reuse_instance="false" bg_opaque_color="0 0.5 0 0.3" diff --git a/indra/newview/skins/default/xui/en/panel_experience_list_item.xml b/indra/newview/skins/default/xui/en/panel_experience_list_item.xml index 064f80a945..a9777c51e7 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_list_item.xml @@ -4,15 +4,15 @@ layout="topleft" top="100" left="5" - width="200" + width="100" height="19" label="Experiences" follows="top|right|left"> <text - left="0" + left="3" top="3" height="16" - width="200" + width="177" follows="all" name="experience_name" > diff --git a/indra/newview/skins/default/xui/en/panel_experiences.xml b/indra/newview/skins/default/xui/en/panel_experiences.xml index bc78d0813c..af264e73df 100644 --- a/indra/newview/skins/default/xui/en/panel_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_experiences.xml @@ -12,7 +12,6 @@ <string name="no_experiences" value="No experiences."/> - <flat_list_view name="experiences_list" layout="topleft" -- cgit v1.2.3 From fa344fdcd987ec66fa08f6286b504cb126c9a45c Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 17 Oct 2013 13:58:52 -0700 Subject: Updated experience profile to remove the permission buttons on privileged experiences and fix the enabling of the save button with the checkbox controls. --- indra/newview/llfloaterexperienceprofile.cpp | 11 ++-- .../default/xui/en/floater_experienceprofile.xml | 64 +++++++++++----------- 2 files changed, 40 insertions(+), 35 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index e1667a39b7..740e800a07 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -67,6 +67,7 @@ #define PNL_LOC "location panel" #define PNL_MRKT "marketplace panel" #define PNL_GROUP "group_panel" +#define PNL_PERMS "perm panel" #define BTN_EDIT "edit_btn" #define BTN_ALLOW "allow_btn" @@ -249,8 +250,8 @@ BOOL LLFloaterExperienceProfile::postBuild() getChild<LLLineEditor>(EDIT TF_MRKT)->setKeystrokeCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); getChild<LLLineEditor>(EDIT TF_NAME)->setKeystrokeCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); - childSetAction(EDIT BTN_ENABLE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); - childSetAction(EDIT BTN_PRIVATE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); + childSetCommitCallback(EDIT BTN_ENABLE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); + childSetCommitCallback(EDIT BTN_PRIVATE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); getChild<LLTextEditor>(EDIT TF_DESC)->setCommitOnFocusLost(TRUE); @@ -364,6 +365,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) LLLayoutPanel* locationPanel = getChild<LLLayoutPanel>(PNL_LOC); LLLayoutPanel* marketplacePanel = getChild<LLLayoutPanel>(PNL_MRKT); LLLayoutPanel* topPanel = getChild<LLLayoutPanel>(PNL_TOP); + LLLayoutPanel* permPanel = getChild<LLLayoutPanel>(PNL_PERMS); imagePanel->setVisible(FALSE); @@ -433,6 +435,9 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) child->setVisible(TRUE); child->setText(LLTrans::getString("GRID_WIDE")); } + + + permPanel->setVisible((properties & LLExperienceCache::PROPERTY_PRIVILEGED) == 0); value=experience[LLExperienceCache::METADATA].asString(); if(value.empty()) @@ -490,7 +495,6 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) } mDirty=false; - setCanClose(!mDirty); mForceClose = false; getChild<LLButton>(BTN_SAVE)->setEnabled(mDirty); } @@ -548,7 +552,6 @@ void LLFloaterExperienceProfile::setPreferences( const LLSD& content ) void LLFloaterExperienceProfile::onFieldChanged() { mDirty=true; - setCanClose(!mDirty); getChild<LLButton>(BTN_SAVE)->setEnabled(mDirty); } diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index e70151c64e..2b936b79c9 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -359,37 +359,38 @@ top="5" width="313" auto_resize="false" + visible="false" name="perm panel"> - <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"/> + <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> @@ -549,8 +550,9 @@ layout="topleft" left_pad="5" top_pad="-14" + use_ellipses="true" name="edit_LocationTextText" - right="-10">Location</text> + right="-10"></text> <button left="10" width="150" -- cgit v1.2.3 From 035eafb0c69c434c709862c816663f2b4ca2ab2b Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 17 Oct 2013 14:36:54 -0700 Subject: Fixed slurl saving for the experience profile floater --- indra/newview/llfloaterexperienceprofile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 740e800a07..0e868e199d 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -620,7 +620,7 @@ void LLFloaterExperienceProfile::doSave( int success_action ) 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::SLURL] = getChild<LLTextBox>(EDIT TF_SLURL)->getText(); package[LLExperienceCache::MATURITY] = getChild<LLComboBox>(EDIT TF_MATURITY)->getSelectedValue().asInteger(); -- cgit v1.2.3 From 309ffd57fade231c3d14eedfe1171788e250f088 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 22 Oct 2013 10:51:53 -0700 Subject: Post events on experience permission changes to refresh uis --- indra/newview/llfloaterexperienceprofile.cpp | 140 +++++++++++++++++++-------- indra/newview/llfloaterexperienceprofile.h | 9 ++ indra/newview/llfloaterexperiences.cpp | 83 +++++++++++++++- indra/newview/llfloaterexperiences.h | 12 +-- indra/newview/llpanelexperiences.cpp | 20 +++- indra/newview/llpanelexperiences.h | 2 + indra/newview/llviewermessage.cpp | 25 ++++- 7 files changed, 239 insertions(+), 52 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 0e868e199d..25dde49b8e 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -47,6 +47,7 @@ #include "lltexturectrl.h" #include "lltrans.h" #include "llviewerregion.h" +#include "llevents.h" #define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" #define TF_NAME "experience_title" @@ -157,21 +158,16 @@ public: -class ExperiencePreferencesResponder : public HandleResponder<LLFloaterExperienceProfile> +class ExperiencePreferencesResponder : public LLHTTPClient::Responder { public: - ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):HandleResponder<LLFloaterExperienceProfile>(parent) + ExperiencePreferencesResponder() { } - virtual void result(const LLSD& content) { - LLFloaterExperienceProfile* parent=mParent.get(); - if(parent) - { - parent->setPreferences(content); - } + LLEventPumps::instance().obtain("experience_permission").post(content); } }; @@ -230,7 +226,7 @@ BOOL LLFloaterExperienceProfile::postBuild() lookup_url=region->getCapability("ExperiencePreferences"); if(!lookup_url.empty()) { - LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>())); + LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder()); } } } @@ -254,6 +250,10 @@ BOOL LLFloaterExperienceProfile::postBuild() childSetCommitCallback(EDIT BTN_PRIVATE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); getChild<LLTextEditor>(EDIT TF_DESC)->setCommitOnFocusLost(TRUE); + + + LLEventPumps::instance().obtain("experience_permission").listen(mExperienceId.asString()+"-profile", + boost::bind(&LLFloaterExperienceProfile::experiencePermission, getDerivedHandle<LLFloaterExperienceProfile>(this), _1)); return TRUE; } @@ -267,6 +267,18 @@ void LLFloaterExperienceProfile::experienceCallback(LLHandle<LLFloaterExperience } } + +bool LLFloaterExperienceProfile::experiencePermission( LLHandle<LLFloaterExperienceProfile> handle, const LLSD& permission ) +{ + LLFloaterExperienceProfile* pllpep = handle.get(); + if(pllpep) + { + pllpep->updatePermission(permission); + } + return false; +} + + void LLFloaterExperienceProfile::onClickEdit() { LLTabContainer* tabs = getChild<LLTabContainer>("tab_container"); @@ -300,7 +312,7 @@ void LLFloaterExperienceProfile::onClickPermission(const char* perm) permission["permission"]=perm; data[mExperienceId.asString()]=permission; - LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>())); + LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder()); } @@ -315,7 +327,7 @@ void LLFloaterExperienceProfile::onClickForget() if(lookup_url.empty()) return; - LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>())); + LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder()); } bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child, LLComboBox* combo ) @@ -503,21 +515,13 @@ void LLFloaterExperienceProfile::setPreferences( const LLSD& content ) { const LLSD& experiences = content["experiences"]; const LLSD& blocked = content["blocked"]; - LLButton* button; for(LLSD::array_const_iterator it = experiences.beginArray(); it != experiences.endArray() ; ++it) { if(it->asUUID()==mExperienceId) { - button=getChild<LLButton>(BTN_ALLOW); - button->setEnabled(FALSE); - - button=getChild<LLButton>(BTN_FORGET); - button->setEnabled(TRUE); - - button=getChild<LLButton>(BTN_BLOCK); - button->setEnabled(TRUE); + experienceAllowed(); return; } } @@ -526,27 +530,12 @@ void LLFloaterExperienceProfile::setPreferences( const LLSD& content ) { if(it->asUUID()==mExperienceId) { - button=getChild<LLButton>(BTN_ALLOW); - button->setEnabled(TRUE); - - button=getChild<LLButton>(BTN_FORGET); - button->setEnabled(TRUE); - - button=getChild<LLButton>(BTN_BLOCK); - button->setEnabled(FALSE); + experienceBlocked(); return; } } - - button=getChild<LLButton>(BTN_ALLOW); - button->setEnabled(TRUE); - - button=getChild<LLButton>(BTN_FORGET); - button->setEnabled(FALSE); - - button=getChild<LLButton>(BTN_BLOCK); - button->setEnabled(TRUE); + experienceForgotten(); } void LLFloaterExperienceProfile::onFieldChanged() @@ -620,7 +609,15 @@ void LLFloaterExperienceProfile::doSave( int success_action ) package[LLExperienceCache::NAME] = getChild<LLLineEditor>(EDIT TF_NAME)->getText(); package[LLExperienceCache::DESCRIPTION] = getChild<LLTextEditor>(EDIT TF_DESC)->getText(); - package[LLExperienceCache::SLURL] = getChild<LLTextBox>(EDIT TF_SLURL)->getText(); + std::string slurl = getChild<LLTextBox>(EDIT TF_SLURL)->getText(); + if(slurl == getString("empty_slurl")) + { + package[LLExperienceCache::SLURL] = LLStringUtil::null; + } + else + { + package[LLExperienceCache::SLURL] = slurl; + } package[LLExperienceCache::MATURITY] = getChild<LLComboBox>(EDIT TF_MATURITY)->getSelectedValue().asInteger(); @@ -736,3 +733,70 @@ void LLFloaterExperienceProfile::onClickClear() child->setText(getString("empty_slurl")); onFieldChanged(); } + +void LLFloaterExperienceProfile::updatePermission( const LLSD& permission ) +{ + std::string xp = mExperienceId.asString(); + if(permission.has(xp)) + { + std::string str = permission[xp]["permission"].asString(); + if(str == "Allow") + { + experienceAllowed(); + } + else if(str == "Block") + { + experienceBlocked(); + } + else if(str == "Forget") + { + experienceForgotten(); + } + } + else + { + setPreferences(permission); + } +} + +void LLFloaterExperienceProfile::experienceAllowed() +{ + LLButton* button=getChild<LLButton>(BTN_ALLOW); + button->setEnabled(FALSE); + + button=getChild<LLButton>(BTN_FORGET); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_BLOCK); + button->setEnabled(TRUE); +} + +void LLFloaterExperienceProfile::experienceForgotten() +{ + LLButton* button=getChild<LLButton>(BTN_ALLOW); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_FORGET); + button->setEnabled(FALSE); + + button=getChild<LLButton>(BTN_BLOCK); + button->setEnabled(TRUE); +} + +void LLFloaterExperienceProfile::experienceBlocked() +{ + LLButton* button=getChild<LLButton>(BTN_ALLOW); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_FORGET); + button->setEnabled(TRUE); + + button=getChild<LLButton>(BTN_BLOCK); + button->setEnabled(FALSE); +} + +void LLFloaterExperienceProfile::onClose( bool app_quitting ) +{ + LLEventPumps::instance().obtain("experience_permission").stopListening(mExperienceId.asString()+"-profile"); + LLFloater::onClose(app_quitting); +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index feaff0547e..83ad75913f 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -54,10 +54,13 @@ public: LLUUID getExperienceId() const { return mExperienceId; } void setPreferences( const LLSD& content ); + + void refreshExperience(const LLSD& experience); void onSaveComplete( const LLSD& content ); virtual BOOL canClose(); + virtual void onClose(bool app_quitting); protected: void onClickEdit(); void onClickPermission(const char* permission); @@ -70,12 +73,18 @@ protected: void changeToView(); + void experienceForgotten(); + void experienceBlocked(); + void experienceAllowed(); + static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience); + static bool experiencePermission(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& permission); BOOL postBuild(); bool setMaturityString(U8 maturity, LLTextBox* child, LLComboBox* combo); bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response, PostSaveAction action); void doSave( int success_action ); + void updatePermission( const LLSD& permission ); LLUUID mExperienceId; LLSD mExperienceDetails; int mSaveCompleteAction; diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 57f08742be..58ec4afd7c 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -7,6 +7,7 @@ #include "lltabcontainer.h" #include "lltrans.h" #include "llexperiencecache.h" +#include "llevents.h" class LLExperienceListResponder : public LLHTTPClient::Responder @@ -71,9 +72,11 @@ BOOL LLFloaterExperiences::postBuild() addTab("Recent_Experiences_Tab", false); resizeToTabs(); - refreshContents(); - - return TRUE; + + LLEventPumps::instance().obtain("experience_permission").listen("LLFloaterExperiences", + boost::bind(&LLFloaterExperiences::updatePermissions, this, _1)); + + return FALSE; } void LLFloaterExperiences::clearFromRecent(const LLSD& ids) @@ -157,3 +160,77 @@ void LLFloaterExperiences::refreshContents() } } } + +void LLFloaterExperiences::onOpen( const LLSD& key ) +{ + LLViewerRegion* region = gAgent.getRegion(); + if(region) + { + if(region->capabilitiesReceived()) + { + refreshContents(); + return; + } + region->setCapabilitiesReceivedCallback(boost::bind(&LLFloaterExperiences::refreshContents, this)); + return; + } +} + +bool LLFloaterExperiences::updatePermissions( const LLSD& permission ) +{ + LLTabContainer* tabs = getChild<LLTabContainer>("xp_tabs"); + LLUUID experience; + std::string permission_string; + if(permission.has("experience")) + { + experience = permission["experience"].asUUID(); + permission_string = permission[experience.asString()]["permission"].asString(); + + } + LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName("Allowed_Experiences_Tab"); + if(tab) + { + if(permission.has("experiences")) + { + tab->setExperienceList(permission["experiences"]); + } + else if(experience.notNull()) + { + if(permission_string != "Allow") + { + tab->removeExperience(experience); + } + else + { + tab->addExperience(experience); + } + } + } + + tab = (LLPanelExperiences*)tabs->getPanelByName("Blocked_Experiences_Tab"); + if(tab) + { + if(permission.has("blocked")) + { + tab->setExperienceList(permission["blocked"]); + } + else if(experience.notNull()) + { + if(permission_string != "Block") + { + tab->removeExperience(experience); + } + else + { + tab->addExperience(experience); + } + } + } + return false; +} + +void LLFloaterExperiences::onClose( bool app_quitting ) +{ + LLEventPumps::instance().obtain("experience_permission").stopListening("LLFloaterExperiences"); + LLFloater::onClose(app_quitting); +} diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h index 01a0f4c551..27b453042b 100644 --- a/indra/newview/llfloaterexperiences.h +++ b/indra/newview/llfloaterexperiences.h @@ -33,21 +33,19 @@ class LLFloaterExperiences : public LLFloater { public: - LLFloaterExperiences(const LLSD& data); + LLFloaterExperiences(const LLSD& data); + virtual void onClose(bool app_quitting); + virtual void onOpen(const LLSD& key); +protected: void clearFromRecent(const LLSD& ids); void resizeToTabs(); - -protected: /*virtual*/ BOOL postBuild(); - void refreshContents(); - - - void setupRecentTabs(); void addTab(const std::string& name, bool select); + bool updatePermissions(const LLSD& permission); private: diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index 67ce3d3aa6..a057e8440f 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -67,10 +67,28 @@ void LLPanelExperiences::removeExperiences( const LLSD& ids ) LLSD::array_const_iterator it = ids.beginArray(); for( /**/ ; it != ids.endArray(); ++it) { - mExperiencesList->removeItemByUUID(it->asUUID()); + removeExperience(it->asUUID()); } } +void LLPanelExperiences::removeExperience( const LLUUID& id ) +{ + mExperiencesList->removeItemByUUID(id); +} + +void LLPanelExperiences::addExperience( const LLUUID& id ) +{ + if(!mExperiencesList->getItemByValue(id)) + { + LLExperienceItem* item = new LLExperienceItem(); + + item->init(id); + mExperiencesList->addItem(item, id); + } +} + + + LLExperienceItem::LLExperienceItem() { diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h index 45773adda9..df35d8b53b 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -61,6 +61,8 @@ public: LLExperienceItem* getSelectedExperienceItem(); void removeExperiences( const LLSD& ids ); + void removeExperience( const LLUUID& id); + void addExperience( const LLUUID& id); protected: private: diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d7dffc5016..47644d2c6f 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6343,6 +6343,12 @@ bool script_question_cb(const LLSD& notification, const LLSD& response) return false; } + LLUUID experience; + if(notification["payload"].has("experience")) + { + experience = notification["payload"]["experience"].asUUID(); + } + // check whether permissions were granted or denied BOOL allowed = TRUE; // the "yes/accept" button is the first button in the template, making it button 0 @@ -6351,7 +6357,17 @@ bool script_question_cb(const LLSD& notification, const LLSD& response) { new_questions = 0; allowed = FALSE; - } + } + else if(experience.notNull()) + { + LLSD permission; + LLSD data; + permission["permission"]="Allow"; + + data[experience.asString()]=permission; + data["experience"]=experience; + LLEventPumps::instance().obtain("experience_permission").post(data); + } LLUUID task_id = notification["payload"]["task_id"].asUUID(); LLUUID item_id = notification["payload"]["item_id"].asUUID(); @@ -6381,7 +6397,7 @@ bool script_question_cb(const LLSD& notification, const LLSD& response) if ( response["BlockExperience"] ) { - if(notification["payload"].has("experience")) + if(experience.notNull()) { LLViewerRegion* region = gAgent.getRegion(); if (!region) @@ -6394,8 +6410,11 @@ bool script_question_cb(const LLSD& notification, const LLSD& response) LLSD data; permission["permission"]="Block"; - data[notification["payload"]["experience"].asString()]=permission; + data[experience.asString()]=permission; LLHTTPClient::put(lookup_url, data, NULL); + + data["experience"]=experience; + LLEventPumps::instance().obtain("experience_permission").post(data); } } -- cgit v1.2.3 From 1385a53e3388ed5ed94887d9ad65c134c65b56ec Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 24 Oct 2013 09:53:27 -0700 Subject: Fixed typo in LLFloaterExperiences::postBuild --- indra/newview/llfloaterexperiences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 58ec4afd7c..f80f6d9813 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -76,7 +76,7 @@ BOOL LLFloaterExperiences::postBuild() LLEventPumps::instance().obtain("experience_permission").listen("LLFloaterExperiences", boost::bind(&LLFloaterExperiences::updatePermissions, this, _1)); - return FALSE; + return TRUE; } void LLFloaterExperiences::clearFromRecent(const LLSD& ids) -- cgit v1.2.3 From a6faeac94530e59d2c2a56df63a1d78e00fb0247 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 25 Oct 2013 09:48:41 -0700 Subject: Fixed the unintentional removal of experiences from teh list floater. Added a message to the UI for privileged experiences. --- indra/newview/llfloaterexperienceprofile.cpp | 63 ++++++++++++++++++---- .../default/xui/en/floater_experienceprofile.xml | 18 +++++-- 2 files changed, 67 insertions(+), 14 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 25dde49b8e..2a81c6cdec 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -58,6 +58,7 @@ #define TF_OWNER "OwnerText" #define TF_GROUP "GroupText" #define TF_GRID_WIDE "grid_wide" +#define TF_PRIVILEGED "privileged" #define EDIT "edit_" #define IMG_LOGO "logo" @@ -161,14 +162,45 @@ public: class ExperiencePreferencesResponder : public LLHTTPClient::Responder { public: - ExperiencePreferencesResponder() + ExperiencePreferencesResponder(bool single):mSingle(single) { } + void sendSingle(const LLSD& content, const LLSD& permission, const char* name) + { + if(!content.has(name)) + return; + + LLEventPump& pump = LLEventPumps::instance().obtain("experience_permission"); + const LLSD& list = content[name]; + LLSD::array_const_iterator it = list.beginArray(); + while(it != list.endArray()) + { + LLSD message; + message[it->asString()] = permission; + pump.post(message); + ++it; + } + } + virtual void result(const LLSD& content) { + if(mSingle) + { + LLSD experience; + experience["permission"]="Allow"; + + sendSingle(content, experience, "experiences"); + + experience["permission"]="Block"; + sendSingle(content, experience, "blocked"); + + return; + } LLEventPumps::instance().obtain("experience_permission").post(content); } +private: + bool mSingle; }; @@ -222,12 +254,6 @@ BOOL LLFloaterExperienceProfile::postBuild() { LLHTTPClient::get(lookup_url+"?experience_id="+mExperienceId.asString(), new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>())); } - - lookup_url=region->getCapability("ExperiencePreferences"); - if(!lookup_url.empty()) - { - LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder()); - } } } @@ -312,7 +338,7 @@ void LLFloaterExperienceProfile::onClickPermission(const char* perm) permission["permission"]=perm; data[mExperienceId.asString()]=permission; - LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder()); + LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder(false)); } @@ -327,7 +353,7 @@ void LLFloaterExperienceProfile::onClickForget() if(lookup_url.empty()) return; - LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder()); + LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(false)); } bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child, LLComboBox* combo ) @@ -377,7 +403,6 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) LLLayoutPanel* locationPanel = getChild<LLLayoutPanel>(PNL_LOC); LLLayoutPanel* marketplacePanel = getChild<LLLayoutPanel>(PNL_MRKT); LLLayoutPanel* topPanel = getChild<LLLayoutPanel>(PNL_TOP); - LLLayoutPanel* permPanel = getChild<LLLayoutPanel>(PNL_PERMS); imagePanel->setVisible(FALSE); @@ -449,7 +474,23 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) } - permPanel->setVisible((properties & LLExperienceCache::PROPERTY_PRIVILEGED) == 0); + if(properties & LLExperienceCache::PROPERTY_PRIVILEGED) + { + child = getChild<LLTextBox>(TF_PRIVILEGED); + child->setVisible(TRUE); + } + else + { + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url=region->getCapability("ExperiencePreferences"); + if(!lookup_url.empty()) + { + LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(true)); + } + } + } value=experience[LLExperienceCache::METADATA].asString(); if(value.empty()) diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index 2b936b79c9..b823b338ad 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -353,13 +353,13 @@ </layout_panel> <layout_panel follows="all" - height="33" + height="49" layout="topleft" left="0" top="5" width="313" auto_resize="false" - visible="false" + visible="true" name="perm panel"> <button follows="bottom|left" @@ -391,7 +391,19 @@ top_pad="-23" left_pad="3" enabled="false"/> - + <text + type="string" + length="1" + follows="left|top|right" + height="16" + layout="topleft" + left="10" + name="privileged" + use_ellipses="true" + visible="false" + right ="-10"> + This experience is enabled for all residents. + </text> </layout_panel> </layout_stack> </panel> -- cgit v1.2.3 From 1d8066890df4d8de9e60970037282beb9818788c Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 25 Oct 2013 14:04:24 -0700 Subject: Make the experience profile save button enable and disable as changes are made/reverted. Added some explanation text. --- indra/newview/llfloaterexperienceprofile.cpp | 130 ++++++++++++--------- indra/newview/llfloaterexperienceprofile.h | 4 + .../default/xui/en/floater_experienceprofile.xml | 13 +++ 3 files changed, 92 insertions(+), 55 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 2a81c6cdec..83b4f1609e 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -275,6 +275,8 @@ BOOL LLFloaterExperienceProfile::postBuild() childSetCommitCallback(EDIT BTN_ENABLE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); childSetCommitCallback(EDIT BTN_PRIVATE, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); + childSetCommitCallback(EDIT IMG_LOGO, boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this), NULL); + getChild<LLTextEditor>(EDIT TF_DESC)->setCommitOnFocusLost(TRUE); @@ -396,6 +398,7 @@ bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* chil void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) { mExperienceDetails = experience; + mPackage = experience; LLLayoutPanel* imagePanel = getChild<LLLayoutPanel>(PNL_IMAGE); @@ -581,7 +584,23 @@ void LLFloaterExperienceProfile::setPreferences( const LLSD& content ) void LLFloaterExperienceProfile::onFieldChanged() { - mDirty=true; + updatePackage(); + + LLSD::map_const_iterator st = mExperienceDetails.beginMap(); + LLSD::map_const_iterator dt = mPackage.beginMap(); + + mDirty = false; + while( !mDirty && st != mExperienceDetails.endMap() && dt != mPackage.endMap()) + { + mDirty = st->first != dt->first || st->second.asString() != dt->second.asString(); + ++st;++dt; + } + + if(!mDirty && (st != mExperienceDetails.endMap() || dt != mPackage.endMap())) + { + mDirty = true; + } + getChild<LLButton>(BTN_SAVE)->setEnabled(mDirty); } @@ -645,60 +664,8 @@ void LLFloaterExperienceProfile::doSave( int success_action ) 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(); - std::string slurl = getChild<LLTextBox>(EDIT TF_SLURL)->getText(); - if(slurl == getString("empty_slurl")) - { - package[LLExperienceCache::SLURL] = LLStringUtil::null; - } - else - { - package[LLExperienceCache::SLURL] = slurl; - } - - 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>())); + + LLHTTPClient::post(url, mPackage, new ExperienceUpdateResponder(getDerivedHandle<LLFloaterExperienceProfile>())); } void LLFloaterExperienceProfile::onSaveComplete( const LLSD& content ) @@ -841,3 +808,56 @@ void LLFloaterExperienceProfile::onClose( bool app_quitting ) LLEventPumps::instance().obtain("experience_permission").stopListening(mExperienceId.asString()+"-profile"); LLFloater::onClose(app_quitting); } + +void LLFloaterExperienceProfile::updatePackage() +{ + mPackage[LLExperienceCache::NAME] = getChild<LLLineEditor>(EDIT TF_NAME)->getText(); + mPackage[LLExperienceCache::DESCRIPTION] = getChild<LLTextEditor>(EDIT TF_DESC)->getText(); + std::string slurl = getChild<LLTextBox>(EDIT TF_SLURL)->getText(); + if(slurl == getString("empty_slurl")) + { + mPackage[LLExperienceCache::SLURL] = LLStringUtil::null; + } + else + { + mPackage[LLExperienceCache::SLURL] = slurl; + } + + mPackage[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)) + { + mPackage[LLExperienceCache::METADATA]=os.str(); + } + + int properties = mPackage[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; + } + + mPackage[LLExperienceCache::PROPERTIES] = properties; +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index 83ad75913f..550b3c6f27 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -84,9 +84,13 @@ protected: bool setMaturityString(U8 maturity, LLTextBox* child, LLComboBox* combo); bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response, PostSaveAction action); void doSave( int success_action ); + + void updatePackage(); + void updatePermission( const LLSD& permission ); LLUUID mExperienceId; LLSD mExperienceDetails; + LLSD mPackage; int mSaveCompleteAction; bool mDirty; bool mForceClose; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index b823b338ad..43ff3f07e4 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -504,6 +504,7 @@ layout="topleft" right="-10" top_pad="-19" + tool_tip="Increasing the maturity rating on an experience will reset permission for all residents which have allowed the experience." name="edit_ContentRatingText" width="105"> <icons_combo_box.drop_down_button @@ -606,6 +607,7 @@ left="10" layout="topleft" follows="top|left" + tool_tip="" label="Enable Experience" name="edit_enable_btn"/> <check_box width="130" @@ -636,6 +638,17 @@ width="120" right="-10" visible="true"/> + <text + follows="left|top|right" + height="50" + layout="topleft" + left="10" + top_pad="10" + name="changes" + use_ellipses="true" + word_wrap="true" + value="Experience changes may take several minutes to be seen on all regions." + right="-10"/> </panel> </scroll_container> </panel> -- cgit v1.2.3 From 1e770cb8f972fc3ad475e54dc07a5a7431b968c0 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 25 Oct 2013 15:51:37 -0700 Subject: Fixed experience profile permission messages --- indra/newview/llfloaterexperienceprofile.cpp | 92 ++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 20 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 83b4f1609e..4b6ed393b5 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -162,45 +162,87 @@ public: class ExperiencePreferencesResponder : public LLHTTPClient::Responder { public: - ExperiencePreferencesResponder(bool single):mSingle(single) + ExperiencePreferencesResponder(const LLUUID& single = LLUUID::null):mId(single) { } - void sendSingle(const LLSD& content, const LLSD& permission, const char* name) + bool sendSingle(const LLSD& content, const LLSD& permission, const char* name) { if(!content.has(name)) - return; + return false; LLEventPump& pump = LLEventPumps::instance().obtain("experience_permission"); const LLSD& list = content[name]; LLSD::array_const_iterator it = list.beginArray(); while(it != list.endArray()) { - LLSD message; - message[it->asString()] = permission; - pump.post(message); + if(it->asUUID() == mId) + { + LLSD message; + message[it->asString()] = permission; + message["experience"] = mId; + pump.post(message); + return true; + } ++it; } + return false; } - virtual void result(const LLSD& content) + bool hasPermission(const LLSD& content, const char* name) { - if(mSingle) + if(!content.has(name)) + return false; + + const LLSD& list = content[name]; + LLSD::array_const_iterator it = list.beginArray(); + while(it != list.endArray()) { - LLSD experience; - experience["permission"]="Allow"; + if(it->asUUID() == mId) + { + return true; + } + ++it; + } + return false; + } - sendSingle(content, experience, "experiences"); + const char* getPermission(const LLSD& content) + { + if(hasPermission(content, "experiences")) + { + return "Allow"; + } + else if(hasPermission(content, "blocked")) + { + return "Block"; + } + return "Forget"; + } - experience["permission"]="Block"; - sendSingle(content, experience, "blocked"); + virtual void result(const LLSD& content) + { + if(mId.notNull()) + { + post(getPermission(content)); return; } LLEventPumps::instance().obtain("experience_permission").post(content); } + + void post( const char* perm ) + { + LLSD experience; + LLSD message; + experience["permission"]=perm; + message["experience"] = mId; + message[mId.asString()] = experience; + LLEventPumps::instance().obtain("experience_permission").post(message); + } + private: - bool mSingle; + LLUUID mId; }; @@ -340,7 +382,7 @@ void LLFloaterExperienceProfile::onClickPermission(const char* perm) permission["permission"]=perm; data[mExperienceId.asString()]=permission; - LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder(false)); + LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder(mExperienceId)); } @@ -355,7 +397,7 @@ void LLFloaterExperienceProfile::onClickForget() if(lookup_url.empty()) return; - LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(false)); + LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(mExperienceId)); } bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child, LLComboBox* combo ) @@ -490,7 +532,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) std::string lookup_url=region->getCapability("ExperiencePreferences"); if(!lookup_url.empty()) { - LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(true)); + LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(mExperienceId)); } } } @@ -557,6 +599,12 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) void LLFloaterExperienceProfile::setPreferences( const LLSD& content ) { + S32 properties = mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger(); + if(properties & LLExperienceCache::PROPERTY_PRIVILEGED) + { + return; + } + const LLSD& experiences = content["experiences"]; const LLSD& blocked = content["blocked"]; @@ -744,10 +792,14 @@ void LLFloaterExperienceProfile::onClickClear() void LLFloaterExperienceProfile::updatePermission( const LLSD& permission ) { - std::string xp = mExperienceId.asString(); - if(permission.has(xp)) + if(permission.has("experience")) { - std::string str = permission[xp]["permission"].asString(); + if(permission["experience"].asUUID() != mExperienceId) + { + return; + } + + std::string str = permission[mExperienceId.asString()]["permission"].asString(); if(str == "Allow") { experienceAllowed(); -- cgit v1.2.3 From 1319a6258a1ec110150624ce10d951439158ee90 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 11 Nov 2013 13:58:46 -0800 Subject: Fixing coding policy errors --- indra/llmessage/CMakeLists.txt | 4 ++-- indra/newview/CMakeLists.txt | 4 ++-- indra/newview/llfloaterexperiences.cpp | 26 ++++++++++++++++++++++++++ indra/newview/llpanelexperiences.cpp | 27 +++++++++++++++++++++++++++ indra/newview/llpanelexperiences.h | 8 ++++---- 5 files changed, 61 insertions(+), 8 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt index 5740584edb..86121667b7 100755 --- a/indra/llmessage/CMakeLists.txt +++ b/indra/llmessage/CMakeLists.txt @@ -38,7 +38,7 @@ set(llmessage_SOURCE_FILES llcurl.cpp lldatapacker.cpp lldispatcher.cpp - llexperiencecache.cpp + llexperiencecache.cpp llfiltersd2xmlrpc.cpp llhost.cpp llhttpassetstorage.cpp @@ -129,7 +129,7 @@ set(llmessage_HEADER_FILES lldbstrings.h lldispatcher.h lleventflags.h - llexperiencecache.h + llexperiencecache.h llfiltersd2xmlrpc.h llfollowcamparams.h llhost.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 48761a7f90..8c1e8c23a9 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -189,7 +189,7 @@ set(viewer_SOURCE_FILES lleventnotifier.cpp lleventpoll.cpp llexpandabletextbox.cpp - llexperienceassociationresponder.cpp + llexperienceassociationresponder.cpp llexternaleditor.cpp llface.cpp llfacebookconnect.cpp @@ -781,7 +781,7 @@ set(viewer_HEADER_FILES lleventnotifier.h lleventpoll.h llexpandabletextbox.h - llexperienceassociationresponder.h + llexperienceassociationresponder.h llexternaleditor.h llface.h llfacebookconnect.h diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index f80f6d9813..3b15cc62a7 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -1,3 +1,29 @@ +/** + * @file llfloaterexperiences.cpp + * @brief LLFloaterExperiences class implementation + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + #include "llviewerprecompiledheaders.h" #include "llpanelexperiences.h" diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index a057e8440f..3aca9eb68b 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -1,3 +1,30 @@ +/** + * @file llpanelexperiences.cpp + * @brief LLPanelExperiences class implementation + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + #include "llviewerprecompiledheaders.h" diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h index df35d8b53b..bda0f4b587 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -1,10 +1,10 @@ /** - * @file llpanelpicks.h - * @brief LLPanelPicks and related class definitions + * @file llpanelexperiences.h + * @brief LLPanelExperiences class definition * - * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012, Linden Research, Inc. + * Copyright (C) 2013, 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 -- cgit v1.2.3 From b932dbd1193f911691e918f6bee96da88b3c71e5 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 5 Dec 2013 10:47:44 -0800 Subject: Added notification for experience declined due to maturity --- indra/newview/llviewermessage.cpp | 119 +++++++++++++-------- .../newview/skins/default/xui/en/notifications.xml | 14 ++- 2 files changed, 89 insertions(+), 44 deletions(-) (limited to 'indra') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 895400fc89..d7ec4e0ead 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5882,39 +5882,38 @@ bool handle_teleport_access_blocked(LLSD& llsdBlock) return returnValue; } -bool attempt_standard_notification(LLMessageSystem* msgsystem) +bool handle_home_position_set(std::string notificationID, LLSD& llsdBlock) { - // if we have additional alert data - if (msgsystem->has(_PREHASH_AlertInfo) && msgsystem->getNumberOfBlocksFast(_PREHASH_AlertInfo) > 0) - { - // notification was specified using the new mechanism, so we can just handle it here - std::string notificationID; - msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID); - if (!LLNotifications::getInstance()->templateExists(notificationID)) - { - return false; - } + std::string snap_filename = gDirUtilp->getLindenUserDir(); + snap_filename += gDirUtilp->getDirDelimiter(); + snap_filename += SCREEN_HOME_FILENAME; + gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE); - std::string llsdRaw; - LLSD llsdBlock; - msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID); - msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_ExtraParams, llsdRaw); - if (llsdRaw.length()) - { - std::istringstream llsdData(llsdRaw); - if (!LLSDSerialize::deserialize(llsdBlock, llsdData, llsdRaw.length())) - { - llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl; - } - } - - if ( - (notificationID == "RegionEntryAccessBlocked") || - (notificationID == "LandClaimAccessBlocked") || - (notificationID == "LandBuyAccessBlocked") - ) - { - /*--------------------------------------------------------------------- + return false; +} + +bool handle_experience_maturity_exceeded(std::string notificationID, LLSD& llsdBlock) +{ + if(llsdBlock.has("experience_id")) + { + llsdBlock["EXPERIENCE_SLURL"]=LLSLURL("experience", llsdBlock["experience_id"].asUUID(), "profile").getSLURLString(); + } + return false; +} + +typedef boost::function<bool (std::string&, LLSD&)> standard_exception_function_t; +typedef std::map<std::string, standard_exception_function_t> standard_exception_map_t; + +standard_exception_map_t sStandardExceptions; + +bool process_exceptions(std::string notificationID, LLSD& llsdBlock) +{ + if(sStandardExceptions.empty()) + { + sStandardExceptions["RegionEntryAccessBlocked"] = handle_special_notification; + sStandardExceptions["LandClaimAccessBlocked"] = handle_special_notification; + sStandardExceptions["LandBuyAccessBlocked"] = handle_special_notification; + /*--------------------------------------------------------------------- (Commented so a grep will find the notification strings, since we construct them on the fly; if you add additional notifications, please update the comment.) @@ -5939,21 +5938,55 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) LandBuyAccessBlocked_AdultsOnlyContent -----------------------------------------------------------------------*/ - if (handle_special_notification(notificationID, llsdBlock)) - { - return true; - } + + + sStandardExceptions["HomePositionSet"] = handle_home_position_set; + sStandardExceptions["ExperienceMaturityExceeded"] = handle_experience_maturity_exceeded; + } + + standard_exception_map_t::iterator it = sStandardExceptions.find(notificationID); + + if(it == sStandardExceptions.end()) + { + return false; + } + + return it->second(notificationID, llsdBlock); +} + + + +bool attempt_standard_notification(LLMessageSystem* msgsystem) +{ + // if we have additional alert data + if (msgsystem->has(_PREHASH_AlertInfo) && msgsystem->getNumberOfBlocksFast(_PREHASH_AlertInfo) > 0) + { + // notification was specified using the new mechanism, so we can just handle it here + std::string notificationID; + msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID); + if (!LLNotifications::getInstance()->templateExists(notificationID)) + { + return false; } - // HACK -- handle callbacks for specific alerts. - if( notificationID == "HomePositionSet" ) + + std::string llsdRaw; + LLSD llsdBlock; + msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID); + msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_ExtraParams, llsdRaw); + if (llsdRaw.length()) { - // save the home location image to disk - std::string snap_filename = gDirUtilp->getLindenUserDir(); - snap_filename += gDirUtilp->getDirDelimiter(); - snap_filename += SCREEN_HOME_FILENAME; - gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE); + std::istringstream llsdData(llsdRaw); + if (!LLSDSerialize::deserialize(llsdBlock, llsdData, llsdRaw.length())) + { + llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl; + } } - + + if(process_exceptions(notificationID, llsdBlock)) + { + return true; + } + LLNotificationsUtil::add(notificationID, llsdBlock); return true; } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 0f9a728116..0acdf100a4 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6985,10 +6985,22 @@ Is this OK? text="Block"/> </form> </notification> + <notification + icon="notify.tga" + name="ExperienceMaturityExceeded" + persist="false" + type="notify"> +You have declined participation in the following experience which exceeds your content ratings preferences: +[EXPERIENCE_SLURL] + <form name="form"> + <ignore name="ignore" + text="Experience declined due to content ratings"/> + </form> + </notification> <notification icon="notify.tga" name="ScriptQuestionExperience" - persist="true" + persist="false" type="notify"> '<nolink>[OBJECTNAME]</nolink>', an object owned by '[NAME]', requests your participation in the [GRID_WIDE]experience: -- cgit v1.2.3 From 73b277b83b021dedc54cdaf48c3be30275a1f843 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 9 Dec 2013 13:47:41 -0800 Subject: Fixed windows line endings --- indra/newview/app_settings/keywords.ini | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'indra') diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index 6209a8b616..3bcb4d666d 100755 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -714,21 +714,22 @@ TEXTURE_TRANSPARENT UUID for the "White - Transparent" texture URL_REQUEST_GRANTED Used with http_request when a public URL is successfully granted URL_REQUEST_DENIED Used with http_request when a public URL is not available -XP_ERROR_NONE No error was detected -XP_ERROR_THROTTLED The call failed due to too many recent calls. -XP_ERROR_EXPERIENCES_DISABLED The region currently has experiences disabled. -XP_ERROR_INVALID_PARAMETERS One of the string arguments was too big to fit in the key-value store. -XP_ERROR_NOT_PERMITTED This experience is not allowed to run on the current region. -XP_ERROR_NO_EXPERIENCE This script is not associated with an experience. -XP_ERROR_NOT_FOUND The sim was unable to verify the validity of the experience. Retrying after a short wait is advised. -XP_ERROR_INVALID_EXPERIENCE The script is associated with an experience that no longer exists. -XP_ERROR_EXPERIENCE_DISABLED The experience owner has temporarily disabled the experience. -XP_ERROR_EXPERIENCE_SUSPENDED The experience has been suspended by Linden Customer Support. -XP_ERROR_QUOTA_EXCEEDED An attempted write data to the key-value store failed due to the data quota being met. -XP_ERROR_STORE_DISABLED The key-value store is currently disabled on this region. -XP_ERROR_STORAGE_EXCEPTION Unable to communicate with the key-value store. -XP_ERROR_KEY_NOT_FOUND The requested key does not exist. -XP_ERROR_RETRY_UPDATE A checked update failed due to an out of date request. +XP_ERROR_NONE No error was detected +XP_ERROR_THROTTLED The call failed due to too many recent calls. +XP_ERROR_EXPERIENCES_DISABLED The region currently has experiences disabled. +XP_ERROR_INVALID_PARAMETERS One of the string arguments was too big to fit in the key-value store. +XP_ERROR_NOT_PERMITTED This experience is not allowed to run on the current region. +XP_ERROR_NO_EXPERIENCE This script is not associated with an experience. +XP_ERROR_NOT_FOUND The sim was unable to verify the validity of the experience. Retrying after a short wait is advised. +XP_ERROR_INVALID_EXPERIENCE The script is associated with an experience that no longer exists. +XP_ERROR_EXPERIENCE_DISABLED The experience owner has temporarily disabled the experience. +XP_ERROR_EXPERIENCE_SUSPENDED The experience has been suspended by Linden Customer Support. +XP_ERROR_QUOTA_EXCEEDED An attempted write data to the key-value store failed due to the data quota being met. +XP_ERROR_STORE_DISABLED The key-value store is currently disabled on this region. +XP_ERROR_STORAGE_EXCEPTION Unable to communicate with the key-value store. +XP_ERROR_KEY_NOT_FOUND The requested key does not exist. +XP_ERROR_RETRY_UPDATE A checked update failed due to an out of date request. +XP_ERROR_MATURITY_EXCEEDED The request failed due to agent content preferences. XP_ERROR_UNKNOWN_ERROR Other unknown error. -- cgit v1.2.3 From 88d0281121b4913f17931b8f5f537570b9198f29 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 28 Jan 2014 12:21:54 -0800 Subject: Added llFloaterExperiencePicker, mainly for use by region owners. --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloaterexperiencepicker.cpp | 381 +++++++++++++++++++++ indra/newview/llfloaterexperiencepicker.h | 81 +++++ indra/newview/llviewerfloaterreg.cpp | 4 +- indra/newview/llviewerregion.cpp | 17 +- .../default/xui/en/floater_experience_search.xml | 170 +++++++++ indra/newview/skins/default/xui/en/menu_viewer.xml | 9 +- .../default/xui/en/panel_region_experiences.xml | 15 + 8 files changed, 669 insertions(+), 10 deletions(-) create mode 100644 indra/newview/llfloaterexperiencepicker.cpp create mode 100644 indra/newview/llfloaterexperiencepicker.h create mode 100644 indra/newview/skins/default/xui/en/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/en/panel_region_experiences.xml (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d2a992ed94..09746f4b2c 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -229,6 +229,7 @@ set(viewer_SOURCE_FILES llfloatereditwater.cpp llfloaterenvironmentsettings.cpp llfloaterevent.cpp + llfloaterexperiencepicker.cpp llfloaterexperienceprofile.cpp llfloaterexperiences.cpp llfloaterfonttest.cpp @@ -821,6 +822,7 @@ set(viewer_HEADER_FILES llfloatereditwater.h llfloaterenvironmentsettings.h llfloaterevent.h + llfloaterexperiencepicker.h llfloaterexperienceprofile.h llfloaterexperiences.h llfloaterfonttest.h diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp new file mode 100644 index 0000000000..6d0ceedb0d --- /dev/null +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -0,0 +1,381 @@ +/** +* @file llfloaterexperiencepicker.cpp +* @brief Implementation of llfloaterexperiencepicker +* @author dolphin@lindenlab.com +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterexperiencepicker.h" + + +#include "lllineeditor.h" +#include "llfloaterreg.h" +#include "llscrolllistctrl.h" +#include "llviewerregion.h" +#include "llagent.h" +#include "llexperiencecache.h" +#include "llslurl.h" +#include "llavatarnamecache.h" +#include "llfloaterexperienceprofile.h" +#include "llcombobox.h" + +#define BTN_FIND "find" +#define BTN_OK "ok_btn" +#define BTN_CANCEL "cancel_btn" +#define BTN_PROFILE "profile_btn" +#define TEXT_EDIT "edit" +#define TEXT_MATURITY "maturity" +#define LIST_RESULTS "search_results" +#define PANEL_SEARCH "search_panel" + +const static std::string columnSpace = " "; + +class LLExperiencePickerResponder : public LLHTTPClient::Responder +{ +public: + LLUUID mQueryID; + LLHandle<LLFloaterExperiencePicker> mParent; + + LLExperiencePickerResponder(const LLUUID& id, const LLHandle<LLFloaterExperiencePicker>& parent) : mQueryID(id), mParent(parent) { } + + void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + if(mParent.isDead()) + return; + + LLFloaterExperiencePicker* floater =mParent.get(); + if (floater) + { + floater->processResponse(mQueryID, content); + } + } + else + { + llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl; + + } + } +}; +LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect ) +{ + LLFloaterExperiencePicker* floater = + LLFloaterReg::showTypedInstance<LLFloaterExperiencePicker>("experience_search", key); + if (!floater) + { + llwarns << "Cannot instantiate experience picker" << llendl; + return NULL; + } + + floater->mSelectionCallback = callback; + floater->mCloseOnSelect = closeOnSelect; + floater->setAllowMultiple(allow_multiple); + return floater; +} + + +LLFloaterExperiencePicker::LLFloaterExperiencePicker( const LLSD& key ) + :LLFloater(key) +{ + +} + +LLFloaterExperiencePicker::~LLFloaterExperiencePicker() +{ + gFocusMgr.releaseFocusIfNeeded( this ); +} + + + +BOOL LLFloaterExperiencePicker::postBuild() +{ + getChild<LLLineEditor>(TEXT_EDIT)->setKeystrokeCallback( boost::bind(&LLFloaterExperiencePicker::editKeystroke, this, _1, _2),NULL); + + childSetAction(BTN_FIND, boost::bind(&LLFloaterExperiencePicker::onBtnFind, this)); + getChildView(BTN_FIND)->setEnabled(FALSE); + + LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS); + searchresults->setDoubleClickCallback( boost::bind(&LLFloaterExperiencePicker::onBtnSelect, this)); + searchresults->setCommitCallback(boost::bind(&LLFloaterExperiencePicker::onList, this)); + getChildView(LIST_RESULTS)->setEnabled(FALSE); + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); + + childSetAction(BTN_OK, boost::bind(&LLFloaterExperiencePicker::onBtnSelect, this)); + getChildView(BTN_OK)->setEnabled(FALSE); + childSetAction(BTN_CANCEL, boost::bind(&LLFloaterExperiencePicker::onBtnClose, this)); + childSetAction(BTN_PROFILE, boost::bind(&LLFloaterExperiencePicker::onBtnProfile, this)); + getChildView(BTN_PROFILE)->setEnabled(FALSE); + + getChild<LLComboBox>(TEXT_MATURITY)->setCurrentByIndex(2); + getChild<LLComboBox>(TEXT_MATURITY)->setCommitCallback(boost::bind(&LLFloaterExperiencePicker::onMaturity, this)); + getChild<LLUICtrl>(TEXT_EDIT)->setFocus(TRUE); + + LLPanel* search_panel = getChild<LLPanel>(PANEL_SEARCH); + if (search_panel) + { + // Start searching when Return is pressed in the line editor. + search_panel->setDefaultBtn(BTN_FIND); + } + return TRUE; +} + +void LLFloaterExperiencePicker::editKeystroke( class LLLineEditor* caller, void* user_data ) +{ + getChildView(BTN_FIND)->setEnabled(caller->getText().size() > 0); +} + +void LLFloaterExperiencePicker::onBtnFind() +{ + find(); +} + +void LLFloaterExperiencePicker::onBtnSelect() +{ + if(!isSelectButtonEnabled()) + { + return; + } + + if(mSelectionCallback) + { + const LLScrollListCtrl* results = getChild<LLScrollListCtrl>(LIST_RESULTS); + uuid_vec_t experience_ids; + + getSelectedExperienceIds(results, experience_ids); + mSelectionCallback(experience_ids); + } + getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE); + if(mCloseOnSelect) + { + mCloseOnSelect = FALSE; + closeFloater(); + } +} + +void LLFloaterExperiencePicker::onList() +{ + bool enabled = isSelectButtonEnabled(); + getChildView(BTN_OK)->setEnabled(enabled); + + enabled = enabled && getChild<LLScrollListCtrl>(LIST_RESULTS)->getNumSelected() == 1; + getChildView(BTN_PROFILE)->setEnabled(enabled); +} + + +void LLFloaterExperiencePicker::onBtnClose() +{ + closeFloater(); +} + + +void LLFloaterExperiencePicker::find() +{ + std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); + mQueryID.generate(); + std::string url; + url.reserve(128+text.size()); + + LLViewerRegion* region = gAgent.getRegion(); + url = region->getCapability("FindExperienceByName"); + if (!url.empty()) + { + url+="?query="; + url+=LLURI::escape(text); + LLHTTPClient::get(url, new LLExperiencePickerResponder(mQueryID, getDerivedHandle<LLFloaterExperiencePicker>())); + + } + + + getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems(); + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching")); + + getChildView(BTN_OK)->setEnabled(FALSE); + getChildView(BTN_PROFILE)->setEnabled(FALSE); +} + + +bool LLFloaterExperiencePicker::isSelectButtonEnabled() +{ + return getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelectedIndex() >=0; +} + +void LLFloaterExperiencePicker::getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ) +{ + std::vector<LLScrollListItem*> items = results->getAllSelected(); + for(std::vector<LLScrollListItem*>::iterator it = items.begin(); it != items.end(); ++it) + { + LLScrollListItem* item = *it; + if (item->getUUID().notNull()) + { + experience_ids.push_back(item->getUUID()); + } + } +} + +void LLFloaterExperiencePicker::setAllowMultiple( bool allow_multiple ) +{ + getChild<LLScrollListCtrl>(LIST_RESULTS)->setAllowMultipleSelection(allow_multiple); +} + + +void name_callback(const LLHandle<LLFloaterExperiencePicker>& floater, const LLUUID& experience_id, const LLUUID& agent_id, const LLAvatarName& av_name) +{ + if(floater.isDead()) + return; + LLFloaterExperiencePicker* picker = floater.get(); + LLScrollListCtrl* search_results = picker->getChild<LLScrollListCtrl>(LIST_RESULTS); + + LLScrollListItem* item = search_results->getItem(experience_id); + if(!item) + return; + + item->getColumn(2)->setValue(columnSpace+av_name.getDisplayName()); + +} + +void LLFloaterExperiencePicker::processResponse( const LLUUID& query_id, const LLSD& content ) +{ + if(query_id != mQueryID) + { + return; + } + + mResponse = content; + + const LLSD& experiences=mResponse["experience_keys"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for ( ; it != experiences.endArray(); ++it) + { + LLExperienceCache::insert(*it); + } + + filterContent(); + +} + +void LLFloaterExperiencePicker::onBtnProfile() +{ + LLScrollListItem* item = getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelected(); + if(item) + { + LLFloaterReg::showInstance("experience_profile", item->getUUID(), true); + } +} + +std::string LLFloaterExperiencePicker::getMaturityString(int maturity) +{ + if(maturity <= SIM_ACCESS_PG) + { + return getString("maturity_icon_general"); + } + else if(maturity <= SIM_ACCESS_MATURE) + { + return getString("maturity_icon_moderate"); + } + return getString("maturity_icon_adult"); +} + +void LLFloaterExperiencePicker::filterContent() +{ + LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>(LIST_RESULTS); + + const LLSD& experiences=mResponse["experience_keys"]; + + search_results->deleteAllItems(); + + int maturity = getChild<LLComboBox>(TEXT_MATURITY)->getSelectedValue().asInteger(); + LLSD item; + LLSD::array_const_iterator it = experiences.beginArray(); + for ( ; it != experiences.endArray(); ++it) + { + const LLSD& experience = *it; + + if(experience[LLExperienceCache::MATURITY].asInteger() > maturity) + continue; + + + item["id"]=experience[LLExperienceCache::EXPERIENCE_ID]; + LLSD& columns = item["columns"]; + columns[0]["column"] = "maturity"; + columns[0]["value"] = getMaturityString(experience[LLExperienceCache::MATURITY].asInteger()); + columns[0]["type"]="icon"; + columns[0]["halign"]="right"; + columns[1]["column"] = "experience_name"; + columns[1]["value"] = columnSpace+experience[LLExperienceCache::NAME].asString(); + columns[2]["column"] = "owner"; + columns[2]["value"] = columnSpace+getString("loading"); + search_results->addElement(item); + LLAvatarNameCache::get(experience[LLExperienceCache::AGENT_ID], boost::bind(name_callback, getDerivedHandle<LLFloaterExperiencePicker>(), experience[LLExperienceCache::EXPERIENCE_ID], _1, _2)); + } + + if (search_results->isEmpty()) + { + LLStringUtil::format_map_t map; + map["[TEXT]"] = childGetText(TEXT_EDIT); + LLSD item; + item["id"] = LLUUID::null; + item["columns"][1]["column"] = "name"; + item["columns"][1]["value"] = columnSpace+getString("not_found", map); + search_results->addElement(item); + search_results->setEnabled(false); + getChildView(BTN_OK)->setEnabled(false); + getChildView(BTN_PROFILE)->setEnabled(false); + } + else + { + getChildView(BTN_OK)->setEnabled(true); + search_results->setEnabled(true); + search_results->sortByColumnIndex(1, TRUE); + std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); + if (!search_results->selectItemByLabel(text, TRUE, 1)) + { + search_results->selectFirstItem(); + } + onList(); + search_results->setFocus(TRUE); + } +} + +void LLFloaterExperiencePicker::onMaturity() +{ + filterContent(); +} + + + + + + + + + + + + + + + + diff --git a/indra/newview/llfloaterexperiencepicker.h b/indra/newview/llfloaterexperiencepicker.h new file mode 100644 index 0000000000..72085b8b32 --- /dev/null +++ b/indra/newview/llfloaterexperiencepicker.h @@ -0,0 +1,81 @@ +/** +* @file llfloaterexperiencepicker.h +* @brief Header file for llfloaterexperiencepicker +* @author dolphin@lindenlab.com +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, 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_LLFLOATEREXPERIENCEPICKER_H +#define LL_LLFLOATEREXPERIENCEPICKER_H + +#include "llfloater.h" + +class LLScrollListCtrl; +class LLLineEditor; + + +class LLFloaterExperiencePicker : public LLFloater +{ +public: + friend class LLExperiencePickerResponder; + + // The callback function will be called with an avatar name and UUID. + typedef boost::function<void (const uuid_vec_t&)> select_callback_t; + + static LLFloaterExperiencePicker* show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect ); + + LLFloaterExperiencePicker(const LLSD& key); + virtual ~LLFloaterExperiencePicker(); + + BOOL postBuild(); + + +private: + void editKeystroke(LLLineEditor* caller, void* user_data); + + void onBtnFind(); + void onBtnSelect(); + void onBtnProfile(); + void onBtnClose(); + void onList(); + void onMaturity(); + + void getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ); + void setAllowMultiple(bool allow_multiple); + + + void find(); + bool isSelectButtonEnabled(); + void processResponse( const LLUUID& query_id, const LLSD& content ); + + void filterContent(); + std::string getMaturityString(int maturity); + + + select_callback_t mSelectionCallback; + bool mCloseOnSelect; + LLUUID mQueryID; + LLSD mResponse; +}; + +#endif // LL_LLFLOATEREXPERIENCEPICKER_H + diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index f387796309..ea1d9f816b 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -60,6 +60,7 @@ #include "llfloaterenvironmentsettings.h" #include "llfloaterexperienceprofile.h" #include "llfloaterexperiences.h" +#include "llfloaterexperiencepicker.h" #include "llfloaterevent.h" #include "llfloaterdestinations.h" #include "llfloaterfonttest.h" @@ -211,7 +212,8 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>); LLFloaterReg::add("experiences", "floater_experiences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperiences>); - LLFloaterReg::add("experience_profile", "floater_experienceprofile.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperienceProfile>); + LLFloaterReg::add("experience_profile", "floater_experienceprofile.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperienceProfile>); + LLFloaterReg::add("experience_search", "floater_experience_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperiencePicker>); LLFloaterReg::add("font_test", "floater_font_test.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFontTest>); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 4e84cc3390..f209f16516 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1601,15 +1601,16 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("GetDisplayNames"); capabilityNames.append("GetExperiences"); - capabilityNames.append("GetExperienceInfo"); - capabilityNames.append("GetAdminExperiences"); + capabilityNames.append("FindExperienceByName"); + capabilityNames.append("GetExperienceInfo"); + capabilityNames.append("GetAdminExperiences"); capabilityNames.append("GetCreatorExperiences"); - capabilityNames.append("ExperiencePreferences"); - capabilityNames.append("UpdateExperience"); - capabilityNames.append("IsExperienceAdmin"); - capabilityNames.append("IsExperienceContributor"); - capabilityNames.append("GetMesh"); - capabilityNames.append("GetMetadata"); + capabilityNames.append("ExperiencePreferences"); + capabilityNames.append("UpdateExperience"); + capabilityNames.append("IsExperienceAdmin"); + capabilityNames.append("IsExperienceContributor"); + capabilityNames.append("GetMesh"); + capabilityNames.append("GetMetadata"); capabilityNames.append("GetObjectCost"); capabilityNames.append("GetObjectPhysicsData"); capabilityNames.append("GetTexture"); diff --git a/indra/newview/skins/default/xui/en/floater_experience_search.xml b/indra/newview/skins/default/xui/en/floater_experience_search.xml new file mode 100644 index 0000000000..4531b52d67 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_experience_search.xml @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + positioning="cascading" + legacy_header_height="18" + can_resize="true" + height="350" + layout="topleft" + min_height="200" + min_width="400" + name="experiencepicker" + help_topic="experiencepicker" + title="CHOOSE EXPERIENCE" + width="350"> + + <floater.string + name="not_found"> + '[TEXT]' not found + </floater.string> + <floater.string + name="no_results"> + No results + </floater.string> + <floater.string + name="searching"> + Searching... + </floater.string> + <floater.string + name="loading"> + Loading... + </floater.string> + <floater.string + name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string + name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string + name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <panel + follows="all" + left="5" + right="-3" + bottom="-2" + top="18" + name="search_panel"> + <text + left="0" + follows="top|left|right" + right="-1"> + Enter part of the name: + </text> + <line_editor + left="0" + follows="left|top|right" + name="edit" + height="18" + right="-60"/> + <button label="Go" + follows="top|right" + top_pad="-18" + left_pad="2" + right="-1" + height="18" + name="find"/> + <text + top_pad="6" + left="0" + follows="top|left" + width="180"> + Max Content Rating: + </text> + <icons_combo_box + follows="left|top" + height="20" + label="Moderate" + layout="topleft" + name="maturity" + top_pad="-13" + left_pad="0" + right="-1"> + <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> + <scroll_list + draw_heading="true" + left="0" + right="-1" + height="239" + top_pad="4" + follows="all" + column_padding="5" + can_resize="true" + name="search_results"> + <columns + halign="center" + width="24" + name="maturity" + label=""/> + <columns + user_resize="true" + name="experience_name" + label="Name"/> + <columns + user_resize="true" + name="owner" + label="Owner"/> + </scroll_list> + + <button + follows="left|bottom" + height="23" + label="OK" + label_selected="OK" + name="ok_btn" + top_pad="3" + left="0" + width="100" /> + <button + follows="left|bottom" + height="23" + label="Cancel" + name="cancel_btn" + width="100" + left_pad="3" /> + <button + follows="left|bottom" + height="23" + label="View Profile" + name="profile_btn" + width="100" + left_pad="3" /> + </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 50d4003618..4be7dd2a5c 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -77,10 +77,17 @@ <menu_item_call label="Experiences..." name="Experiences"> - <menu_item_call.on_click + <menu_item_call.on_click function="Floater.ToggleOrBringToFront" parameter="experiences"/> </menu_item_call> + <menu_item_call + label="Experience Search..." + name="Experience Search"> + <menu_item_call.on_click + function="Floater.ToggleOrBringToFront" + parameter="experience_search"/> + </menu_item_call> <menu_item_separator/> <menu_item_call label="Camera Controls..." diff --git a/indra/newview/skins/default/xui/en/panel_region_experiences.xml b/indra/newview/skins/default/xui/en/panel_region_experiences.xml new file mode 100644 index 0000000000..d3b3226619 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + border="true" + follows="top|left" + height="510" + help_topic="panel_region_experience_tab" + label="Experience" + layout="topleft" + left="0" + name="Experience" + top="320" + width="530"> + + +</panel> -- cgit v1.2.3 From d74119ec2bf5d98adce52291a2f82c1fed0aee30 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 4 Feb 2014 15:54:41 -0800 Subject: Added an experience tab to the region floater --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloaterexperiencepicker.cpp | 129 ++++++++++++- indra/newview/llfloaterexperiencepicker.h | 25 ++- indra/newview/llfloaterregioninfo.cpp | 162 ++++++++++++++++ indra/newview/llfloaterregioninfo.h | 31 +++ indra/newview/llpanelexperiencelisteditor.cpp | 213 +++++++++++++++++++++ indra/newview/llpanelexperiencelisteditor.h | 96 ++++++++++ indra/newview/llviewerregion.cpp | 1 + .../default/xui/en/floater_experience_search.xml | 2 +- .../xui/en/panel_experience_list_editor.xml | 63 ++++++ .../default/xui/en/panel_region_experiences.xml | 74 ++++++- 11 files changed, 780 insertions(+), 18 deletions(-) create mode 100644 indra/newview/llpanelexperiencelisteditor.cpp create mode 100644 indra/newview/llpanelexperiencelisteditor.h create mode 100644 indra/newview/skins/default/xui/en/panel_experience_list_editor.xml (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 09746f4b2c..621413a729 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -403,6 +403,7 @@ set(viewer_SOURCE_FILES llpanelclassified.cpp llpanelcontents.cpp llpaneleditwearable.cpp + llpanelexperiencelisteditor.cpp llpanelexperiences.cpp llpanelface.cpp llpanelgenerictip.cpp @@ -989,6 +990,7 @@ set(viewer_HEADER_FILES llpanelclassified.h llpanelcontents.h llpaneleditwearable.h + llpanelexperiencelisteditor.h llpanelexperiences.h llpanelface.h llpanelgenerictip.h diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index 6d0ceedb0d..fd2cb31ee4 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -40,6 +40,8 @@ #include "llavatarnamecache.h" #include "llfloaterexperienceprofile.h" #include "llcombobox.h" +#include "llviewercontrol.h" +#include "lldraghandle.h" #define BTN_FIND "find" #define BTN_OK "ok_btn" @@ -80,7 +82,7 @@ public: } } }; -LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect ) +LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect, LLView * frustumOrigin ) { LLFloaterExperiencePicker* floater = LLFloaterReg::showTypedInstance<LLFloaterExperiencePicker>("experience_search", key); @@ -93,14 +95,91 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca floater->mSelectionCallback = callback; floater->mCloseOnSelect = closeOnSelect; floater->setAllowMultiple(allow_multiple); + + if(frustumOrigin) + { + floater->mFrustumOrigin = frustumOrigin->getHandle(); + } + return floater; } +void LLFloaterExperiencePicker::drawFrustum() +{ + if(mFrustumOrigin.get()) + { + LLView * frustumOrigin = mFrustumOrigin.get(); + LLRect origin_rect; + frustumOrigin->localRectToOtherView(frustumOrigin->getLocalRect(), &origin_rect, this); + // draw context cone connecting color picker with color swatch in parent floater + LLRect local_rect = getLocalRect(); + if (hasFocus() && frustumOrigin->isInVisibleChain() && mContextConeOpacity > 0.001f) + { + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + LLGLEnable(GL_CULL_FACE); + gGL.begin(LLRender::QUADS); + { + gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity); + gGL.vertex2i(origin_rect.mLeft, origin_rect.mTop); + gGL.vertex2i(origin_rect.mRight, origin_rect.mTop); + gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity); + gGL.vertex2i(local_rect.mRight, local_rect.mTop); + gGL.vertex2i(local_rect.mLeft, local_rect.mTop); + + gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity); + gGL.vertex2i(local_rect.mLeft, local_rect.mTop); + gGL.vertex2i(local_rect.mLeft, local_rect.mBottom); + gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity); + gGL.vertex2i(origin_rect.mLeft, origin_rect.mBottom); + gGL.vertex2i(origin_rect.mLeft, origin_rect.mTop); + + gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity); + gGL.vertex2i(local_rect.mRight, local_rect.mBottom); + gGL.vertex2i(local_rect.mRight, local_rect.mTop); + gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity); + gGL.vertex2i(origin_rect.mRight, origin_rect.mTop); + gGL.vertex2i(origin_rect.mRight, origin_rect.mBottom); + + gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity); + gGL.vertex2i(local_rect.mLeft, local_rect.mBottom); + gGL.vertex2i(local_rect.mRight, local_rect.mBottom); + gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity); + gGL.vertex2i(origin_rect.mRight, origin_rect.mBottom); + gGL.vertex2i(origin_rect.mLeft, origin_rect.mBottom); + } + gGL.end(); + } + + if (gFocusMgr.childHasMouseCapture(getDragHandle())) + { + mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(mContextConeFadeTime)); + } + else + { + mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(mContextConeFadeTime)); + } + } +} + +void LLFloaterExperiencePicker::draw() +{ + drawFrustum(); + LLFloater::draw(); +} + LLFloaterExperiencePicker::LLFloaterExperiencePicker( const LLSD& key ) :LLFloater(key) + ,mContextConeOpacity (0.f) + ,mContextConeInAlpha(0.f) + ,mContextConeOutAlpha(0.f) + ,mContextConeFadeTime(0.f) { + setDefaultFilters(); + mContextConeInAlpha = gSavedSettings.getF32("ContextConeInAlpha"); + mContextConeOutAlpha = gSavedSettings.getF32("ContextConeOutAlpha"); + mContextConeFadeTime = gSavedSettings.getF32("ContextConeFadeTime"); } LLFloaterExperiencePicker::~LLFloaterExperiencePicker() @@ -219,7 +298,8 @@ void LLFloaterExperiencePicker::find() bool LLFloaterExperiencePicker::isSelectButtonEnabled() { - return getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelectedIndex() >=0; + LLScrollListCtrl* list=getChild<LLScrollListCtrl>(LIST_RESULTS); + return list->getFirstSelectedIndex() >=0; } void LLFloaterExperiencePicker::getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ) @@ -306,17 +386,15 @@ void LLFloaterExperiencePicker::filterContent() search_results->deleteAllItems(); - int maturity = getChild<LLComboBox>(TEXT_MATURITY)->getSelectedValue().asInteger(); LLSD item; LLSD::array_const_iterator it = experiences.beginArray(); for ( ; it != experiences.endArray(); ++it) { const LLSD& experience = *it; - if(experience[LLExperienceCache::MATURITY].asInteger() > maturity) + if(isExperienceHidden(experience)) continue; - item["id"]=experience[LLExperienceCache::EXPERIENCE_ID]; LLSD& columns = item["columns"]; columns[0]["column"] = "maturity"; @@ -335,11 +413,7 @@ void LLFloaterExperiencePicker::filterContent() { LLStringUtil::format_map_t map; map["[TEXT]"] = childGetText(TEXT_EDIT); - LLSD item; - item["id"] = LLUUID::null; - item["columns"][1]["column"] = "name"; - item["columns"][1]["value"] = columnSpace+getString("not_found", map); - search_results->addElement(item); + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map)); search_results->setEnabled(false); getChildView(BTN_OK)->setEnabled(false); getChildView(BTN_PROFILE)->setEnabled(false); @@ -364,6 +438,41 @@ void LLFloaterExperiencePicker::onMaturity() filterContent(); } +bool LLFloaterExperiencePicker::isExperienceHidden( const LLSD& experience) const +{ + bool hide=false; + filter_list::const_iterator it = mFilters.begin(); + for(/**/;it != mFilters.end(); ++it) + { + if((*it)(experience)){ + return true; + } + } + + return hide; +} + +bool LLFloaterExperiencePicker::FilterOverRating( const LLSD& experience ) +{ + int maturity = getChild<LLComboBox>(TEXT_MATURITY)->getSelectedValue().asInteger(); + return experience[LLExperienceCache::MATURITY].asInteger() > maturity; +} + +bool LLFloaterExperiencePicker::FilterWithProperty( const LLSD& experience, S32 prop ) +{ + return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0; +} + +void LLFloaterExperiencePicker::setDefaultFilters() +{ + mFilters.clear(); + addFilter(boost::bind(&LLFloaterExperiencePicker::FilterOverRating, this, _1)); +} + + + + + diff --git a/indra/newview/llfloaterexperiencepicker.h b/indra/newview/llfloaterexperiencepicker.h index 72085b8b32..7f2083c6d9 100644 --- a/indra/newview/llfloaterexperiencepicker.h +++ b/indra/newview/llfloaterexperiencepicker.h @@ -40,15 +40,26 @@ public: // The callback function will be called with an avatar name and UUID. typedef boost::function<void (const uuid_vec_t&)> select_callback_t; + // filter function for experiences, return true if the experience should be hidden. + typedef boost::function<bool (const LLSD&)> filter_function; + typedef std::vector<filter_function> filter_list; - static LLFloaterExperiencePicker* show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect ); + static LLFloaterExperiencePicker* show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect, LLView * frustumOrigin); LLFloaterExperiencePicker(const LLSD& key); virtual ~LLFloaterExperiencePicker(); BOOL postBuild(); + void addFilter(filter_function func){mFilters.push_back(func);} + template <class IT> + void addFilters(IT begin, IT end){mFilters.insert(mFilters.end(), begin, end);} + void setDefaultFilters(); + static bool FilterWithProperty(const LLSD& experience, S32 prop); + bool FilterOverRating(const LLSD& experience); + + virtual void draw(); private: void editKeystroke(LLLineEditor* caller, void* user_data); @@ -68,13 +79,23 @@ private: void processResponse( const LLUUID& query_id, const LLSD& content ); void filterContent(); + bool isExperienceHidden(const LLSD& experience) const ; std::string getMaturityString(int maturity); select_callback_t mSelectionCallback; - bool mCloseOnSelect; + filter_list mFilters; LLUUID mQueryID; LLSD mResponse; + bool mCloseOnSelect; + + + void drawFrustum(); + LLHandle <LLView> mFrustumOrigin; + F32 mContextConeOpacity; + F32 mContextConeInAlpha; + F32 mContextConeOutAlpha; + F32 mContextConeFadeTime; }; #endif // LL_LLFLOATEREXPERIENCEPICKER_H diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 66bf49331b..edaca68da3 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -91,6 +91,10 @@ #include "lltrans.h" #include "llagentui.h" #include "llmeshrepository.h" +#include "llpanelexperiencelisteditor.h" +#include <boost/function.hpp> +#include "llfloaterexperiencepicker.h" +#include "llexperiencecache.h" const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; @@ -214,6 +218,14 @@ BOOL LLFloaterRegionInfo::postBuild() panel->buildFromFile("panel_region_debug.xml"); mTab->addTabPanel(panel); + if(!gAgent.getRegion()->getCapability("RegionExperiences").empty()) + { + panel = new LLPanelRegionExperiences; + mInfoPanels.push_back(panel); + panel->buildFromFile("panel_region_experiences.xml"); + mTab->addTabPanel(panel); + } + gMessageSystem->setHandlerFunc( "EstateOwnerMessage", &processEstateOwnerRequest); @@ -3463,3 +3475,153 @@ void LLPanelEnvironmentInfo::onRegionSettingsApplied(bool ok) LLEnvManagerNew::instance().requestRegionSettings(); } } + +BOOL LLPanelRegionExperiences::postBuild() +{ + mAllowed = setupList("panel_allowed"); + mTrusted = setupList("panel_trusted"); + mBlocked = setupList("panel_blocked"); + return LLPanelRegionInfo::postBuild(); +} + +LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* control_name ) +{ + LLPanelExperienceListEditor* child = findChild<LLPanelExperienceListEditor>(control_name); + child->getChild<LLTextBox>("text_name")->setText(getString(control_name)); + + return child; +} + + + + +boost::signals2::connection LLPanelRegionExperiences::processResponse( LLPanelExperienceListEditor* panel, boost::signals2::connection& conn, const LLSD& content ) +{ + if(conn.connected()) + { + conn.disconnect(); + } + panel->setExperienceIds(content); + + return panel->setChangedCallback(boost::bind(&LLPanelRegionExperiences::listChanged, this)); +} + + + +void LLPanelRegionExperiences::processResponse( const LLSD& content ) +{ + mAllowedConnection=processResponse(mAllowed, mAllowedConnection, content["allowed"]); + mBlockedConnection=processResponse(mBlocked, mBlockedConnection, content["blocked"]); + mTrustedConnection=processResponse(mTrusted, mTrustedConnection, content["trusted"]); + disableButton("apply_btn"); +} + + +class LLRegionExperienceResponder : public LLHTTPClient::Responder +{ +public: + typedef boost::function<void (const LLSD&)> callback_t; + + callback_t mCallback; + + LLRegionExperienceResponder(callback_t callback) : mCallback(callback) { } + + void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + mCallback(content); + } + else + { + llwarns << "experience responder failed [status:" << status << "]: " << content << llendl; + } + } +}; + + +void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content) +{ + + if(handle.isDead()) + return; + + LLPanelRegionExperiences* floater = handle.get(); + if (floater) + { + floater->processResponse(content); + } +} + + +bool LLPanelRegionExperiences::FilterExisting(const LLSD& experience) +{ + LLUUID id = experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); + return mAllowed->getExperienceIds().find(id) != mAllowed->getExperienceIds().end() || + mBlocked->getExperienceIds().find(id) != mBlocked->getExperienceIds().end() || + mTrusted->getExperienceIds().find(id) != mTrusted->getExperienceIds().end() ; +} + + +bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) +{ + BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); + + mAllowed->loading(); + mAllowed->setReadonly(!allow_modify); + mAllowed->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); + mAllowed->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); + + mBlocked->loading(); + mBlocked->setReadonly(!allow_modify); + mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); + mBlocked->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); + + mTrusted->loading(); + mTrusted->setReadonly(!allow_modify); + mTrusted->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); + + std::string url = region->getCapability("RegionExperiences"); + if (!url.empty()) + { + LLHTTPClient::get(url, new LLRegionExperienceResponder(boost::bind(&LLPanelRegionExperiences::infoCallback, + getDerivedHandle<LLPanelRegionExperiences>(), _1))); + } + return LLPanelRegionInfo::refreshFromRegion(region); +} + +LLSD LLPanelRegionExperiences::addIds(LLPanelExperienceListEditor* panel) +{ + LLSD ids; + const uuid_list_t& id_list = panel->getExperienceIds(); + for(uuid_list_t::const_iterator it = id_list.begin(); it != id_list.end(); ++it) + { + ids.append(*it); + } + return ids; +} + + +BOOL LLPanelRegionExperiences::sendUpdate() +{ + LLViewerRegion* region = gAgent.getRegion(); + std::string url = region->getCapability("RegionExperiences"); + if (!url.empty()) + { + LLSD content; + + content["allowed"]=addIds(mAllowed); + content["blocked"]=addIds(mBlocked); + content["trusted"]=addIds(mTrusted); + + LLHTTPClient::post(url, content, new LLRegionExperienceResponder(boost::bind(&LLPanelRegionExperiences::infoCallback, + getDerivedHandle<LLPanelRegionExperiences>(), _1))); + } + + return TRUE; +} + +void LLPanelRegionExperiences::listChanged() +{ + onChangeAnything(); +} diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index f0499f1903..ccd42f9764 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -60,6 +60,7 @@ class LLPanelRegionDebugInfo; class LLPanelRegionTerrainInfo; class LLPanelEstateInfo; class LLPanelEstateCovenant; +class LLPanelExperienceListEditor; class LLEventTimer; class LLEnvironmentSettings; @@ -450,4 +451,34 @@ private: LLComboBox* mDayCyclePresetCombo; }; +class LLPanelRegionExperiences : public LLPanelRegionInfo +{ + LOG_CLASS(LLPanelEnvironmentInfo); + +public: + LLPanelRegionExperiences(){} + /*virtual*/ BOOL postBuild(); + virtual BOOL sendUpdate(); + + static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content); + + void listChanged(); + bool refreshFromRegion(LLViewerRegion* region); +private: + void processResponse( const LLSD& content ); + boost::signals2::connection processResponse( LLPanelExperienceListEditor* panel, boost::signals2::connection& connection, const LLSD& content); + void refreshRegionExperiences(); + + LLPanelExperienceListEditor* setupList(const char* control_name); + static LLSD addIds( LLPanelExperienceListEditor* panel ); + bool FilterExisting(const LLSD& experience ); + + LLPanelExperienceListEditor* mTrusted; + boost::signals2::connection mTrustedConnection; + LLPanelExperienceListEditor* mAllowed; + boost::signals2::connection mAllowedConnection; + LLPanelExperienceListEditor* mBlocked; + boost::signals2::connection mBlockedConnection; +}; + #endif diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp new file mode 100644 index 0000000000..374f89afad --- /dev/null +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -0,0 +1,213 @@ +/** + * @file llpanelexperiencelisteditor.cpp + * @brief Editor for building a list of experiences + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelexperiencelisteditor.h" + +#include "llbutton.h" +#include "llexperiencecache.h" +#include "llfloaterexperiencepicker.h" +#include "llfloaterreg.h" +#include "llhandle.h" +#include "llscrolllistctrl.h" +#include "llviewerregion.h" +#include "llagent.h" + + +static LLRegisterPanelClassWrapper<LLPanelExperienceListEditor> t_panel_experience_list_editor("panel_experience_list_editor"); + + +LLPanelExperienceListEditor::LLPanelExperienceListEditor() + :mItems(NULL) + ,mProfile(NULL) + ,mRemove(NULL) + ,mChangedCallback(NULL) + ,mReadonly(false) +{ +} + +BOOL LLPanelExperienceListEditor::postBuild() +{ + mItems = getChild<LLScrollListCtrl>("experience_list"); + mAdd = getChild<LLButton>("btn_add"); + mRemove = getChild<LLButton>("btn_remove"); + mProfile = getChild<LLButton>("btn_profile"); + + childSetAction("btn_add", boost::bind(&LLPanelExperienceListEditor::onAdd, this)); + childSetAction("btn_remove", boost::bind(&LLPanelExperienceListEditor::onRemove, this)); + childSetAction("btn_profile", boost::bind(&LLPanelExperienceListEditor::onProfile, this)); + + mItems->setCommitCallback(boost::bind(&LLPanelExperienceListEditor::checkButtonsEnabled, this)); + + checkButtonsEnabled(); + return TRUE; +} + +const uuid_list_t& LLPanelExperienceListEditor::getExperienceIds() const +{ + return mExperienceIds; +} + +void LLPanelExperienceListEditor::addExperienceIds( const uuid_vec_t& experience_ids ) +{ + mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); + onItems(); +} + + +void LLPanelExperienceListEditor::setExperienceIds( const LLSD& experience_ids ) +{ + mExperienceIds.clear(); + mExperienceIds.insert(experience_ids.beginArray(), experience_ids.endArray()); + onItems(); +} + +void LLPanelExperienceListEditor::addExperience( const LLUUID& id ) +{ + mExperienceIds.insert(id); + onItems(); +} +void LLPanelExperienceListEditor::onAdd() +{ + if(!mPicker.isDead()) + { + mPicker.get()->setFrontmost(TRUE); + } + else + { + mKey.generateNewID(); + + LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mAdd); + picker->addFilters(mFilters.begin(), mFilters.end()); + + mPicker = picker->getDerivedHandle<LLFloaterExperiencePicker>(); + } +} + + +void LLPanelExperienceListEditor::onRemove() +{ + std::vector<LLScrollListItem*> items= mItems->getAllSelected(); + std::vector<LLScrollListItem*>::iterator it = items.begin(); + for(/**/; it != items.end(); ++it) + { + if((*it) != NULL) + { + mExperienceIds.erase((*it)->getValue()); + } + } + onItems(); +} + +void LLPanelExperienceListEditor::onProfile() +{ + LLScrollListItem* item = mItems->getFirstSelected(); + if(item) + { + LLFloaterReg::showInstance("experience_profile", item->getUUID(), true); + } +} + +void LLPanelExperienceListEditor::checkButtonsEnabled() +{ + mAdd->setEnabled(!mReadonly); + int selected = mItems->getNumSelected(); + mRemove->setEnabled(!mReadonly && selected>0); + mProfile->setEnabled(selected==1); +} + +void LLPanelExperienceListEditor::onItems() +{ + mItems->deleteAllItems(); + + LLSD item; + uuid_list_t::iterator it = mExperienceIds.begin(); + for(/**/; it != mExperienceIds.end(); ++it) + { + const LLUUID& experience = *it; + item["id"]=experience; + LLSD& columns = item["columns"]; + columns[0]["column"] = "experience_name"; + columns[0]["value"] = getString("loading"); + mItems->addElement(item); + + LLExperienceCache::get(experience, boost::bind(&LLPanelExperienceListEditor::experienceDetailsCallback, + getDerivedHandle<LLPanelExperienceListEditor>(), _1)); + } + + + if(mItems->getItemCount() == 0) + { + mItems->setCommentText(getString("no_results")); + } + + + checkButtonsEnabled(); + if(mChangedCallback) + { + (*mChangedCallback)(); + } +} + +void LLPanelExperienceListEditor::experienceDetailsCallback( LLHandle<LLPanelExperienceListEditor> panel, const LLSD& experience ) +{ + if(!panel.isDead()) + { + panel.get()->onExperienceDetails(experience); + } +} + +void LLPanelExperienceListEditor::onExperienceDetails( const LLSD& experience ) +{ + LLScrollListItem* item = mItems->getItem(experience[LLExperienceCache::EXPERIENCE_ID]); + if(!item) + return; + + item->getColumn(0)->setValue(experience[LLExperienceCache::NAME]); +} + +LLPanelExperienceListEditor::~LLPanelExperienceListEditor() +{ + if(!mPicker.isDead()) + { + mPicker.get()->closeFloater(); + } + delete mChangedCallback; +} + +void LLPanelExperienceListEditor::loading() +{ + mItems->clear(); + mItems->setCommentText( getString("loading")); +} + +void LLPanelExperienceListEditor::setReadonly( bool val ) +{ + mReadonly = val; + setCtrlsEnabled(!mReadonly); + checkButtonsEnabled(); +} diff --git a/indra/newview/llpanelexperiencelisteditor.h b/indra/newview/llpanelexperiencelisteditor.h new file mode 100644 index 0000000000..4135f399ce --- /dev/null +++ b/indra/newview/llpanelexperiencelisteditor.h @@ -0,0 +1,96 @@ +/** +* @file llpanelexperiencelisteditor.cpp +* @brief Editor for building a list of experiences +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, 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_LLPANELEXPERIENCELISTEDITOR_H +#define LL_LLPANELEXPERIENCELISTEDITOR_H + +#include "llpanel.h" +#include "lluuid.h" +#include <set> + +class LLScrollListCtrl; +class LLButton; +class LLFloaterExperiencePicker; + +class LLPanelExperienceListEditor : public LLPanel +{ +public: + + typedef boost::signals2::signal<void () > list_changed_signal_t; + // filter function for experiences, return true if the experience should be hidden. + typedef boost::function<bool (const LLSD&)> filter_function; + typedef std::vector<filter_function> filter_list; + typedef LLHandle<LLFloaterExperiencePicker> PickerHandle; + LLPanelExperienceListEditor(); + ~LLPanelExperienceListEditor(); + BOOL postBuild(); + + void loading(); + + const uuid_list_t& getExperienceIds()const; + void setExperienceIds(const LLSD& experience_ids); + void addExperienceIds(const uuid_vec_t& experience_ids); + + void addExperience(const LLUUID& id); + + boost::signals2::connection setChangedCallback(list_changed_signal_t::slot_type cb ) + { + if (!mChangedCallback) mChangedCallback = new list_changed_signal_t(); + return mChangedCallback->connect(cb); + } + + bool getReadonly() const { return mReadonly; } + void setReadonly(bool val); + + + void addFilter(filter_function func){mFilters.push_back(func);} +private: + + void onItems(); + void onRemove(); + void onAdd(); + void onProfile(); + + void checkButtonsEnabled(); + static void experienceDetailsCallback( LLHandle<LLPanelExperienceListEditor> panel, const LLSD& experience ); + void onExperienceDetails( const LLSD& experience ); + void processResponse( const LLSD& content ); + uuid_list_t mExperienceIds; + + + LLScrollListCtrl* mItems; + filter_list mFilters; + LLButton* mAdd; + LLButton* mRemove; + LLButton* mProfile; + PickerHandle mPicker; + list_changed_signal_t* mChangedCallback; + LLUUID mKey; + bool mReadonly; + +}; + +#endif //LL_LLPANELEXPERIENCELISTEDITOR_H diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index f209f16516..454f83f713 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1609,6 +1609,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("UpdateExperience"); capabilityNames.append("IsExperienceAdmin"); capabilityNames.append("IsExperienceContributor"); + capabilityNames.append("RegionExperiences"); capabilityNames.append("GetMesh"); capabilityNames.append("GetMetadata"); capabilityNames.append("GetObjectCost"); diff --git a/indra/newview/skins/default/xui/en/floater_experience_search.xml b/indra/newview/skins/default/xui/en/floater_experience_search.xml index 4531b52d67..8b44dada40 100644 --- a/indra/newview/skins/default/xui/en/floater_experience_search.xml +++ b/indra/newview/skins/default/xui/en/floater_experience_search.xml @@ -124,7 +124,7 @@ right="-1" height="239" top_pad="4" - follows="all" + follows="all" column_padding="5" can_resize="true" name="search_results"> diff --git a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml new file mode 100644 index 0000000000..acd9471916 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + layout="topleft" + left="0" + top="0" + width="300" + height="100" + min_height="100" + follows="all" + border="true" + name="experince_list_editor"> + <panel.string + name="loading"> + loading... + </panel.string> + <panel.string + name="no_results"> + (empty) + </panel.string> + <text + layout="topleft" + name="text_name" + left="3" + right="-1" + height="12" + follows="left|top|right"> + Experience List + </text> + <scroll_list + draw_heading="false" + left="3" + width="225" + height="77" + follows="all" + can_resize="false" + name="experience_list"> + <columns + width="225" + user_resize="false" + name="experience_name" + label="Name"/> + </scroll_list> + <button + layout="topleft" + follows="top|right" + top_pad="-77" + left_pad="3" + width="65" + name="btn_add" + label="Add..."/> + <button + layout="topleft" + follows="top|right" + width="64" + name="btn_remove" + label="Remove"/> + <button + layout="topleft" + follows="top|right" + width="64" + name="btn_profile" + label="Profile..."/> +</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 d3b3226619..f4d38c0e08 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -2,14 +2,78 @@ <panel border="true" follows="top|left" - height="510" + height="320" help_topic="panel_region_experience_tab" - label="Experience" + label="Experiences" + name="Experiences" layout="topleft" left="0" - name="Experience" top="320" - width="530"> - + width="480"> + <panel.string + name="panel_allowed"> + Allowed Experiences + </panel.string> + <panel.string + name="panel_blocked"> + Blocked Experiences + </panel.string> + <panel.string + name="panel_trusted"> + Trusted Experiences + </panel.string> + <layout_stack + left="5" + layout="topleft" + follows="all" + top="100" + right="-5" + height="140" + min_height="140" + orientation="vertical"> + <layout_panel + height="100" + min_height="100" + width="530"> + <panel follows="all" + width="530" + name="panel_trusted" + class="panel_experience_list_editor" + filename="panel_experience_list_editor.xml" /> + </layout_panel> + <layout_panel + height="100" + min_height="100" + width="530"> + <panel + label="SOME LABEL" + width="530" + name="panel_allowed" + class="panel_experience_list_editor" + filename="panel_experience_list_editor.xml"/> + </layout_panel> + <layout_panel + height="100" + min_height="100" + width="530"> + <panel + width="530" + name="panel_blocked" + class="panel_experience_list_editor" + filename="panel_experience_list_editor.xml"/> + </layout_panel> + <layout_panel + height="30" + min_height="30" + max_height="30" + width="530"> + <button + layout="topleft" + width="85" + left="3" + label="Apply" + name="apply_btn"/> + </layout_panel> + </layout_stack> </panel> -- cgit v1.2.3 From 222337807d6cdf1a4c5cc792b5178f8550e0f24e Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 4 Feb 2014 17:00:03 -0800 Subject: Remove linden experiences from the blocked list. --- indra/newview/llfloaterexperiencepicker.cpp | 7 ++++++- indra/newview/llfloaterexperiencepicker.h | 1 + indra/newview/llfloaterregioninfo.cpp | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index fd2cb31ee4..a1b62648d6 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -458,11 +458,16 @@ bool LLFloaterExperiencePicker::FilterOverRating( const LLSD& experience ) return experience[LLExperienceCache::MATURITY].asInteger() > maturity; } -bool LLFloaterExperiencePicker::FilterWithProperty( const LLSD& experience, S32 prop ) +bool LLFloaterExperiencePicker::FilterWithProperty( const LLSD& experience, S32 prop) { return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0; } +bool LLFloaterExperiencePicker::FilterWithoutProperty( const LLSD& experience, S32 prop ) +{ + return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == 0; +} + void LLFloaterExperiencePicker::setDefaultFilters() { mFilters.clear(); diff --git a/indra/newview/llfloaterexperiencepicker.h b/indra/newview/llfloaterexperiencepicker.h index 7f2083c6d9..ea0240d2ac 100644 --- a/indra/newview/llfloaterexperiencepicker.h +++ b/indra/newview/llfloaterexperiencepicker.h @@ -57,6 +57,7 @@ public: void setDefaultFilters(); static bool FilterWithProperty(const LLSD& experience, S32 prop); + static bool FilterWithoutProperty(const LLSD& experience, S32 prop); bool FilterOverRating(const LLSD& experience); virtual void draw(); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index edaca68da3..e1cfc036ca 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3569,11 +3569,16 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mAllowed->loading(); mAllowed->setReadonly(!allow_modify); + // remove grid-wide experiences mAllowed->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); + // and stuff only in another list mAllowed->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); mBlocked->loading(); mBlocked->setReadonly(!allow_modify); + // only grid-wide experiences + mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); + // but not privileged ones mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); mBlocked->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); -- cgit v1.2.3 From 9f633d9f084dff6af5b3129f19254bb730398250 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 10 Feb 2014 12:11:50 -0800 Subject: Fix hiding of the edit button on non grid-wide experiences. --- indra/newview/llfloaterexperienceprofile.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 4b6ed393b5..1843d2eb8b 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -509,7 +509,6 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) enable = getChild<LLCheckBoxCtrl>(EDIT BTN_PRIVATE); enable->set(properties & LLExperienceCache::PROPERTY_PRIVATE); - if(properties & LLExperienceCache::PROPERTY_GRID) { topPanel->setVisible(TRUE); @@ -518,6 +517,10 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) child->setText(LLTrans::getString("GRID_WIDE")); } + if(getChild<LLButton>(BTN_EDIT)->getVisible()) + { + topPanel->setVisible(TRUE); + } if(properties & LLExperienceCache::PROPERTY_PRIVILEGED) { -- cgit v1.2.3 From 8b690a3fdfb24aea23150031768e0734043195aa Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 11 Feb 2014 15:25:00 -0800 Subject: Updated message for TeleportedHomeExperienceRemoved --- indra/newview/llviewermessage.cpp | 1 - indra/newview/skins/default/xui/en/notifications.xml | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'indra') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d7ec4e0ead..74b9ea466b 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5941,7 +5941,6 @@ bool process_exceptions(std::string notificationID, LLSD& llsdBlock) sStandardExceptions["HomePositionSet"] = handle_home_position_set; - sStandardExceptions["ExperienceMaturityExceeded"] = handle_experience_maturity_exceeded; } standard_exception_map_t::iterator it = sStandardExceptions.find(notificationID); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 0acdf100a4..1afd56cc74 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6987,14 +6987,13 @@ Is this OK? </notification> <notification icon="notify.tga" - name="ExperienceMaturityExceeded" - persist="false" + name="TeleportedHomeExperienceRemoved" + persist="true" type="notify"> -You have declined participation in the following experience which exceeds your content ratings preferences: -[EXPERIENCE_SLURL] + You have been teleported from the [region_name] for removing the experience secondlife:///app/experience/[public_id]/profile and are no longer permitted in the region. <form name="form"> <ignore name="ignore" - text="Experience declined due to content ratings"/> + text="Kicked from region for removing an experience"/> </form> </notification> <notification -- cgit v1.2.3 From 95523616b89dadd697eb6cfa3a466feadc1e1208 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 26 Feb 2014 13:55:32 -0800 Subject: Updated purchase UI for experiences. --- indra/newview/llfloaterregioninfo.cpp | 58 +++++++++++++++++++++- indra/newview/llfloaterregioninfo.h | 7 ++- indra/newview/llviewerregion.cpp | 1 + .../default/xui/en/panel_region_experiences.xml | 39 +++++++++++++-- 4 files changed, 99 insertions(+), 6 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index b7f66a2c0b..43f0ba10a1 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -96,6 +96,7 @@ #include <boost/function.hpp> #include "llfloaterexperiencepicker.h" #include "llexperiencecache.h" +#include "llpanelexperiences.h" const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; @@ -3482,13 +3483,20 @@ 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(); } LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* control_name ) { LLPanelExperienceListEditor* child = findChild<LLPanelExperienceListEditor>(control_name); - child->getChild<LLTextBox>("text_name")->setText(getString(control_name)); + if(child) + { + child->getChild<LLTextBox>("text_name")->setText(getString(control_name)); + } return child; } @@ -3552,6 +3560,23 @@ 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"]); + } } @@ -3587,7 +3612,18 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mTrusted->setReadonly(!allow_modify); mTrusted->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); - std::string url = region->getCapability("RegionExperiences"); + 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"); if (!url.empty()) { LLHTTPClient::get(url, new LLRegionExperienceResponder(boost::bind(&LLPanelRegionExperiences::infoCallback, @@ -3631,3 +3667,21 @@ 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 ccd42f9764..066a5c5da9 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -61,6 +61,7 @@ class LLPanelRegionTerrainInfo; class LLPanelEstateInfo; class LLPanelEstateCovenant; class LLPanelExperienceListEditor; +class LLPanelExperiences; class LLEventTimer; class LLEnvironmentSettings; @@ -461,10 +462,12 @@ public: virtual BOOL sendUpdate(); static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content); - void listChanged(); 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(); @@ -473,6 +476,8 @@ private: static LLSD addIds( LLPanelExperienceListEditor* panel ); bool FilterExisting(const LLSD& experience ); + + LLPanelExperiences* mOwned; LLPanelExperienceListEditor* mTrusted; boost::signals2::connection mTrustedConnection; LLPanelExperienceListEditor* mAllowed; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 454f83f713..28fa93c442 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1601,6 +1601,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("GetDisplayNames"); capabilityNames.append("GetExperiences"); + capabilityNames.append("AgentExperiences"); capabilityNames.append("FindExperienceByName"); capabilityNames.append("GetExperienceInfo"); capabilityNames.append("GetAdminExperiences"); 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 f4d38c0e08..ee908348a3 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel border="true" - follows="top|left" + follows="all" height="320" help_topic="panel_region_experience_tab" label="Experiences" @@ -27,11 +27,44 @@ left="5" layout="topleft" follows="all" - top="100" + top="0" right="-5" - height="140" + 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" -- cgit v1.2.3 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') 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 From 49f08d775d3644bb47d342f8e37dd15051aeaa62 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 28 Feb 2014 16:21:42 -0800 Subject: Add group editing for experiences --- indra/newview/llfloaterexperiencepicker.cpp | 12 ++++-- indra/newview/llfloaterexperienceprofile.cpp | 42 +++++++++++++++++--- indra/newview/llfloaterexperienceprofile.h | 5 ++- indra/newview/llfloaterexperiences.cpp | 13 ++++++- .../default/xui/en/floater_experienceprofile.xml | 45 +++++++++++++++------- .../newview/skins/default/xui/en/notifications.xml | 21 ++++++++-- 6 files changed, 110 insertions(+), 28 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index a1b62648d6..be53f2e12c 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -245,12 +245,16 @@ void LLFloaterExperiencePicker::onBtnSelect() getSelectedExperienceIds(results, experience_ids); mSelectionCallback(experience_ids); + getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE); + if(mCloseOnSelect) + { + mCloseOnSelect = FALSE; + closeFloater(); + } } - getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE); - if(mCloseOnSelect) + else { - mCloseOnSelect = FALSE; - closeFloater(); + onBtnProfile(); } } diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 1843d2eb8b..fd0f7aee1d 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -48,6 +48,7 @@ #include "lltrans.h" #include "llviewerregion.h" #include "llevents.h" +#include "llfloatergroups.h" #define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" #define TF_NAME "experience_title" @@ -81,6 +82,7 @@ #define BTN_PRIVATE "private_btn" #define BTN_SET_LOCATION "location_btn" #define BTN_CLEAR_LOCATION "clear_btn" +#define BTN_SET_GROUP "Group_btn" @@ -304,10 +306,10 @@ BOOL LLFloaterExperienceProfile::postBuild() 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)); - childSetAction(BTN_SET_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickLocation, this)); - childSetAction(BTN_CLEAR_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickClear, this)); - + childSetAction(BTN_SAVE, boost::bind(&LLFloaterExperienceProfile::onClickSave, this)); + childSetAction(BTN_SET_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickLocation, this)); + childSetAction(BTN_CLEAR_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickClear, this)); + childSetAction(BTN_SET_GROUP, boost::bind(&LLFloaterExperienceProfile::onPickGroup, this)); getChild<LLTextEditor>(EDIT TF_DESC)->setKeystrokeCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); getChild<LLUICtrl>(EDIT TF_MATURITY)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); @@ -498,10 +500,15 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) id = experience[LLExperienceCache::GROUP_ID].asUUID(); + bool id_null = id.isNull(); child = getChild<LLTextBox>(TF_GROUP); value = LLSLURL("group", id, "inspect").getSLURLString(); child->setText(value); - getChild<LLLayoutPanel>(PNL_GROUP)->setVisible(id.notNull()); + getChild<LLLayoutPanel>(PNL_GROUP)->setVisible(!id_null); + + setEditGroup(id); + + getChild<LLButton>(BTN_SET_GROUP)->setEnabled(experience[LLExperienceCache::AGENT_ID].asUUID() == gAgent->getID()); LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE); S32 properties = mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger(); @@ -916,3 +923,28 @@ void LLFloaterExperienceProfile::updatePackage() mPackage[LLExperienceCache::PROPERTIES] = properties; } + +void LLFloaterExperienceProfile::onPickGroup() +{ + LLFloater* parent_floater = gFloaterView->getParentFloater(this); + + LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID())); + if (widget) + { + widget->setSelectGroupCallback(boost::bind(&LLFloaterExperienceProfile::setEditGroup, this, _1)); + if (parent_floater) + { + LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, widget); + widget->setOrigin(new_rect.mLeft, new_rect.mBottom); + parent_floater->addDependentFloater(widget); + } + } +} + +void LLFloaterExperienceProfile::setEditGroup( LLUUID group_id ) +{ + LLTextBox* child = getChild<LLTextBox>(EDIT TF_GROUP); + std::string value = LLSLURL("group", group_id, "inspect").getSLURLString(); + child->setText(value); + mPackage[LLExperienceCache::GROUP_ID] = group_id; +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index 550b3c6f27..5e9fd8f03a 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -68,9 +68,12 @@ protected: void onClickCancel(); void onClickSave(); void onClickLocation(); - void onClickClear(); + void onClickClear(); + void onPickGroup(); void onFieldChanged(); + void setEditGroup(LLUUID group_id); + void changeToView(); void experienceForgotten(); diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 8e860a9ee0..956afe15c3 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -37,6 +37,9 @@ #include "llnotificationsutil.h" + +#define SHOW_RECENT_TAB (0) + class LLExperienceListResponder : public LLHTTPClient::Responder { public: @@ -106,9 +109,11 @@ BOOL LLFloaterExperiences::postBuild() addTab("Blocked_Experiences_Tab", false); 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)); +#if SHOW_RECENT_TAB + addTab("Recent_Experiences_Tab", false); +#endif //SHOW_RECENT_TAB resizeToTabs(); @@ -118,8 +123,10 @@ BOOL LLFloaterExperiences::postBuild() return TRUE; } + void LLFloaterExperiences::clearFromRecent(const LLSD& ids) { +#if SHOW_RECENT_TAB LLTabContainer* tabs = getChild<LLTabContainer>("xp_tabs"); LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName("Recent_Experiences_Tab"); @@ -127,10 +134,12 @@ void LLFloaterExperiences::clearFromRecent(const LLSD& ids) return; tab->removeExperiences(ids); +#endif // SHOW_RECENT_TAB } void LLFloaterExperiences::setupRecentTabs() { +#if SHOW_RECENT_TAB LLTabContainer* tabs = getChild<LLTabContainer>("xp_tabs"); LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName("Recent_Experiences_Tab"); @@ -152,8 +161,10 @@ void LLFloaterExperiences::setupRecentTabs() } tab->setExperienceList(recent); +#endif // SHOW_RECENT_TAB } + void LLFloaterExperiences::resizeToTabs() { const S32 TAB_WIDTH_PADDING = 16; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index 43ff3f07e4..fda84b0d4a 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -72,17 +72,16 @@ <panel bg_alpha_color="DkGray2" follows="top|left|right" - height="480" + height="510" layout="topleft" left="0" - min_height="480" name="scrolling_panel" top="0" width="315" min_width="315"> <layout_stack follows="all" - height="480" + height="510" layout="topleft" left="0" top="0" @@ -421,7 +420,7 @@ <scroll_container color="DkGray2" follows="all" - height="525" + height="520" layout="topleft" left="9" name="edit_xp_scroll" @@ -431,7 +430,7 @@ <panel bg_alpha_color="DkGray2" follows="top|left|right" - height="525" + height="590" layout="topleft" left="0" name="edit_scrolling_panel" @@ -485,6 +484,25 @@ text_color="black" right="-11" word_wrap="true"/> + <button + top_pad="10" + left="10" + width="125" + height="23" + name="Group_btn" + label="Group" + /> + <text + type="string" + length="1" + follows="left|top|right" + height="14" + layout="topleft" + left_pad="10" + top_pad="-18" + use_ellipses="true" + name="edit_GroupText" + right="-10" /> <text top_pad="10" type="string" @@ -565,10 +583,10 @@ top_pad="-14" use_ellipses="true" name="edit_LocationTextText" - right="-10"></text> + right="-10" /> <button left="10" - width="150" + width="125" height="23" name="location_btn" label="Set to Current" @@ -577,9 +595,9 @@ top_pad="-23" follows="top|right" right="-10" - width="80" + width="125" name="clear_btn" - label="Clear"/> + label="Clear Location"/> <text type="string" length="1" @@ -610,10 +628,11 @@ tool_tip="" label="Enable Experience" name="edit_enable_btn"/> - <check_box width="130" + <check_box width="125" height="21" top_pad="-21" right="-10" + visible="false" layout="topleft" follows="top|left|right" label="Hide In Search" @@ -624,7 +643,7 @@ label="Back" layout="topleft" name="cancel_btn" - width="120" + width="125" top_pad="15" left="10" visible="true"/> @@ -635,12 +654,12 @@ layout="topleft" name="save_btn" top_pad="-23" - width="120" + width="125" right="-10" visible="true"/> <text follows="left|top|right" - height="50" + height="25" layout="topleft" left="10" top_pad="10" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 75a7240c9e..0da1e546ee 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6997,20 +6997,33 @@ Unable to acquire a new experience: name="okbutton" yestext="OK"/> </notification> - - - + + + <notification icon="notify.tga" name="TeleportedHomeExperienceRemoved" persist="true" type="notify"> - You have been teleported from the [region_name] for removing the experience secondlife:///app/experience/[public_id]/profile and are no longer permitted in the region. + You have been teleported from the region [region_name] for removing the experience secondlife:///app/experience/[public_id]/profile and are no longer permitted in the region. <form name="form"> <ignore name="ignore" text="Kicked from region for removing an experience"/> </form> </notification> + + <notification + icon="notify.tga" + name="TrustedExperienceEntry" + persist="true" + type="notify"> + You have been allowed into the region [region_name] by participating in the trusted experience secondlife:///app/experience/[public_id]/profile removing this experience may kick you from the region. + <form name="form"> + <ignore name="ignore" + text="Allowed into a region by an experience"/> + </form> + </notification> + <notification icon="notify.tga" name="ScriptQuestionExperience" -- cgit v1.2.3 From 96457e1affe33d75208cabf7529b53eee8e8105b Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 3 Mar 2014 11:28:34 -0800 Subject: Disable the acquire xp button by default. Mark the xp profile dirty when changing the group --- indra/newview/llfloaterexperienceprofile.cpp | 3 ++- indra/newview/llfloaterexperiences.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index fd0f7aee1d..e5574be4f0 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -508,7 +508,7 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) setEditGroup(id); - getChild<LLButton>(BTN_SET_GROUP)->setEnabled(experience[LLExperienceCache::AGENT_ID].asUUID() == gAgent->getID()); + getChild<LLButton>(BTN_SET_GROUP)->setEnabled(experience[LLExperienceCache::AGENT_ID].asUUID() == gAgent.getID()); LLCheckBoxCtrl* enable = getChild<LLCheckBoxCtrl>(EDIT BTN_ENABLE); S32 properties = mExperienceDetails[LLExperienceCache::PROPERTIES].asInteger(); @@ -947,4 +947,5 @@ void LLFloaterExperienceProfile::setEditGroup( LLUUID group_id ) std::string value = LLSLURL("group", group_id, "inspect").getSLURLString(); child->setText(value); mPackage[LLExperienceCache::GROUP_ID] = group_id; + onFieldChanged(); } diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 956afe15c3..f958a988dc 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -111,6 +111,7 @@ BOOL LLFloaterExperiences::postBuild() addTab("Contrib_Experiences_Tab", false); LLPanelExperiences* owned = addTab("Owned_Experiences_Tab", false); owned->setButtonAction("acquire", boost::bind(&LLFloaterExperiences::sendPurchaseRequest, this)); + owned->enableButton(false); #if SHOW_RECENT_TAB addTab("Recent_Experiences_Tab", false); #endif //SHOW_RECENT_TAB -- cgit v1.2.3 From 7b9817cbcc5acab58d9d4355984b429850bd3ef8 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 10 Mar 2014 10:15:19 -0700 Subject: Fixed a bug that lost callbacks if > 10 experiences were looked up at a time. --- indra/llmessage/llexperiencecache.cpp | 19 +++---- indra/newview/llfloaterexperiencepicker.cpp | 5 +- indra/newview/llpreviewscript.cpp | 66 ++++++++++++++-------- indra/newview/llpreviewscript.h | 1 - .../default/xui/en/floater_experienceprofile.xml | 4 +- .../default/xui/en/floater_live_lsleditor.xml | 4 ++ .../newview/skins/default/xui/en/notifications.xml | 4 +- 7 files changed, 64 insertions(+), 39 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 921c1edc2e..5cca918baf 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -415,40 +415,39 @@ namespace LLExperienceCache F64 now = LLFrameTimer::getTotalSeconds(); const U32 EXP_URL_SEND_THRESHOLD = 3000; - + const U32 PAGE_SIZE = EXP_URL_SEND_THRESHOLD/UUID_STR_LENGTH; std::ostringstream ostr; ask_queue_t keys; - ostr << sLookupURL; + ostr << sLookupURL << "?page_size=" << PAGE_SIZE; - char arg='?'; int request_count = 0; - for(ask_queue_t::const_iterator it = sAskQueue.begin() ; it != sAskQueue.end() && request_count < sMaximumLookups; ++it) + while(!sAskQueue.empty() && request_count < sMaximumLookups) { + ask_queue_t::const_iterator it = sAskQueue.begin(); const LLUUID& key = it->first; const std::string& key_type = it->second; - ostr << arg << key_type << '=' << key.asString() ; + ostr << '&' << key_type << '=' << key.asString() ; keys[key]=key_type; request_count++; sPendingQueue[key] = now; - - arg='&'; - + if(ostr.tellp() > EXP_URL_SEND_THRESHOLD) { LL_DEBUGS("ExperienceCache") << "requestExperiences() query: " << ostr.str() << LL_ENDL; LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys)); ostr.clear(); ostr.str(sLookupURL); - arg='?'; + ostr << "?page_size=" << PAGE_SIZE; keys.clear(); } + sAskQueue.erase(it); } if(ostr.tellp() > sLookupURL.size()) @@ -456,8 +455,6 @@ namespace LLExperienceCache LL_DEBUGS("ExperienceCache") << "requestExperiences() query 2: " << ostr.str() << LL_ENDL; LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys)); } - - sAskQueue.clear(); } bool isRequestPending(const LLUUID& public_key) diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index be53f2e12c..b82257ee56 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -439,7 +439,10 @@ void LLFloaterExperiencePicker::filterContent() void LLFloaterExperiencePicker::onMaturity() { - filterContent(); + if(mResponse.has("experience_keys") && mResponse["experience_keys"].beginArray() != mResponse["experience_keys"].endArray()) + { + filterContent(); + } } bool LLFloaterExperiencePicker::isExperienceHidden( const LLSD& experience) const diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index d7d1ed3dfc..e59c1c21f6 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1298,8 +1298,6 @@ void LLLiveLSLEditor::setExperienceIds( const LLSD& experience_ids ) void LLLiveLSLEditor::updateExperiencePanel() { - BOOL editable = getIsModifiable(); - if(mScriptEd->getAssociatedExperience().isNull()) { mExperienceEnabled->set(FALSE); @@ -1317,43 +1315,67 @@ void LLLiveLSLEditor::updateExperiencePanel() getChild<LLButton>("view_profile")->setVisible(FALSE); } else - { - mExperienceEnabled->setToolTip(getString("experience_enabled")); - mExperienceEnabled->setEnabled(editable); - mExperienceEnabled->set(TRUE); - mExperiences->setVisible(TRUE); - getChild<LLButton>("view_profile")->setVisible(TRUE); + { + mExperienceEnabled->setToolTip(getString("experience_enabled")); + mExperienceEnabled->setEnabled(getIsModifiable()); + mExperiences->setVisible(TRUE); buildExperienceList(); } } -void LLLiveLSLEditor::addExperienceInfo(const LLSD& experience, BOOL enabled) -{ - LLUUID id = experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); - EAddPosition position = (id == mScriptEd->getAssociatedExperience())?ADD_TOP:ADD_BOTTOM; - LLScrollListItem* item=mExperiences->add(experience[LLExperienceCache::NAME], id, position ); - if(!enabled) - { - item->setEnabled(FALSE); - } -} - void LLLiveLSLEditor::buildExperienceList() { mExperiences->clearRows(); bool foundAssociated=false; + const LLUUID& associated = mScriptEd->getAssociatedExperience(); + LLSD experience; + LLUUID last; + LLScrollListItem* item; for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it) { LLUUID id = it->asUUID(); - foundAssociated |= (id == mScriptEd->getAssociatedExperience()); - LLExperienceCache::get(id, boost::bind(&LLLiveLSLEditor::addExperienceInfo, this, _1, TRUE)); + EAddPosition position = ADD_BOTTOM; + if(id == associated) + { + foundAssociated = true; + position = ADD_TOP; + } + if(LLExperienceCache::get(id, experience)) + { + mExperiences->add(experience[LLExperienceCache::NAME].asString(), id, position); + } + else + { + mExperiences->add(getString("loading"), id, position); + last = id; + } + } if(!foundAssociated ) { - LLExperienceCache::get(mScriptEd->getAssociatedExperience(), boost::bind(&LLLiveLSLEditor::addExperienceInfo, this, _1, FALSE)); + if(LLExperienceCache::get(associated, experience)) + { + item=mExperiences->add(experience[LLExperienceCache::NAME].asString(), associated, ADD_TOP); + } + else + { + item=mExperiences->add(getString("loading"), associated, ADD_TOP); + last = associated; + } + item->setEnabled(FALSE); } + if(last.notNull()) + { + mExperiences->setEnabled(FALSE); + LLExperienceCache::get(last, boost::bind(&LLLiveLSLEditor::buildExperienceList, this)); + } + else + { + mExperiences->setEnabled(TRUE); + getChild<LLButton>("view_profile")->setVisible(TRUE); + } } diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 29d1443d6c..0264601d83 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -240,7 +240,6 @@ public: static void onToggleExperience(LLUICtrl *ui, void* userdata); static void onViewProfile(LLUICtrl *ui, void* userdata); - void addExperienceInfo( const LLSD& experience, BOOL enabled ); void setExperienceIds(const LLSD& experience_ids); void buildExperienceList(); void updateExperiencePanel(); diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index fda84b0d4a..fa4e6c02db 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -10,7 +10,7 @@ min_width="325" min_height="325" width="358" - height="580"> + height="660"> <floater.string name="empty_slurl"> (none) @@ -42,7 +42,7 @@ <tab_container hide_tabs="true" follows="all" - height="540" + height="620" layout="topleft" left="5" min_height="250" diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index d8c2a753a1..40b47dc1d7 100755 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -37,6 +37,10 @@ name="add_experiences"> Select to add an experience </floater.string> + <floater.string + name="loading"> + Loading... + </floater.string> <panel bevel_style="none" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 0da1e546ee..9482ebb520 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7003,7 +7003,7 @@ Unable to acquire a new experience: <notification icon="notify.tga" name="TeleportedHomeExperienceRemoved" - persist="true" + persist="false" type="notify"> You have been teleported from the region [region_name] for removing the experience secondlife:///app/experience/[public_id]/profile and are no longer permitted in the region. <form name="form"> @@ -7015,7 +7015,7 @@ Unable to acquire a new experience: <notification icon="notify.tga" name="TrustedExperienceEntry" - persist="true" + persist="false" type="notify"> You have been allowed into the region [region_name] by participating in the trusted experience secondlife:///app/experience/[public_id]/profile removing this experience may kick you from the region. <form name="form"> -- cgit v1.2.3 From 9fe5728b4385ead4a4c74eed7917d93060510cdb Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 12 Mar 2014 09:50:08 -0700 Subject: Show ignored items when updating an experience profile --- indra/newview/llfloaterexperienceprofile.cpp | 35 +++++++++++++++++++- indra/newview/llpanelexperiencelisteditor.cpp | 2 +- indra/newview/llpanelexperiences.cpp | 2 +- .../newview/skins/default/xui/en/notifications.xml | 38 ++++++++++++++++++++++ 4 files changed, 74 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index e5574be4f0..1c01a4bb9f 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -49,6 +49,7 @@ #include "llviewerregion.h" #include "llevents.h" #include "llfloatergroups.h" +#include "llnotifications.h" #define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" #define TF_NAME "experience_title" @@ -85,7 +86,6 @@ #define BTN_SET_GROUP "Group_btn" - class LLExperienceHandler : public LLCommandHandler { public: @@ -722,6 +722,10 @@ void LLFloaterExperienceProfile::doSave( int success_action ) std::string url=region->getCapability("UpdateExperience"); if(url.empty()) return; + + mPackage.erase(LLExperienceCache::QUOTA); + mPackage.erase(LLExperienceCache::EXPIRES); + mPackage.erase(LLExperienceCache::AGENT_ID); LLHTTPClient::post(url, mPackage, new ExperienceUpdateResponder(getDerivedHandle<LLFloaterExperienceProfile>())); } @@ -730,6 +734,35 @@ void LLFloaterExperienceProfile::onSaveComplete( const LLSD& content ) { LLUUID id = getExperienceId(); + if(content.has("removed")) + { + const LLSD& removed = content["removed"]; + LLSD::map_const_iterator it = removed.beginMap(); + for(/**/; it != removed.endMap(); ++it) + { + const std::string& field = it->first; + if(field == LLExperienceCache::EXPERIENCE_ID) + { + //this message should be removed by the experience api + continue; + } + const LLSD& data = it->second; + std::string error_tag = data["error_tag"].asString()+ "ExperienceProfileMessage"; + LLSD fields; + if( LLNotifications::instance().getTemplate(error_tag)) + { + fields["field"] = field; + fields["extra_info"] = data["extra_info"]; + LLNotificationsUtil::add(error_tag, fields); + } + else + { + fields["MESSAGE"]=data["en"]; + LLNotificationsUtil::add("GenericAlert", fields); + } + } + } + if(!content.has("experience_keys")) { llwarns << "LLFloaterExperienceProfile::onSaveComplete called with bad content" << llendl; diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 374f89afad..37394936ee 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -38,7 +38,7 @@ #include "llagent.h" -static LLRegisterPanelClassWrapper<LLPanelExperienceListEditor> t_panel_experience_list_editor("panel_experience_list_editor"); +static LLPanelInjector<LLPanelExperienceListEditor> t_panel_experience_list_editor("panel_experience_list_editor"); LLPanelExperienceListEditor::LLPanelExperienceListEditor() diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index f1d6ea09ed..0d67dbf916 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -38,7 +38,7 @@ #include "lllayoutstack.h" -static LLRegisterPanelClassWrapper<LLPanelExperiences> register_experiences_panel("experiences_panel"); +static LLPanelInjector<LLPanelExperiences> register_experiences_panel("experiences_panel"); LLPanelExperiences::LLPanelExperiences( ) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index b7d5940434..e0cc2229d5 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7006,8 +7006,46 @@ Unable to acquire a new experience: yestext="OK"/> </notification> + <notification + icon="notify.tga" + name="NotInGroupExperienceProfileMessage" + persist="false" + type="notify"> + A change to the experience group was ignored because the owner is not a member of the selected group. + </notification> + + <notification + icon="notify.tga" + name="UneditableExperienceProfileMessage" + persist="false" + type="notify"> + The uneditable field '[field]' was ignored when updating the experience profile. + </notification> + + <notification + icon="notify.tga" + name="RestrictedToOwnerExperienceProfileMessage" + persist="false" + type="notify"> + Ignored changes to the field '[field]' which can only be set by the experience owner. + </notification> + <notification + icon="notify.tga" + name="MaturityRatingExceedsOwnerExperienceProfileMessage" + persist="false" + type="notify"> + You may not set the maturity rating of an experience higher than that of the owner. + </notification> + <notification + icon="notify.tga" + name="RestrictedTermExperienceProfileMessage" + persist="false" + type="notify"> + The following terms prevented the update of the experience profile name and/or description: [extra_info] + </notification> + <notification icon="notify.tga" name="TeleportedHomeExperienceRemoved" -- cgit v1.2.3 From a0b8c3e029be9265152cb8919ebe9c2bc328b766 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 12 Mar 2014 11:49:17 -0700 Subject: Windows lets you erase with a const iterator but linux does not. --- indra/llmessage/llexperiencecache.cpp | 19 +------------------ indra/llmessage/llexperiencecache.h | 1 - 2 files changed, 1 insertion(+), 19 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 5cca918baf..648e2039a6 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -84,23 +84,6 @@ namespace LLExperienceCache sPendingQueue.erase(row[EXPERIENCE_ID].asUUID()); } - if(row.has(OWNER_ID)) - { - sPendingQueue.erase(row[OWNER_ID].asUUID()); - } - - if(!row.has(OWNER_ID)) - { - if(row.has(AGENT_ID) && row[AGENT_ID].asUUID().notNull()) - { - row[OWNER_ID]=row[AGENT_ID]; - } - else - { - row[OWNER_ID]=row[GROUP_ID]; - } - } - //signal signal_map_t::iterator sig_it = sSignalMap.find(public_key); if (sig_it != sSignalMap.end()) @@ -427,7 +410,7 @@ namespace LLExperienceCache int request_count = 0; while(!sAskQueue.empty() && request_count < sMaximumLookups) { - ask_queue_t::const_iterator it = sAskQueue.begin(); + ask_queue_t::iterator it = sAskQueue.begin(); const LLUUID& key = it->first; const std::string& key_type = it->second; diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index 8b3443e5a9..e6129796b7 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -45,7 +45,6 @@ namespace LLExperienceCache const std::string AGENT_ID = "agent_id"; const std::string GROUP_ID = "group_id"; const std::string EXPERIENCE_ID = "public_id"; - const std::string OWNER_ID = "owner_id"; const std::string NAME = "name"; const std::string PROPERTIES = "properties"; const std::string EXPIRES = "expiration"; -- cgit v1.2.3 From e10ae3ba960cf030582378c454937dd326fcd436 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 13 Mar 2014 15:10:51 -0700 Subject: Added a Report Abuse button to the experience profile --- indra/newview/llfloaterexperienceprofile.cpp | 18 ++++++++--- indra/newview/llfloaterexperienceprofile.h | 3 +- indra/newview/llfloaterreporter.cpp | 37 ++++++++++++++++++++++ indra/newview/llfloaterreporter.h | 3 ++ .../default/xui/en/floater_experienceprofile.xml | 35 +++++++++++++------- 5 files changed, 78 insertions(+), 18 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 1c01a4bb9f..f8b4978a3d 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -50,6 +50,7 @@ #include "llevents.h" #include "llfloatergroups.h" #include "llnotifications.h" +#include "llfloaterreporter.h" #define XML_PANEL_EXPERIENCE_PROFILE "floater_experienceprofile.xml" #define TF_NAME "experience_title" @@ -73,17 +74,18 @@ #define PNL_GROUP "group_panel" #define PNL_PERMS "perm panel" -#define BTN_EDIT "edit_btn" #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_CLEAR_LOCATION "clear_btn" +#define BTN_EDIT "edit_btn" #define BTN_ENABLE "enable_btn" +#define BTN_FORGET "forget_btn" #define BTN_PRIVATE "private_btn" -#define BTN_SET_LOCATION "location_btn" -#define BTN_CLEAR_LOCATION "clear_btn" +#define BTN_REPORT "report_btn" +#define BTN_SAVE "save_btn" #define BTN_SET_GROUP "Group_btn" +#define BTN_SET_LOCATION "location_btn" class LLExperienceHandler : public LLCommandHandler @@ -310,6 +312,7 @@ BOOL LLFloaterExperienceProfile::postBuild() childSetAction(BTN_SET_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickLocation, this)); childSetAction(BTN_CLEAR_LOCATION, boost::bind(&LLFloaterExperienceProfile::onClickClear, this)); childSetAction(BTN_SET_GROUP, boost::bind(&LLFloaterExperienceProfile::onPickGroup, this)); + childSetAction(BTN_REPORT, boost::bind(&LLFloaterExperienceProfile::onReportExperience, this)); getChild<LLTextEditor>(EDIT TF_DESC)->setKeystrokeCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); getChild<LLUICtrl>(EDIT TF_MATURITY)->setCommitCallback(boost::bind(&LLFloaterExperienceProfile::onFieldChanged, this)); @@ -982,3 +985,8 @@ void LLFloaterExperienceProfile::setEditGroup( LLUUID group_id ) mPackage[LLExperienceCache::GROUP_ID] = group_id; onFieldChanged(); } + +void LLFloaterExperienceProfile::onReportExperience() +{ + LLFloaterReporter::showFromExperience(mExperienceId); +} diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index 5e9fd8f03a..b66df49a8a 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -70,7 +70,8 @@ protected: void onClickLocation(); void onClickClear(); void onPickGroup(); - void onFieldChanged(); + void onFieldChanged(); + void onReportExperience(); void setEditGroup(LLUUID group_id); diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 35b63c5480..1b9fc8c6d0 100755 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -81,6 +81,7 @@ #include "llagentui.h" #include "lltrans.h" +#include "llexperiencecache.h" const U32 INCLUDE_SCREENSHOT = 0x01 << 0; @@ -227,6 +228,28 @@ void LLFloaterReporter::enableControls(BOOL enable) getChildView("cancel_btn")->setEnabled(enable); } +void LLFloaterReporter::getExperienceInfo(const LLUUID& experience_id) +{ + mExperienceID = experience_id; + + if (LLUUID::null != mExperienceID) + { + LLSD experience; + stringstream desc; + if(LLExperienceCache::get(mExperienceID, experience)){ + setFromAvatarID(experience[LLExperienceCache::AGENT_ID]); + desc << "\nExperience id: " << mExperienceID; + } + else + { + desc << "Unable to retrieve details for id: "<< mExperienceID; + } + + LLUICtrl* details = getChild<LLUICtrl>("details_edit"); + details->setValue(desc.str()); + } +} + void LLFloaterReporter::getObjectInfo(const LLUUID& object_id) { // TODO -- @@ -493,6 +516,19 @@ void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_ } + +void LLFloaterReporter::showFromExperience( const LLUUID& experience_id ) +{ + LLFloaterReporter* f = LLFloaterReg::showTypedInstance<LLFloaterReporter>("reporter"); + f->getExperienceInfo(experience_id); + + // Need to deselect on close + f->mDeselectOnClose = TRUE; + + f->openFloater(); +} + + // static void LLFloaterReporter::showFromObject(const LLUUID& object_id) { @@ -854,6 +890,7 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos) getChild<LLUICtrl>("pos_field")->setValue(pos_string); } + // void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd) // { // LLFloaterReporter *self = LLFloaterReg::findTypedInstance<LLFloaterReporter>("reporter"); diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h index d54e7f6ab0..de3aa9ca5e 100755 --- a/indra/newview/llfloaterreporter.h +++ b/indra/newview/llfloaterreporter.h @@ -90,6 +90,7 @@ public: static void showFromObject(const LLUUID& object_id); static void showFromAvatar(const LLUUID& avatar_id, const std::string avatar_name); + static void showFromExperience(const LLUUID& experience_id); static void onClickSend (void *userdata); static void onClickCancel (void *userdata); @@ -118,6 +119,7 @@ private: void sendReportViaCaps(std::string url, std::string sshot_url, const LLSD & report); void setPosBox(const LLVector3d &pos); void enableControls(BOOL own_avatar); + void getExperienceInfo(const LLUUID& object_id); void getObjectInfo(const LLUUID& object_id); void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names); void setFromAvatarID(const LLUUID& avatar_id); @@ -128,6 +130,7 @@ private: LLUUID mObjectID; LLUUID mScreenID; LLUUID mAbuserID; + LLUUID mExperienceID; // Store the real name, not the link, for upstream reporting std::string mOwnerName; BOOL mDeselectOnClose; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index fa4e6c02db..67a7d5dad0 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -10,7 +10,7 @@ min_width="325" min_height="325" width="358" - height="660"> + height="650"> <floater.string name="empty_slurl"> (none) @@ -42,7 +42,7 @@ <tab_container hide_tabs="true" follows="all" - height="620" + height="615" layout="topleft" left="5" min_height="250" @@ -52,7 +52,7 @@ <panel background_visible="true" follows="all" - height="550" + height="540" layout="topleft" left="0" min_height="250" @@ -62,7 +62,7 @@ <scroll_container color="DkGray2" follows="all" - height="532" + height="520" layout="topleft" left="9" name="xp_scroll" @@ -72,7 +72,7 @@ <panel bg_alpha_color="DkGray2" follows="top|left|right" - height="510" + height="550" layout="topleft" left="0" name="scrolling_panel" @@ -81,9 +81,10 @@ min_width="315"> <layout_stack follows="all" - height="510" + height="550" layout="topleft" left="0" + animate="false" top="0" orientation="vertical" width="315"> @@ -352,7 +353,7 @@ </layout_panel> <layout_panel follows="all" - height="49" + height="75" layout="topleft" left="0" top="5" @@ -366,7 +367,7 @@ label="Allow" layout="topleft" name="allow_btn" - width="80" + width="94" top_pad="3" left="10" enabled="false"/> @@ -376,7 +377,7 @@ label="Forget" layout="topleft" name="forget_btn" - width="80" + width="94" top_pad="-23" left_pad="3" enabled="false"/> @@ -386,23 +387,33 @@ label="Block" layout="topleft" name="block_btn" - width="80" + width="94" top_pad="-23" left_pad="3" enabled="false"/> <text type="string" + halign="center" length="1" follows="left|top|right" height="16" layout="topleft" left="10" name="privileged" - use_ellipses="true" visible="false" - right ="-10"> + width="288"> This experience is enabled for all residents. </text> + <button + follows="bottom|left" + height="23" + label="Report Abuse" + layout="topleft" + name="report_btn" + width="288" + top_pad="3" + left="10" + enabled="true"/> </layout_panel> </layout_stack> </panel> -- cgit v1.2.3 From 74dcc04e69b845e62d25e83b615399f8a5d26d21 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 17 Mar 2014 15:57:15 -0700 Subject: Updated experience cache to get a const reference to xp data --- indra/llmessage/llexperiencecache.cpp | 21 +++++++++------------ indra/llmessage/llexperiencecache.h | 2 +- indra/llui/llurlentry.cpp | 4 ++-- indra/newview/llpreviewscript.cpp | 20 +++++++++++--------- 4 files changed, 23 insertions(+), 24 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 648e2039a6..c8deaac1ef 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -320,9 +320,9 @@ namespace LLExperienceCache for ( ; it != mKeys.end(); ++it) { - LLSD exp; + LLSD exp = get(it->first); //leave the properties alone if we already have a cache entry for this xp - if(!get(it->first, exp)) + if(exp.isUndefined()) { exp[PROPERTIES]=PROPERTY_INVALID; } @@ -563,24 +563,21 @@ namespace LLExperienceCache LL_WARNS("ExperienceCache") << ": Ignoring cache insert of experience which is missing " << EXPERIENCE_ID << LL_ENDL; } } - - bool get( const LLUUID& key, LLSD& experience_data ) + static LLSD empty; + const LLSD& get(const LLUUID& key) { - if(key.isNull()) return false; + if(key.isNull()) return empty; cache_t::const_iterator it = sCache.find(key); - + if (it != sCache.end()) { - experience_data = it->second; - return true; + return it->second; } - + fetch(key); - return false; + return empty; } - - void get( const LLUUID& key, callback_slot_t slot ) { if(key.isNull()) return; diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h index e6129796b7..e669ee888e 100644 --- a/indra/llmessage/llexperiencecache.h +++ b/indra/llmessage/llexperiencecache.h @@ -89,7 +89,7 @@ namespace LLExperienceCache void erase(const LLUUID& key); bool fetch(const LLUUID& key, bool refresh=false); void insert(const LLSD& experience_data); - bool get(const LLUUID& key, LLSD& experience_data); + const LLSD& get(const LLUUID& key); // If name information is in cache, callback will be called immediately. void get(const LLUUID& key, callback_slot_t slot); diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index f5baf17d8f..0af2cd42aa 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1231,8 +1231,8 @@ std::string LLUrlEntryExperienceProfile::getLabel( const std::string &url, const return LLTrans::getString("ExperienceNameNull"); } - LLSD experience_details; - if(LLExperienceCache::get(experience_id, experience_details)) + const LLSD& experience_details = LLExperienceCache::get(experience_id); + if(!experience_details.isUndefined()) { return experience_details[LLExperienceCache::NAME].asString(); } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index e59c1c21f6..a4798f3911 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1319,6 +1319,7 @@ void LLLiveLSLEditor::updateExperiencePanel() mExperienceEnabled->setToolTip(getString("experience_enabled")); mExperienceEnabled->setEnabled(getIsModifiable()); mExperiences->setVisible(TRUE); + mExperienceEnabled->set(TRUE); buildExperienceList(); } } @@ -1328,7 +1329,6 @@ void LLLiveLSLEditor::buildExperienceList() mExperiences->clearRows(); bool foundAssociated=false; const LLUUID& associated = mScriptEd->getAssociatedExperience(); - LLSD experience; LLUUID last; LLScrollListItem* item; for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it) @@ -1340,21 +1340,23 @@ void LLLiveLSLEditor::buildExperienceList() foundAssociated = true; position = ADD_TOP; } - if(LLExperienceCache::get(id, experience)) - { - mExperiences->add(experience[LLExperienceCache::NAME].asString(), id, position); - } - else + + const LLSD& experience = LLExperienceCache::get(id); + if(experience.isUndefined()) { mExperiences->add(getString("loading"), id, position); last = id; } - + else + { + mExperiences->add(experience[LLExperienceCache::NAME].asString(), id, position); + } } if(!foundAssociated ) - { - if(LLExperienceCache::get(associated, experience)) + { + const LLSD& experience = LLExperienceCache::get(associated); + if(experience.isDefined()) { item=mExperiences->add(experience[LLExperienceCache::NAME].asString(), associated, ADD_TOP); } -- cgit v1.2.3 From 2604b3419657cb3bb8bafb90b1d9e5e43f11db4d Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 17 Mar 2014 16:00:41 -0700 Subject: Updated experience cache to get a const reference to xp data --- indra/newview/llfloaterreporter.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 1b9fc8c6d0..a58e2a4791 100755 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -234,9 +234,11 @@ void LLFloaterReporter::getExperienceInfo(const LLUUID& experience_id) if (LLUUID::null != mExperienceID) { - LLSD experience; - stringstream desc; - if(LLExperienceCache::get(mExperienceID, experience)){ + const LLSD& experience = LLExperienceCache::get(mExperienceID); + std::stringstream desc; + + if(experience.isDefined()) + { setFromAvatarID(experience[LLExperienceCache::AGENT_ID]); desc << "\nExperience id: " << mExperienceID; } -- cgit v1.2.3 From b2591ca63c498ab606bf595e0b2e729e76caea24 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 18 Mar 2014 14:12:22 -0700 Subject: Added a default message handler for experience logs. Currently just forwards the notification. --- indra/newview/CMakeLists.txt | 4 + indra/newview/llexperiencelog.cpp | 28 +++++ indra/newview/llexperiencelog.h | 33 ++++++ indra/newview/llpanelexperiencelog.cpp | 118 +++++++++++++++++++++ indra/newview/llpanelexperiencelog.h | 48 +++++++++ indra/newview/llstartup.cpp | 6 +- indra/newview/llstartup.h | 2 +- .../newview/skins/default/xui/en/notifications.xml | 20 ++++ indra/newview/skins/default/xui/en/strings.xml | 10 +- 9 files changed, 265 insertions(+), 4 deletions(-) create mode 100644 indra/newview/llexperiencelog.cpp create mode 100644 indra/newview/llexperiencelog.h create mode 100644 indra/newview/llpanelexperiencelog.cpp create mode 100644 indra/newview/llpanelexperiencelog.h (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 868a26f47d..3a18133193 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -190,6 +190,7 @@ set(viewer_SOURCE_FILES lleventpoll.cpp llexpandabletextbox.cpp llexperienceassociationresponder.cpp + llexperiencelog.cpp llexternaleditor.cpp llface.cpp llfacebookconnect.cpp @@ -405,6 +406,7 @@ set(viewer_SOURCE_FILES llpanelcontents.cpp llpaneleditwearable.cpp llpanelexperiencelisteditor.cpp + llpanelexperiencelog.cpp llpanelexperiences.cpp llpanelface.cpp llpanelgenerictip.cpp @@ -785,6 +787,7 @@ set(viewer_HEADER_FILES lleventpoll.h llexpandabletextbox.h llexperienceassociationresponder.h + llexperiencelog.h llexternaleditor.h llface.h llfacebookconnect.h @@ -993,6 +996,7 @@ set(viewer_HEADER_FILES llpanelcontents.h llpaneleditwearable.h llpanelexperiencelisteditor.h + llpanelexperiencelog.h llpanelexperiences.h llpanelface.h llpanelgenerictip.h diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp new file mode 100644 index 0000000000..9842bdc31c --- /dev/null +++ b/indra/newview/llexperiencelog.cpp @@ -0,0 +1,28 @@ +/** + * @file llexperiencelog.cpp + * @brief llexperiencelog implementation + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2014, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llexperiencelog.h" diff --git a/indra/newview/llexperiencelog.h b/indra/newview/llexperiencelog.h new file mode 100644 index 0000000000..73d82f4fad --- /dev/null +++ b/indra/newview/llexperiencelog.h @@ -0,0 +1,33 @@ +/** + * @file llexperiencelog.h + * @brief llexperiencelog and related class definitions + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2014, 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_LLEXPERIENCELOG_H +#define LL_LLEXPERIENCELOG_H + + +#endif // LL_LLEXPERIENCELOG_H diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp new file mode 100644 index 0000000000..009889a59f --- /dev/null +++ b/indra/newview/llpanelexperiencelog.cpp @@ -0,0 +1,118 @@ +/** + * @file llpanelexperiencelog.cpp + * @brief llpanelexperiencelog + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2014, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "llviewerprecompiledheaders.h" +#include "llpanelexperiencelog.h" +#include "lldispatcher.h" +#include "llsdserialize.h" +#include "llviewergenericmessage.h" +#include "llnotificationsutil.h" +#include "lltrans.h" + + +class LLExperienceLogDispatchHandler : public LLDispatchHandler +{ +public: + virtual bool operator()( + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings) + { + LLSD message; + + sparam_t::const_iterator it = strings.begin(); + if(it != strings.end()){ + const std::string& llsdRaw = *it++; + std::istringstream llsdData(llsdRaw); + if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length())) + { + llwarns << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << llendl; + } + } + message["public_id"] = invoice; + + // Object Name + if(it != strings.end()) + { + message["ObjectName"] = *it++; + } + + // parcel Name + if(it != strings.end()) + { + message["ParcelName"] = *it++; + } + + LLExperienceLog::instance().handleExperienceMessage(message); + return true; + } +}; + +static LLExperienceLogDispatchHandler experience_log_dispatch_handler; + +void LLExperienceLog::handleExperienceMessage(LLSD& message) +{ + std::ostringstream str; + if(message.has("Permission")) + { + str << "ExperiencePermission" << message["Permission"].asInteger(); + std::string entry; + if(LLTrans::findString(entry, str.str())) + { + str.str(entry); + } + else + { + str.str(); + } + } + + if(str.str().empty()) + { + str.str(LLTrans::getString("ExperiencePermissionUnknown", message)); + } + + message["EventType"] = str.str(); + if(message.has("IsAttachment") && message["IsAttachment"].asBoolean()) + { + LLNotificationsUtil::add("ExperienceEventAttachment", message); + } + else + { + LLNotificationsUtil::add("ExperienceEvent", message); + } +} + +LLExperienceLog::LLExperienceLog() +{ +} + +void LLExperienceLog::initialize() +{ + gGenericDispatcher.addHandler("ExperienceEvent", &experience_log_dispatch_handler); +} diff --git a/indra/newview/llpanelexperiencelog.h b/indra/newview/llpanelexperiencelog.h new file mode 100644 index 0000000000..7d2a24872a --- /dev/null +++ b/indra/newview/llpanelexperiencelog.h @@ -0,0 +1,48 @@ +/** + * @file llpanelexperiencelog.h + * @brief llpanelexperiencelog and related class definitions + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2014, 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_LLPANELEXPERIENCELOG_H +#define LL_LLPANELEXPERIENCELOG_H + +#include "llsingleton.h" + + + +class LLExperienceLog : public LLSingleton<LLExperienceLog> +{ + friend class LLSingleton<LLExperienceLog>; +protected: + LLExperienceLog(); + +public: + void initialize(); + void handleExperienceMessage(LLSD& message); +}; + + +#endif // LL_LLPANELEXPERIENCELOG_H diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a9ac8d6ea7..b5f976080a 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -198,6 +198,7 @@ #include "llevents.h" #include "llstartuplistener.h" #include "lltoolbarview.h" +#include "llpanelexperiencelog.h" #if LL_WINDOWS #include "lldxhardware.h" @@ -1412,7 +1413,7 @@ bool idle_startup() LLStartUp::initNameCache(); display_startup(); - LLStartUp::initExperienceCache(); + LLStartUp::initExperiences(); display_startup(); // update the voice settings *after* gCacheName initialization @@ -2829,10 +2830,11 @@ void LLStartUp::initNameCache() } -void LLStartUp::initExperienceCache() +void LLStartUp::initExperiences() { LLAppViewer::instance()->loadExperienceCache(); LLExperienceCache::initClass(); + LLExperienceLog::instance().initialize(); } void LLStartUp::cleanupNameCache() diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 00e03bcda6..94ecbcd333 100755 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -91,7 +91,7 @@ public: static void fontInit(); static void initNameCache(); - static void initExperienceCache(); + static void initExperiences(); static void cleanupNameCache(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index e0cc2229d5..b230e36cc7 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7069,6 +7069,26 @@ Unable to acquire a new experience: text="Allowed into a region by an experience"/> </form> </notification> + + <notification + icon="notify.tga" + name="ExperienceEvent" + persist="false" + type="notify"> + An object was allowed to [EventType] by the secondlife:///app/experience/[public_id]/profile experience. + Owner: secondlife:///app/agent/[OwnerID]/inspect + Object Name: [ObjectName] + Parcel Name: [ParcelName] + </notification> + + <notification + icon="notify.tga" + name="ExperienceEventAttachment" + persist="false" + type="notify"> + An attachment was allowed to [EventType] by the secondlife:///app/experience/[public_id]/profile experience. + Owner: secondlife:///app/agent/[OwnerID]/inspect + </notification> <notification icon="notify.tga" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 5badeff38b..dc9e96e2f2 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3985,7 +3985,15 @@ Try enclosing path to the editor with double quotes. <string name="Admin_Experiences_Tab">ADMIN</string> <string name="Recent_Experiences_Tab">RECENT</string> <string name="Owned_Experiences_Tab">OWNED</string> - + <string name="ExperiencePermission1">take over your controls</string> + <string name="ExperiencePermission3">override animations on your avatar</string> + <string name="ExperiencePermission4">attach to your avatar</string> + <string name="ExperiencePermission9">track your camera</string> + <string name="ExperiencePermission10">control your camera</string> + <string name="ExperiencePermission11">teleport you</string> + <string name="ExperiencePermission12">automatically accept experience permissions</string> + <string name="ExperiencePermissionUnknown">perform an unknown operation: [Permission]</string> + <!-- Conversation log messages --> <string name="logging_calls_disabled_log_empty"> Conversations are not being logged. To begin keeping a log, choose "Save: Log only" or "Save: Log and transcripts" under Preferences > Chat. -- cgit v1.2.3 From dba034ee100dae4b62ddf12523835a413a25f189 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 20 Mar 2014 16:32:31 -0700 Subject: Experience log panel --- indra/newview/llexperiencelog.cpp | 209 +++++++++++++++++ indra/newview/llexperiencelog.h | 44 ++++ indra/newview/llfloaterexperiences.cpp | 2 + indra/newview/llfloaterreporter.cpp | 12 +- indra/newview/llfloaterreporter.h | 4 +- indra/newview/llpanelexperiencelog.cpp | 246 ++++++++++++++++----- indra/newview/llpanelexperiencelog.h | 36 ++- indra/newview/llstartup.cpp | 8 +- .../default/xui/en/floater_experienceprofile.xml | 4 +- .../newview/skins/default/xui/en/notifications.xml | 4 +- .../skins/default/xui/en/panel_experience_log.xml | 152 +++++++++++++ indra/newview/skins/default/xui/en/strings.xml | 10 +- 12 files changed, 648 insertions(+), 83 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/panel_experience_log.xml (limited to 'indra') diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index 9842bdc31c..110ce46835 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -26,3 +26,212 @@ #include "llviewerprecompiledheaders.h" #include "llexperiencelog.h" + +#include "lldispatcher.h" +#include "llsdserialize.h" +#include "llviewergenericmessage.h" +#include "llnotificationsutil.h" +#include "lltrans.h" +#include "llerror.h" +#include "lldate.h" + + +class LLExperienceLogDispatchHandler : public LLDispatchHandler +{ +public: + virtual bool operator()( + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings) + { + LLSD message; + + sparam_t::const_iterator it = strings.begin(); + if(it != strings.end()){ + const std::string& llsdRaw = *it++; + std::istringstream llsdData(llsdRaw); + if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length())) + { + llwarns << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << llendl; + } + } + message["public_id"] = invoice; + + // Object Name + if(it != strings.end()) + { + message["ObjectName"] = *it++; + } + + // parcel Name + if(it != strings.end()) + { + message["ParcelName"] = *it++; + } + + LLExperienceLog::instance().handleExperienceMessage(message); + return true; + } +}; + +static LLExperienceLogDispatchHandler experience_log_dispatch_handler; + +void LLExperienceLog::handleExperienceMessage(LLSD& message) +{ + time_t now; + time(&now); + char day[16];/* Flawfinder: ignore */ + char time_of_day[16];/* Flawfinder: ignore */ + strftime(day, 16, "%Y-%m-%d", localtime(&now)); + strftime(time_of_day, 16, " %H:%M:%S", localtime(&now)); + message["Time"] = time_of_day; + + if(mNotifyNewEvent) + { + notify(message); + } + if(!mEvents.has(day)){ + mEvents[day] = LLSD::emptyArray(); + } + mEvents[day].append(message); +} + +LLExperienceLog::LLExperienceLog() + : mMaxDays(7) + , mPageSize(25) + , mNotifyNewEvent(false) +{ +} + +void LLExperienceLog::initialize() +{ + loadEvents(); + if(!gGenericDispatcher.isHandlerPresent("ExperienceEvent")) + { + gGenericDispatcher.addHandler("ExperienceEvent", &experience_log_dispatch_handler); + } +} + +std::string LLExperienceLog::getFilename() +{ + return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "experience_events.xml"); +} + + +std::string LLExperienceLog::getPermissionString( const LLSD& message, const std::string& base ) +{ + std::ostringstream buf; + if(message.has("Permission")) + { + buf << base << message["Permission"].asInteger(); + std::string entry; + if(LLTrans::findString(entry, buf.str())) + { + buf.str(entry); + } + else + { + buf.str(); + } + } + + if(buf.str().empty()) + { + buf << base << "Unknown"; + + buf.str(LLTrans::getString(buf.str(), message)); + } + + return buf.str(); +} + +void LLExperienceLog::notify( LLSD& message ) +{ + message["EventType"] = getPermissionString(message, "ExperiencePermission"); + if(message.has("IsAttachment") && message["IsAttachment"].asBoolean()) + { + LLNotificationsUtil::add("ExperienceEventAttachment", message); + } + else + { + LLNotificationsUtil::add("ExperienceEvent", message); + } + message.erase("EventType"); +} + +void LLExperienceLog::saveEvents() +{ + eraseExpired(); + std::string filename = getFilename(); + LLSD settings = LLSD::emptyMap().with("Events", mEvents); + + settings["MaxDays"] = (int)mMaxDays; + settings["Notify"] = mNotifyNewEvent; + settings["PageSize"] = (int)mPageSize; + + llofstream stream(filename); + LLSDSerialize::toPrettyXML(settings, stream); +} + + +void LLExperienceLog::loadEvents() +{ + LLSD settings = LLSD::emptyMap(); + + std::string filename = getFilename(); + llifstream stream(filename); + LLSDSerialize::fromXMLDocument(settings, stream); + + if(settings.has("MaxDays")) + { + mMaxDays = (U32)settings["MaxDays"].asInteger(); + } + if(settings.has("Notify")) + { + mNotifyNewEvent = settings["Notify"].asBoolean(); + } + if(settings.has("PageSize")) + { + mPageSize = (U32)settings["PageSize"].asInteger(); + } + mEvents.clear(); + if(mMaxDays > 0 && settings.has("Events")) + { + mEvents = settings["Events"]; + } + + eraseExpired(); +} + +LLExperienceLog::~LLExperienceLog() +{ + saveEvents(); +} + +void LLExperienceLog::eraseExpired() +{ + while(mEvents.size() > mMaxDays && mMaxDays > 0) + { + mEvents.erase(mEvents.beginMap()->first); + } +} + +const LLSD& LLExperienceLog::getEvents() const +{ + return mEvents; +} + +void LLExperienceLog::clear() +{ + mEvents.clear(); +} + +void LLExperienceLog::setMaxDays( U32 val ) +{ + mMaxDays = val; + if(mMaxDays > 0) + { + eraseExpired(); + } +} diff --git a/indra/newview/llexperiencelog.h b/indra/newview/llexperiencelog.h index 73d82f4fad..26ffab49f9 100644 --- a/indra/newview/llexperiencelog.h +++ b/indra/newview/llexperiencelog.h @@ -29,5 +29,49 @@ #ifndef LL_LLEXPERIENCELOG_H #define LL_LLEXPERIENCELOG_H +#include "llsingleton.h" + +class LLExperienceLog : public LLSingleton<LLExperienceLog> +{ +public: + void initialize(); + + U32 getMaxDays() const { return mMaxDays; } + void setMaxDays(U32 val); + + bool getNotifyNewEvent() const { return mNotifyNewEvent; } + void setNotifyNewEvent(bool val) { mNotifyNewEvent = val; } + + U32 getPageSize() const { return mPageSize; } + void setPageSize(U32 val) { mPageSize = val; } + + const LLSD& getEvents()const; + void clear(); + + virtual ~LLExperienceLog(); + + static void notify(LLSD& message); + static std::string getFilename(); + static std::string getPermissionString(const LLSD& message, const std::string& base); +protected: + LLExperienceLog(); + void handleExperienceMessage(LLSD& message); + + + void loadEvents(); + void saveEvents(); + void eraseExpired(); + + LLSD mEvents; + U32 mMaxDays; + U32 mPageSize; + bool mNotifyNewEvent; + + friend class LLExperienceLogDispatchHandler; + friend class LLSingleton<LLExperienceLog>; +}; + + + #endif // LL_LLEXPERIENCELOG_H diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index f958a988dc..1654419826 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -35,6 +35,7 @@ #include "llexperiencecache.h" #include "llevents.h" #include "llnotificationsutil.h" +#include "llpanelexperiencelog.h" @@ -115,6 +116,7 @@ BOOL LLFloaterExperiences::postBuild() #if SHOW_RECENT_TAB addTab("Recent_Experiences_Tab", false); #endif //SHOW_RECENT_TAB + getChild<LLTabContainer>("xp_tabs")->addTabPanel(new LLPanelExperienceLog()); resizeToTabs(); diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index a58e2a4791..27e26d4fda 100755 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -248,7 +248,7 @@ void LLFloaterReporter::getExperienceInfo(const LLUUID& experience_id) } LLUICtrl* details = getChild<LLUICtrl>("details_edit"); - details->setValue(desc.str()); + details->setValue(details->getValue().asString()+desc.str()); } } @@ -497,7 +497,7 @@ void LLFloaterReporter::showFromMenu(EReportType report_type) } // static -void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_name) +void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_name, const LLUUID& experience_id) { LLFloaterReporter* f = LLFloaterReg::showTypedInstance<LLFloaterReporter>("reporter"); @@ -510,6 +510,10 @@ void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_ { f->setFromAvatarID(object_id); } + if(experience_id.notNull()) + { + f->getExperienceInfo(experience_id); + } // Need to deselect on close f->mDeselectOnClose = TRUE; @@ -532,9 +536,9 @@ void LLFloaterReporter::showFromExperience( const LLUUID& experience_id ) // static -void LLFloaterReporter::showFromObject(const LLUUID& object_id) +void LLFloaterReporter::showFromObject(const LLUUID& object_id, const LLUUID& experience_id) { - show(object_id); + show(object_id, LLStringUtil::null, experience_id); } // static diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h index de3aa9ca5e..5eb5c20665 100755 --- a/indra/newview/llfloaterreporter.h +++ b/indra/newview/llfloaterreporter.h @@ -88,7 +88,7 @@ public: // Enables all buttons static void showFromMenu(EReportType report_type); - static void showFromObject(const LLUUID& object_id); + static void showFromObject(const LLUUID& object_id, const LLUUID& experience_id = LLUUID::null); static void showFromAvatar(const LLUUID& avatar_id, const std::string avatar_name); static void showFromExperience(const LLUUID& experience_id); @@ -107,7 +107,7 @@ public: void setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id); private: - static void show(const LLUUID& object_id, const std::string& avatar_name = LLStringUtil::null); + static void show(const LLUUID& object_id, const std::string& avatar_name = LLStringUtil::null, const LLUUID& experience_id = LLUUID::null); void takeScreenshot(); void sendReportViaCaps(std::string url); diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp index 009889a59f..e0e522e276 100644 --- a/indra/newview/llpanelexperiencelog.cpp +++ b/indra/newview/llpanelexperiencelog.cpp @@ -27,92 +27,224 @@ #include "llviewerprecompiledheaders.h" #include "llpanelexperiencelog.h" -#include "lldispatcher.h" -#include "llsdserialize.h" -#include "llviewergenericmessage.h" -#include "llnotificationsutil.h" -#include "lltrans.h" +#include "llexperiencelog.h" +#include "llexperiencecache.h" +#include "llbutton.h" +#include "llscrolllistctrl.h" +#include "llcombobox.h" +#include "llspinctrl.h" +#include "llcheckboxctrl.h" +#include "llfloaterreg.h" +#include "llfloaterreporter.h" +#include "llinventoryfunctions.h" -class LLExperienceLogDispatchHandler : public LLDispatchHandler + +#define BTN_PROFILE_XP "btn_profile_xp" +#define BTN_REPORT_XP "btn_report_xp" + +static LLPanelInjector<LLPanelExperienceLog> register_experiences_panel("experience_log"); + + +LLPanelExperienceLog::LLPanelExperienceLog( ) + : mEventList(NULL) + , mPageSize(25) + , mCurrentPage(0) { -public: - virtual bool operator()( - const LLDispatcher* dispatcher, - const std::string& key, - const LLUUID& invoice, - const sparam_t& strings) + buildFromFile("panel_experience_log.xml"); +} + +BOOL LLPanelExperienceLog::postBuild( void ) +{ + LLExperienceLog* log = LLExperienceLog::getInstance(); + mEventList = getChild<LLScrollListCtrl>("experience_log_list"); + mEventList->setCommitCallback(boost::bind(&LLPanelExperienceLog::onSelectionChanged, this)); + + getChild<LLButton>("btn_clear")->setCommitCallback(boost::bind(&LLExperienceLog::clear, log)); + getChild<LLButton>("btn_clear")->setCommitCallback(boost::bind(&LLPanelExperienceLog::refresh, this)); + + getChild<LLButton>(BTN_PROFILE_XP)->setCommitCallback(boost::bind(&LLPanelExperienceLog::onProfileExperience, this)); + getChild<LLButton>(BTN_REPORT_XP)->setCommitCallback(boost::bind(&LLPanelExperienceLog::onReportExperience, this)); + getChild<LLButton>("btn_notify")->setCommitCallback(boost::bind(&LLPanelExperienceLog::onNotify, this)); + getChild<LLButton>("btn_next")->setCommitCallback(boost::bind(&LLPanelExperienceLog::onNext, this)); + getChild<LLButton>("btn_prev")->setCommitCallback(boost::bind(&LLPanelExperienceLog::onPrev, this)); + + LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("notify_all"); + check->set(log->getNotifyNewEvent()); + check->setCommitCallback(boost::bind(&LLPanelExperienceLog::notifyChanged, this)); + + + LLSpinCtrl* spin = getChild<LLSpinCtrl>("logsizespinner"); + spin->set(log->getMaxDays()); + spin->setCommitCallback(boost::bind(&LLPanelExperienceLog::logSizeChanged, this)); + + mPageSize = log->getPageSize(); + refresh(); + return TRUE; +} + +LLPanelExperienceLog* LLPanelExperienceLog::create() +{ + return new LLPanelExperienceLog(); +} + +void LLPanelExperienceLog::refresh() +{ + mEventList->deleteAllItems(); + const LLSD& events = LLExperienceLog::instance().getEvents(); + + if(events.size() == 0) { - LLSD message; + mEventList->setCommentText(getString("no_events")); + return; + } - sparam_t::const_iterator it = strings.begin(); - if(it != strings.end()){ - const std::string& llsdRaw = *it++; - std::istringstream llsdData(llsdRaw); - if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length())) - { - llwarns << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << llendl; - } - } - message["public_id"] = invoice; + setAllChildrenEnabled(FALSE); + + LLSD item; + bool waiting = false; + LLUUID waiting_id; - // Object Name - if(it != strings.end()) + int itemsToSkip = mPageSize*mCurrentPage; + int items = 0; + bool moreItems = false; + + for(LLSD::map_const_iterator day = events.beginMap(); day != events.endMap() ; ++day) + { + const LLSD& dayArray = day->second; + int size = dayArray.size(); + if(itemsToSkip > size) { - message["ObjectName"] = *it++; + itemsToSkip -= size; + continue; } - - // parcel Name - if(it != strings.end()) + if(items >= mPageSize && size > 0) + { + moreItems = true; + break; + } + for(int i = itemsToSkip ; i < dayArray.size(); i++) { - message["ParcelName"] = *it++; + if(items >= mPageSize) + { + moreItems = true; + break; + } + const LLSD& event = dayArray[i]; + LLUUID id = event[LLExperienceCache::EXPERIENCE_ID].asUUID(); + const LLSD& experience = LLExperienceCache::get(id); + if(experience.isUndefined()){ + waiting = true; + waiting_id = id; + } + if(!waiting) + { + item["id"] = event; + + LLSD& columns = item["columns"]; + columns[0]["column"] = "time"; + columns[0]["value"] = day->first+event["Time"].asString(); + columns[1]["column"] = "event"; + columns[1]["value"] = LLExperienceLog::getPermissionString(event, "ExperiencePermissionShort"); + columns[2]["column"] = "experience_name"; + columns[2]["value"] = experience[LLExperienceCache::NAME].asString(); + columns[3]["column"] = "object_name"; + columns[3]["value"] = event["ObjectName"].asString(); + mEventList->addElement(item); + } + ++items; } + } + if(waiting) + { + mEventList->deleteAllItems(); + mEventList->setCommentText(getString("loading")); + LLExperienceCache::get(waiting_id, boost::bind(&LLPanelExperienceLog::refresh, this)); + } + else + { + setAllChildrenEnabled(TRUE); - LLExperienceLog::instance().handleExperienceMessage(message); - return true; + mEventList->setEnabled(TRUE); + getChild<LLButton>("btn_next")->setEnabled(moreItems); + getChild<LLButton>("btn_prev")->setEnabled(mCurrentPage>0); + getChild<LLButton>("btn_clear")->setEnabled(mEventList->getItemCount()>0); + onSelectionChanged(); } -}; +} -static LLExperienceLogDispatchHandler experience_log_dispatch_handler; +void LLPanelExperienceLog::onProfileExperience() +{ + LLSD& event = getSelectedEvent(); + if(event.isDefined()) + { + LLFloaterReg::showInstance("experience_profile", event[LLExperienceCache::EXPERIENCE_ID].asUUID(), true); + } +} -void LLExperienceLog::handleExperienceMessage(LLSD& message) +void LLPanelExperienceLog::onReportExperience() { - std::ostringstream str; - if(message.has("Permission")) + LLSD& event = getSelectedEvent(); + if(event.isDefined()) { - str << "ExperiencePermission" << message["Permission"].asInteger(); - std::string entry; - if(LLTrans::findString(entry, str.str())) - { - str.str(entry); - } - else - { - str.str(); - } + LLFloaterReporter::showFromExperience(event[LLExperienceCache::EXPERIENCE_ID].asUUID()); } +} - if(str.str().empty()) +void LLPanelExperienceLog::onNotify() +{ + LLSD& event = getSelectedEvent(); + if(event.isDefined()) { - str.str(LLTrans::getString("ExperiencePermissionUnknown", message)); + LLExperienceLog::instance().notify(event); } +} + +void LLPanelExperienceLog::onNext() +{ + mCurrentPage++; + refresh(); +} - message["EventType"] = str.str(); - if(message.has("IsAttachment") && message["IsAttachment"].asBoolean()) +void LLPanelExperienceLog::onPrev() +{ + if(mCurrentPage>0) { - LLNotificationsUtil::add("ExperienceEventAttachment", message); + mCurrentPage--; + refresh(); } - else +} + +void LLPanelExperienceLog::notifyChanged() +{ + LLExperienceLog::instance().setNotifyNewEvent(getChild<LLCheckBoxCtrl>("notify_all")->get()); +} + +void LLPanelExperienceLog::logSizeChanged() +{ + int value = (int)(getChild<LLSpinCtrl>("logsizespinner")->get()); + bool dirty = value > 0 && value < LLExperienceLog::instance().getMaxDays(); + LLExperienceLog::instance().setMaxDays(value); + if(dirty) { - LLNotificationsUtil::add("ExperienceEvent", message); + refresh(); } } -LLExperienceLog::LLExperienceLog() +void LLPanelExperienceLog::onSelectionChanged() { + bool enabled = (1 == mEventList->getNumSelected()); + getChild<LLButton>(BTN_REPORT_XP)->setEnabled(enabled); + getChild<LLButton>(BTN_PROFILE_XP)->setEnabled(enabled); + getChild<LLButton>("btn_notify")->setEnabled(enabled); } -void LLExperienceLog::initialize() +LLSD LLPanelExperienceLog::getSelectedEvent() { - gGenericDispatcher.addHandler("ExperienceEvent", &experience_log_dispatch_handler); + LLScrollListItem* item = mEventList->getFirstSelected(); + if(item) + { + return item->getValue(); + } + return LLSD(); } diff --git a/indra/newview/llpanelexperiencelog.h b/indra/newview/llpanelexperiencelog.h index 7d2a24872a..e4edd216d5 100644 --- a/indra/newview/llpanelexperiencelog.h +++ b/indra/newview/llpanelexperiencelog.h @@ -25,24 +25,38 @@ */ - #ifndef LL_LLPANELEXPERIENCELOG_H #define LL_LLPANELEXPERIENCELOG_H -#include "llsingleton.h" +#include "llpanel.h" +class LLScrollListCtrl; +class LLPanelExperienceLog + : public LLPanel +{ +public: + LLPanelExperienceLog(); + static LLPanelExperienceLog* create(); -class LLExperienceLog : public LLSingleton<LLExperienceLog> -{ - friend class LLSingleton<LLExperienceLog>; + /*virtual*/ BOOL postBuild(void); + + void refresh(); protected: - LLExperienceLog(); - -public: - void initialize(); - void handleExperienceMessage(LLSD& message); + void logSizeChanged(); + void notifyChanged(); + void onNext(); + void onNotify(); + void onPrev(); + void onProfileExperience(); + void onReportExperience(); + void onSelectionChanged(); + + LLSD getSelectedEvent(); +private: + LLScrollListCtrl* mEventList; + U32 mPageSize; + U32 mCurrentPage; }; - #endif // LL_LLPANELEXPERIENCELOG_H diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index b5f976080a..b3633740ca 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -198,7 +198,7 @@ #include "llevents.h" #include "llstartuplistener.h" #include "lltoolbarview.h" -#include "llpanelexperiencelog.h" +#include "llexperiencelog.h" #if LL_WINDOWS #include "lldxhardware.h" @@ -1303,6 +1303,9 @@ bool idle_startup() // object is created. I think this must be done after setting the region. JC gAgent.setPositionAgent(agent_start_position_region); + display_startup(); + LLStartUp::initExperiences(); + display_startup(); LLStartUp::setStartupState( STATE_MULTIMEDIA_INIT ); @@ -1413,9 +1416,6 @@ bool idle_startup() LLStartUp::initNameCache(); display_startup(); - LLStartUp::initExperiences(); - display_startup(); - // update the voice settings *after* gCacheName initialization // so that we can construct voice UI that relies on the name cache LLVoiceClient::getInstance()->updateSettings(); diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index 67a7d5dad0..c6a749b45f 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -410,9 +410,9 @@ label="Report Abuse" layout="topleft" name="report_btn" - width="288" + width="94" top_pad="3" - left="10" + left="107" enabled="true"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index b230e36cc7..edcc401b9a 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7074,7 +7074,7 @@ Unable to acquire a new experience: icon="notify.tga" name="ExperienceEvent" persist="false" - type="notify"> + type="notifytip"> An object was allowed to [EventType] by the secondlife:///app/experience/[public_id]/profile experience. Owner: secondlife:///app/agent/[OwnerID]/inspect Object Name: [ObjectName] @@ -7085,7 +7085,7 @@ Unable to acquire a new experience: icon="notify.tga" name="ExperienceEventAttachment" persist="false" - type="notify"> + type="notifytip"> An attachment was allowed to [EventType] by the secondlife:///app/experience/[public_id]/profile experience. Owner: secondlife:///app/agent/[OwnerID]/inspect </notification> diff --git a/indra/newview/skins/default/xui/en/panel_experience_log.xml b/indra/newview/skins/default/xui/en/panel_experience_log.xml new file mode 100644 index 0000000000..6869a135d8 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experience_log.xml @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> + +<panel + layout="topleft" + top="3" + left="3" + width="500" + height="300" + label="EVENTS" + bg_opaque_color="0 0.5 0 0.3" + follows="all"> + <string + name="no_events" + value="No events."/> + <string + name="loading" + value="loading..."/> + <layout_stack + layout="topleft" + top="0" + left="4" + right="-1" + bottom="-4" + orientation="vertical" + follows="all"> + <layout_panel + layout="topleft" + top="0" + left="1" + right="-1" + height="250" + follows="all"> + <scroll_list + draw_heading="true" + left="1" + right="-86" + height="250" + follows="all" + name="experience_log_list"> + <columns + width="100" + user_resize="true" + name="time" + label="Time"/> + <columns + width="100" + user_resize="true" + name="event" + label="Event"/> + <columns + width="100" + user_resize="true" + name="experience_name" + label="Experience"/> + <columns + width="100" + user_resize="true" + name="object_name" + label="Object"/> + </scroll_list> + + <button + layout="topleft" + follows="top|right" + name="btn_notify" + label="Notify" + top_pad="-225" + left_pad="5" + right="-1" + enabled="false"/> + + <button + layout="topleft" + follows="top|right" + name="btn_profile_xp" + label="Profile" + top_pad="5" + right="-1" + enabled="false"/> + + <button + layout="topleft" + follows="top|right" + name="btn_report_xp" + label="Report" + top_pad="5" + right="-1" + enabled="false"/> + </layout_panel> + <layout_panel + layout="topleft" + top="0" + left="1" + right="-1" + height="30" + min_height="30" + follows="all" + name="button_panel" + visible="true"> + <check_box + top="0" + follows="top|left" + height="26" + label="Notify All Events Days" + width="140" + name="notify_all" /> + + <spinner + top="5" + control_name="LogDays" + decimal_digits="0" + follows="left|top" + height="23" + increment="1" + initial_value="7" + label_width="30" + layout="topleft" + left_pad="5" + max_val="14" + min_val="0" + name="logsizespinner" + width="40" /> + <button + top="5" + left="280" + layout="topleft" + follows="top|left" + name="btn_clear" + label="Clear" + width="80" + enabled="false"/> + <button + top="5" + layout="topleft" + left_pad="5" + width="20" + follows="top|left" + name="btn_prev" + label="<" + enabled="false"/> + <button + top="5" + layout="topleft" + follows="top|left" + name="btn_next" + label=">" + left_pad="5" + width="20" + enabled="false"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index dc9e96e2f2..37aaf941af 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3992,7 +3992,15 @@ Try enclosing path to the editor with double quotes. <string name="ExperiencePermission10">control your camera</string> <string name="ExperiencePermission11">teleport you</string> <string name="ExperiencePermission12">automatically accept experience permissions</string> - <string name="ExperiencePermissionUnknown">perform an unknown operation: [Permission]</string> + <string name="ExperiencePermissionShortUnknown">perform an unknown operation: [Permission]</string> + <string name="ExperiencePermissionShort1">Take Controls</string> + <string name="ExperiencePermissionShort3">Override Animations</string> + <string name="ExperiencePermissionShort4">Attach</string> + <string name="ExperiencePermissionShort9">Track Camera</string> + <string name="ExperiencePermissionShort10">Control Camera</string> + <string name="ExperiencePermissionShort11">Teleport</string> + <string name="ExperiencePermissionShort12">Permission</string> + <string name="ExperiencePermissionShortUnknown">Unknown: [Permission]</string> <!-- Conversation log messages --> <string name="logging_calls_disabled_log_empty"> -- cgit v1.2.3 From d15a709cd730616e415eb65f3598274886f25ed6 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 21 Mar 2014 10:22:50 -0700 Subject: Fixed unit test --- indra/llui/tests/llurlentry_test.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp index e8b9dde753..15f2354552 100755 --- a/indra/llui/tests/llurlentry_test.cpp +++ b/indra/llui/tests/llurlentry_test.cpp @@ -39,9 +39,10 @@ namespace LLExperienceCache { - bool get( const LLUUID& key, LLSD& experience_data ) + const LLSD& get( const LLUUID& key) { - return false; + static LLSD boo; + return boo; } void get( const LLUUID& key, callback_slot_t slot ){} -- cgit v1.2.3 From 37411bc7ebc5a34e8c9a5c43471291224a3cd35a Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 21 Mar 2014 16:58:43 -0700 Subject: Experience log panel is live and updates as new events come in. Multiple identical events get collapsed int a single entry. --- indra/newview/llexperiencelog.cpp | 54 +++++++++++++++++++++----- indra/newview/llexperiencelog.h | 10 ++++- indra/newview/llpanelexperiencelog.cpp | 17 ++++++-- indra/newview/llpanelexperiencelog.h | 2 + indra/newview/skins/default/xui/en/strings.xml | 4 +- 5 files changed, 71 insertions(+), 16 deletions(-) (limited to 'indra') diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index 110ce46835..5f9fab306b 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -69,6 +69,7 @@ public: { message["ParcelName"] = *it++; } + message["Count"] = 1; LLExperienceLog::instance().handleExperienceMessage(message); return true; @@ -81,20 +82,37 @@ void LLExperienceLog::handleExperienceMessage(LLSD& message) { time_t now; time(&now); - char day[16];/* Flawfinder: ignore */ + char daybuf[16];/* Flawfinder: ignore */ char time_of_day[16];/* Flawfinder: ignore */ - strftime(day, 16, "%Y-%m-%d", localtime(&now)); + strftime(daybuf, 16, "%Y-%m-%d", localtime(&now)); strftime(time_of_day, 16, " %H:%M:%S", localtime(&now)); message["Time"] = time_of_day; - if(mNotifyNewEvent) + std::string day = daybuf; + + if(!mEvents.has(day)) { - notify(message); - } - if(!mEvents.has(day)){ mEvents[day] = LLSD::emptyArray(); } + LLSD& dayEvents = mEvents[day]; + if(dayEvents.size() > 0) + { + LLSD& last = *(dayEvents.rbeginArray()); + if( last["public_id"].asUUID() == message["public_id"].asUUID() + && last["ObjectName"].asString() == message["ObjectName"].asString() + && last["OwnerID"].asUUID() == message["OwnerID"].asUUID() + && last["ParcelName"].asString() == message["ParcelName"].asString() + && last["Permission"].asInteger() == message["Permission"].asInteger()) + { + last["Count"] = last["Count"].asInteger() + 1; + last["Time"] = time_of_day; + mSignals(last); + return; + } + } + message["Time"] = time_of_day; mEvents[day].append(message); + mSignals(message); } LLExperienceLog::LLExperienceLog() @@ -185,15 +203,15 @@ void LLExperienceLog::loadEvents() if(settings.has("MaxDays")) { - mMaxDays = (U32)settings["MaxDays"].asInteger(); + setMaxDays((U32)settings["MaxDays"].asInteger()); } if(settings.has("Notify")) { - mNotifyNewEvent = settings["Notify"].asBoolean(); + setNotifyNewEvent(settings["Notify"].asBoolean()); } if(settings.has("PageSize")) { - mPageSize = (U32)settings["PageSize"].asInteger(); + setPageSize((U32)settings["PageSize"].asInteger()); } mEvents.clear(); if(mMaxDays > 0 && settings.has("Events")) @@ -235,3 +253,21 @@ void LLExperienceLog::setMaxDays( U32 val ) eraseExpired(); } } + +LLExperienceLog::callback_connection_t LLExperienceLog::addUpdateSignal( callback_slot_t cb ) +{ + return mSignals.connect(cb); +} + +void LLExperienceLog::setNotifyNewEvent( bool val ) +{ + mNotifyNewEvent = val; + if(!val && mNotifyConnection.connected()) + { + mNotifyConnection.disconnect(); + } + else if( val && !mNotifyConnection.connected()) + { + mNotifyConnection = addUpdateSignal(notify); + } +} diff --git a/indra/newview/llexperiencelog.h b/indra/newview/llexperiencelog.h index 26ffab49f9..5bc47c4e8d 100644 --- a/indra/newview/llexperiencelog.h +++ b/indra/newview/llexperiencelog.h @@ -34,13 +34,19 @@ class LLExperienceLog : public LLSingleton<LLExperienceLog> { public: + typedef boost::signals2::signal<void(LLSD&)> + callback_signal_t; + typedef callback_signal_t::slot_type callback_slot_t; + typedef boost::signals2::connection callback_connection_t; + callback_connection_t addUpdateSignal(callback_slot_t cb); + void initialize(); U32 getMaxDays() const { return mMaxDays; } void setMaxDays(U32 val); bool getNotifyNewEvent() const { return mNotifyNewEvent; } - void setNotifyNewEvent(bool val) { mNotifyNewEvent = val; } + void setNotifyNewEvent(bool val); U32 getPageSize() const { return mPageSize; } void setPageSize(U32 val) { mPageSize = val; } @@ -63,6 +69,8 @@ protected: void eraseExpired(); LLSD mEvents; + callback_signal_t mSignals; + callback_connection_t mNotifyConnection; U32 mMaxDays; U32 mPageSize; bool mNotifyNewEvent; diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp index e0e522e276..eeabab4c44 100644 --- a/indra/newview/llpanelexperiencelog.cpp +++ b/indra/newview/llpanelexperiencelog.cpp @@ -54,20 +54,22 @@ LLPanelExperienceLog::LLPanelExperienceLog( ) buildFromFile("panel_experience_log.xml"); } + BOOL LLPanelExperienceLog::postBuild( void ) { LLExperienceLog* log = LLExperienceLog::getInstance(); mEventList = getChild<LLScrollListCtrl>("experience_log_list"); mEventList->setCommitCallback(boost::bind(&LLPanelExperienceLog::onSelectionChanged, this)); + mEventList->setDoubleClickCallback( boost::bind(&LLPanelExperienceLog::onProfileExperience, this)); getChild<LLButton>("btn_clear")->setCommitCallback(boost::bind(&LLExperienceLog::clear, log)); getChild<LLButton>("btn_clear")->setCommitCallback(boost::bind(&LLPanelExperienceLog::refresh, this)); getChild<LLButton>(BTN_PROFILE_XP)->setCommitCallback(boost::bind(&LLPanelExperienceLog::onProfileExperience, this)); - getChild<LLButton>(BTN_REPORT_XP)->setCommitCallback(boost::bind(&LLPanelExperienceLog::onReportExperience, this)); - getChild<LLButton>("btn_notify")->setCommitCallback(boost::bind(&LLPanelExperienceLog::onNotify, this)); - getChild<LLButton>("btn_next")->setCommitCallback(boost::bind(&LLPanelExperienceLog::onNext, this)); - getChild<LLButton>("btn_prev")->setCommitCallback(boost::bind(&LLPanelExperienceLog::onPrev, this)); + getChild<LLButton>(BTN_REPORT_XP )->setCommitCallback(boost::bind(&LLPanelExperienceLog::onReportExperience, this)); + getChild<LLButton>("btn_notify" )->setCommitCallback(boost::bind(&LLPanelExperienceLog::onNotify, this)); + getChild<LLButton>("btn_next" )->setCommitCallback(boost::bind(&LLPanelExperienceLog::onNext, this)); + getChild<LLButton>("btn_prev" )->setCommitCallback(boost::bind(&LLPanelExperienceLog::onPrev, this)); LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("notify_all"); check->set(log->getNotifyNewEvent()); @@ -80,6 +82,7 @@ BOOL LLPanelExperienceLog::postBuild( void ) mPageSize = log->getPageSize(); refresh(); + mNewEvent = LLExperienceLog::instance().addUpdateSignal(boost::bind(&LLPanelExperienceLog::refresh, this)); return TRUE; } @@ -90,6 +93,7 @@ LLPanelExperienceLog* LLPanelExperienceLog::create() void LLPanelExperienceLog::refresh() { + S32 selected = mEventList->getFirstSelectedIndex(); mEventList->deleteAllItems(); const LLSD& events = LLExperienceLog::instance().getEvents(); @@ -169,6 +173,11 @@ void LLPanelExperienceLog::refresh() getChild<LLButton>("btn_next")->setEnabled(moreItems); getChild<LLButton>("btn_prev")->setEnabled(mCurrentPage>0); getChild<LLButton>("btn_clear")->setEnabled(mEventList->getItemCount()>0); + if(selected<0) + { + selected = 0; + } + mEventList->selectNthItem(selected); onSelectionChanged(); } } diff --git a/indra/newview/llpanelexperiencelog.h b/indra/newview/llpanelexperiencelog.h index e4edd216d5..4135d9cac9 100644 --- a/indra/newview/llpanelexperiencelog.h +++ b/indra/newview/llpanelexperiencelog.h @@ -35,6 +35,7 @@ class LLPanelExperienceLog : public LLPanel { public: + LLPanelExperienceLog(); static LLPanelExperienceLog* create(); @@ -57,6 +58,7 @@ private: LLScrollListCtrl* mEventList; U32 mPageSize; U32 mCurrentPage; + boost::signals2::scoped_connection mNewEvent; }; #endif // LL_LLPANELEXPERIENCELOG_H diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 37aaf941af..a17a895b42 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3986,7 +3986,7 @@ Try enclosing path to the editor with double quotes. <string name="Recent_Experiences_Tab">RECENT</string> <string name="Owned_Experiences_Tab">OWNED</string> <string name="ExperiencePermission1">take over your controls</string> - <string name="ExperiencePermission3">override animations on your avatar</string> + <string name="ExperiencePermission3">trigger animations on your avatar</string> <string name="ExperiencePermission4">attach to your avatar</string> <string name="ExperiencePermission9">track your camera</string> <string name="ExperiencePermission10">control your camera</string> @@ -3994,7 +3994,7 @@ Try enclosing path to the editor with double quotes. <string name="ExperiencePermission12">automatically accept experience permissions</string> <string name="ExperiencePermissionShortUnknown">perform an unknown operation: [Permission]</string> <string name="ExperiencePermissionShort1">Take Controls</string> - <string name="ExperiencePermissionShort3">Override Animations</string> + <string name="ExperiencePermissionShort3">Trigger Animations</string> <string name="ExperiencePermissionShort4">Attach</string> <string name="ExperiencePermissionShort9">Track Camera</string> <string name="ExperiencePermissionShort10">Control Camera</string> -- cgit v1.2.3 From c82a884ef46a31a999f4f402efdc0f42d457f695 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 25 Mar 2014 10:23:33 -0700 Subject: Fixed temporary reference --- indra/newview/llpanelexperiencelog.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp index eeabab4c44..0c9f57b336 100644 --- a/indra/newview/llpanelexperiencelog.cpp +++ b/indra/newview/llpanelexperiencelog.cpp @@ -95,7 +95,7 @@ void LLPanelExperienceLog::refresh() { S32 selected = mEventList->getFirstSelectedIndex(); mEventList->deleteAllItems(); - const LLSD& events = LLExperienceLog::instance().getEvents(); + const LLSD events = LLExperienceLog::instance().getEvents(); if(events.size() == 0) { @@ -134,7 +134,7 @@ void LLPanelExperienceLog::refresh() moreItems = true; break; } - const LLSD& event = dayArray[i]; + const LLSD event = dayArray[i]; LLUUID id = event[LLExperienceCache::EXPERIENCE_ID].asUUID(); const LLSD& experience = LLExperienceCache::get(id); if(experience.isUndefined()){ @@ -184,7 +184,7 @@ void LLPanelExperienceLog::refresh() void LLPanelExperienceLog::onProfileExperience() { - LLSD& event = getSelectedEvent(); + LLSD event = getSelectedEvent(); if(event.isDefined()) { LLFloaterReg::showInstance("experience_profile", event[LLExperienceCache::EXPERIENCE_ID].asUUID(), true); @@ -193,7 +193,7 @@ void LLPanelExperienceLog::onProfileExperience() void LLPanelExperienceLog::onReportExperience() { - LLSD& event = getSelectedEvent(); + LLSD event = getSelectedEvent(); if(event.isDefined()) { LLFloaterReporter::showFromExperience(event[LLExperienceCache::EXPERIENCE_ID].asUUID()); @@ -202,7 +202,7 @@ void LLPanelExperienceLog::onReportExperience() void LLPanelExperienceLog::onNotify() { - LLSD& event = getSelectedEvent(); + LLSD event = getSelectedEvent(); if(event.isDefined()) { LLExperienceLog::instance().notify(event); -- cgit v1.2.3 From 1d83b76e077054f880920efb3b2fc0c38094fc33 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 25 Mar 2014 12:06:27 -0700 Subject: Attempting ti fix the mac build --- indra/newview/llexperiencelog.cpp | 4 ++-- indra/newview/llexperiencelog.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index 5f9fab306b..66129a39a2 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -254,7 +254,7 @@ void LLExperienceLog::setMaxDays( U32 val ) } } -LLExperienceLog::callback_connection_t LLExperienceLog::addUpdateSignal( callback_slot_t cb ) +LLExperienceLog::callback_connection_t LLExperienceLog::addUpdateSignal( const callback_slot_t& cb ) { return mSignals.connect(cb); } @@ -268,6 +268,6 @@ void LLExperienceLog::setNotifyNewEvent( bool val ) } else if( val && !mNotifyConnection.connected()) { - mNotifyConnection = addUpdateSignal(notify); + mNotifyConnection = addUpdateSignal((callback_slot_t)notify); } } diff --git a/indra/newview/llexperiencelog.h b/indra/newview/llexperiencelog.h index 5bc47c4e8d..1e473e27d5 100644 --- a/indra/newview/llexperiencelog.h +++ b/indra/newview/llexperiencelog.h @@ -38,7 +38,7 @@ public: callback_signal_t; typedef callback_signal_t::slot_type callback_slot_t; typedef boost::signals2::connection callback_connection_t; - callback_connection_t addUpdateSignal(callback_slot_t cb); + callback_connection_t addUpdateSignal(const callback_slot_t& cb); void initialize(); -- cgit v1.2.3 From 572af460ec02494e405face52d49cd8b41f8c9f4 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 25 Mar 2014 13:01:22 -0700 Subject: Attempting to fix the mac build, take 2 --- indra/newview/llexperiencelog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index 66129a39a2..f1e097f22d 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -268,6 +268,6 @@ void LLExperienceLog::setNotifyNewEvent( bool val ) } else if( val && !mNotifyConnection.connected()) { - mNotifyConnection = addUpdateSignal((callback_slot_t)notify); + mNotifyConnection = addUpdateSignal(boost::function<void(LLSD&)>(LLExperienceLog::notify)); } } -- cgit v1.2.3 From a8a0506b35667b76bf7bdbea6984909588cb7bbc Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 4 Apr 2014 16:30:04 -0700 Subject: Changed estate experience editing to use sendEstateOwnerMessage --- indra/llmessage/llregionflags.h | 47 ++++++--- indra/newview/llfloaterregioninfo.cpp | 116 +++++++++++++++++---- indra/newview/llfloaterregioninfo.h | 10 +- indra/newview/llpanelexperiencelisteditor.cpp | 24 +++-- indra/newview/llpanelexperiencelisteditor.h | 14 ++- .../skins/default/xui/en/panel_experience_info.xml | 2 +- .../default/xui/en/panel_region_experiences.xml | 12 --- 7 files changed, 159 insertions(+), 66 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h index 1cf940918b..371a34cdfe 100755 --- a/indra/llmessage/llregionflags.h +++ b/indra/llmessage/llregionflags.h @@ -146,19 +146,20 @@ const U32 ESTATE_ACCESS_ALL = ESTATE_ACCESS_ALLOWED_AGENTS | ESTATE_ACCESS_BANNED_AGENTS | ESTATE_ACCESS_MANAGERS; -// for EstateOwnerRequest, estateaccessdelta message -const U32 ESTATE_ACCESS_APPLY_TO_ALL_ESTATES = 1 << 0; -const U32 ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES = 1 << 1; - -const U32 ESTATE_ACCESS_ALLOWED_AGENT_ADD = 1 << 2; -const U32 ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 1 << 3; -const U32 ESTATE_ACCESS_ALLOWED_GROUP_ADD = 1 << 4; -const U32 ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 1 << 5; -const U32 ESTATE_ACCESS_BANNED_AGENT_ADD = 1 << 6; -const U32 ESTATE_ACCESS_BANNED_AGENT_REMOVE = 1 << 7; -const U32 ESTATE_ACCESS_MANAGER_ADD = 1 << 8; -const U32 ESTATE_ACCESS_MANAGER_REMOVE = 1 << 9; -const U32 ESTATE_ACCESS_NO_REPLY = 1 << 10; +// for EstateOwnerRequest, estateaccessdelta, estateexperiencedelta messages +const U32 ESTATE_ACCESS_APPLY_TO_ALL_ESTATES = 1U << 0; +const U32 ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES = 1U << 1; + +const U32 ESTATE_ACCESS_ALLOWED_AGENT_ADD = 1U << 2; +const U32 ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 1U << 3; +const U32 ESTATE_ACCESS_ALLOWED_GROUP_ADD = 1U << 4; +const U32 ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 1U << 5; +const U32 ESTATE_ACCESS_BANNED_AGENT_ADD = 1U << 6; +const U32 ESTATE_ACCESS_BANNED_AGENT_REMOVE = 1U << 7; +const U32 ESTATE_ACCESS_MANAGER_ADD = 1U << 8; +const U32 ESTATE_ACCESS_MANAGER_REMOVE = 1U << 9; +const U32 ESTATE_ACCESS_NO_REPLY = 1U << 10; +const U32 ESTATE_ACCESS_FAILED_BAN_ESTATE_MANAGER = 1U << 11; const S32 ESTATE_MAX_MANAGERS = 10; const S32 ESTATE_MAX_ACCESS_IDS = 500; // max for access, banned @@ -169,6 +170,26 @@ const U32 SWD_OTHERS_LAND_ONLY = (1 << 0); const U32 SWD_ALWAYS_RETURN_OBJECTS = (1 << 1); const U32 SWD_SCRIPTED_ONLY = (1 << 2); +// Controls experience key validity in the estate +const U32 EXPERIENCE_KEY_TYPE_NONE = 0; +const U32 EXPERIENCE_KEY_TYPE_BLOCKED = 1; +const U32 EXPERIENCE_KEY_TYPE_ALLOWED = 2; +const U32 EXPERIENCE_KEY_TYPE_TRUSTED = 3; + +const U32 EXPERIENCE_KEY_TYPE_FIRST = EXPERIENCE_KEY_TYPE_BLOCKED; +const U32 EXPERIENCE_KEY_TYPE_LAST = EXPERIENCE_KEY_TYPE_TRUSTED; + +// +const U32 ESTATE_EXPERIENCE_TRUSTED_ADD = 1U << 2; +const U32 ESTATE_EXPERIENCE_TRUSTED_REMOVE = 1U << 3; +const U32 ESTATE_EXPERIENCE_ALLOWED_ADD = 1U << 4; +const U32 ESTATE_EXPERIENCE_ALLOWED_REMOVE = 1U << 5; +const U32 ESTATE_EXPERIENCE_BLOCKED_ADD = 1U << 6; +const U32 ESTATE_EXPERIENCE_BLOCKED_REMOVE = 1U << 7; + +const S32 ESTATE_MAX_EXPERIENCE_IDS = 8; + + #endif diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 027815c593..0bacb0710f 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -131,6 +131,18 @@ public: const sparam_t& strings); }; +class LLDispatchSetEstateExperience : public LLDispatchHandler +{ +public: + virtual bool operator()( + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings); + + LLSD getIDs( sparam_t::const_iterator it, sparam_t::const_iterator end, S32 count ); +}; + /* void unpack_request_params( @@ -457,6 +469,16 @@ LLPanelRegionTerrainInfo* LLFloaterRegionInfo::getPanelRegionTerrain() return panel; } +LLPanelRegionExperiences* LLFloaterRegionInfo::getPanelExperiences() +{ + LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); + if (!floater) return NULL; + LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); + return (LLPanelRegionExperiences*)tab->getChild<LLPanel>("Experiences"); +} + + + void LLFloaterRegionInfo::onTabSelected(const LLSD& param) { LLPanel* active_panel = getChild<LLPanel>(param.asString()); @@ -1376,6 +1398,11 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) static LLDispatchSetEstateAccess set_access; dispatch.addHandler(name, &set_access); + + name.assign("setexperiences"); + static LLDispatchSetEstateExperience set_experience; + dispatch.addHandler(name, &set_experience); + estate_dispatch_initialized = true; } @@ -2886,6 +2913,56 @@ bool LLDispatchSetEstateAccess::operator()( return true; } +LLSD LLDispatchSetEstateExperience::getIDs( sparam_t::const_iterator it, sparam_t::const_iterator end, S32 count ) +{ + LLSD idList = LLSD::emptyArray(); + LLUUID id; + while(count--> 0) + { + memcpy(id.mData, (*(++it)).data(), UUID_BYTES); + idList.append(id); + } + return idList; +} + +// key = "setexperience" +// strings[0] = str(estate_id) +// strings[1] = str(send_to_agent_only) +// strings[2] = str(num blocked) +// strings[3] = str(num trusted) +// strings[4] = str(num allowed) +// strings[8] = bin(uuid) ... +// ... +bool LLDispatchSetEstateExperience::operator()( + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings) +{ + LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences(); + if (!panel) return true; + + sparam_t::const_iterator it = strings.begin(); + ++it; // U32 estate_id = strtol((*it).c_str(), NULL, 10); + ++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10); + + LLUUID id; + S32 num_blocked = strtol((*(++it)).c_str(), NULL, 10); + S32 num_trusted = strtol((*(++it)).c_str(), NULL, 10); + S32 num_allowed = strtol((*(++it)).c_str(), NULL, 10); + + LLSD ids = LLSD::emptyMap() + .with("blocked", getIDs(it, strings.end(), num_blocked)) + .with("trusted", getIDs(it, strings.end(), num_trusted)) + .with("allowed", getIDs(it, strings.end(), num_allowed)); + + panel->processResponse(ids); + + return true; +} + + + LLPanelEnvironmentInfo::LLPanelEnvironmentInfo() : mEnableEditing(false), mRegionSettingsRadioGroup(NULL), @@ -3483,6 +3560,14 @@ BOOL LLPanelRegionExperiences::postBuild() mAllowed = setupList("panel_allowed"); mTrusted = setupList("panel_trusted"); mBlocked = setupList("panel_blocked"); + + mAllowed->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_ALLOWED_ADD, _1)); + mAllowed->setRemovedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_ALLOWED_REMOVE, _1)); + mBlocked->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_BLOCKED_ADD, _1)); + mBlocked->setRemovedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_BLOCKED_REMOVE, _1)); + mTrusted->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_TRUSTED_ADD, _1)); + mTrusted->setRemovedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_TRUSTED_REMOVE, _1)); + return LLPanelRegionInfo::postBuild(); } @@ -3498,27 +3583,11 @@ LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* co } - - -boost::signals2::connection LLPanelRegionExperiences::processResponse( LLPanelExperienceListEditor* panel, boost::signals2::connection& conn, const LLSD& content ) -{ - if(conn.connected()) - { - conn.disconnect(); - } - panel->setExperienceIds(content); - - return panel->setChangedCallback(boost::bind(&LLPanelRegionExperiences::listChanged, this)); -} - - - void LLPanelRegionExperiences::processResponse( const LLSD& content ) { - mAllowedConnection=processResponse(mAllowed, mAllowedConnection, content["allowed"]); - mBlockedConnection=processResponse(mBlocked, mBlockedConnection, content["blocked"]); - mTrustedConnection=processResponse(mTrusted, mTrustedConnection, content["trusted"]); - disableButton("apply_btn"); + mAllowed->setExperienceIds(content["allowed"]); + mBlocked->setExperienceIds(content["blocked"]); + mTrusted->setExperienceIds(content["trusted"]); } @@ -3629,7 +3698,14 @@ BOOL LLPanelRegionExperiences::sendUpdate() return TRUE; } -void LLPanelRegionExperiences::listChanged() +void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) { + strings_t str(3, std::string()); + gAgent.getID().toString(str[0]); + str[1].swap(llformat("%u", event_type)); + id.toString(str[2]); + + why does this happen twice + sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str); onChangeAnything(); } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index d2bbcbea61..365ca9ec65 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -62,6 +62,7 @@ class LLPanelEstateInfo; class LLPanelEstateCovenant; class LLPanelExperienceListEditor; class LLPanelExperiences; +class LLPanelRegionExperiences; class LLEventTimer; class LLEnvironmentSettings; @@ -92,6 +93,7 @@ public: static LLPanelEstateInfo* getPanelEstate(); static LLPanelEstateCovenant* getPanelCovenant(); static LLPanelRegionTerrainInfo* getPanelRegionTerrain(); + static LLPanelRegionExperiences* getPanelExperiences(); // from LLPanel virtual void refresh(); @@ -462,25 +464,21 @@ public: virtual BOOL sendUpdate(); static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content); - void listChanged(); bool refreshFromRegion(LLViewerRegion* region); void sendPurchaseRequest()const; -private: void processResponse( const LLSD& content ); - boost::signals2::connection processResponse( LLPanelExperienceListEditor* panel, boost::signals2::connection& connection, const LLSD& content); +private: void refreshRegionExperiences(); LLPanelExperienceListEditor* setupList(const char* control_name); static LLSD addIds( LLPanelExperienceListEditor* panel ); bool FilterExisting(const LLSD& experience ); + void itemChanged(U32 event_type, const LLUUID& id); LLPanelExperienceListEditor* mTrusted; - boost::signals2::connection mTrustedConnection; LLPanelExperienceListEditor* mAllowed; - boost::signals2::connection mAllowedConnection; LLPanelExperienceListEditor* mBlocked; - boost::signals2::connection mBlockedConnection; }; #endif diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 37394936ee..a4ceb3830c 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -45,7 +45,6 @@ LLPanelExperienceListEditor::LLPanelExperienceListEditor() :mItems(NULL) ,mProfile(NULL) ,mRemove(NULL) - ,mChangedCallback(NULL) ,mReadonly(false) { } @@ -76,6 +75,13 @@ void LLPanelExperienceListEditor::addExperienceIds( const uuid_vec_t& experience { mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); onItems(); + if(!mAddedCallback.empty()) + { + for(uuid_vec_t::const_iterator it = experience_ids.begin(); it != experience_ids.end(); ++it) + { + mAddedCallback(*it); + } + } } @@ -118,6 +124,7 @@ void LLPanelExperienceListEditor::onRemove() if((*it) != NULL) { mExperienceIds.erase((*it)->getValue()); + mRemovedCallback((*it)->getValue()); } } onItems(); @@ -167,10 +174,6 @@ void LLPanelExperienceListEditor::onItems() checkButtonsEnabled(); - if(mChangedCallback) - { - (*mChangedCallback)(); - } } void LLPanelExperienceListEditor::experienceDetailsCallback( LLHandle<LLPanelExperienceListEditor> panel, const LLSD& experience ) @@ -196,7 +199,6 @@ LLPanelExperienceListEditor::~LLPanelExperienceListEditor() { mPicker.get()->closeFloater(); } - delete mChangedCallback; } void LLPanelExperienceListEditor::loading() @@ -211,3 +213,13 @@ void LLPanelExperienceListEditor::setReadonly( bool val ) setCtrlsEnabled(!mReadonly); checkButtonsEnabled(); } + +boost::signals2::connection LLPanelExperienceListEditor::setAddedCallback( list_changed_signal_t::slot_type cb ) +{ + return mAddedCallback.connect(cb); +} + +boost::signals2::connection LLPanelExperienceListEditor::setRemovedCallback( list_changed_signal_t::slot_type cb ) +{ + return mRemovedCallback.connect(cb); +} diff --git a/indra/newview/llpanelexperiencelisteditor.h b/indra/newview/llpanelexperiencelisteditor.h index 4135f399ce..765db9acbc 100644 --- a/indra/newview/llpanelexperiencelisteditor.h +++ b/indra/newview/llpanelexperiencelisteditor.h @@ -39,7 +39,7 @@ class LLPanelExperienceListEditor : public LLPanel { public: - typedef boost::signals2::signal<void () > list_changed_signal_t; + typedef boost::signals2::signal<void (const LLUUID&) > list_changed_signal_t; // filter function for experiences, return true if the experience should be hidden. typedef boost::function<bool (const LLSD&)> filter_function; typedef std::vector<filter_function> filter_list; @@ -55,12 +55,9 @@ public: void addExperienceIds(const uuid_vec_t& experience_ids); void addExperience(const LLUUID& id); - - boost::signals2::connection setChangedCallback(list_changed_signal_t::slot_type cb ) - { - if (!mChangedCallback) mChangedCallback = new list_changed_signal_t(); - return mChangedCallback->connect(cb); - } + + boost::signals2::connection setAddedCallback(list_changed_signal_t::slot_type cb ); + boost::signals2::connection setRemovedCallback(list_changed_signal_t::slot_type cb ); bool getReadonly() const { return mReadonly; } void setReadonly(bool val); @@ -87,7 +84,8 @@ private: LLButton* mRemove; LLButton* mProfile; PickerHandle mPicker; - list_changed_signal_t* mChangedCallback; + list_changed_signal_t mAddedCallback; + list_changed_signal_t mRemovedCallback; LLUUID mKey; bool mReadonly; diff --git a/indra/newview/skins/default/xui/en/panel_experience_info.xml b/indra/newview/skins/default/xui/en/panel_experience_info.xml index 268e7462c1..70d8a4fc64 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_info.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_info.xml @@ -111,7 +111,7 @@ 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. " + value="" width="293"/> </layout_panel> <layout_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 b7602f8fd3..57c87d197f 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -63,17 +63,5 @@ class="panel_experience_list_editor" filename="panel_experience_list_editor.xml"/> </layout_panel> - <layout_panel - height="30" - min_height="30" - max_height="30" - width="530"> - <button - layout="topleft" - width="85" - left="3" - label="Apply" - name="apply_btn"/> - </layout_panel> </layout_stack> </panel> -- cgit v1.2.3 From 3320709c2a93b5101261e708e0220cfa38683d19 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 16 Apr 2014 16:01:08 -0700 Subject: Removed filtering of existing estate experiences from the estate exxperiences panel --- indra/newview/llfloaterregioninfo.cpp | 29 ++++++++--------------------- indra/newview/llfloaterregioninfo.h | 1 - 2 files changed, 8 insertions(+), 22 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 0bacb0710f..28f5788054 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -1399,7 +1399,7 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) dispatch.addHandler(name, &set_access); - name.assign("setexperiences"); + name.assign("setexperience"); static LLDispatchSetEstateExperience set_experience; dispatch.addHandler(name, &set_experience); @@ -2919,7 +2919,7 @@ LLSD LLDispatchSetEstateExperience::getIDs( sparam_t::const_iterator it, sparam_ LLUUID id; while(count--> 0) { - memcpy(id.mData, (*(++it)).data(), UUID_BYTES); + memcpy(id.mData, (*(it++)).data(), UUID_BYTES); idList.append(id); } return idList; @@ -2947,14 +2947,14 @@ bool LLDispatchSetEstateExperience::operator()( ++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10); LLUUID id; - S32 num_blocked = strtol((*(++it)).c_str(), NULL, 10); - S32 num_trusted = strtol((*(++it)).c_str(), NULL, 10); - S32 num_allowed = strtol((*(++it)).c_str(), NULL, 10); + S32 num_blocked = strtol((*(it++)).c_str(), NULL, 10); + S32 num_trusted = strtol((*(it++)).c_str(), NULL, 10); + S32 num_allowed = strtol((*(it++)).c_str(), NULL, 10); LLSD ids = LLSD::emptyMap() - .with("blocked", getIDs(it, strings.end(), num_blocked)) - .with("trusted", getIDs(it, strings.end(), num_trusted)) - .with("allowed", getIDs(it, strings.end(), num_allowed)); + .with("blocked", getIDs(it, strings.end(), num_blocked)) + .with("trusted", getIDs(it + (num_blocked), strings.end(), num_trusted)) + .with("allowed", getIDs(it + (num_blocked+num_trusted), strings.end(), num_allowed)); panel->processResponse(ids); @@ -3626,14 +3626,6 @@ void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> h } } -bool LLPanelRegionExperiences::FilterExisting(const LLSD& experience) -{ - LLUUID id = experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); - return mAllowed->getExperienceIds().find(id) != mAllowed->getExperienceIds().end() || - mBlocked->getExperienceIds().find(id) != mBlocked->getExperienceIds().end() || - mTrusted->getExperienceIds().find(id) != mTrusted->getExperienceIds().end() ; -} - bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) { @@ -3643,8 +3635,6 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mAllowed->setReadonly(!allow_modify); // remove grid-wide experiences mAllowed->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); - // and stuff only in another list - mAllowed->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); mBlocked->loading(); mBlocked->setReadonly(!allow_modify); @@ -3652,11 +3642,9 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); // but not privileged ones mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); - mBlocked->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); mTrusted->loading(); mTrusted->setReadonly(!allow_modify); - mTrusted->addFilter(boost::bind(&LLPanelRegionExperiences::FilterExisting, this, _1)); std::string url = region->getCapability("RegionExperiences"); if (!url.empty()) @@ -3705,7 +3693,6 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) str[1].swap(llformat("%u", event_type)); id.toString(str[2]); - why does this happen twice sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str); onChangeAnything(); } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 365ca9ec65..7b3da0697e 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -472,7 +472,6 @@ private: LLPanelExperienceListEditor* setupList(const char* control_name); static LLSD addIds( LLPanelExperienceListEditor* panel ); - bool FilterExisting(const LLSD& experience ); void itemChanged(U32 event_type, const LLUUID& id); -- cgit v1.2.3 From a58d31f6029ab6907a3c89a9ae826fe648c7910e Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 16 Apr 2014 17:39:06 -0700 Subject: Fix linux build --- indra/newview/llfloaterregioninfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 28f5788054..2522b7bf18 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3690,7 +3690,7 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) { strings_t str(3, std::string()); gAgent.getID().toString(str[0]); - str[1].swap(llformat("%u", event_type)); + str[1] = llformat("%u", event_type); id.toString(str[2]); sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str); -- cgit v1.2.3 From 54a90871906bcb72f9cd216ea437d59893b099aa Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Sat, 19 Apr 2014 02:56:24 +0100 Subject: Show 'No results' in Experiences Search for ACME-1313 --- indra/newview/llfloaterexperiencepicker.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index b82257ee56..f68bf7f9a6 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -416,8 +416,16 @@ void LLFloaterExperiencePicker::filterContent() if (search_results->isEmpty()) { LLStringUtil::format_map_t map; - map["[TEXT]"] = childGetText(TEXT_EDIT); - getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map)); + std::string search_text = childGetText(TEXT_EDIT); + map["[TEXT]"] = search_text; + if (search_text.empty()) + { + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); + } + else + { + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map)); + } search_results->setEnabled(false); getChildView(BTN_OK)->setEnabled(false); getChildView(BTN_PROFILE)->setEnabled(false); -- cgit v1.2.3 From 4cb9fa2954cbce36d7d02624cd4ba37cc3f969b5 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 22 Apr 2014 00:52:45 +0100 Subject: Sorted Experience Events with most recent first for ACME-1431 --- indra/newview/llpanelexperiencelog.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp index 0c9f57b336..5d049beec3 100644 --- a/indra/newview/llpanelexperiencelog.cpp +++ b/indra/newview/llpanelexperiencelog.cpp @@ -112,10 +112,19 @@ void LLPanelExperienceLog::refresh() int itemsToSkip = mPageSize*mCurrentPage; int items = 0; bool moreItems = false; - + + LLSD daysArray = LLSD::emptyArray(); for(LLSD::map_const_iterator day = events.beginMap(); day != events.endMap() ; ++day) { - const LLSD& dayArray = day->second; + LLSD dayMap = LLSD::emptyMap(); + dayMap["day"] = day->first; + dayMap["data"] = day->second; + daysArray.append(dayMap); + } + + for(LLSD::reverse_array_iterator day = daysArray.rbeginArray(); day != daysArray.rendArray() ; ++day) + { + const LLSD& dayArray = day->get("data"); int size = dayArray.size(); if(itemsToSkip > size) { @@ -127,7 +136,7 @@ void LLPanelExperienceLog::refresh() moreItems = true; break; } - for(int i = itemsToSkip ; i < dayArray.size(); i++) + for(int i = dayArray.size() - itemsToSkip - 1; i >= 0; i--) { if(items >= mPageSize) { @@ -147,7 +156,7 @@ void LLPanelExperienceLog::refresh() LLSD& columns = item["columns"]; columns[0]["column"] = "time"; - columns[0]["value"] = day->first+event["Time"].asString(); + columns[0]["value"] = day->get("day").asString()+event["Time"].asString(); columns[1]["column"] = "event"; columns[1]["value"] = LLExperienceLog::getPermissionString(event, "ExperiencePermissionShort"); columns[2]["column"] = "experience_name"; -- cgit v1.2.3 From 6c6d473d32b29142cc9bf08560473149f55b8a32 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 22 Apr 2014 23:12:43 +0100 Subject: Changed to iterating backwards for ACME-1431 --- indra/newview/llpanelexperiencelog.cpp | 88 ++++++++++++++++------------------ 1 file changed, 42 insertions(+), 46 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp index 5d049beec3..df03ef7526 100644 --- a/indra/newview/llpanelexperiencelog.cpp +++ b/indra/newview/llpanelexperiencelog.cpp @@ -113,60 +113,56 @@ void LLPanelExperienceLog::refresh() int items = 0; bool moreItems = false; - LLSD daysArray = LLSD::emptyArray(); - for(LLSD::map_const_iterator day = events.beginMap(); day != events.endMap() ; ++day) + if (!events.emptyMap()) { - LLSD dayMap = LLSD::emptyMap(); - dayMap["day"] = day->first; - dayMap["data"] = day->second; - daysArray.append(dayMap); - } - - for(LLSD::reverse_array_iterator day = daysArray.rbeginArray(); day != daysArray.rendArray() ; ++day) - { - const LLSD& dayArray = day->get("data"); - int size = dayArray.size(); - if(itemsToSkip > size) + LLSD::map_const_iterator day = events.endMap(); + do { - itemsToSkip -= size; - continue; - } - if(items >= mPageSize && size > 0) - { - moreItems = true; - break; - } - for(int i = dayArray.size() - itemsToSkip - 1; i >= 0; i--) - { - if(items >= mPageSize) + --day; + const LLSD& dayArray = day->second; + int size = dayArray.size(); + if(itemsToSkip > size) + { + itemsToSkip -= size; + continue; + } + if(items >= mPageSize && size > 0) { moreItems = true; break; } - const LLSD event = dayArray[i]; - LLUUID id = event[LLExperienceCache::EXPERIENCE_ID].asUUID(); - const LLSD& experience = LLExperienceCache::get(id); - if(experience.isUndefined()){ - waiting = true; - waiting_id = id; - } - if(!waiting) + for(int i = dayArray.size() - itemsToSkip - 1; i >= 0; i--) { - item["id"] = event; - - LLSD& columns = item["columns"]; - columns[0]["column"] = "time"; - columns[0]["value"] = day->get("day").asString()+event["Time"].asString(); - columns[1]["column"] = "event"; - columns[1]["value"] = LLExperienceLog::getPermissionString(event, "ExperiencePermissionShort"); - columns[2]["column"] = "experience_name"; - columns[2]["value"] = experience[LLExperienceCache::NAME].asString(); - columns[3]["column"] = "object_name"; - columns[3]["value"] = event["ObjectName"].asString(); - mEventList->addElement(item); + if(items >= mPageSize) + { + moreItems = true; + break; + } + const LLSD event = dayArray[i]; + LLUUID id = event[LLExperienceCache::EXPERIENCE_ID].asUUID(); + const LLSD& experience = LLExperienceCache::get(id); + if(experience.isUndefined()){ + waiting = true; + waiting_id = id; + } + if(!waiting) + { + item["id"] = event; + + LLSD& columns = item["columns"]; + columns[0]["column"] = "time"; + columns[0]["value"] = day->first+event["Time"].asString(); + columns[1]["column"] = "event"; + columns[1]["value"] = LLExperienceLog::getPermissionString(event, "ExperiencePermissionShort"); + columns[2]["column"] = "experience_name"; + columns[2]["value"] = experience[LLExperienceCache::NAME].asString(); + columns[3]["column"] = "object_name"; + columns[3]["value"] = event["ObjectName"].asString(); + mEventList->addElement(item); + } + ++items; } - ++items; - } + } while (day != events.beginMap()); } if(waiting) { -- cgit v1.2.3 From 90a42d43b255eca082c283e5a0dfabd4ebfce508 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 23 Apr 2014 00:27:32 +0100 Subject: Clear abuse details before adding experience id for ACME-1421 --- indra/newview/llfloaterreporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 27e26d4fda..6b4b584fa9 100755 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -240,7 +240,7 @@ void LLFloaterReporter::getExperienceInfo(const LLUUID& experience_id) if(experience.isDefined()) { setFromAvatarID(experience[LLExperienceCache::AGENT_ID]); - desc << "\nExperience id: " << mExperienceID; + desc << "Experience id: " << mExperienceID; } else { @@ -248,7 +248,7 @@ void LLFloaterReporter::getExperienceInfo(const LLUUID& experience_id) } LLUICtrl* details = getChild<LLUICtrl>("details_edit"); - details->setValue(details->getValue().asString()+desc.str()); + details->setValue(desc.str()); } } -- cgit v1.2.3 From 2206f97d8efb2683e6c0d759a8549de9de67a054 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 23 Apr 2014 22:19:20 +0100 Subject: Added SEARCH tab to Experience floater for ACME-1420 --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloaterexperiences.cpp | 3 +- indra/newview/llpanelexperiencepicker.cpp | 353 +++++++++++++++++++++ indra/newview/llpanelexperiencepicker.h | 88 +++++ .../default/xui/en/panel_experience_search.xml | 152 +++++++++ 5 files changed, 597 insertions(+), 1 deletion(-) create mode 100644 indra/newview/llpanelexperiencepicker.cpp create mode 100644 indra/newview/llpanelexperiencepicker.h create mode 100644 indra/newview/skins/default/xui/en/panel_experience_search.xml (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 0a6f935930..fce9b16129 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -407,6 +407,7 @@ set(viewer_SOURCE_FILES llpaneleditwearable.cpp llpanelexperiencelisteditor.cpp llpanelexperiencelog.cpp + llpanelexperiencepicker.cpp llpanelexperiences.cpp llpanelface.cpp llpanelgenerictip.cpp @@ -997,6 +998,7 @@ set(viewer_HEADER_FILES llpaneleditwearable.h llpanelexperiencelisteditor.h llpanelexperiencelog.h + llpanelexperiencepicker.h llpanelexperiences.h llpanelface.h llpanelgenerictip.h diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 1654419826..51e3996f3f 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -36,7 +36,7 @@ #include "llevents.h" #include "llnotificationsutil.h" #include "llpanelexperiencelog.h" - +#include "llpanelexperiencepicker.h" #define SHOW_RECENT_TAB (0) @@ -106,6 +106,7 @@ LLPanelExperiences* LLFloaterExperiences::addTab(const std::string& name, bool s BOOL LLFloaterExperiences::postBuild() { + getChild<LLTabContainer>("xp_tabs")->addTabPanel(new LLPanelExperiencePicker()); addTab("Allowed_Experiences_Tab", true); addTab("Blocked_Experiences_Tab", false); addTab("Admin_Experiences_Tab", false); diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp new file mode 100644 index 0000000000..4e2ae585cd --- /dev/null +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -0,0 +1,353 @@ +/** +* @file llpanelexperiencepicker.cpp +* @brief Implementation of llpanelexperiencepicker +* @author dolphin@lindenlab.com +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelexperiencepicker.h" + + +#include "lllineeditor.h" +#include "llfloaterreg.h" +#include "llscrolllistctrl.h" +#include "llviewerregion.h" +#include "llagent.h" +#include "llexperiencecache.h" +#include "llslurl.h" +#include "llavatarnamecache.h" +#include "llfloaterexperienceprofile.h" +#include "llcombobox.h" +#include "llviewercontrol.h" +#include "lldraghandle.h" + +#define BTN_FIND "find" +#define BTN_PROFILE "profile_btn" +#define TEXT_EDIT "edit" +#define TEXT_MATURITY "maturity" +#define LIST_RESULTS "search_results" +#define PANEL_SEARCH "search_panel" + +const static std::string columnSpace = " "; + +class LLExperienceSearchResponder : public LLHTTPClient::Responder +{ +public: + LLUUID mQueryID; + LLHandle<LLPanelExperiencePicker> mParent; + + LLExperienceSearchResponder(const LLUUID& id, const LLHandle<LLPanelExperiencePicker>& parent) : mQueryID(id), mParent(parent) { } + + void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + if(mParent.isDead()) + return; + + LLPanelExperiencePicker* panel =mParent.get(); + if (panel) + { + panel->processResponse(mQueryID, content); + } + } + else + { + llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl; + + } + } +}; + +LLPanelExperiencePicker::LLPanelExperiencePicker() + :LLPanel() +{ + buildFromFile("panel_experience_search.xml"); + setDefaultFilters(); +} + +LLPanelExperiencePicker::~LLPanelExperiencePicker() +{ + gFocusMgr.releaseFocusIfNeeded( this ); +} + +BOOL LLPanelExperiencePicker::postBuild() +{ + getChild<LLLineEditor>(TEXT_EDIT)->setKeystrokeCallback( boost::bind(&LLPanelExperiencePicker::editKeystroke, this, _1, _2),NULL); + + childSetAction(BTN_FIND, boost::bind(&LLPanelExperiencePicker::onBtnFind, this)); + getChildView(BTN_FIND)->setEnabled(FALSE); + + LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS); + searchresults->setDoubleClickCallback( boost::bind(&LLPanelExperiencePicker::onBtnProfile, this)); + searchresults->setCommitCallback(boost::bind(&LLPanelExperiencePicker::onList, this)); + getChildView(LIST_RESULTS)->setEnabled(FALSE); + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); + + childSetAction(BTN_PROFILE, boost::bind(&LLPanelExperiencePicker::onBtnProfile, this)); + getChildView(BTN_PROFILE)->setEnabled(FALSE); + + getChild<LLComboBox>(TEXT_MATURITY)->setCurrentByIndex(2); + getChild<LLComboBox>(TEXT_MATURITY)->setCommitCallback(boost::bind(&LLPanelExperiencePicker::onMaturity, this)); + getChild<LLUICtrl>(TEXT_EDIT)->setFocus(TRUE); + + LLPanel* search_panel = getChild<LLPanel>(PANEL_SEARCH); + if (search_panel) + { + // Start searching when Return is pressed in the line editor. + search_panel->setDefaultBtn(BTN_FIND); + } + return TRUE; +} + +void LLPanelExperiencePicker::editKeystroke( class LLLineEditor* caller, void* user_data ) +{ + getChildView(BTN_FIND)->setEnabled(caller->getText().size() > 0); +} + +void LLPanelExperiencePicker::onBtnFind() +{ + find(); +} + +void LLPanelExperiencePicker::onList() +{ + bool enabled = isSelectButtonEnabled(); + + enabled = enabled && getChild<LLScrollListCtrl>(LIST_RESULTS)->getNumSelected() == 1; + getChildView(BTN_PROFILE)->setEnabled(enabled); +} + +void LLPanelExperiencePicker::find() +{ + std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); + mQueryID.generate(); + std::string url; + url.reserve(128+text.size()); + + LLViewerRegion* region = gAgent.getRegion(); + url = region->getCapability("FindExperienceByName"); + if (!url.empty()) + { + url+="?query="; + url+=LLURI::escape(text); + LLHTTPClient::get(url, new LLExperienceSearchResponder(mQueryID, getDerivedHandle<LLPanelExperiencePicker>())); + + } + + + getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems(); + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching")); + + getChildView(BTN_PROFILE)->setEnabled(FALSE); +} + + +bool LLPanelExperiencePicker::isSelectButtonEnabled() +{ + LLScrollListCtrl* list=getChild<LLScrollListCtrl>(LIST_RESULTS); + return list->getFirstSelectedIndex() >=0; +} + +void LLPanelExperiencePicker::getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ) +{ + std::vector<LLScrollListItem*> items = results->getAllSelected(); + for(std::vector<LLScrollListItem*>::iterator it = items.begin(); it != items.end(); ++it) + { + LLScrollListItem* item = *it; + if (item->getUUID().notNull()) + { + experience_ids.push_back(item->getUUID()); + } + } +} + +void LLPanelExperiencePicker::setAllowMultiple( bool allow_multiple ) +{ + getChild<LLScrollListCtrl>(LIST_RESULTS)->setAllowMultipleSelection(allow_multiple); +} + + +void name_callback(const LLHandle<LLPanelExperiencePicker>& floater, const LLUUID& experience_id, const LLUUID& agent_id, const LLAvatarName& av_name) +{ + if(floater.isDead()) + return; + LLPanelExperiencePicker* picker = floater.get(); + LLScrollListCtrl* search_results = picker->getChild<LLScrollListCtrl>(LIST_RESULTS); + + LLScrollListItem* item = search_results->getItem(experience_id); + if(!item) + return; + + item->getColumn(2)->setValue(columnSpace+av_name.getDisplayName()); + +} + +void LLPanelExperiencePicker::processResponse( const LLUUID& query_id, const LLSD& content ) +{ + if(query_id != mQueryID) + { + return; + } + + mResponse = content; + + const LLSD& experiences=mResponse["experience_keys"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for ( ; it != experiences.endArray(); ++it) + { + LLExperienceCache::insert(*it); + } + + filterContent(); + +} + +void LLPanelExperiencePicker::onBtnProfile() +{ + LLScrollListItem* item = getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelected(); + if(item) + { + LLFloaterReg::showInstance("experience_profile", item->getUUID(), true); + } +} + +std::string LLPanelExperiencePicker::getMaturityString(int maturity) +{ + if(maturity <= SIM_ACCESS_PG) + { + return getString("maturity_icon_general"); + } + else if(maturity <= SIM_ACCESS_MATURE) + { + return getString("maturity_icon_moderate"); + } + return getString("maturity_icon_adult"); +} + +void LLPanelExperiencePicker::filterContent() +{ + LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>(LIST_RESULTS); + + const LLSD& experiences=mResponse["experience_keys"]; + + search_results->deleteAllItems(); + + LLSD item; + LLSD::array_const_iterator it = experiences.beginArray(); + for ( ; it != experiences.endArray(); ++it) + { + const LLSD& experience = *it; + + if(isExperienceHidden(experience)) + continue; + + item["id"]=experience[LLExperienceCache::EXPERIENCE_ID]; + LLSD& columns = item["columns"]; + columns[0]["column"] = "maturity"; + columns[0]["value"] = getMaturityString(experience[LLExperienceCache::MATURITY].asInteger()); + columns[0]["type"]="icon"; + columns[0]["halign"]="right"; + columns[1]["column"] = "experience_name"; + columns[1]["value"] = columnSpace+experience[LLExperienceCache::NAME].asString(); + columns[2]["column"] = "owner"; + columns[2]["value"] = columnSpace+getString("loading"); + search_results->addElement(item); + LLAvatarNameCache::get(experience[LLExperienceCache::AGENT_ID], boost::bind(name_callback, getDerivedHandle<LLPanelExperiencePicker>(), experience[LLExperienceCache::EXPERIENCE_ID], _1, _2)); + } + + if (search_results->isEmpty()) + { + LLStringUtil::format_map_t map; + std::string search_text = childGetText(TEXT_EDIT); + map["[TEXT]"] = search_text; + if (search_text.empty()) + { + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); + } + else + { + getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map)); + } + search_results->setEnabled(false); + getChildView(BTN_PROFILE)->setEnabled(false); + } + else + { + search_results->setEnabled(true); + search_results->sortByColumnIndex(1, TRUE); + std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); + if (!search_results->selectItemByLabel(text, TRUE, 1)) + { + search_results->selectFirstItem(); + } + onList(); + search_results->setFocus(TRUE); + } +} + +void LLPanelExperiencePicker::onMaturity() +{ + if(mResponse.has("experience_keys") && mResponse["experience_keys"].beginArray() != mResponse["experience_keys"].endArray()) + { + filterContent(); + } +} + +bool LLPanelExperiencePicker::isExperienceHidden( const LLSD& experience) const +{ + bool hide=false; + filter_list::const_iterator it = mFilters.begin(); + for(/**/;it != mFilters.end(); ++it) + { + if((*it)(experience)){ + return true; + } + } + + return hide; +} + +bool LLPanelExperiencePicker::FilterOverRating( const LLSD& experience ) +{ + int maturity = getChild<LLComboBox>(TEXT_MATURITY)->getSelectedValue().asInteger(); + return experience[LLExperienceCache::MATURITY].asInteger() > maturity; +} + +bool LLPanelExperiencePicker::FilterWithProperty( const LLSD& experience, S32 prop) +{ + return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0; +} + +bool LLPanelExperiencePicker::FilterWithoutProperty( const LLSD& experience, S32 prop ) +{ + return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == 0; +} + +void LLPanelExperiencePicker::setDefaultFilters() +{ + mFilters.clear(); + addFilter(boost::bind(&LLPanelExperiencePicker::FilterOverRating, this, _1)); +} diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h new file mode 100644 index 0000000000..166639a14e --- /dev/null +++ b/indra/newview/llpanelexperiencepicker.h @@ -0,0 +1,88 @@ +/** +* @file llpanelexperiencepicker.h +* @brief Header file for llpanelexperiencepicker +* @author dolphin@lindenlab.com +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, 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_LLPANELEXPERIENCEPICKER_H +#define LL_LLPANELEXPERIENCEPICKER_H + +#include "llpanel.h" + +class LLScrollListCtrl; +class LLLineEditor; + + +class LLPanelExperiencePicker : public LLPanel +{ +public: + friend class LLExperienceSearchResponder; + + // The callback function will be called with an avatar name and UUID. + typedef boost::function<void (const uuid_vec_t&)> select_callback_t; + // filter function for experiences, return true if the experience should be hidden. + typedef boost::function<bool (const LLSD&)> filter_function; + typedef std::vector<filter_function> filter_list; + + LLPanelExperiencePicker(); + virtual ~LLPanelExperiencePicker(); + + BOOL postBuild(); + + void addFilter(filter_function func){mFilters.push_back(func);} + template <class IT> + void addFilters(IT begin, IT end){mFilters.insert(mFilters.end(), begin, end);} + void setDefaultFilters(); + + static bool FilterWithProperty(const LLSD& experience, S32 prop); + static bool FilterWithoutProperty(const LLSD& experience, S32 prop); + bool FilterOverRating(const LLSD& experience); + +private: + void editKeystroke(LLLineEditor* caller, void* user_data); + + void onBtnFind(); + void onBtnProfile(); + void onList(); + void onMaturity(); + + void getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ); + void setAllowMultiple(bool allow_multiple); + + + void find(); + bool isSelectButtonEnabled(); + void processResponse( const LLUUID& query_id, const LLSD& content ); + + void filterContent(); + bool isExperienceHidden(const LLSD& experience) const ; + std::string getMaturityString(int maturity); + + + select_callback_t mSelectionCallback; + filter_list mFilters; + LLUUID mQueryID; + LLSD mResponse; +}; + +#endif // LL_LLPANELEXPERIENCEPICKER_H diff --git a/indra/newview/skins/default/xui/en/panel_experience_search.xml b/indra/newview/skins/default/xui/en/panel_experience_search.xml new file mode 100644 index 0000000000..5593cef591 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_experience_search.xml @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + layout="topleft" + top="3" + left="3" + width="350" + height="350" + label="SEARCH" + bg_opaque_color="0 0.5 0 0.3" + follows="all"> + + <string + name="not_found"> + '[TEXT]' not found + </string> + <string + name="no_results"> + No results + </string> + <string + name="searching"> + Searching... + </string> + <string + name="loading"> + Loading... + </string> + <string + name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string + name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string + name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel + follows="all" + left="5" + right="-3" + bottom="-2" + top="18" + name="search_panel"> + <text + left="0" + follows="top|left|right" + right="-1"> + Enter part of the name: + </text> + <line_editor + left="0" + follows="left|top|right" + name="edit" + height="18" + right="-60"/> + <button label="Go" + follows="top|right" + top_pad="-18" + left_pad="2" + right="-1" + height="18" + name="find"/> + <text + top_pad="6" + left="0" + follows="top|left" + width="180"> + Max Content Rating: + </text> + <icons_combo_box + follows="left|top" + height="20" + label="Moderate" + layout="topleft" + name="maturity" + top_pad="-13" + left_pad="0" + right="-1"> + <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> + <scroll_list + draw_heading="true" + left="0" + right="-1" + height="239" + top_pad="4" + follows="all" + column_padding="5" + can_resize="true" + name="search_results"> + <columns + halign="center" + width="24" + name="maturity" + label=""/> + <columns + user_resize="true" + name="experience_name" + label="Name"/> + <columns + user_resize="true" + name="owner" + label="Owner"/> + </scroll_list> + + <button + follows="left|bottom" + height="23" + label="View Profile" + name="profile_btn" + top_pad="3" + left="0" + width="100"/> + </panel> +</panel> -- cgit v1.2.3 From 80fcd6d9d42377fc09928eb99f26e6287c4b544d Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 24 Apr 2014 14:00:15 -0700 Subject: If an agent fails to teleport into a region with trusted experiences and they pass all other checks then a list of experiences will be presented to them. --- indra/newview/llviewermessage.cpp | 122 ++++++++++++--------- .../newview/skins/default/xui/en/notifications.xml | 11 ++ 2 files changed, 81 insertions(+), 52 deletions(-) (limited to 'indra') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index c7d3fe948d..118fba94e0 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5797,84 +5797,102 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock) // some of the server notifications need special handling. This is where we do that. bool handle_teleport_access_blocked(LLSD& llsdBlock) { - std::string notificationID("TeleportEntryAccessBlocked"); - U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger()); - std::string regionMaturity = LLViewerRegion::accessToString(regionAccess); - LLStringUtil::toLower(regionMaturity); - llsdBlock["REGIONMATURITY"] = regionMaturity; - bool returnValue = false; - LLNotificationPtr maturityLevelNotification; - std::string notifySuffix = "_Notify"; - if (regionAccess == SIM_ACCESS_MATURE) + if(llsdBlock.has("_region_access")) { - if (gAgent.isTeen()) - { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); - returnValue = true; - - notifySuffix = "_NotifyAdultsOnly"; - } - else if (gAgent.prefersPG()) + std::string notificationID("TeleportEntryAccessBlocked"); + U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger()); + std::string regionMaturity = LLViewerRegion::accessToString(regionAccess); + LLStringUtil::toLower(regionMaturity); + llsdBlock["REGIONMATURITY"] = regionMaturity; + + LLNotificationPtr maturityLevelNotification; + std::string notifySuffix = "_Notify"; + if (regionAccess == SIM_ACCESS_MATURE) { - if (gAgent.hasRestartableFailedTeleportRequest()) + if (gAgent.isTeen()) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + gAgent.clearTeleportRequest(); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); returnValue = true; + + notifySuffix = "_NotifyAdultsOnly"; + } + else if (gAgent.prefersPG()) + { + if (gAgent.hasRestartableFailedTeleportRequest()) + { + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + returnValue = true; + } + else + { + gAgent.clearTeleportRequest(); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + returnValue = true; + } } else { gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); returnValue = true; } } - else + else if (regionAccess == SIM_ACCESS_ADULT) { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); - returnValue = true; - } - } - else if (regionAccess == SIM_ACCESS_ADULT) - { - if (!gAgent.isAdult()) - { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); - returnValue = true; - - notifySuffix = "_NotifyAdultsOnly"; - } - else if (gAgent.prefersPG() || gAgent.prefersMature()) - { - if (gAgent.hasRestartableFailedTeleportRequest()) + if (!gAgent.isAdult()) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + gAgent.clearTeleportRequest(); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); returnValue = true; + + notifySuffix = "_NotifyAdultsOnly"; + } + else if (gAgent.prefersPG() || gAgent.prefersMature()) + { + if (gAgent.hasRestartableFailedTeleportRequest()) + { + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + returnValue = true; + } + else + { + gAgent.clearTeleportRequest(); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + returnValue = true; + } } else { gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); returnValue = true; } + } + + if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored()) + { + // Given a simple notification if no maturityLevelNotification is set or it is ignore + LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock); } - else + } + if(llsdBlock.has("trusted_experiences")) + { + std::ostringstream str; + const LLSD& experiences = llsdBlock["trusted_experiences"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for(/**/; it != experiences.endArray(); ++it) { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); - returnValue = true; + str<<LLSLURL("experience", it->asUUID(), "profile").getSLURLString() << "\n"; } + std::string str_list = str.str(); + if(!str_list.empty()) + { + LLNotificationsUtil::add("TrustedExperiencesAvailable", LLSD::emptyMap().with("EXPERIENCE_LIST", (LLSD)str_list)); + returnValue = true; } - - if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored()) - { - // Given a simple notification if no maturityLevelNotification is set or it is ignore - LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock); } - return returnValue; } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index d20d94d619..5e966395dc 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7070,6 +7070,17 @@ Unable to acquire a new experience: </form> </notification> + <notification + icon="notify.tga" + name="TrustedExperiencesAvailable" + persist="false" + type="notify"> +You do not have access to this destination. You may be allowed into the region by Accepting an experience below: + +[EXPERIENCE_LIST] + </notification> + + <notification icon="notify.tga" name="ExperienceEvent" -- cgit v1.2.3 From 446a3193b1f2932ed14a16216bcf65dc30889612 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 24 Apr 2014 23:43:54 +0100 Subject: Refactored to share code between experience search floater and panel for ACME-1420 --- indra/newview/llfloaterexperiencepicker.cpp | 372 +-------------------- indra/newview/llfloaterexperiencepicker.h | 35 +- indra/newview/llfloaterregioninfo.cpp | 8 +- indra/newview/llpanelexperiencepicker.cpp | 60 +++- indra/newview/llpanelexperiencepicker.h | 5 +- .../default/xui/en/floater_experience_search.xml | 156 +-------- indra/newview/skins/default/xui/en/menu_viewer.xml | 7 - .../default/xui/en/panel_experience_search.xml | 30 +- 8 files changed, 100 insertions(+), 573 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index f68bf7f9a6..4a484463e8 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -42,46 +42,8 @@ #include "llcombobox.h" #include "llviewercontrol.h" #include "lldraghandle.h" +#include "llpanelexperiencepicker.h" -#define BTN_FIND "find" -#define BTN_OK "ok_btn" -#define BTN_CANCEL "cancel_btn" -#define BTN_PROFILE "profile_btn" -#define TEXT_EDIT "edit" -#define TEXT_MATURITY "maturity" -#define LIST_RESULTS "search_results" -#define PANEL_SEARCH "search_panel" - -const static std::string columnSpace = " "; - -class LLExperiencePickerResponder : public LLHTTPClient::Responder -{ -public: - LLUUID mQueryID; - LLHandle<LLFloaterExperiencePicker> mParent; - - LLExperiencePickerResponder(const LLUUID& id, const LLHandle<LLFloaterExperiencePicker>& parent) : mQueryID(id), mParent(parent) { } - - void completed(U32 status, const std::string& reason, const LLSD& content) - { - if (isGoodStatus(status)) - { - if(mParent.isDead()) - return; - - LLFloaterExperiencePicker* floater =mParent.get(); - if (floater) - { - floater->processResponse(mQueryID, content); - } - } - else - { - llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl; - - } - } -}; LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect, LLView * frustumOrigin ) { LLFloaterExperiencePicker* floater = @@ -94,7 +56,7 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca floater->mSelectionCallback = callback; floater->mCloseOnSelect = closeOnSelect; - floater->setAllowMultiple(allow_multiple); + floater->mAllowMultiple = allow_multiple; if(frustumOrigin) { @@ -104,7 +66,6 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca return floater; } - void LLFloaterExperiencePicker::drawFrustum() { if(mFrustumOrigin.get()) @@ -170,13 +131,12 @@ void LLFloaterExperiencePicker::draw() LLFloaterExperiencePicker::LLFloaterExperiencePicker( const LLSD& key ) :LLFloater(key) - ,mContextConeOpacity (0.f) + ,mSearchPanel(NULL) + ,mContextConeOpacity(0.f) ,mContextConeInAlpha(0.f) ,mContextConeOutAlpha(0.f) ,mContextConeFadeTime(0.f) { - setDefaultFilters(); - mContextConeInAlpha = gSavedSettings.getF32("ContextConeInAlpha"); mContextConeOutAlpha = gSavedSettings.getF32("ContextConeOutAlpha"); mContextConeFadeTime = gSavedSettings.getF32("ContextConeFadeTime"); @@ -187,324 +147,14 @@ LLFloaterExperiencePicker::~LLFloaterExperiencePicker() gFocusMgr.releaseFocusIfNeeded( this ); } - - BOOL LLFloaterExperiencePicker::postBuild() { - getChild<LLLineEditor>(TEXT_EDIT)->setKeystrokeCallback( boost::bind(&LLFloaterExperiencePicker::editKeystroke, this, _1, _2),NULL); - - childSetAction(BTN_FIND, boost::bind(&LLFloaterExperiencePicker::onBtnFind, this)); - getChildView(BTN_FIND)->setEnabled(FALSE); - - LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS); - searchresults->setDoubleClickCallback( boost::bind(&LLFloaterExperiencePicker::onBtnSelect, this)); - searchresults->setCommitCallback(boost::bind(&LLFloaterExperiencePicker::onList, this)); - getChildView(LIST_RESULTS)->setEnabled(FALSE); - getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); - - childSetAction(BTN_OK, boost::bind(&LLFloaterExperiencePicker::onBtnSelect, this)); - getChildView(BTN_OK)->setEnabled(FALSE); - childSetAction(BTN_CANCEL, boost::bind(&LLFloaterExperiencePicker::onBtnClose, this)); - childSetAction(BTN_PROFILE, boost::bind(&LLFloaterExperiencePicker::onBtnProfile, this)); - getChildView(BTN_PROFILE)->setEnabled(FALSE); - - getChild<LLComboBox>(TEXT_MATURITY)->setCurrentByIndex(2); - getChild<LLComboBox>(TEXT_MATURITY)->setCommitCallback(boost::bind(&LLFloaterExperiencePicker::onMaturity, this)); - getChild<LLUICtrl>(TEXT_EDIT)->setFocus(TRUE); - - LLPanel* search_panel = getChild<LLPanel>(PANEL_SEARCH); - if (search_panel) - { - // Start searching when Return is pressed in the line editor. - search_panel->setDefaultBtn(BTN_FIND); - } - return TRUE; -} - -void LLFloaterExperiencePicker::editKeystroke( class LLLineEditor* caller, void* user_data ) -{ - getChildView(BTN_FIND)->setEnabled(caller->getText().size() > 0); -} - -void LLFloaterExperiencePicker::onBtnFind() -{ - find(); -} - -void LLFloaterExperiencePicker::onBtnSelect() -{ - if(!isSelectButtonEnabled()) - { - return; - } - - if(mSelectionCallback) - { - const LLScrollListCtrl* results = getChild<LLScrollListCtrl>(LIST_RESULTS); - uuid_vec_t experience_ids; - - getSelectedExperienceIds(results, experience_ids); - mSelectionCallback(experience_ids); - getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE); - if(mCloseOnSelect) - { - mCloseOnSelect = FALSE; - closeFloater(); - } - } - else - { - onBtnProfile(); - } -} - -void LLFloaterExperiencePicker::onList() -{ - bool enabled = isSelectButtonEnabled(); - getChildView(BTN_OK)->setEnabled(enabled); - - enabled = enabled && getChild<LLScrollListCtrl>(LIST_RESULTS)->getNumSelected() == 1; - getChildView(BTN_PROFILE)->setEnabled(enabled); -} - - -void LLFloaterExperiencePicker::onBtnClose() -{ - closeFloater(); -} - - -void LLFloaterExperiencePicker::find() -{ - std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); - mQueryID.generate(); - std::string url; - url.reserve(128+text.size()); - - LLViewerRegion* region = gAgent.getRegion(); - url = region->getCapability("FindExperienceByName"); - if (!url.empty()) - { - url+="?query="; - url+=LLURI::escape(text); - LLHTTPClient::get(url, new LLExperiencePickerResponder(mQueryID, getDerivedHandle<LLFloaterExperiencePicker>())); - - } - - - getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems(); - getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching")); - - getChildView(BTN_OK)->setEnabled(FALSE); - getChildView(BTN_PROFILE)->setEnabled(FALSE); -} - - -bool LLFloaterExperiencePicker::isSelectButtonEnabled() -{ - LLScrollListCtrl* list=getChild<LLScrollListCtrl>(LIST_RESULTS); - return list->getFirstSelectedIndex() >=0; -} - -void LLFloaterExperiencePicker::getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ) -{ - std::vector<LLScrollListItem*> items = results->getAllSelected(); - for(std::vector<LLScrollListItem*>::iterator it = items.begin(); it != items.end(); ++it) - { - LLScrollListItem* item = *it; - if (item->getUUID().notNull()) - { - experience_ids.push_back(item->getUUID()); - } - } -} - -void LLFloaterExperiencePicker::setAllowMultiple( bool allow_multiple ) -{ - getChild<LLScrollListCtrl>(LIST_RESULTS)->setAllowMultipleSelection(allow_multiple); -} - - -void name_callback(const LLHandle<LLFloaterExperiencePicker>& floater, const LLUUID& experience_id, const LLUUID& agent_id, const LLAvatarName& av_name) -{ - if(floater.isDead()) - return; - LLFloaterExperiencePicker* picker = floater.get(); - LLScrollListCtrl* search_results = picker->getChild<LLScrollListCtrl>(LIST_RESULTS); - - LLScrollListItem* item = search_results->getItem(experience_id); - if(!item) - return; - - item->getColumn(2)->setValue(columnSpace+av_name.getDisplayName()); - -} - -void LLFloaterExperiencePicker::processResponse( const LLUUID& query_id, const LLSD& content ) -{ - if(query_id != mQueryID) - { - return; - } - - mResponse = content; - - const LLSD& experiences=mResponse["experience_keys"]; - LLSD::array_const_iterator it = experiences.beginArray(); - for ( ; it != experiences.endArray(); ++it) - { - LLExperienceCache::insert(*it); - } - - filterContent(); - -} - -void LLFloaterExperiencePicker::onBtnProfile() -{ - LLScrollListItem* item = getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelected(); - if(item) - { - LLFloaterReg::showInstance("experience_profile", item->getUUID(), true); - } -} - -std::string LLFloaterExperiencePicker::getMaturityString(int maturity) -{ - if(maturity <= SIM_ACCESS_PG) - { - return getString("maturity_icon_general"); - } - else if(maturity <= SIM_ACCESS_MATURE) - { - return getString("maturity_icon_moderate"); - } - return getString("maturity_icon_adult"); -} - -void LLFloaterExperiencePicker::filterContent() -{ - LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>(LIST_RESULTS); - - const LLSD& experiences=mResponse["experience_keys"]; - - search_results->deleteAllItems(); - - LLSD item; - LLSD::array_const_iterator it = experiences.beginArray(); - for ( ; it != experiences.endArray(); ++it) - { - const LLSD& experience = *it; - - if(isExperienceHidden(experience)) - continue; - - item["id"]=experience[LLExperienceCache::EXPERIENCE_ID]; - LLSD& columns = item["columns"]; - columns[0]["column"] = "maturity"; - columns[0]["value"] = getMaturityString(experience[LLExperienceCache::MATURITY].asInteger()); - columns[0]["type"]="icon"; - columns[0]["halign"]="right"; - columns[1]["column"] = "experience_name"; - columns[1]["value"] = columnSpace+experience[LLExperienceCache::NAME].asString(); - columns[2]["column"] = "owner"; - columns[2]["value"] = columnSpace+getString("loading"); - search_results->addElement(item); - LLAvatarNameCache::get(experience[LLExperienceCache::AGENT_ID], boost::bind(name_callback, getDerivedHandle<LLFloaterExperiencePicker>(), experience[LLExperienceCache::EXPERIENCE_ID], _1, _2)); - } - - if (search_results->isEmpty()) - { - LLStringUtil::format_map_t map; - std::string search_text = childGetText(TEXT_EDIT); - map["[TEXT]"] = search_text; - if (search_text.empty()) - { - getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); - } - else - { - getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map)); - } - search_results->setEnabled(false); - getChildView(BTN_OK)->setEnabled(false); - getChildView(BTN_PROFILE)->setEnabled(false); - } - else - { - getChildView(BTN_OK)->setEnabled(true); - search_results->setEnabled(true); - search_results->sortByColumnIndex(1, TRUE); - std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); - if (!search_results->selectItemByLabel(text, TRUE, 1)) - { - search_results->selectFirstItem(); - } - onList(); - search_results->setFocus(TRUE); - } -} - -void LLFloaterExperiencePicker::onMaturity() -{ - if(mResponse.has("experience_keys") && mResponse["experience_keys"].beginArray() != mResponse["experience_keys"].endArray()) - { - filterContent(); - } -} - -bool LLFloaterExperiencePicker::isExperienceHidden( const LLSD& experience) const -{ - bool hide=false; - filter_list::const_iterator it = mFilters.begin(); - for(/**/;it != mFilters.end(); ++it) - { - if((*it)(experience)){ - return true; - } - } - - return hide; -} - -bool LLFloaterExperiencePicker::FilterOverRating( const LLSD& experience ) -{ - int maturity = getChild<LLComboBox>(TEXT_MATURITY)->getSelectedValue().asInteger(); - return experience[LLExperienceCache::MATURITY].asInteger() > maturity; -} + mSearchPanel = static_cast<LLPanelExperiencePicker*>(getChild<LLUICtrl>("panel_experience_search")); + + mSearchPanel->mSelectionCallback = mSelectionCallback; + mSearchPanel->mCloseOnSelect = mCloseOnSelect; + mSearchPanel->setAllowMultiple(mAllowMultiple); + mSearchPanel->addFilters(mFilters.begin(), mFilters.end()); -bool LLFloaterExperiencePicker::FilterWithProperty( const LLSD& experience, S32 prop) -{ - return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0; + return LLFloater::postBuild(); } - -bool LLFloaterExperiencePicker::FilterWithoutProperty( const LLSD& experience, S32 prop ) -{ - return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == 0; -} - -void LLFloaterExperiencePicker::setDefaultFilters() -{ - mFilters.clear(); - addFilter(boost::bind(&LLFloaterExperiencePicker::FilterOverRating, this, _1)); -} - - - - - - - - - - - - - - - - - - - - diff --git a/indra/newview/llfloaterexperiencepicker.h b/indra/newview/llfloaterexperiencepicker.h index ea0240d2ac..22bfb64ba7 100644 --- a/indra/newview/llfloaterexperiencepicker.h +++ b/indra/newview/llfloaterexperiencepicker.h @@ -31,6 +31,7 @@ class LLScrollListCtrl; class LLLineEditor; +class LLPanelExperiencePicker; class LLFloaterExperiencePicker : public LLFloater @@ -38,7 +39,6 @@ class LLFloaterExperiencePicker : public LLFloater public: friend class LLExperiencePickerResponder; - // The callback function will be called with an avatar name and UUID. typedef boost::function<void (const uuid_vec_t&)> select_callback_t; // filter function for experiences, return true if the experience should be hidden. typedef boost::function<bool (const LLSD&)> filter_function; @@ -50,47 +50,20 @@ public: virtual ~LLFloaterExperiencePicker(); BOOL postBuild(); - - void addFilter(filter_function func){mFilters.push_back(func);} + template <class IT> void addFilters(IT begin, IT end){mFilters.insert(mFilters.end(), begin, end);} - void setDefaultFilters(); - - static bool FilterWithProperty(const LLSD& experience, S32 prop); - static bool FilterWithoutProperty(const LLSD& experience, S32 prop); - bool FilterOverRating(const LLSD& experience); virtual void draw(); private: - void editKeystroke(LLLineEditor* caller, void* user_data); - - void onBtnFind(); - void onBtnSelect(); - void onBtnProfile(); - void onBtnClose(); - void onList(); - void onMaturity(); - - void getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ); - void setAllowMultiple(bool allow_multiple); - - - void find(); - bool isSelectButtonEnabled(); - void processResponse( const LLUUID& query_id, const LLSD& content ); - - void filterContent(); - bool isExperienceHidden(const LLSD& experience) const ; - std::string getMaturityString(int maturity); + LLPanelExperiencePicker* mSearchPanel; select_callback_t mSelectionCallback; filter_list mFilters; - LLUUID mQueryID; - LLSD mResponse; + bool mAllowMultiple; bool mCloseOnSelect; - void drawFrustum(); LLHandle <LLView> mFrustumOrigin; F32 mContextConeOpacity; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 2522b7bf18..6d8f8f5587 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -94,7 +94,7 @@ #include "llfloaterregionrestarting.h" #include "llpanelexperiencelisteditor.h" #include <boost/function.hpp> -#include "llfloaterexperiencepicker.h" +#include "llpanelexperiencepicker.h" #include "llexperiencecache.h" #include "llpanelexperiences.h" @@ -3634,14 +3634,14 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mAllowed->loading(); mAllowed->setReadonly(!allow_modify); // remove grid-wide experiences - mAllowed->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); + mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); mBlocked->loading(); mBlocked->setReadonly(!allow_modify); // only grid-wide experiences - mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); // but not privileged ones - mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); mTrusted->loading(); mTrusted->setReadonly(!allow_modify); diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 4e2ae585cd..8da41b59dd 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -38,12 +38,13 @@ #include "llexperiencecache.h" #include "llslurl.h" #include "llavatarnamecache.h" -#include "llfloaterexperienceprofile.h" #include "llcombobox.h" #include "llviewercontrol.h" -#include "lldraghandle.h" +#include "llfloater.h" #define BTN_FIND "find" +#define BTN_OK "ok_btn" +#define BTN_CANCEL "cancel_btn" #define BTN_PROFILE "profile_btn" #define TEXT_EDIT "edit" #define TEXT_MATURITY "maturity" @@ -52,6 +53,8 @@ const static std::string columnSpace = " "; +static LLPanelInjector<LLPanelExperiencePicker> t_panel_status("llpanelexperiencepicker"); + class LLExperienceSearchResponder : public LLHTTPClient::Responder { public: @@ -75,7 +78,7 @@ public: } else { - llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl; + llwarns << "experience picker failed [status:" << status << "]: " << content << llendl; } } @@ -90,7 +93,6 @@ LLPanelExperiencePicker::LLPanelExperiencePicker() LLPanelExperiencePicker::~LLPanelExperiencePicker() { - gFocusMgr.releaseFocusIfNeeded( this ); } BOOL LLPanelExperiencePicker::postBuild() @@ -101,11 +103,14 @@ BOOL LLPanelExperiencePicker::postBuild() getChildView(BTN_FIND)->setEnabled(FALSE); LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS); - searchresults->setDoubleClickCallback( boost::bind(&LLPanelExperiencePicker::onBtnProfile, this)); + searchresults->setDoubleClickCallback( boost::bind(&LLPanelExperiencePicker::onBtnSelect, this)); searchresults->setCommitCallback(boost::bind(&LLPanelExperiencePicker::onList, this)); getChildView(LIST_RESULTS)->setEnabled(FALSE); getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results")); + childSetAction(BTN_OK, boost::bind(&LLPanelExperiencePicker::onBtnSelect, this)); + getChildView(BTN_OK)->setEnabled(FALSE); + childSetAction(BTN_CANCEL, boost::bind(&LLPanelExperiencePicker::onBtnClose, this)); childSetAction(BTN_PROFILE, boost::bind(&LLPanelExperiencePicker::onBtnProfile, this)); getChildView(BTN_PROFILE)->setEnabled(FALSE); @@ -135,6 +140,7 @@ void LLPanelExperiencePicker::onBtnFind() void LLPanelExperiencePicker::onList() { bool enabled = isSelectButtonEnabled(); + getChildView(BTN_OK)->setEnabled(enabled); enabled = enabled && getChild<LLScrollListCtrl>(LIST_RESULTS)->getNumSelected() == 1; getChildView(BTN_PROFILE)->setEnabled(enabled); @@ -157,10 +163,10 @@ void LLPanelExperiencePicker::find() } - getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems(); getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching")); - + + getChildView(BTN_OK)->setEnabled(FALSE); getChildView(BTN_PROFILE)->setEnabled(FALSE); } @@ -225,6 +231,42 @@ void LLPanelExperiencePicker::processResponse( const LLUUID& query_id, const LLS } +void LLPanelExperiencePicker::onBtnSelect() +{ + if(!isSelectButtonEnabled()) + { + return; + } + + if(mSelectionCallback) + { + const LLScrollListCtrl* results = getChild<LLScrollListCtrl>(LIST_RESULTS); + uuid_vec_t experience_ids; + + getSelectedExperienceIds(results, experience_ids); + mSelectionCallback(experience_ids); + getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE); + if(mCloseOnSelect) + { + mCloseOnSelect = FALSE; + onBtnClose(); + } + } + else + { + onBtnProfile(); + } +} + +void LLPanelExperiencePicker::onBtnClose() +{ + LLFloater* floater = getParentByType<LLFloater>(); + if (floater) + { + floater->closeFloater(); + } +} + void LLPanelExperiencePicker::onBtnProfile() { LLScrollListItem* item = getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelected(); @@ -277,7 +319,7 @@ void LLPanelExperiencePicker::filterContent() search_results->addElement(item); LLAvatarNameCache::get(experience[LLExperienceCache::AGENT_ID], boost::bind(name_callback, getDerivedHandle<LLPanelExperiencePicker>(), experience[LLExperienceCache::EXPERIENCE_ID], _1, _2)); } - + if (search_results->isEmpty()) { LLStringUtil::format_map_t map; @@ -292,10 +334,12 @@ void LLPanelExperiencePicker::filterContent() getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map)); } search_results->setEnabled(false); + getChildView(BTN_OK)->setEnabled(false); getChildView(BTN_PROFILE)->setEnabled(false); } else { + getChildView(BTN_OK)->setEnabled(true); search_results->setEnabled(true); search_results->sortByColumnIndex(1, TRUE); std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h index 166639a14e..af0a30ceba 100644 --- a/indra/newview/llpanelexperiencepicker.h +++ b/indra/newview/llpanelexperiencepicker.h @@ -37,8 +37,8 @@ class LLPanelExperiencePicker : public LLPanel { public: friend class LLExperienceSearchResponder; + friend class LLFloaterExperiencePicker; - // The callback function will be called with an avatar name and UUID. typedef boost::function<void (const uuid_vec_t&)> select_callback_t; // filter function for experiences, return true if the experience should be hidden. typedef boost::function<bool (const LLSD&)> filter_function; @@ -62,6 +62,8 @@ private: void editKeystroke(LLLineEditor* caller, void* user_data); void onBtnFind(); + void onBtnSelect(); + void onBtnClose(); void onBtnProfile(); void onList(); void onMaturity(); @@ -83,6 +85,7 @@ private: filter_list mFilters; LLUUID mQueryID; LLSD mResponse; + bool mCloseOnSelect; }; #endif // LL_LLPANELEXPERIENCEPICKER_H diff --git a/indra/newview/skins/default/xui/en/floater_experience_search.xml b/indra/newview/skins/default/xui/en/floater_experience_search.xml index 8b44dada40..7d7e3ba95a 100644 --- a/indra/newview/skins/default/xui/en/floater_experience_search.xml +++ b/indra/newview/skins/default/xui/en/floater_experience_search.xml @@ -12,159 +12,9 @@ title="CHOOSE EXPERIENCE" width="350"> - <floater.string - name="not_found"> - '[TEXT]' not found - </floater.string> - <floater.string - name="no_results"> - No results - </floater.string> - <floater.string - name="searching"> - Searching... - </floater.string> - <floater.string - name="loading"> - Loading... - </floater.string> - <floater.string - name="maturity_icon_general"> - "Parcel_PG_Light" - </floater.string> - <floater.string - name="maturity_icon_moderate"> - "Parcel_M_Light" - </floater.string> - <floater.string - name="maturity_icon_adult"> - "Parcel_R_Light" - </floater.string> <panel + filename="panel_experience_search.xml" + class="llpanelexperiencepicker" follows="all" - left="5" - right="-3" - bottom="-2" - top="18" - name="search_panel"> - <text - left="0" - follows="top|left|right" - right="-1"> - Enter part of the name: - </text> - <line_editor - left="0" - follows="left|top|right" - name="edit" - height="18" - right="-60"/> - <button label="Go" - follows="top|right" - top_pad="-18" - left_pad="2" - right="-1" - height="18" - name="find"/> - <text - top_pad="6" - left="0" - follows="top|left" - width="180"> - Max Content Rating: - </text> - <icons_combo_box - follows="left|top" - height="20" - label="Moderate" - layout="topleft" - name="maturity" - top_pad="-13" - left_pad="0" - right="-1"> - <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> - <scroll_list - draw_heading="true" - left="0" - right="-1" - height="239" - top_pad="4" - follows="all" - column_padding="5" - can_resize="true" - name="search_results"> - <columns - halign="center" - width="24" - name="maturity" - label=""/> - <columns - user_resize="true" - name="experience_name" - label="Name"/> - <columns - user_resize="true" - name="owner" - label="Owner"/> - </scroll_list> - - <button - follows="left|bottom" - height="23" - label="OK" - label_selected="OK" - name="ok_btn" - top_pad="3" - left="0" - width="100" /> - <button - follows="left|bottom" - height="23" - label="Cancel" - name="cancel_btn" - width="100" - left_pad="3" /> - <button - follows="left|bottom" - height="23" - label="View Profile" - name="profile_btn" - width="100" - left_pad="3" /> - </panel> + name="panel_experience_search"/> </floater> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index f33acc75b2..a9f83e751a 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -81,13 +81,6 @@ function="Floater.ToggleOrBringToFront" parameter="experiences"/> </menu_item_call> - <menu_item_call - label="Experience Search..." - name="Experience Search"> - <menu_item_call.on_click - function="Floater.ToggleOrBringToFront" - parameter="experience_search"/> - </menu_item_call> <menu_item_separator/> <menu_item_call label="Camera Controls..." diff --git a/indra/newview/skins/default/xui/en/panel_experience_search.xml b/indra/newview/skins/default/xui/en/panel_experience_search.xml index 5593cef591..5ac7f6b239 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_search.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_search.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel layout="topleft" - top="3" - left="3" + top="18" + left="0" width="350" - height="350" + height="330" label="SEARCH" - bg_opaque_color="0 0.5 0 0.3" follows="all"> <string @@ -42,7 +41,7 @@ left="5" right="-3" bottom="-2" - top="18" + top="0" name="search_panel"> <text left="0" @@ -143,10 +142,25 @@ <button follows="left|bottom" height="23" - label="View Profile" - name="profile_btn" + label="OK" + label_selected="OK" + name="ok_btn" top_pad="3" left="0" - width="100"/> + width="100" /> + <button + follows="left|bottom" + height="23" + label="Cancel" + name="cancel_btn" + width="100" + left_pad="3" /> + <button + follows="left|bottom" + height="23" + label="View Profile" + name="profile_btn" + width="100" + left_pad="3" /> </panel> </panel> -- cgit v1.2.3 From bd3ef14552886b30b3cfafa7e7a89553492af8c3 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 29 Apr 2014 00:08:06 +0100 Subject: Got experience picker working again for ACME-1420 --- indra/newview/llfloaterexperiencepicker.cpp | 20 +++++++++----------- indra/newview/llfloaterexperiencepicker.h | 11 +---------- indra/newview/llpanelexperiencelisteditor.cpp | 4 +--- 3 files changed, 11 insertions(+), 24 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index 4a484463e8..60a9bdfd98 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llfloaterexperiencepicker.cpp * @brief Implementation of llfloaterexperiencepicker * @author dolphin@lindenlab.com @@ -44,7 +44,7 @@ #include "lldraghandle.h" #include "llpanelexperiencepicker.h" -LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect, LLView * frustumOrigin ) +LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL close_on_select, filter_list filters, LLView * frustumOrigin ) { LLFloaterExperiencePicker* floater = LLFloaterReg::showTypedInstance<LLFloaterExperiencePicker>("experience_search", key); @@ -54,9 +54,13 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca return NULL; } - floater->mSelectionCallback = callback; - floater->mCloseOnSelect = closeOnSelect; - floater->mAllowMultiple = allow_multiple; + if (floater->mSearchPanel) + { + floater->mSearchPanel->mSelectionCallback = callback; + floater->mSearchPanel->mCloseOnSelect = close_on_select; + floater->mSearchPanel->setAllowMultiple(allow_multiple); + floater->mSearchPanel->addFilters(filters.begin(), filters.end()); + } if(frustumOrigin) { @@ -150,11 +154,5 @@ LLFloaterExperiencePicker::~LLFloaterExperiencePicker() BOOL LLFloaterExperiencePicker::postBuild() { mSearchPanel = static_cast<LLPanelExperiencePicker*>(getChild<LLUICtrl>("panel_experience_search")); - - mSearchPanel->mSelectionCallback = mSelectionCallback; - mSearchPanel->mCloseOnSelect = mCloseOnSelect; - mSearchPanel->setAllowMultiple(mAllowMultiple); - mSearchPanel->addFilters(mFilters.begin(), mFilters.end()); - return LLFloater::postBuild(); } diff --git a/indra/newview/llfloaterexperiencepicker.h b/indra/newview/llfloaterexperiencepicker.h index 22bfb64ba7..29054a57db 100644 --- a/indra/newview/llfloaterexperiencepicker.h +++ b/indra/newview/llfloaterexperiencepicker.h @@ -37,33 +37,24 @@ class LLPanelExperiencePicker; class LLFloaterExperiencePicker : public LLFloater { public: - friend class LLExperiencePickerResponder; typedef boost::function<void (const uuid_vec_t&)> select_callback_t; // filter function for experiences, return true if the experience should be hidden. typedef boost::function<bool (const LLSD&)> filter_function; typedef std::vector<filter_function> filter_list; - static LLFloaterExperiencePicker* show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect, LLView * frustumOrigin); + static LLFloaterExperiencePicker* show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL close_on_select, filter_list filters, LLView * frustumOrigin); LLFloaterExperiencePicker(const LLSD& key); virtual ~LLFloaterExperiencePicker(); BOOL postBuild(); - template <class IT> - void addFilters(IT begin, IT end){mFilters.insert(mFilters.end(), begin, end);} - virtual void draw(); private: LLPanelExperiencePicker* mSearchPanel; - select_callback_t mSelectionCallback; - filter_list mFilters; - bool mAllowMultiple; - bool mCloseOnSelect; - void drawFrustum(); LLHandle <LLView> mFrustumOrigin; F32 mContextConeOpacity; diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index a4ceb3830c..7a7be32b96 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -107,9 +107,7 @@ void LLPanelExperienceListEditor::onAdd() { mKey.generateNewID(); - LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mAdd); - picker->addFilters(mFilters.begin(), mFilters.end()); - + LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mFilters, mAdd); mPicker = picker->getDerivedHandle<LLFloaterExperiencePicker>(); } } -- cgit v1.2.3 From 4a0f5c85a03830e4ab890217bf52961a2ce25a2b Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 29 Apr 2014 19:58:51 +0100 Subject: Applied Baker's fix for group roles for ACME-1176 --- indra/newview/llpanelgrouproles.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index c30c932c41..234e60d1c1 100755 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -879,7 +879,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect() // Build a vector of all selected members, and gather allowed actions. uuid_vec_t selected_members; - U64 allowed_by_all = 0xffffffffffffLL; + U64 allowed_by_all = GP_ALL_POWERS; //0xFFFFffffFFFFffffLL; U64 allowed_by_some = 0; std::vector<LLScrollListItem*>::iterator itor; @@ -1183,7 +1183,7 @@ void LLPanelGroupMembersSubTab::handleRoleCheck(const LLUUID& role_id, //add that the user is requesting to change the roles for selected //members - U64 powers_all_have = 0xffffffffffffLL; + U64 powers_all_have = GP_ALL_POWERS; U64 powers_some_have = 0; BOOL is_owner_role = ( gdatap->mOwnerRole == role_id ); -- cgit v1.2.3 From f1fd98b6ed73d6ef7243870b8efd7fc848fa5be7 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 1 May 2014 00:51:28 +0100 Subject: Changed layout of exp perms buttons for ACME-1468 --- indra/newview/skins/default/xui/en/notifications.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 5e966395dc..ee007197d7 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7117,6 +7117,14 @@ Scripts associated with this experience will be able to do the following on regi [QUESTIONS]Is this OK? <tag>confirm</tag> <form name="form"> + <button + index="3" + name="BlockExperience" + text="Block Experience"/> + <button + index="2" + name="Mute" + text="Block Object"/> <button index="0" name="Yes" @@ -7125,14 +7133,6 @@ Scripts associated with this experience will be able to do the following on regi index="1" name="No" text="No"/> - <button - index="2" - name="Mute" - text="Block Object"/> - <button - index="3" - name="BlockExperience" - text="Block Experience"/> </form> </notification> -- cgit v1.2.3 From 7d08e72b4de54977f3fd3f0c3224c9d28cdbacbd Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 1 May 2014 21:17:31 +0100 Subject: Made experiences selectable in Region/Estate floater for ACME-1466 --- indra/newview/llpanelexperiencelisteditor.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 7a7be32b96..6d47673849 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -208,7 +208,6 @@ void LLPanelExperienceListEditor::loading() void LLPanelExperienceListEditor::setReadonly( bool val ) { mReadonly = val; - setCtrlsEnabled(!mReadonly); checkButtonsEnabled(); } -- cgit v1.2.3 From 155399cb710b8b7db0e8126baa9a664475c7b916 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 1 May 2014 13:56:45 -0700 Subject: parcel experience lists can be manipulated through the ParcelAccessListUpdate message --- indra/llinventory/llparcel.cpp | 79 +++++++++++++-- indra/llinventory/llparcel.h | 21 +++- indra/llinventory/llparcelflags.h | 6 +- indra/newview/llfloaterauction.cpp | 33 ++---- indra/newview/llfloaterauction.h | 2 +- indra/newview/llfloaterland.cpp | 8 +- indra/newview/llviewerparcelmgr.cpp | 193 ++++++++++++++++-------------------- indra/newview/llviewerparcelmgr.h | 4 + 8 files changed, 194 insertions(+), 152 deletions(-) (limited to 'indra') diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 5eb5fb442d..4261148cd6 100755 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -40,6 +40,7 @@ #include "llsdutil_math.h" #include "message.h" #include "u64.h" +#include "llregionflags.h" static const F32 SOME_BIG_NUMBER = 1000.0f; static const F32 SOME_BIG_NEG_NUMBER = -1000.0f; @@ -627,8 +628,8 @@ void LLParcel::unpackMessage(LLMessageSystem* msg) void LLParcel::packAccessEntries(LLMessageSystem* msg, const std::map<LLUUID,LLAccessEntry>& list) { - access_map_const_iterator cit = list.begin(); - access_map_const_iterator end = list.end(); + LLAccessEntry::map::const_iterator cit = list.begin(); + LLAccessEntry::map::const_iterator end = list.end(); if (cit == end) { @@ -679,9 +680,28 @@ void LLParcel::unpackAccessEntries(LLMessageSystem* msg, } +void LLParcel::unpackExperienceEntries( LLMessageSystem* msg, U32 type ) +{ + LLUUID id; + + S32 i; + S32 count = msg->getNumberOfBlocksFast(_PREHASH_List); + for (i = 0; i < count; i++) + { + msg->getUUIDFast(_PREHASH_List, _PREHASH_ID, id, i); + + if (id.notNull()) + { + mExperienceKeys[id]=type; + } + } +} + + + void LLParcel::expirePasses(S32 now) { - access_map_iterator itor = mAccessList.begin(); + LLAccessEntry::map::iterator itor = mAccessList.begin(); while (itor != mAccessList.end()) { const LLAccessEntry& entry = (*itor).second; @@ -771,7 +791,7 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time) // Can't add owner to these lists return FALSE; } - access_map_iterator itor = mAccessList.begin(); + LLAccessEntry::map::iterator itor = mAccessList.begin(); while (itor != mAccessList.end()) { const LLAccessEntry& entry = (*itor).second; @@ -816,7 +836,7 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time) return FALSE; } - access_map_iterator itor = mBanList.begin(); + LLAccessEntry::map::iterator itor = mBanList.begin(); while (itor != mBanList.end()) { const LLAccessEntry& entry = (*itor).second; @@ -852,7 +872,7 @@ BOOL remove_from_access_array(std::map<LLUUID,LLAccessEntry>* list, const LLUUID& agent_id) { BOOL removed = FALSE; - access_map_iterator itor = list->begin(); + LLAccessEntry::map::iterator itor = list->begin(); while (itor != list->end()) { const LLAccessEntry& entry = (*itor).second; @@ -1097,7 +1117,8 @@ void LLParcel::clearParcel() void LLParcel::dump() { llinfos << "parcel " << mLocalID << " area " << mArea << llendl; - llinfos << " name <" << mName << ">" << llendl; + + llinfos << " name <" << mName << ">" << llendl; llinfos << " desc <" << mDesc << ">" << llendl; } @@ -1195,3 +1216,47 @@ LLParcel::ECategory category_ui_string_to_category(const std::string& s) // is a distinct option from "None" and "Other" return LLParcel::C_ANY; } + +LLAccessEntry::map LLParcel::getExperienceKeysByType( U32 type ) const +{ + LLAccessEntry::map access; + LLAccessEntry entry; + xp_type_map_t::const_iterator it = mExperienceKeys.begin(); + for(/**/; it != mExperienceKeys.end(); ++it) + { + if(it->second == type) + { + entry.mID = it->first; + access[entry.mID] = entry; + } + } + return access; +} + +void LLParcel::clearExperienceKeysByType( U32 type ) +{ + xp_type_map_t::iterator it = mExperienceKeys.begin(); + while(it != mExperienceKeys.end()) + { + if(it->second == type) + { + mExperienceKeys.erase(it++); + } + else + { + ++it; + } + } +} + +void LLParcel::setExperienceKeyType( const LLUUID& experience_key, U32 type ) +{ + if(type == EXPERIENCE_KEY_TYPE_NONE) + { + mExperienceKeys.erase(experience_key); + } + else + { + mExperienceKeys[experience_key] = type; + } +} diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index c4363a48df..fe76531317 100755 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -130,9 +130,11 @@ class LLSD; class LLAccessEntry { public: + + typedef std::map<LLUUID,LLAccessEntry> map; + LLAccessEntry() - : mID(), - mTime(0), + : mTime(0), mFlags(0) {} @@ -141,8 +143,6 @@ public: U32 mFlags; // Not used - currently should always be zero }; -typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator; -typedef std::map<LLUUID,LLAccessEntry>::const_iterator access_map_const_iterator; class LLParcel { @@ -320,6 +320,9 @@ public: void unpackAccessEntries(LLMessageSystem* msg, std::map<LLUUID,LLAccessEntry>* list); + void unpackExperienceEntries(LLMessageSystem* msg, U32 type); + + void setAABBMin(const LLVector3& min) { mAABBMin = min; } void setAABBMax(const LLVector3& max) { mAABBMax = max; } @@ -665,6 +668,16 @@ public: std::map<LLUUID,LLAccessEntry> mTempBanList; std::map<LLUUID,LLAccessEntry> mTempAccessList; + typedef std::map<LLUUID, U32> xp_type_map_t; + + void setExperienceKeyType(const LLUUID& experience_key, U32 type); + U32 getExperienceKeyType(const LLUUID& experience_key)const; + LLAccessEntry::map getExperienceKeysByType(U32 type)const; + void clearExperienceKeysByType(U32 type); + +private: + xp_type_map_t mExperienceKeys; + }; diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h index b1a917df73..25b27a281a 100755 --- a/indra/llinventory/llparcelflags.h +++ b/indra/llinventory/llparcelflags.h @@ -90,8 +90,10 @@ const U32 PF_DEFAULT = PF_ALLOW_FLY | PF_USE_ESTATE_VOICE_CHAN; // Access list flags -const U32 AL_ACCESS = (1 << 0); -const U32 AL_BAN = (1 << 1); +const U32 AL_ACCESS = (1 << 0); +const U32 AL_BAN = (1 << 1); +const U32 AL_ALLOW_EXPERIENCE = (1 << 3); +const U32 AL_BLOCK_EXPERIENCE = (1 << 4); //const U32 AL_RENTER = (1 << 2); // Block access return values. BA_ALLOWED is the only success case diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp index 3c40e2d4bc..fb1c51557f 100755 --- a/indra/newview/llfloaterauction.cpp +++ b/indra/newview/llfloaterauction.cpp @@ -376,13 +376,16 @@ void LLFloaterAuction::doResetParcel() msg->sendReliable(region->getHost()); // Clear the access lists - clearParcelAccessLists(parcelp, region); + clearParcelAccessList(parcelp, region, AL_ACCESS); + clearParcelAccessList(parcelp, region, AL_BAN); + clearParcelAccessList(parcelp, region, AL_ALLOW_EXPERIENCE); + clearParcelAccessList(parcelp, region, AL_BLOCK_EXPERIENCE); } } -void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion* region) +void LLFloaterAuction::clearParcelAccessList(LLParcel* parcel, LLViewerRegion* region, U32 list) { if (!region || !parcel) return; @@ -391,15 +394,12 @@ void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion* LLMessageSystem* msg = gMessageSystem; - // Clear access list - // parcel->mAccessList.clear(); - msg->newMessageFast(_PREHASH_ParcelAccessListUpdate); msg->nextBlockFast(_PREHASH_AgentData); msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); msg->nextBlockFast(_PREHASH_Data); - msg->addU32Fast(_PREHASH_Flags, AL_ACCESS); + msg->addU32Fast(_PREHASH_Flags, list); msg->addS32(_PREHASH_LocalID, parcel->getLocalID() ); msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID); msg->addS32Fast(_PREHASH_SequenceID, 1); // sequence_id @@ -412,27 +412,6 @@ void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion* msg->addU32Fast(_PREHASH_Flags, 0 ); msg->sendReliable( region->getHost() ); - - // Send message for empty ban list - //parcel->mBanList.clear(); - msg->newMessageFast(_PREHASH_ParcelAccessListUpdate); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - msg->nextBlockFast(_PREHASH_Data); - msg->addU32Fast(_PREHASH_Flags, AL_BAN); - msg->addS32(_PREHASH_LocalID, parcel->getLocalID() ); - msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID); - msg->addS32Fast(_PREHASH_SequenceID, 1); // sequence_id - msg->addS32Fast(_PREHASH_Sections, 0); // num_sections - - // pack an empty block since there will be no data - msg->nextBlockFast(_PREHASH_List); - msg->addUUIDFast(_PREHASH_ID, LLUUID::null ); - msg->addS32Fast(_PREHASH_Time, 0 ); - msg->addU32Fast(_PREHASH_Flags, 0 ); - - msg->sendReliable( region->getHost() ); } diff --git a/indra/newview/llfloaterauction.h b/indra/newview/llfloaterauction.h index 9c0c0f7775..c83a11ba8b 100755 --- a/indra/newview/llfloaterauction.h +++ b/indra/newview/llfloaterauction.h @@ -67,7 +67,7 @@ private: void doResetParcel(); void doSellToAnyone(); - void clearParcelAccessLists( LLParcel* parcel, LLViewerRegion* region ); + void clearParcelAccessList( LLParcel* parcel, LLViewerRegion* region, U32 list); void cleanupAndClose(); private: diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index b16ef6dd79..cced45ac26 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2398,7 +2398,7 @@ void LLPanelLandAccess::refresh() getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count)); getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST)); - for (access_map_const_iterator cit = parcel->mAccessList.begin(); + for (LLAccessEntry::map::const_iterator cit = parcel->mAccessList.begin(); cit != parcel->mAccessList.end(); ++cit) { const LLAccessEntry& entry = (*cit).second; @@ -2444,7 +2444,7 @@ void LLPanelLandAccess::refresh() getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count)); getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST)); - for (access_map_const_iterator cit = parcel->mBanList.begin(); + for (LLAccessEntry::map::const_iterator cit = parcel->mBanList.begin(); cit != parcel->mBanList.end(); ++cit) { const LLAccessEntry& entry = (*cit).second; @@ -2752,8 +2752,8 @@ void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids) LLUUID id = ids[0]; LLParcel* parcel = mParcel->getParcel(); if (parcel) - { - parcel->addToAccessList(id, 0); + { + parcel->addToAccessList(id, 0); LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS); refresh(); } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index e361fad9de..2fdae9d091 100755 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -205,8 +205,8 @@ void LLViewerParcelMgr::dump() mCurrentParcel->dump(); llinfos << "banning " << mCurrentParcel->mBanList.size() << llendl; - access_map_const_iterator cit = mCurrentParcel->mBanList.begin(); - access_map_const_iterator end = mCurrentParcel->mBanList.end(); + LLAccessEntry::map::const_iterator cit = mCurrentParcel->mBanList.begin(); + LLAccessEntry::map::const_iterator end = mCurrentParcel->mBanList.end(); for ( ; cit != end; ++cit) { llinfos << "ban id " << (*cit).first << llendl; @@ -892,7 +892,7 @@ void LLViewerParcelMgr::sendParcelAccessListRequest(U32 flags) if (!region) return; LLMessageSystem *msg = gMessageSystem; - + if (flags & AL_BAN) { @@ -902,6 +902,14 @@ void LLViewerParcelMgr::sendParcelAccessListRequest(U32 flags) { mCurrentParcel->mAccessList.clear(); } + if (flags & AL_ALLOW_EXPERIENCE) + { + mCurrentParcel->clearExperienceKeysByType(EXPERIENCE_KEY_TYPE_ALLOWED); + } + if (flags & AL_BLOCK_EXPERIENCE) + { + mCurrentParcel->clearExperienceKeysByType(EXPERIENCE_KEY_TYPE_BLOCKED); + } // Only the headers differ msg->newMessageFast(_PREHASH_ParcelAccessListRequest); @@ -1657,7 +1665,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use } // Request access list information for this land - parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN); + parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_ALLOW_EXPERIENCE | AL_BLOCK_EXPERIENCE); // Request dwell for this land, if it's not public land. parcel_mgr.mSelectedDwell = DWELL_NAN; @@ -1822,6 +1830,14 @@ void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void { parcel->unpackAccessEntries(msg, &(parcel->mBanList) ); } + else if (message_flags & AL_ALLOW_EXPERIENCE) + { + parcel->unpackExperienceEntries(msg, EXPERIENCE_KEY_TYPE_ALLOWED); + } + else if (message_flags & AL_BLOCK_EXPERIENCE) + { + parcel->unpackExperienceEntries(msg, EXPERIENCE_KEY_TYPE_BLOCKED); + } /*else if (message_flags & AL_RENTER) { parcel->unpackAccessEntries(msg, &(parcel->mRenterList) ); @@ -1856,10 +1872,6 @@ void LLViewerParcelMgr::processParcelDwellReply(LLMessageSystem* msg, void**) void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which) { - - LLUUID transactionUUID; - transactionUUID.generate(); - if (!mSelected) { return; @@ -1868,125 +1880,92 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which) LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth ); if (!region) return; - LLMessageSystem* msg = gMessageSystem; - LLParcel* parcel = mCurrentParcel; if (!parcel) return; if (which & AL_ACCESS) { - S32 count = parcel->mAccessList.size(); - S32 num_sections = (S32) ceil(count/PARCEL_MAX_ENTRIES_PER_PACKET); - S32 sequence_id = 1; - BOOL start_message = TRUE; - BOOL initial = TRUE; - - access_map_const_iterator cit = parcel->mAccessList.begin(); - access_map_const_iterator end = parcel->mAccessList.end(); - while ( (cit != end) || initial ) - { - if (start_message) - { - msg->newMessageFast(_PREHASH_ParcelAccessListUpdate); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - msg->nextBlockFast(_PREHASH_Data); - msg->addU32Fast(_PREHASH_Flags, AL_ACCESS); - msg->addS32(_PREHASH_LocalID, parcel->getLocalID() ); - msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID); - msg->addS32Fast(_PREHASH_SequenceID, sequence_id); - msg->addS32Fast(_PREHASH_Sections, num_sections); - start_message = FALSE; - - if (initial && (cit == end)) - { - // pack an empty block if there will be no data - msg->nextBlockFast(_PREHASH_List); - msg->addUUIDFast(_PREHASH_ID, LLUUID::null ); - msg->addS32Fast(_PREHASH_Time, 0 ); - msg->addU32Fast(_PREHASH_Flags, 0 ); - } + sendParcelAccessListUpdate(AL_ACCESS, parcel->mAccessList, region, parcel->getLocalID()); + } - initial = FALSE; - sequence_id++; + if (which & AL_BAN) + { + sendParcelAccessListUpdate(AL_BAN, parcel->mBanList, region, parcel->getLocalID()); + } - } - - while ( (cit != end) && (msg->getCurrentSendTotal() < MTUBYTES)) - { + if(which & AL_ALLOW_EXPERIENCE) + { + sendParcelAccessListUpdate(AL_ALLOW_EXPERIENCE, parcel->getExperienceKeysByType(EXPERIENCE_KEY_TYPE_ALLOWED), region, parcel->getLocalID()); + } + if(which & AL_BLOCK_EXPERIENCE) + { + sendParcelAccessListUpdate(AL_BLOCK_EXPERIENCE, parcel->getExperienceKeysByType(EXPERIENCE_KEY_TYPE_BLOCKED), region, parcel->getLocalID()); + } +} - const LLAccessEntry& entry = (*cit).second; - - msg->nextBlockFast(_PREHASH_List); - msg->addUUIDFast(_PREHASH_ID, entry.mID ); - msg->addS32Fast(_PREHASH_Time, entry.mTime ); - msg->addU32Fast(_PREHASH_Flags, entry.mFlags ); - ++cit; - } +void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 flags, const LLAccessEntry::map& entries, LLViewerRegion* region, S32 parcel_local_id) +{ + S32 count = entries.size(); + S32 num_sections = (S32) ceil(count/PARCEL_MAX_ENTRIES_PER_PACKET); + S32 sequence_id = 1; + BOOL start_message = TRUE; + BOOL initial = TRUE; - start_message = TRUE; - msg->sendReliable( region->getHost() ); - } - } + LLUUID transactionUUID; + transactionUUID.generate(); - if (which & AL_BAN) - { - S32 count = parcel->mBanList.size(); - S32 num_sections = (S32) ceil(count/PARCEL_MAX_ENTRIES_PER_PACKET); - S32 sequence_id = 1; - BOOL start_message = TRUE; - BOOL initial = TRUE; - - access_map_const_iterator cit = parcel->mBanList.begin(); - access_map_const_iterator end = parcel->mBanList.end(); - while ( (cit != end) || initial ) - { - if (start_message) - { - msg->newMessageFast(_PREHASH_ParcelAccessListUpdate); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - msg->nextBlockFast(_PREHASH_Data); - msg->addU32Fast(_PREHASH_Flags, AL_BAN); - msg->addS32(_PREHASH_LocalID, parcel->getLocalID() ); - msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID); - msg->addS32Fast(_PREHASH_SequenceID, sequence_id); - msg->addS32Fast(_PREHASH_Sections, num_sections); - start_message = FALSE; - - if (initial && (cit == end)) - { - // pack an empty block if there will be no data - msg->nextBlockFast(_PREHASH_List); - msg->addUUIDFast(_PREHASH_ID, LLUUID::null ); - msg->addS32Fast(_PREHASH_Time, 0 ); - msg->addU32Fast(_PREHASH_Flags, 0 ); - } - initial = FALSE; - sequence_id++; + LLMessageSystem* msg = gMessageSystem; - } - - while ( (cit != end) && (msg->getCurrentSendTotal() < MTUBYTES)) + LLAccessEntry::map::const_iterator cit = entries.begin(); + LLAccessEntry::map::const_iterator end = entries.end(); + while ( (cit != end) || initial ) + { + if (start_message) + { + msg->newMessageFast(_PREHASH_ParcelAccessListUpdate); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); + msg->nextBlockFast(_PREHASH_Data); + msg->addU32Fast(_PREHASH_Flags, flags); + msg->addS32(_PREHASH_LocalID, parcel_local_id); + msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID); + msg->addS32Fast(_PREHASH_SequenceID, sequence_id); + msg->addS32Fast(_PREHASH_Sections, num_sections); + start_message = FALSE; + + if (initial && (cit == end)) { - const LLAccessEntry& entry = (*cit).second; - + // pack an empty block if there will be no data msg->nextBlockFast(_PREHASH_List); - msg->addUUIDFast(_PREHASH_ID, entry.mID ); - msg->addS32Fast(_PREHASH_Time, entry.mTime ); - msg->addU32Fast(_PREHASH_Flags, entry.mFlags ); - ++cit; + msg->addUUIDFast(_PREHASH_ID, LLUUID::null ); + msg->addS32Fast(_PREHASH_Time, 0 ); + msg->addU32Fast(_PREHASH_Flags, 0 ); } - start_message = TRUE; - msg->sendReliable( region->getHost() ); + initial = FALSE; + sequence_id++; + } + + while ( (cit != end) && (msg->getCurrentSendTotal() < MTUBYTES)) + { + const LLAccessEntry& entry = (*cit).second; + + msg->nextBlockFast(_PREHASH_List); + msg->addUUIDFast(_PREHASH_ID, entry.mID ); + msg->addS32Fast(_PREHASH_Time, entry.mTime ); + msg->addU32Fast(_PREHASH_Flags, entry.mFlags ); + ++cit; + } + + start_message = TRUE; + msg->sendReliable( region->getHost() ); } } + void LLViewerParcelMgr::deedLandToGroup() { std::string group_name; diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 9da49bb3f3..9b74377613 100755 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -220,6 +220,10 @@ public: // Takes an Access List flag, like AL_ACCESS or AL_BAN void sendParcelAccessListUpdate(U32 which); + static void sendParcelAccessListUpdate(U32 flags, const std::map<LLUUID, class LLAccessEntry>& entries, LLViewerRegion* region, S32 parcel_local_id); + static void sendParcelExperienceUpdate( const U32 flags, uuid_vec_t experience_ids, LLViewerRegion* region, S32 parcel_local_id ); + + // Takes an Access List flag, like AL_ACCESS or AL_BAN void sendParcelAccessListRequest(U32 flags); -- cgit v1.2.3 From 38da22d3470286840d08fcdfb7b9462e10cca8e0 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 1 May 2014 14:08:59 -0700 Subject: added handle_trusted_experiences_notification --- indra/newview/llviewermessage.cpp | 130 +++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 57 deletions(-) (limited to 'indra') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 118fba94e0..cdb228f084 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -124,6 +124,8 @@ #pragma warning (disable:4702) #endif + + extern void on_new_message(const LLSD& msg); // @@ -146,6 +148,7 @@ extern bool gShiftFrame; bool check_offer_throttle(const std::string& from_name, bool check_only); bool check_asset_previewable(const LLAssetType::EType asset_type); static void process_money_balance_reply_extended(LLMessageSystem* msg); +bool handle_trusted_experiences_notification(const LLSD&); //inventory offer throttle globals LLFrameTimer gThrottleTimer; @@ -5735,63 +5738,87 @@ bool handle_prompt_for_maturity_level_change_and_reteleport_callback(const LLSD& // some of the server notifications need special handling. This is where we do that. bool handle_special_notification(std::string notificationID, LLSD& llsdBlock) { - U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger()); - std::string regionMaturity = LLViewerRegion::accessToString(regionAccess); - LLStringUtil::toLower(regionMaturity); - llsdBlock["REGIONMATURITY"] = regionMaturity; bool returnValue = false; - LLNotificationPtr maturityLevelNotification; - std::string notifySuffix = "_Notify"; - if (regionAccess == SIM_ACCESS_MATURE) + if(llsdBlock.has("_region_access")) { - if (gAgent.isTeen()) + U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger()); + std::string regionMaturity = LLViewerRegion::accessToString(regionAccess); + LLStringUtil::toLower(regionMaturity); + llsdBlock["REGIONMATURITY"] = regionMaturity; + LLNotificationPtr maturityLevelNotification; + std::string notifySuffix = "_Notify"; + if (regionAccess == SIM_ACCESS_MATURE) { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); - returnValue = true; + if (gAgent.isTeen()) + { + gAgent.clearTeleportRequest(); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); + returnValue = true; - notifySuffix = "_NotifyAdultsOnly"; + notifySuffix = "_NotifyAdultsOnly"; + } + else if (gAgent.prefersPG()) + { + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + returnValue = true; + } + else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0) + { + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock); + returnValue = true; + } } - else if (gAgent.prefersPG()) + else if (regionAccess == SIM_ACCESS_ADULT) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); - returnValue = true; + if (!gAgent.isAdult()) + { + gAgent.clearTeleportRequest(); + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); + returnValue = true; + + notifySuffix = "_NotifyAdultsOnly"; + } + else if (gAgent.prefersPG() || gAgent.prefersMature()) + { + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + returnValue = true; + } + else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0) + { + maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock); + returnValue = true; + } } - else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0) + + if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored()) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock); - returnValue = true; + // Given a simple notification if no maturityLevelNotification is set or it is ignore + LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock); } } - else if (regionAccess == SIM_ACCESS_ADULT) - { - if (!gAgent.isAdult()) - { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); - returnValue = true; - notifySuffix = "_NotifyAdultsOnly"; - } - else if (gAgent.prefersPG() || gAgent.prefersMature()) + return returnValue; +} + +bool handle_trusted_experiences_notification(const LLSD& llsdBlock) +{ + if(llsdBlock.has("trusted_experiences")) + { + std::ostringstream str; + const LLSD& experiences = llsdBlock["trusted_experiences"]; + LLSD::array_const_iterator it = experiences.beginArray(); + for(/**/; it != experiences.endArray(); ++it) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); - returnValue = true; + str<<LLSLURL("experience", it->asUUID(), "profile").getSLURLString() << "\n"; } - else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0) + std::string str_list = str.str(); + if(!str_list.empty()) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock); - returnValue = true; + LLNotificationsUtil::add("TrustedExperiencesAvailable", LLSD::emptyMap().with("EXPERIENCE_LIST", (LLSD)str_list)); + return true; } } - - if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored()) - { - // Given a simple notification if no maturityLevelNotification is set or it is ignore - LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock); - } - - return returnValue; + return false; } // some of the server notifications need special handling. This is where we do that. @@ -5877,22 +5904,7 @@ bool handle_teleport_access_blocked(LLSD& llsdBlock) LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock); } } - if(llsdBlock.has("trusted_experiences")) - { - std::ostringstream str; - const LLSD& experiences = llsdBlock["trusted_experiences"]; - LLSD::array_const_iterator it = experiences.beginArray(); - for(/**/; it != experiences.endArray(); ++it) - { - str<<LLSLURL("experience", it->asUUID(), "profile").getSLURLString() << "\n"; - } - std::string str_list = str.str(); - if(!str_list.empty()) - { - LLNotificationsUtil::add("TrustedExperiencesAvailable", LLSD::emptyMap().with("EXPERIENCE_LIST", (LLSD)str_list)); - returnValue = true; - } - } + return returnValue; } @@ -5921,6 +5933,9 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl; } } + + + handle_trusted_experiences_notification(llsdBlock); if ( (notificationID == "RegionEntryAccessBlocked") || @@ -6004,6 +6019,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) } LLNotificationsUtil::add(notificationID, llsdBlock); + return true; } return false; -- cgit v1.2.3 From f45218ff32a20d1bd490fb9dc3951c4986bdd5ca Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 1 May 2014 22:57:04 +0100 Subject: Added counter of experiences in trusted/allowed/blocked lists in Region/Estate floater for ACME-1435 --- indra/newview/llfloaterregioninfo.cpp | 13 +++++++++++++ indra/newview/llpanelexperiencelisteditor.cpp | 10 ++++++++++ indra/newview/llpanelexperiencelisteditor.h | 1 + indra/newview/skins/default/xui/en/strings.xml | 3 +++ 4 files changed, 27 insertions(+) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 6d8f8f5587..7272fe79c7 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3588,6 +3588,19 @@ void LLPanelRegionExperiences::processResponse( const LLSD& content ) mAllowed->setExperienceIds(content["allowed"]); mBlocked->setExperienceIds(content["blocked"]); mTrusted->setExperienceIds(content["trusted"]); + + if (!mAllowed->getReadonly()) + { + mAllowed->refreshExperienceCounter("RegionInfoAllowedExperiences"); + } + if (!mBlocked->getReadonly()) + { + mBlocked->refreshExperienceCounter("RegionInfoBlockedExperiences"); + } + if (!mTrusted->getReadonly()) + { + mTrusted->refreshExperienceCounter("RegionInfoTrustedExperiences"); + } } diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 6d47673849..f01438b34e 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -36,6 +36,8 @@ #include "llscrolllistctrl.h" #include "llviewerregion.h" #include "llagent.h" +#include "lltextbox.h" +#include "lltrans.h" static LLPanelInjector<LLPanelExperienceListEditor> t_panel_experience_list_editor("panel_experience_list_editor"); @@ -211,6 +213,14 @@ void LLPanelExperienceListEditor::setReadonly( bool val ) checkButtonsEnabled(); } +void LLPanelExperienceListEditor::refreshExperienceCounter(std::string string_name) +{ + LLStringUtil::format_map_t args; + args["[EXPERIENCES]"] = llformat("%d", mItems->getItemCount()); + args["[MAXEXPERIENCES]"] = llformat("%d", ESTATE_MAX_EXPERIENCE_IDS); + getChild<LLTextBox>("text_name")->setText(LLTrans::getString(string_name, args)); +} + boost::signals2::connection LLPanelExperienceListEditor::setAddedCallback( list_changed_signal_t::slot_type cb ) { return mAddedCallback.connect(cb); diff --git a/indra/newview/llpanelexperiencelisteditor.h b/indra/newview/llpanelexperiencelisteditor.h index 765db9acbc..b361748d29 100644 --- a/indra/newview/llpanelexperiencelisteditor.h +++ b/indra/newview/llpanelexperiencelisteditor.h @@ -62,6 +62,7 @@ public: bool getReadonly() const { return mReadonly; } void setReadonly(bool val); + void refreshExperienceCounter(std::string string_name); void addFilter(filter_function func){mFilters.push_back(func);} private: diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 7985997524..ea27d142b7 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3995,6 +3995,9 @@ Try enclosing path to the editor with double quotes. <string name="Admin_Experiences_Tab">ADMIN</string> <string name="Recent_Experiences_Tab">RECENT</string> <string name="Owned_Experiences_Tab">OWNED</string> + <string name="RegionInfoAllowedExperiences">Allowed Experiences: ([EXPERIENCES], max [MAXEXPERIENCES])</string> + <string name="RegionInfoBlockedExperiences">Blocked Experiences: ([EXPERIENCES], max [MAXEXPERIENCES])</string> + <string name="RegionInfoTrustedExperiences">Trusted Experiences: ([EXPERIENCES], max [MAXEXPERIENCES])</string> <string name="ExperiencePermission1">take over your controls</string> <string name="ExperiencePermission3">trigger animations on your avatar</string> <string name="ExperiencePermission4">attach to your avatar</string> -- cgit v1.2.3 From cc5d14b431adb5ff7bee057b9f72cb5b1ba022b9 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 2 May 2014 01:08:18 +0100 Subject: Added explanation text on the right of experience lists in Region/Estate floater for ACME-1434 --- .../default/xui/en/panel_region_experiences.xml | 51 ++++++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) (limited to 'indra') 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 57c87d197f..f586b7b5d9 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -37,31 +37,74 @@ min_height="100" width="530"> <panel follows="all" - width="530" + width="330" name="panel_trusted" class="panel_experience_list_editor" filename="panel_experience_list_editor.xml" /> + <text + layout="topleft" + name="text_help" + length="1" + top="20" + left_pad="5" + width="200" + height="200" + follows="top|right" + word_wrap="true"> + Trusted Experiences have permission to run on this estate. + +Additionally, if the estate does not allow public access, Residents participating in any Trusted Experience may enter the estate and can remain as long as they are in the Experience. + +Any Experience may be Trusted. + </text> </layout_panel> <layout_panel height="100" min_height="100" width="530"> <panel - label="SOME LABEL" - width="530" + width="330" name="panel_allowed" class="panel_experience_list_editor" filename="panel_experience_list_editor.xml"/> + <text + layout="topleft" + name="text_help" + length="1" + top="20" + left_pad="5" + width="200" + height="200" + follows="top|right" + word_wrap="true"> + Allowed Experiences have permission to run on this estate. + +Only Experiences that are not Grid-Wide may be Allowed. + </text> </layout_panel> <layout_panel height="100" min_height="100" width="530"> <panel - width="530" + width="330" name="panel_blocked" class="panel_experience_list_editor" filename="panel_experience_list_editor.xml"/> + <text + layout="topleft" + name="text_help" + length="1" + top="20" + left_pad="5" + width="200" + height="200" + follows="top|right" + word_wrap="true"> + Blocked Experiences may not run on this estate. + +Only Grid-Wide Experiences may be Blocked. + </text> </layout_panel> </layout_stack> </panel> -- cgit v1.2.3 From 6e5452829ad452bacef92f1bdfed9d27a8d8fa98 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 6 May 2014 19:40:40 +0100 Subject: Added top caption for ACME-1434 --- .../default/xui/en/panel_region_experiences.xml | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'indra') 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 f586b7b5d9..b0ef3284f1 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -23,13 +23,25 @@ Trusted Experiences </panel.string> + <text + type="string" + length="1" + follows="left|top" + height="32" + layout="topleft" + left="10" + name="experiences_help_text" + top="14" + word_wrap="true"> + Changes to settings on this tab will affect all regions in the estate. + </text> <layout_stack left="5" layout="topleft" follows="all" - top="0" + top="40" right="-5" - height="320" + height="280" min_height="140" orientation="vertical"> <layout_panel @@ -43,9 +55,9 @@ filename="panel_experience_list_editor.xml" /> <text layout="topleft" - name="text_help" + name="trusted_text_help" length="1" - top="20" + top="5" left_pad="5" width="200" height="200" @@ -69,9 +81,9 @@ Any Experience may be Trusted. filename="panel_experience_list_editor.xml"/> <text layout="topleft" - name="text_help" + name="allowed_text_help" length="1" - top="20" + top="5" left_pad="5" width="200" height="200" @@ -93,9 +105,9 @@ Only Experiences that are not Grid-Wide may be Allowed. filename="panel_experience_list_editor.xml"/> <text layout="topleft" - name="text_help" + name="blocked_text_help" length="1" - top="20" + top="5" left_pad="5" width="200" height="200" -- cgit v1.2.3 From ae856ef31830912cec0f4de37167858a24e4ba30 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 6 May 2014 22:53:40 +0100 Subject: Made experience permissions notifications unique based on experienceid only for ACME-1471 --- indra/newview/skins/default/xui/en/notifications.xml | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ee007197d7..778a9b432c 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7115,6 +7115,10 @@ Once permission is granted you will not see this message again for this experien Scripts associated with this experience will be able to do the following on regions where the experience is active: [QUESTIONS]Is this OK? + + <unique combine="replace_with_new"> + <context>experience</context> + </unique> <tag>confirm</tag> <form name="form"> <button -- cgit v1.2.3 From d14673988d0d26e5029f8f921bf00cce63e4f767 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 7 May 2014 13:40:34 -0700 Subject: removed deprecated logging macros --- indra/newview/llexperiencelog.cpp | 2 +- indra/newview/llfloaterexperiencepicker.cpp | 2 +- indra/newview/llfloaterexperienceprofile.cpp | 8 ++++---- indra/newview/llfloaterexperiences.cpp | 14 ++++++++------ indra/newview/llfloaterregioninfo.cpp | 2 +- indra/newview/llinventoryobserver.cpp | 2 +- indra/newview/llpanelexperiencepicker.cpp | 4 ++-- 7 files changed, 18 insertions(+), 16 deletions(-) (limited to 'indra') diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index f1e097f22d..7b594577db 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -53,7 +53,7 @@ public: std::istringstream llsdData(llsdRaw); if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length())) { - llwarns << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << llendl; + LL_WARNS() << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << LL_ENDL; } } message["public_id"] = invoice; diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index 60a9bdfd98..da65e50244 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -50,7 +50,7 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca LLFloaterReg::showTypedInstance<LLFloaterExperiencePicker>("experience_search", key); if (!floater) { - llwarns << "Cannot instantiate experience picker" << llendl; + LL_WARNS() << "Cannot instantiate experience picker" << LL_ENDL; return NULL; } diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index f8b4978a3d..25433f814c 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -140,7 +140,7 @@ public: virtual void error(U32 status, const std::string& reason) { - llwarns << "HandleResponder failed with code: " << status<< ", reason: " << reason << llendl; + LL_WARNS() << "HandleResponder failed with code: " << status<< ", reason: " << reason << LL_ENDL; } }; @@ -768,7 +768,7 @@ void LLFloaterExperienceProfile::onSaveComplete( const LLSD& content ) if(!content.has("experience_keys")) { - llwarns << "LLFloaterExperienceProfile::onSaveComplete called with bad content" << llendl; + LL_WARNS() << "LLFloaterExperienceProfile::onSaveComplete called with bad content" << LL_ENDL; return; } @@ -777,13 +777,13 @@ void LLFloaterExperienceProfile::onSaveComplete( const LLSD& content ) LLSD::array_const_iterator it = experiences.beginArray(); if(it == experiences.endArray()) { - llwarns << "LLFloaterExperienceProfile::onSaveComplete called with empty content" << llendl; + LL_WARNS() << "LLFloaterExperienceProfile::onSaveComplete called with empty content" << LL_ENDL; return; } if(!it->has(LLExperienceCache::EXPERIENCE_ID) || ((*it)[LLExperienceCache::EXPERIENCE_ID].asUUID() != id)) { - llwarns << "LLFloaterExperienceProfile::onSaveComplete called with unexpected experience id" << llendl; + LL_WARNS() << "LLFloaterExperienceProfile::onSaveComplete called with unexpected experience id" << LL_ENDL; return; } diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 51e3996f3f..2153079fa4 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -25,18 +25,20 @@ */ #include "llviewerprecompiledheaders.h" - -#include "llpanelexperiences.h" #include "llfloaterexperiences.h" + #include "llagent.h" -#include "llfloaterregioninfo.h" -#include "lltabcontainer.h" -#include "lltrans.h" -#include "llexperiencecache.h" #include "llevents.h" +#include "llexperiencecache.h" +#include "llfloaterregioninfo.h" +#include "llhttpclient.h" #include "llnotificationsutil.h" #include "llpanelexperiencelog.h" #include "llpanelexperiencepicker.h" +#include "llpanelexperiences.h" +#include "lltabcontainer.h" +#include "lltrans.h" +#include "llviewerregion.h" #define SHOW_RECENT_TAB (0) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 244b1cbb9b..6bfb31164a 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3619,7 +3619,7 @@ public: } else { - llwarns << "experience responder failed [status:" << status << "]: " << content << llendl; + LL_WARNS() << "experience responder failed [status:" << status << "]: " << content << LL_ENDL; } } }; diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 2cbf9bb8b6..26643d8671 100755 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -702,7 +702,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask) LLViewerInventoryCategory* category = gInventory.getCategory(cat_id); if (!category) { - llwarns << "Category : Category id = " << cat_id << " disappeared" << llendl; + LL_WARNS() << "Category : Category id = " << cat_id << " disappeared" << LL_ENDL; cat_data.mCallback(); // Keep track of those deleted categories so we can remove them deleted_categories_ids.push_back(cat_id); diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 8da41b59dd..5d8f3134d6 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -78,7 +78,7 @@ public: } else { - llwarns << "experience picker failed [status:" << status << "]: " << content << llendl; + LL_WARNS() << "experience picker failed [status:" << status << "]: " << content << LL_ENDL; } } @@ -323,7 +323,7 @@ void LLPanelExperiencePicker::filterContent() if (search_results->isEmpty()) { LLStringUtil::format_map_t map; - std::string search_text = childGetText(TEXT_EDIT); + std::string search_text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); map["[TEXT]"] = search_text; if (search_text.empty()) { -- cgit v1.2.3 From d331db79c2a1f07f9919703677b44d4664c36509 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 7 May 2014 16:48:45 -0700 Subject: Build>Scripts>Recompile Scripts now will skip Experience scripts that the agent can not contribute to and will keep Experience association otherwise. --- indra/newview/llassetuploadqueue.cpp | 5 +- indra/newview/llassetuploadqueue.h | 4 +- indra/newview/llcompilequeue.cpp | 152 ++++++++++++++++++++----- indra/newview/llcompilequeue.h | 12 +- indra/newview/skins/default/xui/en/strings.xml | 3 +- 5 files changed, 145 insertions(+), 31 deletions(-) (limited to 'indra') diff --git a/indra/newview/llassetuploadqueue.cpp b/indra/newview/llassetuploadqueue.cpp index 2b428aec4b..1b72a077fb 100755 --- a/indra/newview/llassetuploadqueue.cpp +++ b/indra/newview/llassetuploadqueue.cpp @@ -165,6 +165,7 @@ void LLAssetUploadQueue::request(LLAssetUploadQueueSupplier** supplier) body["item_id"] = data.mItemId; body["is_script_running"] = data.mIsRunning; body["target"] = data.mIsTargetMono? "mono" : "lsl2"; + body["experience"] = data.mExperienceId; std::string url = ""; LLViewerObject* object = gObjectList.findObject(data.mTaskId); @@ -188,7 +189,8 @@ void LLAssetUploadQueue::queue(const std::string& filename, const LLUUID& queue_id, U8* script_data, U32 data_size, - std::string script_name) + std::string script_name, + const LLUUID& experience_id) { UploadData data; data.mTaskId = task_id; @@ -200,6 +202,7 @@ void LLAssetUploadQueue::queue(const std::string& filename, data.mData = script_data; data.mDataSize = data_size; data.mScriptName = script_name; + data.mExperienceId = experience_id; mQueue.push_back(data); diff --git a/indra/newview/llassetuploadqueue.h b/indra/newview/llassetuploadqueue.h index 434f3e5c03..2ceee8f700 100755 --- a/indra/newview/llassetuploadqueue.h +++ b/indra/newview/llassetuploadqueue.h @@ -50,7 +50,8 @@ public: const LLUUID& queue_id, U8* data, U32 data_size, - std::string script_name); + std::string script_name, + const LLUUID& experience_id); bool isEmpty() const {return mQueue.empty();} @@ -69,6 +70,7 @@ private: U8* mData; U32 mDataSize; std::string mScriptName; + LLUUID mExperienceId; }; // Ownership of mSupplier passed to currently waiting responder diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index b0916d769a..9e554ba0eb 100755 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -59,6 +59,8 @@ #include "lltrans.h" #include "llselectmgr.h" +#include "llexperienceassociationresponder.h" +#include "llexperiencecache.h" // *TODO: This should be separated into the script queue, and the floater views of that queue. // There should only be one floater class that can view any queue type @@ -70,11 +72,13 @@ struct LLScriptQueueData { LLUUID mQueueID; - std::string mScriptName; LLUUID mTaskId; - LLUUID mItemId; - LLScriptQueueData(const LLUUID& q_id, const std::string& name, const LLUUID& task_id, const LLUUID& item_id) : - mQueueID(q_id), mScriptName(name), mTaskId(task_id), mItemId(item_id) {} + LLPointer<LLInventoryItem> mItem; + LLHost mHost; + LLUUID mExperienceId; + std::string mExperiencename; + LLScriptQueueData(const LLUUID& q_id, const LLUUID& task_id, LLInventoryItem* item) : + mQueueID(q_id), mTaskId(task_id), mItem(new LLInventoryItem(item)) {} }; @@ -88,6 +92,7 @@ LLFloaterScriptQueue::LLFloaterScriptQueue(const LLSD& key) : mDone(false), mMono(false) { + } // Destroys the object @@ -167,7 +172,7 @@ BOOL LLFloaterScriptQueue::start() getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM); - return nextObject(); + return startQueue(); } BOOL LLFloaterScriptQueue::isDone() const @@ -232,6 +237,40 @@ BOOL LLFloaterScriptQueue::popNext() return rv; } +BOOL LLFloaterScriptQueue::startQueue() +{ + return nextObject(); +} + +class CompileQueueExperienceResponder : public LLHTTPClient::Responder +{ +public: + CompileQueueExperienceResponder(const LLUUID& parent):mParent(parent) + { + } + + LLUUID mParent; + + virtual void result(const LLSD& content) + { + sendResult(content); + } + virtual void error(U32 status, const std::string& reason) + { + sendResult(LLSD()); + } + void sendResult(const LLSD& content) + { + LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", mParent); + if(!queue) + return; + + queue->experienceIdsReceived(content["experience_ids"]); + } +}; + + + ///---------------------------------------------------------------------------- /// Class LLFloaterCompileQueue @@ -284,6 +323,21 @@ LLFloaterCompileQueue::~LLFloaterCompileQueue() { } +void LLFloaterCompileQueue::experienceIdsReceived( const LLSD& content ) +{ + for(LLSD::array_const_iterator it = content.beginArray(); it != content.endArray(); ++it) + { + mExperienceIds.insert(it->asUUID()); + } + nextObject(); +} + +BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const +{ + return mExperienceIds.find(id) != mExperienceIds.end(); +} + + void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object, LLInventoryObject::object_list_t* inv) { @@ -324,25 +378,52 @@ void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object, { LLInventoryItem *itemp = iter->second; LLScriptQueueData* datap = new LLScriptQueueData(getKey().asUUID(), - itemp->getName(), - viewer_object->getID(), - itemp->getUUID()); - - //LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL; - gAssetStorage->getInvItemAsset(viewer_object->getRegion()->getHost(), - gAgent.getID(), - gAgent.getSessionID(), - itemp->getPermissions().getOwner(), - viewer_object->getID(), - itemp->getUUID(), - itemp->getAssetUUID(), - itemp->getType(), - LLFloaterCompileQueue::scriptArrived, - (void*)datap); + viewer_object->getID(), itemp); + + ExperienceAssociationResponder::fetchAssociatedExperience(itemp->getParentUUID(), itemp->getUUID(), + boost::bind(LLFloaterCompileQueue::requestAsset, datap, _1)); + } + } +} + + +void LLFloaterCompileQueue::requestAsset( LLScriptQueueData* datap, const LLSD& experience ) +{ + LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", datap->mQueueID); + if(!queue) + { + delete datap; + return; + } + if(experience.has(LLExperienceCache::EXPERIENCE_ID)) + { + datap->mExperienceId=experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); + if(!queue->hasExperience(datap->mExperienceId)) + { + std::string buffer = LLTrans::getString("CompileNoExperiencePerm", LLSD::emptyMap() + .with("SCRIPT", datap->mItem->getName()) + .with("EXPERIENCE", experience[LLExperienceCache::NAME].asString())); + + queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM); + queue->removeItemByItemID(datap->mItem->getUUID()); + delete datap; + return; } } + //LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL; + gAssetStorage->getInvItemAsset(datap->mHost, + gAgent.getID(), + gAgent.getSessionID(), + datap->mItem->getPermissions().getOwner(), + datap->mTaskId, + datap->mItem->getUUID(), + datap->mItem->getAssetUUID(), + datap->mItem->getType(), + LLFloaterCompileQueue::scriptArrived, + (void*)datap); } + // This is the callback for when each script arrives // static void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id, @@ -382,12 +463,12 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id, file.read(script_data, script_size); queue->mUploadQueue->queue(filename, data->mTaskId, - data->mItemId, is_running, queue->mMono, queue->getKey().asUUID(), - script_data, script_size, data->mScriptName); + data->mItem->getUUID(), is_running, queue->mMono, queue->getKey().asUUID(), + script_data, script_size, data->mItem->getName(), data->mExperienceId); } else { - buffer = LLTrans::getString("CompileQueueServiceUnavailable") + (": ") + data->mScriptName; + buffer = LLTrans::getString("CompileQueueServiceUnavailable") + (": ") + data->mItem->getName(); } } } @@ -399,7 +480,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id, args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound"); LLNotificationsUtil::add("SystemMessage", args); - buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mScriptName; + buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mItem->getName(); } else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status) { @@ -407,15 +488,15 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id, args["MESSAGE"] = LLTrans::getString("CompileQueueInsufficientPermDownload"); LLNotificationsUtil::add("SystemMessage", args); - buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mScriptName; + buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mItem->getName(); } else { - buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mScriptName; + buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mItem->getName(); } LL_WARNS() << "Problem downloading script asset." << LL_ENDL; - if(queue) queue->removeItemByItemID(data->mItemId); + if(queue) queue->removeItemByItemID(data->mItem->getUUID()); } if(queue && (buffer.size() > 0)) { @@ -564,6 +645,23 @@ void LLFloaterCompileQueue::removeItemByItemID(const LLUUID& asset_id) } } +BOOL LLFloaterCompileQueue::startQueue() +{ + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url=region->getCapability("GetCreatorExperiences"); + if(!lookup_url.empty()) + { + LLHTTPClient::get(lookup_url, new CompileQueueExperienceResponder(getKey().asUUID())); + return TRUE; + } + } + return nextObject(); +} + + + void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj, LLInventoryObject::object_list_t* inv) { diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h index 28f4625de8..54842bb302 100755 --- a/indra/newview/llcompilequeue.h +++ b/indra/newview/llcompilequeue.h @@ -81,13 +81,15 @@ protected: // returns true if this is done BOOL isDone() const; + virtual BOOL startQueue(); + // go to the next object. If no objects left, it falls out // silently and waits to be killed by the deleteIfDone() callback. BOOL nextObject(); BOOL popNext(); void setStartString(const std::string& s) { mStartString = s; } - + protected: // UI LLScrollListCtrl* mMessages; @@ -131,6 +133,9 @@ public: LLAssetUploadQueue* getUploadQueue() { return mUploadQueue; } + void experienceIdsReceived( const LLSD& content ); + BOOL hasExperience(const LLUUID& id)const; + protected: LLFloaterCompileQueue(const LLSD& key); virtual ~LLFloaterCompileQueue(); @@ -139,16 +144,21 @@ protected: virtual void handleInventory(LLViewerObject* viewer_obj, LLInventoryObject::object_list_t* inv); + static void requestAsset(struct LLScriptQueueData* datap, const LLSD& experience); + + // This is the callback for when each script arrives static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status); + virtual BOOL startQueue(); protected: LLViewerInventoryItem::item_array_t mCurrentScripts; private: LLAssetUploadQueue* mUploadQueue; + uuid_list_t mExperienceIds; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index a45aaa2e99..ef6877b5fa 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2464,7 +2464,8 @@ The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors. <string name="CompileQueueProblemDownloading">Problem downloading</string> <string name="CompileQueueInsufficientPermDownload">Insufficient permissions to download a script.</string> <string name="CompileQueueInsufficientPermFor">Insufficient permissions for</string> - <string name="CompileQueueUnknownFailure">Unknown failure to download</string> + <string name="CompileQueueUnknownFailure">Unknown failure to download</string> + <string name="CompileNoExperiencePerm">Skipping script [SCRIPT] with Experience [EXPERIENCE].</string> <string name="CompileQueueTitle">Recompilation Progress</string> <string name="CompileQueueStart">recompile</string> <string name="ResetQueueTitle">Reset Progress</string> -- cgit v1.2.3 From bb5e0f7877d06f10cd9ba82bc596a072427306b2 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 9 May 2014 10:26:06 -0700 Subject: Enable the experience purchase button based on the sim providing purchase info. --- indra/newview/llfloaterexperiences.cpp | 24 ++++++++++++++++------ indra/newview/llfloaterexperiences.h | 1 + .../skins/default/xui/en/floater_experiences.xml | 6 +++--- 3 files changed, 22 insertions(+), 9 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 2153079fa4..5ed77d3680 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -47,11 +47,13 @@ class LLExperienceListResponder : public LLHTTPClient::Responder { public: typedef std::map<std::string, std::string> NameMap; - LLExperienceListResponder(const LLHandle<LLFloaterExperiences>& parent, NameMap& nameMap, const std::string& errorMessage="ErrorMessage"):mParent(parent),mErrorMessage(errorMessage) - { - mNameMap.swap(nameMap); - } + typedef boost::function<void(LLPanelExperiences*, const LLSD&)> Callback; + LLExperienceListResponder(const LLHandle<LLFloaterExperiences>& parent, NameMap& nameMap, const std::string& errorMessage="ErrorMessage"):mParent(parent),mErrorMessage(errorMessage) + { + mNameMap.swap(nameMap); + } + Callback mCallback; LLHandle<LLFloaterExperiences> mParent; NameMap mNameMap; const std::string mErrorMessage; @@ -73,7 +75,10 @@ public: { const LLSD& ids = content[it->first]; tab->setExperienceList(ids); - tab->enableButton(ids.beginArray() == ids.endArray()); + if(!mCallback.empty()) + { + mCallback(tab, content); + } } } ++it; @@ -298,6 +303,11 @@ void LLFloaterExperiences::onClose( bool app_quitting ) LLFloater::onClose(app_quitting); } +void LLFloaterExperiences::checkPurchaseInfo(LLPanelExperiences* panel, const LLSD& content) const +{ + panel->enableButton(content.has("purchase")); +} + void LLFloaterExperiences::sendPurchaseRequest() const { LLViewerRegion* region = gAgent.getRegion(); @@ -308,6 +318,8 @@ void LLFloaterExperiences::sendPurchaseRequest() const LLExperienceListResponder::NameMap nameMap; nameMap["experience_ids"]="Owned_Experiences_Tab"; - LLHTTPClient::post(url, content, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap, "ExperienceAcquireFailed")); + LLExperienceListResponder* responder = new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap, "ExperienceAcquireFailed"); + responder->mCallback = boost::bind(&LLFloaterExperiences::checkPurchaseInfo, this, _1, _2); + LLHTTPClient::post(url, content, responder); } } diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h index bb2de2f0db..f1a0f49245 100644 --- a/indra/newview/llfloaterexperiences.h +++ b/indra/newview/llfloaterexperiences.h @@ -49,6 +49,7 @@ protected: bool updatePermissions(const LLSD& permission); void sendPurchaseRequest() const; + void checkPurchaseInfo(LLPanelExperiences* panel, const LLSD& content)const; private: diff --git a/indra/newview/skins/default/xui/en/floater_experiences.xml b/indra/newview/skins/default/xui/en/floater_experiences.xml index e727512b7f..fe959ea6d8 100644 --- a/indra/newview/skins/default/xui/en/floater_experiences.xml +++ b/indra/newview/skins/default/xui/en/floater_experiences.xml @@ -4,9 +4,9 @@ can_close="true" can_resize="true" height="400" - width="300" + width="500" min_height="300" - min_width="300" + min_width="500" layout="topleft" name="floater_experiences" save_rect="true" @@ -18,7 +18,7 @@ top="3" left="3" layout="topleft" - width="294" + right="-3" follows="all" height="394" name="xp_tabs"> -- cgit v1.2.3 From 1b704efb17a2278588146760d189daaffe56d35d Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Mon, 12 May 2014 17:03:10 -0700 Subject: Don't bother updating the dirty flag if the profile is not editable. --- indra/newview/llfloaterexperienceprofile.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 25433f814c..c14d77a944 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -647,6 +647,10 @@ void LLFloaterExperienceProfile::onFieldChanged() { updatePackage(); + if(!getChild<LLButton>(BTN_EDIT)->getVisible()) + { + return; + } LLSD::map_const_iterator st = mExperienceDetails.beginMap(); LLSD::map_const_iterator dt = mPackage.beginMap(); -- cgit v1.2.3 From 6766ef06d44b1991bd6ef3f699354f98651679b4 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 13 May 2014 14:52:10 -0700 Subject: ACME-1474: Prevent the viewer from trying to add or remove the default experience. --- indra/newview/llfloaterregioninfo.cpp | 23 ++++++++++++++++++++++- indra/newview/llfloaterregioninfo.h | 1 + indra/newview/llpanelexperiencelisteditor.cpp | 18 +++++++++++++++++- indra/newview/llpanelexperiencelisteditor.h | 8 +++++--- indra/newview/llpanelexperiencepicker.cpp | 9 +++++++++ indra/newview/llpanelexperiencepicker.h | 1 + 6 files changed, 55 insertions(+), 5 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 6bfb31164a..d65661c6e9 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3583,9 +3583,22 @@ LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* co void LLPanelRegionExperiences::processResponse( const LLSD& content ) { + if(content.has("default")) + { + mDefaultExperience = content["default"].asUUID(); + } + mAllowed->setExperienceIds(content["allowed"]); mBlocked->setExperienceIds(content["blocked"]); - mTrusted->setExperienceIds(content["trusted"]); + + LLSD trusted = content["trusted"]; + if(mDefaultExperience.notNull()) + { + mTrusted->setStickyFunction(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience)); + trusted.append(mDefaultExperience); + } + + mTrusted->setExperienceIds(trusted); if (!mAllowed->getReadonly()) { @@ -3646,6 +3659,8 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mAllowed->setReadonly(!allow_modify); // remove grid-wide experiences mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); + // remove default experience + mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience)); mBlocked->loading(); mBlocked->setReadonly(!allow_modify); @@ -3653,6 +3668,8 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region) mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); // but not privileged ones mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); + // remove default experience + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterMatching, _1, mDefaultExperience)); mTrusted->loading(); mTrusted->setReadonly(!allow_modify); @@ -3699,6 +3716,10 @@ BOOL LLPanelRegionExperiences::sendUpdate() void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) { + if(id == mDefaultExperience) + { + return; + } strings_t str(3, std::string()); gAgent.getID().toString(str[0]); str[1] = llformat("%u", event_type); diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 4a8bc19ace..2020cbce2b 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -478,6 +478,7 @@ private: LLPanelExperienceListEditor* mTrusted; LLPanelExperienceListEditor* mAllowed; LLPanelExperienceListEditor* mBlocked; + LLUUID mDefaultExperience; }; #endif diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index f01438b34e..323adbe2b7 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -143,7 +143,23 @@ void LLPanelExperienceListEditor::checkButtonsEnabled() { mAdd->setEnabled(!mReadonly); int selected = mItems->getNumSelected(); - mRemove->setEnabled(!mReadonly && selected>0); + + bool remove_enabled = !mReadonly && selected>0; + if(remove_enabled && mSticky) + { + std::vector<LLScrollListItem*> items= mItems->getAllSelected(); + std::vector<LLScrollListItem*>::iterator it = items.begin(); + for(/**/; it != items.end() && remove_enabled; ++it) + { + if((*it) != NULL) + { + remove_enabled = !mSticky((*it)->getValue()); + } + } + + + } + mRemove->setEnabled(remove_enabled); mProfile->setEnabled(selected==1); } diff --git a/indra/newview/llpanelexperiencelisteditor.h b/indra/newview/llpanelexperiencelisteditor.h index b361748d29..189d81f897 100644 --- a/indra/newview/llpanelexperiencelisteditor.h +++ b/indra/newview/llpanelexperiencelisteditor.h @@ -41,8 +41,8 @@ public: typedef boost::signals2::signal<void (const LLUUID&) > list_changed_signal_t; // filter function for experiences, return true if the experience should be hidden. - typedef boost::function<bool (const LLSD&)> filter_function; - typedef std::vector<filter_function> filter_list; + typedef boost::function<bool (const LLSD&)> experience_function; + typedef std::vector<experience_function> filter_list; typedef LLHandle<LLFloaterExperiencePicker> PickerHandle; LLPanelExperienceListEditor(); ~LLPanelExperienceListEditor(); @@ -64,7 +64,8 @@ public: void refreshExperienceCounter(std::string string_name); - void addFilter(filter_function func){mFilters.push_back(func);} + void addFilter(experience_function func){mFilters.push_back(func);} + void setStickyFunction(experience_function func){mSticky = func;} private: void onItems(); @@ -89,6 +90,7 @@ private: list_changed_signal_t mRemovedCallback; LLUUID mKey; bool mReadonly; + experience_function mSticky; }; diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 5d8f3134d6..eb0c7c65ab 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -395,3 +395,12 @@ void LLPanelExperiencePicker::setDefaultFilters() mFilters.clear(); addFilter(boost::bind(&LLPanelExperiencePicker::FilterOverRating, this, _1)); } + +bool LLPanelExperiencePicker::FilterMatching( const LLSD& experience, const LLUUID& id ) +{ + if(experience.isUUID()) + { + return experience.asUUID() == id; + } + return experience[LLExperienceCache::EXPERIENCE_ID].asUUID() == id; +} diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h index af0a30ceba..d5c38598e1 100644 --- a/indra/newview/llpanelexperiencepicker.h +++ b/indra/newview/llpanelexperiencepicker.h @@ -56,6 +56,7 @@ public: static bool FilterWithProperty(const LLSD& experience, S32 prop); static bool FilterWithoutProperty(const LLSD& experience, S32 prop); + static bool FilterMatching(const LLSD& experience, const LLUUID& id); bool FilterOverRating(const LLSD& experience); private: -- cgit v1.2.3 From 169bf48f1068b0996f38ef03a9a97cd6c0fa07e0 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 13 May 2014 16:25:52 -0700 Subject: ACME-1450: Added paging to the experience picker and upped the search size to 30 results per page. --- indra/newview/llpanelexperiencepicker.cpp | 45 ++++++++++++++++------ indra/newview/llpanelexperiencepicker.h | 2 + .../default/xui/en/panel_experience_search.xml | 35 ++++++++++++----- 3 files changed, 62 insertions(+), 20 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index eb0c7c65ab..19778cb200 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -46,6 +46,8 @@ #define BTN_OK "ok_btn" #define BTN_CANCEL "cancel_btn" #define BTN_PROFILE "profile_btn" +#define BTN_LEFT "left_btn" +#define BTN_RIGHT "right_btn" #define TEXT_EDIT "edit" #define TEXT_MATURITY "maturity" #define LIST_RESULTS "search_results" @@ -65,11 +67,10 @@ public: void completed(U32 status, const std::string& reason, const LLSD& content) { + if(mParent.isDead()) + return; if (isGoodStatus(status)) { - if(mParent.isDead()) - return; - LLPanelExperiencePicker* panel =mParent.get(); if (panel) { @@ -78,6 +79,11 @@ public: } else { + LLPanelExperiencePicker* panel =mParent.get(); + if (panel) + { + panel->processResponse(mQueryID, LLSD()); + } LL_WARNS() << "experience picker failed [status:" << status << "]: " << content << LL_ENDL; } @@ -118,6 +124,9 @@ BOOL LLPanelExperiencePicker::postBuild() getChild<LLComboBox>(TEXT_MATURITY)->setCommitCallback(boost::bind(&LLPanelExperiencePicker::onMaturity, this)); getChild<LLUICtrl>(TEXT_EDIT)->setFocus(TRUE); + childSetAction(BTN_LEFT, boost::bind(&LLPanelExperiencePicker::onPage, this, -1)); + childSetAction(BTN_RIGHT, boost::bind(&LLPanelExperiencePicker::onPage, this, 1)); + LLPanel* search_panel = getChild<LLPanel>(PANEL_SEARCH); if (search_panel) { @@ -134,6 +143,7 @@ void LLPanelExperiencePicker::editKeystroke( class LLLineEditor* caller, void* u void LLPanelExperiencePicker::onBtnFind() { + mCurrentPage=1; find(); } @@ -150,24 +160,24 @@ void LLPanelExperiencePicker::find() { std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString(); mQueryID.generate(); - std::string url; - url.reserve(128+text.size()); + std::ostringstream url; LLViewerRegion* region = gAgent.getRegion(); - url = region->getCapability("FindExperienceByName"); - if (!url.empty()) + std::string cap = region->getCapability("FindExperienceByName"); + if (!cap.empty()) { - url+="?query="; - url+=LLURI::escape(text); - LLHTTPClient::get(url, new LLExperienceSearchResponder(mQueryID, getDerivedHandle<LLPanelExperiencePicker>())); + url << cap << "?page=" << mCurrentPage << "&page_size=30&query=" << LLURI::escape(text); + LLHTTPClient::get(url.str(), new LLExperienceSearchResponder(mQueryID, getDerivedHandle<LLPanelExperiencePicker>())); } - getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems(); getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching")); getChildView(BTN_OK)->setEnabled(FALSE); getChildView(BTN_PROFILE)->setEnabled(FALSE); + + getChildView(BTN_RIGHT)->setEnabled(FALSE); + getChildView(BTN_LEFT)->setEnabled(FALSE); } @@ -227,6 +237,9 @@ void LLPanelExperiencePicker::processResponse( const LLUUID& query_id, const LLS LLExperienceCache::insert(*it); } + getChildView(BTN_RIGHT)->setEnabled(content.has("next_page_url")); + getChildView(BTN_LEFT)->setEnabled(content.has("previous_page_url")); + filterContent(); } @@ -404,3 +417,13 @@ bool LLPanelExperiencePicker::FilterMatching( const LLSD& experience, const LLUU } return experience[LLExperienceCache::EXPERIENCE_ID].asUUID() == id; } + +void LLPanelExperiencePicker::onPage( S32 direction ) +{ + mCurrentPage += direction; + if(mCurrentPage < 1) + { + mCurrentPage = 1; + } + find(); +} diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h index d5c38598e1..b2ba7f26ee 100644 --- a/indra/newview/llpanelexperiencepicker.h +++ b/indra/newview/llpanelexperiencepicker.h @@ -68,6 +68,7 @@ private: void onBtnProfile(); void onList(); void onMaturity(); + void onPage(S32 direction); void getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids ); void setAllowMultiple(bool allow_multiple); @@ -87,6 +88,7 @@ private: LLUUID mQueryID; LLSD mResponse; bool mCloseOnSelect; + S32 mCurrentPage; }; #endif // LL_LLPANELEXPERIENCEPICKER_H diff --git a/indra/newview/skins/default/xui/en/panel_experience_search.xml b/indra/newview/skins/default/xui/en/panel_experience_search.xml index 5ac7f6b239..3deca265da 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_search.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_search.xml @@ -147,20 +147,37 @@ name="ok_btn" top_pad="3" left="0" - width="100" /> + width="95" /> <button follows="left|bottom" height="23" label="Cancel" name="cancel_btn" - width="100" - left_pad="3" /> - <button - follows="left|bottom" - height="23" - label="View Profile" - name="profile_btn" - width="100" + width="95" left_pad="3" /> + <button + follows="left|bottom" + height="23" + label="View Profile" + name="profile_btn" + width="95" + left_pad="3" /> + <button + follows="left|bottom" + height="23" + label="<" + name="left_btn" + width="23" + left_pad="3" + enabled="false"/> + <button + follows="left|bottom" + height="23" + label=">" + name="right_btn" + width="23" + left_pad="3" + enabled="false" /> + </panel> </panel> -- cgit v1.2.3 From 9a7458f9e32773c07b689a6d490e5bfe9c6ec47f Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 15 May 2014 11:56:46 -0700 Subject: Check for trusted experiences on teleport denied (again) --- indra/newview/llviewermessage.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 266ad220e2..d4750c0689 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5796,6 +5796,7 @@ bool handle_teleport_access_blocked(LLSD& llsdBlock) } } + handle_trusted_experiences_notification(llsdBlock); return returnValue; } -- cgit v1.2.3 From 4c7b0cb528f61bc20866c2f7c43049ef7bc49bf2 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 16 May 2014 15:52:39 -0700 Subject: ACME-1459: Experience tab added to the about land tab for editing parcel Experiences --- indra/llinventory/llparcel.cpp | 14 +- indra/llinventory/llparcel.h | 4 + indra/newview/llfloaterland.cpp | 684 +++++++++++++-------- indra/newview/llfloaterland.h | 80 +-- indra/newview/llfloaterregioninfo.cpp | 40 +- indra/newview/llfloaterregioninfo.h | 2 +- indra/newview/llpanelexperiencelisteditor.cpp | 14 +- indra/newview/llpanelexperiencelisteditor.h | 5 +- indra/newview/llviewerparcelmgr.h | 8 +- .../skins/default/xui/en/floater_about_land.xml | 19 +- .../xui/en/panel_experience_list_editor.xml | 40 +- .../default/xui/en/panel_region_experiences.xml | 104 ++-- .../newview/skins/default/xui/en/role_actions.xml | 6 +- indra/newview/skins/default/xui/en/strings.xml | 4 +- 14 files changed, 603 insertions(+), 421 deletions(-) (limited to 'indra') diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index d2179308c1..0784986e3a 100755 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -41,6 +41,7 @@ #include "message.h" #include "u64.h" #include "llregionflags.h" +#include <boost/range/adaptor/map.hpp> static const F32 SOME_BIG_NUMBER = 1000.0f; static const F32 SOME_BIG_NEG_NUMBER = -1000.0f; @@ -1256,6 +1257,17 @@ void LLParcel::setExperienceKeyType( const LLUUID& experience_key, U32 type ) } else { - mExperienceKeys[experience_key] = type; + if(countExperienceKeyType(type) < PARCEL_MAX_EXPERIENCE_LIST) + { + mExperienceKeys[experience_key] = type; + } } } + +U32 LLParcel::countExperienceKeyType( U32 type ) +{ + return std::count_if( + boost::begin(mExperienceKeys | boost::adaptors::map_values), + boost::end(mExperienceKeys | boost::adaptors::map_values), + std::bind2nd(std::equal_to<U32>(), type)); +} diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index fe76531317..e68331b99a 100755 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -53,6 +53,9 @@ const S32 PARCEL_MAX_ACCESS_LIST = 300; //for access/ban lists. const F32 PARCEL_MAX_ENTRIES_PER_PACKET = 48.f; +// Maximum number of experiences +const S32 PARCEL_MAX_EXPERIENCE_LIST = 24; + // Weekly charge for listing a parcel in the directory const S32 PARCEL_DIRECTORY_FEE = 30; @@ -671,6 +674,7 @@ public: typedef std::map<LLUUID, U32> xp_type_map_t; void setExperienceKeyType(const LLUUID& experience_key, U32 type); + U32 countExperienceKeyType(U32 type); U32 getExperienceKeyType(const LLUUID& experience_key)const; LLAccessEntry::map getExperienceKeysByType(U32 type)const; void clearExperienceKeysByType(U32 type); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 9b588dc166..7fbbef5ed3 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -75,6 +75,7 @@ #include "llviewercontrol.h" #include "roles_constants.h" #include "lltrans.h" +#include "llpanelexperiencelisteditor.h" #include "llgroupactions.h" @@ -86,7 +87,6 @@ static std::string MATURITY = "[MATURITY]"; // constants used in callbacks below - syntactic sugar. static const BOOL BUY_GROUP_LAND = TRUE; static const BOOL BUY_PERSONAL_LAND = FALSE; -LLPointer<LLParcelSelection> LLPanelLandGeneral::sSelectionForBuyPass = NULL; // Statics LLParcelSelectionObserver* LLFloaterLand::sObserver = NULL; @@ -162,191 +162,117 @@ void send_parcel_select_objects(S32 parcel_local_id, U32 return_type, msg->sendReliable(region->getHost()); } -LLParcel* LLFloaterLand::getCurrentSelectedParcel() +void send_other_clean_time_message(S32 parcel_local_id, S32 other_clean_time) { - return mParcel->getParcel(); -}; + LLMessageSystem *msg = gMessageSystem; -//static -LLPanelLandObjects* LLFloaterLand::getCurrentPanelLandObjects() -{ - LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(land_instance) - { - return land_instance->mPanelObjects; - } - else - { - return NULL; - } -} + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + if (!region) return; -//static -LLPanelLandCovenant* LLFloaterLand::getCurrentPanelLandCovenant() -{ - LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(land_instance) - { - return land_instance->mPanelCovenant; - } - else - { - return NULL; - } -} + msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ParcelData); + msg->addS32Fast(_PREHASH_LocalID, parcel_local_id); + msg->addS32Fast(_PREHASH_OtherCleanTime, other_clean_time); -// static -void LLFloaterLand::refreshAll() -{ - LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(land_instance) - { - land_instance->refresh(); - } + msg->sendReliable(region->getHost()); } -void LLFloaterLand::onOpen(const LLSD& key) +// inserts maturity info(icon and text) into target textbox +// names_floater - pointer to floater which contains strings with maturity icons filenames +// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY] +void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse) { - // moved from triggering show instance in llviwermenu.cpp - - if (LLViewerParcelMgr::getInstance()->selectionEmpty()) - { - LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); - } - - // Done automatically when the selected parcel's properties arrive - // (and hence we have the local id). - // LLViewerParcelMgr::getInstance()->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER); + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + if (!region) + return; - mParcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection(); - - // Refresh even if not over a region so we don't get an - // uninitialized dialog. The dialog is 0-region aware. - refresh(); -} + LLStyle::Params style; -void LLFloaterLand::onVisibilityChanged(const LLSD& visible) -{ - if (!visible.asBoolean()) - { - // Might have been showing owned objects - LLSelectMgr::getInstance()->unhighlightAll(); + U8 sim_access = region->getSimAccess(); - // Save which panel we had open - sLastTab = mTabLand->getCurrentPanelIndex(); - } -} + switch(sim_access) + { + case SIM_ACCESS_PG: + style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_general"))); + break; + case SIM_ACCESS_ADULT: + style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_adult"))); + break; -LLFloaterLand::LLFloaterLand(const LLSD& seed) -: LLFloater(seed) -{ - mFactoryMap["land_general_panel"] = LLCallbackMap(createPanelLandGeneral, this); - mFactoryMap["land_covenant_panel"] = LLCallbackMap(createPanelLandCovenant, this); - mFactoryMap["land_objects_panel"] = LLCallbackMap(createPanelLandObjects, this); - mFactoryMap["land_options_panel"] = LLCallbackMap(createPanelLandOptions, this); - mFactoryMap["land_audio_panel"] = LLCallbackMap(createPanelLandAudio, this); - mFactoryMap["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this); - mFactoryMap["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this); + case SIM_ACCESS_MATURE: + style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_moderate"))); + break; - sObserver = new LLParcelSelectionObserver(); - LLViewerParcelMgr::getInstance()->addObserver( sObserver ); -} + default: + break; + } -BOOL LLFloaterLand::postBuild() -{ - setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChanged, this, _2)); + size_t maturity_pos = str_to_parse.find(MATURITY); - LLTabContainer* tab = getChild<LLTabContainer>("landtab"); - - mTabLand = (LLTabContainer*) tab; - - if (tab) + if (maturity_pos == std::string::npos) { - tab->selectTab(sLastTab); + return; } - return TRUE; -} + std::string text_before_rating = str_to_parse.substr(0, maturity_pos); + std::string text_after_rating = str_to_parse.substr(maturity_pos + MATURITY.length()); + target_textbox->setText(text_before_rating); -// virtual -LLFloaterLand::~LLFloaterLand() -{ - LLViewerParcelMgr::getInstance()->removeObserver( sObserver ); - delete sObserver; - sObserver = NULL; -} + target_textbox->appendImageSegment(style); -// public -void LLFloaterLand::refresh() -{ - mPanelGeneral->refresh(); - mPanelObjects->refresh(); - mPanelOptions->refresh(); - mPanelAudio->refresh(); - mPanelMedia->refresh(); - mPanelAccess->refresh(); - mPanelCovenant->refresh(); + target_textbox->appendText(LLViewerParcelMgr::getInstance()->getSelectionRegion()->getSimAccessString(), false); + target_textbox->appendText(text_after_rating, false); } - - -void* LLFloaterLand::createPanelLandGeneral(void* data) +void send_return_objects_message(S32 parcel_local_id, S32 return_type, + uuid_list_t* owner_ids = NULL) { - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelGeneral = new LLPanelLandGeneral(self->mParcel); - return self->mPanelGeneral; -} + LLMessageSystem *msg = gMessageSystem; -// static -void* LLFloaterLand::createPanelLandCovenant(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelCovenant = new LLPanelLandCovenant(self->mParcel); - return self->mPanelCovenant; -} + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + if (!region) return; + msg->newMessageFast(_PREHASH_ParcelReturnObjects); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ParcelData); + msg->addS32Fast(_PREHASH_LocalID, parcel_local_id); + msg->addU32Fast(_PREHASH_ReturnType, (U32) return_type); -// static -void* LLFloaterLand::createPanelLandObjects(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelObjects = new LLPanelLandObjects(self->mParcel); - return self->mPanelObjects; -} + // Dummy task id, not used + msg->nextBlock("TaskIDs"); + msg->addUUID("TaskID", LLUUID::null); -// static -void* LLFloaterLand::createPanelLandOptions(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelOptions = new LLPanelLandOptions(self->mParcel); - return self->mPanelOptions; -} + // Throw all return ids into the packet. + // TODO: Check for too many ids. + if (owner_ids) + { + uuid_list_t::iterator end = owner_ids->end(); + for (uuid_list_t::iterator it = owner_ids->begin(); + it != end; + ++it) + { + msg->nextBlockFast(_PREHASH_OwnerIDs); + msg->addUUIDFast(_PREHASH_OwnerID, (*it)); + } + } + else + { + msg->nextBlockFast(_PREHASH_OwnerIDs); + msg->addUUIDFast(_PREHASH_OwnerID, LLUUID::null); + } -// static -void* LLFloaterLand::createPanelLandAudio(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelAudio = new LLPanelLandAudio(self->mParcel); - return self->mPanelAudio; + msg->sendReliable(region->getHost()); } -// static -void* LLFloaterLand::createPanelLandMedia(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelMedia = new LLPanelLandMedia(self->mParcel); - return self->mPanelMedia; -} -// static -void* LLFloaterLand::createPanelLandAccess(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelAccess = new LLPanelLandAccess(self->mParcel); - return self->mPanelAccess; -} +LLPointer<LLParcelSelection> LLPanelLandGeneral::sSelectionForBuyPass = NULL; //--------------------------------------------------------------------------- // LLPanelLandGeneral @@ -1063,6 +989,8 @@ void LLPanelLandGeneral::onClickStopSellLand(void* data) LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate(parcel); } + + //--------------------------------------------------------------------------- // LLPanelLandObjects //--------------------------------------------------------------------------- @@ -1308,66 +1236,6 @@ void LLPanelLandObjects::draw() LLPanel::draw(); } -void send_other_clean_time_message(S32 parcel_local_id, S32 other_clean_time) -{ - LLMessageSystem *msg = gMessageSystem; - - LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); - if (!region) return; - - msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_ParcelData); - msg->addS32Fast(_PREHASH_LocalID, parcel_local_id); - msg->addS32Fast(_PREHASH_OtherCleanTime, other_clean_time); - - msg->sendReliable(region->getHost()); -} - -void send_return_objects_message(S32 parcel_local_id, S32 return_type, - uuid_list_t* owner_ids = NULL) -{ - LLMessageSystem *msg = gMessageSystem; - - LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); - if (!region) return; - - msg->newMessageFast(_PREHASH_ParcelReturnObjects); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_ParcelData); - msg->addS32Fast(_PREHASH_LocalID, parcel_local_id); - msg->addU32Fast(_PREHASH_ReturnType, (U32) return_type); - - // Dummy task id, not used - msg->nextBlock("TaskIDs"); - msg->addUUID("TaskID", LLUUID::null); - - // Throw all return ids into the packet. - // TODO: Check for too many ids. - if (owner_ids) - { - uuid_list_t::iterator end = owner_ids->end(); - for (uuid_list_t::iterator it = owner_ids->begin(); - it != end; - ++it) - { - msg->nextBlockFast(_PREHASH_OwnerIDs); - msg->addUUIDFast(_PREHASH_OwnerID, (*it)); - } - } - else - { - msg->nextBlockFast(_PREHASH_OwnerIDs); - msg->addUUIDFast(_PREHASH_OwnerID, LLUUID::null); - } - - msg->sendReliable(region->getHost()); -} - bool LLPanelLandObjects::callbackReturnOwnerObjects(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); @@ -1804,6 +1672,52 @@ void LLPanelLandObjects::onCommitClean(LLUICtrl *caller, void* user_data) } +class LLPanelLandOptions + : public LLPanel +{ +public: + LLPanelLandOptions(LLSafeHandle<LLParcelSelection>& parcelp); + virtual ~LLPanelLandOptions(); + /*virtual*/ BOOL postBuild(); + /*virtual*/ void draw(); + /*virtual*/ void refresh(); + +private: + // Refresh the "show in search" checkbox and category selector. + void refreshSearch(); + + static void onCommitAny(LLUICtrl* ctrl, void *userdata); + static void onClickSet(void* userdata); + static void onClickClear(void* userdata); + +private: + LLCheckBoxCtrl* mCheckEditObjects; + LLCheckBoxCtrl* mCheckEditGroupObjects; + LLCheckBoxCtrl* mCheckAllObjectEntry; + LLCheckBoxCtrl* mCheckGroupObjectEntry; + LLCheckBoxCtrl* mCheckSafe; + LLCheckBoxCtrl* mCheckFly; + LLCheckBoxCtrl* mCheckGroupScripts; + LLCheckBoxCtrl* mCheckOtherScripts; + + LLCheckBoxCtrl* mCheckShowDirectory; + LLComboBox* mCategoryCombo; + LLComboBox* mLandingTypeCombo; + + LLTextureCtrl* mSnapshotCtrl; + + LLTextBox* mLocationText; + LLButton* mSetBtn; + LLButton* mClearBtn; + + LLCheckBoxCtrl *mMatureCtrl; + LLCheckBoxCtrl *mPushRestrictionCtrl; + LLCheckBoxCtrl *mSeeAvatarsCtrl; + + LLSafeHandle<LLParcelSelection>& mParcel; +}; + + //--------------------------------------------------------------------------- // LLPanelLandOptions //--------------------------------------------------------------------------- @@ -2320,6 +2234,37 @@ void LLPanelLandOptions::onClickClear(void* userdata) } +class LLPanelLandAccess + : public LLPanel +{ +public: + LLPanelLandAccess(LLSafeHandle<LLParcelSelection>& parcelp); + virtual ~LLPanelLandAccess(); + void refresh(); + void refresh_ui(); + void refreshNames(); + virtual void draw(); + + static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata); + static void onCommitAny(LLUICtrl* ctrl, void *userdata); + static void onClickRemoveAccess(void*); + static void onClickRemoveBanned(void*); + + virtual BOOL postBuild(); + + void onClickAddAccess(); + void onClickAddBanned(); + void callbackAvatarCBBanned(const uuid_vec_t& ids); + void callbackAvatarCBAccess(const uuid_vec_t& ids); + +protected: + LLNameListCtrl* mListAccess; + LLNameListCtrl* mListBanned; + + LLSafeHandle<LLParcelSelection>& mParcel; +}; + + //--------------------------------------------------------------------------- // LLPanelLandAccess //--------------------------------------------------------------------------- @@ -2835,6 +2780,7 @@ void LLPanelLandAccess::onClickRemoveBanned(void* data) } } + //--------------------------------------------------------------------------- // LLPanelLandCovenant //--------------------------------------------------------------------------- @@ -2948,51 +2894,303 @@ void LLPanelLandCovenant::updateEstateOwnerName(const std::string& name) } } -// inserts maturity info(icon and text) into target textbox -// names_floater - pointer to floater which contains strings with maturity icons filenames -// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY] -void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse) +class LLPanelLandExperiences + : public LLPanel { - LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); - if (!region) +public: + LLPanelLandExperiences(LLSafeHandle<LLParcelSelection>& parcelp); + virtual BOOL postBuild(); + void refresh(); + + void experienceAdded(const LLUUID& id, U32 xp_type, U32 access_type); + void experienceRemoved(const LLUUID& id, U32 access_type); +protected: + LLPanelExperienceListEditor* setupList( const char* control_name, U32 xp_type, U32 access_type ); + void refreshPanel(LLPanelExperienceListEditor* panel, U32 xp_type); + + LLSafeHandle<LLParcelSelection>& mParcel; + + + LLPanelExperienceListEditor* mAllowed; + LLPanelExperienceListEditor* mBlocked; +}; + +LLPanelLandExperiences::LLPanelLandExperiences( LLSafeHandle<LLParcelSelection>& parcelp ) + : mParcel(parcelp) +{ + +} + + +BOOL LLPanelLandExperiences::postBuild() +{ + mAllowed = setupList("panel_allowed", EXPERIENCE_KEY_TYPE_ALLOWED, AL_ALLOW_EXPERIENCE); + mBlocked = setupList("panel_blocked", EXPERIENCE_KEY_TYPE_BLOCKED, AL_BLOCK_EXPERIENCE); + + getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(FALSE); + getChild<LLTextBox>("experiences_help_text")->setVisible(FALSE); + getChild<LLTextBox>("allowed_text_help")->setText(getString("allowed_parcel_text")); + getChild<LLTextBox>("blocked_text_help")->setText(getString("blocked_parcel_text")); + + return LLPanel::postBuild(); +} + +LLPanelExperienceListEditor* LLPanelLandExperiences::setupList( const char* control_name, U32 xp_type, U32 access_type ) +{ + LLPanelExperienceListEditor* child = findChild<LLPanelExperienceListEditor>(control_name); + if(child) + { + child->getChild<LLTextBox>("text_name")->setText(child->getString(control_name)); + child->setMaxExperienceIDs(PARCEL_MAX_EXPERIENCE_LIST); + child->setAddedCallback(boost::bind(&LLPanelLandExperiences::experienceAdded, this, _1, xp_type, access_type)); + child->setRemovedCallback(boost::bind(&LLPanelLandExperiences::experienceRemoved, this, _1, access_type)); + } + + return child; +} + +void LLPanelLandExperiences::experienceAdded( const LLUUID& id, U32 xp_type, U32 access_type ) +{ + LLParcel* parcel = mParcel->getParcel(); + if (parcel) + { + parcel->setExperienceKeyType(id, xp_type); + LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(access_type); + refresh(); + } +} + +void LLPanelLandExperiences::experienceRemoved( const LLUUID& id, U32 access_type ) +{ + LLParcel* parcel = mParcel->getParcel(); + if (parcel) + { + parcel->setExperienceKeyType(id, EXPERIENCE_KEY_TYPE_NONE); + LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(access_type); + refresh(); + } +} + +void LLPanelLandExperiences::refreshPanel(LLPanelExperienceListEditor* panel, U32 xp_type) +{ + LLParcel *parcel = mParcel->getParcel(); + + // Display options + if (parcel == NULL || panel == NULL) + { return; + } - LLStyle::Params style; + LLAccessEntry::map entries = parcel->getExperienceKeysByType(xp_type); + LLAccessEntry::map::iterator it = entries.begin(); + LLSD ids = LLSD::emptyArray(); + for (/**/; it != entries.end(); ++it) + { + ids.append(it->second.mID); + } + panel->setExperienceIds(ids); + panel->setReadonly(!LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS)); + panel->refreshExperienceCounter(); +} - U8 sim_access = region->getSimAccess(); +void LLPanelLandExperiences::refresh() +{ + refreshPanel(mAllowed, EXPERIENCE_KEY_TYPE_ALLOWED); + refreshPanel(mBlocked, EXPERIENCE_KEY_TYPE_BLOCKED); +} - switch(sim_access) +LLParcel* LLFloaterLand::getCurrentSelectedParcel() +{ + return mParcel->getParcel(); +}; + +//static +LLPanelLandObjects* LLFloaterLand::getCurrentPanelLandObjects() +{ + LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); + if(land_instance) { - case SIM_ACCESS_PG: - style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_general"))); - break; + return land_instance->mPanelObjects; + } + else + { + return NULL; + } +} - case SIM_ACCESS_ADULT: - style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_adult"))); - break; +//static +LLPanelLandCovenant* LLFloaterLand::getCurrentPanelLandCovenant() +{ + LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); + if(land_instance) + { + return land_instance->mPanelCovenant; + } + else + { + return NULL; + } +} - case SIM_ACCESS_MATURE: - style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_moderate"))); - break; +// static +void LLFloaterLand::refreshAll() +{ + LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); + if(land_instance) + { + land_instance->refresh(); + } +} - default: - break; +void LLFloaterLand::onOpen(const LLSD& key) +{ + // moved from triggering show instance in llviwermenu.cpp + + if (LLViewerParcelMgr::getInstance()->selectionEmpty()) + { + LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); } + + // Done automatically when the selected parcel's properties arrive + // (and hence we have the local id). + // LLViewerParcelMgr::getInstance()->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER); - size_t maturity_pos = str_to_parse.find(MATURITY); + mParcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection(); - if (maturity_pos == std::string::npos) + // Refresh even if not over a region so we don't get an + // uninitialized dialog. The dialog is 0-region aware. + refresh(); +} + +void LLFloaterLand::onVisibilityChanged(const LLSD& visible) +{ + if (!visible.asBoolean()) { - return; + // Might have been showing owned objects + LLSelectMgr::getInstance()->unhighlightAll(); + + // Save which panel we had open + sLastTab = mTabLand->getCurrentPanelIndex(); } +} - std::string text_before_rating = str_to_parse.substr(0, maturity_pos); - std::string text_after_rating = str_to_parse.substr(maturity_pos + MATURITY.length()); - target_textbox->setText(text_before_rating); +LLFloaterLand::LLFloaterLand(const LLSD& seed) +: LLFloater(seed) +{ + mFactoryMap["land_general_panel"] = LLCallbackMap(createPanelLandGeneral, this); + mFactoryMap["land_covenant_panel"] = LLCallbackMap(createPanelLandCovenant, this); + mFactoryMap["land_objects_panel"] = LLCallbackMap(createPanelLandObjects, this); + mFactoryMap["land_options_panel"] = LLCallbackMap(createPanelLandOptions, this); + mFactoryMap["land_audio_panel"] = LLCallbackMap(createPanelLandAudio, this); + mFactoryMap["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this); + mFactoryMap["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this); + mFactoryMap["land_experiences_panel"] = LLCallbackMap(createPanelLandExperiences, this); - target_textbox->appendImageSegment(style); + sObserver = new LLParcelSelectionObserver(); + LLViewerParcelMgr::getInstance()->addObserver( sObserver ); +} - target_textbox->appendText(LLViewerParcelMgr::getInstance()->getSelectionRegion()->getSimAccessString(), false); - target_textbox->appendText(text_after_rating, false); +BOOL LLFloaterLand::postBuild() +{ + setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChanged, this, _2)); + + LLTabContainer* tab = getChild<LLTabContainer>("landtab"); + + mTabLand = (LLTabContainer*) tab; + + if (tab) + { + tab->selectTab(sLastTab); + } + + return TRUE; +} + + +// virtual +LLFloaterLand::~LLFloaterLand() +{ + LLViewerParcelMgr::getInstance()->removeObserver( sObserver ); + delete sObserver; + sObserver = NULL; +} + +// public +void LLFloaterLand::refresh() +{ + mPanelGeneral->refresh(); + mPanelObjects->refresh(); + mPanelOptions->refresh(); + mPanelAudio->refresh(); + mPanelMedia->refresh(); + mPanelAccess->refresh(); + mPanelCovenant->refresh(); + mPanelExperiences->refresh(); +} + + + +void* LLFloaterLand::createPanelLandGeneral(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelGeneral = new LLPanelLandGeneral(self->mParcel); + return self->mPanelGeneral; +} + +// static +void* LLFloaterLand::createPanelLandCovenant(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelCovenant = new LLPanelLandCovenant(self->mParcel); + return self->mPanelCovenant; +} + + +// static +void* LLFloaterLand::createPanelLandObjects(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelObjects = new LLPanelLandObjects(self->mParcel); + return self->mPanelObjects; +} + +// static +void* LLFloaterLand::createPanelLandOptions(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelOptions = new LLPanelLandOptions(self->mParcel); + return self->mPanelOptions; +} + +// static +void* LLFloaterLand::createPanelLandAudio(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelAudio = new LLPanelLandAudio(self->mParcel); + return self->mPanelAudio; +} + +// static +void* LLFloaterLand::createPanelLandMedia(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelMedia = new LLPanelLandMedia(self->mParcel); + return self->mPanelMedia; +} + +// static +void* LLFloaterLand::createPanelLandAccess(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelAccess = new LLPanelLandAccess(self->mParcel); + return self->mPanelAccess; +} + +// static +void* LLFloaterLand::createPanelLandExperiences(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelExperiences = new LLPanelLandExperiences(self->mParcel); + return self->mPanelExperiences; } diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index dccdfc9acb..f354482027 100755 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -66,6 +66,7 @@ class LLPanelLandBan; class LLPanelLandRenters; class LLPanelLandCovenant; class LLParcel; +class LLPanelLandExperiences; class LLFloaterLand : public LLFloater @@ -101,6 +102,7 @@ protected: static void* createPanelLandAudio(void* data); static void* createPanelLandMedia(void* data); static void* createPanelLandAccess(void* data); + static void* createPanelLandExperiences(void* data); static void* createPanelLandBan(void* data); @@ -116,6 +118,7 @@ protected: LLPanelLandMedia* mPanelMedia; LLPanelLandAccess* mPanelAccess; LLPanelLandCovenant* mPanelCovenant; + LLPanelLandExperiences* mPanelExperiences; LLSafeHandle<LLParcelSelection> mParcel; @@ -307,83 +310,6 @@ protected: }; -class LLPanelLandOptions -: public LLPanel -{ -public: - LLPanelLandOptions(LLSafeHandle<LLParcelSelection>& parcelp); - virtual ~LLPanelLandOptions(); - /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); - /*virtual*/ void refresh(); - -private: - // Refresh the "show in search" checkbox and category selector. - void refreshSearch(); - - static void onCommitAny(LLUICtrl* ctrl, void *userdata); - static void onClickSet(void* userdata); - static void onClickClear(void* userdata); - -private: - LLCheckBoxCtrl* mCheckEditObjects; - LLCheckBoxCtrl* mCheckEditGroupObjects; - LLCheckBoxCtrl* mCheckAllObjectEntry; - LLCheckBoxCtrl* mCheckGroupObjectEntry; - LLCheckBoxCtrl* mCheckSafe; - LLCheckBoxCtrl* mCheckFly; - LLCheckBoxCtrl* mCheckGroupScripts; - LLCheckBoxCtrl* mCheckOtherScripts; - - LLCheckBoxCtrl* mCheckShowDirectory; - LLComboBox* mCategoryCombo; - LLComboBox* mLandingTypeCombo; - - LLTextureCtrl* mSnapshotCtrl; - - LLTextBox* mLocationText; - LLButton* mSetBtn; - LLButton* mClearBtn; - - LLCheckBoxCtrl *mMatureCtrl; - LLCheckBoxCtrl *mPushRestrictionCtrl; - LLCheckBoxCtrl *mSeeAvatarsCtrl; - - LLSafeHandle<LLParcelSelection>& mParcel; -}; - - -class LLPanelLandAccess -: public LLPanel -{ -public: - LLPanelLandAccess(LLSafeHandle<LLParcelSelection>& parcelp); - virtual ~LLPanelLandAccess(); - void refresh(); - void refresh_ui(); - void refreshNames(); - virtual void draw(); - - static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata); - static void onCommitAny(LLUICtrl* ctrl, void *userdata); - static void onClickRemoveAccess(void*); - static void onClickRemoveBanned(void*); - - virtual BOOL postBuild(); - - void onClickAddAccess(); - void onClickAddBanned(); - void callbackAvatarCBBanned(const uuid_vec_t& ids); - void callbackAvatarCBAccess(const uuid_vec_t& ids); - -protected: - LLNameListCtrl* mListAccess; - LLNameListCtrl* mListBanned; - - LLSafeHandle<LLParcelSelection>& mParcel; -}; - - class LLPanelLandCovenant : public LLPanel { diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index d65661c6e9..7037f5b2fd 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3555,26 +3555,28 @@ void LLPanelEnvironmentInfo::onRegionSettingsApplied(bool ok) BOOL LLPanelRegionExperiences::postBuild() { - mAllowed = setupList("panel_allowed"); - mTrusted = setupList("panel_trusted"); - mBlocked = setupList("panel_blocked"); + mAllowed = setupList("panel_allowed", ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE); + mTrusted = setupList("panel_trusted", ESTATE_EXPERIENCE_BLOCKED_ADD, ESTATE_EXPERIENCE_BLOCKED_REMOVE); + mBlocked = setupList("panel_blocked", ESTATE_EXPERIENCE_TRUSTED_ADD, ESTATE_EXPERIENCE_TRUSTED_REMOVE); - mAllowed->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_ALLOWED_ADD, _1)); - mAllowed->setRemovedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_ALLOWED_REMOVE, _1)); - mBlocked->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_BLOCKED_ADD, _1)); - mBlocked->setRemovedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_BLOCKED_REMOVE, _1)); - mTrusted->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_TRUSTED_ADD, _1)); - mTrusted->setRemovedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, ESTATE_EXPERIENCE_TRUSTED_REMOVE, _1)); + getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(TRUE); + getChild<LLTextBox>("experiences_help_text")->setText(getString("estate_caption")); + getChild<LLTextBox>("trusted_text_help")->setText(getString("trusted_estate_text")); + getChild<LLTextBox>("allowed_text_help")->setText(getString("allowed_estate_text")); + getChild<LLTextBox>("blocked_text_help")->setText(getString("blocked_estate_text")); return LLPanelRegionInfo::postBuild(); } -LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* control_name ) +LLPanelExperienceListEditor* LLPanelRegionExperiences::setupList( const char* control_name, U32 add_id, U32 remove_id ) { LLPanelExperienceListEditor* child = findChild<LLPanelExperienceListEditor>(control_name); if(child) { - child->getChild<LLTextBox>("text_name")->setText(getString(control_name)); + child->getChild<LLTextBox>("text_name")->setText(child->getString(control_name)); + child->setMaxExperienceIDs(ESTATE_MAX_EXPERIENCE_IDS); + child->setAddedCallback( boost::bind(&LLPanelRegionExperiences::itemChanged, this, add_id, _1)); + child->setRemovedCallback(boost::bind(&LLPanelRegionExperiences::itemChanged, this, remove_id, _1)); } return child; @@ -3600,18 +3602,10 @@ void LLPanelRegionExperiences::processResponse( const LLSD& content ) mTrusted->setExperienceIds(trusted); - if (!mAllowed->getReadonly()) - { - mAllowed->refreshExperienceCounter("RegionInfoAllowedExperiences"); - } - if (!mBlocked->getReadonly()) - { - mBlocked->refreshExperienceCounter("RegionInfoBlockedExperiences"); - } - if (!mTrusted->getReadonly()) - { - mTrusted->refreshExperienceCounter("RegionInfoTrustedExperiences"); - } + mAllowed->refreshExperienceCounter(); + mBlocked->refreshExperienceCounter(); + mTrusted->refreshExperienceCounter(); + } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 2020cbce2b..79e2837336 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -470,7 +470,7 @@ public: private: void refreshRegionExperiences(); - LLPanelExperienceListEditor* setupList(const char* control_name); + LLPanelExperienceListEditor* setupList(const char* control_name, U32 add_id, U32 remove_id); static LLSD addIds( LLPanelExperienceListEditor* panel ); void itemChanged(U32 event_type, const LLUUID& id); diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 323adbe2b7..6641483054 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -48,6 +48,7 @@ LLPanelExperienceListEditor::LLPanelExperienceListEditor() ,mProfile(NULL) ,mRemove(NULL) ,mReadonly(false) + ,mMaxExperienceIDs(0) { } @@ -229,12 +230,15 @@ void LLPanelExperienceListEditor::setReadonly( bool val ) checkButtonsEnabled(); } -void LLPanelExperienceListEditor::refreshExperienceCounter(std::string string_name) +void LLPanelExperienceListEditor::refreshExperienceCounter() { - LLStringUtil::format_map_t args; - args["[EXPERIENCES]"] = llformat("%d", mItems->getItemCount()); - args["[MAXEXPERIENCES]"] = llformat("%d", ESTATE_MAX_EXPERIENCE_IDS); - getChild<LLTextBox>("text_name")->setText(LLTrans::getString(string_name, args)); + if(mMaxExperienceIDs > 0) + { + LLStringUtil::format_map_t args; + args["[EXPERIENCES]"] = llformat("%d", mItems->getItemCount()); + args["[MAXEXPERIENCES]"] = llformat("%d", mMaxExperienceIDs); + getChild<LLTextBox>("text_count")->setText(LLTrans::getString("ExperiencesCounter", args)); + } } boost::signals2::connection LLPanelExperienceListEditor::setAddedCallback( list_changed_signal_t::slot_type cb ) diff --git a/indra/newview/llpanelexperiencelisteditor.h b/indra/newview/llpanelexperiencelisteditor.h index 189d81f897..f69f0509be 100644 --- a/indra/newview/llpanelexperiencelisteditor.h +++ b/indra/newview/llpanelexperiencelisteditor.h @@ -62,10 +62,12 @@ public: bool getReadonly() const { return mReadonly; } void setReadonly(bool val); - void refreshExperienceCounter(std::string string_name); + void refreshExperienceCounter(); void addFilter(experience_function func){mFilters.push_back(func);} void setStickyFunction(experience_function func){mSticky = func;} + U32 getMaxExperienceIDs() const { return mMaxExperienceIDs; } + void setMaxExperienceIDs(U32 val) { mMaxExperienceIDs = val; } private: void onItems(); @@ -91,6 +93,7 @@ private: LLUUID mKey; bool mReadonly; experience_function mSticky; + U32 mMaxExperienceIDs; }; diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 6303e67ed3..e2c4bad313 100755 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -218,11 +218,7 @@ public: // Takes an Access List flag, like AL_ACCESS or AL_BAN void sendParcelAccessListUpdate(U32 which); - - static void sendParcelAccessListUpdate(U32 flags, const std::map<LLUUID, class LLAccessEntry>& entries, LLViewerRegion* region, S32 parcel_local_id); - static void sendParcelExperienceUpdate( const U32 flags, uuid_vec_t experience_ids, LLViewerRegion* region, S32 parcel_local_id ); - - + // Takes an Access List flag, like AL_ACCESS or AL_BAN void sendParcelAccessListRequest(U32 flags); @@ -295,6 +291,8 @@ public: static BOOL isParcelModifiableByAgent(const LLParcel* parcelp, U64 group_proxy_power); private: + static void sendParcelAccessListUpdate(U32 flags, const std::map<LLUUID, class LLAccessEntry>& entries, LLViewerRegion* region, S32 parcel_local_id); + static void sendParcelExperienceUpdate( const U32 flags, uuid_vec_t experience_ids, LLViewerRegion* region, S32 parcel_local_id ); static bool releaseAlertCB(const LLSD& notification, const LLSD& response); // If the user is claiming land and the current selection diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index a660e812cc..68f981f34f 100755 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -8,7 +8,7 @@ help_topic="floaterland" save_rect="true" title="ABOUT LAND" - width="490"> + width="590"> <floater.string name="maturity_icon_general"> "Parcel_PG_Dark" @@ -47,7 +47,7 @@ tab_height="25" tab_min_width="67" top="10" - width="489"> + width="589"> <panel border="false" follows="all" @@ -569,8 +569,7 @@ left="0" top="0" help_topic="land_covenant_tab" - name="land_covenant_panel" - word_wrap="true"> + name="land_covenant_panel"> <panel.string name="can_resell" word_wrap="true"> @@ -2096,5 +2095,17 @@ Only large parcels can be listed in search. width="100" /> </panel> </panel> + <panel + border="true" + follows="all" + label="EXPERIENCES" + layout="topleft" + left="0" + top="0" + help_topic="land_experiences_tab" + name="land_experiences_panel" + class="land_experiences_panel" + filename="panel_region_experiences.xml"> + </panel> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml index acd9471916..128c721992 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml @@ -13,26 +13,46 @@ name="loading"> loading... </panel.string> + <panel.string + name="panel_allowed"> + Allowed Experiences: + </panel.string> + <panel.string + name="panel_blocked"> + Blocked Experiences: + </panel.string> + <panel.string + name="panel_trusted"> + Trusted Experiences: + </panel.string> <panel.string name="no_results"> (empty) </panel.string> - <text - layout="topleft" - name="text_name" - left="3" - right="-1" - height="12" - follows="left|top|right"> - Experience List - </text> + <text + layout="topleft" + name="text_name" + left="3" + right="120" + height="12" + follows="left|top"> + Experience List + </text> + <text + layout="topleft" + name="text_count" + left="125" + top_pad="-12" + right="-1" + height="12" + follows="top|left"> + </text> <scroll_list draw_heading="false" left="3" width="225" height="77" follows="all" - can_resize="false" name="experience_list"> <columns width="225" 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 b0ef3284f1..ea57bdd164 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -10,44 +10,67 @@ left="0" top="320" width="480"> - <panel.string - name="panel_allowed"> - Allowed Experiences - </panel.string> - <panel.string - name="panel_blocked"> - Blocked Experiences - </panel.string> - <panel.string - name="panel_trusted"> - Trusted Experiences - </panel.string> + <panel.string + name="trusted_estate_text"> +Any Experience may be Trusted. + +Trusted Experiences have permission to run on this estate. + +Additionally, if the estate does not allow public access, Residents participating in any Trusted Experience may enter the estate and can remain as long as they are in the Experience. + </panel.string> + <panel.string + name="allowed_estate_text"> +Only Experiences that are not Grid-Wide may be Allowed. - <text - type="string" - length="1" - follows="left|top" - height="32" - layout="topleft" - left="10" - name="experiences_help_text" - top="14" - word_wrap="true"> - Changes to settings on this tab will affect all regions in the estate. - </text> +Allowed Experiences have permission to run on this estate. + </panel.string> + <panel.string + name="blocked_estate_text"> +Only Grid-Wide Experiences may be Blocked. + +Blocked Experiences may not run on this estate. + </panel.string> + <panel.string + name="estate_caption"> + Changes to settings on this tab will affect all regions in the estate. + </panel.string> + <panel.string + name="allowed_parcel_text">Only Experiences that are not Grid-Wide may be Allowed. + +Allowed Experiences have permission to run on this parcel if they are not Blocked by the estate. + </panel.string> + <panel.string + name="blocked_parcel_text">Only Grid-Wide Experiences may be Blocked. + +Blocked Experiences may not run on this parcel. + </panel.string> + <panel.string + name="parcel_caption"> + </panel.string> + <text + type="string" + length="1" + follows="left|top" + height="32" + layout="topleft" + left="10" + name="experiences_help_text" + top="14" + word_wrap="true"/> <layout_stack left="5" layout="topleft" follows="all" - top="40" right="-5" - height="280" - min_height="140" + height="260" orientation="vertical"> <layout_panel - height="100" - min_height="100" - width="530"> + follows="all" + height="50" + min_height="50" + width="530" + visible="false" + name="trusted_layout_panel"> <panel follows="all" width="330" name="panel_trusted" @@ -63,16 +86,12 @@ height="200" follows="top|right" word_wrap="true"> - Trusted Experiences have permission to run on this estate. - -Additionally, if the estate does not allow public access, Residents participating in any Trusted Experience may enter the estate and can remain as long as they are in the Experience. - -Any Experience may be Trusted. </text> </layout_panel> <layout_panel - height="100" - min_height="100" + height="50" + min_height="50" + follows="all" width="530"> <panel width="330" @@ -89,14 +108,12 @@ Any Experience may be Trusted. height="200" follows="top|right" word_wrap="true"> - Allowed Experiences have permission to run on this estate. - -Only Experiences that are not Grid-Wide may be Allowed. </text> </layout_panel> <layout_panel - height="100" - min_height="100" + height="50" + min_height="50" + follows="all" width="530"> <panel width="330" @@ -113,9 +130,6 @@ Only Experiences that are not Grid-Wide may be Allowed. height="200" follows="top|right" word_wrap="true"> - Blocked Experiences may not run on this estate. - -Only Grid-Wide Experiences may be Blocked. </text> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml index 9e429234d3..df38a7c9c8 100755 --- a/indra/newview/skins/default/xui/en/role_actions.xml +++ b/indra/newview/skins/default/xui/en/role_actions.xml @@ -194,9 +194,9 @@ longdescription="Members in a role with this ability can edit the meta-data for an experience." name="experience admin" value ="49" /> - <action description="Experience Creator" - longdescription="Members in a role with this ability can create scripts for an experience." - name="experience creator" + <action description="Experience Contributor" + longdescription="Members in a role with this ability can contribute scripts for an experience." + name="experience contributor" value ="50" /> </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index ef6877b5fa..72b41f922e 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3997,9 +3997,7 @@ Try enclosing path to the editor with double quotes. <string name="Admin_Experiences_Tab">ADMIN</string> <string name="Recent_Experiences_Tab">RECENT</string> <string name="Owned_Experiences_Tab">OWNED</string> - <string name="RegionInfoAllowedExperiences">Allowed Experiences: ([EXPERIENCES], max [MAXEXPERIENCES])</string> - <string name="RegionInfoBlockedExperiences">Blocked Experiences: ([EXPERIENCES], max [MAXEXPERIENCES])</string> - <string name="RegionInfoTrustedExperiences">Trusted Experiences: ([EXPERIENCES], max [MAXEXPERIENCES])</string> + <string name="ExperiencesCounter">([EXPERIENCES], max [MAXEXPERIENCES])</string> <string name="ExperiencePermission1">take over your controls</string> <string name="ExperiencePermission3">trigger animations on your avatar</string> <string name="ExperiencePermission4">attach to your avatar</string> -- cgit v1.2.3 From 43d12faffebe327b32724abbb5612e0351a18976 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Sat, 17 May 2014 04:21:56 +0100 Subject: Added COMBINE_WITH_NEW for notifications for ACME-1471 --- indra/llui/llnotifications.cpp | 32 +++++++++++++++++++++- indra/llui/llnotifications.h | 4 +++ indra/llui/llnotificationtemplate.h | 1 + .../newview/skins/default/xui/en/notifications.xml | 2 +- 4 files changed, 37 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 025cd81d92..f4ad4a12db 100755 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -678,7 +678,7 @@ void LLNotification::respond(const LLSD& response) // and then call it functor(asLLSD(), response); } - else + else if (mCombinedNotifications.empty()) { // no registered responder return; @@ -700,6 +700,14 @@ void LLNotification::respond(const LLSD& response) } } + for (std::vector<LLNotificationPtr>::const_iterator it = mCombinedNotifications.begin(); it != mCombinedNotifications.end(); ++it) + { + if ((*it)) + { + (*it)->respond(response); + } + } + update(); } @@ -1321,6 +1329,28 @@ bool LLNotifications::failedUniquenessTest(const LLSD& payload) } } break; + case LLNotification::COMBINE_WITH_NEW: + // Add to the existing unique notification with the data from this particular instance... + // This guarantees that duplicate notifications will be collapsed to the one + // most recently triggered + for (LLNotificationMap::iterator existing_it = mUniqueNotifications.find(pNotif->getName()); + existing_it != mUniqueNotifications.end(); + ++existing_it) + { + LLNotificationPtr existing_notification = existing_it->second; + if (pNotif != existing_notification + && pNotif->isEquivalentTo(existing_notification)) + { + // copy the notifications from the newest instance into the oldest + existing_notification->mCombinedNotifications.push_back(pNotif); + existing_notification->mCombinedNotifications.insert(existing_notification->mCombinedNotifications.end(), + pNotif->mCombinedNotifications.begin(), pNotif->mCombinedNotifications.end()); + + // pop up again + existing_notification->update(); + } + } + break; case LLNotification::KEEP_OLD: break; case LLNotification::CANCEL_OLD: diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index b0e8553a49..0bd7e934ea 100755 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -413,6 +413,9 @@ private: using the same mechanism. */ bool mTemporaryResponder; + + // keep track of other notifications combined with COMBINE_WITH_NEW + std::vector<LLNotificationPtr> mCombinedNotifications; void init(const std::string& template_name, const LLSD& form_elements); @@ -559,6 +562,7 @@ public: typedef enum e_combine_behavior { REPLACE_WITH_NEW, + COMBINE_WITH_NEW, KEEP_OLD, CANCEL_OLD diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h index 0315ddbea8..c23fc53763 100755 --- a/indra/llui/llnotificationtemplate.h +++ b/indra/llui/llnotificationtemplate.h @@ -43,6 +43,7 @@ struct LLNotificationTemplate static void declareValues() { declare("replace_with_new", LLNotification::REPLACE_WITH_NEW); + declare("combine_with_new", LLNotification::COMBINE_WITH_NEW); declare("keep_old", LLNotification::KEEP_OLD); declare("cancel_old", LLNotification::CANCEL_OLD); } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 778a9b432c..ac78ae6a3e 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7116,7 +7116,7 @@ Scripts associated with this experience will be able to do the following on regi [QUESTIONS]Is this OK? - <unique combine="replace_with_new"> + <unique combine="combine_with_new"> <context>experience</context> </unique> <tag>confirm</tag> -- cgit v1.2.3 From be64891922f5a5dadcebd156dab5fb1879cc9b1b Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 22 May 2014 10:09:25 -0700 Subject: Fixed merge --- indra/newview/llfloaterland.cpp | 1 + indra/newview/llfloaterland.h | 79 ----------------------------------------- 2 files changed, 1 insertion(+), 79 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index c77c72a7e5..2406b2e3cd 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2247,6 +2247,7 @@ public: static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata); static void onCommitAny(LLUICtrl* ctrl, void *userdata); + static void onCommitGroupCheck(LLUICtrl* ctrl, void *userdata); static void onClickRemoveAccess(void*); static void onClickRemoveBanned(void*); diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 8e8b61c333..ae9eecd374 100755 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -309,85 +309,6 @@ protected: LLSafeHandle<LLParcelSelection>& mParcel; }; - -class LLPanelLandOptions -: public LLPanel -{ -public: - LLPanelLandOptions(LLSafeHandle<LLParcelSelection>& parcelp); - virtual ~LLPanelLandOptions(); - /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); - /*virtual*/ void refresh(); - -private: - // Refresh the "show in search" checkbox and category selector. - void refreshSearch(); - - static void onCommitAny(LLUICtrl* ctrl, void *userdata); - static void onClickSet(void* userdata); - static void onClickClear(void* userdata); - -private: - LLCheckBoxCtrl* mCheckEditObjects; - LLCheckBoxCtrl* mCheckEditGroupObjects; - LLCheckBoxCtrl* mCheckAllObjectEntry; - LLCheckBoxCtrl* mCheckGroupObjectEntry; - LLCheckBoxCtrl* mCheckSafe; - LLCheckBoxCtrl* mCheckFly; - LLCheckBoxCtrl* mCheckGroupScripts; - LLCheckBoxCtrl* mCheckOtherScripts; - - LLCheckBoxCtrl* mCheckShowDirectory; - LLComboBox* mCategoryCombo; - LLComboBox* mLandingTypeCombo; - - LLTextureCtrl* mSnapshotCtrl; - - LLTextBox* mLocationText; - LLButton* mSetBtn; - LLButton* mClearBtn; - - LLCheckBoxCtrl *mMatureCtrl; - LLCheckBoxCtrl *mPushRestrictionCtrl; - LLCheckBoxCtrl *mSeeAvatarsCtrl; - - LLSafeHandle<LLParcelSelection>& mParcel; -}; - - -class LLPanelLandAccess -: public LLPanel -{ -public: - LLPanelLandAccess(LLSafeHandle<LLParcelSelection>& parcelp); - virtual ~LLPanelLandAccess(); - void refresh(); - void refresh_ui(); - void refreshNames(); - virtual void draw(); - - static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata); - static void onCommitAny(LLUICtrl* ctrl, void *userdata); - static void onCommitGroupCheck(LLUICtrl* ctrl, void *userdata); - static void onClickRemoveAccess(void*); - static void onClickRemoveBanned(void*); - - virtual BOOL postBuild(); - - void onClickAddAccess(); - void onClickAddBanned(); - void callbackAvatarCBBanned(const uuid_vec_t& ids); - void callbackAvatarCBAccess(const uuid_vec_t& ids); - -protected: - LLNameListCtrl* mListAccess; - LLNameListCtrl* mListBanned; - - LLSafeHandle<LLParcelSelection>& mParcel; -}; - - class LLPanelLandCovenant : public LLPanel { -- cgit v1.2.3 From 138362a163f18862125ff207a56b4cd3c02debb7 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 27 May 2014 15:42:38 -0700 Subject: ACME-1496: Fixed typo in estate floater --- indra/newview/llfloaterregioninfo.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 157527cb2a..a63f1173d1 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3566,8 +3566,8 @@ void LLPanelEnvironmentInfo::onRegionSettingsApplied(bool ok) BOOL LLPanelRegionExperiences::postBuild() { mAllowed = setupList("panel_allowed", ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE); - mTrusted = setupList("panel_trusted", ESTATE_EXPERIENCE_BLOCKED_ADD, ESTATE_EXPERIENCE_BLOCKED_REMOVE); - mBlocked = setupList("panel_blocked", ESTATE_EXPERIENCE_TRUSTED_ADD, ESTATE_EXPERIENCE_TRUSTED_REMOVE); + mTrusted = setupList("panel_trusted", ESTATE_EXPERIENCE_TRUSTED_ADD, ESTATE_EXPERIENCE_TRUSTED_REMOVE); + mBlocked = setupList("panel_blocked", ESTATE_EXPERIENCE_BLOCKED_ADD, ESTATE_EXPERIENCE_BLOCKED_REMOVE); getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(TRUE); getChild<LLTextBox>("experiences_help_text")->setText(getString("estate_caption")); -- cgit v1.2.3 From 8a45e1915dfa2bb1fed85b8340b0e21584e3dc8a Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 27 May 2014 15:43:17 -0700 Subject: ACME-1495: Fxied merge --- indra/newview/llpreviewscript.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index d924b36bb9..99c6f2bd12 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -2118,6 +2118,8 @@ void LLLiveLSLEditor::loadAsset() time_corrected()); mAssetStatus = PREVIEW_ASSET_LOADED; } + + requestExperiences(); } // static -- cgit v1.2.3 From f06b305d9fe72b6972a2ab0d6047b792fa2706cd Mon Sep 17 00:00:00 2001 From: Richard Linden <none@none> Date: Wed, 28 May 2014 16:16:09 -0700 Subject: ACME-1471 WIP [VWR] Merge multiple Exp Perm dialogs into one merged multiple experience toasts into a single one reviewed by Cho --- indra/newview/llnotificationhandler.h | 1 + indra/newview/llnotificationscripthandler.cpp | 26 ++++++++++++++++++-------- indra/newview/llscreenchannel.cpp | 14 +++++++++----- 3 files changed, 28 insertions(+), 13 deletions(-) (limited to 'indra') diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index bff4efa9ea..e3270547c1 100755 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -169,6 +169,7 @@ public: virtual ~LLScriptHandler(); virtual void onDelete(LLNotificationPtr p); + virtual void onChange(LLNotificationPtr p); virtual bool processNotification(const LLNotificationPtr& p); protected: diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index a3b15931c6..65b1d5f95f 100755 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -116,18 +116,28 @@ bool LLScriptHandler::processNotification(const LLNotificationPtr& notification) return false; } +void LLScriptHandler::onChange( LLNotificationPtr notification ) +{ + LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel.get()); + if (channel) + { + LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); + channel->modifyToastByNotificationID(notification->getID(), notify_box); + + } +} void LLScriptHandler::onDelete( LLNotificationPtr notification ) - { +{ if(notification->hasFormElements() && !notification->canShowToast()) - { - LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID()); - } - else - { - mChannel.get()->removeToastByNotificationID(notification->getID()); - } + { + LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID()); + } + else + { + mChannel.get()->removeToastByNotificationID(notification->getID()); } +} //-------------------------------------------------------------------------- diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 6a840f3f40..0318199050 100755 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -533,19 +533,23 @@ void LLScreenChannel::modifyToastByNotificationID(LLUUID id, LLPanel* panel) { std::vector<ToastElem>::iterator it = find(mToastList.begin(), mToastList.end(), id); + LLPanel* panel_to_delete = panel; + if( it != mToastList.end() && panel) { LLToast* toast = it->getToast(); if (toast) { - LLPanel* old_panel = toast->getPanel(); - toast->removeChild(old_panel); - delete old_panel; - toast->insertPanel(panel); - toast->startTimer(); + LLPanel* old_panel = toast->getPanel(); + toast->removeChild(old_panel); + panel_to_delete = old_panel; + toast->insertPanel(panel); + toast->startTimer(); } redrawToasts(); } + + delete panel_to_delete; } //-------------------------------------------------------------------------- -- cgit v1.2.3 From e143ceb9db4ed716716580d098791cb18b1d5ac1 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 29 May 2014 03:04:19 +0100 Subject: Added inelegant fix for ACME-1471 to pop up the old notification with each new notification --- indra/newview/llnotificationscripthandler.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 65b1d5f95f..267d3ac092 100755 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -122,8 +122,21 @@ void LLScriptHandler::onChange( LLNotificationPtr notification ) if (channel) { LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); - channel->modifyToastByNotificationID(notification->getID(), notify_box); + + LLToast::Params p; + p.notif_id = notification->getID(); + p.notification = notification; + p.panel = notify_box; + p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1); + if(gAgent.isDoNotDisturb()) + { + p.force_show = notification->getName() == "SystemMessage" + || notification->getName() == "GodMessage" + || notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH; + } + channel->removeToastByNotificationID(notification->getID()); + channel->addToast(p); } } -- cgit v1.2.3 From 6e74c0de6aed31bc4c27fca1b14e7ab8ef301d34 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 29 May 2014 03:53:43 +0100 Subject: Streamlined previous fix for ACME-1471 --- indra/newview/llnotificationhandler.h | 1 + indra/newview/llnotificationscripthandler.cpp | 60 ++++++++++++--------------- 2 files changed, 27 insertions(+), 34 deletions(-) (limited to 'indra') diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index e3270547c1..3e7f05b5e1 100755 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -171,6 +171,7 @@ public: virtual void onDelete(LLNotificationPtr p); virtual void onChange(LLNotificationPtr p); virtual bool processNotification(const LLNotificationPtr& p); + virtual void addToastWithNotification(const LLNotificationPtr& p); protected: virtual void onDeleteToast(LLToast* toast); diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 267d3ac092..7acb2f9e90 100755 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -67,6 +67,30 @@ void LLScriptHandler::initChannel() mChannel.get()->init(channel_right_bound - channel_width, channel_right_bound); } +//-------------------------------------------------------------------------- +void LLScriptHandler::addToastWithNotification(const LLNotificationPtr& notification) +{ + LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); + + LLToast::Params p; + p.notif_id = notification->getID(); + p.notification = notification; + p.panel = notify_box; + p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1); + if(gAgent.isDoNotDisturb()) + { + p.force_show = notification->getName() == "SystemMessage" + || notification->getName() == "GodMessage" + || notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH; + } + + LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel.get()); + if(channel) + { + channel->addToast(p); + } +} + //-------------------------------------------------------------------------- bool LLScriptHandler::processNotification(const LLNotificationPtr& notification) { @@ -92,25 +116,7 @@ bool LLScriptHandler::processNotification(const LLNotificationPtr& notification) } else if (notification->canShowToast()) { - LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); - - LLToast::Params p; - p.notif_id = notification->getID(); - p.notification = notification; - p.panel = notify_box; - p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1); - if(gAgent.isDoNotDisturb()) - { - p.force_show = notification->getName() == "SystemMessage" - || notification->getName() == "GodMessage" - || notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH; - } - - LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel.get()); - if(channel) - { - channel->addToast(p); - } + addToastWithNotification(notification); } return false; @@ -121,22 +127,8 @@ void LLScriptHandler::onChange( LLNotificationPtr notification ) LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel.get()); if (channel) { - LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); - - LLToast::Params p; - p.notif_id = notification->getID(); - p.notification = notification; - p.panel = notify_box; - p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1); - if(gAgent.isDoNotDisturb()) - { - p.force_show = notification->getName() == "SystemMessage" - || notification->getName() == "GodMessage" - || notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH; - } - channel->removeToastByNotificationID(notification->getID()); - channel->addToast(p); + addToastWithNotification(notification); } } -- cgit v1.2.3 From 8924b2807585231fa40757ee4b76a0adbb2e3009 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 30 May 2014 03:49:22 +0100 Subject: Added a popup for choosing this or all estates when adding/removing an experience in the Region/Estate floater for ACME-1436 --- indra/newview/llfloaterregioninfo.cpp | 56 +++++++++++++-- .../newview/skins/default/xui/en/notifications.xml | 84 ++++++++++++++++++++++ 2 files changed, 133 insertions(+), 7 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index a63f1173d1..d2e8a4907b 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3720,15 +3720,57 @@ BOOL LLPanelRegionExperiences::sendUpdate() void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) { - if(id == mDefaultExperience) + std::string dialog_name; + switch (event_type) { - return; + case ESTATE_EXPERIENCE_ALLOWED_ADD: + dialog_name = "EstateAllowedExperienceAdd"; + break; + + case ESTATE_EXPERIENCE_ALLOWED_REMOVE: + dialog_name = "EstateAllowedExperienceRemove"; + break; + + case ESTATE_EXPERIENCE_TRUSTED_ADD: + dialog_name = "EstateTrustedExperienceAdd"; + break; + + case ESTATE_EXPERIENCE_TRUSTED_REMOVE: + dialog_name = "EstateTrustedExperienceRemove"; + break; + + case ESTATE_EXPERIENCE_BLOCKED_ADD: + dialog_name = "EstateBlockedExperienceAdd"; + break; + + case ESTATE_EXPERIENCE_BLOCKED_REMOVE: + dialog_name = "EstateAllowedExperienceAdd"; + break; + + default: + return; + } + + LLSD payload; + payload["operation"] = (S32)event_type; + payload["dialog_name"] = dialog_name; + payload["allowed_ids"].append(id); + + LLSD args; + args["ALL_ESTATES"] = all_estates_text(); + + LLNotification::Params params(dialog_name); + params.payload(payload) + .substitutions(args) + .functor.function(LLPanelEstateInfo::accessCoreConfirm); + if (LLPanelEstateInfo::isLindenEstate()) + { + LLNotifications::instance().forceResponse(params, 0); + } + else + { + LLNotifications::instance().add(params); } - strings_t str(3, std::string()); - gAgent.getID().toString(str[0]); - str[1] = llformat("%u", event_type); - id.toString(str[2]); - sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str); onChangeAnything(); } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 2e804c2404..b207051ec8 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4358,6 +4358,90 @@ Remove estate manager for this estate only or for [ALL_ESTATES]? yestext="This Estate"/> </notification> + <notification + icon="alert.tga" + label="Select estate" + name="EstateAllowedExperienceAdd" + type="alert"> + Add to allowed list for this estate only or for [ALL_ESTATES]? + <tag>confirm</tag> + <usetemplate + canceltext="Cancel" + name="yesnocancelbuttons" + notext="All Estates" + yestext="This Estate"/> + </notification> + + <notification + icon="alert.tga" + label="Select estate" + name="EstateAllowedExperienceRemove" + type="alert"> + Remove from allowed list for this estate only or for [ALL_ESTATES]? + <tag>confirm</tag> + <usetemplate + canceltext="Cancel" + name="yesnocancelbuttons" + notext="All Estates" + yestext="This Estate"/> + </notification> + + <notification + icon="alert.tga" + label="Select estate" + name="EstateBlockedExperienceAdd" + type="alert"> + Add to blocked list for this estate only or for [ALL_ESTATES]? + <tag>confirm</tag> + <usetemplate + canceltext="Cancel" + name="yesnocancelbuttons" + notext="All Estates" + yestext="This Estate"/> + </notification> + + <notification + icon="alert.tga" + label="Select estate" + name="EstateBlockedExperienceRemove" + type="alert"> + Remove from blocked list for this estate only or for [ALL_ESTATES]? + <tag>confirm</tag> + <usetemplate + canceltext="Cancel" + name="yesnocancelbuttons" + notext="All Estates" + yestext="This Estate"/> + </notification> + + <notification + icon="alert.tga" + label="Select estate" + name="EstateTrustedExperienceAdd" + type="alert"> + Add to trusted list for this estate only or for [ALL_ESTATES]? + <tag>confirm</tag> + <usetemplate + canceltext="Cancel" + name="yesnocancelbuttons" + notext="All Estates" + yestext="This Estate"/> + </notification> + + <notification + icon="alert.tga" + label="Select estate" + name="EstateTrustedExperienceRemove" + type="alert"> + Remove from trusted list for this estate only or for [ALL_ESTATES]? + <tag>confirm</tag> + <usetemplate + canceltext="Cancel" + name="yesnocancelbuttons" + notext="All Estates" + yestext="This Estate"/> + </notification> + <notification icon="alert.tga" label="Confirm Kick" -- cgit v1.2.3 From 8c44f87c7cbf8ebcc884e9566484ede13bc24af1 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 30 May 2014 10:19:22 -0700 Subject: ACME-1498: Removed invalid attribute --- indra/newview/skins/default/xui/en/panel_experience_search.xml | 1 - 1 file changed, 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/panel_experience_search.xml b/indra/newview/skins/default/xui/en/panel_experience_search.xml index 3deca265da..99ad3e7fe3 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_search.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_search.xml @@ -122,7 +122,6 @@ top_pad="4" follows="all" column_padding="5" - can_resize="true" name="search_results"> <columns halign="center" -- cgit v1.2.3 From 099ed7065591b4716c08ed9f6ffc8edfcaacfae0 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Sat, 31 May 2014 00:12:14 +0100 Subject: Fixed ACME-1436 and ACME-1501 --- indra/newview/llfloaterregioninfo.cpp | 74 ++++++++++++++++++++++++++++++++++- indra/newview/llfloaterregioninfo.h | 3 ++ 2 files changed, 75 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index d2e8a4907b..2249088b24 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3642,6 +3642,76 @@ public: }; +// Used for both access add and remove operations, depending on the flag +// passed in (ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE, etc.) +// static +bool LLPanelRegionExperiences::experienceCoreConfirm(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger(); + + LLViewerRegion* region = gAgent.getRegion(); + + LLSD::array_const_iterator end_it = notification["payload"]["allowed_ids"].endArray(); + + for (LLSD::array_const_iterator iter = notification["payload"]["allowed_ids"].beginArray(); + iter != end_it; + iter++) + { + U32 flags = originalFlags; + if (iter + 1 != end_it) + flags |= ESTATE_ACCESS_NO_REPLY; + + const LLUUID id = iter->asUUID(); + switch(option) + { + case 0: + // This estate + sendEstateExperienceDelta(flags, id); + break; + case 1: + { + // All estates, either than I own or manage for this owner. + // This will be verified on simulator. JC + if (!region) break; + if (region->getOwner() == gAgent.getID() + || gAgent.isGodlike()) + { + flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES; + sendEstateExperienceDelta(flags, id); + } + else if (region->isEstateManager()) + { + flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES; + sendEstateExperienceDelta(flags, id); + } + break; + } + case 2: + default: + break; + } + } + return false; +} + + +// Send the actual "estateexperiencedelta" message +void LLPanelRegionExperiences::sendEstateExperienceDelta(U32 flags, const LLUUID& experience_id) +{ + strings_t str(3, std::string()); + gAgent.getID().toString(str[0]); + str[1] = llformat("%u", flags); + experience_id.toString(str[2]); + + LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences(); + if (panel) + { + panel->sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str); + } +} + + void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content) { if(handle.isDead()) @@ -3744,7 +3814,7 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) break; case ESTATE_EXPERIENCE_BLOCKED_REMOVE: - dialog_name = "EstateAllowedExperienceAdd"; + dialog_name = "EstateBlockedExperienceRemove"; break; default: @@ -3762,7 +3832,7 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) LLNotification::Params params(dialog_name); params.payload(payload) .substitutions(args) - .functor.function(LLPanelEstateInfo::accessCoreConfirm); + .functor.function(LLPanelRegionExperiences::experienceCoreConfirm); if (LLPanelEstateInfo::isLindenEstate()) { LLNotifications::instance().forceResponse(params, 0); diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 7bba183ed2..15eeb5ed7e 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -463,6 +463,9 @@ public: LLPanelRegionExperiences(){} /*virtual*/ BOOL postBuild(); virtual BOOL sendUpdate(); + + static bool experienceCoreConfirm(const LLSD& notification, const LLSD& response); + static void sendEstateExperienceDelta(U32 flags, const LLUUID& agent_id); static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content); bool refreshFromRegion(LLViewerRegion* region); -- cgit v1.2.3 From f10f3d2fdec90b0ca4d34e6b90642e7c45896d9e Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Mon, 2 Jun 2014 21:16:28 +0100 Subject: Added URL menu for experience profile links for ACME-1469 --- indra/llui/llurlentry.cpp | 1 + indra/newview/llfloaterexperienceprofile.cpp | 3 ++- indra/newview/skins/default/xui/en/menu_url_experience.xml | 12 ++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 indra/newview/skins/default/xui/en/menu_url_experience.xml (limited to 'indra') diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index eba715f58d..67da98b95a 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1208,6 +1208,7 @@ LLUrlEntryExperienceProfile::LLUrlEntryExperienceProfile() mPattern = boost::regex(APP_HEADER_REGEX "/experience/[\\da-f-]+/\\w+\\S*", boost::regex::perl|boost::regex::icase); mIcon = "Generic_Experience"; + mMenuName = "menu_url_experience.xml"; } std::string LLUrlEntryExperienceProfile::getLabel( const std::string &url, const LLUrlLabelCallback &cb ) diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index c14d77a944..f80fdd9cfe 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -463,7 +463,8 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) LLTextBox* child = getChild<LLTextBox>(TF_NAME); - child->setText(experience[LLExperienceCache::NAME].asString()); + //child->setText(experience[LLExperienceCache::NAME].asString()); + child->setText(LLSLURL("experience", experience[LLExperienceCache::EXPERIENCE_ID], "profile").getSLURLString()); LLLineEditor* linechild = getChild<LLLineEditor>(EDIT TF_NAME); linechild->setText(experience[LLExperienceCache::NAME].asString()); diff --git a/indra/newview/skins/default/xui/en/menu_url_experience.xml b/indra/newview/skins/default/xui/en/menu_url_experience.xml new file mode 100644 index 0000000000..f4d50e1603 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_url_experience.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Url Popup"> + <menu_item_call + label="Copy SLurl to clipboard" + layout="topleft" + name="url_copy"> + <menu_item_call.on_click + function="Url.CopyUrl" /> + </menu_item_call> +</context_menu> -- cgit v1.2.3 From 921a93999bf78dcff9da3fa6cd7e1ec01d998d02 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 5 Jun 2014 03:11:01 +0100 Subject: Fixed double vision in experience picker floater for ACME-1473 --- indra/newview/llfloaterexperiencepicker.cpp | 4 +++- indra/newview/skins/default/xui/en/floater_experience_search.xml | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index da65e50244..04a2d541de 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -153,6 +153,8 @@ LLFloaterExperiencePicker::~LLFloaterExperiencePicker() BOOL LLFloaterExperiencePicker::postBuild() { - mSearchPanel = static_cast<LLPanelExperiencePicker*>(getChild<LLUICtrl>("panel_experience_search")); + mSearchPanel = new LLPanelExperiencePicker(); + addChild(mSearchPanel); + mSearchPanel->setOrigin(0, 0); return LLFloater::postBuild(); } diff --git a/indra/newview/skins/default/xui/en/floater_experience_search.xml b/indra/newview/skins/default/xui/en/floater_experience_search.xml index 7d7e3ba95a..15a4b5665e 100644 --- a/indra/newview/skins/default/xui/en/floater_experience_search.xml +++ b/indra/newview/skins/default/xui/en/floater_experience_search.xml @@ -11,10 +11,4 @@ help_topic="experiencepicker" title="CHOOSE EXPERIENCE" width="350"> - - <panel - filename="panel_experience_search.xml" - class="llpanelexperiencepicker" - follows="all" - name="panel_experience_search"/> </floater> -- cgit v1.2.3 From e30228615d3a1c8ff3a6cb4a2fff4fd02b61c182 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 5 Jun 2014 10:55:32 -0700 Subject: ACME-1505: Filter the search lists to prevent experiences that don't make sense from appearing. --- indra/newview/llfloaterland.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 2406b2e3cd..8d2d29ace1 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -76,6 +76,8 @@ #include "roles_constants.h" #include "lltrans.h" #include "llpanelexperiencelisteditor.h" +#include "llpanelexperiencepicker.h" +#include "llexperiencecache.h" #include "llgroupactions.h" @@ -2953,6 +2955,14 @@ BOOL LLPanelLandExperiences::postBuild() mAllowed = setupList("panel_allowed", EXPERIENCE_KEY_TYPE_ALLOWED, AL_ALLOW_EXPERIENCE); mBlocked = setupList("panel_blocked", EXPERIENCE_KEY_TYPE_BLOCKED, AL_BLOCK_EXPERIENCE); + // only non-grid-wide experiences + mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); + + // only grid-wide experiences + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); + // but not privileged ones + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); + getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(FALSE); getChild<LLTextBox>("experiences_help_text")->setVisible(FALSE); getChild<LLTextBox>("allowed_text_help")->setText(getString("allowed_parcel_text")); -- cgit v1.2.3 From 961418a42c10527f1dca4ec05d943d6f1772cd82 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 6 Jun 2014 00:14:14 +0100 Subject: Fixed ACME-1502 --- indra/newview/llpanelexperiencelisteditor.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 6641483054..cc44b7a339 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -76,8 +76,10 @@ const uuid_list_t& LLPanelExperienceListEditor::getExperienceIds() const void LLPanelExperienceListEditor::addExperienceIds( const uuid_vec_t& experience_ids ) { - mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); - onItems(); + // the commented out code in this function is handled by the callback and no longer necessary! + + //mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); + //onItems(); if(!mAddedCallback.empty()) { for(uuid_vec_t::const_iterator it = experience_ids.begin(); it != experience_ids.end(); ++it) @@ -118,17 +120,19 @@ void LLPanelExperienceListEditor::onAdd() void LLPanelExperienceListEditor::onRemove() { + // the commented out code in this function is handled by the callback and no longer necessary! + std::vector<LLScrollListItem*> items= mItems->getAllSelected(); std::vector<LLScrollListItem*>::iterator it = items.begin(); for(/**/; it != items.end(); ++it) { if((*it) != NULL) { - mExperienceIds.erase((*it)->getValue()); + //mExperienceIds.erase((*it)->getValue()); mRemovedCallback((*it)->getValue()); } } - onItems(); + //onItems(); } void LLPanelExperienceListEditor::onProfile() -- cgit v1.2.3 From 857c7fd8967b360eb8daef63c512c3c194aa812b Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 10 Jun 2014 19:39:07 +0100 Subject: Apply filters again whenever experience picker floater is shown for ACME-1505 --- indra/newview/llfloaterexperiencepicker.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp index 04a2d541de..bb54c57baf 100644 --- a/indra/newview/llfloaterexperiencepicker.cpp +++ b/indra/newview/llfloaterexperiencepicker.cpp @@ -59,7 +59,9 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca floater->mSearchPanel->mSelectionCallback = callback; floater->mSearchPanel->mCloseOnSelect = close_on_select; floater->mSearchPanel->setAllowMultiple(allow_multiple); + floater->mSearchPanel->setDefaultFilters(); floater->mSearchPanel->addFilters(filters.begin(), filters.end()); + floater->mSearchPanel->filterContent(); } if(frustumOrigin) -- cgit v1.2.3 From 53a39f360979ee7615d4c4bc069754d8b71bb600 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 11 Jun 2014 01:58:47 +0100 Subject: Added question mark help button to the experiences floater for ACME-1506 --- indra/newview/skins/default/xui/en/floater_experiences.xml | 1 + 1 file changed, 1 insertion(+) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/floater_experiences.xml b/indra/newview/skins/default/xui/en/floater_experiences.xml index fe959ea6d8..70e7507907 100644 --- a/indra/newview/skins/default/xui/en/floater_experiences.xml +++ b/indra/newview/skins/default/xui/en/floater_experiences.xml @@ -8,6 +8,7 @@ min_height="300" min_width="500" layout="topleft" + help_topic="floater_experiences" name="floater_experiences" save_rect="true" single_instance="true" -- cgit v1.2.3 From d04d37e200466fd50cd7d0e9a32b2f60df924960 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 11 Jun 2014 23:25:18 +0100 Subject: Added help topic to experience profile floater for ACME-1506 --- indra/newview/skins/default/xui/en/floater_experienceprofile.xml | 1 + 1 file changed, 1 insertion(+) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index c6a749b45f..165de9592e 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -5,6 +5,7 @@ can_close="true" enabled="true" can_resize="true" + help_topic="floater_experienceprofile" title="EXPERIENCE PROFILE" save_rect="true" min_width="325" -- cgit v1.2.3 From 7019c39a97ffc10090d52a8545521e78d6583a0a Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 11 Jun 2014 23:33:19 +0100 Subject: Moved buttons to very bottom of edit experience profile floater for ACME-1503 --- .../default/xui/en/floater_experienceprofile.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index 165de9592e..d146d1306f 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -649,6 +649,17 @@ follows="top|left|right" label="Hide In Search" name="edit_private_btn"/> + <text + follows="left|top|right" + height="25" + layout="topleft" + left="10" + top_pad="10" + name="changes" + use_ellipses="true" + word_wrap="true" + value="Experience changes may take several minutes to be seen on all regions." + right="-10"/> <button follows="top|left" height="23" @@ -669,17 +680,6 @@ width="125" right="-10" visible="true"/> - <text - follows="left|top|right" - height="25" - layout="topleft" - left="10" - top_pad="10" - name="changes" - use_ellipses="true" - word_wrap="true" - value="Experience changes may take several minutes to be seen on all regions." - right="-10"/> </panel> </scroll_container> </panel> -- cgit v1.2.3 From 24d825e72977fe5e80e3497cc57cd172418bd306 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 13 Jun 2014 14:22:32 -0700 Subject: ACME-1527: Reverted about land floater size --- indra/newview/skins/default/xui/en/floater_about_land.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 68f981f34f..62ab8ed193 100755 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -8,7 +8,7 @@ help_topic="floaterland" save_rect="true" title="ABOUT LAND" - width="590"> + width="490"> <floater.string name="maturity_icon_general"> "Parcel_PG_Dark" @@ -47,7 +47,7 @@ tab_height="25" tab_min_width="67" top="10" - width="589"> + width="489"> <panel border="false" follows="all" @@ -569,7 +569,8 @@ left="0" top="0" help_topic="land_covenant_tab" - name="land_covenant_panel"> + name="land_covenant_panel" + word_wrap="true"> <panel.string name="can_resell" word_wrap="true"> -- cgit v1.2.3 From 186d6e0ac8ab27aa5045457f38933cdab206091c Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 13 Jun 2014 14:23:16 -0700 Subject: ACME-1525: Added GroupExperiences cap --- indra/newview/llviewerregion.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra') diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index af998bbcb4..b101ef02d5 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2632,6 +2632,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("GetAdminExperiences"); capabilityNames.append("GetCreatorExperiences"); capabilityNames.append("ExperiencePreferences"); + capabilityNames.append("GroupExperiences"); capabilityNames.append("UpdateExperience"); capabilityNames.append("IsExperienceAdmin"); capabilityNames.append("IsExperienceContributor"); -- cgit v1.2.3 From 89ea1cbc7acee8878c36a5795dd3df12a913c513 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 17 Jun 2014 18:00:25 +0100 Subject: Made experience picker be created fresh every time the Add button is clicked, for ACME-1526 --- indra/newview/llpanelexperiencelisteditor.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index cc44b7a339..3561268063 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -106,15 +106,13 @@ void LLPanelExperienceListEditor::onAdd() { if(!mPicker.isDead()) { - mPicker.get()->setFrontmost(TRUE); + mPicker.markDead(); } - else - { - mKey.generateNewID(); - LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mFilters, mAdd); - mPicker = picker->getDerivedHandle<LLFloaterExperiencePicker>(); - } + mKey.generateNewID(); + + LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mFilters, mAdd); + mPicker = picker->getDerivedHandle<LLFloaterExperiencePicker>(); } -- cgit v1.2.3 From 03abd8dc2033c9166d618c9171975f1dc1d4aaa9 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 19 Jun 2014 01:06:23 +0100 Subject: Updated LLRegionExperienceResponder and LLExperienceSearchResponder to use new interface --- indra/newview/llfloaterregioninfo.cpp | 17 ++++++++-------- indra/newview/llpanelexperiencepicker.cpp | 32 ++++++++++++++++--------------- 2 files changed, 25 insertions(+), 24 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index e7a8e12039..f70152fc59 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3629,16 +3629,15 @@ public: LLRegionExperienceResponder(callback_t callback) : mCallback(callback) { } - void completed(U32 status, const std::string& reason, const LLSD& content) +protected: + /*virtual*/ void httpSuccess() { - if (isGoodStatus(status)) - { - mCallback(content); - } - else - { - LL_WARNS() << "experience responder failed [status:" << status << "]: " << content << LL_ENDL; - } + mCallback(getContent()); + } + + /*virtual*/ void httpFailure() + { + LL_WARNS() << "experience responder failed [status:" << getStatus() << "]: " << getContent() << LL_ENDL; } }; diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 19778cb200..0a572a8a5c 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -65,28 +65,30 @@ public: LLExperienceSearchResponder(const LLUUID& id, const LLHandle<LLPanelExperiencePicker>& parent) : mQueryID(id), mParent(parent) { } - void completed(U32 status, const std::string& reason, const LLSD& content) +protected: + /*virtual*/ void httpSuccess() { if(mParent.isDead()) return; - if (isGoodStatus(status)) + + LLPanelExperiencePicker* panel =mParent.get(); + if (panel) { - LLPanelExperiencePicker* panel =mParent.get(); - if (panel) - { - panel->processResponse(mQueryID, content); - } + panel->processResponse(mQueryID, getContent()); } - else - { - LLPanelExperiencePicker* panel =mParent.get(); - if (panel) - { - panel->processResponse(mQueryID, LLSD()); - } - LL_WARNS() << "experience picker failed [status:" << status << "]: " << content << LL_ENDL; + } + /*virtual*/ void httpFailure() + { + if(mParent.isDead()) + return; + + LLPanelExperiencePicker* panel =mParent.get(); + if (panel) + { + panel->processResponse(mQueryID, LLSD()); } + LL_WARNS() << "experience picker failed [status:" << getStatus() << "]: " << getContent() << LL_ENDL; } }; -- cgit v1.2.3 From 90262889c6f559492a6f245cc389594f868a93ae Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 19 Jun 2014 01:53:27 +0100 Subject: Added list of experiences to group profile floater for ACME-1525 --- indra/newview/CMakeLists.txt | 2 + indra/newview/llpanelgroup.cpp | 2 + indra/newview/llpanelgroupexperiences.cpp | 135 +++++++++++++++++++++ indra/newview/llpanelgroupexperiences.h | 53 ++++++++ .../default/xui/en/panel_group_info_sidetray.xml | 16 +++ 5 files changed, 208 insertions(+) create mode 100644 indra/newview/llpanelgroupexperiences.cpp create mode 100644 indra/newview/llpanelgroupexperiences.h (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 453669aca1..80981d04bd 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -413,6 +413,7 @@ set(viewer_SOURCE_FILES llpanelface.cpp llpanelgenerictip.cpp llpanelgroup.cpp + llpanelgroupexperiences.cpp llpanelgroupgeneral.cpp llpanelgroupinvite.cpp llpanelgrouplandmoney.cpp @@ -1007,6 +1008,7 @@ set(viewer_HEADER_FILES llpanelface.h llpanelgenerictip.h llpanelgroup.h + llpanelgroupexperiences.h llpanelgroupgeneral.h llpanelgroupinvite.h llpanelgrouplandmoney.h diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index f4aab6bd4e..8936084d97 100755 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -177,11 +177,13 @@ BOOL LLPanelGroup::postBuild() LLPanelGroupTab* panel_roles = findChild<LLPanelGroupTab>("group_roles_tab_panel"); LLPanelGroupTab* panel_notices = findChild<LLPanelGroupTab>("group_notices_tab_panel"); LLPanelGroupTab* panel_land = findChild<LLPanelGroupTab>("group_land_tab_panel"); + LLPanelGroupTab* panel_experiences = findChild<LLPanelGroupTab>("group_experiences_tab_panel"); if(panel_general) mTabs.push_back(panel_general); if(panel_roles) mTabs.push_back(panel_roles); if(panel_notices) mTabs.push_back(panel_notices); if(panel_land) mTabs.push_back(panel_land); + if(panel_experiences) mTabs.push_back(panel_experiences); if(panel_general) { diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp new file mode 100644 index 0000000000..140a71a528 --- /dev/null +++ b/indra/newview/llpanelgroupexperiences.cpp @@ -0,0 +1,135 @@ +/** + * @file llpanelgroupexperiences.cpp + * @brief List of experiences owned by a group. + * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelgroupexperiences.h" + +#include "lluictrlfactory.h" +#include "roles_constants.h" + +#include "llhttpclient.h" +#include "llagent.h" +#include "llviewerregion.h" +#include "llflatlistview.h" +#include "llpanelexperiences.h" +#include "llsd.h" + + +static LLPanelInjector<LLPanelGroupExperiences> t_panel_group_experiences("panel_group_experiences"); + + +class LLGroupExperienceResponder : public LLHTTPClient::Responder +{ +public: + LLHandle<LLPanelGroupExperiences> mHandle; + + LLGroupExperienceResponder(LLHandle<LLPanelGroupExperiences> handle) : mHandle(handle) { } + +protected: + /*virtual*/ void httpSuccess() + { + if (mHandle.isDead()) + { + return; + } + + LLPanelGroupExperiences* panel = mHandle.get(); + if (panel) + { + panel->setExperienceList(getContent().get("experience_ids")); + } + } + + /*virtual*/ void httpFailure() + { + LL_WARNS() << "experience responder failed [status:" << getStatus() << "]: " << getContent() << LL_ENDL; + } +}; + +LLPanelGroupExperiences::LLPanelGroupExperiences() +: LLPanelGroupTab(), mExperiencesList(NULL) +{ +} + +LLPanelGroupExperiences::~LLPanelGroupExperiences() +{ +} + +BOOL LLPanelGroupExperiences::postBuild() +{ + mExperiencesList = getChild<LLFlatListView>("experiences_list"); + if(hasString("no_experiences")) + { + mExperiencesList->setNoItemsCommentText(getString("no_experiences")); + } + + return LLPanelGroupTab::postBuild(); +} + +void LLPanelGroupExperiences::activate() +{ + if (getGroupID() == LLUUID::null) + { + return; + } + + // search for experiences owned by the current group + std::string url = gAgent.getRegion()->getCapability("GroupExperiences"); + if (!url.empty()) + { + url += "?" + getGroupID().asString(); + + LLHTTPClient::get(url, new LLGroupExperienceResponder(getDerivedHandle<LLPanelGroupExperiences>())); + } +} + +void LLPanelGroupExperiences::setGroupID(const LLUUID& id) +{ + LLPanelGroupTab::setGroupID(id); + + if(id == LLUUID::null) + { + return; + } + + activate(); +} + +void LLPanelGroupExperiences::setExperienceList(const LLSD& experiences) +{ + mExperiencesList->clear(); + + LLSD::array_const_iterator it = experiences.beginArray(); + for ( /**/ ; it != experiences.endArray(); ++it) + { + LLUUID public_key = it->asUUID(); + LLExperienceItem* item = new LLExperienceItem(); + + item->init(public_key); + mExperiencesList->addItem(item, public_key); + } +} diff --git a/indra/newview/llpanelgroupexperiences.h b/indra/newview/llpanelgroupexperiences.h new file mode 100644 index 0000000000..ae1ecc1ac5 --- /dev/null +++ b/indra/newview/llpanelgroupexperiences.h @@ -0,0 +1,53 @@ +/** + * @file llpanelgroupexperiences.h + * @brief List of experiences owned by a group. + * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, 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_LLPANELGROUPEXPERIENCES_H +#define LL_LLPANELGROUPEXPERIENCES_H + +#include "llpanelgroup.h" + +class LLFlatListView; + +class LLPanelGroupExperiences : public LLPanelGroupTab +{ +public: + LLPanelGroupExperiences(); + virtual ~LLPanelGroupExperiences(); + + // LLPanelGroupTab + virtual void activate(); + + virtual BOOL postBuild(); + + virtual void setGroupID(const LLUUID& id); + + void setExperienceList(const LLSD& experiences); + +protected: + LLFlatListView* mExperiencesList; +}; + +#endif diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index b3326d8da6..95312edfb9 100755 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -176,6 +176,22 @@ background_visible="true" name="group_land_tab_panel" top="0" /> </accordion_tab> + <accordion_tab + expanded="false" + layout="topleft" + name="group_experiences_tab" + title="Experiences" + fit_panel="false"> + <panel + border="false" + class="panel_group_experiences" + filename="panel_experiences.xml" + follows="left|top|right" + layout="topleft" + left="0" + name="group_experiences_tab_panel" + top="0" /> + </accordion_tab> </accordion> </layout_panel> </layout_stack> -- cgit v1.2.3 From c88b237473a75310722bac8d65a028a33a573215 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 20 Jun 2014 04:19:45 +0100 Subject: Updated LLExperienceCache::LLExperienceResponder to work with updated LLCurl::Responder interface, to fix ACME-1532 and ACME-1525 --- indra/llmessage/llexperiencecache.cpp | 26 ++++++++++---------------- indra/newview/llfloaterregioninfo.cpp | 2 +- indra/newview/llpanelexperiencepicker.cpp | 2 +- indra/newview/llpanelgroupexperiences.cpp | 2 +- 4 files changed, 13 insertions(+), 19 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index c8deaac1ef..1fb77c4391 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -257,7 +257,7 @@ namespace LLExperienceCache LLSDSerialize::toPrettyXML(data, ostr); } - class LLExperienceResponder : public LLHTTPClient::Responder + class LLExperienceResponder : public LLCurl::Responder { public: LLExperienceResponder(const ask_queue_t& keys) @@ -266,14 +266,9 @@ namespace LLExperienceCache } - virtual void completedHeader(U32 status, const std::string& reason, const LLSD& content) + /*virtual*/ void httpSuccess() { - mHeaders = content; - } - - virtual void result(const LLSD& content) - { - LLSD experiences = content["experience_keys"]; + LLSD experiences = getContent()["experience_keys"]; LLSD::array_const_iterator it = experiences.beginArray(); for( /**/ ; it != experiences.endArray(); ++it) { @@ -287,7 +282,7 @@ namespace LLExperienceCache processExperience(public_key, row); } - LLSD error_ids = content["error_ids"]; + LLSD error_ids = getContent()["error_ids"]; LLSD::array_const_iterator errIt = error_ids.beginArray(); for( /**/ ; errIt != error_ids.endArray() ; ++errIt ) { @@ -306,13 +301,13 @@ namespace LLExperienceCache LL_DEBUGS("ExperienceCache") << sCache.size() << " cached experiences" << LL_ENDL; } - virtual void error(U32 status, const std::string& reason) + /*virtual*/ void httpFailure() { - LL_WARNS("ExperienceCache") << "Request failed "<<status<<" "<<reason<< LL_ENDL; + LL_WARNS("ExperienceCache") << "Request failed "<<getStatus()<<" "<<getReason()<< LL_ENDL; // We're going to construct a dummy record and cache it for a while, // either briefly for a 503 Service Unavailable, or longer for other // errors. - F64 retry_timestamp = errorRetryTimestamp(status); + F64 retry_timestamp = errorRetryTimestamp(getStatus()); // Add dummy records for all agent IDs in this request @@ -330,7 +325,7 @@ namespace LLExperienceCache exp[EXPERIENCE_ID] = it->first; exp["key_type"] = it->second; exp["uuid"] = it->first; - exp["error"] = (LLSD::Integer)status; + exp["error"] = (LLSD::Integer)getStatus(); exp[QUOTA] = DEFAULT_QUOTA; LLExperienceCache::processExperience(it->first, exp); @@ -344,7 +339,7 @@ namespace LLExperienceCache { // Retry-After takes priority - LLSD retry_after = mHeaders["retry-after"]; + LLSD retry_after = getResponseHeaders()["retry-after"]; if (retry_after.isDefined()) { // We only support the delta-seconds type @@ -358,7 +353,7 @@ namespace LLExperienceCache // If no Retry-After, look for Cache-Control max-age F64 expires = 0.0; - if (LLExperienceCache::expirationFromCacheControl(mHeaders, &expires)) + if (LLExperienceCache::expirationFromCacheControl(getResponseHeaders(), &expires)) { return expires; } @@ -387,7 +382,6 @@ namespace LLExperienceCache private: ask_queue_t mKeys; - LLSD mHeaders; }; void requestExperiences() diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index f70152fc59..487610b797 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3620,7 +3620,7 @@ void LLPanelRegionExperiences::processResponse( const LLSD& content ) } -class LLRegionExperienceResponder : public LLHTTPClient::Responder +class LLRegionExperienceResponder : public LLCurl::Responder { public: typedef boost::function<void (const LLSD&)> callback_t; diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 0a572a8a5c..3a55295d8c 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -57,7 +57,7 @@ const static std::string columnSpace = " "; static LLPanelInjector<LLPanelExperiencePicker> t_panel_status("llpanelexperiencepicker"); -class LLExperienceSearchResponder : public LLHTTPClient::Responder +class LLExperienceSearchResponder : public LLCurl::Responder { public: LLUUID mQueryID; diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp index 140a71a528..4f8c5eb94f 100644 --- a/indra/newview/llpanelgroupexperiences.cpp +++ b/indra/newview/llpanelgroupexperiences.cpp @@ -42,7 +42,7 @@ static LLPanelInjector<LLPanelGroupExperiences> t_panel_group_experiences("panel_group_experiences"); -class LLGroupExperienceResponder : public LLHTTPClient::Responder +class LLGroupExperienceResponder : public LLCurl::Responder { public: LLHandle<LLPanelGroupExperiences> mHandle; -- cgit v1.2.3 From 7a15be83bf0692a927d2d2876190e63a99eccad2 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 20 Jun 2014 22:15:49 +0100 Subject: Updated LLExperienceListResponder to use new LLCurl::Responder interface to fix ACME-1533 --- indra/newview/llfloaterexperiences.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 5ed77d3680..98b26f5ac9 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -43,7 +43,7 @@ #define SHOW_RECENT_TAB (0) -class LLExperienceListResponder : public LLHTTPClient::Responder +class LLExperienceListResponder : public LLCurl::Responder { public: typedef std::map<std::string, std::string> NameMap; @@ -57,7 +57,7 @@ public: LLHandle<LLFloaterExperiences> mParent; NameMap mNameMap; const std::string mErrorMessage; - virtual void result(const LLSD& content) + /*virtual*/ void httpSuccess() { if(mParent.isDead()) return; @@ -68,16 +68,16 @@ public: NameMap::iterator it = mNameMap.begin(); while(it != mNameMap.end()) { - if(content.has(it->first)) + if(getContent().has(it->first)) { LLPanelExperiences* tab = (LLPanelExperiences*)tabs->getPanelByName(it->second); if(tab) { - const LLSD& ids = content[it->first]; + const LLSD& ids = getContent()[it->first]; tab->setExperienceList(ids); if(!mCallback.empty()) { - mCallback(tab, content); + mCallback(tab, getContent()); } } } @@ -85,10 +85,10 @@ public: } } - virtual void error(U32 status, const std::string& reason) + /*virtual*/ void httpFailure() { LLSD subs; - subs["ERROR_MESSAGE"] = reason; + subs["ERROR_MESSAGE"] = getReason(); LLNotificationsUtil::add(mErrorMessage, subs); } }; -- cgit v1.2.3 From a9c281eb57206a0ff7083788e593a22b9f8ad01a Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 24 Jun 2014 03:47:03 +0100 Subject: Updated ExperienceResponder in llpreviewscript.cpp to use new LLCurl::Responder interface for ACME-1534 --- indra/newview/llpreviewscript.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 99c6f2bd12..780c41172d 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -123,7 +123,7 @@ static bool have_script_upload_cap(LLUUID& object_id) } -class ExperienceResponder : public LLHTTPClient::Responder +class ExperienceResponder : public LLCurl::Responder { public: ExperienceResponder(const LLHandle<LLLiveLSLEditor>& parent):mParent(parent) @@ -132,13 +132,13 @@ public: LLHandle<LLLiveLSLEditor> mParent; - virtual void result(const LLSD& content) + /*virtual*/ void httpSuccess() { LLLiveLSLEditor* parent = mParent.get(); if(!parent) return; - parent->setExperienceIds(content["experience_ids"]); + parent->setExperienceIds(getContent()["experience_ids"]); } }; -- cgit v1.2.3 From 200788c344f5449f99eacc9167ac15c7e6262b69 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Tue, 24 Jun 2014 22:43:23 +0100 Subject: Updated all experience responders for LLCurl::Responder interface changes for ACME-1535 and ACME-1536 --- indra/llmessage/llexperiencecache.cpp | 4 ++-- indra/newview/llcompilequeue.cpp | 6 +++--- indra/newview/llexperienceassociationresponder.cpp | 14 +++++++------- indra/newview/llexperienceassociationresponder.h | 4 ++-- indra/newview/llfloaterexperienceprofile.cpp | 18 +++++++++--------- indra/newview/llfloaterexperiences.cpp | 2 +- indra/newview/llfloaterregioninfo.cpp | 2 +- indra/newview/llpanelexperiencepicker.cpp | 2 +- indra/newview/llpanelgroupexperiences.cpp | 2 +- indra/newview/llpreviewscript.cpp | 2 +- 10 files changed, 28 insertions(+), 28 deletions(-) (limited to 'indra') diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 1fb77c4391..52b60a176e 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -257,7 +257,7 @@ namespace LLExperienceCache LLSDSerialize::toPrettyXML(data, ostr); } - class LLExperienceResponder : public LLCurl::Responder + class LLExperienceResponder : public LLHTTPClient::Responder { public: LLExperienceResponder(const ask_queue_t& keys) @@ -266,7 +266,7 @@ namespace LLExperienceCache } - /*virtual*/ void httpSuccess() + /*virtual*/ void httpCompleted() { LLSD experiences = getContent()["experience_keys"]; LLSD::array_const_iterator it = experiences.beginArray(); diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 9e554ba0eb..d9fd4509a5 100755 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -251,11 +251,11 @@ public: LLUUID mParent; - virtual void result(const LLSD& content) + /*virtual*/ void httpSuccess() { - sendResult(content); + sendResult(getContent()); } - virtual void error(U32 status, const std::string& reason) + /*virtual*/ void httpFailure() { sendResult(LLSD()); } diff --git a/indra/newview/llexperienceassociationresponder.cpp b/indra/newview/llexperienceassociationresponder.cpp index 33ada4906d..b50c81eedc 100644 --- a/indra/newview/llexperienceassociationresponder.cpp +++ b/indra/newview/llexperienceassociationresponder.cpp @@ -61,19 +61,19 @@ void ExperienceAssociationResponder::fetchAssociatedExperience(LLSD& request, ca } } -void ExperienceAssociationResponder::error( U32 status, const std::string& reason ) +void ExperienceAssociationResponder::httpFailure() { LLSD msg; - msg["error"]=(LLSD::Integer)status; - msg["message"]=reason; - LL_INFOS("ExperienceAssociation") << "Failed to look up associated experience: " << status << ": " << reason << LL_ENDL; + msg["error"]=(LLSD::Integer)getStatus(); + msg["message"]=getReason(); + LL_INFOS("ExperienceAssociation") << "Failed to look up associated experience: " << getStatus() << ": " << getReason() << LL_ENDL; sendResult(msg); } -void ExperienceAssociationResponder::result( const LLSD& content ) +void ExperienceAssociationResponder::httpSuccess() { - if(!content.has("experience")) + if(!getContent().has("experience")) { LLSD msg; @@ -83,7 +83,7 @@ void ExperienceAssociationResponder::result( const LLSD& content ) return; } - LLExperienceCache::get(content["experience"].asUUID(), boost::bind(&ExperienceAssociationResponder::sendResult, this, _1)); + LLExperienceCache::get(getContent()["experience"].asUUID(), boost::bind(&ExperienceAssociationResponder::sendResult, this, _1)); } diff --git a/indra/newview/llexperienceassociationresponder.h b/indra/newview/llexperienceassociationresponder.h index 8ff62a3dbc..2bdc3d251b 100644 --- a/indra/newview/llexperienceassociationresponder.h +++ b/indra/newview/llexperienceassociationresponder.h @@ -41,8 +41,8 @@ public: ExperienceAssociationResponder(callback_t callback); - virtual void result(const LLSD& content); - virtual void error(U32 status, const std::string& reason); + /*virtual*/ void httpSuccess(); + /*virtual*/ void httpFailure(); static void fetchAssociatedExperience(const LLUUID& object_it, const LLUUID& item_id, callback_t callback); diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index f80fdd9cfe..764d9088a1 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -138,9 +138,9 @@ public: HandleResponder(const LLHandle<T>& parent):mParent(parent){} LLHandle<T> mParent; - virtual void error(U32 status, const std::string& reason) + virtual void httpFailure() { - LL_WARNS() << "HandleResponder failed with code: " << status<< ", reason: " << reason << LL_ENDL; + LL_WARNS() << "HandleResponder failed with code: " << getStatus() << ", reason: " << getReason() << LL_ENDL; } }; @@ -151,12 +151,12 @@ public: { } - virtual void result(const LLSD& content) + virtual void httpSuccess() { LLFloaterExperienceProfile* parent=mParent.get(); if(parent) { - parent->onSaveComplete(content); + parent->onSaveComplete(getContent()); } } }; @@ -225,14 +225,14 @@ public: } - virtual void result(const LLSD& content) + virtual void httpSuccess() { if(mId.notNull()) { - post(getPermission(content)); + post(getPermission(getContent())); return; } - LLEventPumps::instance().obtain("experience_permission").post(content); + LLEventPumps::instance().obtain("experience_permission").post(getContent()); } void post( const char* perm ) @@ -257,7 +257,7 @@ public: { } - virtual void result(const LLSD& content) + virtual void httpSuccess() { LLFloaterExperienceProfile* parent = mParent.get(); if(!parent) @@ -275,7 +275,7 @@ public: if(url.empty()) enabled = false; } - if(enabled && content["status"].asBoolean()) + if(enabled && getContent()["status"].asBoolean()) { parent->getChild<LLLayoutPanel>(PNL_TOP)->setVisible(TRUE); parent->getChild<LLButton>(BTN_EDIT)->setVisible(TRUE); diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index 98b26f5ac9..ac79c9ab43 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -43,7 +43,7 @@ #define SHOW_RECENT_TAB (0) -class LLExperienceListResponder : public LLCurl::Responder +class LLExperienceListResponder : public LLHTTPClient::Responder { public: typedef std::map<std::string, std::string> NameMap; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 487610b797..f70152fc59 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3620,7 +3620,7 @@ void LLPanelRegionExperiences::processResponse( const LLSD& content ) } -class LLRegionExperienceResponder : public LLCurl::Responder +class LLRegionExperienceResponder : public LLHTTPClient::Responder { public: typedef boost::function<void (const LLSD&)> callback_t; diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 3a55295d8c..0a572a8a5c 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -57,7 +57,7 @@ const static std::string columnSpace = " "; static LLPanelInjector<LLPanelExperiencePicker> t_panel_status("llpanelexperiencepicker"); -class LLExperienceSearchResponder : public LLCurl::Responder +class LLExperienceSearchResponder : public LLHTTPClient::Responder { public: LLUUID mQueryID; diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp index 4f8c5eb94f..140a71a528 100644 --- a/indra/newview/llpanelgroupexperiences.cpp +++ b/indra/newview/llpanelgroupexperiences.cpp @@ -42,7 +42,7 @@ static LLPanelInjector<LLPanelGroupExperiences> t_panel_group_experiences("panel_group_experiences"); -class LLGroupExperienceResponder : public LLCurl::Responder +class LLGroupExperienceResponder : public LLHTTPClient::Responder { public: LLHandle<LLPanelGroupExperiences> mHandle; diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 780c41172d..1732d4b3e5 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -123,7 +123,7 @@ static bool have_script_upload_cap(LLUUID& object_id) } -class ExperienceResponder : public LLCurl::Responder +class ExperienceResponder : public LLHTTPClient::Responder { public: ExperienceResponder(const LLHandle<LLLiveLSLEditor>& parent):mParent(parent) -- cgit v1.2.3 From 9b6598388a5fa085d89b77b57f0b361d53a680cb Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 25 Jun 2014 22:11:31 +0100 Subject: Disable About Land Experiences tab when parcel is not selected, for ACME-1528 --- indra/newview/llfloaterland.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 8d2d29ace1..4fda1ebb7d 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -3012,21 +3012,31 @@ void LLPanelLandExperiences::refreshPanel(LLPanelExperienceListEditor* panel, U3 LLParcel *parcel = mParcel->getParcel(); // Display options - if (parcel == NULL || panel == NULL) + if (panel == NULL) { return; } - - LLAccessEntry::map entries = parcel->getExperienceKeysByType(xp_type); - LLAccessEntry::map::iterator it = entries.begin(); - LLSD ids = LLSD::emptyArray(); - for (/**/; it != entries.end(); ++it) + if (parcel == NULL) + { + // disable the panel + panel->setEnabled(FALSE); + panel->setExperienceIds(LLSD::emptyArray()); + } + else { - ids.append(it->second.mID); + // enable the panel + panel->setEnabled(TRUE); + LLAccessEntry::map entries = parcel->getExperienceKeysByType(xp_type); + LLAccessEntry::map::iterator it = entries.begin(); + LLSD ids = LLSD::emptyArray(); + for (/**/; it != entries.end(); ++it) + { + ids.append(it->second.mID); + } + panel->setExperienceIds(ids); + panel->setReadonly(!LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS)); + panel->refreshExperienceCounter(); } - panel->setExperienceIds(ids); - panel->setReadonly(!LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS)); - panel->refreshExperienceCounter(); } void LLPanelLandExperiences::refresh() -- cgit v1.2.3 From f80a41cf36f023aa0b5a7368d81dd237dafc8d4a Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 27 Jun 2014 01:02:44 +0100 Subject: Sort experiences in list alphabetically by name for ACME-1537 --- indra/newview/llpanelexperiences.cpp | 43 ++++++++++++++++++++++++++++++++++-- indra/newview/llpanelexperiences.h | 12 ++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index 0d67dbf916..2885ef9305 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -38,9 +38,13 @@ #include "lllayoutstack.h" + static LLPanelInjector<LLPanelExperiences> register_experiences_panel("experiences_panel"); +//comparators +static const LLExperienceItemComparator NAME_COMPARATOR; + LLPanelExperiences::LLPanelExperiences( ) : mExperiencesList(NULL) { @@ -54,6 +58,7 @@ BOOL LLPanelExperiences::postBuild( void ) { mExperiencesList->setNoItemsCommentText(getString("no_experiences")); } + mExperiencesList->setComparator(&NAME_COMPARATOR); return TRUE; } @@ -81,6 +86,8 @@ void LLPanelExperiences::setExperienceList( const LLSD& experiences ) item->init(public_key); mExperiencesList->addItem(item, public_key); } + + mExperiencesList->sort(); } LLPanelExperiences* LLPanelExperiences::create(const std::string& name) @@ -112,6 +119,7 @@ void LLPanelExperiences::addExperience( const LLUUID& id ) item->init(id); mExperiencesList->addItem(item, id); + mExperiencesList->sort(); } } @@ -137,21 +145,32 @@ void LLPanelExperiences::enableButton( bool enable ) LLExperienceItem::LLExperienceItem() + : mName(NULL) { buildFromFile("panel_experience_list_item.xml"); } void LLExperienceItem::init( const LLUUID& id) { - getChild<LLUICtrl>("experience_name")->setValue(LLSLURL("experience", id, "profile").getSLURLString()); + mName = getChild<LLUICtrl>("experience_name"); + mName->setValue(LLSLURL("experience", id, "profile").getSLURLString()); } - LLExperienceItem::~LLExperienceItem() { } +std::string LLExperienceItem::getExperienceName() const +{ + if (mName) + { + return mName->getValue(); + } + + return ""; +} + void LLPanelSearchExperiences::doSearch() { @@ -169,3 +188,23 @@ BOOL LLPanelSearchExperiences::postBuild( void ) childSetAction("search_button", boost::bind(&LLPanelSearchExperiences::doSearch, this)); return TRUE; } + +bool LLExperienceItemComparator::compare(const LLPanel* item1, const LLPanel* item2) const +{ + const LLExperienceItem* experience_item1 = dynamic_cast<const LLExperienceItem*>(item1); + const LLExperienceItem* experience_item2 = dynamic_cast<const LLExperienceItem*>(item2); + + if (!experience_item1 || !experience_item2) + { + LL_ERRS() << "item1 and item2 cannot be null" << LL_ENDL; + return true; + } + + std::string name1 = experience_item1->getExperienceName(); + std::string name2 = experience_item2->getExperienceName(); + + LLStringUtil::toUpper(name1); + LLStringUtil::toUpper(name2); + + return name1 < name2; +} diff --git a/indra/newview/llpanelexperiences.h b/indra/newview/llpanelexperiences.h index c525b1f548..0370499583 100644 --- a/indra/newview/llpanelexperiences.h +++ b/indra/newview/llpanelexperiences.h @@ -71,6 +71,16 @@ private: LLFlatListView* mExperiencesList; }; +class LLExperienceItemComparator : public LLFlatListView::ItemComparator +{ + LOG_CLASS(LLExperienceItemComparator); + +public: + LLExperienceItemComparator() {}; + virtual ~LLExperienceItemComparator() {}; + + virtual bool compare(const LLPanel* item1, const LLPanel* item2) const; +}; class LLExperienceItem : public LLPanel @@ -80,6 +90,8 @@ public: ~LLExperienceItem(); void init(const LLUUID& experience_id); + std::string getExperienceName() const; protected: + LLUICtrl* mName; }; #endif // LL_LLPANELEXPERIENCES_H -- cgit v1.2.3 From e20276aadade4f88b9b4ddc149ce4ef97f938d88 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 2 Jul 2014 00:38:22 +0100 Subject: Hide experiences accordion when creating new group for ACME-1542 --- indra/newview/llpanelgroup.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'indra') diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index 8936084d97..f67a90fd01 100755 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -420,6 +420,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) LLAccordionCtrlTab* tab_roles = getChild<LLAccordionCtrlTab>("group_roles_tab"); LLAccordionCtrlTab* tab_notices = getChild<LLAccordionCtrlTab>("group_notices_tab"); LLAccordionCtrlTab* tab_land = getChild<LLAccordionCtrlTab>("group_land_tab"); + LLAccordionCtrlTab* tab_experiences = getChild<LLAccordionCtrlTab>("group_experiences_tab"); if(mButtonJoin) mButtonJoin->setVisible(false); @@ -436,10 +437,13 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) tab_notices->changeOpenClose(tab_notices->getDisplayChildren()); if(tab_land->getDisplayChildren()) tab_land->changeOpenClose(tab_land->getDisplayChildren()); + if(tab_experiences->getDisplayChildren()) + tab_experiences->changeOpenClose(tab_land->getDisplayChildren()); tab_roles->setVisible(false); tab_notices->setVisible(false); tab_land->setVisible(false); + tab_experiences->setVisible(false); getChild<LLUICtrl>("group_name")->setVisible(false); getChild<LLUICtrl>("group_name_editor")->setVisible(true); @@ -461,6 +465,8 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) tab_notices->changeOpenClose(tab_notices->getDisplayChildren()); if(tab_land->getDisplayChildren()) tab_land->changeOpenClose(tab_land->getDisplayChildren()); + if(tab_experiences->getDisplayChildren()) + tab_experiences->changeOpenClose(tab_land->getDisplayChildren()); } LLGroupData agent_gdatap; @@ -469,6 +475,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) tab_roles->setVisible(is_member); tab_notices->setVisible(is_member); tab_land->setVisible(is_member); + tab_experiences->setVisible(is_member); getChild<LLUICtrl>("group_name")->setVisible(true); getChild<LLUICtrl>("group_name_editor")->setVisible(false); @@ -536,6 +543,7 @@ bool LLPanelGroup::apply() && apply(findChild<LLPanelGroupTab>("group_roles_tab_panel")) && apply(findChild<LLPanelGroupTab>("group_notices_tab_panel")) && apply(findChild<LLPanelGroupTab>("group_land_tab_panel")) + && apply(findChild<LLPanelGroupTab>("group_experiences_tab_panel")) ; } -- cgit v1.2.3 From f804bcadb18488d36a97dc1f3a9ca2e4b1f7f039 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 2 Jul 2014 01:05:52 +0100 Subject: Added 'Loading experiences...' message on experience lists before populating lists for ACME-1543 --- indra/newview/llpanelexperiences.cpp | 10 +++++++++- indra/newview/llpanelgroupexperiences.cpp | 10 +++++++++- indra/newview/skins/default/xui/en/panel_experiences.xml | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiences.cpp b/indra/newview/llpanelexperiences.cpp index 2885ef9305..3ee4b5e968 100644 --- a/indra/newview/llpanelexperiences.cpp +++ b/indra/newview/llpanelexperiences.cpp @@ -54,7 +54,11 @@ LLPanelExperiences::LLPanelExperiences( ) BOOL LLPanelExperiences::postBuild( void ) { mExperiencesList = getChild<LLFlatListView>("experiences_list"); - if(hasString("no_experiences")) + if (hasString("loading_experiences")) + { + mExperiencesList->setNoItemsCommentText(getString("loading_experiences")); + } + else if (hasString("no_experiences")) { mExperiencesList->setNoItemsCommentText(getString("no_experiences")); } @@ -75,6 +79,10 @@ LLExperienceItem* LLPanelExperiences::getSelectedExperienceItem() void LLPanelExperiences::setExperienceList( const LLSD& experiences ) { + if (hasString("no_experiences")) + { + mExperiencesList->setNoItemsCommentText(getString("no_experiences")); + } mExperiencesList->clear(); LLSD::array_const_iterator it = experiences.beginArray(); diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp index 140a71a528..76b68122fb 100644 --- a/indra/newview/llpanelgroupexperiences.cpp +++ b/indra/newview/llpanelgroupexperiences.cpp @@ -82,7 +82,11 @@ LLPanelGroupExperiences::~LLPanelGroupExperiences() BOOL LLPanelGroupExperiences::postBuild() { mExperiencesList = getChild<LLFlatListView>("experiences_list"); - if(hasString("no_experiences")) + if (hasString("loading_experiences")) + { + mExperiencesList->setNoItemsCommentText(getString("loading_experiences")); + } + else if (hasString("no_experiences")) { mExperiencesList->setNoItemsCommentText(getString("no_experiences")); } @@ -121,6 +125,10 @@ void LLPanelGroupExperiences::setGroupID(const LLUUID& id) void LLPanelGroupExperiences::setExperienceList(const LLSD& experiences) { + if (hasString("no_experiences")) + { + mExperiencesList->setNoItemsCommentText(getString("no_experiences")); + } mExperiencesList->clear(); LLSD::array_const_iterator it = experiences.beginArray(); diff --git a/indra/newview/skins/default/xui/en/panel_experiences.xml b/indra/newview/skins/default/xui/en/panel_experiences.xml index 82b69fc344..7691e684c0 100644 --- a/indra/newview/skins/default/xui/en/panel_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_experiences.xml @@ -9,6 +9,9 @@ label="Experiences" bg_opaque_color="0 0.5 0 0.3" follows="all"> + <string + name="loading_experiences" + value="Loading experiences..."/> <string name="no_experiences" value="No experiences."/> -- cgit v1.2.3 From 4734e381df89facc253c48b1c6b8c3d91795d59e Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 17 Jul 2014 14:55:19 -0700 Subject: fixed XP_ERROR_... constants --- indra/lscript/lscript_compile/indra.l | 37 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'indra') diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index aad7c317d2..c2e21335e9 100755 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -132,6 +132,8 @@ int yyerror(const char *fmt, ...); "money" { count(); return(MONEY); } "email" { count(); return(EMAIL); } "run_time_permissions" { count(); return(RUN_TIME_PERMISSIONS); } +"experience_permissions" { count(); return(EXPERIENCE_PERMISSIONS); } +"experience_permissions_denied" { count(); return(EXPERIENCE_PERMISSIONS_DENIED); } "changed" { count(); return(INVENTORY); } "attach" { count(); return(ATTACH); } "dataserver" { count(); return(DATASERVER); } @@ -393,7 +395,6 @@ int yyerror(const char *fmt, ...); "PSYS_PART_END_ALPHA" { count(); yylval.ival = LLPS_PART_END_ALPHA; return (INTEGER_CONSTANT); } "PSYS_PART_END_SCALE" { count(); yylval.ival = LLPS_PART_END_SCALE; return (INTEGER_CONSTANT); } "PSYS_PART_MAX_AGE" { count(); yylval.ival = LLPS_PART_MAX_AGE; return (INTEGER_CONSTANT); } - "PSYS_PART_BLEND_FUNC_SOURCE" { count(); yylval.ival = LLPS_PART_BLEND_FUNC_SOURCE; return (INTEGER_CONSTANT); } "PSYS_PART_BLEND_FUNC_DEST" { count(); yylval.ival = LLPS_PART_BLEND_FUNC_DEST; return (INTEGER_CONSTANT); } "PSYS_PART_START_GLOW" { count(); yylval.ival = LLPS_PART_START_GLOW; return (INTEGER_CONSTANT); } @@ -419,7 +420,6 @@ int yyerror(const char *fmt, ...); "PSYS_PART_BF_SOURCE_ALPHA" { count(); yylval.ival = LLPartData::LL_PART_BF_SOURCE_ALPHA; return(INTEGER_CONSTANT); } "PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA" { count(); yylval.ival = LLPartData::LL_PART_BF_ONE_MINUS_SOURCE_ALPHA; return(INTEGER_CONSTANT); } - "PSYS_SRC_MAX_AGE" { count(); yylval.ival = LLPS_SRC_MAX_AGE; return(INTEGER_CONSTANT); } "PSYS_SRC_PATTERN" { count(); yylval.ival = LLPS_SRC_PATTERN; return(INTEGER_CONSTANT); } "PSYS_SRC_INNERANGLE" { count(); yylval.ival = LLPS_SRC_INNERANGLE; return(INTEGER_CONSTANT); } @@ -737,22 +737,23 @@ int yyerror(const char *fmt, ...); "STATUS_INTERNAL_ERROR" { count(); yylval.ival = LSL_STATUS_INTERNAL_ERROR; return(INTEGER_CONSTANT); } "STATUS_WHITELIST_FAILED" { count(); yylval.ival = LSL_STATUS_WHITELIST_FAILED; return(INTEGER_CONSTANT); } -"XP_ERROR_NONE" { const char* sval= "no error"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_THROTTLED" { const char* sval= "exceeded throttle"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_EXPERIENCES_DISABLED" { const char* sval= "experiences are disabled"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_INVALID_PARAMETERS" { const char* sval= "invalid parameters"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_NOT_PERMITTED" { const char* sval= "operation not permitted"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_NO_EXPERIENCE" { const char* sval= "script not associated with an experience";yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_NOT_FOUND" { const char* sval= "not found"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_INVALID_EXPERIENCE" { const char* sval= "invalid experience"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_EXPERIENCE_DISABLED" { const char* sval= "experience is disabled"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_EXPERIENCE_SUSPENDED" { const char* sval= "experience is suspended"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_UNKNOWN_ERROR" { const char* sval= "unknown error"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_QUOTA_EXCEEDED" { const char* sval= "experience data quota exceeded"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_STORE_DISABLED" { const char* sval= "key-value store is disabled"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_STORAGE_EXCEPTION" { const char* sval= "key-value store communication failed"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_KEY_NOT_FOUND" { const char* sval= "key doesn't exist"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } -"XP_ERROR_RETRY_UPDATE" { const char* sval= "retry update"; yylval.sval = new char[strlen(sval)+1]; strcpy(yylval.sval, sval); return(STRING_CONSTANT); } +"XP_ERROR_NONE" { count(); yylval.ival = LSL_XP_ERROR_NONE ; return (INTEGER_CONSTANT); } +"XP_ERROR_THROTTLED" { count(); yylval.ival = LSL_XP_ERROR_THROTTLED ; return (INTEGER_CONSTANT); } +"XP_ERROR_EXPERIENCES_DISABLED" { count(); yylval.ival = LSL_XP_ERROR_EXPERIENCES_DISABLED; return (INTEGER_CONSTANT); } +"XP_ERROR_INVALID_PARAMETERS" { count(); yylval.ival = LSL_XP_ERROR_INVALID_PARAMETERS ; return (INTEGER_CONSTANT); } +"XP_ERROR_NOT_PERMITTED" { count(); yylval.ival = LSL_XP_ERROR_NOT_PERMITTED ; return (INTEGER_CONSTANT); } +"XP_ERROR_NO_EXPERIENCE" { count(); yylval.ival = LSL_XP_ERROR_NO_EXPERIENCE ; return (INTEGER_CONSTANT); } +"XP_ERROR_NOT_FOUND" { count(); yylval.ival = LSL_XP_ERROR_NOT_FOUND ; return (INTEGER_CONSTANT); } +"XP_ERROR_INVALID_EXPERIENCE" { count(); yylval.ival = LSL_XP_ERROR_INVALID_EXPERIENCE ; return (INTEGER_CONSTANT); } +"XP_ERROR_EXPERIENCE_DISABLED" { count(); yylval.ival = LSL_XP_ERROR_EXPERIENCE_DISABLED ; return (INTEGER_CONSTANT); } +"XP_ERROR_EXPERIENCE_SUSPENDED" { count(); yylval.ival = LSL_XP_ERROR_EXPERIENCE_SUSPENDED; return (INTEGER_CONSTANT); } +"XP_ERROR_UNKNOWN_ERROR" { count(); yylval.ival = LSL_XP_ERROR_UNKNOWN_ERROR ; return (INTEGER_CONSTANT); } +"XP_ERROR_QUOTA_EXCEEDED" { count(); yylval.ival = LSL_XP_ERROR_QUOTA_EXCEEDED ; return (INTEGER_CONSTANT); } +"XP_ERROR_STORE_DISABLED" { count(); yylval.ival = LSL_XP_ERROR_STORE_DISABLED ; return (INTEGER_CONSTANT); } +"XP_ERROR_STORAGE_EXCEPTION" { count(); yylval.ival = LSL_XP_ERROR_STORAGE_EXCEPTION ; return (INTEGER_CONSTANT); } +"XP_ERROR_KEY_NOT_FOUND" { count(); yylval.ival = LSL_XP_ERROR_KEY_NOT_FOUND ; return (INTEGER_CONSTANT); } +"XP_ERROR_RETRY_UPDATE" { count(); yylval.ival = LSL_XP_ERROR_RETRY_UPDATE ; return (INTEGER_CONSTANT); } +"XP_ERROR_MATURITY_EXCEEDED" { count(); yylval.ival = LSL_XP_ERROR_MATURITY_EXCEEDED ; return (INTEGER_CONSTANT); } {L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); } -- cgit v1.2.3 From 3b2f456416d29534cb41fc9d4ad3bf195dcfc847 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Fri, 18 Jul 2014 01:45:48 +0100 Subject: Added mLocationSLURL to fix ACME-1560 --- indra/newview/llfloaterexperienceprofile.cpp | 23 ++++++++++++----------- indra/newview/llfloaterexperienceprofile.h | 1 + 2 files changed, 13 insertions(+), 11 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 764d9088a1..4ee31f5df1 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -477,18 +477,18 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) LLTextEditor* edit_child = getChild<LLTextEditor>(EDIT TF_DESC); edit_child->setText(value); - value = experience[LLExperienceCache::SLURL].asString(); + mLocationSLURL = experience[LLExperienceCache::SLURL].asString(); child = getChild<LLTextBox>(TF_SLURL); - bool has_value = value.length()>0; - locationPanel->setVisible(has_value); - value = LLSLURL(value).getSLURLString(); - child->setText(value); + bool has_slurl = mLocationSLURL.length()>0; + locationPanel->setVisible(has_slurl); + mLocationSLURL = LLSLURL(mLocationSLURL).getSLURLString(); + child->setText(mLocationSLURL); child = getChild<LLTextBox>(EDIT TF_SLURL); - if(has_value) + if(has_slurl) { - child->setText(value); + child->setText(mLocationSLURL); } else { @@ -829,7 +829,8 @@ void LLFloaterExperienceProfile::onClickLocation() if(region) { LLTextBox* child = getChild<LLTextBox>(EDIT TF_SLURL); - child->setText(LLSLURL(region->getName(), gAgent.getPositionGlobal()).getSLURLString()); + mLocationSLURL = LLSLURL(region->getName(), gAgent.getPositionGlobal()).getSLURLString(); + child->setText(mLocationSLURL); onFieldChanged(); } } @@ -837,6 +838,7 @@ void LLFloaterExperienceProfile::onClickLocation() void LLFloaterExperienceProfile::onClickClear() { LLTextBox* child = getChild<LLTextBox>(EDIT TF_SLURL); + mLocationSLURL = ""; child->setText(getString("empty_slurl")); onFieldChanged(); } @@ -916,14 +918,13 @@ void LLFloaterExperienceProfile::updatePackage() { mPackage[LLExperienceCache::NAME] = getChild<LLLineEditor>(EDIT TF_NAME)->getText(); mPackage[LLExperienceCache::DESCRIPTION] = getChild<LLTextEditor>(EDIT TF_DESC)->getText(); - std::string slurl = getChild<LLTextBox>(EDIT TF_SLURL)->getText(); - if(slurl == getString("empty_slurl")) + if(mLocationSLURL.empty()) { mPackage[LLExperienceCache::SLURL] = LLStringUtil::null; } else { - mPackage[LLExperienceCache::SLURL] = slurl; + mPackage[LLExperienceCache::SLURL] = mLocationSLURL; } mPackage[LLExperienceCache::MATURITY] = getChild<LLComboBox>(EDIT TF_MATURITY)->getSelectedValue().asInteger(); diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h index b66df49a8a..78d54eb447 100644 --- a/indra/newview/llfloaterexperienceprofile.h +++ b/indra/newview/llfloaterexperienceprofile.h @@ -95,6 +95,7 @@ protected: LLUUID mExperienceId; LLSD mExperienceDetails; LLSD mPackage; + std::string mLocationSLURL; int mSaveCompleteAction; bool mDirty; bool mForceClose; -- cgit v1.2.3 From d576e66210c020a8a86bcc88898a352bc0875d9a Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Wed, 6 Aug 2014 13:49:29 -0700 Subject: Pulling over more lsl changes to support the adding of the LSL_XP_XXX constants --- indra/llprimitive/lllslconstants.h | 19 +++ indra/lscript/lscript_byteformat.h | 19 ++- indra/lscript/lscript_compile/indra.y | 37 +++++- indra/lscript/lscript_compile/lscript_tree.cpp | 159 ++++++++++++++++++++++++- indra/lscript/lscript_compile/lscript_tree.h | 33 +++++ 5 files changed, 260 insertions(+), 7 deletions(-) (limited to 'indra') diff --git a/indra/llprimitive/lllslconstants.h b/indra/llprimitive/lllslconstants.h index 926ce32d75..b6baf98211 100644 --- a/indra/llprimitive/lllslconstants.h +++ b/indra/llprimitive/lllslconstants.h @@ -239,4 +239,23 @@ const U32 LSL_STATUS_INTERNAL_ERROR = 1999; // Start per-function errors below, starting at 2000: const U32 LSL_STATUS_WHITELIST_FAILED = 2001; + +const S32 LSL_XP_ERROR_NONE = 0; +const S32 LSL_XP_ERROR_THROTTLED = 1; +const S32 LSL_XP_ERROR_EXPERIENCES_DISABLED = 2; +const S32 LSL_XP_ERROR_INVALID_PARAMETERS = 3; +const S32 LSL_XP_ERROR_NOT_PERMITTED = 4; +const S32 LSL_XP_ERROR_NO_EXPERIENCE = 5; +const S32 LSL_XP_ERROR_NOT_FOUND = 6; +const S32 LSL_XP_ERROR_INVALID_EXPERIENCE = 7; +const S32 LSL_XP_ERROR_EXPERIENCE_DISABLED = 8; +const S32 LSL_XP_ERROR_EXPERIENCE_SUSPENDED = 9; +const S32 LSL_XP_ERROR_UNKNOWN_ERROR = 10; +const S32 LSL_XP_ERROR_QUOTA_EXCEEDED = 11; +const S32 LSL_XP_ERROR_STORE_DISABLED = 12; +const S32 LSL_XP_ERROR_STORAGE_EXCEPTION = 13; +const S32 LSL_XP_ERROR_KEY_NOT_FOUND = 14; +const S32 LSL_XP_ERROR_RETRY_UPDATE = 15; +const S32 LSL_XP_ERROR_MATURITY_EXCEEDED = 16; + #endif diff --git a/indra/lscript/lscript_byteformat.h b/indra/lscript/lscript_byteformat.h index 54031aaf05..a4703b7a61 100755 --- a/indra/lscript/lscript_byteformat.h +++ b/indra/lscript/lscript_byteformat.h @@ -355,6 +355,10 @@ typedef enum e_lscript_state_event_type LSTT_REMOTE_DATA, LSTT_HTTP_RESPONSE, LSTT_HTTP_REQUEST, + LSTT_EXPERMISSIONS, + LSTT_TRANSACTION_RESULT, + LSTT_PATH_UPDATE, + LSTT_EXPERMISSIONS_DENIED, LSTT_EOF, LSTT_STATE_BEGIN = LSTT_STATE_ENTRY, @@ -397,7 +401,11 @@ const U64 LSCRIPTStateBitField[LSTT_EOF] = 0x0000000040000000, // LSTT_OBJECT_REZ 0x0000000080000000, // LSTT_REMOTE_DATA 0x0000000100000000LL, // LSTT_HTTP_RESPOSE - 0x0000000200000000LL // LSTT_HTTP_REQUEST + 0x0000000200000000LL, // LSTT_HTTP_REQUEST + 0x0000000400000000LL, // LSTT_EXPERMISSIONS + 0x0000000800000000LL, // LSTT_TRANSACTION_RESULT + 0x0000001000000000LL, // LSTT_PATH_UPDATE + 0x0000002000000000LL, //LSTT_EXPERMISSIONS_DENIED }; inline S32 get_event_handler_jump_position(U64 bit_field, LSCRIPTStateEventType type) @@ -511,6 +519,7 @@ typedef enum e_lscript_runtime_faults LSRF_TOO_MANY_LISTENS, LSRF_NESTING_LISTS, LSRF_CLI, + LSRF_INVALID_STATE, LSRF_EOF } LSCRIPTRunTimeFaults; @@ -551,10 +560,10 @@ const U32 LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_EOF] = (0x1 << 10),// SCRIPT_PERMISSION_TRACK_CAMERA (0x1 << 11),// SCRIPT_PERMISSION_CONTROL_CAMERA (0x1 << 12),// SCRIPT_PERMISSION_TELEPORT - (0x1 << 13),// SCRIPT_PERMISSION_EXPERIENCE, - (0x1 << 14),// SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT, - (0x1 << 15),// SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS, - (0x1 << 16),// SCRIPT_PERMISSION_RETURN_OBJECTS, + (0x1 << 13),// SCRIPT_PERMISSION_EXPERIENCE + (0x1 << 14),// SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT + (0x1 << 15),// SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS + (0x1 << 16),// SCRIPT_PERMISSION_RETURN_OBJECTS }; // http_request string constants diff --git a/indra/lscript/lscript_compile/indra.y b/indra/lscript/lscript_compile/indra.y index a0a034d21c..c451eee3d8 100755 --- a/indra/lscript/lscript_compile/indra.y +++ b/indra/lscript/lscript_compile/indra.y @@ -15,7 +15,6 @@ #pragma warning (disable : 4702) // warning C4702: unreachable code #pragma warning( disable : 4065 ) // warning: switch statement contains 'default' but no 'case' labels #endif - %} %union @@ -75,6 +74,8 @@ %token MONEY %token EMAIL %token RUN_TIME_PERMISSIONS +%token EXPERIENCE_PERMISSIONS +%token EXPERIENCE_PERMISSIONS_DENIED %token INVENTORY %token ATTACH %token DATASERVER @@ -180,6 +181,8 @@ %type <event> money %type <event> email %type <event> run_time_permissions +%type <event> experience_permissions +%type <event> experience_permissions_denied %type <event> inventory %type <event> attach %type <event> dataserver @@ -788,6 +791,16 @@ event $$ = new LLScriptEventHandler(gLine, gColumn, $1, $2); gAllocationManager->addAllocation($$); } + | experience_permissions compound_statement + { + $$ = new LLScriptEventHandler(gLine, gColumn, $1, $2); + gAllocationManager->addAllocation($$); + } + | experience_permissions_denied compound_statement + { + $$ = new LLScriptEventHandler(gLine, gColumn, $1, $2); + gAllocationManager->addAllocation($$); + } | inventory compound_statement { $$ = new LLScriptEventHandler(gLine, gColumn, $1, $2); @@ -1040,6 +1053,28 @@ run_time_permissions } ; +experience_permissions + : EXPERIENCE_PERMISSIONS '(' LLKEY IDENTIFIER ')' + { + LLScriptIdentifier *id1 = new LLScriptIdentifier(gLine, gColumn, $4); + gAllocationManager->addAllocation(id1); + $$ = new LLScriptEXPEvent(gLine, gColumn, id1); + gAllocationManager->addAllocation($$); + } + ; + +experience_permissions_denied + : EXPERIENCE_PERMISSIONS_DENIED '(' LLKEY IDENTIFIER ',' INTEGER IDENTIFIER ')' + { + LLScriptIdentifier *id1 = new LLScriptIdentifier(gLine, gColumn, $4); + gAllocationManager->addAllocation(id1); + LLScriptIdentifier *id2 = new LLScriptIdentifier(gLine, gColumn, $7); + gAllocationManager->addAllocation(id2); + $$ = new LLScriptEXPDeniedEvent(gLine, gColumn, id1, id2); + gAllocationManager->addAllocation($$); + } + ; + inventory : INVENTORY '(' INTEGER IDENTIFIER ')' { diff --git a/indra/lscript/lscript_compile/lscript_tree.cpp b/indra/lscript/lscript_compile/lscript_tree.cpp index 8a70dd9ac1..4215596c8b 100755 --- a/indra/lscript/lscript_compile/lscript_tree.cpp +++ b/indra/lscript/lscript_compile/lscript_tree.cpp @@ -3844,6 +3844,156 @@ S32 LLScriptNotAtTarget::getSize() return 0; } + +void LLScriptEXPEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +{ + if (gErrorToText.getErrors()) + { + return; + } + switch(pass) + { + case LSCP_PRETTY_PRINT: + case LSCP_EMIT_ASSEMBLY: + fdotabs(fp, tabs, tabsize); + fprintf(fp, "experience_permissions( key "); + mName->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + fprintf(fp, " )\n"); + break; + case LSCP_SCOPE_PASS1: + checkForDuplicateHandler(fp, this, scope, "experience_permissions"); + if (scope->checkEntry(mName->mName)) + { + gErrorToText.writeError(fp, this, LSERROR_DUPLICATE_NAME); + } + else + { + mName->mScopeEntry = scope->addEntry(mName->mName, LIT_VARIABLE, LST_KEY); + } + break; + case LSCP_RESOURCE: + { + // we're just tryng to determine how much space the variable needs + if (mName->mScopeEntry) + { + mName->mScopeEntry->mOffset = (S32)count; + mName->mScopeEntry->mSize = 4; + count += mName->mScopeEntry->mSize; + } + } + break; + + case LSCP_EMIT_BYTE_CODE: + { +#ifdef LSL_INCLUDE_DEBUG_INFO + char name[] = "experience_permissions"; + chunk->addBytes(name, strlen(name) + 1); + chunk->addBytes(mName->mName, strlen(mName->mName) + 1); +#endif + } + break; + case LSCP_EMIT_CIL_ASSEMBLY: + fdotabs(fp, tabs, tabsize); + fprintf(fp, "experience_permissions( valuetype [ScriptTypes]LindenLab.SecondLife.Key "); + mName->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + fprintf(fp, " )"); + break; + default: + mName->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + break; + } +} + +S32 LLScriptEXPEvent::getSize() +{ + // key = 4 + return 4; +} + + +void LLScriptEXPDeniedEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) +{ + if (gErrorToText.getErrors()) + { + return; + } + switch(pass) + { + case LSCP_PRETTY_PRINT: + case LSCP_EMIT_ASSEMBLY: + fdotabs(fp, tabs, tabsize); + fprintf(fp, "experience_permissions_denied( key "); + mName->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + fprintf(fp, ", integer "); + mReason->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + fprintf(fp, " )\n"); + break; + case LSCP_SCOPE_PASS1: + checkForDuplicateHandler(fp, this, scope, "experience_permissions_denied"); + if (scope->checkEntry(mName->mName)) + { + gErrorToText.writeError(fp, this, LSERROR_DUPLICATE_NAME); + } + else + { + mName->mScopeEntry = scope->addEntry(mName->mName, LIT_VARIABLE, LST_KEY); + } + if (scope->checkEntry(mReason->mName)) + { + gErrorToText.writeError(fp, this, LSERROR_DUPLICATE_NAME); + } + else + { + mReason->mScopeEntry = scope->addEntry(mReason->mName, LIT_VARIABLE, LST_INTEGER); + } + break; + case LSCP_RESOURCE: + { + // we're just trying to determine how much space the variable needs + if (mName->mScopeEntry) + { + mName->mScopeEntry->mOffset = (S32)count; + mName->mScopeEntry->mSize = 4; + count += mName->mScopeEntry->mSize; + + mReason->mScopeEntry->mOffset = (S32)count; + mReason->mScopeEntry->mSize = 4; + count += mReason->mScopeEntry->mSize; + } + } + break; + + case LSCP_EMIT_BYTE_CODE: + { +#ifdef LSL_INCLUDE_DEBUG_INFO + char name[] = "experience_permissions_denied"; + chunk->addBytes(name, strlen(name) + 1); + chunk->addBytes(mName->mName, strlen(mName->mName) + 1); + chunk->addBytes(mReason->mName, strlen(mReason->mName) + 1); +#endif + } + break; + case LSCP_EMIT_CIL_ASSEMBLY: + fdotabs(fp, tabs, tabsize); + fprintf(fp, "experience_permissions_denied( valuetype [ScriptTypes]LindenLab.SecondLife.Key "); + mName->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + fprintf(fp, ", int32 "); + mReason->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + fprintf(fp, " )"); + break; + default: + mName->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + mReason->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL); + break; + } +} + +S32 LLScriptEXPDeniedEvent::getSize() +{ + // key = 4 + integer + return LSCRIPTDataSize[LST_KEY]+LSCRIPTDataSize[LST_INTEGER]; +} + void LLScriptAtRotTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) { if (gErrorToText.getErrors()) @@ -8569,6 +8719,7 @@ void LLScriptReturn::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePa } } prunearg = TRUE; + break; case LSCP_TYPE: // if there is a return expression, it must be promotable to the return type of the function if (mExpression) @@ -9767,7 +9918,13 @@ void LLScriptEventHandler::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCom mScopeEntry->mFunctionArgs.addType(LST_STRING); mScopeEntry->mFunctionArgs.addType(LST_STRING); break; - + case LSTT_EXPERMISSIONS: + mScopeEntry->mFunctionArgs.addType(LST_KEY); + break; + case LSTT_EXPERMISSIONS_DENIED: + mScopeEntry->mFunctionArgs.addType(LST_KEY); + mScopeEntry->mFunctionArgs.addType(LST_INTEGER); + break; default: break; } diff --git a/indra/lscript/lscript_compile/lscript_tree.h b/indra/lscript/lscript_compile/lscript_tree.h index 047c220b17..38a69cece8 100755 --- a/indra/lscript/lscript_compile/lscript_tree.h +++ b/indra/lscript/lscript_compile/lscript_tree.h @@ -627,6 +627,39 @@ public: LLScriptIdentifier *mRTPermissions; }; +class LLScriptEXPEvent : public LLScriptEvent +{ +public: + LLScriptEXPEvent(S32 line, S32 col, LLScriptIdentifier *name) + : LLScriptEvent(line, col, LSTT_EXPERMISSIONS), mName(name) + { + } + + ~LLScriptEXPEvent() {} + + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + S32 getSize(); + + LLScriptIdentifier *mName; +}; + +class LLScriptEXPDeniedEvent : public LLScriptEvent +{ +public: + LLScriptEXPDeniedEvent(S32 line, S32 col, LLScriptIdentifier *name, LLScriptIdentifier *reason) + : LLScriptEvent(line, col, LSTT_EXPERMISSIONS_DENIED), mName(name), mReason(reason) + { + } + + ~LLScriptEXPDeniedEvent() {} + + void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); + S32 getSize(); + + LLScriptIdentifier *mName; + LLScriptIdentifier *mReason; +}; + class LLScriptChatEvent : public LLScriptEvent { public: -- cgit v1.2.3 From 5f09e6709877d2782a1a96264c545ace7f22519b Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 20 Aug 2014 00:20:06 +0100 Subject: Made expandable_text take max_length as a parameter and set experience profile description max_length to 2048 for ACME-1583 --- indra/newview/llexpandabletextbox.cpp | 4 +++- indra/newview/llexpandabletextbox.h | 2 ++ indra/newview/skins/default/xui/en/floater_experienceprofile.xml | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index a50184460b..b8a3b73c5c 100755 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -116,7 +116,7 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p) mExpanderVisible(false) { setIsChrome(TRUE); - + setMaxTextLength(p.max_text_length); } void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -211,6 +211,7 @@ LLExpandableTextBox::Params::Params() : textbox("textbox"), scroll("scroll"), max_height("max_height", 0), + max_text_length("max_length", 255), bg_visible("bg_visible", false), expanded_bg_visible("expanded_bg_visible", true), bg_color("bg_color", LLColor4::black), @@ -236,6 +237,7 @@ LLExpandableTextBox::LLExpandableTextBox(const Params& p) LLTextBoxEx::Params textbox_params = p.textbox; textbox_params.rect(rc); + textbox_params.max_text_length = p.max_text_length; mTextBox = LLUICtrlFactory::create<LLTextBoxEx>(textbox_params); mScroll->addChild(mTextBox); diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index 399e48bea2..e4f82fbbb2 100755 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -103,6 +103,8 @@ public: Optional<LLScrollContainer::Params> scroll; Optional<S32> max_height; + + Optional<S32> max_text_length; Optional<bool> bg_visible, expanded_bg_visible; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index d146d1306f..a8e462ecb4 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -182,7 +182,8 @@ name="experience_description" top="0" value="" - width="293"/> + width="293" + max_length="2048"/> </layout_panel> <layout_panel follows="" -- cgit v1.2.3 From 5b82645ba2db049589cdc2f22c8c63794b949772 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 20 Aug 2014 00:33:23 +0100 Subject: Added tooltip to > button in script editor for ACME-1588 --- indra/newview/llpreviewscript.cpp | 1 + indra/newview/skins/default/xui/en/floater_live_lsleditor.xml | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'indra') diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index a4023112ea..6830998a8a 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1307,6 +1307,7 @@ void LLLiveLSLEditor::updateExperiencePanel() mExperienceEnabled->setEnabled(getIsModifiable()); mExperiences->setVisible(TRUE); mExperienceEnabled->set(TRUE); + getChild<LLButton>("view_profile")->setToolTip(getString("show_experience_profile")); buildExperienceList(); } } diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index 40b47dc1d7..e8826034f6 100755 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -37,6 +37,10 @@ name="add_experiences"> Select to add an experience </floater.string> + <floater.string + name="show_experience_profile"> + Click to view the experience profile + </floater.string> <floater.string name="loading"> Loading... -- cgit v1.2.3 From 55ed31173798a7d5a3b7cb42c6d6d552820c5e14 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 20 Aug 2014 00:46:49 +0100 Subject: Reverted change to expandable_text, to use pre-existing functionality to fix ACME-1583 --- indra/newview/llexpandabletextbox.cpp | 2 -- indra/newview/llexpandabletextbox.h | 2 -- indra/newview/skins/default/xui/en/floater_experienceprofile.xml | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) (limited to 'indra') diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index b8a3b73c5c..f2602c8c7d 100755 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -211,7 +211,6 @@ LLExpandableTextBox::Params::Params() : textbox("textbox"), scroll("scroll"), max_height("max_height", 0), - max_text_length("max_length", 255), bg_visible("bg_visible", false), expanded_bg_visible("expanded_bg_visible", true), bg_color("bg_color", LLColor4::black), @@ -237,7 +236,6 @@ LLExpandableTextBox::LLExpandableTextBox(const Params& p) LLTextBoxEx::Params textbox_params = p.textbox; textbox_params.rect(rc); - textbox_params.max_text_length = p.max_text_length; mTextBox = LLUICtrlFactory::create<LLTextBoxEx>(textbox_params); mScroll->addChild(mTextBox); diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index e4f82fbbb2..5dea35bb82 100755 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -104,8 +104,6 @@ public: Optional<S32> max_height; - Optional<S32> max_text_length; - Optional<bool> bg_visible, expanded_bg_visible; diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml index a8e462ecb4..2dfba1ac44 100644 --- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml +++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml @@ -183,7 +183,7 @@ top="0" value="" width="293" - max_length="2048"/> + textbox.max_length="2048"/> </layout_panel> <layout_panel follows="" -- cgit v1.2.3 From 89eac2548a9b66d8bab27a7e8d7d1ed2159e9515 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Wed, 20 Aug 2014 01:11:27 +0100 Subject: Made it possible to search for experiences with an empty search string, and show experiences with blank names as (untitled experience) for ACME-1585 --- indra/llui/llurlentry.cpp | 3 ++- indra/newview/llpanelexperiencepicker.cpp | 4 ++-- indra/newview/skins/default/xui/en/strings.xml | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 67da98b95a..be08d92c78 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1235,7 +1235,8 @@ std::string LLUrlEntryExperienceProfile::getLabel( const std::string &url, const const LLSD& experience_details = LLExperienceCache::get(experience_id); if(!experience_details.isUndefined()) { - return experience_details[LLExperienceCache::NAME].asString(); + std::string experience_name_string = experience_details[LLExperienceCache::NAME].asString(); + return experience_name_string.empty() ? LLTrans::getString("ExperienceNameUntitled") : experience_name_string; } addObserver(experience_id_string, url, cb); diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 0a572a8a5c..7592aaa9d0 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -108,7 +108,7 @@ BOOL LLPanelExperiencePicker::postBuild() getChild<LLLineEditor>(TEXT_EDIT)->setKeystrokeCallback( boost::bind(&LLPanelExperiencePicker::editKeystroke, this, _1, _2),NULL); childSetAction(BTN_FIND, boost::bind(&LLPanelExperiencePicker::onBtnFind, this)); - getChildView(BTN_FIND)->setEnabled(FALSE); + getChildView(BTN_FIND)->setEnabled(TRUE); LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS); searchresults->setDoubleClickCallback( boost::bind(&LLPanelExperiencePicker::onBtnSelect, this)); @@ -140,7 +140,7 @@ BOOL LLPanelExperiencePicker::postBuild() void LLPanelExperiencePicker::editKeystroke( class LLLineEditor* caller, void* user_data ) { - getChildView(BTN_FIND)->setEnabled(caller->getText().size() > 0); + getChildView(BTN_FIND)->setEnabled(caller->getText().size() >= 0); } void LLPanelExperiencePicker::onBtnFind() diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 72cebb1060..1bf1ee930c 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -4028,6 +4028,7 @@ Try enclosing path to the editor with double quotes. <!-- Experience Tools strings --> <string name="experience_tools_experience">Experience</string> <string name="ExperienceNameNull">(no experience)</string> + <string name="ExperienceNameUntitled">(untitled experience)</string> <string name="GRID_WIDE">Grid-wide</string> <string name="Allowed_Experiences_Tab">ALLOWED</string> <string name="Blocked_Experiences_Tab">BLOCKED</string> -- cgit v1.2.3 From da639d1c9817c7333b959638e9a33b6ae7c664c0 Mon Sep 17 00:00:00 2001 From: Cho <cho@lindenlab.com> Date: Thu, 21 Aug 2014 19:43:50 +0100 Subject: Show experiences with blank names as (untitled experience) in experience search, script editor, and allowed/trusted/blocked lists for ACME-1585 --- indra/newview/llpanelexperiencelisteditor.cpp | 8 +++++++- indra/newview/llpanelexperiencepicker.cpp | 9 ++++++++- indra/newview/llpreviewscript.cpp | 14 ++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 3561268063..69fc4f458f 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -208,8 +208,14 @@ void LLPanelExperienceListEditor::onExperienceDetails( const LLSD& experience ) LLScrollListItem* item = mItems->getItem(experience[LLExperienceCache::EXPERIENCE_ID]); if(!item) return; + + std::string experience_name_string = experience[LLExperienceCache::NAME].asString(); + if (experience_name_string.empty()) + { + experience_name_string = LLTrans::getString("ExperienceNameUntitled"); + } - item->getColumn(0)->setValue(experience[LLExperienceCache::NAME]); + item->getColumn(0)->setValue(experience_name_string); } LLPanelExperienceListEditor::~LLPanelExperienceListEditor() diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index 7592aaa9d0..b804899e63 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -41,6 +41,7 @@ #include "llcombobox.h" #include "llviewercontrol.h" #include "llfloater.h" +#include "lltrans.h" #define BTN_FIND "find" #define BTN_OK "ok_btn" @@ -321,6 +322,12 @@ void LLPanelExperiencePicker::filterContent() if(isExperienceHidden(experience)) continue; + std::string experience_name_string = experience[LLExperienceCache::NAME].asString(); + if (experience_name_string.empty()) + { + experience_name_string = LLTrans::getString("ExperienceNameUntitled"); + } + item["id"]=experience[LLExperienceCache::EXPERIENCE_ID]; LLSD& columns = item["columns"]; columns[0]["column"] = "maturity"; @@ -328,7 +335,7 @@ void LLPanelExperiencePicker::filterContent() columns[0]["type"]="icon"; columns[0]["halign"]="right"; columns[1]["column"] = "experience_name"; - columns[1]["value"] = columnSpace+experience[LLExperienceCache::NAME].asString(); + columns[1]["value"] = columnSpace+experience_name_string; columns[2]["column"] = "owner"; columns[2]["value"] = columnSpace+getString("loading"); search_results->addElement(item); diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index ffaffbe538..17727ef9a1 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1337,7 +1337,12 @@ void LLLiveLSLEditor::buildExperienceList() } else { - mExperiences->add(experience[LLExperienceCache::NAME].asString(), id, position); + std::string experience_name_string = experience[LLExperienceCache::NAME].asString(); + if (experience_name_string.empty()) + { + experience_name_string = LLTrans::getString("ExperienceNameUntitled"); + } + mExperiences->add(experience_name_string, id, position); } } @@ -1346,7 +1351,12 @@ void LLLiveLSLEditor::buildExperienceList() const LLSD& experience = LLExperienceCache::get(associated); if(experience.isDefined()) { - item=mExperiences->add(experience[LLExperienceCache::NAME].asString(), associated, ADD_TOP); + std::string experience_name_string = experience[LLExperienceCache::NAME].asString(); + if (experience_name_string.empty()) + { + experience_name_string = LLTrans::getString("ExperienceNameUntitled"); + } + item=mExperiences->add(experience_name_string, associated, ADD_TOP); } else { -- cgit v1.2.3 From e7645eb995c291ebbbd05bab796639306545d2ad Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 5 Sep 2014 10:58:39 -0700 Subject: Allow non-grid-wide experiences in the parcel block list to block estate allowed experiences. --- indra/newview/llfloaterland.cpp | 6 ++---- indra/newview/llpanelexperiencepicker.cpp | 5 +++++ indra/newview/llpanelexperiencepicker.h | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 4fda1ebb7d..bf6bf584d9 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2958,10 +2958,8 @@ BOOL LLPanelLandExperiences::postBuild() // only non-grid-wide experiences mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); - // only grid-wide experiences - mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID)); - // but not privileged ones - mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED)); + // no privileged ones + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperties, _1, LLExperienceCache::PROPERTY_PRIVILEGED|LLExperienceCache::PROPERTY_GRID)); getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(FALSE); getChild<LLTextBox>("experiences_help_text")->setVisible(FALSE); diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index b804899e63..e3fe3c3332 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -407,6 +407,11 @@ bool LLPanelExperiencePicker::FilterWithProperty( const LLSD& experience, S32 pr return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0; } +bool LLPanelExperiencePicker::FilterWithProperties( const LLSD& experience, S32 prop) +{ + return ! ((experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == prop); +} + bool LLPanelExperiencePicker::FilterWithoutProperty( const LLSD& experience, S32 prop ) { return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == 0; diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h index b2ba7f26ee..2a0731f34c 100644 --- a/indra/newview/llpanelexperiencepicker.h +++ b/indra/newview/llpanelexperiencepicker.h @@ -55,6 +55,7 @@ public: void setDefaultFilters(); static bool FilterWithProperty(const LLSD& experience, S32 prop); + static bool FilterWithProperties(const LLSD& experience, S32 prop); static bool FilterWithoutProperty(const LLSD& experience, S32 prop); static bool FilterMatching(const LLSD& experience, const LLUUID& id); bool FilterOverRating(const LLSD& experience); -- cgit v1.2.3 From 4e84aa4ecfe3351463ca9c54df4477528f65e41f Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 5 Sep 2014 15:14:21 -0700 Subject: Fixed reversed logic --- indra/newview/llfloaterland.cpp | 2 +- indra/newview/llpanelexperiencepicker.cpp | 4 ++-- indra/newview/llpanelexperiencepicker.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index bf6bf584d9..dc0747975b 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2959,7 +2959,7 @@ BOOL LLPanelLandExperiences::postBuild() mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID)); // no privileged ones - mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperties, _1, LLExperienceCache::PROPERTY_PRIVILEGED|LLExperienceCache::PROPERTY_GRID)); + mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperties, _1, LLExperienceCache::PROPERTY_PRIVILEGED|LLExperienceCache::PROPERTY_GRID)); getChild<LLLayoutPanel>("trusted_layout_panel")->setVisible(FALSE); getChild<LLTextBox>("experiences_help_text")->setVisible(FALSE); diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index e3fe3c3332..b7c0f3b1fb 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -407,9 +407,9 @@ bool LLPanelExperiencePicker::FilterWithProperty( const LLSD& experience, S32 pr return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0; } -bool LLPanelExperiencePicker::FilterWithProperties( const LLSD& experience, S32 prop) +bool LLPanelExperiencePicker::FilterWithoutProperties( const LLSD& experience, S32 prop) { - return ! ((experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == prop); + return ((experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == prop); } bool LLPanelExperiencePicker::FilterWithoutProperty( const LLSD& experience, S32 prop ) diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h index 2a0731f34c..e39ffed70b 100644 --- a/indra/newview/llpanelexperiencepicker.h +++ b/indra/newview/llpanelexperiencepicker.h @@ -55,7 +55,7 @@ public: void setDefaultFilters(); static bool FilterWithProperty(const LLSD& experience, S32 prop); - static bool FilterWithProperties(const LLSD& experience, S32 prop); + static bool FilterWithoutProperties(const LLSD& experience, S32 prop); static bool FilterWithoutProperty(const LLSD& experience, S32 prop); static bool FilterMatching(const LLSD& experience, const LLUUID& id); bool FilterOverRating(const LLSD& experience); -- cgit v1.2.3 From 5f4a6d151125ddafc8c608cd2329252c9107791d Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Fri, 10 Oct 2014 10:15:38 -0700 Subject: fixing merge again --- indra/newview/llfloaterland.cpp | 253 ++++++---------------------------------- indra/newview/llfloaterland.h | 79 +++++++++++++ 2 files changed, 113 insertions(+), 219 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 7081377097..295c8c2e62 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -113,6 +113,28 @@ public: } }; + +class LLPanelLandExperiences + : public LLPanel +{ +public: + LLPanelLandExperiences(LLSafeHandle<LLParcelSelection>& parcelp); + virtual BOOL postBuild(); + void refresh(); + + void experienceAdded(const LLUUID& id, U32 xp_type, U32 access_type); + void experienceRemoved(const LLUUID& id, U32 access_type); +protected: + LLPanelExperienceListEditor* setupList( const char* control_name, U32 xp_type, U32 access_type ); + void refreshPanel(LLPanelExperienceListEditor* panel, U32 xp_type); + + LLSafeHandle<LLParcelSelection>& mParcel; + + + LLPanelExperienceListEditor* mAllowed; + LLPanelExperienceListEditor* mBlocked; +}; + // inserts maturity info(icon and text) into target textbox // names_floater - pointer to floater which contains strings with maturity icons filenames // str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY] @@ -251,6 +273,7 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed) mFactoryMap["land_audio_panel"] = LLCallbackMap(createPanelLandAudio, this); mFactoryMap["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this); mFactoryMap["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this); + mFactoryMap["land_experiences_panel"] = LLCallbackMap(createPanelLandExperiences, this); sObserver = new LLParcelSelectionObserver(); LLViewerParcelMgr::getInstance()->addObserver( sObserver ); @@ -351,6 +374,15 @@ void* LLFloaterLand::createPanelLandAccess(void* data) return self->mPanelAccess; } +// static +void* LLFloaterLand::createPanelLandExperiences(void* data) +{ + LLFloaterLand* self = (LLFloaterLand*)data; + self->mPanelExperiences = new LLPanelLandExperiences(self->mParcel); + return self->mPanelExperiences; +} + + //--------------------------------------------------------------------------- // LLPanelLandGeneral //--------------------------------------------------------------------------- @@ -2406,7 +2438,7 @@ void LLPanelLandAccess::refresh() getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count)); getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST)); - for (access_map_const_iterator cit = parcel->mAccessList.begin(); + for (LLAccessEntry::map::const_iterator cit = parcel->mAccessList.begin(); cit != parcel->mAccessList.end(); ++cit) { const LLAccessEntry& entry = (*cit).second; @@ -2452,7 +2484,7 @@ void LLPanelLandAccess::refresh() getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count)); getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST)); - for (access_map_const_iterator cit = parcel->mBanList.begin(); + for (LLAccessEntry::map::const_iterator cit = parcel->mBanList.begin(); cit != parcel->mBanList.end(); ++cit) { const LLAccessEntry& entry = (*cit).second; @@ -3042,27 +3074,6 @@ void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_fl target_textbox->appendText(text_after_rating, false); } -class LLPanelLandExperiences - : public LLPanel -{ -public: - LLPanelLandExperiences(LLSafeHandle<LLParcelSelection>& parcelp); - virtual BOOL postBuild(); - void refresh(); - - void experienceAdded(const LLUUID& id, U32 xp_type, U32 access_type); - void experienceRemoved(const LLUUID& id, U32 access_type); -protected: - LLPanelExperienceListEditor* setupList( const char* control_name, U32 xp_type, U32 access_type ); - void refreshPanel(LLPanelExperienceListEditor* panel, U32 xp_type); - - LLSafeHandle<LLParcelSelection>& mParcel; - - - LLPanelExperienceListEditor* mAllowed; - LLPanelExperienceListEditor* mBlocked; -}; - LLPanelLandExperiences::LLPanelLandExperiences( LLSafeHandle<LLParcelSelection>& parcelp ) : mParcel(parcelp) { @@ -3162,199 +3173,3 @@ void LLPanelLandExperiences::refresh() refreshPanel(mAllowed, EXPERIENCE_KEY_TYPE_ALLOWED); refreshPanel(mBlocked, EXPERIENCE_KEY_TYPE_BLOCKED); } - -LLParcel* LLFloaterLand::getCurrentSelectedParcel() -{ - return mParcel->getParcel(); -}; - -//static -LLPanelLandObjects* LLFloaterLand::getCurrentPanelLandObjects() -{ - LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(land_instance) - { - return land_instance->mPanelObjects; - } - else - { - return NULL; - } -} - -//static -LLPanelLandCovenant* LLFloaterLand::getCurrentPanelLandCovenant() -{ - LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(land_instance) - { - return land_instance->mPanelCovenant; - } - else - { - return NULL; - } -} - -// static -void LLFloaterLand::refreshAll() -{ - LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(land_instance) - { - land_instance->refresh(); - } -} - -void LLFloaterLand::onOpen(const LLSD& key) -{ - // moved from triggering show instance in llviwermenu.cpp - - if (LLViewerParcelMgr::getInstance()->selectionEmpty()) - { - LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); - } - - // Done automatically when the selected parcel's properties arrive - // (and hence we have the local id). - // LLViewerParcelMgr::getInstance()->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER); - - mParcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection(); - - // Refresh even if not over a region so we don't get an - // uninitialized dialog. The dialog is 0-region aware. - refresh(); -} - -void LLFloaterLand::onVisibilityChanged(const LLSD& visible) -{ - if (!visible.asBoolean()) - { - // Might have been showing owned objects - LLSelectMgr::getInstance()->unhighlightAll(); - - // Save which panel we had open - sLastTab = mTabLand->getCurrentPanelIndex(); - } -} - - -LLFloaterLand::LLFloaterLand(const LLSD& seed) -: LLFloater(seed) -{ - mFactoryMap["land_general_panel"] = LLCallbackMap(createPanelLandGeneral, this); - mFactoryMap["land_covenant_panel"] = LLCallbackMap(createPanelLandCovenant, this); - mFactoryMap["land_objects_panel"] = LLCallbackMap(createPanelLandObjects, this); - mFactoryMap["land_options_panel"] = LLCallbackMap(createPanelLandOptions, this); - mFactoryMap["land_audio_panel"] = LLCallbackMap(createPanelLandAudio, this); - mFactoryMap["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this); - mFactoryMap["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this); - mFactoryMap["land_experiences_panel"] = LLCallbackMap(createPanelLandExperiences, this); - - sObserver = new LLParcelSelectionObserver(); - LLViewerParcelMgr::getInstance()->addObserver( sObserver ); -} - -BOOL LLFloaterLand::postBuild() -{ - setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChanged, this, _2)); - - LLTabContainer* tab = getChild<LLTabContainer>("landtab"); - - mTabLand = (LLTabContainer*) tab; - - if (tab) - { - tab->selectTab(sLastTab); - } - - return TRUE; -} - - -// virtual -LLFloaterLand::~LLFloaterLand() -{ - LLViewerParcelMgr::getInstance()->removeObserver( sObserver ); - delete sObserver; - sObserver = NULL; -} - -// public -void LLFloaterLand::refresh() -{ - mPanelGeneral->refresh(); - mPanelObjects->refresh(); - mPanelOptions->refresh(); - mPanelAudio->refresh(); - mPanelMedia->refresh(); - mPanelAccess->refresh(); - mPanelCovenant->refresh(); - mPanelExperiences->refresh(); -} - - - -void* LLFloaterLand::createPanelLandGeneral(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelGeneral = new LLPanelLandGeneral(self->mParcel); - return self->mPanelGeneral; -} - -// static -void* LLFloaterLand::createPanelLandCovenant(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelCovenant = new LLPanelLandCovenant(self->mParcel); - return self->mPanelCovenant; -} - - -// static -void* LLFloaterLand::createPanelLandObjects(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelObjects = new LLPanelLandObjects(self->mParcel); - return self->mPanelObjects; -} - -// static -void* LLFloaterLand::createPanelLandOptions(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelOptions = new LLPanelLandOptions(self->mParcel); - return self->mPanelOptions; -} - -// static -void* LLFloaterLand::createPanelLandAudio(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelAudio = new LLPanelLandAudio(self->mParcel); - return self->mPanelAudio; -} - -// static -void* LLFloaterLand::createPanelLandMedia(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelMedia = new LLPanelLandMedia(self->mParcel); - return self->mPanelMedia; -} - -// static -void* LLFloaterLand::createPanelLandAccess(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelAccess = new LLPanelLandAccess(self->mParcel); - return self->mPanelAccess; -} - -// static -void* LLFloaterLand::createPanelLandExperiences(void* data) -{ - LLFloaterLand* self = (LLFloaterLand*)data; - self->mPanelExperiences = new LLPanelLandExperiences(self->mParcel); - return self->mPanelExperiences; -} diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index ae9eecd374..8e8b61c333 100755 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -309,6 +309,85 @@ protected: LLSafeHandle<LLParcelSelection>& mParcel; }; + +class LLPanelLandOptions +: public LLPanel +{ +public: + LLPanelLandOptions(LLSafeHandle<LLParcelSelection>& parcelp); + virtual ~LLPanelLandOptions(); + /*virtual*/ BOOL postBuild(); + /*virtual*/ void draw(); + /*virtual*/ void refresh(); + +private: + // Refresh the "show in search" checkbox and category selector. + void refreshSearch(); + + static void onCommitAny(LLUICtrl* ctrl, void *userdata); + static void onClickSet(void* userdata); + static void onClickClear(void* userdata); + +private: + LLCheckBoxCtrl* mCheckEditObjects; + LLCheckBoxCtrl* mCheckEditGroupObjects; + LLCheckBoxCtrl* mCheckAllObjectEntry; + LLCheckBoxCtrl* mCheckGroupObjectEntry; + LLCheckBoxCtrl* mCheckSafe; + LLCheckBoxCtrl* mCheckFly; + LLCheckBoxCtrl* mCheckGroupScripts; + LLCheckBoxCtrl* mCheckOtherScripts; + + LLCheckBoxCtrl* mCheckShowDirectory; + LLComboBox* mCategoryCombo; + LLComboBox* mLandingTypeCombo; + + LLTextureCtrl* mSnapshotCtrl; + + LLTextBox* mLocationText; + LLButton* mSetBtn; + LLButton* mClearBtn; + + LLCheckBoxCtrl *mMatureCtrl; + LLCheckBoxCtrl *mPushRestrictionCtrl; + LLCheckBoxCtrl *mSeeAvatarsCtrl; + + LLSafeHandle<LLParcelSelection>& mParcel; +}; + + +class LLPanelLandAccess +: public LLPanel +{ +public: + LLPanelLandAccess(LLSafeHandle<LLParcelSelection>& parcelp); + virtual ~LLPanelLandAccess(); + void refresh(); + void refresh_ui(); + void refreshNames(); + virtual void draw(); + + static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata); + static void onCommitAny(LLUICtrl* ctrl, void *userdata); + static void onCommitGroupCheck(LLUICtrl* ctrl, void *userdata); + static void onClickRemoveAccess(void*); + static void onClickRemoveBanned(void*); + + virtual BOOL postBuild(); + + void onClickAddAccess(); + void onClickAddBanned(); + void callbackAvatarCBBanned(const uuid_vec_t& ids); + void callbackAvatarCBAccess(const uuid_vec_t& ids); + +protected: + LLNameListCtrl* mListAccess; + LLNameListCtrl* mListBanned; + + LLSafeHandle<LLParcelSelection>& mParcel; +}; + + class LLPanelLandCovenant : public LLPanel { -- cgit v1.2.3 From ab146c0a3fa5e3f594a14659f96f7d679b528bc9 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 21 Oct 2014 10:39:02 -0700 Subject: Check purchase info after receiving experience ownership list. --- indra/newview/llfloaterexperiences.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index ac79c9ab43..d973fe5b33 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -224,7 +224,9 @@ void LLFloaterExperiences::refreshContents() if(!lookup_url.empty()) { nameMap["experience_ids"]="Owned_Experiences_Tab"; - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + LLExperienceListResponder* responder = new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap, "ExperienceAcquireFailed"); + responder->mCallback = boost::bind(&LLFloaterExperiences::checkPurchaseInfo, this, _1, _2); + LLHTTPClient::get(lookup_url, responder); } } } -- cgit v1.2.3 From 8cc8e7dc77c7aff6d4698632d6a3bebe76698ff7 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Tue, 28 Oct 2014 11:43:45 -0700 Subject: ACME-1601: Updated message to match behavior ACME-1616: Change references of "Grid-Wide" to "Grid-Scope" and "non Grid-Wide" to "Land-Scope" --- indra/newview/llfloaterexperienceprofile.cpp | 14 ++++++++++---- indra/newview/llviewermessage.cpp | 4 ++-- indra/newview/skins/default/xui/en/notifications.xml | 2 +- .../skins/default/xui/en/panel_region_experiences.xml | 8 ++++---- indra/newview/skins/default/xui/en/strings.xml | 3 ++- 5 files changed, 19 insertions(+), 12 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 4ee31f5df1..197162487d 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -520,13 +520,19 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience ) enable = getChild<LLCheckBoxCtrl>(EDIT BTN_PRIVATE); enable->set(properties & LLExperienceCache::PROPERTY_PRIVATE); + + topPanel->setVisible(TRUE); + child=getChild<LLTextBox>(TF_GRID_WIDE); + child->setVisible(TRUE); + if(properties & LLExperienceCache::PROPERTY_GRID) { - topPanel->setVisible(TRUE); - child=getChild<LLTextBox>(TF_GRID_WIDE); - child->setVisible(TRUE); - child->setText(LLTrans::getString("GRID_WIDE")); + child->setText(LLTrans::getString("Grid-Scope")); } + else + { + child->setText(LLTrans::getString("Land-Scope")); + } if(getChild<LLButton>(BTN_EDIT)->getVisible()) { diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index a0b7e78369..d99d2b2990 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6491,11 +6491,11 @@ void process_script_experience_details(const LLSD& experience_details, LLSD args { if(experience_details[LLExperienceCache::PROPERTIES].asInteger() & LLExperienceCache::PROPERTY_GRID) { - args["GRID_WIDE"] = LLTrans::getString("GRID_WIDE")+ " "; + args["GRID_WIDE"] = LLTrans::getString("Grid-Scope"); } else { - args["GRID_WIDE"] = ""; + args["GRID_WIDE"] = LLTrans::getString("Land-Scope"); } args["EXPERIENCE"] = LLSLURL("experience", experience_details[LLExperienceCache::EXPERIENCE_ID].asUUID(), "profile").getSLURLString(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 8f208b979f..8960fad02b 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7326,7 +7326,7 @@ You do not have access to this destination. You may be allowed into the region b name="ScriptQuestionExperience" persist="false" type="notify"> -'<nolink>[OBJECTNAME]</nolink>', an object owned by '[NAME]', requests your participation in the [GRID_WIDE]experience: +'<nolink>[OBJECTNAME]</nolink>', an object owned by '[NAME]', requests your participation in the [GRID_WIDE] experience: [EXPERIENCE] 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 ea57bdd164..9d06ce6b0c 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -20,13 +20,13 @@ Additionally, if the estate does not allow public access, Residents participatin </panel.string> <panel.string name="allowed_estate_text"> -Only Experiences that are not Grid-Wide may be Allowed. +Only Experiences that are Land-Scope may be Allowed. Allowed Experiences have permission to run on this estate. </panel.string> <panel.string name="blocked_estate_text"> -Only Grid-Wide Experiences may be Blocked. +Only Grid-Scope Experiences may be Blocked. Blocked Experiences may not run on this estate. </panel.string> @@ -35,12 +35,12 @@ Blocked Experiences may not run on this estate. Changes to settings on this tab will affect all regions in the estate. </panel.string> <panel.string - name="allowed_parcel_text">Only Experiences that are not Grid-Wide may be Allowed. + name="allowed_parcel_text">Only Experiences that are Land-Scope may be Allowed. Allowed Experiences have permission to run on this parcel if they are not Blocked by the estate. </panel.string> <panel.string - name="blocked_parcel_text">Only Grid-Wide Experiences may be Blocked. + name="blocked_parcel_text">Any Resident Experience may be Blocked. Blocked Experiences may not run on this parcel. </panel.string> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index fbf696933b..65c95e9486 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -4031,7 +4031,8 @@ Try enclosing path to the editor with double quotes. <string name="experience_tools_experience">Experience</string> <string name="ExperienceNameNull">(no experience)</string> <string name="ExperienceNameUntitled">(untitled experience)</string> - <string name="GRID_WIDE">Grid-wide</string> + <string name="Land-Scope">Land-Scope</string> + <string name="Grid-Scope">Grid-Scope</string> <string name="Allowed_Experiences_Tab">ALLOWED</string> <string name="Blocked_Experiences_Tab">BLOCKED</string> <string name="Contrib_Experiences_Tab">CONTRIBUTOR</string> -- cgit v1.2.3 From c2a516aee1f8c1e26124a77f62962944137ef960 Mon Sep 17 00:00:00 2001 From: dolphin <dolphin@lindenlab.com> Date: Thu, 6 Nov 2014 16:25:17 -0800 Subject: ACME-1635: Trusted Experiences now referred to as Key Experiences. --- indra/llui/llurlentry.cpp | 7 ++++++- indra/newview/skins/default/xui/en/notifications.xml | 2 ++ .../newview/skins/default/xui/en/panel_experience_list_editor.xml | 2 +- indra/newview/skins/default/xui/en/panel_region_experiences.xml | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) (limited to 'indra') diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index be08d92c78..1389ec4bb2 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1247,7 +1247,12 @@ std::string LLUrlEntryExperienceProfile::getLabel( const std::string &url, const void LLUrlEntryExperienceProfile::onExperienceDetails( const LLSD& experience_details ) { - callObservers(experience_details[LLExperienceCache::EXPERIENCE_ID].asString(), experience_details[LLExperienceCache::NAME].asString(), LLStringUtil::null); + std::string name = experience_details[LLExperienceCache::NAME].asString(); + if(name.empty()) + { + name = LLTrans::getString("ExperienceNameUntitled"); + } + callObservers(experience_details[LLExperienceCache::EXPERIENCE_ID].asString(), name, LLStringUtil::null); } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 8960fad02b..fa5c1cda4a 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7298,6 +7298,8 @@ Unable to acquire a new experience: You do not have access to this destination. You may be allowed into the region by Accepting an experience below: [EXPERIENCE_LIST] + +Other Key Experiences may be available. </notification> diff --git a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml index 128c721992..e6b88ae534 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml @@ -23,7 +23,7 @@ </panel.string> <panel.string name="panel_trusted"> - Trusted Experiences: + Key Experiences: </panel.string> <panel.string name="no_results"> 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 9d06ce6b0c..d909731809 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -12,11 +12,11 @@ width="480"> <panel.string name="trusted_estate_text"> -Any Experience may be Trusted. +Any Experience may be Key. -Trusted Experiences have permission to run on this estate. +Key Experiences have permission to run on this estate. -Additionally, if the estate does not allow public access, Residents participating in any Trusted Experience may enter the estate and can remain as long as they are in the Experience. +Additionally, if the estate does not allow public access, Residents participating in any Key Experience may enter the estate and can remain as long as they are in a Key Experience. </panel.string> <panel.string name="allowed_estate_text"> -- cgit v1.2.3 From dbbf9ccd32f8655e3873bee0db14be7ec91f619d Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine <mnikolenko@productengine.com> Date: Fri, 7 Nov 2014 18:22:27 +0200 Subject: ACME-1598 FIXED Problems with scroll bar in experiences tab --- indra/newview/skins/default/xui/en/panel_region_experiences.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra') 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 d909731809..d49fb613a4 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -89,7 +89,7 @@ Blocked Experiences may not run on this parcel. </text> </layout_panel> <layout_panel - height="50" + height="110" min_height="50" follows="all" width="530"> @@ -111,7 +111,7 @@ Blocked Experiences may not run on this parcel. </text> </layout_panel> <layout_panel - height="50" + height="110" min_height="50" follows="all" width="530"> -- cgit v1.2.3 From e574bf4889b94d12abdf7078bebab39ddcda103c Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine <mnikolenko@productengine.com> Date: Tue, 11 Nov 2014 12:00:52 +0200 Subject: ACME-1597 FIXED Reselect first item in the list and refresh buttons after removing --- indra/newview/llpanelexperiencelisteditor.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 69fc4f458f..fc4ee9862e 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -130,6 +130,8 @@ void LLPanelExperienceListEditor::onRemove() mRemovedCallback((*it)->getValue()); } } + mItems->selectFirstItem(); + checkButtonsEnabled(); //onItems(); } -- cgit v1.2.3 From a5fab3d8e28dcc04e19e1efb7c50e4cf5b5fd9b6 Mon Sep 17 00:00:00 2001 From: simon <none@none> Date: Thu, 13 Nov 2014 18:16:53 -0800 Subject: ACME-1636 - [Viewer]parcel experiences lists are not cleared when the parcel is deselected --- indra/newview/llfloaterland.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra') diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 295c8c2e62..4731385d41 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -314,6 +314,7 @@ void LLFloaterLand::refresh() mPanelMedia->refresh(); mPanelAccess->refresh(); mPanelCovenant->refresh(); + mPanelExperiences->refresh(); } -- cgit v1.2.3 From 48981156c888a755f6a370552018d4d7d564560e Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine <mnikolenko@productengine.com> Date: Thu, 20 Nov 2014 12:04:56 +0200 Subject: ACME-1637 FIXED Key Experiences field too short in Estate Experiences floater --- indra/newview/skins/default/xui/en/panel_region_experiences.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') 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 d49fb613a4..9581f53ed8 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -66,7 +66,7 @@ Blocked Experiences may not run on this parcel. orientation="vertical"> <layout_panel follows="all" - height="50" + height="110" min_height="50" width="530" visible="false" -- cgit v1.2.3 From f3288e268529d897f1a65443042c7d828b9e1090 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine <mnikolenko@productengine.com> Date: Fri, 21 Nov 2014 12:40:30 +0200 Subject: ACME-1620 FIXED Newly acquired experience does not always show in Experience floater after being created --- indra/newview/llfloaterexperiences.cpp | 39 ++++++++++++++++++++++------------ indra/newview/llfloaterexperiences.h | 2 ++ 2 files changed, 28 insertions(+), 13 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterexperiences.cpp b/indra/newview/llfloaterexperiences.cpp index d973fe5b33..777dc382cd 100644 --- a/indra/newview/llfloaterexperiences.cpp +++ b/indra/newview/llfloaterexperiences.cpp @@ -26,6 +26,7 @@ #include "llviewerprecompiledheaders.h" #include "llfloaterexperiences.h" +#include "llfloaterreg.h" #include "llagent.h" #include "llevents.h" @@ -206,19 +207,8 @@ void LLFloaterExperiences::refreshContents() LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); } - lookup_url = region->getCapability("GetAdminExperiences"); - if(!lookup_url.empty()) - { - nameMap["experience_ids"]="Admin_Experiences_Tab"; - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); - } - - lookup_url = region->getCapability("GetCreatorExperiences"); - if(!lookup_url.empty()) - { - nameMap["experience_ids"]="Contrib_Experiences_Tab"; - LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); - } + updateInfo("GetAdminExperiences","Admin_Experiences_Tab"); + updateInfo("GetCreatorExperiences","Contrib_Experiences_Tab"); lookup_url = region->getCapability("AgentExperiences"); if(!lookup_url.empty()) @@ -308,6 +298,24 @@ void LLFloaterExperiences::onClose( bool app_quitting ) void LLFloaterExperiences::checkPurchaseInfo(LLPanelExperiences* panel, const LLSD& content) const { panel->enableButton(content.has("purchase")); + + LLFloaterExperiences::findInstance()->updateInfo("GetAdminExperiences","Admin_Experiences_Tab"); + LLFloaterExperiences::findInstance()->updateInfo("GetCreatorExperiences","Contrib_Experiences_Tab"); +} + +void LLFloaterExperiences::updateInfo(std::string experiences, std::string tab) +{ + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + LLExperienceListResponder::NameMap nameMap; + std::string lookup_url = region->getCapability(experiences); + if(!lookup_url.empty()) + { + nameMap["experience_ids"]=tab; + LLHTTPClient::get(lookup_url, new LLExperienceListResponder(getDerivedHandle<LLFloaterExperiences>(), nameMap)); + } + } } void LLFloaterExperiences::sendPurchaseRequest() const @@ -325,3 +333,8 @@ void LLFloaterExperiences::sendPurchaseRequest() const LLHTTPClient::post(url, content, responder); } } + +LLFloaterExperiences* LLFloaterExperiences::findInstance() +{ + return LLFloaterReg::findTypedInstance<LLFloaterExperiences>("experiences"); +} diff --git a/indra/newview/llfloaterexperiences.h b/indra/newview/llfloaterexperiences.h index f1a0f49245..769283ff07 100644 --- a/indra/newview/llfloaterexperiences.h +++ b/indra/newview/llfloaterexperiences.h @@ -39,6 +39,7 @@ public: virtual void onClose(bool app_quitting); virtual void onOpen(const LLSD& key); + static LLFloaterExperiences* findInstance(); protected: void clearFromRecent(const LLSD& ids); void resizeToTabs(); @@ -50,6 +51,7 @@ protected: bool updatePermissions(const LLSD& permission); void sendPurchaseRequest() const; void checkPurchaseInfo(LLPanelExperiences* panel, const LLSD& content)const; + void updateInfo(std::string experiences, std::string tab); private: -- cgit v1.2.3 From d10013a59067a0409ed9751b7405c9e32db1ee60 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine <mnikolenko@productengine.com> Date: Fri, 21 Nov 2014 13:46:37 +0200 Subject: ACME-1637 FIXED Updated panels height --- indra/newview/skins/default/xui/en/panel_experience_list_editor.xml | 2 +- indra/newview/skins/default/xui/en/panel_region_experiences.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml index e6b88ae534..c76b958eda 100644 --- a/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml +++ b/indra/newview/skins/default/xui/en/panel_experience_list_editor.xml @@ -51,7 +51,7 @@ draw_heading="false" left="3" width="225" - height="77" + height="75" follows="all" name="experience_list"> <columns 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 9581f53ed8..bced46f7dc 100644 --- a/indra/newview/skins/default/xui/en/panel_region_experiences.xml +++ b/indra/newview/skins/default/xui/en/panel_region_experiences.xml @@ -66,7 +66,7 @@ Blocked Experiences may not run on this parcel. orientation="vertical"> <layout_panel follows="all" - height="110" + height="93" min_height="50" width="530" visible="false" @@ -89,7 +89,7 @@ Blocked Experiences may not run on this parcel. </text> </layout_panel> <layout_panel - height="110" + height="93" min_height="50" follows="all" width="530"> @@ -111,7 +111,7 @@ Blocked Experiences may not run on this parcel. </text> </layout_panel> <layout_panel - height="110" + height="93" min_height="50" follows="all" width="530"> -- cgit v1.2.3 From f25c3b32ddfb13e34e54ac94b28c1251ed1d7a3d Mon Sep 17 00:00:00 2001 From: maksymsproductengine <maksymsproductengine@lindenlab.com> Date: Fri, 21 Nov 2014 19:36:18 +0200 Subject: ACME-1639 FIXED A few references to "Trusted Experiences" need to be changed to Key experiences --- indra/newview/skins/default/xui/en/notifications.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index fa5c1cda4a..61385e9805 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4509,7 +4509,7 @@ Remove estate manager for this estate only or for [ALL_ESTATES]? label="Select estate" name="EstateTrustedExperienceAdd" type="alert"> - Add to trusted list for this estate only or for [ALL_ESTATES]? + Add to key list for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate canceltext="Cancel" @@ -4523,7 +4523,7 @@ Remove estate manager for this estate only or for [ALL_ESTATES]? label="Select estate" name="EstateTrustedExperienceRemove" type="alert"> - Remove from trusted list for this estate only or for [ALL_ESTATES]? + Remove from key list for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate canceltext="Cancel" @@ -7283,7 +7283,7 @@ Unable to acquire a new experience: name="TrustedExperienceEntry" persist="false" type="notify"> - You have been allowed into the region [region_name] by participating in the trusted experience secondlife:///app/experience/[public_id]/profile removing this experience may kick you from the region. + You have been allowed into the region [region_name] by participating in the key experience secondlife:///app/experience/[public_id]/profile removing this experience may kick you from the region. <form name="form"> <ignore name="ignore" text="Allowed into a region by an experience"/> -- cgit v1.2.3 From 0c959fd99216c48378b8e8259d1adb358d0201b1 Mon Sep 17 00:00:00 2001 From: eli <none@none> Date: Wed, 26 Nov 2014 18:34:56 -0800 Subject: FIX INTL-159 project Viewer translation for experience tools in 9 languages --- .../skins/default/xui/de/floater_about_land.xml | 26 +---- .../default/xui/de/floater_experience_search.xml | 2 + .../default/xui/de/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/de/floater_experiences.xml | 2 + .../skins/default/xui/de/floater_facebook.xml | 29 +++--- .../xui/de/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/de/floater_lagmeter.xml | 24 ++--- .../default/xui/de/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/de/floater_openobject.xml | 2 +- .../skins/default/xui/de/floater_report_abuse.xml | 2 +- .../skins/default/xui/de/floater_snapshot.xml | 14 +-- .../skins/default/xui/de/floater_top_objects.xml | 8 +- .../skins/default/xui/de/floater_twitter.xml | 24 ++--- .../default/xui/de/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/de/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/de/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/de/mime_types.xml | 13 ++- .../skins/default/xui/de/mime_types_linux.xml | 8 ++ .../skins/default/xui/de/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/de/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/de/panel_experience_info.xml | 46 +++++++++ .../xui/de/panel_experience_list_editor.xml | 27 +++++ .../default/xui/de/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/de/panel_experience_log.xml | 24 +++++ .../default/xui/de/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/de/panel_experiences.xml | 6 ++ .../default/xui/de/panel_facebook_friends.xml | 2 +- .../skins/default/xui/de/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/de/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/de/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/de/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/de/panel_group_info_sidetray.xml | 1 + .../default/xui/de/panel_postcard_settings.xml | 2 +- .../default/xui/de/panel_preferences_setup.xml | 6 +- .../default/xui/de/panel_region_experiences.xml | 33 +++++++ .../default/xui/de/panel_script_experience.xml | 13 +++ .../default/xui/de/panel_snapshot_inventory.xml | 8 +- .../skins/default/xui/de/panel_snapshot_local.xml | 10 +- .../default/xui/de/panel_snapshot_options.xml | 18 ++-- .../default/xui/de/panel_snapshot_postcard.xml | 8 +- .../default/xui/de/panel_snapshot_profile.xml | 10 +- .../skins/default/xui/de/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/de/role_actions.xml | 4 + .../skins/default/xui/de/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/de/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/de/teleport_strings.xml | 3 + .../skins/default/xui/es/floater_about_land.xml | 26 +---- .../default/xui/es/floater_experience_search.xml | 2 + .../default/xui/es/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/es/floater_experiences.xml | 2 + .../skins/default/xui/es/floater_facebook.xml | 29 +++--- .../xui/es/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/es/floater_lagmeter.xml | 50 +++++----- .../default/xui/es/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/es/floater_openobject.xml | 4 +- .../skins/default/xui/es/floater_report_abuse.xml | 2 +- .../skins/default/xui/es/floater_snapshot.xml | 17 ++-- .../skins/default/xui/es/floater_top_objects.xml | 8 +- .../skins/default/xui/es/floater_twitter.xml | 24 ++--- .../default/xui/es/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/es/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/es/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/es/mime_types.xml | 2 +- .../skins/default/xui/es/mime_types_linux.xml | 8 ++ .../skins/default/xui/es/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/es/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/es/panel_experience_info.xml | 46 +++++++++ .../xui/es/panel_experience_list_editor.xml | 27 +++++ .../default/xui/es/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/es/panel_experience_log.xml | 24 +++++ .../default/xui/es/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/es/panel_experiences.xml | 6 ++ .../default/xui/es/panel_facebook_friends.xml | 2 +- .../skins/default/xui/es/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/es/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/es/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/es/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/es/panel_group_info_sidetray.xml | 1 + .../default/xui/es/panel_postcard_settings.xml | 16 +-- .../default/xui/es/panel_preferences_setup.xml | 6 +- .../default/xui/es/panel_region_experiences.xml | 33 +++++++ .../default/xui/es/panel_script_experience.xml | 13 +++ .../default/xui/es/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/es/panel_snapshot_local.xml | 31 +++--- .../default/xui/es/panel_snapshot_options.xml | 20 ++-- .../default/xui/es/panel_snapshot_postcard.xml | 10 +- .../default/xui/es/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/es/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/es/role_actions.xml | 4 + .../skins/default/xui/es/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/es/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/es/teleport_strings.xml | 3 + .../skins/default/xui/fr/floater_about_land.xml | 26 +---- .../default/xui/fr/floater_experience_search.xml | 2 + .../default/xui/fr/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/fr/floater_experiences.xml | 2 + .../skins/default/xui/fr/floater_facebook.xml | 29 +++--- .../xui/fr/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/fr/floater_lagmeter.xml | 38 +++---- .../default/xui/fr/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/fr/floater_openobject.xml | 4 +- .../skins/default/xui/fr/floater_report_abuse.xml | 2 +- .../skins/default/xui/fr/floater_snapshot.xml | 17 ++-- .../skins/default/xui/fr/floater_top_objects.xml | 8 +- .../skins/default/xui/fr/floater_twitter.xml | 24 ++--- .../default/xui/fr/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/fr/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/fr/menu_viewer.xml | 3 +- .../skins/default/xui/fr/mime_types_linux.xml | 8 ++ .../skins/default/xui/fr/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/fr/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/fr/panel_experience_info.xml | 46 +++++++++ .../xui/fr/panel_experience_list_editor.xml | 27 +++++ .../default/xui/fr/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/fr/panel_experience_log.xml | 24 +++++ .../default/xui/fr/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/fr/panel_experiences.xml | 6 ++ .../default/xui/fr/panel_facebook_friends.xml | 2 +- .../skins/default/xui/fr/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/fr/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/fr/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/fr/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/fr/panel_group_info_sidetray.xml | 1 + .../default/xui/fr/panel_postcard_settings.xml | 16 +-- .../default/xui/fr/panel_preferences_setup.xml | 6 +- .../default/xui/fr/panel_region_experiences.xml | 33 +++++++ .../default/xui/fr/panel_script_experience.xml | 13 +++ .../default/xui/fr/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/fr/panel_snapshot_local.xml | 31 +++--- .../default/xui/fr/panel_snapshot_options.xml | 18 ++-- .../default/xui/fr/panel_snapshot_postcard.xml | 8 +- .../default/xui/fr/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/fr/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/fr/role_actions.xml | 4 + .../skins/default/xui/fr/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/fr/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/fr/teleport_strings.xml | 3 + .../skins/default/xui/it/floater_about_land.xml | 26 +---- .../default/xui/it/floater_experience_search.xml | 2 + .../default/xui/it/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/it/floater_experiences.xml | 2 + .../skins/default/xui/it/floater_facebook.xml | 29 +++--- .../xui/it/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/it/floater_lagmeter.xml | 52 +++++----- .../default/xui/it/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/it/floater_openobject.xml | 4 +- .../skins/default/xui/it/floater_report_abuse.xml | 2 +- .../skins/default/xui/it/floater_snapshot.xml | 17 ++-- .../newview/skins/default/xui/it/floater_stats.xml | 2 +- .../skins/default/xui/it/floater_top_objects.xml | 8 +- .../skins/default/xui/it/floater_twitter.xml | 24 ++--- .../default/xui/it/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/it/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/it/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/it/mime_types.xml | 4 +- .../skins/default/xui/it/mime_types_linux.xml | 8 ++ .../skins/default/xui/it/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/it/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/it/panel_experience_info.xml | 46 +++++++++ .../xui/it/panel_experience_list_editor.xml | 27 +++++ .../default/xui/it/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/it/panel_experience_log.xml | 24 +++++ .../default/xui/it/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/it/panel_experiences.xml | 6 ++ .../default/xui/it/panel_facebook_friends.xml | 2 +- .../skins/default/xui/it/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/it/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/it/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/it/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/it/panel_group_info_sidetray.xml | 1 + .../default/xui/it/panel_postcard_settings.xml | 16 +-- .../default/xui/it/panel_preferences_setup.xml | 6 +- .../default/xui/it/panel_region_experiences.xml | 33 +++++++ .../default/xui/it/panel_script_experience.xml | 13 +++ .../default/xui/it/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/it/panel_snapshot_local.xml | 31 +++--- .../default/xui/it/panel_snapshot_options.xml | 18 ++-- .../default/xui/it/panel_snapshot_postcard.xml | 8 +- .../default/xui/it/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/it/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/it/role_actions.xml | 4 + .../skins/default/xui/it/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/it/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/it/teleport_strings.xml | 3 + .../skins/default/xui/ja/floater_about_land.xml | 26 +---- .../default/xui/ja/floater_experience_search.xml | 2 + .../default/xui/ja/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/ja/floater_experiences.xml | 2 + .../skins/default/xui/ja/floater_facebook.xml | 29 +++--- .../xui/ja/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/ja/floater_lagmeter.xml | 60 +++++------ .../default/xui/ja/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/ja/floater_openobject.xml | 4 +- .../skins/default/xui/ja/floater_report_abuse.xml | 2 +- .../skins/default/xui/ja/floater_snapshot.xml | 17 ++-- .../skins/default/xui/ja/floater_top_objects.xml | 8 +- .../skins/default/xui/ja/floater_twitter.xml | 24 ++--- .../default/xui/ja/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/ja/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/ja/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/ja/mime_types.xml | 4 +- .../skins/default/xui/ja/mime_types_linux.xml | 8 ++ .../skins/default/xui/ja/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/ja/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/ja/panel_experience_info.xml | 46 +++++++++ .../xui/ja/panel_experience_list_editor.xml | 27 +++++ .../default/xui/ja/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/ja/panel_experience_log.xml | 24 +++++ .../default/xui/ja/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/ja/panel_experiences.xml | 6 ++ .../default/xui/ja/panel_facebook_friends.xml | 2 +- .../skins/default/xui/ja/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/ja/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/ja/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/ja/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/ja/panel_group_info_sidetray.xml | 1 + .../default/xui/ja/panel_postcard_settings.xml | 16 +-- .../default/xui/ja/panel_preferences_setup.xml | 7 +- .../default/xui/ja/panel_region_experiences.xml | 33 +++++++ .../default/xui/ja/panel_script_experience.xml | 13 +++ .../default/xui/ja/panel_snapshot_inventory.xml | 8 +- .../skins/default/xui/ja/panel_snapshot_local.xml | 31 +++--- .../default/xui/ja/panel_snapshot_options.xml | 20 ++-- .../default/xui/ja/panel_snapshot_postcard.xml | 10 +- .../default/xui/ja/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/ja/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/ja/role_actions.xml | 4 + .../skins/default/xui/ja/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/ja/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/ja/teleport_strings.xml | 3 + .../skins/default/xui/pt/floater_about_land.xml | 26 +---- .../default/xui/pt/floater_experience_search.xml | 2 + .../default/xui/pt/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/pt/floater_experiences.xml | 2 + .../skins/default/xui/pt/floater_facebook.xml | 29 +++--- .../xui/pt/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/pt/floater_lagmeter.xml | 52 +++++----- .../default/xui/pt/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/pt/floater_openobject.xml | 4 +- .../skins/default/xui/pt/floater_report_abuse.xml | 2 +- .../skins/default/xui/pt/floater_snapshot.xml | 17 ++-- .../skins/default/xui/pt/floater_top_objects.xml | 8 +- .../skins/default/xui/pt/floater_twitter.xml | 24 ++--- .../default/xui/pt/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/pt/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/pt/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/pt/mime_types.xml | 6 +- .../skins/default/xui/pt/mime_types_linux.xml | 8 ++ .../skins/default/xui/pt/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/pt/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/pt/panel_experience_info.xml | 46 +++++++++ .../xui/pt/panel_experience_list_editor.xml | 27 +++++ .../default/xui/pt/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/pt/panel_experience_log.xml | 24 +++++ .../default/xui/pt/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/pt/panel_experiences.xml | 6 ++ .../default/xui/pt/panel_facebook_friends.xml | 2 +- .../skins/default/xui/pt/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/pt/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/pt/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/pt/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/pt/panel_group_info_sidetray.xml | 1 + .../default/xui/pt/panel_postcard_settings.xml | 16 +-- .../default/xui/pt/panel_preferences_setup.xml | 6 +- .../default/xui/pt/panel_region_experiences.xml | 33 +++++++ .../default/xui/pt/panel_script_experience.xml | 13 +++ .../default/xui/pt/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/pt/panel_snapshot_local.xml | 31 +++--- .../default/xui/pt/panel_snapshot_options.xml | 20 ++-- .../default/xui/pt/panel_snapshot_postcard.xml | 10 +- .../default/xui/pt/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/pt/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/pt/role_actions.xml | 4 + .../skins/default/xui/pt/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/pt/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/pt/teleport_strings.xml | 3 + .../skins/default/xui/ru/floater_about_land.xml | 17 +--- .../default/xui/ru/floater_experience_search.xml | 2 + .../default/xui/ru/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/ru/floater_experiences.xml | 2 + .../skins/default/xui/ru/floater_facebook.xml | 29 +++--- .../xui/ru/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/ru/floater_lagmeter.xml | 12 +-- .../default/xui/ru/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/ru/floater_openobject.xml | 2 +- .../skins/default/xui/ru/floater_report_abuse.xml | 2 +- .../skins/default/xui/ru/floater_snapshot.xml | 17 ++-- .../skins/default/xui/ru/floater_top_objects.xml | 8 +- .../skins/default/xui/ru/floater_twitter.xml | 24 ++--- .../default/xui/ru/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/ru/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/ru/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/ru/mime_types.xml | 8 ++ .../skins/default/xui/ru/mime_types_linux.xml | 8 ++ .../skins/default/xui/ru/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/ru/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/ru/panel_experience_info.xml | 46 +++++++++ .../xui/ru/panel_experience_list_editor.xml | 27 +++++ .../default/xui/ru/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/ru/panel_experience_log.xml | 24 +++++ .../default/xui/ru/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/ru/panel_experiences.xml | 6 ++ .../default/xui/ru/panel_facebook_friends.xml | 2 +- .../skins/default/xui/ru/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/ru/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/ru/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/ru/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/ru/panel_group_info_sidetray.xml | 1 + .../default/xui/ru/panel_postcard_settings.xml | 16 +-- .../default/xui/ru/panel_preferences_setup.xml | 6 +- .../default/xui/ru/panel_region_experiences.xml | 33 +++++++ .../default/xui/ru/panel_script_experience.xml | 13 +++ .../default/xui/ru/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/ru/panel_snapshot_local.xml | 31 +++--- .../default/xui/ru/panel_snapshot_options.xml | 18 ++-- .../default/xui/ru/panel_snapshot_postcard.xml | 10 +- .../default/xui/ru/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/ru/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/ru/role_actions.xml | 4 + .../skins/default/xui/ru/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/ru/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/ru/teleport_strings.xml | 3 + .../skins/default/xui/tr/floater_about_land.xml | 17 +--- .../default/xui/tr/floater_experience_search.xml | 2 + .../default/xui/tr/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/tr/floater_experiences.xml | 2 + .../skins/default/xui/tr/floater_facebook.xml | 29 +++--- .../xui/tr/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/tr/floater_lagmeter.xml | 2 +- .../default/xui/tr/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/tr/floater_openobject.xml | 4 +- .../skins/default/xui/tr/floater_report_abuse.xml | 2 +- .../skins/default/xui/tr/floater_snapshot.xml | 17 ++-- .../skins/default/xui/tr/floater_top_objects.xml | 8 +- .../skins/default/xui/tr/floater_twitter.xml | 24 ++--- .../default/xui/tr/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/tr/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/tr/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/tr/mime_types.xml | 8 ++ .../skins/default/xui/tr/mime_types_linux.xml | 8 ++ .../skins/default/xui/tr/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/tr/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/tr/panel_experience_info.xml | 46 +++++++++ .../xui/tr/panel_experience_list_editor.xml | 27 +++++ .../default/xui/tr/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/tr/panel_experience_log.xml | 24 +++++ .../default/xui/tr/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/tr/panel_experiences.xml | 6 ++ .../default/xui/tr/panel_facebook_friends.xml | 2 +- .../skins/default/xui/tr/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/tr/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/tr/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/tr/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/tr/panel_group_info_sidetray.xml | 1 + .../default/xui/tr/panel_postcard_settings.xml | 16 +-- .../default/xui/tr/panel_preferences_setup.xml | 6 +- .../default/xui/tr/panel_region_experiences.xml | 33 +++++++ .../default/xui/tr/panel_script_experience.xml | 13 +++ .../default/xui/tr/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/tr/panel_snapshot_local.xml | 31 +++--- .../default/xui/tr/panel_snapshot_options.xml | 20 ++-- .../default/xui/tr/panel_snapshot_postcard.xml | 8 +- .../default/xui/tr/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/tr/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/tr/role_actions.xml | 4 + .../skins/default/xui/tr/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/tr/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/tr/teleport_strings.xml | 3 + .../skins/default/xui/zh/floater_about_land.xml | 17 +--- .../default/xui/zh/floater_experience_search.xml | 2 + .../default/xui/zh/floater_experienceprofile.xml | 85 ++++++++++++++++ .../skins/default/xui/zh/floater_experiences.xml | 2 + .../skins/default/xui/zh/floater_facebook.xml | 29 +++--- .../xui/zh/floater_inventory_view_finder.xml | 6 +- .../skins/default/xui/zh/floater_lagmeter.xml | 28 +++--- .../default/xui/zh/floater_live_lsleditor.xml | 17 ++++ .../skins/default/xui/zh/floater_openobject.xml | 2 +- .../skins/default/xui/zh/floater_report_abuse.xml | 2 +- .../skins/default/xui/zh/floater_snapshot.xml | 17 ++-- .../skins/default/xui/zh/floater_top_objects.xml | 8 +- .../skins/default/xui/zh/floater_twitter.xml | 24 ++--- .../default/xui/zh/menu_inventory_gear_default.xml | 2 +- .../skins/default/xui/zh/menu_url_experience.xml | 4 + indra/newview/skins/default/xui/zh/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/zh/mime_types.xml | 8 ++ .../skins/default/xui/zh/mime_types_linux.xml | 8 ++ .../skins/default/xui/zh/mime_types_mac.xml | 8 ++ .../newview/skins/default/xui/zh/notifications.xml | 110 ++++++++++++++++++++- .../skins/default/xui/zh/panel_experience_info.xml | 46 +++++++++ .../xui/zh/panel_experience_list_editor.xml | 27 +++++ .../default/xui/zh/panel_experience_list_item.xml | 6 ++ .../skins/default/xui/zh/panel_experience_log.xml | 24 +++++ .../default/xui/zh/panel_experience_search.xml | 41 ++++++++ .../skins/default/xui/zh/panel_experiences.xml | 6 ++ .../skins/default/xui/zh/panel_facebook_photo.xml | 40 ++++---- .../skins/default/xui/zh/panel_facebook_place.xml | 20 ++-- .../skins/default/xui/zh/panel_facebook_status.xml | 28 +++--- .../skins/default/xui/zh/panel_flickr_photo.xml | 68 ++++++------- .../default/xui/zh/panel_group_info_sidetray.xml | 1 + .../default/xui/zh/panel_postcard_settings.xml | 16 +-- .../default/xui/zh/panel_preferences_setup.xml | 6 +- .../default/xui/zh/panel_region_experiences.xml | 33 +++++++ .../default/xui/zh/panel_script_experience.xml | 13 +++ .../default/xui/zh/panel_snapshot_inventory.xml | 6 +- .../skins/default/xui/zh/panel_snapshot_local.xml | 31 +++--- .../default/xui/zh/panel_snapshot_options.xml | 20 ++-- .../default/xui/zh/panel_snapshot_postcard.xml | 8 +- .../default/xui/zh/panel_snapshot_profile.xml | 21 ++-- .../skins/default/xui/zh/panel_twitter_photo.xml | 50 ++++------ .../newview/skins/default/xui/zh/role_actions.xml | 4 + .../skins/default/xui/zh/sidepanel_item_info.xml | 6 ++ indra/newview/skins/default/xui/zh/strings.xml | 91 ++++++++++++++++- .../skins/default/xui/zh/teleport_strings.xml | 3 + 413 files changed, 6621 insertions(+), 2439 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/de/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/de/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/de/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/de/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/de/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/de/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/de/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/de/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/de/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/de/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/es/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/es/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/es/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/es/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/es/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/es/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/es/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/es/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/es/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/es/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/es/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/it/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/it/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/it/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/it/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/it/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/it/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/it/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/it/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/it/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/it/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/ru/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/ru/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/ru/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/ru/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/ru/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/tr/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/tr/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/tr/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/tr/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/tr/panel_script_experience.xml create mode 100644 indra/newview/skins/default/xui/zh/floater_experience_search.xml create mode 100644 indra/newview/skins/default/xui/zh/floater_experienceprofile.xml create mode 100644 indra/newview/skins/default/xui/zh/floater_experiences.xml create mode 100644 indra/newview/skins/default/xui/zh/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_experience_info.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_experience_list_editor.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_experience_list_item.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_experience_log.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_experience_search.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_experiences.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_region_experiences.xml create mode 100644 indra/newview/skins/default/xui/zh/panel_script_experience.xml (limited to 'indra') diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 44922fbe78..60f25704dd 100755 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -309,9 +309,6 @@ Nur große Parzellen können in der Suche aufgeführt werden. <panel.string name="push_restrict_region_text"> Kein Stoßen (regional) </panel.string> - <panel.string name="see_avs_text"> - Avatare auf anderen Parzellen können - </panel.string> <text name="allow_label"> Anderen Einwohnern gestatten: </text> @@ -337,22 +334,6 @@ Nur große Parzellen können in der Suche aufgeführt werden. <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Ansonsten sind Kampfschäden aktiviert."/> <check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Stoßen durch Skripte. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/> <check_box label="Ort in Suche anzeigen (30 L$/Woche)" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/> - <combo_box name="land category with adult"> - <combo_box.item label="Alle Kategorien" name="item0"/> - <combo_box.item label="Lindenort" name="item1"/> - <combo_box.item label="Adult" name="item2"/> - <combo_box.item label="Kunst & Kultur" name="item3"/> - <combo_box.item label="Business" name="item4"/> - <combo_box.item label="Bildung" name="item5"/> - <combo_box.item label="Spielen" name="item6"/> - <combo_box.item label="Treffpunkt" name="item7"/> - <combo_box.item label="Anfängergerecht" name="item8"/> - <combo_box.item label="Parks und Natur" name="item9"/> - <combo_box.item label="Wohngebiet" name="item10"/> - <combo_box.item label="Shopping" name="item11"/> - <combo_box.item label="Vermietung" name="item13"/> - <combo_box.item label="Sonstige" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Alle Kategorien" name="item0"/> <combo_box.item label="Lindenort" name="item1"/> @@ -449,15 +430,9 @@ Nur große Parzellen können in der Suche aufgeführt werden. <panel.string name="access_estate_defined"> (Durch Grundbesitz festgelegt) </panel.string> - <panel.string name="allow_public_access"> - Öffentlichen Zugang erlauben ([MATURITY]) (Hinweis: Bei Deaktivierung dieser Option werden Bannlinien generiert) - </panel.string> <panel.string name="estate_override"> Eine oder mehrere dieser Optionen gelten auf Grundbesitzebene </panel.string> - <text name="Limit access to this parcel to:"> - Zugang zu dieser Parzelle - </text> <check_box label="Öffentlichen Zugang gestatten (bei Deaktivierung dieser Option werden Bannlinien generiert)" name="public_access"/> <text name="Only Allow" width="400"> Zugang nur Einwohnern gestatten, die: @@ -489,5 +464,6 @@ Nur große Parzellen können in der Suche aufgeführt werden. <button label="Entfernen" label_selected="Entfernen" name="remove_banned"/> </panel> </panel> + <panel label="ERLEBNISSE" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_experience_search.xml b/indra/newview/skins/default/xui/de/floater_experience_search.xml new file mode 100644 index 0000000000..0fda5086ff --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="ERLEBNIS AUSWÄHLEN"/> diff --git a/indra/newview/skins/default/xui/de/floater_experienceprofile.xml b/indra/newview/skins/default/xui/de/floater_experienceprofile.xml new file mode 100644 index 0000000000..a553a5b6f0 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (keines) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Erlebnisprofil"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Bearbeiten" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Einstufung: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Standort: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Eigentümer: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Gruppe: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="Zulassen" name="allow_btn"/> + <button label="Vergessen" name="forget_btn"/> + <button label="Blockieren" name="block_btn"/> + <text name="privileged"> + Dieses Erlebnis ist für alle Einwohner aktiviert. + </text> + <button label="Missbrauch melden" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Name:"/> + <text name="edit_experience_desc_label" value="Beschreibung:"/> + <button label="Gruppe" name="Group_btn"/> + <text name="edit_ContentRating"> + Einstufung: + </text> + <icons_combo_box label="Moderat" name="edit_ContentRatingText" tool_tip="Bei Erhöhung der Inhaltseinstufung eines Erlebnisses wird die Berechtigung für alle Einwohner zurückgesetzt, die das Erlebnis zugelassen haben."> + <icons_combo_box.item label="Adult" name="Adult" value="42"/> + <icons_combo_box.item label="Moderat" name="Mature" value="21"/> + <icons_combo_box.item label="Allgemein" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Standort: + </text> + <button label="Aktuellen Standort verwenden" name="location_btn"/> + <button label="Standort löschen" name="clear_btn"/> + <check_box label="Erlebnis aktivieren" name="edit_enable_btn" tool_tip=""/> + <check_box label="Aus Suche ausschließen" name="edit_private_btn"/> + <text name="changes" value="Es kann mehrere Minuten dauern, bis Erlebnisänderungen in allen Regionen umgesetzt werden."/> + <button label="Zurück" name="cancel_btn"/> + <button label="Speichern" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_experiences.xml b/indra/newview/skins/default/xui/de/floater_experiences.xml new file mode 100644 index 0000000000..932592a63b --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="ERLEBNISSE"/> diff --git a/indra/newview/skins/default/xui/de/floater_facebook.xml b/indra/newview/skins/default/xui/de/floater_facebook.xml index 25b11536eb..32d6d02c7a 100644 --- a/indra/newview/skins/default/xui/de/floater_facebook.xml +++ b/indra/newview/skins/default/xui/de/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="AUF FACEBOOK POSTEN"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="STATUS" name="panel_facebook_status"/> - <panel label="FOTO" name="panel_facebook_photo"/> - <panel label="EINCHECKEN" name="panel_facebook_place"/> - <panel label="FREUNDE" name="panel_facebook_friends"/> - <panel label="KONTO" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Fehler - </text> - <text name="connection_loading_text"> - Laden... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="STATUS" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="EINCHECKEN" name="panel_facebook_place"/> + <panel label="FREUNDE" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Fehler + </text> + <text name="connection_loading_text"> + Laden... + </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml index d63426d684..0820e75029 100755 --- a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Kleidung" name="check_clothing"/> <check_box label="Gesten" name="check_gesture"/> <check_box label="Landmarken" name="check_landmark"/> - <check_box label="Netze" name="check_mesh"/> <check_box label="Notizkarten" name="check_notecard"/> + <check_box label="Netze" name="check_mesh"/> <check_box label="Objekte" name="check_object"/> <check_box label="Skripts" name="check_script"/> <check_box label="Sounds" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - ODER - </text> + <radio_group name="date_search_direction"> + <radio_item label="Neuer als" name="newer"/> + <radio_item label="Älter als" name="older"/> + </radio_group> <spinner label="Stunden zuvor" label_width="80" name="spin_hours_ago"/> <spinner label="Tage zuvor" name="spin_days_ago"/> <button label="Schließen" label_selected="Schließen" name="Close"/> diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml index 45ff37c147..2c8b76ace7 100644 --- a/indra/newview/skins/default/xui/de/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/de/floater_lagmeter.xml @@ -4,7 +4,7 @@ Lag-Anzeige </floater.string> <floater.string name="max_width_px"> - 350 + 360 </floater.string> <floater.string name="min_title_msg"> Lag @@ -25,10 +25,10 @@ Normal, Fenster im Hintergrund </floater.string> <floater.string name="client_frame_time_critical_msg"> - Client-Frame-Rate unter [CLIENT_FRAME_RATE_CRITICAL] + Client-Framerate unter [CLIENT_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="client_frame_time_warning_msg"> - Client-Frame-Rate zwischen [CLIENT_FRAME_RATE_CRITICAL] und [CLIENT_FRAME_RATE_WARNING] + Client-Framerate zwischen [CLIENT_FRAME_RATE_CRITICAL] und [CLIENT_FRAME_RATE_WARNING] </floater.string> <floater.string name="client_frame_time_normal_msg"> Normal @@ -55,10 +55,10 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - Paketverlust der Verbindung übersteigt [NETWORK_PACKET_LOSS_CRITICAL]% + Paketverlust der Verbindung übersteigt [NETWORK_PACKET_LOSS_CRITICAL] % </floater.string> <floater.string name="network_packet_loss_warning_msg"> - Paketverlust der Verbindung liegt bei [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% + Paketverlust der Verbindung liegt bei [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL] % </floater.string> <floater.string name="network_performance_normal_msg"> Normal @@ -76,10 +76,10 @@ Ping-Zeit der Verbindung liegt bei [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_packet_loss_cause_msg"> - Möglicherweise schlechte Verbindung oder zu hoher Wert für „Bandbreite“. + Möglicherweise schlechte Verbindung oder zu hoher Bandbreitenwert. </floater.string> <floater.string name="network_ping_cause_msg"> - Möglicherweise schlechte Verbindung oder File-Sharing-Anwendung. + Möglicherweise schlechte Verbindung oder Filesharing-Anwendung. </floater.string> <floater.string name="server_text_msg"> Server @@ -94,10 +94,10 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - Simulator-Frame-Rate liegt unter [SERVER_FRAME_RATE_CRITICAL] + Simulator-Framerate liegt unter [SERVER_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="server_frame_time_warning_msg"> - Simulator-Frame-Rate liegt zwischen [SERVER_FRAME_RATE_CRITICAL] und [SERVER_FRAME_RATE_WARNING] + Simulator-Framerate liegt zwischen [SERVER_FRAME_RATE_CRITICAL] und [SERVER_FRAME_RATE_WARNING] </floater.string> <floater.string name="server_frame_time_normal_msg"> Normal @@ -112,13 +112,13 @@ Mögliche Ursache: Zu viel Netzwerktraffic </floater.string> <floater.string name="server_agent_cause_msg"> - Mögliche Ursache: Zu viele Personen in Bewegung in der Region + Mögliche Ursache: Zu viele Personen in der Region in Bewegung </floater.string> <floater.string name="server_images_cause_msg"> Mögliche Ursache: Zu viele Bildberechnungen </floater.string> <floater.string name="server_generic_cause_msg"> - Mögliche Ursache: Zu hohe Simulator-Last + Mögliche Ursache: Zu hohe Simulatorlast </floater.string> <floater.string name="smaller_label"> >> @@ -147,5 +147,5 @@ <text name="server_text"> Normal </text> - <button label=">> " name="minimize" tool_tip="Fenstergröße ändern"/> + <button label=">>" name="minimize" tool_tip="Fenstergröße ändern"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml index 3b42a8b741..ae2dd4db67 100755 --- a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> SKRIPT: [NAME] </floater.string> + <floater.string name="experience_enabled"> + Markierung löschen, um aktuelles Erlebnis zu entfernen + </floater.string> + <floater.string name="no_experiences"> + Sie sind zu keinen Erlebnissen berechtigt + </floater.string> + <floater.string name="add_experiences"> + Auswählen, um Erlebnis hinzuzufügen + </floater.string> + <floater.string name="show_experience_profile"> + Klicken, um Erlebnisprofil aufzurufen + </floater.string> + <floater.string name="loading"> + Laden... + </floater.string> <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset"/> <check_box initial_value="true" label="Läuft" name="running"/> <check_box initial_value="true" label="Mono" name="mono"/> + <check_box label="Erlebnis verwenden:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml index c3e7052283..5aa4477f2e 100755 --- a/indra/newview/skins/default/xui/de/floater_openobject.xml +++ b/indra/newview/skins/default/xui/de/floater_openobject.xml @@ -4,5 +4,5 @@ [DESC]: </text> <button label="In Inventar kopieren" label_selected="In Inventar kopieren" name="copy_to_inventory_button" width="120"/> - <button label="Kopieren und anziehen" label_selected="Kopieren und anziehen" left_pad="6" name="copy_and_wear_button" width="136"/> + <button label="Kopieren und zum Outfit hinzufügen" label_selected="Kopieren und zum Outfit hinzufügen" left_pad="6" name="copy_and_wear_button" width="136"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml index 34cb3d1cc2..6999679b3f 100755 --- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml @@ -77,7 +77,7 @@ Objekt: <combo_box.item label="Land > Unbefugte Nutzung > Objekte oder Texturen" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Land > Unbefugte Nutzung > Partikel" name="Land__Encroachment__Particles"/> <combo_box.item label="Land > Unbefugte Nutzung > Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Wetten/Glücksspiel" name="Wagering_gambling"/> + <combo_box.item label="Verstoß gegen die Spielerichtlinie" name="Wagering_gambling"/> <combo_box.item label="Sonstige" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index 51614f1e8d..f0152ad8cd 100755 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -39,13 +39,7 @@ <string name="local_failed_str"> Fehler beim Speichern auf dem Computer. </string> - <button name="advanced_options_btn" tool_tip="Erweiterte Optionen"/> - <text name="image_res_text"> - [WIDTH]px (Breite) x [HEIGHT]px (Höhe) - </text> - <text name="file_size_label"> - [SIZE] KB - </text> + <button label="AKTUALISIEREN" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> <text name="layer_type_label"> Aufnehmen: @@ -65,4 +59,10 @@ <combo_box.item label="Kein Filter" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] px (Breite) x [HEIGHT] px (Höhe) + </text> + <text name="file_size_label"> + [SIZE] KB + </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml index f8130c6379..d01b4640c2 100755 --- a/indra/newview/skins/default/xui/de/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> Nicht gefunden. </floater.string> + <floater.string name="URLs"> + URLs + </floater.string> + <floater.string name="memory"> + Speicher (KB) + </floater.string> <text name="title_text"> Wird geladen... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Eigentümer" name="owner"/> <scroll_list.columns label="Position" name="location" width="125"/> <scroll_list.columns label="Parzelle" name="parcel"/> - <scroll_list.columns label="Uhrzeit" name="time"/> + <scroll_list.columns label="Datum" name="time"/> <scroll_list.columns label="URLs" name="URLs"/> <scroll_list.columns label="Speicher (KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/de/floater_twitter.xml b/indra/newview/skins/default/xui/de/floater_twitter.xml index a79a5d3cac..483641c260 100644 --- a/indra/newview/skins/default/xui/de/floater_twitter.xml +++ b/indra/newview/skins/default/xui/de/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="ERSTELLEN" name="panel_twitter_photo"/> - <panel label="KONTO" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Fehler - </text> - <text name="connection_loading_text"> - Laden... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="ERSTELLEN" name="panel_twitter_photo"/> + <panel label="KONTO" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Fehler + </text> + <text name="connection_loading_text"> + Laden... + </text> </floater> diff --git a/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml index 48dec3e856..7438fc5aa2 100755 --- a/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="Nach aktuellesten Objekten sortieren" name="sort_by_recent"/> <menu_item_check label="Ordner immer nach Namen sortieren" name="sort_folders_by_name"/> <menu_item_check label="Systemordner nach oben" name="sort_system_folders_to_top"/> - <menu_item_call label="Filter anzeigen" name="show_filters"/> + <menu_item_call label="Filter anzeigen..." name="show_filters"/> <menu_item_call label="Filter zurücksetzen" name="reset_filters"/> <menu_item_call label="Alle Ordner schließen" name="close_folders"/> <menu_item_call label="Fundbüro ausleeren" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/de/menu_url_experience.xml b/indra/newview/skins/default/xui/de/menu_url_experience.xml new file mode 100644 index 0000000000..45c118cb6d --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index c9fad9c9d3..ecd0fe786c 100755 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Neues Inventarfenster" name="NewInventoryWindow"/> <menu_item_call label="Orte..." name="Places"/> <menu_item_call label="Auswahlen..." name="Picks"/> + <menu_item_call label="Erlebnisse..." name="Experiences"/> <menu_item_call label="Kamerasteuerungen..." name="Camera Controls"/> <menu label="Bewegung" name="Movement"> <menu_item_call label="Hinsetzen" name="Sit Down Here"/> @@ -48,7 +49,7 @@ <menu_item_check label="Freunde" name="My Friends"/> <menu_item_check label="Gruppen" name="My Groups"/> <menu_item_check label="Leute in der Nähe" name="Active Speakers"/> - <menu_item_call label="Blockierliste" name="Block List"/> + <menu_item_check label="Blockierliste" name="Block List"/> <menu_item_check label="Nicht stören" name="Do Not Disturb"/> </menu> <menu label="Welt" name="World"> diff --git a/indra/newview/skins/default/xui/de/mime_types.xml b/indra/newview/skins/default/xui/de/mime_types.xml index de93107e94..ee05e47a63 100755 --- a/indra/newview/skins/default/xui/de/mime_types.xml +++ b/indra/newview/skins/default/xui/de/mime_types.xml @@ -44,6 +44,14 @@ Audio an diesem Ort wiedergeben </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Keine Inhalte + </label> + <tooltip name="none_tooltip"> + Keine Medien gefunden + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Echtzeit-Streaming @@ -119,11 +127,6 @@ Macromedia Director </label> </mimetype> - <mimetype name="application/x-shockwave-flash"> - <label name="application/x-shockwave-flash_label"> - Flash - </label> - </mimetype> <mimetype name="audio/mid"> <label name="audio/mid_label"> Audio (MIDI) diff --git a/indra/newview/skins/default/xui/de/mime_types_linux.xml b/indra/newview/skins/default/xui/de/mime_types_linux.xml index e4b5c53292..ffe819d157 100755 --- a/indra/newview/skins/default/xui/de/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/de/mime_types_linux.xml @@ -44,6 +44,14 @@ Das Audio dieses Standorts abspielen </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Keine Inhalte + </label> + <tooltip name="none_tooltip"> + Keine Medien gefunden + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Echtzeit-Streaming diff --git a/indra/newview/skins/default/xui/de/mime_types_mac.xml b/indra/newview/skins/default/xui/de/mime_types_mac.xml index e4b5c53292..ffe819d157 100755 --- a/indra/newview/skins/default/xui/de/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/de/mime_types_mac.xml @@ -44,6 +44,14 @@ Das Audio dieses Standorts abspielen </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Keine Inhalte + </label> + <tooltip name="none_tooltip"> + Keine Medien gefunden + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Echtzeit-Streaming diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 2fa5005d15..09cba36e25 100755 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -73,6 +73,10 @@ Fehlerdetails: The notification called '[_NAME]' was not found in noti [MESSAGE] <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte [http://get.secondlife.com laden Sie die aktuellste Version des Viewers herunter]. <usetemplate name="okbutton" yestext="OK"/> @@ -582,6 +586,9 @@ Sie können die Grafikqualität unter Einstellungen > Grafik wieder erhöhen. <notification name="RegionNoTerraforming"> Die Region [REGION] erlaubt kein Terraforming. </notification> + <notification name="ParcelNoTerraforming"> + Sie sind nicht zum Terraformen der Parzelle „[PARCEL]“ berechtigt. + </notification> <notification name="CannotCopyWarning"> Sie sind nicht berechtigt, die folgenden Objekte zu kopieren: [ITEMS] @@ -1839,6 +1846,30 @@ Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belas Verwalter nur für diesen Grundbesitz oder für [ALL_ESTATES] entfernen? <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> + <notification label="Grundbesitz auswählen" name="EstateAllowedExperienceAdd"> + Nur für diesen Grundbesitz oder für [ALL_ESTATES] zur Erlaubnisliste hinzufügen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> + </notification> + <notification label="Grundbesitz auswählen" name="EstateAllowedExperienceRemove"> + Nur für diesen Grundbesitz oder für [ALL_ESTATES] aus der Erlaubnisliste entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> + </notification> + <notification label="Grundbesitz auswählen" name="EstateBlockedExperienceAdd"> + Nur für diesen Grundbesitz oder für [ALL_ESTATES] zur Blockierliste hinzufügen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> + </notification> + <notification label="Grundbesitz auswählen" name="EstateBlockedExperienceRemove"> + Nur für diesen Grundbesitz oder für [ALL_ESTATES] aus der Blockierliste entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> + </notification> + <notification label="Grundbesitz auswählen" name="EstateTrustedExperienceAdd"> + Nur für diesen Grundbesitz oder für [ALL_ESTATES] zur Schlüsselliste hinzufügen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> + </notification> + <notification label="Grundbesitz auswählen" name="EstateTrustedExperienceRemove"> + Nur für diesen Grundbesitz oder für [ALL_ESTATES] aus der Schlüsselliste entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> + </notification> <notification label="Rauswurf bestätigen" name="EstateKickUser"> Benutzer [EVIL_USER] von diesem Grundbesitz werfen? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> @@ -1913,6 +1944,10 @@ Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belas Wir haben technische Probleme mit Ihrem Teleport, da Ihre Einstellungen nicht mit dem Server synchronisiert sind. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + Betreten der Region nicht gestattet. „[REGION_NAME]“ ist eine Region für Geschicklichkeitsspiele. Der Zugang ist Einwohnern vorbehalten, die bestimmte Kriterien erfüllen. Weitere Details finden Sie unter [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> Sie erhalten keine Benachrichtigungen mehr, wenn Sie eine Region der Inhaltseinstufung „[RATING]“ besuchen. Sie können Ihre Inhaltseinstellungen von der Menüleiste aus ändern („Ich“ > „Einstellungen“ > „Allgemein“). <usetemplate name="okbutton" yestext="OK"/> @@ -2220,6 +2255,9 @@ Möchten Sie es mit dem ausgewählten Objekt ersetzen? <button ignore="Nie ersetzen" name="No" text="Abbrechen"/> </form> </notification> + <notification name="TooManyWearables"> + Sie können keinen Ordner tragen, der mehr als [AMOUNT] Elemente enthält. Sie können diesen Höchstwert unter „Erweitert“ > „Debug-Einstellungen anzeigen“ > „WearFolderLimit“ ändern. + </notification> <notification label="Warnung für Nicht-stören-Modus" name="DoNotDisturbModePay"> Sie haben den Nicht-stören-Modus aktiviert. Sie erhalten keine Artikel, die im Gegenzug für diese Zahlung angeboten werden. @@ -2828,7 +2866,7 @@ Wenn Sie in dieser Region bleiben, werden Sie abgemeldet. [MESSAGE] -Von Objekt: <nolink>[OBJECTNAME]</nolink>, Eigentümer: [NAME]? +Von Objekt: <nolink>[OBJECTNAME]</nolink>, Eigentümer: [NAME] <form name="form"> <button name="Gotopage" text="Zur Seite"/> <button name="Cancel" text="Abbrechen"/> @@ -2854,6 +2892,72 @@ Ist das OK? <button name="Mute" text="Ignorieren"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + Fehler beim Erwerb eines neuen Erlebnisses: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Eine Änderung der Erlebnisgruppe wurde ignoriert, weil der Eigentümer nicht Mitglied der ausgewählten Gruppe ist. + </notification> + <notification name="UneditableExperienceProfileMessage"> + Das nicht bearbeitbare Feld „[field]“ wurde beim Aktualisieren des Erlebnisprofils ignoriert. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Änderungen des Felds „[field]“ ignoriert; Feld kann nur vom Eigentümer des Erlebnisses eingestellt werden. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Sie können die Inhaltseinstufung eines Erlebnisses nicht auf eine höhere Stufe setzen als die des Eigentümers. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Die folgenden Elemente verhinderten die Aktualisierung des Namens und/oder der Beschreibung im Erlebnisprofil: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Sie wurden aus der Region [region_name] teleportiert, weil Sie das Erlebnis secondlife:///app/experience/[public_id]/profile entfernt haben und nicht mehr berechtigt sind, sich in dieser Region aufzuhalten. + <form name="form"> + <ignore name="ignore" text="Wegen Entfernen eines Erlebnisses aus Region hinausgeworfen"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + Sie durften die Region [region_name] betreten, weil Sie am Schlüsselerlebnis secondlife:///app/experience/[public_id]/profile teilgenommen haben. Wenn Sie dieses Erlebnis entfernen, werden Sie u. U. aus der Region hinausgeworfen. + <form name="form"> + <ignore name="ignore" text="Betreten der Region durch ein Erlebnis gestattet"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + Sie haben keinen Zugang zu diesem Ziel. Sie erhalten u. U. Zugang zur Region, wenn Sie unten ein Erlebnis akzeptieren: + +[EXPERIENCE_LIST] + +Möglicherweise sind noch weitere Schlüsselerlebnisse verfügbar. + </notification> + <notification name="ExperienceEvent"> + Ein Objekt erhielt vom Erlebnis secondlife:///app/experience/[public_id]/profile die Erlaubnis zum Durchführen der folgenden Aktion: [EventType]. + Eigentümer: secondlife:///app/agent/[OwnerID]/inspect + Objektname: [ObjectName] + Parzellenname: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + Ein Anhang erhielt vom Erlebnis secondlife:///app/experience/[public_id]/profile die Erlaubnis zum Durchführen der folgenden Aktion: [EventType]. + Eigentümer: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + „<nolink>[OBJECTNAME]</nolink>“, ein Objekt, das „[NAME]“ gehört, lädt Sie zur Teilnahme an diesem Erlebnis mit [GRID_WIDE] ein: + +[EXPERIENCE] + +Nach Erteilung der Genehmigung wird diese Nachricht für dieses Erlebnis nicht erneut angezeigt, es sei denn, Sie widerrufen die Genehmigung im Erlebnisprofil. + +Mit diesem Erlebnis verknüpfte Skripts können in Regionen, in denen dieses Erlebnis aktiv ist, Folgendes tun: + +[QUESTIONS]Sind Sie damit einverstanden? + <form name="form"> + <button name="BlockExperience" text="Erlebnis blockieren"/> + <button name="Mute" text="Objekt blockieren"/> + <button name="Yes" text="Ja"/> + <button name="No" text="Nein"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Achtung: Das Objekt „<nolink>[OBJECTNAME]</nolink>“ fordert uneingeschränkten Zugriff auf Ihr Linden-Dollar-Konto an. Wenn Sie Zugriff gewähren, kann dieses Objekt jederzeit und ohne weitere Warnung Ihr Konto belasten bzw. ganz leeren. @@ -3173,6 +3277,10 @@ Sie haben eine [RESOLUTION]-gebackene Textur für „[BODYREGION]“ nach [TIME] <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( [EXISTENCE] Sekunden am Leben) Sie haben lokal eine [RESOLUTION]-gebackene Textur für „[BODYREGION]“ nach [TIME] Sekunden aktualisiert. + </notification> + <notification name="CannotUploadTexture"> + Textur kann nicht hochgeladen werden. +[REASON] </notification> <notification name="LivePreviewUnavailable"> Wir können keine Vorschau dieser Textur anzeigen, da sie nicht kopier- und/oder übertragungsfähig ist. diff --git a/indra/newview/skins/default/xui/de/panel_experience_info.xml b/indra/newview/skins/default/xui/de/panel_experience_info.xml new file mode 100644 index 0000000000..7231719561 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Erlebnisprofil"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Standort: + </text> + <text name="LocationTextText"> + irgendwo + </text> + <button label="Teleportieren" name="teleport_btn"/> + <button label="Karte" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Marketplace-Laden: + </text> + <text name="LocationTextText"> + irgendwo + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Einstufung: + </text> + <text name="ContentRatingText"> + Adult + </text> + <text name="Owner"> + Eigentümer: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Bearbeiten" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/de/panel_experience_list_editor.xml new file mode 100644 index 0000000000..b87c814485 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + wird geladen... + </panel.string> + <panel.string name="panel_allowed"> + Zulässige Erlebnisse: + </panel.string> + <panel.string name="panel_blocked"> + Blockierte Erlebnisse: + </panel.string> + <panel.string name="panel_trusted"> + Schlüsselerlebnisse: + </panel.string> + <panel.string name="no_results"> + (leer) + </panel.string> + <text name="text_name"> + Erlebnisliste + </text> + <scroll_list name="experience_list"> + <columns label="Name" name="experience_name"/> + </scroll_list> + <button label="Hinzufügen..." name="btn_add"/> + <button label="Entfernen" name="btn_remove"/> + <button label="Profil..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_experience_list_item.xml b/indra/newview/skins/default/xui/de/panel_experience_list_item.xml new file mode 100644 index 0000000000..cfffa27a20 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Dummy-Name + </text> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_experience_log.xml b/indra/newview/skins/default/xui/de/panel_experience_log.xml new file mode 100644 index 0000000000..393bbbbf8e --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="Keine Events."/> + <string name="loading" value="Laden..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Zeit" name="time"/> + <columns label="Event" name="event"/> + <columns label="Erlebnis" name="experience_name"/> + <columns label="Objekt" name="object_name"/> + </scroll_list> + <button label="Benachrichtigen" name="btn_notify"/> + <button label="Profil" name="btn_profile_xp"/> + <button label="Melden" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Alle Events benachrichtigen Tage" name="notify_all"/> + <button label="Entfernen" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_experience_search.xml b/indra/newview/skins/default/xui/de/panel_experience_search.xml new file mode 100644 index 0000000000..e556335213 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + „[TEXT]“ nicht gefunden + </string> + <string name="no_results"> + Keine Ergebnisse + </string> + <string name="searching"> + Suchen... + </string> + <string name="loading"> + Laden... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="Los" name="find"/> + <icons_combo_box label="Moderat" name="maturity"> + <icons_combo_box.item label="Adult" name="Adult" value="42"/> + <icons_combo_box.item label="Moderat" name="Mature" value="21"/> + <icons_combo_box.item label="Allgemein" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Name" name="experience_name"/> + <columns label="Eigentümer" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Abbrechen" name="cancel_btn"/> + <button label="Profil anzeigen" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_experiences.xml b/indra/newview/skins/default/xui/de/panel_experiences.xml new file mode 100644 index 0000000000..6c1630d973 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Erlebnisse werden geladen..."/> + <string name="no_experiences" value="Keine Erlebnisse."/> + <string name="acquire" value="Erlebnis erwerben"/> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_friends.xml b/indra/newview/skins/default/xui/de/panel_facebook_friends.xml index 9712d681c7..f6a8fda23e 100644 --- a/indra/newview/skins/default/xui/de/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/de/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Sie haben gegenwärtig keine Facebook-Freunde, die gleichzeitig Einwohner von Second Life sind. Laden Sie Ihre Facebook-Freunde ein, Second Life beizutreten!"/> - <string name="facebook_friends_no_connected" value="Sie sind gegenwärtig nicht mit Facebook verbunden. Um eine Verbindung herzustellen und diese Funktion zu aktivieren, gehen Sie zur Registerkarte „Konto“."/> + <string name="facebook_friends_no_connected" value="Sie sind gegenwärtig nicht mit Facebook verbunden. Um eine Verbindung herzustellen und diese Funktion zu aktivieren, gehen Sie zur Registerkarte „Status“."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="SL-Freunde"/> <accordion_tab name="tab_suggested_friends" title="Diese Personen als SL-Freunde hinzufügen"/> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_photo.xml b/indra/newview/skins/default/xui/de/panel_facebook_photo.xml index a1aabcd29c..bc48931129 100644 --- a/indra/newview/skins/default/xui/de/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/de/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> - <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Bildfilter"> - <combo_box.item label="Kein Filter" name="NoFilter"/> - </combo_box> - <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> - <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> - <text name="caption_label"> - Kommentar (optional): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Posten" name="post_photo_btn"/> - <button label="Abbrechen" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> + <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> + <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> + <text name="caption_label"> + Kommentar (optional): + </text> + <button label="Posten" name="post_photo_btn"/> + <button label="Abbrechen" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_place.xml b/indra/newview/skins/default/xui/de/panel_facebook_place.xml index 0f556565b4..102be80502 100644 --- a/indra/newview/skins/default/xui/de/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/de/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Details zu Ihrem aktuellen Standort: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Posten" name="post_place_btn"/> - <button label="Abbrechen" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Details zu Ihrem aktuellen Standort: + </text> + <check_box initial_value="false" label="Draufsicht des Standorts einschließen" name="add_place_view_cb"/> + <button label="Posten" name="post_place_btn"/> + <button label="Abbrechen" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_status.xml b/indra/newview/skins/default/xui/de/panel_facebook_status.xml index 437243c360..23c9d3b75f 100644 --- a/indra/newview/skins/default/xui/de/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/de/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - Was machst du gerade? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Posten" name="post_status_btn"/> - <button label="Abbrechen" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Sie sind mit Facebook verbunden als:"/> + <string name="facebook_disconnected" value="Nicht mit Facebook verbunden"/> + <text name="account_caption_label"> + Nicht mit Facebook verbunden. + </text> + <panel name="panel_buttons"> + <button label="Verbinden..." name="connect_btn"/> + <button label="Trennen" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Anweisungen zum Posten auf Facebook] + </text> + </panel> + <text name="status_caption_label"> + Was machst du gerade? + </text> + <button label="Posten" name="post_status_btn"/> + <button label="Abbrechen" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_flickr_photo.xml b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml index 1627f405c5..38b5302fef 100644 --- a/indra/newview/skins/default/xui/de/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> - <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Bildfilter"> - <combo_box.item label="Kein Filter" name="NoFilter"/> - </combo_box> - <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> - <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> - <text name="title_label"> - Titel: - </text> - <text name="description_label"> - Beschreibung: - </text> - <check_box initial_value="true" label="SL-Standort am Ende der Beschreibung hinzufügen" name="add_location_cb"/> - <text name="tags_label"> - Markierungen: - </text> - <text name="tags_help_label"> - Markierungen durch Leerzeichen trennen. + <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> + <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> + <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> + <text name="title_label"> + Titel: + </text> + <text name="description_label"> + Beschreibung: + </text> + <check_box initial_value="true" label="SL-Standort am Ende der Beschreibung hinzufügen" name="add_location_cb"/> + <text name="tags_label"> + Markierungen: + </text> + <text name="tags_help_label"> + Markierungen durch Leerzeichen trennen. Für Markierungen, die aus mehreren Wörtern bestehen, "" verwenden. - </text> - <combo_box name="rating_combobox" tool_tip="Flickr-Inhaltseinstufung"> - <combo_box.item label="Sichere Flickr-Einstufung" name="SafeRating"/> - <combo_box.item label="Moderate Flickr-Einstufung" name="ModerateRating"/> - <combo_box.item label="Beschränkte Flickr-Einstufung" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Hochladen" name="post_photo_btn"/> - <button label="Abbrechen" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Flickr-Inhaltseinstufung"> + <combo_box.item label="Sichere Flickr-Einstufung" name="SafeRating"/> + <combo_box.item label="Moderate Flickr-Einstufung" name="ModerateRating"/> + <combo_box.item label="Beschränkte Flickr-Einstufung" name="RestrictedRating"/> + </combo_box> + <button label="Hochladen" name="post_photo_btn"/> + <button label="Abbrechen" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml index 1775394ecd..92c2a4b83a 100755 --- a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Rollen und Mitglieder"/> <accordion_tab name="group_notices_tab" title="Mitteilungen"/> <accordion_tab name="group_land_tab" title="Land/Kapital"/> + <accordion_tab name="group_experiences_tab" title="Erlebnisse"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml index e6d3b7de66..93b4121db5 100755 --- a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml @@ -9,7 +9,7 @@ </combo_box> <spinner label="Breite x Höhe" name="postcard_snapshot_width"/> <check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/> - <slider label="Qualität" name="image_quality_slider"/> + <slider label="Qualität:" name="image_quality_slider"/> <text name="image_quality_level"> ([QLVL]) </text> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml index 24e5033bfc..e6c90f21d1 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Web: </text> - <radio_group name="use_external_browser"> - <radio_item label="Meinen Browser verwenden (IE, Firefox, Safari)" name="external" tool_tip="Standard Webbrowser des Systems verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Bei Vollbildmodus nicht empfohlen." value="true"/> - <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser öffnet als neues Fenster innerhalb von [APP_NAME]." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Meinen Browser (Chrome, Firefox, IE) für alle Links verwenden" name="internal" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen." value="0"/> + <radio_item label="Integrierten Browser nur für Linden Lab-/Second Life-Links verwenden" name="external" tool_tip="Verwenden Sie den Standard-Webbrowser Ihres Systems für Hilfe, Weblinks usw. Der integrierte Browser wird nur für Linden Lab-/Second Life-Links verwendet." value="1"/> </radio_group> <check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Cookies annehmen" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/de/panel_region_experiences.xml b/indra/newview/skins/default/xui/de/panel_region_experiences.xml new file mode 100644 index 0000000000..6e193aba19 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Erlebnisse" name="Experiences"> + <panel.string name="trusted_estate_text"> + Jedes Erlebnis kann ein Schlüsselerlebnis sein. + +Schlüsselerlebnisse können in diesem Grundbesitz ausgeführt werden. + +Wenn der Grundbesitz keinen öffentlichen Zugang gestattet, können Einwohner, die an einem Schlüsselerlebnis teilnehmen, den Grundbesitz betreten und sich dort aufhalten, solange sie an einem Schlüsselerlebnis beteiligt sind. + </panel.string> + <panel.string name="allowed_estate_text"> + Nur Erlebnisse mit Landumfang können zulässig sein. + +Zulässige Erlebnisse können in diesem Grundbesitz ausgeführt werden. + </panel.string> + <panel.string name="blocked_estate_text"> + Nur Erlebnisse mit Gridumfang können blockiert werden. + +Blockierte Erlebnisse können in diesem Grundbesitz nicht ausgeführt werden. + </panel.string> + <panel.string name="estate_caption"> + Änderungen wirken sich auf alle Regionen des Grundbesitzes aus. + </panel.string> + <panel.string name="allowed_parcel_text"> + Nur Erlebnisse mit Landumfang können zulässig sein. + +Zulässige Erlebnisse können in dieser Parzelle ausgeführt werden, sofern sie nicht vom Grundbesitz blockiert sind. + </panel.string> + <panel.string name="blocked_parcel_text"> + Jedes Einwohnererlebnis kann blockiert werden. + +Blockierte Erlebnisse können in dieser Parzelle nicht ausgeführt werden. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_script_experience.xml b/indra/newview/skins/default/xui/de/panel_script_experience.xml new file mode 100644 index 0000000000..192e661925 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="ERLEBNIS"> + <button label="Erlebnis" name="Expand Experience"/> + <check_box label="Verwendet Erlebnis" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Erlebnis auswählen..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + Sie tragen zu keinen Erlebnissen bei. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml index d13f56ed3d..2b8c4e6cd1 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml @@ -3,18 +3,18 @@ <text name="title"> Inventar </text> - <text name="hint_lbl"> - Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST] L$. Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus. - </text> <combo_box label="Auflösung" name="texture_size_combo"> - <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> <combo_box.item label="Klein (128x128)" name="Small(128x128)"/> <combo_box.item label="Mittel (256x256)" name="Medium(256x256)"/> <combo_box.item label="Groß (512x512)" name="Large(512x512)"/> <combo_box.item label="Benutzerdefiniert" name="Custom"/> </combo_box> <spinner label="Breite x Höhe" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Seitenverhältnis beibehalten" name="inventory_keep_aspect_check"/> + <text name="hint_lbl"> + Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST] L$. Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus. + </text> <button label="Abbrechen" name="cancel_btn"/> <button label="Speichern" name="save_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml index 53e78ba290..9182c14063 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Festplatte + Datenträger </text> <combo_box label="Auflösung" name="local_size_combo"> <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> @@ -15,15 +15,15 @@ </combo_box> <spinner label="Breite x Höhe" name="local_snapshot_width"/> <check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Format: + </text> <combo_box label="Format" name="local_format_combo"> <combo_box.item label="PNG (verlustfrei)" name="PNG"/> <combo_box.item label="JPEG" name="JPEG"/> <combo_box.item label="BMP (verlustfrei)" name="BMP"/> </combo_box> - <slider label="Qualität" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> + <slider label="Qualität:" name="image_quality_slider"/> <button label="Abbrechen" name="cancel_btn"/> <flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern"> <flyout_button.item label="Speichern" name="save_item"/> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml index 7ec22adc4c..82e2b56f3f 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Ins Profil hochladen" name="save_to_profile_btn"/> + <button label="Auf Datenträger speichern" name="save_to_computer_btn"/> + <button label="In Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/> + <button label="In Profil hochladen" name="save_to_profile_btn"/> + <button label="Auf Facebook hochladen" name="send_to_facebook_btn"/> + <button label="Auf Twitter hochladen" name="send_to_twitter_btn"/> + <button label="Auf Flickr hochladen" name="send_to_flickr_btn"/> <button label="Per E-Mail senden" name="save_to_email_btn"/> - <button label="Im Inventar speichern" name="save_to_inventory_btn"/> - <button label="Auf Festplatte speichern" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Senden an: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml index ead56f2885..3f5bbda724 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml @@ -13,9 +13,9 @@ E-Mail </text> <tab_container name="postcard_tabs"> - <panel name="panel_postcard_message" label="Nachricht"/> - <panel name="panel_postcard_settings" label="Einstellungen"/> + <panel label="Nachricht" name="panel_postcard_message"/> + <panel label="Einstellungen" name="panel_postcard_settings"/> </tab_container> - <button name="cancel_btn" label="Abbrechen"/> - <button name="send_btn" label="Absenden"/> + <button label="Abbrechen" name="cancel_btn"/> + <button label="Senden" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml index 0f21edd1b6..8c856b87a2 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml @@ -4,11 +4,11 @@ Profil </text> <combo_box label="Auflösung" name="profile_size_combo"> - <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="Benutzerdefiniert" name="Custom"/> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="Benutzerdefiniert" name="Custom"/> </combo_box> <spinner label="Breite x Höhe" name="profile_snapshot_width"/> <check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/> diff --git a/indra/newview/skins/default/xui/de/panel_twitter_photo.xml b/indra/newview/skins/default/xui/de/panel_twitter_photo.xml index 89c4b98ffc..e637253983 100644 --- a/indra/newview/skins/default/xui/de/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/de/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - Was ist los? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="SL-Standort hinzufügen" name="add_location_cb"/> - <check_box initial_value="true" label="Foto hinzufügen" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> - <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Bildfilter"> - <combo_box.item label="Kein Filter" name="NoFilter"/> - </combo_box> - <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> - <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Tweeten" name="post_photo_btn"/> - <button label="Abbrechen" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + Was ist los? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="SL-Standort hinzufügen" name="add_location_cb"/> + <check_box initial_value="true" label="Foto hinzufügen" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> + <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> + <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> + <button label="Tweeten" name="post_photo_btn"/> + <button label="Abbrechen" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml index d834fc57ca..e3fbe2a630 100755 --- a/indra/newview/skins/default/xui/de/role_actions.xml +++ b/indra/newview/skins/default/xui/de/role_actions.xml @@ -71,4 +71,8 @@ <action description="Gruppen-Voice-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Voice-Chat beitreten. HINWEIS: Sie benötigen die Fähigkeit „Gruppen-Chat beitreten“, um Zugang zu dieser Voice-Chat-Sitzung zu erhalten." name="join voice chat" value="27"/> <action description="Gruppen-Chat moderieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können den Zugang zu und die Teilnahme an Gruppen-Chat- und Voice-Chat-Sitzungen steuern." name="moderate group chat" value="37"/> </action_set> + <action_set description="Diese Fähigkeiten enthalten die Berechtigung, die Erlebnisse zu ändern, die dieser Gruppe gehören." name="experience_tools_experience"> + <action description="Erlebnis-Administrator" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können die Metadaten für ein Erlebnis ändern." name="experience admin" value="49"/> + <action description="Erlebnis-Contributor" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Skripts für ein Erlebnis beitragen." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml index 1b67eaf03b..d0bd23138d 100755 --- a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Objektprofil"> + <panel.string name="loading_experience"> + (laden) + </panel.string> <panel.string name="unknown"> (unbekannt) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Erworben: </text> + <text name="LabelItemExperienceTitle"> + Erlebnis: + </text> <panel name="perms_inv"> <text name="perm_modify"> Sie können: diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index d4ce7b3fc3..7cb7b31886 100755 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -449,6 +449,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="TooltipMustSingleDrop"> Sie können nur ein einzelnes Objekt hierher ziehen </string> + <string name="TooltipTooManyWearables"> + Sie können keinen Ordner tragen, der mehr als [AMOUNT] Elemente enthält. Sie können diesen Höchstwert unter „Erweitert“ > „Debug-Einstellungen anzeigen“ > „WearFolderLimit“ ändern. + </string> <string name="TooltipPrice" value="[AMOUNT] L$"/> <string name="TooltipOutboxDragToWorld"> Sie können Artikel nicht in Ihrer Händler-Outbox rezzen @@ -1060,9 +1063,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="AgentNameSubst"> (Sie) </string> - <string name="JoinAnExperience"> - Bei einem Erlebnis mitmachen - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Beim Verwalten von Grundbesitzzugangslisten Warnhinweise unterdrücken </string> @@ -1873,6 +1874,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="CompileQueueUnknownFailure"> Unbekannter Fehler beim Herunterladen </string> + <string name="CompileNoExperiencePerm"> + Skript „[SCRIPT]“ mit Erlebnis „[EXPERIENCE]“ wird übersprungen. + </string> <string name="CompileQueueTitle"> Rekompilierung </string> @@ -5264,6 +5268,87 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="UserDictionary"> [Benutzer] </string> + <string name="experience_tools_experience"> + Erlebnis + </string> + <string name="ExperienceNameNull"> + (kein Erlebnis) + </string> + <string name="ExperienceNameUntitled"> + (unbenanntes Erlebnis) + </string> + <string name="Land-Scope"> + Landumfang + </string> + <string name="Grid-Scope"> + Gridumfang + </string> + <string name="Allowed_Experiences_Tab"> + ZULÄSSIG + </string> + <string name="Blocked_Experiences_Tab"> + BLOCKIERT + </string> + <string name="Contrib_Experiences_Tab"> + CONTRIBUTOR + </string> + <string name="Admin_Experiences_Tab"> + ADMIN + </string> + <string name="Recent_Experiences_Tab"> + AKTUELL + </string> + <string name="Owned_Experiences_Tab"> + EIGENE + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], max. [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + Ihre Steuerungen übernehmen + </string> + <string name="ExperiencePermission3"> + Animationen Ihres Avatars auslösen + </string> + <string name="ExperiencePermission4"> + an Ihren Avatar anhängen + </string> + <string name="ExperiencePermission9"> + Ihre Kamera vorfolgen + </string> + <string name="ExperiencePermission10"> + Ihre Kamera steuern + </string> + <string name="ExperiencePermission11"> + Sie teleportieren + </string> + <string name="ExperiencePermission12"> + automatisch Erlebnisberechtigungen akzeptieren + </string> + <string name="ExperiencePermissionShortUnknown"> + unbekannten Vorgang durchführen: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Steuerungen übernehmen + </string> + <string name="ExperiencePermissionShort3"> + Animationen auslösen + </string> + <string name="ExperiencePermissionShort4"> + Anhängen + </string> + <string name="ExperiencePermissionShort9"> + Kamera verfolgen + </string> + <string name="ExperiencePermissionShort10"> + Kamera steuern + </string> + <string name="ExperiencePermissionShort11"> + Teleportieren + </string> + <string name="ExperiencePermissionShort12"> + Berechtigung + </string> <string name="logging_calls_disabled_log_empty"> Unterhaltungen werden nicht protokolliert. Um ein Protokoll zu starten, wählen Sie „Speichern: nur Protokoll“ oder „Speichern: Protokoll und Transkripte“ unter „Einstellungen“ > „Chat“. </string> diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml index 8062633df6..e590db0dba 100755 --- a/indra/newview/skins/default/xui/de/teleport_strings.xml +++ b/indra/newview/skins/default/xui/de/teleport_strings.xml @@ -49,6 +49,9 @@ Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in e <message name="MustGetAgeRegion"> Sie müssen mindestens 18 Jahre alt sein, um diese Region betreten zu können. </message> + <message name="RegionTPSpecialUsageBlocked"> + Betreten der Region nicht gestattet. „[REGION_NAME]“ ist eine Region für Geschicklichkeitsspiele. Der Zutritt ist Einwohnern vorbehalten, die bestimmte Kriterien erfüllen. Weitere Details finden Sie unter [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index f8c40d798a..10907344ae 100755 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -308,9 +308,6 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda. <panel.string name="push_restrict_region_text"> Sin 'empujones' (prevalece lo marcado en la región) </panel.string> - <panel.string name="see_avs_text"> - Los avatares de otras parcelas pueden ver - </panel.string> <text name="allow_label"> Permitir a otros Residentes: </text> @@ -336,22 +333,6 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda. <check_box label="Seguro (sin daño)" name="check safe" tool_tip="Si se marca, convierte el terreno en 'seguro', desactivando el daño en combate. Si no, se activa el daño en combate."/> <check_box label="Sin 'empujones'" name="PushRestrictCheck" tool_tip="Previene scripts que empujen. Marcando esta opción prevendrá que en su terreno haya comportamientos destructivos."/> <check_box label="Mostrar el sitio en la búsqueda (30 L$/semana)" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/> - <combo_box name="land category with adult"> - <combo_box.item label="Cualquier categoría" name="item0"/> - <combo_box.item label="Localización Linden" name="item1"/> - <combo_box.item label="Adulto" name="item2"/> - <combo_box.item label="Arte y Cultura" name="item3"/> - <combo_box.item label="Negocios" name="item4"/> - <combo_box.item label="Educativo" name="item5"/> - <combo_box.item label="Juegos de azar" name="item6"/> - <combo_box.item label="Entretenimiento" name="item7"/> - <combo_box.item label="Para recién llegados" name="item8"/> - <combo_box.item label="Parques y Naturaleza" name="item9"/> - <combo_box.item label="Residencial" name="item10"/> - <combo_box.item label="Compras" name="item11"/> - <combo_box.item label="Terreno en alquiler" name="item13"/> - <combo_box.item label="Otra" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Cualquier categoría" name="item0"/> <combo_box.item label="Localización Linden" name="item1"/> @@ -451,15 +432,9 @@ los media: <panel.string name="access_estate_defined"> (Definido por el Estado) </panel.string> - <panel.string name="allow_public_access"> - Permitir el acceso público ([MATURITY]) (Nota: Si no seleccionas esta opción, se crearán líneas de prohibición) - </panel.string> <panel.string name="estate_override"> Una o más de esta opciones está configurada a nivel del estado </panel.string> - <text name="Limit access to this parcel to:"> - Acceso a esta parcela - </text> <check_box label="Permitir el acceso público (si no seleccionas esta opción, se crearán líneas de prohibición)" name="public_access"/> <text name="Only Allow"> Permitir únicamente el acceso a los Residentes que: @@ -491,5 +466,6 @@ los media: <button label="Quitar" label_selected="Quitar" name="remove_banned"/> </panel> </panel> + <panel label="EXPERIENCIAS" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_experience_search.xml b/indra/newview/skins/default/xui/es/floater_experience_search.xml new file mode 100644 index 0000000000..315b3363fa --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="ELEGIR EXPERIENCIA"/> diff --git a/indra/newview/skins/default/xui/es/floater_experienceprofile.xml b/indra/newview/skins/default/xui/es/floater_experienceprofile.xml new file mode 100644 index 0000000000..c37208647a --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (ninguno) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Perfil de experiencia"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Editar" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Calificación: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Ubicación: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Propietario: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Grupo: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="Permitir" name="allow_btn"/> + <button label="Olvidar" name="forget_btn"/> + <button label="Bloquear" name="block_btn"/> + <text name="privileged"> + Esta experiencia está habilitada para todos los residentes. + </text> + <button label="Denunciar una infracción" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Nombre:"/> + <text name="edit_experience_desc_label" value="Descripción:"/> + <button label="Grupo" name="Group_btn"/> + <text name="edit_ContentRating"> + Calificación: + </text> + <icons_combo_box label="Moderado" name="edit_ContentRatingText" tool_tip="Al aumentar el nivel de calificación de una experiencia se restablecen los permisos de todos los residentes que han permitido la experiencia."> + <icons_combo_box.item label="Adulto" name="Adult" value="42"/> + <icons_combo_box.item label="Moderado" name="Mature" value="21"/> + <icons_combo_box.item label="General" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Ubicación: + </text> + <button label="Configurar en mi posición" name="location_btn"/> + <button label="Borrar lugar" name="clear_btn"/> + <check_box label="Habilitar experiencia" name="edit_enable_btn" tool_tip=""/> + <check_box label="Ocultar en la búsqueda" name="edit_private_btn"/> + <text name="changes" value="Los cambios de una experiencia pueden tardar varios minutos en mostrarse en todas las regiones.+"/> + <button label="Anterior" name="cancel_btn"/> + <button label="Guardar" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_experiences.xml b/indra/newview/skins/default/xui/es/floater_experiences.xml new file mode 100644 index 0000000000..1a95aa3da8 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="EXPERIENCIAS"/> diff --git a/indra/newview/skins/default/xui/es/floater_facebook.xml b/indra/newview/skins/default/xui/es/floater_facebook.xml index 3b0e05b193..4bccc6ee57 100644 --- a/indra/newview/skins/default/xui/es/floater_facebook.xml +++ b/indra/newview/skins/default/xui/es/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="PUBLICAR EN FACEBOOK"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="ESTADO" name="panel_facebook_status"/> - <panel label="FOTO" name="panel_facebook_photo"/> - <panel label="ESTOY AQUÍ" name="panel_facebook_place"/> - <panel label="AMIGOS" name="panel_facebook_friends"/> - <panel label="CUENTA" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Error - </text> - <text name="connection_loading_text"> - Cargando... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="ESTADO" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="ESTOY AQUÍ" name="panel_facebook_place"/> + <panel label="AMIGOS" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Error + </text> + <text name="connection_loading_text"> + Cargando... + </text> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml index 6004034504..5d16ccd271 100755 --- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Ropa" name="check_clothing"/> <check_box label="Gestos" name="check_gesture"/> <check_box label="Hitos" name="check_landmark"/> - <check_box label="Redes" name="check_mesh"/> <check_box label="Notas" name="check_notecard"/> + <check_box label="Redes" name="check_mesh"/> <check_box label="Objetos" name="check_object"/> <check_box label="Scripts" name="check_script"/> <check_box label="Sonidos" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - o - </text> + <radio_group name="date_search_direction"> + <radio_item label="Posteriores a" name="newer"/> + <radio_item label="Anteriores a" name="older"/> + </radio_group> <spinner label="horas atrás" name="spin_hours_ago"/> <spinner label="días atrás" name="spin_days_ago"/> <button bottom_delta="-30" label="Cerrar" label_selected="Cerrar" name="Close"/> diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml index 227689a194..64a2124cd6 100644 --- a/indra/newview/skins/default/xui/es/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/es/floater_lagmeter.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="MEDIDOR DEL LAG"> +<floater name="floater_lagmeter" title="MEDIDOR DE LAG"> <floater.string name="max_title_msg"> - Medidor del lag + Medidor de lag </floater.string> <floater.string name="max_width_px"> 360 @@ -25,25 +25,25 @@ Normal, ventana en segundo plano </floater.string> <floater.string name="client_frame_time_critical_msg"> - Frames del cliente valorados por debajo de [CLIENT_FRAME_RATE_CRITICAL] + Velocidad de fotogramas del cliente inferior a [CLIENT_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="client_frame_time_warning_msg"> - Frames del cliente valorados entre [CLIENT_FRAME_RATE_CRITICAL] y [CLIENT_FRAME_RATE_WARNING] + Velocidad de fotogramas del cliente entre [CLIENT_FRAME_RATE_CRITICAL] y [CLIENT_FRAME_RATE_WARNING] </floater.string> <floater.string name="client_frame_time_normal_msg"> Normal </floater.string> <floater.string name="client_draw_distance_cause_msg"> - Posible causa: distancia de dibujo fijada muy alta + Causa posible: la distancia de dibujo configurada es demasiado grande </floater.string> <floater.string name="client_texture_loading_cause_msg"> - Posible causa: imágenes cargándose + Causa posible: se están cargando las imágenes </floater.string> <floater.string name="client_texture_memory_cause_msg"> - Posible causa: demasiadas imágenes en la memoria + Causa posible: demasiadas imágenes en la memoria </floater.string> <floater.string name="client_complex_objects_cause_msg"> - Posible causa: demasiados objetos complejos en la escena + Causa posible: la escena contiene demasiados objetos complejos </floater.string> <floater.string name="network_text_msg"> Red @@ -55,10 +55,10 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - La conexión deja caer más del [NETWORK_PACKET_LOSS_CRITICAL]% de los paquetes + La conexión pierde más de un [NETWORK_PACKET_LOSS_CRITICAL] % de paquetes </floater.string> <floater.string name="network_packet_loss_warning_msg"> - La conexión deja caer [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de los paquetes + La conexión pierde entre un [NETWORK_PACKET_LOSS_WARNING] % y un [NETWORK_PACKET_LOSS_CRITICAL] % de paquetes </floater.string> <floater.string name="network_performance_normal_msg"> Normal @@ -70,16 +70,16 @@ 300 </floater.string> <floater.string name="network_ping_critical_msg"> - El tiempo de conexión -ping- supera los [NETWORK_PING_CRITICAL] ms + Tiempo de ping de la conexión superior a [NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_ping_warning_msg"> - El tiempo de conexión -ping- es de [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + Tiempo de ping de la conexión de [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_packet_loss_cause_msg"> - Quizá una mala conexión o un ancho de banda fijado demasiado alto. + Posible conexión deficiente o la preferencia 'Bandwidth' tiene un valor demasiado alto. </floater.string> <floater.string name="network_ping_cause_msg"> - Quizá una mala conexión o una aplicación de archivos compartidos. + Posible conexión deficiente o aplicación de archivos compartidos. </floater.string> <floater.string name="server_text_msg"> Servidor @@ -94,31 +94,31 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - Frecuencia (framerate) por debajo de [SERVER_FRAME_RATE_CRITICAL] + Velocidad de fotogramas del simulador inferior a [SERVER_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="server_frame_time_warning_msg"> - Frecuencia (framerate) entre [SERVER_FRAME_RATE_CRITICAL] y [SERVER_FRAME_RATE_WARNING] + Velocidad de fotogramas del simulador entre [SERVER_FRAME_RATE_CRITICAL] y [SERVER_FRAME_RATE_WARNING] </floater.string> <floater.string name="server_frame_time_normal_msg"> Normal </floater.string> <floater.string name="server_physics_cause_msg"> - Posible causa: demasiados objetos físicos + Causa posible: demasiados objetos físicos </floater.string> <floater.string name="server_scripts_cause_msg"> - Posible causa: demasiados objetos con script + Causa posible: demasiados objetos programados </floater.string> <floater.string name="server_net_cause_msg"> - Posible causa: demasiado tráfico en la red + Causa posible: tráfico excesivo en la red </floater.string> <floater.string name="server_agent_cause_msg"> - Posible causa: demasiada gente moviéndose en la región + Causa posible: demasiadas personas moviéndose en la región </floater.string> <floater.string name="server_images_cause_msg"> - Posible causa: demasiados cálculos de imáganes + Causa posible: demasiados cálculos de imagen </floater.string> <floater.string name="server_generic_cause_msg"> - Posible causa: carga del simulador muy pesada + Causa posible: carga del simulador excesiva </floater.string> <floater.string name="smaller_label"> >> @@ -126,7 +126,7 @@ <floater.string name="bigger_label"> << </floater.string> - <button label="" label_selected="" name="client_lagmeter" tool_tip="Estado del lag del cliente"/> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Estado de lag del cliente"/> <text name="client"> Cliente </text> @@ -134,7 +134,7 @@ Normal </text> <text left="30" name="client_lag_cause" right="-10"/> - <button label="" label_selected="" name="network_lagmeter" tool_tip="Estado del lag de la red"/> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Estado de lag de la red"/> <text name="network"> Red </text> @@ -142,7 +142,7 @@ Normal </text> <text left="30" name="network_lag_cause" right="-10"/> - <button label="" label_selected="" name="server_lagmeter" tool_tip="Estado del lag del servidor"/> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Estado de lag del servidor"/> <text name="server"> Servidor </text> diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml index 4ff54bccb5..9672f910ea 100755 --- a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> SCRIPT: [NAME] </floater.string> + <floater.string name="experience_enabled"> + Anular la selección para quitar la experiencia actual + </floater.string> + <floater.string name="no_experiences"> + No tienes autorización para ninguna experiencia + </floater.string> + <floater.string name="add_experiences"> + Seleccionar para agregar una experiencia + </floater.string> + <floater.string name="show_experience_profile"> + Pulsar para ver el perfil de la experiencia + </floater.string> + <floater.string name="loading"> + Cargando... + </floater.string> <button label="Reiniciar" label_selected="Reiniciar" name="Reset"/> <check_box initial_value="true" label="Ejecutándose" left="4" name="running"/> <check_box initial_value="true" label="Mono" left="106" name="mono"/> + <check_box label="Usar experiencia(s):" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml index b8b688df60..e350479e01 100755 --- a/indra/newview/skins/default/xui/es/floater_openobject.xml +++ b/indra/newview/skins/default/xui/es/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="Copiar al inventario" label_selected="Copiar al inventario" name="copy_to_inventory_button"/> - <button label="Copiar y vestirse" label_selected="Copiar y vestirse" name="copy_and_wear_button"/> + <button label="Copiar en el inventario" label_selected="Copiar en el inventario" name="copy_to_inventory_button"/> + <button label="Copiar y añadir al vestuario" label_selected="Copiar y añadir al vestuario" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml index fe37f125b8..8d8906c617 100755 --- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml @@ -76,7 +76,7 @@ <combo_box.item label="Terreno > Invasión > Objetos o texturas" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terreno > Invasión > Partículas" name="Land__Encroachment__Particles"/> <combo_box.item label="Terreno > Invasión > Árboles/Plantas" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Apostar" name="Wagering_gambling"/> + <combo_box.item label="Incumplimiento de la política de juegos" name="Wagering_gambling"/> <combo_box.item label="Otra" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml index 5e02bc52b7..c2c996aa8a 100755 --- a/indra/newview/skins/default/xui/es/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> Error al guardar en el equipo. </string> - <button name="advanced_options_btn" tool_tip="Opciones avanzadas"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] px - </text> - <text name="file_size_label"> - [SIZE] kB - </text> + <button label="ACTUALIZAR" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - OPCIONES AVANZADAS - </text> <text name="layer_type_label"> Captura: </text> @@ -68,4 +59,10 @@ <combo_box.item label="Sin filtro" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] px (ancho) × [HEIGHT] px (alto) + </text> + <text name="file_size_label"> + [SIZE] kB + </text> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml index bb53f116c2..4eaa552fda 100755 --- a/indra/newview/skins/default/xui/es/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> No se ha encontrado ninguno. </floater.string> + <floater.string name="URLs"> + URL + </floater.string> + <floater.string name="memory"> + Memoria (KB) + </floater.string> <text name="title_text"> Cargando... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Propietario" name="owner"/> <scroll_list.columns label="Posición" name="location"/> <scroll_list.columns label="Parcela" name="parcel"/> - <scroll_list.columns label="Tiempo" name="time"/> + <scroll_list.columns label="Fecha" name="time"/> <scroll_list.columns label="URLs" name="URLs"/> <scroll_list.columns label="Memoria (KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/es/floater_twitter.xml b/indra/newview/skins/default/xui/es/floater_twitter.xml index 050ee1a391..92f4fc5bba 100644 --- a/indra/newview/skins/default/xui/es/floater_twitter.xml +++ b/indra/newview/skins/default/xui/es/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="REDACTAR" name="panel_twitter_photo"/> - <panel label="CUENTA" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Error - </text> - <text name="connection_loading_text"> - Cargando... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="REDACTAR" name="panel_twitter_photo"/> + <panel label="CUENTA" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Error + </text> + <text name="connection_loading_text"> + Cargando... + </text> </floater> diff --git a/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml index 0e9644629e..c24910066b 100755 --- a/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="Ordenar por los más recientes" name="sort_by_recent"/> <menu_item_check label="Ordenar las carpetas siempre alfabéticamente" name="sort_folders_by_name"/> <menu_item_check label="Las carpetas del sistema, arriba" name="sort_system_folders_to_top"/> - <menu_item_call label="Ver los filtros" name="show_filters"/> + <menu_item_call label="Ver los filtros..." name="show_filters"/> <menu_item_call label="Restablecer los filtros" name="reset_filters"/> <menu_item_call label="Cerrar todas las carpetas" name="close_folders"/> <menu_item_call label="Vaciar Objetos Perdidos" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/es/menu_url_experience.xml b/indra/newview/skins/default/xui/es/menu_url_experience.xml new file mode 100644 index 0000000000..a18cb0e8e8 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index d2117f08b6..9b255f5c0d 100755 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Nueva ventana del inventario" name="NewInventoryWindow"/> <menu_item_call label="Lugares..." name="Places"/> <menu_item_call label="Destacados..." name="Picks"/> + <menu_item_call label="Experiencias..." name="Experiences"/> <menu_item_call label="Controles de la cámara..." name="Camera Controls"/> <menu label="Movimiento" name="Movement"> <menu_item_call label="Sentarte" name="Sit Down Here"/> @@ -47,7 +48,7 @@ <menu_item_check label="Amigos" name="My Friends"/> <menu_item_check label="Grupos" name="My Groups"/> <menu_item_check label="Gente cerca" name="Active Speakers"/> - <menu_item_call label="Lista de ignorados" name="Block List"/> + <menu_item_check label="Lista de ignorados" name="Block List"/> <menu_item_check label="No molestar" name="Do Not Disturb"/> </menu> <menu label="Mundo" name="World"> diff --git a/indra/newview/skins/default/xui/es/mime_types.xml b/indra/newview/skins/default/xui/es/mime_types.xml index 85ff4cfb48..eb212344ce 100755 --- a/indra/newview/skins/default/xui/es/mime_types.xml +++ b/indra/newview/skins/default/xui/es/mime_types.xml @@ -27,7 +27,7 @@ No hay contenido </label> <tooltip name="none_tooltip"> - Aquí no hay multimedia + Aquí no hay contenido multimedia </tooltip> </widgetset> <widgetset name="image"> diff --git a/indra/newview/skins/default/xui/es/mime_types_linux.xml b/indra/newview/skins/default/xui/es/mime_types_linux.xml index 77d05934f4..e5887e7d96 100755 --- a/indra/newview/skins/default/xui/es/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/es/mime_types_linux.xml @@ -44,6 +44,14 @@ Oír el audio de este sitio </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + No hay contenido + </label> + <tooltip name="none_tooltip"> + Aquí no hay contenido multimedia + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Streaming en 'Real Time' diff --git a/indra/newview/skins/default/xui/es/mime_types_mac.xml b/indra/newview/skins/default/xui/es/mime_types_mac.xml index 77d05934f4..e5887e7d96 100755 --- a/indra/newview/skins/default/xui/es/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/es/mime_types_mac.xml @@ -44,6 +44,14 @@ Oír el audio de este sitio </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + No hay contenido + </label> + <tooltip name="none_tooltip"> + Aquí no hay contenido multimedia + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Streaming en 'Real Time' diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 01407dc69e..cc0d46bfe0 100755 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -73,6 +73,10 @@ Detalles del error: la notificación de nombre '[_NAME]' no se ha enco [MESSAGE] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> Ha habido un error actualizando [APP_NAME]. Por favor, [http://get.secondlife.com descarga la última versión] del Visor. <usetemplate name="okbutton" yestext="OK"/> @@ -570,6 +574,9 @@ La calidad gráfica puede ajustarse en Preferencias > Gráficos. <notification name="RegionNoTerraforming"> En la región [REGION] no se permite modificar el terreno. </notification> + <notification name="ParcelNoTerraforming"> + No tienes permiso para modificar el terreno de la parcela [PARCEL]. + </notification> <notification name="CannotCopyWarning"> No tienes permiso para copiar los elementos siguientes: [ITEMS] y, si los das, los perderás del inventario. ¿Seguro que quieres ofrecerlos? @@ -1834,6 +1841,30 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se ¿Remover al administrador del estado sólo para este estado o para [ALL_ESTATES]? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> </notification> + <notification label="Seleccionar estado" name="EstateAllowedExperienceAdd"> + ¿Añadir a la lista de permitidos solamente en este estado o en [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> + </notification> + <notification label="Seleccionar estado" name="EstateAllowedExperienceRemove"> + ¿Quitar de la lista de permitidos solamente en este estado o en [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> + </notification> + <notification label="Seleccionar estado" name="EstateBlockedExperienceAdd"> + ¿Añadir a la lista de bloqueados solamente en este estado o en [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> + </notification> + <notification label="Seleccionar estado" name="EstateBlockedExperienceRemove"> + ¿Quitar de la lista de bloqueados solamente en este estado o en [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> + </notification> + <notification label="Seleccionar estado" name="EstateTrustedExperienceAdd"> + ¿Añadir a la lista de claves solamente en este estado o en [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> + </notification> + <notification label="Seleccionar estado" name="EstateTrustedExperienceRemove"> + ¿Quitar de la lista de claves solamente en este estado o en [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> + </notification> <notification label="Confirmar la expulsión" name="EstateKickUser"> ¿Echar a [EVIL_USER] de este estado? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> @@ -1908,6 +1939,10 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se Estamos experimentando dificultades técnicas con el teleporte porque tus preferencias no están sincronizadas con el servidor. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + No puedes entrar en la región. '[REGION_NAME]' es una región de juegos de habilidad, y debes cumplir determinados criterios para poder entrar en ella. Consulta los detalles en las [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life P+F de juegos de habilidad]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> No recibirás más notificaciones cuando vayas a visitar una región con un contenido [RATING]. En el futuro, puedes cambiar tus preferencias de contenido en Yo > Preferencias > General en la barra de menús. <usetemplate name="okbutton" yestext="OK"/> @@ -2214,6 +2249,9 @@ Linden Lab <button ignore="Nunca reemplazar" name="No" text="Cancelar"/> </form> </notification> + <notification name="TooManyWearables"> + No puedes tener una carpeta de prendas que contenga más de [AMOUNT] elementos. Puedes cambiar este límite en Avanzado > Mostrar las configuraciones del depurador > WearFolderLimit. + </notification> <notification label="Advertencia del modo No molestar" name="DoNotDisturbModePay"> Tienes activado No molestar. No podrás recibir ningún objeto ofrecido a cambio de este pago. @@ -2822,7 +2860,7 @@ Si permaneces en esta región serás desconectado. [MESSAGE] -Del objeto: <nolink>[OBJECTNAME]</nolink>, propietario: [NAME]? +Del objeto: <nolink>[OBJECTNAME]</nolink>, propietario: [NAME] <form name="form"> <button name="Gotopage" text="Cargar"/> <button name="Cancel" text="Cancelar"/> @@ -2848,6 +2886,72 @@ Del objeto: <nolink>[OBJECTNAME]</nolink>, propietario: [NAME]? <button name="Mute" text="Ignorar"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + No se puede adquirir una experiencia nueva: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Se ha omitido un cambio en el grupo de la experiencia porque el propietario no es miembro del grupo seleccionado. + </notification> + <notification name="UneditableExperienceProfileMessage"> + El campo no modificable '[field]' se ha omitido al actualizar el perfil de la experiencia. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Cambios omitidos en el campo '[field]' que solo puede configurar el propietario de la experiencia. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + No puedes definir un nivel de calificación de una experiencia superior al establecido por el propietario. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Las condiciones siguientes han impedido la actualización del nombre o la descripción del perfil de la experiencia: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Te has teleportado desde la región [region_name] porque al quitar la experiencia secondlife:///app/experience/[public_id]/profile ya no tienes permiso para entrar en la región. + <form name="form"> + <ignore name="ignore" text="Expulsado de la región por quitar una experiencia"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + La participación en la experiencia clave secondlife:///app/experience/[public_id]/profile te otorga permiso para entrar en la región [region_name]. Si quitas esta experiencia, puede que te expulsen de la región. + <form name="form"> + <ignore name="ignore" text="Admitido en una región por una experiencia"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + No tienes permiso de acceso a este destino. Puedes obtener el permiso para entrar en la región si aceptas una de las siguientes experiencias: + +[EXPERIENCE_LIST] + +Pueden estar disponibles otras experiencias clave. + </notification> + <notification name="ExperienceEvent"> + La experiencia secondlife:///app/experience/[public_id]/profile permitió la siguiente operación con un objeto: [EventType]. + Propietario: secondlife:///app/agent/[OwnerID]/inspect + Nombre del objeto: [ObjectName] + Nombre de la parcela: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + La experiencia secondlife:///app/experience/[public_id]/profile permitió la siguiente operación con un anexo: [EventType]. + Propietario: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + '<nolink>[OBJECTNAME]</nolink>', un objeto de propiedad de '[NAME]', solicita tu participación en la experiencia [GRID_WIDE]: + +[EXPERIENCE] + +Una vez concedido el permiso, este mensaje no volverá a aparecer para la experiencia salvo que se revoque en el perfil de la experiencia. + +Los scripts asociados a esta experiencia podrán hacer lo siguiente en las regiones donde la experiencia esté activa: + +[QUESTIONS]¿Lo aceptas? + <form name="form"> + <button name="BlockExperience" text="Bloquear experiencia"/> + <button name="Mute" text="Bloquear objeto"/> + <button name="Yes" text="Sí"/> + <button name="No" text="No"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Atención: El objeto '<nolink>[OBJECTNAME]</nolink>' solicita un acceso pleno a tu cuenta de dólares Linden. Si le autorizas el acceso, podrá retirar fondos de tu cuenta en cualquier momento o vaciarla por completo, cuando lo desee y sin más advertencias. @@ -3159,6 +3263,10 @@ Has actualizado una textura obtenida mediante bake de [RESOLUTION] para '[B <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( [EXISTENCE] segundos con vida ) Has actualizado de manera local una textura obtenida mediante bake de [RESOLUTION] para '[BODYREGION]' después de [TIME] segundos. + </notification> + <notification name="CannotUploadTexture"> + No se puede subir la textura. +[REASON] </notification> <notification name="LivePreviewUnavailable"> No se puede mostrar una vista previa de esta textura porque es de tipo 'no copiable' y/o 'no transferible'. diff --git a/indra/newview/skins/default/xui/es/panel_experience_info.xml b/indra/newview/skins/default/xui/es/panel_experience_info.xml new file mode 100644 index 0000000000..85fc94ebdc --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Perfil de experiencia"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Ubicación: + </text> + <text name="LocationTextText"> + algún lugar + </text> + <button label="Teleportarte" name="teleport_btn"/> + <button label="Mapa" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Tienda del Mercado: + </text> + <text name="LocationTextText"> + algún lugar + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Calificación: + </text> + <text name="ContentRatingText"> + Adulto + </text> + <text name="Owner"> + Propietario: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Editar" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/es/panel_experience_list_editor.xml new file mode 100644 index 0000000000..5cc1462605 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + cargando... + </panel.string> + <panel.string name="panel_allowed"> + Experiencias permitidas: + </panel.string> + <panel.string name="panel_blocked"> + Experiencias bloqueadas: + </panel.string> + <panel.string name="panel_trusted"> + Experiencias clave: + </panel.string> + <panel.string name="no_results"> + (vacío) + </panel.string> + <text name="text_name"> + Lista de experiencias + </text> + <scroll_list name="experience_list"> + <columns label="Nombre" name="experience_name"/> + </scroll_list> + <button label="Añadir..." name="btn_add"/> + <button label="Eliminar" name="btn_remove"/> + <button label="Perfil..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_experience_list_item.xml b/indra/newview/skins/default/xui/es/panel_experience_list_item.xml new file mode 100644 index 0000000000..bd2e146223 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Nombre ficticio + </text> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_experience_log.xml b/indra/newview/skins/default/xui/es/panel_experience_log.xml new file mode 100644 index 0000000000..54d0f0fc44 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="No hay eventos."/> + <string name="loading" value="cargando..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Hora" name="time"/> + <columns label="Evento" name="event"/> + <columns label="Experiencia" name="experience_name"/> + <columns label="Objeto" name="object_name"/> + </scroll_list> + <button label="Notificar" name="btn_notify"/> + <button label="Perfil" name="btn_profile_xp"/> + <button label="Denunciar" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Notificar todos los eventos Días" name="notify_all"/> + <button label="Limpiar" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_experience_search.xml b/indra/newview/skins/default/xui/es/panel_experience_search.xml new file mode 100644 index 0000000000..bb05ada5b9 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + '[TEXT]' no encontrado + </string> + <string name="no_results"> + No hay resultados + </string> + <string name="searching"> + Buscando... + </string> + <string name="loading"> + Cargando... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="Ir" name="find"/> + <icons_combo_box label="Moderado" name="maturity"> + <icons_combo_box.item label="Adulto" name="Adult" value="42"/> + <icons_combo_box.item label="Moderado" name="Mature" value="21"/> + <icons_combo_box.item label="General" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Nombre" name="experience_name"/> + <columns label="Propietario" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Cancelar" name="cancel_btn"/> + <button label="Ver el perfil" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_experiences.xml b/indra/newview/skins/default/xui/es/panel_experiences.xml new file mode 100644 index 0000000000..182981fcb0 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Cargando experiencias..."/> + <string name="no_experiences" value="No hay experiencias."/> + <string name="acquire" value="Adquirir una experiencia"/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_friends.xml b/indra/newview/skins/default/xui/es/panel_facebook_friends.xml index 6913e87aba..5557c0a73c 100644 --- a/indra/newview/skins/default/xui/es/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/es/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Actualmente no tienes amigos en Facebook que también sean residentes de Second Life. Invita a tus amigos de Facebook a que se unan a Second Life."/> - <string name="facebook_friends_no_connected" value="Actualmente no estás conectado a Facebook. Selecciona la pestaña Cuenta para conectarte y habilitar esta función."/> + <string name="facebook_friends_no_connected" value="Actualmente no estás conectado a Facebook. Selecciona la pestaña Estado para conectarte y habilitar esta función."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="Amigos de SL"/> <accordion_tab name="tab_suggested_friends" title="Agregar estas personas como amigos de SL"/> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_photo.xml b/indra/newview/skins/default/xui/es/panel_facebook_photo.xml index f9e7265d34..5a533f8bcb 100644 --- a/indra/newview/skins/default/xui/es/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/es/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> - <combo_box.item label="Ventana actual" name="CurrentWindow"/> - <combo_box.item label="640 × 480" name="640x480"/> - <combo_box.item label="800 × 600" name="800x600"/> - <combo_box.item label="1024 × 768" name="1024x768"/> - <combo_box.item label="1200 × 630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> - <combo_box.item label="Sin filtro" name="NoFilter"/> - </combo_box> - <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> - <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> - <text name="caption_label"> - Comentario (opcional): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Publicar" name="post_photo_btn"/> - <button label="Cancelar" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> + <combo_box.item label="Ventana actual" name="CurrentWindow"/> + <combo_box.item label="640 × 480" name="640x480"/> + <combo_box.item label="800 × 600" name="800x600"/> + <combo_box.item label="1024 × 768" name="1024x768"/> + <combo_box.item label="1200 × 630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> + <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> + <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> + <text name="caption_label"> + Comentario (opcional): + </text> + <button label="Publicar" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_place.xml b/indra/newview/skins/default/xui/es/panel_facebook_place.xml index 639825818a..5139bd1d0b 100644 --- a/indra/newview/skins/default/xui/es/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/es/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Cuenta algo del lugar donde te encuentras: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Publicar" name="post_place_btn"/> - <button label="Cancelar" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Cuenta algo del lugar donde te encuentras: + </text> + <check_box initial_value="false" label="Incluir una vista general del lugar" name="add_place_view_cb"/> + <button label="Publicar" name="post_place_btn"/> + <button label="Cancelar" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_status.xml b/indra/newview/skins/default/xui/es/panel_facebook_status.xml index dfaf4089fc..e6f137b750 100644 --- a/indra/newview/skins/default/xui/es/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/es/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - ¿En qué estás pensando? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Publicar" name="post_status_btn"/> - <button label="Cancelar" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Estás conectado a Facebook como:"/> + <string name="facebook_disconnected" value="No conectado a Facebook"/> + <text name="account_caption_label"> + No conectado a Facebook. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprende a publicar en Facebook] + </text> + </panel> + <text name="status_caption_label"> + ¿En qué estás pensando? + </text> + <button label="Publicar" name="post_status_btn"/> + <button label="Cancelar" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_flickr_photo.xml b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml index 465e80667b..fe80199355 100644 --- a/indra/newview/skins/default/xui/es/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> - <combo_box.item label="Ventana actual" name="CurrentWindow"/> - <combo_box.item label="640 × 480" name="640x480"/> - <combo_box.item label="800 × 600" name="800x600"/> - <combo_box.item label="1024 × 768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> - <combo_box.item label="Sin filtro" name="NoFilter"/> - </combo_box> - <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> - <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> - <text name="title_label"> - Título: - </text> - <text name="description_label"> - Descripción: - </text> - <check_box initial_value="true" label="Incluir la ubicación de SL al final de la descripción" name="add_location_cb"/> - <text name="tags_label"> - Etiquetas: - </text> - <text name="tags_help_label"> - Separa las etiquetas con espacios + <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> + <combo_box.item label="Ventana actual" name="CurrentWindow"/> + <combo_box.item label="640 × 480" name="640x480"/> + <combo_box.item label="800 × 600" name="800x600"/> + <combo_box.item label="1024 × 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> + <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> + <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> + <text name="title_label"> + Título: + </text> + <text name="description_label"> + Descripción: + </text> + <check_box initial_value="true" label="Incluir la ubicación de SL al final de la descripción" name="add_location_cb"/> + <text name="tags_label"> + Etiquetas: + </text> + <text name="tags_help_label"> + Separa las etiquetas con espacios Usa "" para las etiquetas con varias palabras - </text> - <combo_box name="rating_combobox" tool_tip="Calificación de contenido de Flickr"> - <combo_box.item label="Calificación segura de Flickr" name="SafeRating"/> - <combo_box.item label="Calificación moderada de Flickr" name="ModerateRating"/> - <combo_box.item label="Calificación restringida de Flickr" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Subir" name="post_photo_btn"/> - <button label="Cancelar" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Calificación de contenido de Flickr"> + <combo_box.item label="Calificación segura de Flickr" name="SafeRating"/> + <combo_box.item label="Calificación moderada de Flickr" name="ModerateRating"/> + <combo_box.item label="Calificación restringida de Flickr" name="RestrictedRating"/> + </combo_box> + <button label="Subir" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml index 18eaa834da..8d8f3a9bbb 100755 --- a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Miembros y Roles"/> <accordion_tab name="group_notices_tab" title="Avisos"/> <accordion_tab name="group_land_tab" title="Terreno/Bienes"/> + <accordion_tab name="group_experiences_tab" title="Experiencias"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/es/panel_postcard_settings.xml b/indra/newview/skins/default/xui/es/panel_postcard_settings.xml index 3931319447..75bcd67f1f 100755 --- a/indra/newview/skins/default/xui/es/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/es/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Personalizado" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Ancho" name="postcard_snapshot_width"/> - <spinner label="Altura" name="postcard_snapshot_height"/> - <check_box label="Mantener las proporciones" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Calidad de la imagen" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Ancho × alto" name="postcard_snapshot_width"/> + <check_box label="Mantener las proporciones" name="postcard_keep_aspect_check"/> + <slider label="Calidad:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml index 508bfbcd32..7ccad84b55 100755 --- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Web: </text> - <radio_group name="use_external_browser"> - <radio_item label="Usar mi navegador (IE, Firefox, Safari)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si estás a pantalla completa." value="true"/> - <radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Usar mi navegador (Chrome, Firefox, IE) para todos los enlaces" name="internal" tool_tip="Usa el navegador predeterminado para obtener ayuda, visitar enlaces web, etc. No es aconsejable si estás a pantalla completa." value="0"/> + <radio_item label="Usar el navegador integrado solo para los enlaces de Second Life" name="external" tool_tip="Usa el navegador predeterminado del sistema para obtener ayuda, visitar enlaces web, etc. El navegador integrado solo se utilizará para los enlaces de LindenLab/SecondLife." value="1"/> </radio_group> <check_box initial_value="true" label="Activar plugins" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Aceptar las 'cookies'" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/es/panel_region_experiences.xml b/indra/newview/skins/default/xui/es/panel_region_experiences.xml new file mode 100644 index 0000000000..4b7f82d3fb --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiencias" name="Experiences"> + <panel.string name="trusted_estate_text"> + Cualquier experiencia puede ser clave. + +Las experiencias clave tienen permiso de ejecución en este estado. + +Además, si el estado no admite el acceso público, los residentes que participen en una experiencia clave pueden entrar en el estado y permanecer en él mientras se encuentren en dicha experiencia. + </panel.string> + <panel.string name="allowed_estate_text"> + Solo se permiten las experiencias activas en el terreno. + +Las experiencias permitidas tienen permiso de ejecución en este estado. + </panel.string> + <panel.string name="blocked_estate_text"> + Solo pueden bloquearse las experiencias activas en el Grid. + +Las experiencias bloqueadas no pueden ejecutarse en este estado. + </panel.string> + <panel.string name="estate_caption"> + En esta pestaña, los cambios en la configuración afectarán a todas las regiones del estado. + </panel.string> + <panel.string name="allowed_parcel_text"> + Solo se permiten las experiencias activas en el terreno. + +Las experiencias permitidas tienen permiso de ejecución en esta parcela si no las ha bloqueado el estado. + </panel.string> + <panel.string name="blocked_parcel_text"> + Puede bloquearse cualquier experiencia de los residentes. + +Las experiencias bloqueadas no pueden ejecutarse en esta parcela. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_script_experience.xml b/indra/newview/skins/default/xui/es/panel_script_experience.xml new file mode 100644 index 0000000000..2629a9fa69 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="EXPERIENCIA"> + <button label="Experiencia" name="Expand Experience"/> + <check_box label="Usa las experiencias" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Elegir experiencia..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + No eres colaborador de ninguna experiencia. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml index 12c74b5cd1..c9eea9a58e 100755 --- a/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - Guardar en mi inventario + Inventario </text> <text name="hint_lbl"> Guardar una imagen en el inventario cuesta [UPLOAD_COST] L$. Para guardar una imagen como una textura, selecciona uno de los formatos cuadrados. @@ -13,8 +13,8 @@ <combo_box.item label="Grande (512x512)" name="Large(512x512)"/> <combo_box.item label="Personalizado" name="Custom"/> </combo_box> - <spinner label="Ancho" name="inventory_snapshot_width"/> - <spinner label="Altura" name="inventory_snapshot_height"/> + <spinner label="Ancho × alto" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Mantener las proporciones" name="inventory_keep_aspect_check"/> <button label="Cancelar" name="cancel_btn"/> <button label="Guardar" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_local.xml b/indra/newview/skins/default/xui/es/panel_snapshot_local.xml index 08c45d2e76..d0ea34d612 100755 --- a/indra/newview/skins/default/xui/es/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Guardar en mi ordenador + Disco </text> <combo_box label="Resolución" name="local_size_combo"> <combo_box.item label="Ventana actual" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="Personalizado" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Ancho" name="local_snapshot_width"/> - <spinner label="Altura" name="local_snapshot_height"/> - <check_box label="Mantener las proporciones" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Formato" name="local_format_combo"> - <combo_box.item label="PNG (sin pérdida)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (sin pérdida)" name="BMP"/> - </combo_box> - <slider label="Calidad de la imagen" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Ancho × alto" name="local_snapshot_width"/> + <check_box label="Mantener las proporciones" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Formato: + </text> + <combo_box label="Formato" name="local_format_combo"> + <combo_box.item label="PNG (sin pérdida)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (sin pérdida)" name="BMP"/> + </combo_box> + <slider label="Calidad:" name="image_quality_slider"/> <button label="Cancelar" name="cancel_btn"/> <flyout_button label="Guardar" name="save_btn" tool_tip="Guardar la imagen en un archivo"> <flyout_button.item label="Guardar" name="save_item"/> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml index f4bfc0e0b5..c1955f1fde 100755 --- a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Publicar en los comentarios de Mi perfil" name="save_to_profile_btn"/> - <button label="Correo-e" name="save_to_email_btn"/> - <button label="Guardar en Mi inventario ([AMOUNT] L$)" name="save_to_inventory_btn"/> - <button label="Guardar en mi ordenador" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Enviar a: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="Guardar en disco" name="save_to_computer_btn"/> + <button label="Guardar en inventario (L$[AMOUNT])" name="save_to_inventory_btn"/> + <button label="Subir al perfil" name="save_to_profile_btn"/> + <button label="Subir a Facebook" name="send_to_facebook_btn"/> + <button label="Subir a Twitter" name="send_to_twitter_btn"/> + <button label="Subir a Flickr" name="send_to_flickr_btn"/> + <button label="Enviar por correo electrónico" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml index 649d547ba0..357b432c4c 100755 --- a/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml @@ -10,8 +10,12 @@ Enviando... </string> <text name="title"> - Correo-e + Correo electrónico </text> - <button label="Mensaje" name="message_btn"/> - <button label="Ajustes" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="Mensaje" name="panel_postcard_message"/> + <panel label="Opciones" name="panel_postcard_settings"/> + </tab_container> + <button label="Cancelar" name="cancel_btn"/> + <button label="Enviar" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml index 6a0bc22d68..9fc925835f 100755 --- a/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - Publicar en los comentarios de Mi perfil + Perfil </text> <combo_box label="Resolución" name="profile_size_combo"> <combo_box.item label="Ventana actual" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Personalizado" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Ancho" name="profile_snapshot_width"/> - <spinner label="Altura" name="profile_snapshot_height"/> - <check_box label="Mantener las proporciones" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Título: - </text> - <check_box initial_value="true" label="Incluir ubicación" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Ancho × alto" name="profile_snapshot_width"/> + <check_box label="Mantener las proporciones" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Título: + </text> + <check_box initial_value="true" label="Incluir ubicación" name="add_location_cb"/> <button label="Cancelar" name="cancel_btn"/> <button label="Publicar" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_twitter_photo.xml b/indra/newview/skins/default/xui/es/panel_twitter_photo.xml index be1896b33b..0ae790514a 100644 --- a/indra/newview/skins/default/xui/es/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/es/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - ¿Qué está ocurriendo? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="Incluir ubicación de SL" name="add_location_cb"/> - <check_box initial_value="true" label="Incluir una foto" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> - <combo_box.item label="Ventana actual" name="CurrentWindow"/> - <combo_box.item label="640 × 480" name="640x480"/> - <combo_box.item label="800 × 600" name="800x600"/> - <combo_box.item label="1024 × 768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> - <combo_box.item label="Sin filtro" name="NoFilter"/> - </combo_box> - <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> - <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Tuitear" name="post_photo_btn"/> - <button label="Cancelar" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + ¿Qué está ocurriendo? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Incluir ubicación de SL" name="add_location_cb"/> + <check_box initial_value="true" label="Incluir una foto" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> + <combo_box.item label="Ventana actual" name="CurrentWindow"/> + <combo_box.item label="640 × 480" name="640x480"/> + <combo_box.item label="800 × 600" name="800x600"/> + <combo_box.item label="1024 × 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> + <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> + <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> + <button label="Tuitear" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml index 5e0c21992d..3928ca2ab7 100755 --- a/indra/newview/skins/default/xui/es/role_actions.xml +++ b/indra/newview/skins/default/xui/es/role_actions.xml @@ -71,4 +71,8 @@ <action description="Abrir chat de voz del grupo" longdescription="Quien tenga un rol con esta capacidad puede abrir sesiones de chat de voz del grupo. NOTA: para acceder al chat de voz debe tenerse la capacidad 'Abrir chat de grupo'." name="join voice chat" value="27"/> <action description="Moderar el chat de grupo" longdescription="Quien tenga esta capacidad puede controlar el acceso y la participación en los chats de texto y de voz del grupo." name="moderate group chat" value="37"/> </action_set> + <action_set description="Estas capacidades incluyen la posibilidad de modificar las experiencias propiedad del grupo." name="experience_tools_experience"> + <action description="Admin. de la experiencia" longdescription="Los miembros con un rol que tenga esta capacidad pueden editar los metadatos de una experiencia." name="experience admin" value="49"/> + <action description="Colaborador de la experiencia" longdescription="Los miembros con un rol que tenga esta capacidad pueden incluir scripts en una experiencia." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml index 176247f90e..94c8011768 100755 --- a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Perfil del elemento"> + <panel.string name="loading_experience"> + (cargando) + </panel.string> <panel.string name="unknown"> (desconocidas) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Obtenido: </text> + <text name="LabelItemExperienceTitle"> + Experiencia: + </text> <panel name="perms_inv"> <text name="perm_modify"> Tú puedes: diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index bd339513b3..cabb5ee67b 100755 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -440,6 +440,9 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="TooltipMustSingleDrop"> Aquí se puede arrastrar sólo un ítem </string> + <string name="TooltipTooManyWearables"> + No puedes tener una carpeta de prendas que contenga más de [AMOUNT] elementos. Puedes cambiar este límite en Avanzado > Mostrar las configuraciones del depurador > WearFolderLimit. + </string> <string name="TooltipPrice" value="[AMOUNT] L$:"/> <string name="TooltipOutboxDragToWorld"> No puedes colocar objetos en tu buzón de salida de comerciante @@ -1042,9 +1045,7 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="AgentNameSubst"> (Tú) </string> - <string name="JoinAnExperience"> - Únete a una experiencia - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Suprimir alertas al gestionar las listas de acceso a un estado </string> @@ -1849,6 +1850,9 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="CompileQueueUnknownFailure"> Fallo desconocido en la descarga </string> + <string name="CompileNoExperiencePerm"> + Omitiendo el script [SCRIPT] con la experiencia [EXPERIENCE]. + </string> <string name="CompileQueueTitle"> Recompilando </string> @@ -5174,6 +5178,87 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="UserDictionary"> [Usuario] </string> + <string name="experience_tools_experience"> + Experiencia + </string> + <string name="ExperienceNameNull"> + (sin experiencia) + </string> + <string name="ExperienceNameUntitled"> + (experiencia sin título) + </string> + <string name="Land-Scope"> + Activa en el terreno + </string> + <string name="Grid-Scope"> + Activa en el Grid + </string> + <string name="Allowed_Experiences_Tab"> + PERMITIDO + </string> + <string name="Blocked_Experiences_Tab"> + BLOQUEADO + </string> + <string name="Contrib_Experiences_Tab"> + COLABORADOR + </string> + <string name="Admin_Experiences_Tab"> + ADMIN. + </string> + <string name="Recent_Experiences_Tab"> + RECIENTE + </string> + <string name="Owned_Experiences_Tab"> + PROPIEDAD + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], máx. [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + hacerte con tus controles + </string> + <string name="ExperiencePermission3"> + activar animaciones en tu avatar + </string> + <string name="ExperiencePermission4"> + anexar a tu avatar + </string> + <string name="ExperiencePermission9"> + seguimiento de la cámara + </string> + <string name="ExperiencePermission10"> + controlar tu cámara + </string> + <string name="ExperiencePermission11"> + teleportarte + </string> + <string name="ExperiencePermission12"> + aceptar automáticamente permisos de experiencias + </string> + <string name="ExperiencePermissionShortUnknown"> + ha realizado una operación desconocida: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Ponerte al mando + </string> + <string name="ExperiencePermissionShort3"> + Activar animaciones + </string> + <string name="ExperiencePermissionShort4"> + Anexar + </string> + <string name="ExperiencePermissionShort9"> + Seguir la cámara + </string> + <string name="ExperiencePermissionShort10"> + Controlar la cámara + </string> + <string name="ExperiencePermissionShort11"> + Teleportarte + </string> + <string name="ExperiencePermissionShort12"> + Otorgar permisos + </string> <string name="logging_calls_disabled_log_empty"> No se están registrando las conversaciones. Para empezar a grabar un registro, elige "Guardar: Solo registro" o "Guardar: Registro y transcripciones" en Preferencias > Chat. </string> diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml index 94975a83f8..a9b351b39c 100755 --- a/indra/newview/skins/default/xui/es/teleport_strings.xml +++ b/indra/newview/skins/default/xui/es/teleport_strings.xml @@ -47,6 +47,9 @@ Para repetir el tutorial, visita la isla de bienvenida pública. <message name="MustGetAgeRegion"> Solo pueden acceder a esta región los mayores de 18 años. </message> + <message name="RegionTPSpecialUsageBlocked"> + No puedes entrar en la región. '[REGION_NAME]' es una región de juegos de habilidad, y debes cumplir determinados criterios para poder entrar en ella. Consulta los detalles en las [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life P+F de juegos de habilidad]. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index 25c49b97b5..3de282e8d5 100755 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -312,9 +312,6 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <panel.string name="push_restrict_region_text"> Pas de bousculades (les règles de la région priment) </panel.string> - <panel.string name="see_avs_text"> - Les avatars sur les autres parcelles peuvent voir - </panel.string> <text name="allow_label"> Autoriser les autres résidents à : </text> @@ -340,22 +337,6 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n'y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/> <check_box label="Pas de bousculades" name="PushRestrictCheck" tool_tip="Empêche l'utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/> <check_box label="Voir le lieu dans la recherche (30 L$/sem.)" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/> - <combo_box name="land category with adult"> - <combo_box.item label="Toutes catégories" name="item0"/> - <combo_box.item label="Appartenant aux Lindens" name="item1"/> - <combo_box.item label="Adult" name="item2"/> - <combo_box.item label="Art et Culture" name="item3"/> - <combo_box.item label="Affaires" name="item4"/> - <combo_box.item label="Éducation" name="item5"/> - <combo_box.item label="Jeux" name="item6"/> - <combo_box.item label="Favoris" name="item7"/> - <combo_box.item label="Accueil pour les nouveaux" name="item8"/> - <combo_box.item label="Parcs et Nature" name="item9"/> - <combo_box.item label="Résidentiel" name="item10"/> - <combo_box.item label="Shopping" name="item11"/> - <combo_box.item label="Location" name="item13"/> - <combo_box.item label="Autre" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Toutes catégories" name="item0"/> <combo_box.item label="Appartenant aux Lindens" name="item1"/> @@ -456,15 +437,9 @@ musique : <panel.string name="access_estate_defined"> (défini par le domaine </panel.string> - <panel.string name="allow_public_access"> - Autoriser l'accès public ([MATURITY]) (Remarque : des lignes d'interdiction seront créées si cette case n'est pas cochée) - </panel.string> <panel.string name="estate_override"> Au moins une de ces options est définie au niveau du domaine. </panel.string> - <text name="Limit access to this parcel to:"> - Accès à cette parcelle - </text> <check_box label="Autoriser l'accès public (des lignes d'interdiction seront créées si cette case n'est pas cochée)" name="public_access"/> <text name="Only Allow"> Conditions d'accès des résidents : @@ -496,5 +471,6 @@ musique : <button label="Supprimer" label_selected="Supprimer" name="remove_banned"/> </panel> </panel> + <panel label="EXPÉRIENCES" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_experience_search.xml b/indra/newview/skins/default/xui/fr/floater_experience_search.xml new file mode 100644 index 0000000000..b7a175a066 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="CHOISIR UNE EXPÉRIENCE"/> diff --git a/indra/newview/skins/default/xui/fr/floater_experienceprofile.xml b/indra/newview/skins/default/xui/fr/floater_experienceprofile.xml new file mode 100644 index 0000000000..080c6e4dde --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (aucun) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Profil de l'expérience"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Modifier" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Catégorie : + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Endroit : + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Propriétaire : + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Groupe : + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="Autoriser" name="allow_btn"/> + <button label="Oublier" name="forget_btn"/> + <button label="Bloquer" name="block_btn"/> + <text name="privileged"> + Cette expérience est activée pour tous les résidents. + </text> + <button label="Signaler une infraction" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Nom :"/> + <text name="edit_experience_desc_label" value="Description :"/> + <button label="Groupe" name="Group_btn"/> + <text name="edit_ContentRating"> + Catégorie : + </text> + <icons_combo_box label="Modéré" name="edit_ContentRatingText" tool_tip="Si vous augmentez la catégorie de contenu pour une expérience, les permissions seront réinitialisées pour tous les résidents ayant autorisé l'expérience."> + <icons_combo_box.item label="Adulte" name="Adult" value="42"/> + <icons_combo_box.item label="Modéré" name="Mature" value="21"/> + <icons_combo_box.item label="Général" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Endroit : + </text> + <button label="Définir sur l'emplacement actuel" name="location_btn"/> + <button label="Effacer l'emplacement" name="clear_btn"/> + <check_box label="Activer l'expérience" name="edit_enable_btn" tool_tip=""/> + <check_box label="Cacher dans les résultats de recherche" name="edit_private_btn"/> + <text name="changes" value="Il peut falloir plusieurs minutes pour que l'expérience soit visible dans toutes les régions."/> + <button label="Retour" name="cancel_btn"/> + <button label="Enregistrer" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_experiences.xml b/indra/newview/skins/default/xui/fr/floater_experiences.xml new file mode 100644 index 0000000000..d130129a25 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="EXPÉRIENCES"/> diff --git a/indra/newview/skins/default/xui/fr/floater_facebook.xml b/indra/newview/skins/default/xui/fr/floater_facebook.xml index 12a3c9ae61..f5097e7a88 100644 --- a/indra/newview/skins/default/xui/fr/floater_facebook.xml +++ b/indra/newview/skins/default/xui/fr/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="PUBLIER SUR FACEBOOK"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="STATUT" name="panel_facebook_status"/> - <panel label="PHOTO" name="panel_facebook_photo"/> - <panel label="INDIQUER VOTRE PRÉSENCE" name="panel_facebook_place"/> - <panel label="AMIS" name="panel_facebook_friends"/> - <panel label="COMPTE" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Erreur - </text> - <text name="connection_loading_text"> - Chargement... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="STATUT" name="panel_facebook_status"/> + <panel label="PHOTO" name="panel_facebook_photo"/> + <panel label="INDIQUER VOTRE PRÉSENCE" name="panel_facebook_place"/> + <panel label="AMIS" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Erreur + </text> + <text name="connection_loading_text"> + Chargement... + </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml index 7567817f3a..fdc4000746 100755 --- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Habits" name="check_clothing"/> <check_box label="Gestes" name="check_gesture"/> <check_box label="Repères" name="check_landmark"/> - <check_box label="Maillages" name="check_mesh"/> <check_box label="Notes" name="check_notecard"/> + <check_box label="Maillages" name="check_mesh"/> <check_box label="Objets" name="check_object"/> <check_box label="Scripts" name="check_script"/> <check_box label="Sons" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> Ou il y a... </text> + <radio_group name="date_search_direction"> + <radio_item label="Ultérieure à" name="newer"/> + <radio_item label="Antérieure à" name="older"/> + </radio_group> <spinner label="Heures" name="spin_hours_ago"/> <spinner label="Jours" name="spin_days_ago"/> <button label="Fermer" label_selected="Fermer" name="Close"/> diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml index 39a861d8bd..c93ca5aacb 100644 --- a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml @@ -25,7 +25,7 @@ Normal, fenêtre en arrière-plan </floater.string> <floater.string name="client_frame_time_critical_msg"> - Taux de défilement [CLIENT_FRAME_RATE_CRITICAL] + Taux de défilement client ci-dessous [CLIENT_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="client_frame_time_warning_msg"> Taux de défilement entre [CLIENT_FRAME_RATE_CRITICAL] et [CLIENT_FRAME_RATE_WARNING] @@ -34,16 +34,16 @@ Normal </floater.string> <floater.string name="client_draw_distance_cause_msg"> - Cause possible : limite d'affichage trop élevée + Cause possible : la limite d'affichage est trop élevée </floater.string> <floater.string name="client_texture_loading_cause_msg"> - Cause possible : images en cours de chargement + Cause possible : images en cours de chargement </floater.string> <floater.string name="client_texture_memory_cause_msg"> - Cause possible : trop d'images en mémoire + Cause possible : trop d'images en mémoire </floater.string> <floater.string name="client_complex_objects_cause_msg"> - Cause possible : trop d'objets complexes + Cause possible : trop d'objets complexes dans la scène </floater.string> <floater.string name="network_text_msg"> Réseau @@ -55,10 +55,10 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - La connexion perd plus de [NETWORK_PACKET_LOSS_CRITICAL] % de paquets + La connexion perd plus de [NETWORK_PACKET_LOSS_CRITICAL] % de paquets </floater.string> <floater.string name="network_packet_loss_warning_msg"> - La connexion perd entre [NETWORK_PACKET_LOSS_WARNING] % et [NETWORK_PACKET_LOSS_CRITICAL] % de paquets + La connexion perd entre [NETWORK_PACKET_LOSS_WARNING] % et [NETWORK_PACKET_LOSS_CRITICAL] % de paquets </floater.string> <floater.string name="network_performance_normal_msg"> Normal @@ -70,7 +70,7 @@ 300 </floater.string> <floater.string name="network_ping_critical_msg"> - Connexion ping > [NETWORK_PING_CRITICAL] ms + Temps de connexion ping >[NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_ping_warning_msg"> Connexion ping entre [NETWORK_PING_WARNING] et [NETWORK_PING_CRITICAL] ms @@ -94,31 +94,31 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - Défilement du simulateur < [SERVER_FRAME_RATE_CRITICAL] + Taux de défilement du simulateur au-dessous de [SERVER_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="server_frame_time_warning_msg"> - Défilement simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING] + Taux de défilement du simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING] </floater.string> <floater.string name="server_frame_time_normal_msg"> Normal </floater.string> <floater.string name="server_physics_cause_msg"> - Cause possible : trop d'objets physiques + Cause possible : trop d'objets physiques </floater.string> <floater.string name="server_scripts_cause_msg"> - Cause possible : trop d'objets scriptés + Cause possible : trop d'objets scriptés </floater.string> <floater.string name="server_net_cause_msg"> - Cause possible : trop de trafic réseau + Cause possible : trop de trafic réseau </floater.string> <floater.string name="server_agent_cause_msg"> - Cause possible : trop de personnes en mouvement + Cause possible : trop de personnes en mouvement dans la région </floater.string> <floater.string name="server_images_cause_msg"> - Cause possible : trop de calculs d'images + Cause possible : trop de calculs d'images </floater.string> <floater.string name="server_generic_cause_msg"> - Cause possible : charge simulateur trop lourde + Cause possible : charge simulateur trop lourde </floater.string> <floater.string name="smaller_label"> >> @@ -126,21 +126,21 @@ <floater.string name="bigger_label"> << </floater.string> - <button name="client_lagmeter" tool_tip="Statut du lag client"/> + <button name="client_lagmeter" tool_tip="Statut du lag au niveau du client"/> <text name="client"> Client </text> <text name="client_text"> Normal </text> - <button name="network_lagmeter" tool_tip="Statut du lag réseau"/> + <button name="network_lagmeter" tool_tip="Statut du lag au niveau du réseau"/> <text name="network"> Réseau </text> <text name="network_text"> Normal </text> - <button name="server_lagmeter" tool_tip="Statut du lag serveur"/> + <button name="server_lagmeter" tool_tip="Statut du lag au niveau du serveur"/> <text name="server"> Serveur </text> diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml index 7647452e91..d69c311a8e 100755 --- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> SCRIPT : [NAME] </floater.string> + <floater.string name="experience_enabled"> + Supprimer la coche pour supprimer l'expérience actuelle + </floater.string> + <floater.string name="no_experiences"> + Vous n'êtes autorisé(e) pour aucune expérience. + </floater.string> + <floater.string name="add_experiences"> + Sélectionner pour ajouter une expérience + </floater.string> + <floater.string name="show_experience_profile"> + Cliquer pour afficher le profil de l'expérience + </floater.string> + <floater.string name="loading"> + Chargement... + </floater.string> <button label="Réinitialiser" label_selected="Réinitialiser" name="Reset"/> <check_box initial_value="true" label="Exécution en cours" name="running"/> <check_box initial_value="true" label="Mono" name="mono"/> + <check_box label="Utiliser la ou les expériences :" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml index 4e046ff3f3..ee969169d2 100755 --- a/indra/newview/skins/default/xui/fr/floater_openobject.xml +++ b/indra/newview/skins/default/xui/fr/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="Copier vers l'inventaire" label_selected="Copier vers l'inventaire" name="copy_to_inventory_button" width="132"/> - <button label="Copier et porter" label_selected="Copier et porter" left="152" name="copy_and_wear_button"/> + <button label="Copier dans l'inventaire" label_selected="Copier dans l'inventaire" name="copy_to_inventory_button" width="132"/> + <button label="Copier et ajouter à la tenue" label_selected="Copier et ajouter à la tenue" left="152" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml index 153be444e5..638f0d68ff 100755 --- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml @@ -76,7 +76,7 @@ <combo_box.item label="Terrain > Empiètement > Objets ou textures" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terrain > Empiètement > Particules" name="Land__Encroachment__Particles"/> <combo_box.item label="Terrain > Empiètement > Arbres/plantes" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Paris ou jeux d'argent" name="Wagering_gambling"/> + <combo_box.item label="Violation du règlement pour les jeux" name="Wagering_gambling"/> <combo_box.item label="Autre" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml index ab2256e356..8eb05dd945 100755 --- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> Échec d'enregistrement sur l'ordinateur. </string> - <button name="advanced_options_btn" tool_tip="Options avancées"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] px - </text> - <text name="file_size_label"> - [SIZE] Ko - </text> + <button label="ACTUALISER" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - OPTIONS AVANCÉES - </text> <text name="layer_type_label"> Capturer : </text> @@ -68,4 +59,10 @@ <combo_box.item label="Aucun filtre" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] px (largeur) x [HEIGHT] px (hauteur) + </text> + <text name="file_size_label"> + [SIZE] Ko + </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml index eb084d9184..2c411933a8 100755 --- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> Aucun résultat. </floater.string> + <floater.string name="URLs"> + URL + </floater.string> + <floater.string name="memory"> + Mémoire (Ko) + </floater.string> <text name="title_text"> Chargement... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Propriétaire" name="owner"/> <scroll_list.columns label="Lieu" name="location"/> <scroll_list.columns label="Parcelle" name="parcel"/> - <scroll_list.columns label="Temps" name="time"/> + <scroll_list.columns label="Date" name="time"/> <scroll_list.columns label="URL" name="URLs"/> <scroll_list.columns label="Mémoire (Ko)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/fr/floater_twitter.xml b/indra/newview/skins/default/xui/fr/floater_twitter.xml index 9ca2b0d48d..608b02dced 100644 --- a/indra/newview/skins/default/xui/fr/floater_twitter.xml +++ b/indra/newview/skins/default/xui/fr/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="COMPOSER" name="panel_twitter_photo"/> - <panel label="COMPTE" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Erreur - </text> - <text name="connection_loading_text"> - Chargement... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="COMPOSER" name="panel_twitter_photo"/> + <panel label="COMPTE" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Erreur + </text> + <text name="connection_loading_text"> + Chargement... + </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml index 364872c875..c21caae0b2 100755 --- a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="Trier en commençant par le plus récent" name="sort_by_recent"/> <menu_item_check label="Toujours trier les dossiers par nom" name="sort_folders_by_name"/> <menu_item_check label="Dossiers système en premier" name="sort_system_folders_to_top"/> - <menu_item_call label="Afficher les filtres" name="show_filters"/> + <menu_item_call label="Afficher les filtres..." name="show_filters"/> <menu_item_call label="Réinitialiser les filtres" name="reset_filters"/> <menu_item_call label="Fermer tous les dossiers" name="close_folders"/> <menu_item_call label="Vider les objets trouvés" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/fr/menu_url_experience.xml b/indra/newview/skins/default/xui/fr/menu_url_experience.xml new file mode 100644 index 0000000000..90c0ce6765 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 6e36d19ba9..a2b9bab7e9 100755 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Nouvelle fenêtre d'inventaire" name="NewInventoryWindow"/> <menu_item_call label="Endroits..." name="Places"/> <menu_item_call label="Favoris..." name="Picks"/> + <menu_item_call label="Expériences..." name="Experiences"/> <menu_item_call label="Contrôles de la caméra..." name="Camera Controls"/> <menu label="Déplacement" name="Movement"> <menu_item_call label="M'asseoir" name="Sit Down Here"/> @@ -48,7 +49,7 @@ <menu_item_check label="Amis" name="My Friends"/> <menu_item_check label="Groupes" name="My Groups"/> <menu_item_check label="Personnes près de vous" name="Active Speakers"/> - <menu_item_call label="Liste des ignorés" name="Block List"/> + <menu_item_check label="Liste des ignorés" name="Block List"/> <menu_item_check label="Ne pas déranger" name="Do Not Disturb"/> </menu> <menu label="Monde" name="World"> diff --git a/indra/newview/skins/default/xui/fr/mime_types_linux.xml b/indra/newview/skins/default/xui/fr/mime_types_linux.xml index 3a7ff979ee..93d1406ba5 100755 --- a/indra/newview/skins/default/xui/fr/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/fr/mime_types_linux.xml @@ -44,6 +44,14 @@ Lire le contenu audio qui se trouve ici </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Aucun contenu + </label> + <tooltip name="none_tooltip"> + Aucun média ici + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Flux en temps réel diff --git a/indra/newview/skins/default/xui/fr/mime_types_mac.xml b/indra/newview/skins/default/xui/fr/mime_types_mac.xml index 3a7ff979ee..93d1406ba5 100755 --- a/indra/newview/skins/default/xui/fr/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/fr/mime_types_mac.xml @@ -44,6 +44,14 @@ Lire le contenu audio qui se trouve ici </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Aucun contenu + </label> + <tooltip name="none_tooltip"> + Aucun média ici + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Flux en temps réel diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 2325c8e34d..28689a93d6 100755 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -73,6 +73,10 @@ Détails de l'erreur : La notification, appelée '[_NAME]', est i [MESSAGE] <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez [http://get.secondlife.com télécharger la dernière version] du client. <usetemplate name="okbutton" yestext="OK"/> @@ -574,6 +578,9 @@ La qualité des graphiques peut être augmentée à la section Préférences > <notification name="RegionNoTerraforming"> Le terraformage est interdit dans la région [REGION]. </notification> + <notification name="ParcelNoTerraforming"> + Vous n'êtes pas autorisé(e) à terraformer la parcelle [PARCEL]. + </notification> <notification name="CannotCopyWarning"> Vous n'êtes pas autorisé à copier les articles suivants : [ITEMS]. @@ -1824,6 +1831,30 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ? <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> </notification> + <notification label="Sélectionner un domaine" name="EstateAllowedExperienceAdd"> + Ajouter à la liste des expériences autorisées uniquement pour ce domaine ou pour [ALL_ESTATES] ? + <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> + </notification> + <notification label="Sélectionner un domaine" name="EstateAllowedExperienceRemove"> + Supprimer de la liste des expériences autorisées uniquement pour ce domaine ou pour [ALL_ESTATES] ? + <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> + </notification> + <notification label="Sélectionner un domaine" name="EstateBlockedExperienceAdd"> + Ajouter à la liste des expériences bloquées uniquement pour ce domaine ou pour [ALL_ESTATES] + <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> + </notification> + <notification label="Sélectionner un domaine" name="EstateBlockedExperienceRemove"> + Supprimer de la liste des expériences bloquées uniquement pour ce domaine ou pour [ALL_ESTATES] ? + <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> + </notification> + <notification label="Sélectionner un domaine" name="EstateTrustedExperienceAdd"> + Ajouter à la liste des clés uniquement pour ce domaine ou pour [ALL_ESTATES] ? + <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> + </notification> + <notification label="Sélectionner un domaine" name="EstateTrustedExperienceRemove"> + Supprimer de la liste des clés uniquement pour ce domaine ou pour [ALL_ESTATES] ? + <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> + </notification> <notification label="Confirmer" name="EstateKickUser"> Éjecter [EVIL_USER] de ce domaine ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> @@ -1898,6 +1929,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po Nous rencontrons des difficultés techniques au niveau de votre téléportation car vos préférences ne sont pas synchronisées avec le serveur. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + Impossible de pénétrer dans la région. « [REGION_NAME] » est une région de jeux d'adresse et vous devez satisfaire à certains critères pour y pénétrer. Pour en savoir plus, consultez la page [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life FAQ sur les jeux d'adresse]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> Aucune autre notification vous informant que vous allez visiter une région au contenu [RATING] ne vous sera envoyée. Vous pouvez modifier vos préférences de contenu à l'avenir en accédant à Moi > Préférences > Général, à partir de la barre de menus. <usetemplate name="okbutton" yestext="OK"/> @@ -2205,6 +2240,9 @@ Voulez-vous le remplacer par l'objet sélectionné ? <button ignore="Ne jamais remplacer" name="No" text="Annuler"/> </form> </notification> + <notification name="TooManyWearables"> + Vous ne pouvez pas porter un dossier contenant plus de [AMOUNT] articles. Vous pouvez modifier cette limite dans Avancé > Afficher les paramètres de débogage > WearFolderLimit. + </notification> <notification label="Avertissement de mode Ne pas déranger" name="DoNotDisturbModePay"> Vous avez activé Ne pas déranger. Vous ne recevrez aucun article proposé en échange de ce paiement. @@ -2814,7 +2852,7 @@ Si vous restez dans cette région, vous serez déconnecté(e). [MESSAGE] -Venant de l'objet : <nolink>[OBJECTNAME]</nolink>, propriétaire : [NAME] ? +Venant de l'objet : <nolink>[OBJECTNAME]</nolink>, propriétaire : [NAME] <form name="form"> <button name="Gotopage" text="Charger"/> <button name="Cancel" text="Annuler"/> @@ -2840,6 +2878,72 @@ Acceptez-vous ? <button name="Mute" text="Interdire"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + Impossible d'acquérir une nouvelle expérience : + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Une modification du groupe de l'expérience a été ignorée, car le propriétaire n'est pas membre du groupe sélectionné. + </notification> + <notification name="UneditableExperienceProfileMessage"> + Le champ non modifiable « [field] » a été ignoré lors de la mise à jour du profil de l'expérience. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Modifications du champ « [field] » ignorées, car il ne peut être défini que par le propriétaire de l'expérience. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Vous ne pouvez pas définir une catégorie de contenu plus élevée pour une expérience que pour son propriétaire. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Les termes suivants ont empêché la mise à jour du nom et/ou de la description du profil de l'expérience : [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Vous avez été téléporté(e) hors de la région [region_name], car vous avez supprimé l'expérience secondlife:///app/experience/[public_id]/profile et n'êtes plus autorisé(e) dans cette région. + <form name="form"> + <ignore name="ignore" text="Éjecté(e) de la région pour cause de suppression d'une expérience"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + Vous avez été autorisé(e) à pénétrer dans la région [region_name] en participant à l'expérience avec clé secondlife:///app/experience/[public_id]/profile. Si vous supprimez cette expérience, vous risquez d'être éjecté(e) de cette région. + <form name="form"> + <ignore name="ignore" text="Autorisé(e) dans une région par une expérience"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + Vous n'avez pas accès à cette destination. Vous pouvez être autorisé(e) à pénétrer dans la région en acceptant une expérience ci-dessous : + +[EXPERIENCE_LIST] + +Il est possible que d'autres expériences avec clé soient disponibles. + </notification> + <notification name="ExperienceEvent"> + Un objet a été autorisé à [EventType] par l'expérience secondlife:///app/experience/[public_id]/profile. + Propriétaire : secondlife:///app/agent/[OwnerID]/inspect + Nom de l'objet : [ObjectName] + Nom de la parcelle : [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + Une pièce jointe a été autorisée à [EventType] par l'expérience secondlife:///app/experience/[public_id]/profile. + Propriétaire : secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + « <nolink>[OBJECTNAME]</nolink> », un objet appartenant à « [NAME] », demande votre participation à l'expérience [GRID_WIDE] : + +[EXPERIENCE] + +Une fois l'autorisation accordée, vous ne verrez plus ce message pour cette expérience, sauf si elle est révoquée dans le profil de l'expérience. + +Les scripts associés à cette expérience pourront effectuer les actions suivantes dans les régions dans lesquelles l'expérience est active : + +[QUESTIONS]Acceptez-vous ? + <form name="form"> + <button name="BlockExperience" text="Bloquer l'expérience"/> + <button name="Mute" text="Ignorer l'objet"/> + <button name="Yes" text="Oui"/> + <button name="No" text="Non"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Avertissement : l'objet <nolink>[OBJECTNAME]</nolink> souhaite un accès total à votre compte en Linden dollars. Si vous autorisez cet accès, il pourra supprimer des fonds de votre compte à tout moment ou le vider entièrement de façon continue sans avis préalable. @@ -3158,6 +3262,10 @@ Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] seco <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ([EXISTENCE] secondes d'existence) Texture figée de [RESOLUTION] mise à jour localement pour [BODYREGION] au bout de [TIME] secondes. + </notification> + <notification name="CannotUploadTexture"> + Chargement de la texture impossible. +[REASON] </notification> <notification name="LivePreviewUnavailable"> Impossible d'afficher un aperçu de cette texture car il s'agit d'une texture sans copie et/ou transfert. diff --git a/indra/newview/skins/default/xui/fr/panel_experience_info.xml b/indra/newview/skins/default/xui/fr/panel_experience_info.xml new file mode 100644 index 0000000000..e830ce1ba6 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Profil de l'expérience"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Endroit : + </text> + <text name="LocationTextText"> + quelque part + </text> + <button label="Téléporter" name="teleport_btn"/> + <button label="Carte" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Boutique de la Place du marché : + </text> + <text name="LocationTextText"> + quelque part + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Catégorie : + </text> + <text name="ContentRatingText"> + Adulte + </text> + <text name="Owner"> + Propriétaire : + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Modifier" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/fr/panel_experience_list_editor.xml new file mode 100644 index 0000000000..d1c448b425 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + en cours de chargement... + </panel.string> + <panel.string name="panel_allowed"> + Expériences autorisées : + </panel.string> + <panel.string name="panel_blocked"> + Expériences bloquées : + </panel.string> + <panel.string name="panel_trusted"> + Expériences avec clé : + </panel.string> + <panel.string name="no_results"> + (vide) + </panel.string> + <text name="text_name"> + Liste des expériences + </text> + <scroll_list name="experience_list"> + <columns label="Nom" name="experience_name"/> + </scroll_list> + <button label="Ajouter..." name="btn_add"/> + <button label="Supprimer" name="btn_remove"/> + <button label="Profil..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_experience_list_item.xml b/indra/newview/skins/default/xui/fr/panel_experience_list_item.xml new file mode 100644 index 0000000000..c28f85f5eb --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Dummy Name + </text> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_experience_log.xml b/indra/newview/skins/default/xui/fr/panel_experience_log.xml new file mode 100644 index 0000000000..cc9eb3dbe3 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="Aucun événement."/> + <string name="loading" value="en cours de chargement..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Durée" name="time"/> + <columns label="Événement" name="event"/> + <columns label="Expérience" name="experience_name"/> + <columns label="Objet" name="object_name"/> + </scroll_list> + <button label="Prévenir" name="btn_notify"/> + <button label="Profil" name="btn_profile_xp"/> + <button label="Signaler" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Prévenir de tous les événements jours" name="notify_all"/> + <button label="Effacer" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_experience_search.xml b/indra/newview/skins/default/xui/fr/panel_experience_search.xml new file mode 100644 index 0000000000..13495057d4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + '[TEXT]' introuvable + </string> + <string name="no_results"> + Aucun résultat + </string> + <string name="searching"> + Recherche... + </string> + <string name="loading"> + Chargement... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="OK" name="find"/> + <icons_combo_box label="Modéré" name="maturity"> + <icons_combo_box.item label="Adulte" name="Adult" value="42"/> + <icons_combo_box.item label="Modéré" name="Mature" value="21"/> + <icons_combo_box.item label="Général" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Nom" name="experience_name"/> + <columns label="Propriétaire" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Annuler" name="cancel_btn"/> + <button label="Voir le profil" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_experiences.xml b/indra/newview/skins/default/xui/fr/panel_experiences.xml new file mode 100644 index 0000000000..f95a664531 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Chargement des expériences..."/> + <string name="no_experiences" value="Aucune expérience."/> + <string name="acquire" value="Acquérir une expérience"/> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml b/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml index 3ac0ce229c..319737a2af 100644 --- a/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Vous n'avez actuellement aucun ami Facebook qui est également résident de Second Life. Invitez vos amis Facebook à rejoindre Second Life !"/> - <string name="facebook_friends_no_connected" value="Vous n'êtes pas connecté(e) à Facebook. Allez à l'onglet Compte pour vous connecter et activer cette fonctionnalité."/> + <string name="facebook_friends_no_connected" value="Vous n'êtes pas connecté(e) à Facebook. Allez à l'onglet Statut pour vous connecter et activer cette fonctionnalité."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="Amis SL"/> <accordion_tab name="tab_suggested_friends" title="Ajouter ces personnes en tant qu'amis SL"/> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml b/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml index c5b09c4bcc..3236f35b55 100644 --- a/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> - <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> - <combo_box.item label="640 x 480" name="640x480"/> - <combo_box.item label="800 x 600" name="800x600"/> - <combo_box.item label="1 024 x 768" name="1024x768"/> - <combo_box.item label="1 200 x 630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtres d'image"> - <combo_box.item label="Aucun filtre" name="NoFilter"/> - </combo_box> - <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> - <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> - <text name="caption_label"> - Commentaire (facultatif) : - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Publier" name="post_photo_btn"/> - <button label="Annuler" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> + <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> + <combo_box.item label="640 x 480" name="640x480"/> + <combo_box.item label="800 x 600" name="800x600"/> + <combo_box.item label="1 024 x 768" name="1024x768"/> + <combo_box.item label="1 200 x 630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> + <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> + <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> + <text name="caption_label"> + Commentaire (facultatif) : + </text> + <button label="Publier" name="post_photo_btn"/> + <button label="Annuler" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_place.xml b/indra/newview/skins/default/xui/fr/panel_facebook_place.xml index 0eaea66ad4..f8e597450b 100644 --- a/indra/newview/skins/default/xui/fr/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/fr/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Dites quelque chose au sujet du lieu où vous vous trouvez : - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Publier" name="post_place_btn"/> - <button label="Annuler" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Dites quelque chose au sujet du lieu où vous vous trouvez : + </text> + <check_box initial_value="false" label="Inclure la vue aérienne du lieu" name="add_place_view_cb"/> + <button label="Publier" name="post_place_btn"/> + <button label="Annuler" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_status.xml b/indra/newview/skins/default/xui/fr/panel_facebook_status.xml index 260378978b..9afa42d2aa 100644 --- a/indra/newview/skins/default/xui/fr/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/fr/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - À quoi pensez-vous ? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Publier" name="post_status_btn"/> - <button label="Annuler" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Vous êtes connecté(e) à Facebook en tant que :"/> + <string name="facebook_disconnected" value="Pas connecté(e) à Facebook"/> + <text name="account_caption_label"> + Pas connecté(e) à Facebook. + </text> + <panel name="panel_buttons"> + <button label="Connexion..." name="connect_btn"/> + <button label="Déconnexion" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Apprenez comment publier sur Facebook] + </text> + </panel> + <text name="status_caption_label"> + À quoi pensez-vous ? + </text> + <button label="Publier" name="post_status_btn"/> + <button label="Annuler" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml index 63738a773a..7b3a176703 100644 --- a/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> - <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> - <combo_box.item label="640 x 480" name="640x480"/> - <combo_box.item label="800 x 600" name="800x600"/> - <combo_box.item label="1 024 x 768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtres d'image"> - <combo_box.item label="Aucun filtre" name="NoFilter"/> - </combo_box> - <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> - <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> - <text name="title_label"> - Titre : - </text> - <text name="description_label"> - Description : - </text> - <check_box initial_value="true" label="Inclure l'emplacement SL à la fin de la description" name="add_location_cb"/> - <text name="tags_label"> - Balises : - </text> - <text name="tags_help_label"> - Séparer les balises par des espaces + <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> + <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> + <combo_box.item label="640 x 480" name="640x480"/> + <combo_box.item label="800 x 600" name="800x600"/> + <combo_box.item label="1 024 x 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> + <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> + <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> + <text name="title_label"> + Titre : + </text> + <text name="description_label"> + Description : + </text> + <check_box initial_value="true" label="Inclure l'emplacement SL à la fin de la description" name="add_location_cb"/> + <text name="tags_label"> + Balises : + </text> + <text name="tags_help_label"> + Séparer les balises par des espaces Utiliser "" pour les balises contenant plusieurs mots - </text> - <combo_box name="rating_combobox" tool_tip="Catégorie de contenu Flickr"> - <combo_box.item label="Catégorie de contenu Flickr sûr" name="SafeRating"/> - <combo_box.item label="Catégorie de contenu Flickr modéré" name="ModerateRating"/> - <combo_box.item label="Catégorie de contenu Flickr réservé aux adultes" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Charger" name="post_photo_btn"/> - <button label="Annuler" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Catégorie de contenu Flickr"> + <combo_box.item label="Catégorie de contenu Flickr sûr" name="SafeRating"/> + <combo_box.item label="Catégorie de contenu Flickr modéré" name="ModerateRating"/> + <combo_box.item label="Catégorie de contenu Flickr réservé aux adultes" name="RestrictedRating"/> + </combo_box> + <button label="Charger" name="post_photo_btn"/> + <button label="Annuler" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml index 7c3b852de1..bea114af6c 100755 --- a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Rôles et membres"/> <accordion_tab name="group_notices_tab" title="Notices"/> <accordion_tab name="group_land_tab" title="Terrain/Actifs"/> + <accordion_tab name="group_experiences_tab" title="Expériences"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml b/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml index 945a5e0272..eebf84c0d0 100755 --- a/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1 024 x 768" name="1024x768"/> <combo_box.item label="Personnalisée" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Larg." name="postcard_snapshot_width"/> - <spinner label="Haut." name="postcard_snapshot_height"/> - <check_box label="Conserver les proportions" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Qualité image" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Largeur x Hauteur" name="postcard_snapshot_width"/> + <check_box label="Conserver les proportions" name="postcard_keep_aspect_check"/> + <slider label="Qualité :" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index 50f4a49bd0..e2f9b9567c 100755 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Web : </text> - <radio_group name="use_external_browser"> - <radio_item label="Utiliser mon navigateur (IE, Firefox, Safari)" name="external" tool_tip="Utiliser le navigateur web système par défaut pour l'aide, les liens etc. Non recommandé en mode plein écran." value="true"/> - <radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l'aide, ouvrir des liens, etc. Ce navigateur s'ouvre dans [APP_NAME]." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Utiliser mon navigateur (Chrome, Firefox, IE) pour tous les liens" name="internal" tool_tip="Utiliser le navigateur web système par défaut pour l'aide, les liens, etc. Non recommandé en mode plein écran." value="0"/> + <radio_item label="Utiliser le navigateur intégré pour les liens Second Life uniquement" name="external" tool_tip="Utilisez le navigateur web système par défaut pour l'aide, les liens Web, etc. Le navigateur intégré sera uniquement utilisé pour les liens LindenLab/SecondLife." value="1"/> </radio_group> <check_box initial_value="true" label="Activer les plugins" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Accepter les cookies" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/fr/panel_region_experiences.xml b/indra/newview/skins/default/xui/fr/panel_region_experiences.xml new file mode 100644 index 0000000000..be9c99b009 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Expériences" name="Experiences"> + <panel.string name="trusted_estate_text"> + Toute expérience peut être une expérience avec clé. + +Les expériences avec clé peuvent s'exécuter dans ce domaine. + +En outre, si le domaine n'autorise pas l'accès public, les résidents participant à une expérience avec clé peuvent pénétrer dans ce domaine et y rester tant qu'ils participent à ladite expérience. + </panel.string> + <panel.string name="allowed_estate_text"> + Seules les expériences à l'échelle des terrains peuvent être autorisées. + +Les expériences autorisées peuvent s'exécuter dans ce domaine. + </panel.string> + <panel.string name="blocked_estate_text"> + Seules les expériences à l'échelle de la grille peuvent être bloquées. + +Les expériences bloquées ne peuvent pas s'exécuter dans ce domaine. + </panel.string> + <panel.string name="estate_caption"> + Les modifications des paramètres de cet onglet affecteront toutes les régions du domaine. + </panel.string> + <panel.string name="allowed_parcel_text"> + Seules les expériences à l'échelle des terrains peuvent être autorisées. + +Les expériences autorisées peuvent s'exécuter sur cette parcelle si elles ne sont pas bloquées par le domaine. + </panel.string> + <panel.string name="blocked_parcel_text"> + Toute expérience de résident peut être bloquée. + +Les expériences bloquées ne peuvent pas s'exécuter dans cette parcelle. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_script_experience.xml b/indra/newview/skins/default/xui/fr/panel_script_experience.xml new file mode 100644 index 0000000000..dde84ed845 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="EXPÉRIENCE"> + <button label="Expérience" name="Expand Experience"/> + <check_box label="Utilise la ou les expériences :" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Choisir une expérience..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + Vous ne contribuez à aucune expérience. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml index 472c4a5e8f..a560ff8d5e 100755 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - Enregistrer dans l'inventaire + Inventaire </text> <text name="hint_lbl"> L'enregistrement d'une image dans l'inventaire coûte [UPLOAD_COST] L$. Pour enregistrer votre image sous forme de texture, sélectionnez un format carré. @@ -13,8 +13,8 @@ <combo_box.item label="Grande (512 x 512)" name="Large(512x512)"/> <combo_box.item label="Personnalisée" name="Custom"/> </combo_box> - <spinner label="Largeur" name="inventory_snapshot_width"/> - <spinner label="Hauteur" name="inventory_snapshot_height"/> + <spinner label="Largeur x Hauteur" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Conserver les proportions" name="inventory_keep_aspect_check"/> <button label="Annuler" name="cancel_btn"/> <button label="Enregistrer" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml index 97dc3e7e2b..8d361f0605 100755 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Enregistrer sur l'ordinateur + Disque </text> <combo_box label="Résolution" name="local_size_combo"> <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1 600 x 1 200" name="1600x1200"/> <combo_box.item label="Personnalisée" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Largeur" name="local_snapshot_width"/> - <spinner label="Hauteur" name="local_snapshot_height"/> - <check_box label="Conserver les proportions" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Format" name="local_format_combo"> - <combo_box.item label="PNG (sans perte)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (sans perte)" name="BMP"/> - </combo_box> - <slider label="Qualité image" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Largeur x Hauteur" name="local_snapshot_width"/> + <check_box label="Conserver les proportions" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Format : + </text> + <combo_box label="Format" name="local_format_combo"> + <combo_box.item label="PNG (sans perte)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (sans perte)" name="BMP"/> + </combo_box> + <slider label="Qualité :" name="image_quality_slider"/> <button label="Annuler" name="cancel_btn"/> <flyout_button label="Enregistrer" name="save_btn" tool_tip="Enregistrer l'image dans un fichier."> <flyout_button.item label="Enregistrer" name="save_item"/> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml index bb858d5d23..eb724f4bd1 100755 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Publier sur le flux de mon profil" name="save_to_profile_btn"/> - <button label="Envoyer par e-mail" name="save_to_email_btn"/> + <button label="Enreg. sur le disque" name="save_to_computer_btn"/> <button label="Enreg. dans l'inventaire ([AMOUNT] L$)" name="save_to_inventory_btn"/> - <button label="Enreg. sur l'ordinateur" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Envoyer à : [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="Charger dans le profil" name="save_to_profile_btn"/> + <button label="Charger sur Facebook" name="send_to_facebook_btn"/> + <button label="Charger sur Twitter" name="send_to_twitter_btn"/> + <button label="Charger sur Flickr" name="send_to_flickr_btn"/> + <button label="Envoyer par e-mail" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml index 82a4815144..067fa091d8 100755 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml @@ -12,6 +12,10 @@ <text name="title"> E-mail </text> - <button label="Message" name="message_btn"/> - <button label="Paramètres" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="Message" name="panel_postcard_message"/> + <panel label="Paramètres" name="panel_postcard_settings"/> + </tab_container> + <button label="Annuler" name="cancel_btn"/> + <button label="Envoyer" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml index 427ffe2113..b87d62bedd 100755 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - Publier sur le flux de mon profil + Profil </text> <combo_box label="Résolution" name="profile_size_combo"> <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1 024 x 768" name="1024x768"/> <combo_box.item label="Personnalisée" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Largeur" name="profile_snapshot_width"/> - <spinner label="Hauteur" name="profile_snapshot_height"/> - <check_box label="Conserver les proportions" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Légende : - </text> - <check_box initial_value="true" label="Inclure l'endroit" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Largeur x Hauteur" name="profile_snapshot_width"/> + <check_box label="Conserver les proportions" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Légende : + </text> + <check_box initial_value="true" label="Inclure l'endroit" name="add_location_cb"/> <button label="Annuler" name="cancel_btn"/> <button label="Publier" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml b/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml index 2d3888f4c2..3e23e5d577 100644 --- a/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - Que se passe-t-il ? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="Inclure l'emplacement SL" name="add_location_cb"/> - <check_box initial_value="true" label="Inclure une photo" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> - <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> - <combo_box.item label="640 x 480" name="640x480"/> - <combo_box.item label="800 x 600" name="800x600"/> - <combo_box.item label="1 024 x 768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtres d'image"> - <combo_box.item label="Aucun filtre" name="NoFilter"/> - </combo_box> - <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> - <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Envoyer tweet" name="post_photo_btn"/> - <button label="Annuler" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + Que se passe-t-il ? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Inclure l'emplacement SL" name="add_location_cb"/> + <check_box initial_value="true" label="Inclure une photo" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> + <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> + <combo_box.item label="640 x 480" name="640x480"/> + <combo_box.item label="800 x 600" name="800x600"/> + <combo_box.item label="1 024 x 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> + <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> + <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> + <button label="Envoyer tweet" name="post_photo_btn"/> + <button label="Annuler" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml index 25920da4c3..966e3440e5 100755 --- a/indra/newview/skins/default/xui/fr/role_actions.xml +++ b/indra/newview/skins/default/xui/fr/role_actions.xml @@ -71,4 +71,8 @@ <action description="Participer au chat vocal" longdescription="Participez au chat vocal du groupe. Remarque : vous devez au préalable avoir le pouvoir de participer aux chats." name="join voice chat" value="27"/> <action description="Modérer les chats" longdescription="Contrôlez l'accès et la participation aux chats de groupe écrits et vocaux." name="moderate group chat" value="37"/> </action_set> + <action_set description="Ces pouvoirs incluent la possibilité de modifier les expériences appartenant à ce groupe." name="experience_tools_experience"> + <action description="Administrateur des expériences" longdescription="Les membres dotés d'un rôle avec ce pouvoir peuvent modifier les métadonnées pour cette expérience." name="experience admin" value="49"/> + <action description="Contributeur aux expériences" longdescription="Les membres dotés d'un rôle avec ce pouvoir peuvent contribuer des scripts pour une expérience." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml index e7fc7859c9..502dc919b1 100755 --- a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Profil de l'article"> + <panel.string name="loading_experience"> + (chargement) + </panel.string> <panel.string name="unknown"> (inconnu) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Acquis le : </text> + <text name="LabelItemExperienceTitle"> + Expérience : + </text> <panel name="perms_inv"> <text name="perm_modify"> Vous pouvez : diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index b3ce171633..8df13b2661 100755 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -449,6 +449,9 @@ Veuillez réessayer de vous connecter dans une minute. <string name="TooltipMustSingleDrop"> Impossible de faire glisser plus d'un objet ici </string> + <string name="TooltipTooManyWearables"> + Vous ne pouvez pas porter un dossier contenant plus de [AMOUNT] articles. Vous pouvez modifier cette limite dans Avancé > Afficher les paramètres de débogage > WearFolderLimit. + </string> <string name="TooltipPrice" value="[AMOUNT] L$ :"/> <string name="TooltipOutboxDragToWorld"> Impossible de rezzer des articles dans la boîte d'envoi vendeur @@ -1060,9 +1063,7 @@ Veuillez réessayer de vous connecter dans une minute. <string name="AgentNameSubst"> (Vous) </string> - <string name="JoinAnExperience"> - Rejoindre une expérience - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Supprimer les alertes lors de la gestion des listes d'accès aux domaines </string> @@ -1873,6 +1874,9 @@ Veuillez réessayer de vous connecter dans une minute. <string name="CompileQueueUnknownFailure"> Échec du téléchargement, erreur inconnue </string> + <string name="CompileNoExperiencePerm"> + En train d'ignorer le script [SCRIPT] avec l'expérience [EXPERIENCE]. + </string> <string name="CompileQueueTitle"> Recompilation - progrès </string> @@ -5264,6 +5268,87 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="UserDictionary"> [User] </string> + <string name="experience_tools_experience"> + Expérience + </string> + <string name="ExperienceNameNull"> + (aucune expérience) + </string> + <string name="ExperienceNameUntitled"> + (expérience sans titre) + </string> + <string name="Land-Scope"> + À l'échelle des terrains + </string> + <string name="Grid-Scope"> + À l'échelle de la grille + </string> + <string name="Allowed_Experiences_Tab"> + AUTORISÉE + </string> + <string name="Blocked_Experiences_Tab"> + BLOQUÉE + </string> + <string name="Contrib_Experiences_Tab"> + CONTRIBUTEUR + </string> + <string name="Admin_Experiences_Tab"> + ADMIN + </string> + <string name="Recent_Experiences_Tab"> + RÉCENTE + </string> + <string name="Owned_Experiences_Tab"> + AVEC PROPRIÉTAIRE + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], [MAXEXPERIENCES] max.) + </string> + <string name="ExperiencePermission1"> + assumer vos contrôles + </string> + <string name="ExperiencePermission3"> + déclencher des animations pour votre avatar + </string> + <string name="ExperiencePermission4"> + attacher à votre avatar + </string> + <string name="ExperiencePermission9"> + suivre votre caméra + </string> + <string name="ExperiencePermission10"> + contrôler votre caméra + </string> + <string name="ExperiencePermission11"> + vous téléporter + </string> + <string name="ExperiencePermission12"> + accepter automatiquement les permissions d'expérience + </string> + <string name="ExperiencePermissionShortUnknown"> + a effectué une opération inconnue : [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Prendre le contrôle + </string> + <string name="ExperiencePermissionShort3"> + Déclencher des animations + </string> + <string name="ExperiencePermissionShort4"> + Attacher + </string> + <string name="ExperiencePermissionShort9"> + Suivre la caméra + </string> + <string name="ExperiencePermissionShort10"> + Contrôler la caméra + </string> + <string name="ExperiencePermissionShort11"> + Téléporter + </string> + <string name="ExperiencePermissionShort12"> + Permission + </string> <string name="logging_calls_disabled_log_empty"> Les conversations ne sont pas archivées. Pour commencer à tenir un journal, choisissez Enregistrer : Journal seul ou Enregistrer : Journal et transcriptions sous Préférences > Chat. </string> diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml index 6065fa2966..f4499d46f8 100755 --- a/indra/newview/skins/default/xui/fr/teleport_strings.xml +++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml @@ -48,6 +48,9 @@ Pour recommencer le didacticiel, accédez à Welcome Island Public. <message name="MustGetAgeRegion"> Pour accéder à cette région, vous devez avoir au moins 18 ans. </message> + <message name="RegionTPSpecialUsageBlocked"> + Impossible de pénétrer dans la région. « [REGION_NAME] » est une région de jeux d'adresse et vous devez satisfaire à certains critères pour y pénétrer. Pour en savoir plus, consultez la page [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life FAQ sur les jeux d'adresse]. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index fe3e59b0bd..0c0d05308b 100755 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -313,9 +313,6 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. <panel.string name="push_restrict_region_text"> Nessuna spinta (Impostazione regionale) </panel.string> - <panel.string name="see_avs_text"> - Gli avatar in altri lotti possono vedere - </panel.string> <text name="allow_label"> Permetti ad altri residenti di: </text> @@ -341,22 +338,6 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. <check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su 'sicuro', disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento con danni."/> <check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/> <check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Consenti che il lotto sia visto nei risultati di ricerca"/> - <combo_box name="land category with adult"> - <combo_box.item label="Tutte le categorie" name="item0"/> - <combo_box.item label="Luogo dei Linden" name="item1"/> - <combo_box.item label="Adulti" name="item2"/> - <combo_box.item label="Arte e cultura" name="item3"/> - <combo_box.item label="Affari" name="item4"/> - <combo_box.item label="Istruzione" name="item5"/> - <combo_box.item label="Gioco" name="item6"/> - <combo_box.item label="Divertimento" name="item7"/> - <combo_box.item label="Accoglienza nuovi residenti" name="item8"/> - <combo_box.item label="Parchi & Natura" name="item9"/> - <combo_box.item label="Residenziale" name="item10"/> - <combo_box.item label="Shopping" name="item11"/> - <combo_box.item label="Affitto" name="item13"/> - <combo_box.item label="Altro" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Tutte le categorie" name="item0"/> <combo_box.item label="Luogo dei Linden" name="item1"/> @@ -456,15 +437,9 @@ Media: <panel.string name="access_estate_defined"> (Definito dalla proprietà) </panel.string> - <panel.string name="allow_public_access"> - Consenti accesso pubblico ([MATURITY]) (Nota: se si rimuove la selezione vengono create linee di espulsione) - </panel.string> <panel.string name="estate_override"> Una o più di queste impostazioni sono già impostate a livello regionale </panel.string> - <text name="Limit access to this parcel to:"> - Accesso a questo terreno - </text> <check_box label="Consenti l'accesso pubblico (se si rimuove la selezione vengono create linee di espulsione)" name="public_access"/> <text name="Only Allow"> Consenti l'accesso solo ai Residenti che: @@ -496,5 +471,6 @@ Media: <button label="Rimuovi" label_selected="Rimuovi" name="remove_banned"/> </panel> </panel> + <panel label="ESPERIENZE" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_experience_search.xml b/indra/newview/skins/default/xui/it/floater_experience_search.xml new file mode 100644 index 0000000000..a31e7aa76f --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="SCEGLI ESPERIENZA"/> diff --git a/indra/newview/skins/default/xui/it/floater_experienceprofile.xml b/indra/newview/skins/default/xui/it/floater_experienceprofile.xml new file mode 100644 index 0000000000..031900825d --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (nessuno) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Profilo esperienza"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Modifica" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Categoria: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Luogo: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Proprietario: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Gruppo: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="Consenti" name="allow_btn"/> + <button label="Dimentica" name="forget_btn"/> + <button label="Blocca" name="block_btn"/> + <text name="privileged"> + Questa esperienza è attivata per tutti i residenti. + </text> + <button label="Segnala abuso" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Nome:"/> + <text name="edit_experience_desc_label" value="Descrizione:"/> + <button label="Gruppo" name="Group_btn"/> + <text name="edit_ContentRating"> + Categoria: + </text> + <icons_combo_box label="Moderato" name="edit_ContentRatingText" tool_tip="Se si aumenta la categoria di accesso di un'esperienza, vengono ripristinate le autorizzazioni per tutti i residenti che hanno consentito l'esperienza."> + <icons_combo_box.item label="Adulti" name="Adult" value="42"/> + <icons_combo_box.item label="Moderato" name="Mature" value="21"/> + <icons_combo_box.item label="Generale" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Luogo: + </text> + <button label="Imposta come attuale" name="location_btn"/> + <button label="Cancella luogo" name="clear_btn"/> + <check_box label="Attiva esperienza" name="edit_enable_btn" tool_tip=""/> + <check_box label="Nascondi nella ricerca" name="edit_private_btn"/> + <text name="changes" value="Le modifiche apportate alle esperienze potrebbero essere visibili su tutte le regioni solo dopo alcuni minuti."/> + <button label="Indietro" name="cancel_btn"/> + <button label="Salva" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_experiences.xml b/indra/newview/skins/default/xui/it/floater_experiences.xml new file mode 100644 index 0000000000..7cd19783a3 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="ESPERIENZE"/> diff --git a/indra/newview/skins/default/xui/it/floater_facebook.xml b/indra/newview/skins/default/xui/it/floater_facebook.xml index 89d58f4e67..cb700f00e1 100644 --- a/indra/newview/skins/default/xui/it/floater_facebook.xml +++ b/indra/newview/skins/default/xui/it/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="PUBBLICA SU FACEBOOK"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="STATO" name="panel_facebook_status"/> - <panel label="FOTO" name="panel_facebook_photo"/> - <panel label="REGISTRATI" name="panel_facebook_place"/> - <panel label="AMICI" name="panel_facebook_friends"/> - <panel label="ACCOUNT" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Errore - </text> - <text name="connection_loading_text"> - Caricamento... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="STATO" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="REGISTRATI" name="panel_facebook_place"/> + <panel label="AMICI" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Errore + </text> + <text name="connection_loading_text"> + Caricamento in corso... + </text> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml index cf790ee62e..e5543c741f 100755 --- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Abiti" name="check_clothing"/> <check_box label="Gesture" name="check_gesture"/> <check_box label="Landmark" name="check_landmark"/> - <check_box label="Reticoli" name="check_mesh"/> <check_box label="Notecard" name="check_notecard"/> + <check_box label="Reticoli" name="check_mesh"/> <check_box label="Oggetti" name="check_object"/> <check_box label="Script" name="check_script"/> <check_box label="Suoni" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - Oppure - </text> + <radio_group name="date_search_direction"> + <radio_item label="Più recenti del" name="newer"/> + <radio_item label="Precedenti al" name="older"/> + </radio_group> <spinner label="Ore fa" name="spin_hours_ago"/> <spinner label="Giorni fa" name="spin_days_ago"/> <button label="Chiudi" label_selected="Chiudi" name="Close"/> diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml index f7b2b1ab4a..13f54eabcc 100644 --- a/indra/newview/skins/default/xui/it/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_lagmeter" title="MISURATORE LAG"> <floater.string name="max_title_msg"> - Misuratore del lag + Misuratore lag </floater.string> <floater.string name="max_width_px"> 360 @@ -13,7 +13,7 @@ 90 </floater.string> <floater.string name="client_text_msg"> - Programma in locale + Client </floater.string> <floater.string name="client_frame_rate_critical_fps"> 10 @@ -22,31 +22,31 @@ 15 </floater.string> <floater.string name="client_frame_time_window_bg_msg"> - Normale, finestra sullo sfondo + Normale, finestra in background </floater.string> <floater.string name="client_frame_time_critical_msg"> - Velocità dei frame al di sotto di [CLIENT_FRAME_RATE_CRITICAL] + Frame rate del client inferiore a [CLIENT_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="client_frame_time_warning_msg"> - Velocità dei frame tra [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING] + Frame rate del client tra [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING] </floater.string> <floater.string name="client_frame_time_normal_msg"> Normale </floater.string> <floater.string name="client_draw_distance_cause_msg"> - Possibile causa: Campo visivo impostato troppo alto + Causa possibile: Distanza di visualizzazione impostata su un valore troppo alto </floater.string> <floater.string name="client_texture_loading_cause_msg"> - Possibile causa: Caricamento immagini + Causa possibile: Caricamento immagini in corso </floater.string> <floater.string name="client_texture_memory_cause_msg"> - Possibile causa: Troppe immagini in memoria + Causa possibile: Troppe immagini in memoria </floater.string> <floater.string name="client_complex_objects_cause_msg"> - Possibile causa: Troppi oggetti complessi intorno + Causa possibile: Troppi oggetti complessi in una scena </floater.string> <floater.string name="network_text_msg"> - Network + Rete </floater.string> <floater.string name="network_packet_loss_critical_pct"> 10 @@ -55,10 +55,10 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - La connessione sta calando al di sotto del [NETWORK_PACKET_LOSS_CRITICAL]% di pacchetti + Il collegamento perde più del [NETWORK_PACKET_LOSS_CRITICAL]% dei pacchetti </floater.string> <floater.string name="network_packet_loss_warning_msg"> - La connessione sta calando tra il [NETWORK_PACKET_LOSS_WARNING]% e il [NETWORK_PACKET_LOSS_CRITICAL]% di pacchetti + Il collegamento perde [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% dei pacchetti </floater.string> <floater.string name="network_performance_normal_msg"> Normale @@ -70,16 +70,16 @@ 300 </floater.string> <floater.string name="network_ping_critical_msg"> - Il tempo di ping della connessione è al di sopra di [NETWORK_PING_CRITICAL] ms + Tempo di ping del collegamento superiore a [NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_ping_warning_msg"> - Il tempo di ping della connessione è tra [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + Tempo di ping del collegamento pari a [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_packet_loss_cause_msg"> - Possibile cattiva connessione o la larghezza di banda impostata nelle preferenze troppo alta. + Collegamento scadente oppure valore della larghezza di banda troppo alto. </floater.string> <floater.string name="network_ping_cause_msg"> - Possibile cattiva connessione o l'apertura di un programma di scambio files. + Collegamento scadente oppure problemi di app di condivisione file. </floater.string> <floater.string name="server_text_msg"> Server @@ -94,31 +94,31 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - Velocità dei frame al di sotto di [SERVER_FRAME_RATE_CRITICAL] + Frame rate del simulatore inferiore a [SERVER_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="server_frame_time_warning_msg"> - Velocità dei frame tra [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING] + Frame rate del simulatore tra [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING] </floater.string> <floater.string name="server_frame_time_normal_msg"> Normale </floater.string> <floater.string name="server_physics_cause_msg"> - Possibile causa: troppi oggetti fisici + Causa possibile: Troppi oggetti fisici </floater.string> <floater.string name="server_scripts_cause_msg"> - Possibile causa: troppi oggetti scriptati + Causa possibile: Troppi oggetti scriptati </floater.string> <floater.string name="server_net_cause_msg"> - Possibile causa: eccessivo traffico sulla rete + Causa possibile: Troppo traffico di rete </floater.string> <floater.string name="server_agent_cause_msg"> - Possibile causa: troppi residenti in movimento nella regione + Causa possibile: Troppe persone in movimento nella regione </floater.string> <floater.string name="server_images_cause_msg"> - Possibile causa: troppe elaborazioni di immagini + Causa possibile: Troppi calcoli delle immagini </floater.string> <floater.string name="server_generic_cause_msg"> - Possibile causa: carico eccessivo del simulatore + Causa possibile: Carico eccessivo del simulatore </floater.string> <floater.string name="smaller_label"> >> @@ -126,7 +126,7 @@ <floater.string name="bigger_label"> << </floater.string> - <button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del programma in locale"/> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del client"/> <text name="client"> Client </text> @@ -134,7 +134,7 @@ Normale </text> <text left="30" name="client_lag_cause" right="-10"/> - <button label="" label_selected="" name="network_lagmeter" tool_tip="Stato del lag del network"/> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Stato del lag della rete"/> <text name="network"> Rete </text> diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml index 0bd2b02323..c28df6c12e 100755 --- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> SCRIPT: [NAME] </floater.string> + <floater.string name="experience_enabled"> + Rimuovi il segno di spunta per rimuovere l'esperienza corrente + </floater.string> + <floater.string name="no_experiences"> + Non hai l'autorizzazione necessaria per alcuna esperienza + </floater.string> + <floater.string name="add_experiences"> + Seleziona per aggiungere un'esperienza + </floater.string> + <floater.string name="show_experience_profile"> + Clicca per vedere il profilo dell'esperienza + </floater.string> + <floater.string name="loading"> + Caricamento in corso... + </floater.string> <button label="Ripristina" label_selected="Ripristina" name="Reset"/> <check_box initial_value="true" label="In esecuzione" left="4" name="running"/> <check_box initial_value="true" label="Mono" left="106" name="mono"/> + <check_box label="Usa le esperienze:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_openobject.xml b/indra/newview/skins/default/xui/it/floater_openobject.xml index d8144c7cd5..9b04c230c8 100755 --- a/indra/newview/skins/default/xui/it/floater_openobject.xml +++ b/indra/newview/skins/default/xui/it/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="Copia nell'inventario" label_selected="Copia nell'inventario" name="copy_to_inventory_button"/> - <button label="Copia ed indossa" label_selected="Copia ed indossa" name="copy_and_wear_button"/> + <button label="Copia nell'Inventario" label_selected="Copia nell'Inventario" name="copy_to_inventory_button"/> + <button label="Copia e aggiungi al vestiario" label_selected="Copia e aggiungi al vestiario" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml index 728d089205..f74d84fb8f 100755 --- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml @@ -76,7 +76,7 @@ <combo_box.item label="Terreno > Invasione > Oggetti o texture" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terreno > Invasione > Particelle" name="Land__Encroachment__Particles"/> <combo_box.item label="Terreno > Invasione > Alberi/piante" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Scommesse o gioco d'azzardo" name="Wagering_gambling"/> + <combo_box.item label="Violazione regole del gioco" name="Wagering_gambling"/> <combo_box.item label="Altro" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml index 16289ac7af..d21c206f6f 100755 --- a/indra/newview/skins/default/xui/it/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> Non salvato sul computer. </string> - <button name="advanced_options_btn" tool_tip="Opzioni Avanzate"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] px - </text> - <text name="file_size_label"> - [SIZE] KB - </text> + <button label="AGGIORNA" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - OPZIONI AVANZATE - </text> <text name="layer_type_label"> Cattura: </text> @@ -68,4 +59,10 @@ <combo_box.item label="Nessun filtro" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] px (larghezza) x [HEIGHT] px (altezza) + </text> + <text name="file_size_label"> + [SIZE] KB + </text> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml index 7516af957e..7ef13aa37f 100755 --- a/indra/newview/skins/default/xui/it/floater_stats.xml +++ b/indra/newview/skins/default/xui/it/floater_stats.xml @@ -72,7 +72,7 @@ <stat_view label="Pathfinding" name="simpathfinding"> <stat_bar label="Tempo passaggio AI" name="simsimaistepmsec"/> <stat_bar label="Passaggi silhouette saltati" name="simsimskippedsilhouettesteps"/> - <stat_bar label="Personaggi aggiornati" name="simsimpctsteppedcharacters"/> + <stat_bar label="Caratteri aggiornati" name="simsimpctsteppedcharacters"/> </stat_view> <stat_bar label="Totale dati non confermati (unacked)" name="simtotalunackedbytes"/> <stat_view label="Orario" name="simperf"> diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml index d8ca7f4438..afd6a87646 100755 --- a/indra/newview/skins/default/xui/it/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> Nulla di rilevato. </floater.string> + <floater.string name="URLs"> + URL + </floater.string> + <floater.string name="memory"> + Memoria (KB) + </floater.string> <text name="title_text"> In caricamento... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Proprietario" name="owner" width="84"/> <scroll_list.columns label="Ubicazione" name="location" width="84"/> <scroll_list.columns label="Lotto" name="parcel"/> - <scroll_list.columns label="Ora" name="time" width="84"/> + <scroll_list.columns label="Data" name="time" width="84"/> <scroll_list.columns label="URL" name="URLs"/> <scroll_list.columns label="Memoria (KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/it/floater_twitter.xml b/indra/newview/skins/default/xui/it/floater_twitter.xml index c903705e69..a34052a620 100644 --- a/indra/newview/skins/default/xui/it/floater_twitter.xml +++ b/indra/newview/skins/default/xui/it/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="COMPONI" name="panel_twitter_photo"/> - <panel label="ACCOUNT" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Errore - </text> - <text name="connection_loading_text"> - Caricamento... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="COMPONI" name="panel_twitter_photo"/> + <panel label="ACCOUNT" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Errore + </text> + <text name="connection_loading_text"> + Caricamento in corso... + </text> </floater> diff --git a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml index 3d64e4da4e..403f5da5fe 100755 --- a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="Mostra prima i più recenti" name="sort_by_recent"/> <menu_item_check label="Ordina le cartelle sempre in base al nome" name="sort_folders_by_name"/> <menu_item_check label="Ordina cartelle di sistema all'inizio" name="sort_system_folders_to_top"/> - <menu_item_call label="Mostra filtri" name="show_filters"/> + <menu_item_call label="Mostra filtri..." name="show_filters"/> <menu_item_call label="Ripristina filtri" name="reset_filters"/> <menu_item_call label="Chiudi tutte le cartelle" name="close_folders"/> <menu_item_call label="Svuota oggetti smarriti" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/it/menu_url_experience.xml b/indra/newview/skins/default/xui/it/menu_url_experience.xml new file mode 100644 index 0000000000..d6ea3f352b --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index f535a53e66..427d039c7c 100755 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Nuova finestra inventario" name="NewInventoryWindow"/> <menu_item_call label="Luoghi..." name="Places"/> <menu_item_call label="Preferiti..." name="Picks"/> + <menu_item_call label="Esperienze..." name="Experiences"/> <menu_item_call label="Controlli fotocamera..." name="Camera Controls"/> <menu label="Spostamento" name="Movement"> <menu_item_call label="Siedi" name="Sit Down Here"/> @@ -48,7 +49,7 @@ <menu_item_check label="Amici" name="My Friends"/> <menu_item_check label="Gruppi" name="My Groups"/> <menu_item_check label="Persone vicine" name="Active Speakers"/> - <menu_item_call label="Blocca lista" name="Block List"/> + <menu_item_check label="Blocca lista" name="Block List"/> <menu_item_check label="Non disturbare" name="Do Not Disturb"/> </menu> <menu label="Mondo" name="World"> diff --git a/indra/newview/skins/default/xui/it/mime_types.xml b/indra/newview/skins/default/xui/it/mime_types.xml index 5eda7a5752..df119263b7 100755 --- a/indra/newview/skins/default/xui/it/mime_types.xml +++ b/indra/newview/skins/default/xui/it/mime_types.xml @@ -24,10 +24,10 @@ </widgetset> <widgetset name="none"> <label name="none_label"> - Senza Contenuti + Nessun contenuto </label> <tooltip name="none_tooltip"> - Nessun video qui + Nessun contenuto multimediale qui </tooltip> </widgetset> <widgetset name="image"> diff --git a/indra/newview/skins/default/xui/it/mime_types_linux.xml b/indra/newview/skins/default/xui/it/mime_types_linux.xml index 3bc30b507a..1ed1fd6b1d 100755 --- a/indra/newview/skins/default/xui/it/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/it/mime_types_linux.xml @@ -44,6 +44,14 @@ Riproduci l'audio di questo luogo </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Nessun contenuto + </label> + <tooltip name="none_tooltip"> + Nessun contenuto multimediale qui + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Streaming in tempo reale diff --git a/indra/newview/skins/default/xui/it/mime_types_mac.xml b/indra/newview/skins/default/xui/it/mime_types_mac.xml index 3bc30b507a..1ed1fd6b1d 100755 --- a/indra/newview/skins/default/xui/it/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/it/mime_types_mac.xml @@ -44,6 +44,14 @@ Riproduci l'audio di questo luogo </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Nessun contenuto + </label> + <tooltip name="none_tooltip"> + Nessun contenuto multimediale qui + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Streaming in tempo reale diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 11211e01fe..fe53dd18dd 100755 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -73,6 +73,10 @@ Dettagli errore: La notifica denominata '[_NAME]' non è stata trovata [MESSAGE] <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> Il programma [APP_NAME] ha riscontrato un'errore durante il tentativo di aggiornamento. [http://get.secondlife.com Scarica l'ultima versione] del Viewer. <usetemplate name="okbutton" yestext="OK"/> @@ -572,6 +576,9 @@ La qualità grafica può essere aumentata in Preferenze > Grafica. <notification name="RegionNoTerraforming"> La regione [REGION] non consente di terraformare. </notification> + <notification name="ParcelNoTerraforming"> + Non ti è consentito terraformare il lotto [PARCEL]. + </notification> <notification name="CannotCopyWarning"> Non hai l'autorizzazione a copiare i seguenti oggetti: [ITEMS] @@ -1829,6 +1836,30 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server. Rimuovi come gestore della proprietà solo per questa proprietà oppure per [ALL_ESTATES]? <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/> </notification> + <notification label="Seleziona proprietà immobiliare" name="EstateAllowedExperienceAdd"> + Aggiungi all'elenco di elementi consentiti per questa proprietà immobiliare oppure per [ALL_ESTATES]? + <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà immobiliari" yestext="Questa proprietà immobiliare"/> + </notification> + <notification label="Seleziona proprietà immobiliare" name="EstateAllowedExperienceRemove"> + Rimuovi dall'elenco di elementi consentiti per questa proprietà immobiliare oppure per [ALL_ESTATES]? + <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà immobiliari" yestext="Questa proprietà immobiliare"/> + </notification> + <notification label="Seleziona proprietà immobiliare" name="EstateBlockedExperienceAdd"> + Aggiungi all'elenco di elementi bloccati per questa proprietà immobiliare oppure per [ALL_ESTATES]? + <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà immobiliari" yestext="Questa proprietà immobiliare"/> + </notification> + <notification label="Seleziona proprietà immobiliare" name="EstateBlockedExperienceRemove"> + Rimuovi dall'elenco di elementi bloccati per questa proprietà immobiliare oppure per [ALL_ESTATES]? + <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà immobiliari" yestext="Questa proprietà immobiliare"/> + </notification> + <notification label="Seleziona proprietà immobiliare" name="EstateTrustedExperienceAdd"> + Aggiungi all'elenco di elementi chiave per questa proprietà immobiliare oppure per [ALL_ESTATES]? + <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà immobiliari" yestext="Questa proprietà immobiliare"/> + </notification> + <notification label="Seleziona proprietà immobiliare" name="EstateTrustedExperienceRemove"> + Rimuovi dall'elenco di elementi chiave per questa proprietà immobiliare oppure per [ALL_ESTATES]? + <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà immobiliari" yestext="Questa proprietà immobiliare"/> + </notification> <notification label="Conferma espulsione" name="EstateKickUser"> Espelli [EVIL_USER] da questa proprietà? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> @@ -1903,6 +1934,10 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server. Si è verificato un problema con il teleport a causa di un errore di sincronizzazione delle preferenze con il server. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + Impossibile entrare nella regione. '[REGION_NAME]' è una regione per giochi di abilità e per entrare è necessario soddisfare alcuni requisiti. Per dettagli, leggi le [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life domande frequenti sui giochi di abilità]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> Non riceverai più notifiche se stai per visitare una regione con contenuti [RATING]. In futuro potrai modificare le preferenze relative ai contenuti selezionando Io > Preferenze > Generale nella barra del menu. <usetemplate name="okbutton" yestext="OK"/> @@ -2211,6 +2246,9 @@ Vuoi sostituirlo con l'oggetto selezionato? <button ignore="Never Replace" name="No" text="Annulla"/> </form> </notification> + <notification name="TooManyWearables"> + Non puoi indossare una cartella che contiene più di [AMOUNT] elementi. Per modificare questo limite, accedi ad Avanzate > Mostra impostazioni di debug > WearFolderLimit. + </notification> <notification label="Avviso modalità Non disturbare" name="DoNotDisturbModePay"> Hai attivato la modalità Non disturbare. Non riceverai alcun oggetto offerto in cambio di questo pagamento. @@ -2819,7 +2857,7 @@ Se rimani qui verrai scollegato da Second Life. [MESSAGE] -Dall'oggetto: <nolink>[OBJECTNAME]</nolink>, proprietario: [NAME]? +Dall'oggetto: <nolink>[OBJECTNAME]</nolink>, proprietario: [NAME] <form name="form"> <button name="Gotopage" text="Caricare"/> <button name="Cancel" text="Annulla"/> @@ -2845,6 +2883,72 @@ OK? <button name="Mute" text="Blocca"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + Impossibile acquisire una nuova esperienza: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Una modifica apportata al gruppo esperienza è stata ignorata perché il proprietario non è un membro del gruppo selezionato. + </notification> + <notification name="UneditableExperienceProfileMessage"> + Il campo non modificabile '[field]' è stato ignorato durante l'aggiornamento del profilo esperienza. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Ignorate le modifiche apportate al campo '[field]', che può essere impostato solo dal proprietario dell'esperienza. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Non puoi impostare la categoria di accesso di un'esperienza a un livello maggiore di quello del proprietario. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + I termini seguenti hanno impedito l'aggiornamento del nome o della descrizione del profilo dell'esperienza: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Sei stato teleportato dalla regione [region_name] per aver rimosso l'esperienza secondlife:///app/experience/[public_id]/profile e non puoi più accedere alla regione. + <form name="form"> + <ignore name="ignore" text="Espulso dalla regione per aver rimosso un'esperienza"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + Ti è stato consentito l'accesso alla regione [region_name] grazie alla partecipazione all'esperienza chiave secondlife:///app/experience/[public_id]/profile. Se rimuovi l'esperienza, sarai passibile di espulsione dalla regione. + <form name="form"> + <ignore name="ignore" text="Può accedere a una regione grazie a un'esperienza"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + Non puoi accedere a questa destinazione. Potresti accedere alla regione accettando un'esperienza nell'elenco seguente: + +[EXPERIENCE_LIST] + +Potrebbero essere disponibili altre esperienze chiave. + </notification> + <notification name="ExperienceEvent"> + L'esperienza secondlife:///app/experience/[public_id]/profile ha consentito un oggetto la seguente azione: [EventType]. + Proprietario: secondlife:///app/agent/[OwnerID]/inspect + Nome oggetto: [ObjectName] + Nome lotto: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + L'esperienza secondlife:///app/experience/[public_id]/profile ha consentito un elemento collegato la seguente azione: [EventType]. + Proprietario: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + '<nolink>[OBJECTNAME]</nolink>', un oggetto posseduto da '[NAME]', richiede la tua partecipazione all'esperienza [GRID_WIDE]: + +[EXPERIENCE] + +Una volta concessa l'autorizzazione, questo messaggio non verrà più visualizzato per questa esperienza, a meno che l'autorizzazione non venga revocata nel profilo dell'esperienza. + +Gli script associati a questa esperienza potranno fare quanto segue nelle regioni in cui è attiva l'esperienza: + +[QUESTIONS]OK? + <form name="form"> + <button name="BlockExperience" text="Blocca esperienza"/> + <button name="Mute" text="Blocca oggetto"/> + <button name="Yes" text="Sì"/> + <button name="No" text="No"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Avviso: L'oggetto '<nolink>[OBJECTNAME]</nolink>' ha richiesto accesso completo al tuo account in Dollari Linden. Se consenti l'accesso, potrà rimuovere fondi dal tuo account in qualunque momento e anche svuotare completamente l'account, per un periodo illimitato e senza ulteriori avvisi. @@ -3163,6 +3267,10 @@ Hai caricato una texture [RESOLUTION] completata per '[BODYREGION]' do <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( In esistenza da [EXISTENCE] secondi) Hai aggiornato localmente una texture [RESOLUTION] completata per '[BODYREGION]' dopo [TIME] secondi. + </notification> + <notification name="CannotUploadTexture"> + Impossibile caricare la texture. +[REASON] </notification> <notification name="LivePreviewUnavailable"> Non possiamo mostrare un'anteprima di questa texture perché non ne è consentita la copia e/o il trasferimento. diff --git a/indra/newview/skins/default/xui/it/panel_experience_info.xml b/indra/newview/skins/default/xui/it/panel_experience_info.xml new file mode 100644 index 0000000000..706f139bcc --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Profilo esperienza"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Luogo: + </text> + <text name="LocationTextText"> + in qualche posto + </text> + <button label="Teleport" name="teleport_btn"/> + <button label="Mappa" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Negozio Marketplace: + </text> + <text name="LocationTextText"> + in qualche posto + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Categoria: + </text> + <text name="ContentRatingText"> + Adulti + </text> + <text name="Owner"> + Proprietario: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Modifica" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/it/panel_experience_list_editor.xml new file mode 100644 index 0000000000..46d39eabdd --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + caricamento in corso... + </panel.string> + <panel.string name="panel_allowed"> + Esperienze consentite: + </panel.string> + <panel.string name="panel_blocked"> + Esperienze bloccate: + </panel.string> + <panel.string name="panel_trusted"> + Esperienze chiave: + </panel.string> + <panel.string name="no_results"> + (vuoto) + </panel.string> + <text name="text_name"> + Elenco esperienze + </text> + <scroll_list name="experience_list"> + <columns label="Nome" name="experience_name"/> + </scroll_list> + <button label="Aggiungi..." name="btn_add"/> + <button label="Rimuovi" name="btn_remove"/> + <button label="Profilo..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_experience_list_item.xml b/indra/newview/skins/default/xui/it/panel_experience_list_item.xml new file mode 100644 index 0000000000..f99c71c22e --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Nome fittizio + </text> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_experience_log.xml b/indra/newview/skins/default/xui/it/panel_experience_log.xml new file mode 100644 index 0000000000..a03e8410b1 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="Nessun evento."/> + <string name="loading" value="caricamento in corso..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Giorno/ora" name="time"/> + <columns label="Evento" name="event"/> + <columns label="Esperienza" name="experience_name"/> + <columns label="Oggetto" name="object_name"/> + </scroll_list> + <button label="Notifica" name="btn_notify"/> + <button label="Profilo" name="btn_profile_xp"/> + <button label="Segnalazione" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Notifica tutti gli eventi Giorni" name="notify_all"/> + <button label="Cancella" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_experience_search.xml b/indra/newview/skins/default/xui/it/panel_experience_search.xml new file mode 100644 index 0000000000..124b060f20 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + '[TEXT]' non trovato + </string> + <string name="no_results"> + Nessun risultato + </string> + <string name="searching"> + Ricerca in corso... + </string> + <string name="loading"> + Caricamento in corso... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="Vai" name="find"/> + <icons_combo_box label="Moderato" name="maturity"> + <icons_combo_box.item label="Adulti" name="Adult" value="42"/> + <icons_combo_box.item label="Moderato" name="Mature" value="21"/> + <icons_combo_box.item label="Generale" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Nome" name="experience_name"/> + <columns label="Proprietario" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Annulla" name="cancel_btn"/> + <button label="Visualizza profilo" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_experiences.xml b/indra/newview/skins/default/xui/it/panel_experiences.xml new file mode 100644 index 0000000000..a305860f8f --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Caricamento esperienze in corso..."/> + <string name="no_experiences" value="Nessuna esperienza."/> + <string name="acquire" value="Acquisisci un'esperienza"/> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_friends.xml b/indra/newview/skins/default/xui/it/panel_facebook_friends.xml index 917dbec4d9..c1c0489f88 100644 --- a/indra/newview/skins/default/xui/it/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/it/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Attualmente non hai amici su Facebook che sono anche residenti in Second Life. Invita i tuoi amici di Facebook a partecipare a Second Life!"/> - <string name="facebook_friends_no_connected" value="Attualmente non sei in collegamento con Facebook. Accedi alla scheda Account per collegarti e attivare questa funzionalità."/> + <string name="facebook_friends_no_connected" value="Attualmente non sei in collegamento con Facebook. Accedi alla scheda Stato per collegarti e attivare questa funzionalità."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="Amici SL"/> <accordion_tab name="tab_suggested_friends" title="Aggiungi queste persone come amici SL"/> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_photo.xml b/indra/newview/skins/default/xui/it/panel_facebook_photo.xml index 20ec7f0a70..044b8b6164 100644 --- a/indra/newview/skins/default/xui/it/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/it/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> - <combo_box.item label="Finestra attuale" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtri immagini"> - <combo_box.item label="Nessun filtro" name="NoFilter"/> - </combo_box> - <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> - <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> - <text name="caption_label"> - Commento (facoltativo): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Pubblica" name="post_photo_btn"/> - <button label="Annulla" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> + <combo_box.item label="Finestra attuale" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> + <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> + <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> + <text name="caption_label"> + Commento (facoltativo): + </text> + <button label="Post" name="post_photo_btn"/> + <button label="Annulla" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_place.xml b/indra/newview/skins/default/xui/it/panel_facebook_place.xml index 297f0caccc..3f1365f12c 100644 --- a/indra/newview/skins/default/xui/it/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/it/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Racconta dove ti trovi: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Pubblica" name="post_place_btn"/> - <button label="Annulla" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Racconta dove ti trovi: + </text> + <check_box initial_value="false" label="Includi vista dall'alto del luogo" name="add_place_view_cb"/> + <button label="Post" name="post_place_btn"/> + <button label="Annulla" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_status.xml b/indra/newview/skins/default/xui/it/panel_facebook_status.xml index d373fb0717..9b5171043a 100644 --- a/indra/newview/skins/default/xui/it/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/it/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - A cosa stai pensando? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Pubblica" name="post_status_btn"/> - <button label="Annulla" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Sei in collegamento con Facebook come:"/> + <string name="facebook_disconnected" value="Non in collegamento con Facebook"/> + <text name="account_caption_label"> + Non in collegamento con Facebook. + </text> + <panel name="panel_buttons"> + <button label="Collegamento..." name="connect_btn"/> + <button label="Interrompi collegamento" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Come pubblicare su Facebook] + </text> + </panel> + <text name="status_caption_label"> + A cosa stai pensando? + </text> + <button label="Post" name="post_status_btn"/> + <button label="Annulla" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_flickr_photo.xml b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml index 064c302b14..e989fb2081 100644 --- a/indra/newview/skins/default/xui/it/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> - <combo_box.item label="Finestra attuale" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtri immagini"> - <combo_box.item label="Nessun filtro" name="NoFilter"/> - </combo_box> - <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> - <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> - <text name="title_label"> - Titolo: - </text> - <text name="description_label"> - Descrizione: - </text> - <check_box initial_value="true" label="Includi l'ubicazione SL al termine della descrizione" name="add_location_cb"/> - <text name="tags_label"> - Tag: - </text> - <text name="tags_help_label"> - Separa tag con spazi + <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> + <combo_box.item label="Finestra attuale" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> + <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> + <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> + <text name="title_label"> + Titolo: + </text> + <text name="description_label"> + Descrizione: + </text> + <check_box initial_value="true" label="Includi il luogo SL al termine della descrizione" name="add_location_cb"/> + <text name="tags_label"> + Tag: + </text> + <text name="tags_help_label"> + Separa tag con spazi Usa "" per tag con più di una parola - </text> - <combo_box name="rating_combobox" tool_tip="Categoria del contenuto di Flickr"> - <combo_box.item label="Categoria Flickr Sicuro" name="SafeRating"/> - <combo_box.item label="Categoria Flickr Moderato" name="ModerateRating"/> - <combo_box.item label="Categoria Flickr Censurato" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Carica" name="post_photo_btn"/> - <button label="Annulla" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Categoria del contenuto di Flickr"> + <combo_box.item label="Categoria Flickr Sicuro" name="SafeRating"/> + <combo_box.item label="Categoria Flickr Moderato" name="ModerateRating"/> + <combo_box.item label="Categoria Flickr Censurato" name="RestrictedRating"/> + </combo_box> + <button label="Carica" name="post_photo_btn"/> + <button label="Annulla" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml index 138edc3a26..fb51febc58 100755 --- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Ruoli e membri"/> <accordion_tab name="group_notices_tab" title="Avvisi"/> <accordion_tab name="group_land_tab" title="Terra/Beni"/> + <accordion_tab name="group_experiences_tab" title="Esperienze"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/it/panel_postcard_settings.xml b/indra/newview/skins/default/xui/it/panel_postcard_settings.xml index 6a586c4415..374e6a07e5 100755 --- a/indra/newview/skins/default/xui/it/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/it/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Personalizza" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Larghezza" name="postcard_snapshot_width"/> - <spinner label="Altezza" name="postcard_snapshot_height"/> - <check_box label="Mantieni le proporzioni" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Qualità dell'immagine" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Larghezza x altezza" name="postcard_snapshot_width"/> + <check_box label="Mantieni le proporzioni" name="postcard_keep_aspect_check"/> + <slider label="Qualità:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml index fcc9661d03..e204d70b03 100755 --- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Web: </text> - <radio_group name="use_external_browser"> - <radio_item label="Usa il mio browser (IE, Firefox, Safari)" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Sconsigliato durante l'esecuzione a tutto schermo." value="true"/> - <radio_item label="Utilizza il browser Web integrato" name="internal" tool_tip="Utilizza il browser Web integrato per l'aiuto, per i link Web e così via. Questo browser si apre in una nuova finestra in [APP_NAME]." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Usa il mio browser (Chrome, Firefox, IE) per tutti i link" name="internal" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Sconsigliato durante l'esecuzione a tutto schermo." value="0"/> + <radio_item label="Usa il browser incorporato solo per i link di Second Life" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Il browser incorporato verrà usato solo per i link LindenLab/SecondLife." value="1"/> </radio_group> <check_box initial_value="true" label="Abilita plugin" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Accetta cookie" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/it/panel_region_experiences.xml b/indra/newview/skins/default/xui/it/panel_region_experiences.xml new file mode 100644 index 0000000000..e19650553a --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Esperienze" name="Experiences"> + <panel.string name="trusted_estate_text"> + Qualunque esperienza può essere un'esperienza chiave. + +Le esperienze chiave dispongono di autorizzazione per l'esecuzione in questa proprietà immobiliare. + +Inoltre, se la proprietà immobiliare non consente l'accesso pubblico, i Residenti che partecipano a un'esperienza chiave possono accedere alla proprietà e restarvi per tutto il tempo durante il quale partecipano all'esperienza chiave. + </panel.string> + <panel.string name="allowed_estate_text"> + Sono consentite solo le esperienze a livello di terreno. + +Le esperienze consentite dispongono di autorizzazione per l'esecuzione in questa proprietà immobiliare. + </panel.string> + <panel.string name="blocked_estate_text"> + Possono essere bloccate solo le esperienze a livello di griglia. + +Le esperienze bloccate non possono essere eseguite su questa proprietà immobiliare. + </panel.string> + <panel.string name="estate_caption"> + Le modifiche apportate in questa scheda saranno valide per tutte le regioni in questa proprietà. + </panel.string> + <panel.string name="allowed_parcel_text"> + Sono consentite solo le esperienze a livello di terreno. + +Le esperienze consentite dispongono di autorizzazione per l'esecuzione su questo lotto se non sono bloccate a livello di proprietà immobiliare. + </panel.string> + <panel.string name="blocked_parcel_text"> + Qualsiasi esperienza residente può essere bloccata. + +Le esperienze bloccate non possono essere eseguite su questo lotto. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_script_experience.xml b/indra/newview/skins/default/xui/it/panel_script_experience.xml new file mode 100644 index 0000000000..0f9e2fb9c5 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="ESPERIENZA"> + <button label="Esperienza" name="Expand Experience"/> + <check_box label="Usa le esperienze" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Scegli esperienza..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + Non sei il fornitore di alcuna esperienza. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml index c9245029b7..e6fba8e3bf 100755 --- a/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - Salva nell'inventario + Inventario </text> <text name="hint_lbl"> Salvare un'immagine nell'inventario costa L$[UPLOAD_COST]. Per salvare l'immagine come texture, selezionare uno dei formati quadrati. @@ -13,8 +13,8 @@ <combo_box.item label="Grande (512x512)" name="Large(512x512)"/> <combo_box.item label="Personalizza" name="Custom"/> </combo_box> - <spinner label="Larghezza" name="inventory_snapshot_width"/> - <spinner label="Altezza" name="inventory_snapshot_height"/> + <spinner label="Larghezza x altezza" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Mantieni le proporzioni" name="inventory_keep_aspect_check"/> <button label="Annulla" name="cancel_btn"/> <button label="Salva" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_local.xml b/indra/newview/skins/default/xui/it/panel_snapshot_local.xml index 4b725b68f9..f76c19d27b 100755 --- a/indra/newview/skins/default/xui/it/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Salva sul mio computer + Disco </text> <combo_box label="Risoluzione" name="local_size_combo"> <combo_box.item label="Finestra attuale" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="Personalizza" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Larghezza" name="local_snapshot_width"/> - <spinner label="Altezza" name="local_snapshot_height"/> - <check_box label="Mantieni le proporzioni" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Formato" name="local_format_combo"> - <combo_box.item label="PNG (senza perdite)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (senza perdite)" name="BMP"/> - </combo_box> - <slider label="Qualità dell'immagine" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Larghezza x altezza" name="local_snapshot_width"/> + <check_box label="Mantieni le proporzioni" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Formato: + </text> + <combo_box label="Formato" name="local_format_combo"> + <combo_box.item label="PNG (senza perdite)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (senza perdite)" name="BMP"/> + </combo_box> + <slider label="Qualità:" name="image_quality_slider"/> <button label="Annulla" name="cancel_btn"/> <flyout_button label="Salva" name="save_btn" tool_tip="Salva immagine come file"> <flyout_button.item label="Salva" name="save_item"/> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml index a043e5add6..ba56499987 100755 --- a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Invia post al feed del mio profilo" name="save_to_profile_btn"/> - <button label="E-mail" name="save_to_email_btn"/> + <button label="Salva sul disco" name="save_to_computer_btn"/> <button label="Salva nell'inventario (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Salva sul mio computer" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Invia a: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="Carica sul profilo" name="save_to_profile_btn"/> + <button label="Carica su Facebook" name="send_to_facebook_btn"/> + <button label="Carica su Twitter" name="send_to_twitter_btn"/> + <button label="Carica su Flickr" name="send_to_flickr_btn"/> + <button label="Invia tramite e-mail" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml index 3703b97e6c..be7d8763b6 100755 --- a/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml @@ -12,6 +12,10 @@ <text name="title"> E-mail </text> - <button label="Messaggio" name="message_btn"/> - <button label="Impostazioni" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="Messaggio" name="panel_postcard_message"/> + <panel label="Impostazioni" name="panel_postcard_settings"/> + </tab_container> + <button label="Annulla" name="cancel_btn"/> + <button label="Invia" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml index 2cdbf97049..3de12c959c 100755 --- a/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - Invia post al feed del mio profilo + Profilo </text> <combo_box label="Risoluzione" name="profile_size_combo"> <combo_box.item label="Finestra attuale" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Personalizza" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Larghezza" name="profile_snapshot_width"/> - <spinner label="Altezza" name="profile_snapshot_height"/> - <check_box label="Mantieni le proporzioni" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Didascalia: - </text> - <check_box initial_value="true" label="Includi luogo" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Larghezza x altezza" name="profile_snapshot_width"/> + <check_box label="Mantieni le proporzioni" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Didascalia: + </text> + <check_box initial_value="true" label="Includi luogo" name="add_location_cb"/> <button label="Annulla" name="cancel_btn"/> <button label="Post" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_twitter_photo.xml b/indra/newview/skins/default/xui/it/panel_twitter_photo.xml index 740ec3961f..69596784bd 100644 --- a/indra/newview/skins/default/xui/it/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/it/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - Cosa sta succedendo? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="Includi l'ubicazione in SL" name="add_location_cb"/> - <check_box initial_value="true" label="Includi una foto" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> - <combo_box.item label="Finestra attuale" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtri immagini"> - <combo_box.item label="Nessun filtro" name="NoFilter"/> - </combo_box> - <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> - <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Tweetta" name="post_photo_btn"/> - <button label="Annulla" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + Cosa sta succedendo? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Includi il luogo in SL" name="add_location_cb"/> + <check_box initial_value="true" label="Includi una foto" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> + <combo_box.item label="Finestra attuale" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> + <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> + <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> + <button label="Tweetta" name="post_photo_btn"/> + <button label="Annulla" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml index 80d65a9c74..b53eca4f78 100755 --- a/indra/newview/skins/default/xui/it/role_actions.xml +++ b/indra/newview/skins/default/xui/it/role_actions.xml @@ -71,4 +71,8 @@ <action description="Partecipa alla Chat vocale di gruppo" longdescription=" I membri con questo ruolo e abilità possono partecipare alle sessioni di Chat vocale nel gruppo. NOTA: per poter partecipare alla Chat di gruppo è necessario accedere alla sessione di chat vocale." name="join voice chat" value="27"/> <action description="Moderare la Chat di gruppo" longdescription="I membri con questo ruolo e abilità possono gestire l'accesso e la partecipazione alle sessioni di chat scritta e di chat vocale nel gruppo." name="moderate group chat" value="37"/> </action_set> + <action_set description="Queste Abilità includono la capacità di modificare le esperienze che appartengono al gruppo." name="experience_tools_experience"> + <action description="Amministratore esperienza" longdescription="I membri di un ruolo che include questa abilità possono modificare i metadati di un'esperienza." name="experience admin" value="49"/> + <action description="Fornitore esperienza" longdescription="I membri di un ruolo che include questa abilità possono fornire script per un'esperienza." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml index 2b3ea0fb83..422f15e3cf 100755 --- a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Profilo articolo"> + <panel.string name="loading_experience"> + (caricamento in corso) + </panel.string> <panel.string name="unknown"> (sconosciuto) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Acquisito: </text> + <text name="LabelItemExperienceTitle"> + Esperienza: + </text> <panel name="perms_inv"> <text name="perm_modify"> Tu puoi: diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 17ce8aaf5e..25c784975e 100755 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -446,6 +446,9 @@ Prova ad accedere nuovamente tra un minuto. <string name="TooltipMustSingleDrop"> Solo un singolo oggetto può essere creato qui </string> + <string name="TooltipTooManyWearables"> + Non puoi indossare una cartella che contiene più di [AMOUNT] elementi. Per modificare questo limite, accedi ad Avanzate > Mostra impostazioni di debug > WearFolderLimit. + </string> <string name="TooltipPrice" value="L$ [AMOUNT]:"/> <string name="TooltipOutboxDragToWorld"> Non puoi rezzare elementi nella tua casella in uscita del rivenditore @@ -1051,9 +1054,7 @@ Prova ad accedere nuovamente tra un minuto. <string name="AgentNameSubst"> (Tu) </string> - <string name="JoinAnExperience"> - Partecipa a un'esperienza - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Omette gli avvisi durante la gestione degli elenchi di accesso alle proprietà immobiliari </string> @@ -1858,6 +1859,9 @@ Prova ad accedere nuovamente tra un minuto. <string name="CompileQueueUnknownFailure"> Errore di dowload sconosciuto </string> + <string name="CompileNoExperiencePerm"> + Saltato lo script [SCRIPT] con l'esperienza [EXPERIENCE]. + </string> <string name="CompileQueueTitle"> Avanzamento ricompilazione </string> @@ -5177,6 +5181,87 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="UserDictionary"> [User] </string> + <string name="experience_tools_experience"> + Esperienza + </string> + <string name="ExperienceNameNull"> + (nessuna esperienza) + </string> + <string name="ExperienceNameUntitled"> + (esperienza senza titolo) + </string> + <string name="Land-Scope"> + A livello di terreno + </string> + <string name="Grid-Scope"> + A livello di griglia + </string> + <string name="Allowed_Experiences_Tab"> + CONSENTITO + </string> + <string name="Blocked_Experiences_Tab"> + BLOCCATO + </string> + <string name="Contrib_Experiences_Tab"> + FORNITORE + </string> + <string name="Admin_Experiences_Tab"> + AMMINISTRATORE + </string> + <string name="Recent_Experiences_Tab"> + RECENTE + </string> + <string name="Owned_Experiences_Tab"> + DI PROPRIETÀ + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], massimo [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + gestione dei tuoi comandi + </string> + <string name="ExperiencePermission3"> + attivazione di animazioni per il tuo avatar + </string> + <string name="ExperiencePermission4"> + collegamento al tuo avatar + </string> + <string name="ExperiencePermission9"> + monitoraggio della tua videocamera + </string> + <string name="ExperiencePermission10"> + controllo della tua videocamera + </string> + <string name="ExperiencePermission11"> + ti teletrasporta + </string> + <string name="ExperiencePermission12"> + accettazione automaticamente delle autorizzazioni per le esperienze + </string> + <string name="ExperiencePermissionShortUnknown"> + ha eseguito un'operazione sconosciuta: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Gestione dei comandi + </string> + <string name="ExperiencePermissionShort3"> + Attivazione di animazioni + </string> + <string name="ExperiencePermissionShort4"> + Collegamento + </string> + <string name="ExperiencePermissionShort9"> + Monitoraggio videocamera + </string> + <string name="ExperiencePermissionShort10"> + Controllo videocamera + </string> + <string name="ExperiencePermissionShort11"> + Teleport + </string> + <string name="ExperiencePermissionShort12"> + Autorizzazione + </string> <string name="logging_calls_disabled_log_empty"> Le conversazioni non vengono registrate. Per iniziare a registrare, seleziona "Salva: Solo registro" oppure "Salva: Registri e trascrizioni" in Preferenze > Chat. </string> diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml index bd967ebcc4..e4c4dda889 100755 --- a/indra/newview/skins/default/xui/it/teleport_strings.xml +++ b/indra/newview/skins/default/xui/it/teleport_strings.xml @@ -46,6 +46,9 @@ Per ripetere l'esercitazione, visita 'Welcome Island Public'. <message name="MustGetAgeRegion"> Per poter entrare in questa regione devi avere almeno 18 anni. </message> + <message name="RegionTPSpecialUsageBlocked"> + Impossibile entrare nella regione. '[REGION_NAME]' è una regione per giochi di abilità e per entrare è necessario soddisfare alcuni requisiti. Per dettagli, leggi le [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life domande frequenti sui giochi di abilità]. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index 3b4b5ed070..fc1ed5554a 100755 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -310,9 +310,6 @@ <panel.string name="push_restrict_region_text"> プッシュ禁止 (地域設定優先) </panel.string> - <panel.string name="see_avs_text"> - 他の区画にいるアバターは、 - </panel.string> <text name="allow_label"> 他の住人への許可: </text> @@ -338,22 +335,6 @@ <check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/> <check_box label="プッシュ禁止" name="PushRestrictCheck" tool_tip="スクリプトによるプッシュを禁止します。 このオプションを選択することにより、あなたの土地での破壊的行動を防ぐことができます。"/> <check_box label="検索に区画を表示(週 L$ 30)" name="ShowDirectoryCheck" tool_tip="この区画を検索結果に表示します"/> - <combo_box name="land category with adult"> - <combo_box.item label="全カテゴリ" name="item0"/> - <combo_box.item label="Linden 所在地" name="item1"/> - <combo_box.item label="Adult" name="item2"/> - <combo_box.item label="アートとカルチャー" name="item3"/> - <combo_box.item label="ビジネス" name="item4"/> - <combo_box.item label="教育的" name="item5"/> - <combo_box.item label="ゲーム" name="item6"/> - <combo_box.item label="たまり場" name="item7"/> - <combo_box.item label="新住人に好意的" name="item8"/> - <combo_box.item label="公園と自然" name="item9"/> - <combo_box.item label="住宅用" name="item10"/> - <combo_box.item label="ショッピング" name="item11"/> - <combo_box.item label="レンタル" name="item13"/> - <combo_box.item label="その他" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="全カテゴリ" name="item0"/> <combo_box.item label="Linden 所在地" name="item1"/> @@ -450,15 +431,9 @@ <panel.string name="access_estate_defined"> (エステートに限定) </panel.string> - <panel.string name="allow_public_access"> - パブリックアクセスを許可 ([MATURITY])(注意:このオプションをオフにすると立入禁止ラインが作成されます) - </panel.string> <panel.string name="estate_override"> 1 つ以上のオプションが、不動産レベルで設定されています。 </panel.string> - <text name="Limit access to this parcel to:"> - この区画へのアクセス - </text> <check_box label="パブリックアクセスを許可(このオプションをオフにすると立入禁止ラインが作成されます)" name="public_access"/> <text name="Only Allow"> 次の住人にのみアクセスを許可: @@ -490,5 +465,6 @@ <button label="削除" label_selected="削除" name="remove_banned"/> </panel> </panel> + <panel label="経験" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_experience_search.xml b/indra/newview/skins/default/xui/ja/floater_experience_search.xml new file mode 100644 index 0000000000..37f3da7d73 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="体験を選択"/> diff --git a/indra/newview/skins/default/xui/ja/floater_experienceprofile.xml b/indra/newview/skins/default/xui/ja/floater_experienceprofile.xml new file mode 100644 index 0000000000..7819b887db --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (なし) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="体験プロフィール"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="編集" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + 評価: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + 場所: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + 所有者: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + グループ: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="許可" name="allow_btn"/> + <button label="無視" name="forget_btn"/> + <button label="ブロック" name="block_btn"/> + <text name="privileged"> + この体験はすべての住人に対して有効です。 + </text> + <button label="嫌がらせの報告" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="名前:"/> + <text name="edit_experience_desc_label" value="説明:"/> + <button label="グループ" name="Group_btn"/> + <text name="edit_ContentRating"> + 評価: + </text> + <icons_combo_box label="Moderate" name="edit_ContentRatingText" tool_tip="体験のレーティング区分を上げると、体験を許可したすべての住人の権限がリセットされます。"> + <icons_combo_box.item label="Adult" name="Adult" value="42"/> + <icons_combo_box.item label="Moderate" name="Mature" value="21"/> + <icons_combo_box.item label="全般" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + 場所: + </text> + <button label="現在に設定" name="location_btn"/> + <button label="場所をクリア" name="clear_btn"/> + <check_box label="体験を有効にする" name="edit_enable_btn" tool_tip=""/> + <check_box label="検索で表示しない" name="edit_private_btn"/> + <text name="changes" value="体験がすべてのリージョンに表示されるには数分かかる場合があります。"/> + <button label="戻る" name="cancel_btn"/> + <button label="保存" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_experiences.xml b/indra/newview/skins/default/xui/ja/floater_experiences.xml new file mode 100644 index 0000000000..5186f8ee38 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="体験"/> diff --git a/indra/newview/skins/default/xui/ja/floater_facebook.xml b/indra/newview/skins/default/xui/ja/floater_facebook.xml index d99841f0de..76149a875e 100644 --- a/indra/newview/skins/default/xui/ja/floater_facebook.xml +++ b/indra/newview/skins/default/xui/ja/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="FACEBOOK に投稿"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="ステータス" name="panel_facebook_status"/> - <panel label="写真" name="panel_facebook_photo"/> - <panel label="チェックイン" name="panel_facebook_place"/> - <panel label="フレンド" name="panel_facebook_friends"/> - <panel label="アカウント" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - エラー - </text> - <text name="connection_loading_text"> - ロード中... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="ステータス" name="panel_facebook_status"/> + <panel label="写真" name="panel_facebook_photo"/> + <panel label="チェックイン" name="panel_facebook_place"/> + <panel label="フレンド" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + エラー + </text> + <text name="connection_loading_text"> + ロード中... + </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml index af96edda79..19d767ab57 100755 --- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="服" name="check_clothing"/> <check_box label="ジェスチャー" name="check_gesture"/> <check_box label="ランドマーク" name="check_landmark"/> - <check_box label="メッシュ" name="check_mesh"/> <check_box label="ノートカード" name="check_notecard"/> + <check_box label="メッシュ" name="check_mesh"/> <check_box label="オブジェクト" name="check_object"/> <check_box label="スクリプト" name="check_script"/> <check_box label="サウンド" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> -または- </text> + <radio_group name="date_search_direction"> + <radio_item label="より新しい" name="newer"/> + <radio_item label="より古い" name="older"/> + </radio_group> <spinner label="経過時間" name="spin_hours_ago"/> <spinner label="経過日数" name="spin_days_ago"/> <button label="閉じる" label_selected="閉じる" name="Close"/> diff --git a/indra/newview/skins/default/xui/ja/floater_lagmeter.xml b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml index e3546cd837..dd51d64ed2 100644 --- a/indra/newview/skins/default/xui/ja/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_lagmeter" title="ラグメーター"> <floater.string name="max_title_msg"> - ラグ メーター + ラグ計測器 </floater.string> <floater.string name="max_width_px"> - 350 + 360 </floater.string> <floater.string name="min_title_msg"> ラグ @@ -22,28 +22,28 @@ 15 </floater.string> <floater.string name="client_frame_time_window_bg_msg"> - ノーマル、ウィンドウは背景に + 標準、ウィンドウは背景に </floater.string> <floater.string name="client_frame_time_critical_msg"> - クライアント フレームレート < [CLIENT_FRAME_RATE_CRITICAL] + クライアントのフレームレートが [CLIENT_FRAME_RATE_CRITICAL] 以下 </floater.string> <floater.string name="client_frame_time_warning_msg"> - クライアント フレームレート: [CLIENT_FRAME_RATE_CRITICAL] ~ [CLIENT_FRAME_RATE_WARNING] + クライアントのフレーム レートが [CLIENT_FRAME_RATE_CRITICAL] と [CLIENT_FRAME_RATE_WARNING] の間 </floater.string> <floater.string name="client_frame_time_normal_msg"> - ノーマル + 標準 </floater.string> <floater.string name="client_draw_distance_cause_msg"> - 考えられる原因: 描画距離の設定が大きすぎる + 考えられる原因:描画距離の設定が高すぎる </floater.string> <floater.string name="client_texture_loading_cause_msg"> - 考えられる原因: 画像のロード中 + 考えられる原因:画像のロード中 </floater.string> <floater.string name="client_texture_memory_cause_msg"> - 考えられる原因: メモリ内の画像数が多すぎる + 考えられる原因:メモリ内に画像が多すぎる </floater.string> <floater.string name="client_complex_objects_cause_msg"> - 考えられる原因: 画面に含まれる複雑なオブジェクトが多すぎる + 考えられる原因:シーンに複雑なオブジェクトが多すぎる </floater.string> <floater.string name="network_text_msg"> ネットワーク @@ -55,13 +55,13 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - 接続でドロップされるパケットの割合: > [NETWORK_PACKET_LOSS_CRITICAL] + 接続で [NETWORK_PACKET_LOSS_CRITICAL]% を超えるパケットが脱落しています </floater.string> <floater.string name="network_packet_loss_warning_msg"> - 接続でドロップされるパケットの割合:[NETWORK_PACKET_LOSS_WARNING] ~ [NETWORK_PACKET_LOSS_CRITICAL] + 接続で [NETWORK_PACKET_LOSS_WARNING]%~[NETWORK_PACKET_LOSS_CRITICAL]% のパケットが脱落しています </floater.string> <floater.string name="network_performance_normal_msg"> - ノーマル + 標準 </floater.string> <floater.string name="network_ping_critical_ms"> 600 @@ -70,16 +70,16 @@ 300 </floater.string> <floater.string name="network_ping_critical_msg"> - 接続の ping 時間: > [NETWORK_PING_CRITICAL] ミリ秒 + 接続の ping 時間が [NETWORK_PING_CRITICAL] ms 以上です </floater.string> <floater.string name="network_ping_warning_msg"> - 接続の ping 時間: [NETWORK_PING_WARNING] ~ [NETWORK_PING_CRITICAL] ミリ秒 + 接続の ping 時間が [NETWORK_PING_WARNING]~[NETWORK_PING_CRITICAL] ms です </floater.string> <floater.string name="network_packet_loss_cause_msg"> - 接続不良になっているか、帯域幅設定が高すぎます。 + 接続不良または '帯域幅' の設定が高すぎる可能性があります </floater.string> <floater.string name="network_ping_cause_msg"> - 接続不良になっているか、ファイル共有アプリケーションに問題があります。 + 接続不良またはファイル共有アプリの可能性があります。 </floater.string> <floater.string name="server_text_msg"> サーバー @@ -94,31 +94,31 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - シミュレーターのフレームレート: < [SERVER_FRAME_RATE_CRITICAL] + シミュレータのフレームレートが [SERVER_FRAME_RATE_CRITICAL] 以下 </floater.string> <floater.string name="server_frame_time_warning_msg"> - シミュレーターのフレームレート: [SERVER_FRAME_RATE_CRITICAL] ~ [SERVER_FRAME_RATE_WARNING] + シミュレータのフレームレートが [SERVER_FRAME_RATE_CRITICAL] ~ [SERVER_FRAME_RATE_WARNING] の間 </floater.string> <floater.string name="server_frame_time_normal_msg"> - ノーマル + 標準 </floater.string> <floater.string name="server_physics_cause_msg"> - 考えられる原因: 物理的オブジェクトが多すぎる + 考えられる原因:物理オブジェクトが多すぎる </floater.string> <floater.string name="server_scripts_cause_msg"> - 考えられる原因: スクリプトを含むオブジェクトが多すぎる + 考えられる原因:スクリプトオブジェクトが多すぎる </floater.string> <floater.string name="server_net_cause_msg"> - 考えられる原因: ネットワーク トラフィック過大 + 考えられる原因:ネットワークトラフィックが多すぎる </floater.string> <floater.string name="server_agent_cause_msg"> - 考えられる原因: 地域内にて動いているアバターが多すぎる + 考えられる原因:リージョン内の人の移動が多すぎる </floater.string> <floater.string name="server_images_cause_msg"> - 考えられる原因: 画像計算が多すぎる + 考えられる原因:画像計算が多すぎる </floater.string> <floater.string name="server_generic_cause_msg"> - 考えられる原因: シミュレーターの過負荷 + 考えられる原因:シミュレータのロードが重すぎる </floater.string> <floater.string name="smaller_label"> >> @@ -131,21 +131,21 @@ クライアント </text> <text name="client_text"> - ノーマル + 標準 </text> <button name="network_lagmeter" tool_tip="ネットワーク ラグ ステータス"/> <text name="network"> ネットワーク </text> <text name="network_text"> - ノーマル + 標準 </text> <button name="server_lagmeter" tool_tip="サーバー ラグ ステータス"/> <text name="server"> サーバー </text> <text name="server_text"> - ノーマル + 標準 </text> - <button label=">> " name="minimize" tool_tip="フローターのサイズをトグル"/> + <button label=">>" name="minimize" tool_tip="フローターのサイズをトグル"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml index 5a155c9f12..864feef8cc 100755 --- a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> スクリプト: [NAME] </floater.string> + <floater.string name="experience_enabled"> + オフにして、現在の体験を削除する + </floater.string> + <floater.string name="no_experiences"> + どの体験にも権限がありません + </floater.string> + <floater.string name="add_experiences"> + 選択して、体験を追加する + </floater.string> + <floater.string name="show_experience_profile"> + クリックして、体験プロフィールを表示する + </floater.string> + <floater.string name="loading"> + ロード中... + </floater.string> <button label="リセット" label_selected="リセット" name="Reset"/> <check_box initial_value="true" label="実行中" name="running"/> <check_box initial_value="true" label="Mono" name="mono"/> + <check_box label="次の体験を使用:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_openobject.xml b/indra/newview/skins/default/xui/ja/floater_openobject.xml index af02ffedda..7bdd1e4980 100755 --- a/indra/newview/skins/default/xui/ja/floater_openobject.xml +++ b/indra/newview/skins/default/xui/ja/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="インベントリにコピー" label_selected="インベントリにコピー" name="copy_to_inventory_button"/> - <button label="コピーして装着" label_selected="コピーして装着" name="copy_and_wear_button"/> + <button label="持ち物にコピー" label_selected="持ち物にコピー" name="copy_to_inventory_button"/> + <button label="コピーしてアウトフィットに追加" label_selected="コピーしてアウトフィットに追加" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml index 9021be5dda..7631cd7aba 100755 --- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml @@ -76,7 +76,7 @@ <combo_box.item label="土地 > 不法侵入 > オブジェクトまたはテクスチャ" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="土地>不法侵入>パーティクル" name="Land__Encroachment__Particles"/> <combo_box.item label="土地>不法侵入>樹木/植物" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="賭けまたはギャンブル" name="Wagering_gambling"/> + <combo_box.item label="ゲーミング ポリシー違反" name="Wagering_gambling"/> <combo_box.item label="その他" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml index 7d0fb27932..f04193d034 100755 --- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> コンピュータに保存できませんでした。 </string> - <button name="advanced_options_btn" tool_tip="詳しい設定"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] px - </text> - <text name="file_size_label"> - [SIZE] キロバイト - </text> + <button label="更新" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - 詳しい設定 - </text> <text name="layer_type_label"> キャプチャ: </text> @@ -68,4 +59,10 @@ <combo_box.item label="フィルターなし" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH]px (横幅) x [HEIGHT]px (高さ) + </text> + <text name="file_size_label"> + [SIZE] キロバイト + </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_top_objects.xml b/indra/newview/skins/default/xui/ja/floater_top_objects.xml index c44f409d4e..cc81ead116 100755 --- a/indra/newview/skins/default/xui/ja/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/ja/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> 何も見つかりませんでした。 </floater.string> + <floater.string name="URLs"> + URL + </floater.string> + <floater.string name="memory"> + メモリ(KB) + </floater.string> <text name="title_text"> ロード中... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="所有者" name="owner"/> <scroll_list.columns label="ロケーション" name="location"/> <scroll_list.columns label="区画" name="parcel"/> - <scroll_list.columns label="時間" name="time"/> + <scroll_list.columns label="日付" name="time"/> <scroll_list.columns label="URL" name="URLs"/> <scroll_list.columns label="メモリ(KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/ja/floater_twitter.xml b/indra/newview/skins/default/xui/ja/floater_twitter.xml index 7cd71df800..6df2045554 100644 --- a/indra/newview/skins/default/xui/ja/floater_twitter.xml +++ b/indra/newview/skins/default/xui/ja/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="作成" name="panel_twitter_photo"/> - <panel label="アカウント" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - エラー - </text> - <text name="connection_loading_text"> - ロード中... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="作成" name="panel_twitter_photo"/> + <panel label="アカウント" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + エラー + </text> + <text name="connection_loading_text"> + ロード中... + </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml index f38dbc71a8..18478b5711 100755 --- a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="新しい順に並べ替え" name="sort_by_recent"/> <menu_item_check label="フォルダを常に名前順に並べる" name="sort_folders_by_name"/> <menu_item_check label="システムフォルダを上にソートする" name="sort_system_folders_to_top"/> - <menu_item_call label="フィルターを表示" name="show_filters"/> + <menu_item_call label="フィルターを表示..." name="show_filters"/> <menu_item_call label="フィルターをリセット" name="reset_filters"/> <menu_item_call label="すべてのフォルダを閉じる" name="close_folders"/> <menu_item_call label="紛失物を空にする" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/ja/menu_url_experience.xml b/indra/newview/skins/default/xui/ja/menu_url_experience.xml new file mode 100644 index 0000000000..582784c2f0 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index 4e6c6808c6..ddab875262 100755 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="新しいインベントリウィンドウ" name="NewInventoryWindow"/> <menu_item_call label="場所..." name="Places"/> <menu_item_call label="ピック..." name="Picks"/> + <menu_item_call label="体験..." name="Experiences"/> <menu_item_call label="カメラコントロール..." name="Camera Controls"/> <menu label="ムーブメント" name="Movement"> <menu_item_call label="座る" name="Sit Down Here"/> @@ -48,7 +49,7 @@ <menu_item_check label="フレンド" name="My Friends"/> <menu_item_check label="グループ" name="My Groups"/> <menu_item_check label="近くにいる人" name="Active Speakers"/> - <menu_item_call label="リストをブロック" name="Block List"/> + <menu_item_check label="リストをブロック" name="Block List"/> <menu_item_check label="着信拒否" name="Do Not Disturb"/> </menu> <menu label="世界" name="World"> diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml index 54663a0367..bfc8d0b724 100755 --- a/indra/newview/skins/default/xui/ja/mime_types.xml +++ b/indra/newview/skins/default/xui/ja/mime_types.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <mimetypes name="default"> <widgetset name="web"> <label name="web_label"> @@ -27,7 +27,7 @@ コンテンツなし </label> <tooltip name="none_tooltip"> - メディアなし + ここにメディアなし </tooltip> </widgetset> <widgetset name="image"> diff --git a/indra/newview/skins/default/xui/ja/mime_types_linux.xml b/indra/newview/skins/default/xui/ja/mime_types_linux.xml index 0ec1030113..cb1e48148f 100755 --- a/indra/newview/skins/default/xui/ja/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_linux.xml @@ -44,6 +44,14 @@ このロケーションのオーディオを再生する </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + コンテンツなし + </label> + <tooltip name="none_tooltip"> + ここにメディアなし + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> リアルタイム・ストリーミング diff --git a/indra/newview/skins/default/xui/ja/mime_types_mac.xml b/indra/newview/skins/default/xui/ja/mime_types_mac.xml index 0ec1030113..cb1e48148f 100755 --- a/indra/newview/skins/default/xui/ja/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_mac.xml @@ -44,6 +44,14 @@ このロケーションのオーディオを再生する </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + コンテンツなし + </label> + <tooltip name="none_tooltip"> + ここにメディアなし + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> リアルタイム・ストリーミング diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 1d52b42039..fba89dc296 100755 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -72,6 +72,10 @@ [MESSAGE] <usetemplate name="okcancelbuttons" notext="取り消し" yestext="はい"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> [APP_NAME] をアップデート中にエラーが発生しました。 ビューワの [http://get.secondlife.com 最新バージョンをダウンロード] してください。 <usetemplate name="okbutton" yestext="OK"/> @@ -597,6 +601,9 @@ L$ が不足しているのでこのグループに参加することができ <notification name="RegionNoTerraforming"> [REGION] では、地形の変更ができません。 </notification> + <notification name="ParcelNoTerraforming"> + あなたには [PARCEL] 区画を地形編集する許可がありません。 + </notification> <notification name="CannotCopyWarning"> あなたには[ITEMS]というアイテムをコピーする許可がありません。他の住人に提供すると、そのアイテムはあなたのインベントリから削除されます。本当にこれらのアイテムを譲りますか? <usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/> @@ -1863,6 +1870,30 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name を参照してくだ 不動産マネージャーを、この不動産限定、または [ALL_ESTATES] から、削除しますか? <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> </notification> + <notification label="不動産を選択" name="EstateAllowedExperienceAdd"> + この不動産の許可リストにのみ追加しますか、それとも [ALL_ESTATES] の許可リストに追加しますか? + <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> + </notification> + <notification label="不動産を選択" name="EstateAllowedExperienceRemove"> + この不動産の許可リストからのみ削除しますか、それとも [ALL_ESTATES] の許可リストから削除しますか? + <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> + </notification> + <notification label="不動産を選択" name="EstateBlockedExperienceAdd"> + この不動産のブロックされたリストにのみ追加しますか、それとも [ALL_ESTATES] のブロックされたリストに追加しますか? + <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> + </notification> + <notification label="不動産を選択" name="EstateBlockedExperienceRemove"> + この不動産のブロックされたリストからのみ削除しますか、それとも [ALL_ESTATES] のブロックされたリストから削除しますか? + <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> + </notification> + <notification label="不動産を選択" name="EstateTrustedExperienceAdd"> + この不動産のキー体験リストにのみ追加しますか、それとも [ALL_ESTATES] のキー体験リストに追加しますか? + <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> + </notification> + <notification label="不動産を選択" name="EstateTrustedExperienceRemove"> + この不動産の信頼済み体験リストからのみ削除しますか、それとも [ALL_ESTATES] の信頼済みリストから削除しますか? + <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> + </notification> <notification label="キックを確認" name="EstateKickUser"> この不動産から [EVIL_USER] を追い出しますか? <usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/> @@ -1937,6 +1968,10 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name を参照してくだ あなたの環境設定がサーバーと同期していないため、テレポートに技術的な問題が発生しています。 <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + リージョンに入ることができません。'[REGION_NAME]' はスキル ゲーミング リージョンであり、あなたはこのリージョンに入るための特定の基準を満たす必要があります。詳しくは、[http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life スキル ゲーミングのよくある質問] を参照してください。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> 今後、[RATING] コンテンツ付きの地域(リージョン)を訪問しようとしているという通知を受け取りません。後でメニューバーの「ミー」 > 「環境設定」 > 「一般」を使用して、コンテンツの環境設定を変更できます。 <usetemplate name="okbutton" yestext="OK"/> @@ -2251,6 +2286,9 @@ Linden Lab <button ignore="交換しない" name="No" text="キャンセル"/> </form> </notification> + <notification name="TooManyWearables"> + [AMOUNT] 以上のアイテムを含むフォルダを装着できません。「詳細設定」 > 「デバッグ設定を表示」 > 「WearFolderLimit」でこの制限を変更できます。 + </notification> <notification label="「通知を受けない」モードの警告" name="DoNotDisturbModePay"> 「通知を受けない」をオンにします。この支払との交換で提供されるアイテムが受信されなくなります。 @@ -2862,7 +2900,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ [MESSAGE] -送信元のオブジェクト:<nolink>[OBJECTNAME]</nolink>、所有者:[NAME]? +送信元のオブジェクト:<nolink>[OBJECTNAME]</nolink>、所有者:[NAME] <form name="form"> <button name="Gotopage" text="ページに移動"/> <button name="Cancel" text="取り消し"/> @@ -2888,6 +2926,72 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ <button name="Mute" text="ブロック"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + 新しい体験を取得できません: +[ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + 所有者が選択されたグループのメンバーでないため、体験グループへの変更が無視されました。 + </notification> + <notification name="UneditableExperienceProfileMessage"> + 体験プロフィールを更新するときに、編集不可の '[field]' フィールドが無視されました。 + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + 体験の所有者のみが設定できる '[field]'フィールドへの変更を無視しました。 + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + 所有者のレーティング区分より高いレーティング区分の体験を設定できません。 + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + 次の条件により、体験プロフィール名および説明の更新ができませんでした: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + 体験 secondlife:///app/experience/[public_id]/profile を削除するために、[region_name] リージョンからテレポートされ、このリージョンに入ることはできなくなりました。 + <form name="form"> + <ignore name="ignore" text="体験を削除するために、リージョンから追放されました"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + キー体験 secondlife:///app/experience/[public_id]/profile に参加することにより、[region_name] リージョンに入ることを許可されました。この体験を削除すると、このリージョンから追放される可能性があります。 + <form name="form"> + <ignore name="ignore" text="体験によりリージョンに入ることを許可されました"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + この目的地へのアクセス権がありません。下の体験を受け入れることにより、このリージョンに入ることができます: + +[EXPERIENCE_LIST] + +その他のキー体験を利用できます。 + </notification> + <notification name="ExperienceEvent"> + [EventType] by the secondlife:///app/experience/[public_id]/profile experience により、オブジェクトでアクション ([EventType]) を実行することが許可されました。 +所有者:secondlife:///app/agent/[OwnerID]/inspect +オブジェクト名:[ObjectName] +区画名:[ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + [EventType] by the secondlife:///app/experience/[public_id]/profile experience により、添付ファイルでアクション ([EventType]) を実行することが許可されました。 +所有者:secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + [NAME] が所有する「<nolink>[OBJECTNAME]</nolink>」 というオブジェクトが、[GRID_WIDE] 体験への参加を要求しています: + +[EXPERIENCE] + +権限が許可されると、体験プロフィールから呼び出さない限り、この体験にこのメッセージが再び表示されることはありません。 + +この体験に関連付けられたスクリプトにより、この体験が有効なリージョンで以下のことを実行できます: + +[QUESTIONS]よろしいですか? + <form name="form"> + <button name="BlockExperience" text="体験をブロック"/> + <button name="Mute" text="オブジェクトをブロックする"/> + <button name="Yes" text="はい"/> + <button name="No" text="いいえ"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> 警告:オブジェクト '<nolink>[OBJECTNAME]</nolink>' は、あなたのリンデンドルアカウントへのフルアクセスを要求しています。アクセスを許可すると、このオブジェクトは、特に警告を発せずに単発で、随時アカウントから資金を削除するか、アカウントを完全に空にします。 @@ -3203,6 +3307,10 @@ M キーを押して変更します。 <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( 作成後[EXISTENCE]秒経過) '[BODYREGION]'の[RESOLUTION]のベークドテクスチャは[TIME]秒後にローカルに更新されました。 + </notification> + <notification name="CannotUploadTexture"> + テクスチャをアップロードできません。 +[REASON] </notification> <notification name="LivePreviewUnavailable"> コピー不可および/または転送不可のため、このテクスチャを表示できません。 diff --git a/indra/newview/skins/default/xui/ja/panel_experience_info.xml b/indra/newview/skins/default/xui/ja/panel_experience_info.xml new file mode 100644 index 0000000000..b3a17fcb56 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="体験プロフィール"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + 場所: + </text> + <text name="LocationTextText"> + どこか + </text> + <button label="テレポート" name="teleport_btn"/> + <button label="地図" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + マーケットプレイスストア: + </text> + <text name="LocationTextText"> + どこか + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + 評価: + </text> + <text name="ContentRatingText"> + Adult + </text> + <text name="Owner"> + 所有者: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="編集" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/ja/panel_experience_list_editor.xml new file mode 100644 index 0000000000..84e60aea56 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + ローディング... + </panel.string> + <panel.string name="panel_allowed"> + 許可された体験: + </panel.string> + <panel.string name="panel_blocked"> + ブロックされた体験: + </panel.string> + <panel.string name="panel_trusted"> + キー体験: + </panel.string> + <panel.string name="no_results"> + (空) + </panel.string> + <text name="text_name"> + 体験リスト + </text> + <scroll_list name="experience_list"> + <columns label="名前" name="experience_name"/> + </scroll_list> + <button label="追加..." name="btn_add"/> + <button label="削除" name="btn_remove"/> + <button label="プロフィール..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_experience_list_item.xml b/indra/newview/skins/default/xui/ja/panel_experience_list_item.xml new file mode 100644 index 0000000000..d72d2bebf6 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + ダミー名 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_experience_log.xml b/indra/newview/skins/default/xui/ja/panel_experience_log.xml new file mode 100644 index 0000000000..39e0e27b05 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="イベントなし。"/> + <string name="loading" value="ローディング..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="時間" name="time"/> + <columns label="イベント" name="event"/> + <columns label="体験" name="experience_name"/> + <columns label="オブジェクト" name="object_name"/> + </scroll_list> + <button label="知らせる" name="btn_notify"/> + <button label="プロフィール" name="btn_profile_xp"/> + <button label="報告" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="すべてのイベントを通知 日数" name="notify_all"/> + <button label="クリア" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_experience_search.xml b/indra/newview/skins/default/xui/ja/panel_experience_search.xml new file mode 100644 index 0000000000..9ab84e7d18 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + 「[TEXT]」は見つかりませんでした + </string> + <string name="no_results"> + 検索結果:ゼロ + </string> + <string name="searching"> + 検索中... + </string> + <string name="loading"> + ロード中... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="進む" name="find"/> + <icons_combo_box label="Moderate" name="maturity"> + <icons_combo_box.item label="Adult" name="Adult" value="42"/> + <icons_combo_box.item label="Moderate" name="Mature" value="21"/> + <icons_combo_box.item label="全般" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="名前" name="experience_name"/> + <columns label="所有者" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="取り消し" name="cancel_btn"/> + <button label="プロフィールを表示" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_experiences.xml b/indra/newview/skins/default/xui/ja/panel_experiences.xml new file mode 100644 index 0000000000..ab0d2a97a4 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="体験をロード中..."/> + <string name="no_experiences" value="体験がありません。"/> + <string name="acquire" value="体験を取得"/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml b/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml index 18ae4f9295..17c628a190 100644 --- a/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Second Life の住人にもなっている Facebook の友だちがいません。今すぐ Facebook の友だちに Second Life に参加してもらいましょう!"/> - <string name="facebook_friends_no_connected" value="現在 Facebook に接続されていません。「アカウント」タブに進んで、この機能を有効にしてください。"/> + <string name="facebook_friends_no_connected" value="現在 Facebook に接続されていません。「ステータス」タブに進んで、この機能を有効にしてください。"/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="SL の友だち"/> <accordion_tab name="tab_suggested_friends" title="これらの人を SL の友だちとして追加"/> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml b/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml index f6d920bd5e..c48f13456b 100644 --- a/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="画像解像度"> - <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="画像フィルター"> - <combo_box.item label="フィルターなし" name="NoFilter"/> - </combo_box> - <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> - <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> - <text name="caption_label"> - コメント (オプション): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="投稿" name="post_photo_btn"/> - <button label="取り消し" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="画像解像度"> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> + <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> + <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> + <text name="caption_label"> + コメント (オプション): + </text> + <button label="投稿" name="post_photo_btn"/> + <button label="取り消し" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_place.xml b/indra/newview/skins/default/xui/ja/panel_facebook_place.xml index e29f69101f..61138f90c1 100644 --- a/indra/newview/skins/default/xui/ja/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/ja/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - 自分がいる場所について何か言ってください: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="投稿" name="post_place_btn"/> - <button label="取り消し" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + 自分がいる場所について何か言ってください: + </text> + <check_box initial_value="false" label="場所の俯瞰図を含める" name="add_place_view_cb"/> + <button label="投稿" name="post_place_btn"/> + <button label="取り消し" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_status.xml b/indra/newview/skins/default/xui/ja/panel_facebook_status.xml index 84e5ae0474..9d962c9d62 100644 --- a/indra/newview/skins/default/xui/ja/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/ja/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - 今、何を考えている? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="投稿" name="post_status_btn"/> - <button label="取り消し" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="次のユーザーとして Facebook に接続:"/> + <string name="facebook_disconnected" value="Facebook に接続していません"/> + <text name="account_caption_label"> + Facebook に接続していません。 + </text> + <panel name="panel_buttons"> + <button label="接続..." name="connect_btn"/> + <button label="切断" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook への投稿について]] + </text> + </panel> + <text name="status_caption_label"> + 今、何を考えている? + </text> + <button label="投稿" name="post_status_btn"/> + <button label="取り消し" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml index 0deadad91d..16d873a8b1 100644 --- a/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="画像解像度"> - <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="画像フィルター"> - <combo_box.item label="フィルターなし" name="NoFilter"/> - </combo_box> - <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> - <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> - <text name="title_label"> - タイトル: - </text> - <text name="description_label"> - 説明: - </text> - <check_box initial_value="true" label="SL の場所を説明の最後に含める" name="add_location_cb"/> - <text name="tags_label"> - タグ: - </text> - <text name="tags_help_label"> - タグをスペースで区切る + <combo_box name="resolution_combobox" tool_tip="画像解像度"> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> + <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> + <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> + <text name="title_label"> + タイトル: + </text> + <text name="description_label"> + 説明: + </text> + <check_box initial_value="true" label="SL の場所を説明の最後に含める" name="add_location_cb"/> + <text name="tags_label"> + タグ: + </text> + <text name="tags_help_label"> + タグをスペースで区切る 複数単語のタグに "" を使用 - </text> - <combo_box name="rating_combobox" tool_tip="Flickr コンテンツのレーティング区分"> - <combo_box.item label="Flickr レーティング区分「Safe」" name="SafeRating"/> - <combo_box.item label="Flickr レーティング区分「Moderate」" name="ModerateRating"/> - <combo_box.item label="Flickr レーティング区分「Restricted」" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="アップロード" name="post_photo_btn"/> - <button label="取り消し" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Flickr コンテンツのレーティング区分"> + <combo_box.item label="Flickr レーティング区分「Safe」" name="SafeRating"/> + <combo_box.item label="Flickr レーティング区分「Moderate」" name="ModerateRating"/> + <combo_box.item label="Flickr レーティング区分「Restricted」" name="RestrictedRating"/> + </combo_box> + <button label="アップロード" name="post_photo_btn"/> + <button label="取り消し" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml index ebcb36d950..bd1013d6ca 100755 --- a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="役割 & メンバー"/> <accordion_tab name="group_notices_tab" title="通知"/> <accordion_tab name="group_land_tab" title="土地・資産"/> + <accordion_tab name="group_experiences_tab" title="体験"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml b/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml index 314aaef7fd..f34fdc6b67 100755 --- a/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="カスタム" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="幅" name="postcard_snapshot_width"/> - <spinner label="高さ" name="postcard_snapshot_height"/> - <check_box label="縦横比の固定" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="画質" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="横幅 x 高さ" name="postcard_snapshot_width"/> + <check_box label="縦横比の固定" name="postcard_keep_aspect_check"/> + <slider label="品質:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml index 2c0359cb15..c1ddf08465 100755 --- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml @@ -14,9 +14,10 @@ <text name="Web:"> Web: </text> - <radio_group name="use_external_browser"> - <radio_item label="指定のブラウザ(IE や Firefox)を使用" name="external" tool_tip="デフォルトのシステム Web ブラウザでヘルプや Web リンク先などを見ます。全画面で起動中にはおすすめしません。" value="true"/> - <radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザでヘルプや Web リンクなどを見ます。[APP_NAME] 内に新しいウィンドウでこのブラウザが開きます。" value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="すべてのリンクにマイ ブラウザ (Chrome、Firefox、IE) を使用" name="internal" tool_tip="デフォルトのシステム Web ブラウザでヘルプや Web リンク先などを見ます。全画面で起動中にはおすすめしません。" value="0"/> + <radio_item label="Second Life リンクにのみ内蔵ブラウザを使用" name="external" tool_tip="ヘルプ、Web リンクなどにはデフォルトシステムのブラウザを使用します。 +内蔵ブラウザは LindenLab/SecondLife リンクにのみ使用されます。" value="1"/> </radio_group> <check_box initial_value="true" label="プラグインを有効にする" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Cookie を受け入れる" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/ja/panel_region_experiences.xml b/indra/newview/skins/default/xui/ja/panel_region_experiences.xml new file mode 100644 index 0000000000..f13c7bea4d --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="体験" name="Experiences"> + <panel.string name="trusted_estate_text"> + どんな体験でもキーになる可能性があります。 + +キー体験には、この不動産で動作する権限があります。 + +さらに、不動産でパブリックアクセスが許可されない場合、キー体験に参加する住人は不動産に入って、キー体験にいる間滞在することができます。 + </panel.string> + <panel.string name="allowed_estate_text"> + ランドスコープとなる体験のみ許可されます。 + +許可される体験には、この不動産で実行する権限があります。 + </panel.string> + <panel.string name="blocked_estate_text"> + グリッドスコープ体験のみブロックできます。 + +ブロックされた体験は、この不動産では実行できません。 + </panel.string> + <panel.string name="estate_caption"> + このタブの設定への変更は、不動産内のすべての地域に影響されます。 + </panel.string> + <panel.string name="allowed_parcel_text"> + ランドスコープとなる体験のみ許可されます。 + +許可された体験には、この不動産でブロックされていない場合、この区画で実行する権限があります。 + </panel.string> + <panel.string name="blocked_parcel_text"> + 住人の体験をブロックできます。 + +ブロックされた体験は、この区画では実行できません。 + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_script_experience.xml b/indra/newview/skins/default/xui/ja/panel_script_experience.xml new file mode 100644 index 0000000000..1c5ea2958b --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="体験"> + <button label="体験" name="Expand Experience"/> + <check_box label="次の体験を使用:" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="体験を選択..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + 体験の貢献者ではありません。 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml index e496e6602b..a42dd12a9c 100755 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - インベントリに保存 + インベントリ </text> <text name="hint_lbl"> 画像をインベントリに保存するには L$[UPLOAD_COST] の費用がかかります。画像をテクスチャとして保存するには平方形式の 1 つを選択してください。 @@ -13,8 +13,8 @@ <combo_box.item label="大(512x512)" name="Large(512x512)"/> <combo_box.item label="カスタム" name="Custom"/> </combo_box> - <spinner label="幅" name="inventory_snapshot_width"/> - <spinner label="高さ" name="inventory_snapshot_height"/> + <spinner label="横幅 x 高さ" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="縦横比の固定" name="inventory_keep_aspect_check"/> <button label="取り消し" name="cancel_btn"/> <button label="保存" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml index cb658fb6c9..d23056a3d5 100755 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - コンピューターに保存 + ディスク </text> <combo_box label="解像度" name="local_size_combo"> <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="カスタム" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="幅" name="local_snapshot_width"/> - <spinner label="高さ" name="local_snapshot_height"/> - <check_box label="縦横比の固定" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="書式" name="local_format_combo"> - <combo_box.item label="PNG(可逆圧縮)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP(可逆圧縮)" name="BMP"/> - </combo_box> - <slider label="画質" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="横幅 x 高さ" name="local_snapshot_width"/> + <check_box label="縦横比の固定" name="local_keep_aspect_check"/> + <text name="local_format_label"> + フォーマット: + </text> + <combo_box label="書式" name="local_format_combo"> + <combo_box.item label="PNG(可逆圧縮)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP(可逆圧縮)" name="BMP"/> + </combo_box> + <slider label="品質:" name="image_quality_slider"/> <button label="取り消し" name="cancel_btn"/> <flyout_button label="保存" name="save_btn" tool_tip="画像をファイルに保存"> <flyout_button.item label="保存" name="save_item"/> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml index 6ce492476b..492115bec0 100755 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="プロフィールフィードに投稿する" name="save_to_profile_btn"/> - <button label="メール" name="save_to_email_btn"/> - <button label="インベントリに保存(L$[Amount])" name="save_to_inventory_btn"/> - <button label="コンピューターに保存" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - 宛先: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="ディスクに保存" name="save_to_computer_btn"/> + <button label="持ち物に保存(L$[Amount])" name="save_to_inventory_btn"/> + <button label="プロフィールにアップロード" name="save_to_profile_btn"/> + <button label="Facebook にアップロード" name="send_to_facebook_btn"/> + <button label="Twitter にアップロード" name="send_to_twitter_btn"/> + <button label="Flickr にアップロード" name="send_to_flickr_btn"/> + <button label="メールにより送信" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml index 1ddd723840..569c07ad47 100755 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml @@ -10,8 +10,12 @@ 送信中... </string> <text name="title"> - メール + E メール </text> - <button label="メッセージ" name="message_btn"/> - <button label="設定" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="メッセージ" name="panel_postcard_message"/> + <panel label="設定" name="panel_postcard_settings"/> + </tab_container> + <button label="取り消し" name="cancel_btn"/> + <button label="送信" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml index b860a6afe9..80d400c846 100755 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - プロフィールフィードに投稿する + プロフィール </text> <combo_box label="解像度" name="profile_size_combo"> <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="カスタム" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="幅" name="profile_snapshot_width"/> - <spinner label="高さ" name="profile_snapshot_height"/> - <check_box label="縦横比の固定" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - キャプション: - </text> - <check_box initial_value="true" label="場所を含む" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="横幅 x 高さ" name="profile_snapshot_width"/> + <check_box label="縦横比の固定" name="profile_keep_aspect_check"/> + <text name="caption_label"> + キャプション: + </text> + <check_box initial_value="true" label="場所を含む" name="add_location_cb"/> <button label="取り消し" name="cancel_btn"/> <button label="投稿" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml b/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml index 8e67d8fd19..cdb45e1853 100644 --- a/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - 何が起きているのでしょうか? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="SL の場所を含む" name="add_location_cb"/> - <check_box initial_value="true" label="写真を掲載する" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="画像解像度"> - <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="画像フィルター"> - <combo_box.item label="フィルターなし" name="NoFilter"/> - </combo_box> - <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> - <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="ツイート" name="post_photo_btn"/> - <button label="取り消し" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + 何が起きているのでしょうか? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="SL の場所を含む" name="add_location_cb"/> + <check_box initial_value="true" label="写真を含める" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="画像解像度"> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> + <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> + <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> + <button label="ツイート" name="post_photo_btn"/> + <button label="取り消し" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml index e64460470c..eb2c12accc 100755 --- a/indra/newview/skins/default/xui/ja/role_actions.xml +++ b/indra/newview/skins/default/xui/ja/role_actions.xml @@ -71,4 +71,8 @@ <action description="グループボイスチャットに参加する" longdescription=" この能力を持つ役割のメンバーは、グループボイスチャットセッションに参加できます。 注: ボイスチャットセッションにアクセスするには、グループチャットに参加する能力が必要です。 " name="join voice chat" value="27"/> <action description="グループチャットを管理する" longdescription=" この能力を持つ役割のメンバーは、グループボイスチャットセッションおよびグループテキストチャットセッションへのアクセスや参加をコントロールすることができます。 " name="moderate group chat" value="37"/> </action_set> + <action_set description="これらの機能には、このグループにより所有される体験を変更する機能が含まれます。" name="experience_tools_experience"> + <action description="体験管理者" longdescription="この機能を持つ役割のメンバーは、体験のメタデータを編集できます。" name="experience admin" value="49"/> + <action description="体験貢献者" longdescription="この機能を持つ役割のメンバーは、体験のスクリプトを提供できます。" name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml index e70d91d258..56a8b0e097 100755 --- a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="アイテムのプロフィール"> + <panel.string name="loading_experience"> + (ローディング) + </panel.string> <panel.string name="unknown"> (不明) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> 取得: </text> + <text name="LabelItemExperienceTitle"> + 体験: + </text> <panel name="perms_inv"> <text name="perm_modify"> あなたができること: diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index d046e11571..e825389895 100755 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -448,6 +448,9 @@ support@secondlife.com にお問い合わせください。 <string name="TooltipMustSingleDrop"> アイテムは 1 つだけここにドラッグできます </string> + <string name="TooltipTooManyWearables"> + [AMOUNT] 以上のアイテムを含むフォルダを装着できません。「詳細設定」 > 「デバッグ設定を表示」 > 「WearFolderLimit」でこの制限を変更できます。 + </string> <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipOutboxDragToWorld"> マーチャントボックス内のアイテムを Rez することはできません @@ -1059,9 +1062,7 @@ support@secondlife.com にお問い合わせください。 <string name="AgentNameSubst"> (あなた) </string> - <string name="JoinAnExperience"> - 体験に参加する - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> 土地のアクセスリストを管理するときにアラートを表示しない </string> @@ -1872,6 +1873,9 @@ support@secondlife.com にお問い合わせください。 <string name="CompileQueueUnknownFailure"> 原因不明の失敗によりダウンロードができません </string> + <string name="CompileNoExperiencePerm"> + [EXPERIENCE] 体験による [SCRIPT] スクリプトのスキップ。 + </string> <string name="CompileQueueTitle"> リコンパイル進行 </string> @@ -5263,6 +5267,87 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="UserDictionary"> [User] </string> + <string name="experience_tools_experience"> + 体験 + </string> + <string name="ExperienceNameNull"> + (体験なし) + </string> + <string name="ExperienceNameUntitled"> + (タイトルのない体験) + </string> + <string name="Land-Scope"> + ランドスコープ + </string> + <string name="Grid-Scope"> + グリッドスコープ + </string> + <string name="Allowed_Experiences_Tab"> + 許可 + </string> + <string name="Blocked_Experiences_Tab"> + 停止 + </string> + <string name="Contrib_Experiences_Tab"> + 貢献者 + </string> + <string name="Admin_Experiences_Tab"> + 管理 + </string> + <string name="Recent_Experiences_Tab"> + 最新 + </string> + <string name="Owned_Experiences_Tab"> + 所有 + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], max [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + コントロールを引き継ぐ + </string> + <string name="ExperiencePermission3"> + アバターでアニメーションをトリガー + </string> + <string name="ExperiencePermission4"> + アバターに装着 + </string> + <string name="ExperiencePermission9"> + カメラ追従 + </string> + <string name="ExperiencePermission10"> + カメラのコントロール + </string> + <string name="ExperiencePermission11"> + あなたをテレポート + </string> + <string name="ExperiencePermission12"> + 体験の権限を自動的に承諾 + </string> + <string name="ExperiencePermissionShortUnknown"> + が不明な操作を実行しました: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + コントロールする + </string> + <string name="ExperiencePermissionShort3"> + アニメーションをトリガー + </string> + <string name="ExperiencePermissionShort4"> + 取り付ける + </string> + <string name="ExperiencePermissionShort9"> + カメラを追跡 + </string> + <string name="ExperiencePermissionShort10"> + カメラを制御 + </string> + <string name="ExperiencePermissionShort11"> + テレポート + </string> + <string name="ExperiencePermissionShort12"> + 権限 + </string> <string name="logging_calls_disabled_log_empty"> 会話はログに記録されていません。ログの記録を開始するには、「環境設定」>「チャット」で「保存: ログのみ」または「保存: ログと会話のテキスト」を選択します。 </string> diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml index 7868c25807..4555420ba8 100755 --- a/indra/newview/skins/default/xui/ja/teleport_strings.xml +++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml @@ -50,6 +50,9 @@ <message name="MustGetAgeRegion"> この地域(リージョン)に入るには 18 才以上である必要があります。 </message> + <message name="RegionTPSpecialUsageBlocked"> + リージョンに入ることができません。'[REGION_NAME]' はスキル ゲーミング リージョンであり、あなたはこのリージョンに入るための特定の基準を満たす必要があります。詳しくは、[http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life スキル ゲーミングのよくある質問] を参照してください。 + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml index f48280840c..fee939ab46 100755 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -308,9 +308,6 @@ Apenas lotes maiores podem ser listados na busca. <panel.string name="push_restrict_region_text"> Proibido empurrar (regulamento da região) </panel.string> - <panel.string name="see_avs_text"> - Avatares em outros lotes podem ver - </panel.string> <text name="allow_label"> Autorizar outros residentes a: </text> @@ -336,22 +333,6 @@ Apenas lotes maiores podem ser listados na busca. <check_box label="Seguro (sem danos)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, impedindo lutas com danos. Se não ativado, lutas com danos é habilitado."/> <check_box label="Proibido empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. Ativar essa opção ajuda a prevenir comportamentos desordeiros no seu terreno."/> <check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/> - <combo_box name="land category with adult"> - <combo_box.item label="Qualquer categoria" name="item0"/> - <combo_box.item label="Locação Linden" name="item1"/> - <combo_box.item label="Adulto" name="item2"/> - <combo_box.item label="Artes e cultura" name="item3"/> - <combo_box.item label="Negócios" name="item4"/> - <combo_box.item label="Educacional" name="item5"/> - <combo_box.item label="Jogos" name="item6"/> - <combo_box.item label="Moradia" name="item7"/> - <combo_box.item label="Amigável a novos usuários" name="item8"/> - <combo_box.item label="Parques & Natureza" name="item9"/> - <combo_box.item label="Residencial" name="item10"/> - <combo_box.item label="Compras" name="item11"/> - <combo_box.item label="Aluguel" name="item13"/> - <combo_box.item label="Outros" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Qualquer categoria" name="item0"/> <combo_box.item label="Locação Linden" name="item1"/> @@ -451,15 +432,9 @@ Mídia: <panel.string name="access_estate_defined"> (Definições do terreno) </panel.string> - <panel.string name="allow_public_access"> - Acesso para público: [MATURITY]) (Desmarcar esse item cria limites) - </panel.string> <panel.string name="estate_override"> Uma ou mais destas opções está definida no nível de propriedade. </panel.string> - <text name="Limit access to this parcel to:"> - Acesso a este lote - </text> <check_box label="Permitir acesso público (Desmarcar esse item cria limites)" name="public_access"/> <text name="Only Allow"> Permitir acesso apenas para residentes que: @@ -491,5 +466,6 @@ Mídia: <button label="Tirar" label_selected="Tirar" name="remove_banned"/> </panel> </panel> + <panel label="EXPERIÊNCIAS" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_experience_search.xml b/indra/newview/skins/default/xui/pt/floater_experience_search.xml new file mode 100644 index 0000000000..cf87717b45 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="ESCOLHER EXPERIÊNCIA"/> diff --git a/indra/newview/skins/default/xui/pt/floater_experienceprofile.xml b/indra/newview/skins/default/xui/pt/floater_experienceprofile.xml new file mode 100644 index 0000000000..97f8576b16 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (none) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Perfil de experiência"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Editar" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Classificação: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Localização: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Proprietário: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Grupo: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="Permitir" name="allow_btn"/> + <button label="Ignorar" name="forget_btn"/> + <button label="Bloquear" name="block_btn"/> + <text name="privileged"> + Essa experiência está disponível para todos os residentes. + </text> + <button label="Denunciar abuso" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Nome:"/> + <text name="edit_experience_desc_label" value="Descrição:"/> + <button label="Grupo" name="Group_btn"/> + <text name="edit_ContentRating"> + Classificação: + </text> + <icons_combo_box label="Moderado" name="edit_ContentRatingText" tool_tip="Aumentar a classificação de maturidade sobre uma experiência redefinirá a permissão para todos os residentes que permitiram a experiência."> + <icons_combo_box.item label="Adulto" name="Adult" value="42"/> + <icons_combo_box.item label="Moderado" name="Mature" value="21"/> + <icons_combo_box.item label="Geral" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Localização: + </text> + <button label="Definir como atual" name="location_btn"/> + <button label="Limpar localização" name="clear_btn"/> + <check_box label="Ativar experiência" name="edit_enable_btn" tool_tip=""/> + <check_box label="Ocultar nos resultados de pesquisa" name="edit_private_btn"/> + <text name="changes" value="As alterações de experiência podem levar vários minutos para ser visualizadas em todas as regiões."/> + <button label="Retornar" name="cancel_btn"/> + <button label="Salvar" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_experiences.xml b/indra/newview/skins/default/xui/pt/floater_experiences.xml new file mode 100644 index 0000000000..53be98e3f9 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="EXPERIÊNCIAS"/> diff --git a/indra/newview/skins/default/xui/pt/floater_facebook.xml b/indra/newview/skins/default/xui/pt/floater_facebook.xml index c211d75e9b..af30582237 100644 --- a/indra/newview/skins/default/xui/pt/floater_facebook.xml +++ b/indra/newview/skins/default/xui/pt/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="PUBLICAR NO FACEBOOK"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="STATUS" name="panel_facebook_status"/> - <panel label="FOTO" name="panel_facebook_photo"/> - <panel label="FAZER CHECK IN" name="panel_facebook_place"/> - <panel label="AMIGOS" name="panel_facebook_friends"/> - <panel label="CONTA" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Erro - </text> - <text name="connection_loading_text"> - Carregando... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="STATUS" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="FAZER CHECK IN" name="panel_facebook_place"/> + <panel label="AMIGOS" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Erro + </text> + <text name="connection_loading_text"> + Carregando... + </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml index 71759abdc2..2bb95a5605 100755 --- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Roupas" name="check_clothing"/> <check_box label="Gestos" name="check_gesture"/> <check_box label="Landmarks" name="check_landmark"/> - <check_box label="Meshes:" name="check_mesh"/> <check_box label="Anotações" name="check_notecard"/> + <check_box label="Meshes:" name="check_mesh"/> <check_box label="Objetos" name="check_object"/> <check_box label="Scripts" name="check_script"/> <check_box label="Sons" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - OU - </text> + <radio_group name="date_search_direction"> + <radio_item label="Antes de" name="newer"/> + <radio_item label="Depois de" name="older"/> + </radio_group> <spinner label="Horas Atrás" name="spin_hours_ago"/> <spinner label="Dias Atrás" name="spin_days_ago"/> <button label="Fechar" label_selected="Fechar" name="Close"/> diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml index 9932318293..cdaec96c86 100644 --- a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_lagmeter" title="LAG - Índice"> <floater.string name="max_title_msg"> - Medidor de Atraso + Lag Meter </floater.string> <floater.string name="max_width_px"> 360 </floater.string> <floater.string name="min_title_msg"> - Atraso + Lag </floater.string> <floater.string name="min_width_px"> 90 @@ -22,28 +22,28 @@ 15 </floater.string> <floater.string name="client_frame_time_window_bg_msg"> - Normal, janela por baixo + Normal, janela em segundo plano </floater.string> <floater.string name="client_frame_time_critical_msg"> - Taxa de quadros do Cliente abaixo de [CLIENT_FRAME_RATE_CRITICAL] + Taxa de quadros do cliente menor que [CLIENT_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="client_frame_time_warning_msg"> - Taxa de quadros do Cliente entre [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING] + Taxa de quadros do cliente entre [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING] </floater.string> <floater.string name="client_frame_time_normal_msg"> Normal </floater.string> <floater.string name="client_draw_distance_cause_msg"> - Causa possível: Distância de desenho ajustada muito alta + Possível causa: distância de desenho definida com um valor muito alto </floater.string> <floater.string name="client_texture_loading_cause_msg"> - Causa possível: Carregamento de Imagens + Possível causa: imagens em carregamento </floater.string> <floater.string name="client_texture_memory_cause_msg"> - Causa possível: Muitas imagens na memória + Possível causa: muitas imagens na memória </floater.string> <floater.string name="client_complex_objects_cause_msg"> - Causa possível: Muitos objetos complexos na cena + Possível causa: muitos objetos complexos na cena </floater.string> <floater.string name="network_text_msg"> Rede @@ -55,10 +55,10 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - Conexão está caindo para cerca de [NETWORK_PACKET_LOSS_CRITICAL]% de pacotes + A conexão está caindo devido a [NETWORK_PACKET_LOSS_CRITICAL]% de pacotes </floater.string> <floater.string name="network_packet_loss_warning_msg"> - Conexão está caindo [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de pacotes + A conexão está caindo devido a [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de pacotes </floater.string> <floater.string name="network_performance_normal_msg"> Normal @@ -70,16 +70,16 @@ 300 </floater.string> <floater.string name="network_ping_critical_msg"> - Tempo de conexão de ping é cerca de [NETWORK_PING_CRITICAL] ms + Ping time da conexão com mais de [NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_ping_warning_msg"> - Tempo de conexão de ping é [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + Ping time da conexão com mais de [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms </floater.string> <floater.string name="network_packet_loss_cause_msg"> - Possível conexão ruim ou 'Largura de Banda' escolhida muito alta. + Possível conexão ruim ou pref de 'Banda larga' muito alta </floater.string> <floater.string name="network_ping_cause_msg"> - Possível conexão ruim ou aplicativos compartilhando arquivos. + Possível conexão ruim ou app de compartilhamento de arquivo </floater.string> <floater.string name="server_text_msg"> Servidor @@ -94,31 +94,31 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - Taxa de quadros abaixo de [SERVER_FRAME_RATE_CRITICAL] + Taxa de quadros de simulador abaixo de [SERVER_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="server_frame_time_warning_msg"> - Taxa de quadros entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING] + Taxa de quadros de simulador entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING] </floater.string> <floater.string name="server_frame_time_normal_msg"> Normal </floater.string> <floater.string name="server_physics_cause_msg"> - Causa possível: Muitos objetos físicos + Possível causa: muitos objetos físicos </floater.string> <floater.string name="server_scripts_cause_msg"> - Causa possível: Muitos objetos com scripts + Possível causa: muitos objetos de script </floater.string> <floater.string name="server_net_cause_msg"> - Causa possível: Muito tráfego na rede + Possível causa: tráfego de rede intenso </floater.string> <floater.string name="server_agent_cause_msg"> - Causa possível: Muitas pessoas se movendo na região + Possível causa: muitas pessoas se movendo na região </floater.string> <floater.string name="server_images_cause_msg"> - Causa possível: Muitos cálculos de imagem + Possível causa: muitos cálculos de imagem </floater.string> <floater.string name="server_generic_cause_msg"> - Causa possível: Carga no simulador muito pesada + Possível causa: carga do simulador muito pesada </floater.string> <floater.string name="smaller_label"> >> @@ -126,7 +126,7 @@ <floater.string name="bigger_label"> << </floater.string> - <button label="" label_selected="" name="client_lagmeter" tool_tip="Status de atraso no Cliente"/> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Status do lag do cliente"/> <text name="client"> Cliente </text> @@ -134,7 +134,7 @@ Normal </text> <text left="30" name="client_lag_cause" right="-10"/> - <button label="" label_selected="" name="network_lagmeter" tool_tip="Status de atraso na rede"/> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Status do lag da rede"/> <text name="network"> Rede </text> @@ -142,7 +142,7 @@ Normal </text> <text left="30" name="network_lag_cause" right="-10"/> - <button label="" label_selected="" name="server_lagmeter" tool_tip="Status de atraso no servidor"/> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Status do lag do servidor"/> <text name="server"> Servidor </text> diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml index 5ad116ac8a..635bc2d34b 100755 --- a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> SCRIPT: [NAME] </floater.string> + <floater.string name="experience_enabled"> + Desmarque para remover a experiência atual + </floater.string> + <floater.string name="no_experiences"> + Você não está autorizado a nenhuma experiência + </floater.string> + <floater.string name="add_experiences"> + Selecione para adicionar uma experiência + </floater.string> + <floater.string name="show_experience_profile"> + Clique para visualizar o perfil da experiência + </floater.string> + <floater.string name="loading"> + Carregando... + </floater.string> <button label="Resetar" label_selected="Resetar" name="Reset"/> <check_box initial_value="true" label="Correndo" name="running"/> <check_box initial_value="true" label="Mono" left="86" name="mono"/> + <check_box label="Usar experiência:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml index 0dc2852bac..164bfee3aa 100755 --- a/indra/newview/skins/default/xui/pt/floater_openobject.xml +++ b/indra/newview/skins/default/xui/pt/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="Copiar para Inventário" label_selected="Copiar para Inventário" name="copy_to_inventory_button" width="132"/> - <button label="Copiar e Vestir" label_selected="Copiar e Vestir" left="152" name="copy_and_wear_button"/> + <button label="Copiar para inventário" label_selected="Copiar para inventário" name="copy_to_inventory_button" width="132"/> + <button label="Copiar e adicionar à roupa" label_selected="Copiar e adicionar à roupa" left="152" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml index e6d9961d0b..f30201fc33 100755 --- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml @@ -76,7 +76,7 @@ <combo_box.item label="Terreno > Invasão > Objetos ou texturas" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terra > Invasão > Partículas" name="Land__Encroachment__Particles"/> <combo_box.item label="Terra > Violação > Árvores/plantas" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Apostas ou jogos de azar" name="Wagering_gambling"/> + <combo_box.item label="Violação da política sobre jogos" name="Wagering_gambling"/> <combo_box.item label="Outro" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml index 3dd7f69d50..e3812ed708 100755 --- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> Falha ao salvar no computador. </string> - <button name="advanced_options_btn" tool_tip="Opções avançadas"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] px - </text> - <text name="file_size_label"> - [TAMANHO] KB - </text> + <button label="ATUALIZAR" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - OPÇÕES AVANÇADAS - </text> <text name="layer_type_label"> Capturar: </text> @@ -68,4 +59,10 @@ <combo_box.item label="Sem filtro" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH]px (largura) x [HEIGHT]px (altura) + </text> + <text name="file_size_label"> + [TAMANHO] KB + </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml index ef682714c6..f37b5be23f 100755 --- a/indra/newview/skins/default/xui/pt/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> Nenhum encontrado. </floater.string> + <floater.string name="URLs"> + URLs + </floater.string> + <floater.string name="memory"> + Memória (KB) + </floater.string> <text name="title_text"> Carregando... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Proprietário" name="owner"/> <scroll_list.columns label="Local" name="location"/> <scroll_list.columns label="Lote" name="parcel"/> - <scroll_list.columns label="Tempo" name="time"/> + <scroll_list.columns label="Data" name="time"/> <scroll_list.columns label="URLs" name="URLs"/> <scroll_list.columns label="Memória (KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/pt/floater_twitter.xml b/indra/newview/skins/default/xui/pt/floater_twitter.xml index 4d7f9e323c..14bee3ffc3 100644 --- a/indra/newview/skins/default/xui/pt/floater_twitter.xml +++ b/indra/newview/skins/default/xui/pt/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="REDIGIR" name="panel_twitter_photo"/> - <panel label="CONTA" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Erro - </text> - <text name="connection_loading_text"> - Carregando... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="REDIGIR" name="panel_twitter_photo"/> + <panel label="CONTA" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Erro + </text> + <text name="connection_loading_text"> + Carregando... + </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml index 6faea517fe..d3e6534912 100755 --- a/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="Ordenar por mais recente" name="sort_by_recent"/> <menu_item_check label="Sempre ordenar pastas por nome" name="sort_folders_by_name"/> <menu_item_check label="Pastas do sistema no topo" name="sort_system_folders_to_top"/> - <menu_item_call label="Mostrar filtros" name="show_filters"/> + <menu_item_call label="Mostrar filtros..." name="show_filters"/> <menu_item_call label="Restabelecer filtros" name="reset_filters"/> <menu_item_call label="Fechar todas as pastas" name="close_folders"/> <menu_item_call label="Esvaziar achados e perdidos" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/pt/menu_url_experience.xml b/indra/newview/skins/default/xui/pt/menu_url_experience.xml new file mode 100644 index 0000000000..1bbc27f267 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index a761cfa177..db906b1385 100755 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Nova janela de inventário" name="NewInventoryWindow"/> <menu_item_call label="Lugares..." name="Places"/> <menu_item_call label="Destaques..." name="Picks"/> + <menu_item_call label="Experiências..." name="Experiences"/> <menu_item_call label="Controles da câmera..." name="Camera Controls"/> <menu label="Movimentos" name="Movement"> <menu_item_call label="Sentar" name="Sit Down Here"/> @@ -48,7 +49,7 @@ <menu_item_check label="Amigos" name="My Friends"/> <menu_item_check label="Grupos" name="My Groups"/> <menu_item_check label="Pessoas próximas" name="Active Speakers"/> - <menu_item_call label="Lista de bloqueados" name="Block List"/> + <menu_item_check label="Lista de bloqueados" name="Block List"/> <menu_item_check label="Não perturbe" name="Do Not Disturb"/> </menu> <menu label="Mundo" name="World"> diff --git a/indra/newview/skins/default/xui/pt/mime_types.xml b/indra/newview/skins/default/xui/pt/mime_types.xml index f9c0496eea..be387088bd 100755 --- a/indra/newview/skins/default/xui/pt/mime_types.xml +++ b/indra/newview/skins/default/xui/pt/mime_types.xml @@ -24,10 +24,10 @@ </widgetset> <widgetset name="none"> <label name="none_label"> - Sem conteúdo disponível + Sem conteúdo </label> <tooltip name="none_tooltip"> - Não há mídia disponível aqui. + Sem mídia aqui </tooltip> </widgetset> <widgetset name="image"> @@ -64,7 +64,7 @@ </mimetype> <mimetype name="none/none"> <label name="none/none_label"> - - Nenhum - + - Nenhum - </label> </mimetype> <mimetype name="audio/*"> diff --git a/indra/newview/skins/default/xui/pt/mime_types_linux.xml b/indra/newview/skins/default/xui/pt/mime_types_linux.xml index 789843cbba..70dd03feab 100755 --- a/indra/newview/skins/default/xui/pt/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/pt/mime_types_linux.xml @@ -44,6 +44,14 @@ Tocar clipe </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Sem conteúdo + </label> + <tooltip name="none_tooltip"> + Sem mídia aqui + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Stream em tempo real diff --git a/indra/newview/skins/default/xui/pt/mime_types_mac.xml b/indra/newview/skins/default/xui/pt/mime_types_mac.xml index 34b40e94ab..17cb5f7093 100755 --- a/indra/newview/skins/default/xui/pt/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/pt/mime_types_mac.xml @@ -44,6 +44,14 @@ Tocar o áudio desta localização </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Sem conteúdo + </label> + <tooltip name="none_tooltip"> + Sem mídia aqui + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Real Time Streaming diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 00c0b13670..a01c9c757b 100755 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -72,6 +72,10 @@ Detalhes do erro: O aviso '[_NAME]' não foi localizado no arquivo not [MESSAGE] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sim"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> Um erro ocorreu ao atualizar o [APP_NAME]. [http://get.secondlife.com Baixe a versão atual] do Visualizador. <usetemplate name="okbutton" yestext="OK"/> @@ -569,6 +573,9 @@ Para aumentar a qualidade do vídeo, vá para Preferências > Vídeo. <notification name="RegionNoTerraforming"> A região [REGION] não permite ser aplainada. </notification> + <notification name="ParcelNoTerraforming"> + Você não está autorizado a terraplanar o terreno [PARCEL]. + </notification> <notification name="CannotCopyWarning"> Você não tem autorização para copiar os itens abaixo: [ITEMS] @@ -1817,6 +1824,30 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar. Remover o gerente da propriedade desta propriedade apenas ou para [ALL_ESTATES]? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/> </notification> + <notification label="Selecionar propriedade" name="EstateAllowedExperienceAdd"> + Adicionar à lista de permitidos apenas para essa propriedade ou para [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as propriedades" yestext="Esta propriedade"/> + </notification> + <notification label="Selecionar propriedade" name="EstateAllowedExperienceRemove"> + Remover da lista de permitidos apenas para essa propriedade ou para [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as propriedades" yestext="Esta propriedade"/> + </notification> + <notification label="Selecionar propriedade" name="EstateBlockedExperienceAdd"> + Adicionar à lista de bloqueados dessa propriedade apenas ou de [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as propriedades" yestext="Esta propriedade"/> + </notification> + <notification label="Selecionar propriedade" name="EstateBlockedExperienceRemove"> + Remover da lista de bloqueados para essa propriedade somente ou para [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as propriedades" yestext="Esta propriedade"/> + </notification> + <notification label="Selecionar propriedade" name="EstateTrustedExperienceAdd"> + Adicionar à lista-chave dessa propriedade apenas ou de [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as propriedades" yestext="Esta propriedade"/> + </notification> + <notification label="Selecionar propriedade" name="EstateTrustedExperienceRemove"> + Remover da lista-chave para essa propriedade somente ou para [ALL_ESTATES]? + <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as propriedades" yestext="Esta propriedade"/> + </notification> <notification label="Confirmar expulsão" name="EstateKickUser"> Expulsar [EVIL_USER] desta propriedade? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/> @@ -1891,6 +1922,10 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar. Estamos tendo dificuldades técnicas com seu teletransporte, pois suas preferências estão dessincronizadas com o servidor. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + Não é possível inserir a região. '[REGION_NAME]' é uma Região de Skill Gaming, portanto você deve atender certos critérios para poder entrar. Para maiores detalhes, consulte as [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> Você não receberá mais notificações de que está prestes a visitar uma região com conteúdo [RATING]. Posteriormente você poderá alterar suas preferências de conteúdo acessando Eu > Preferências > Geral da barra do menu. <usetemplate name="okbutton" yestext="OK"/> @@ -2198,6 +2233,9 @@ Você deseja substituí-lo pelo objeto selecionado? <button ignore="Never Replace" name="No" text="Não"/> </form> </notification> + <notification name="TooManyWearables"> + Você não pode usar uma pasta que contenha mais de [AMOUNT] itens. Você pode mudar esse limite em Avançado > Mostrar configurações de depuração > WearFolderLimit. + </notification> <notification label="Aviso de modo Não perturbe" name="DoNotDisturbModePay"> Você ativou o Não perturbe. Você não receberá qualquer item oferecido em troca deste pagamento. @@ -2803,7 +2841,7 @@ Se permanecer aqui, você será desconectado. [MESSAGE] -Do objeto: <nolink>[OBJECTNAME]</nolink>, de: [NAME]? +Do objeto: <nolink>[OBJECTNAME]</nolink>, de: [NAME] <form name="form"> <button name="Gotopage" text="Carregar"/> <button name="Cancel" text="Cancelar"/> @@ -2829,6 +2867,72 @@ OK? <button name="Mute" text="Bloquear"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + Não foi possível adquirir uma nova experiência: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Uma alteração do grupo de experiência foi ignorada porque o proprietário não é membro do grupo selecionado. + </notification> + <notification name="UneditableExperienceProfileMessage"> + O campo não editável '[field]' foi ignorado ao atualizar o perfil de experiência. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Alterações ignoradas para o campo '[field]' que só podem ser definidas pelo proprietário da experiência. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Você não pode definir a classificação de maturidade de uma experiência como sendo mais alta que a do proprietário. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Os seguintes termos impediram a atualização do nome e/ou descrição do perfil de experiência: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Você foi teletransportado da região [region_name] por remover a experiência secondlife:///app/experience/[public_id]/profile e não tem mais permissão na região. + <form name="form"> + <ignore name="ignore" text="Ejetar da região por remover uma experiência"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + Você recebeu permissão para a região [region_name] ao participar da experiência-chave secondlife:///app/experience/[public_id]/profile Remover essa experiência pode ejetá-lo da região. + <form name="form"> + <ignore name="ignore" text="Permitido em uma região devido a uma experiência"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + Você não está autorizado a acessar esse destino. Você pode ser permitido na região aceitando uma das experiências abaixo: + +[EXPERIENCE_LIST] + +Outras experiências chave podem estar disponíveis. + </notification> + <notification name="ExperienceEvent"> + Um objeto foi permitido para [EventType] pelo secondlife:///app/experience/[public_id]/profile experience. + Proprietário: secondlife:///app/agent/[OwnerID]/inspect + Nome do objeto: [ObjectName] + Nome do Terreno: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + Um anexo teve permissão para executar [EventType] pelo secondlife:///app/experience/[public_id]/profile experience. + Proprietário: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + '<nolink>[OBJECTNAME]</nolink>', um objeto de propriedade de '[NAME]', solicita a sua participação na experiência [GRID_WIDE]: + +[EXPERIENCE] + +Quando a permissão for dada, você não irá mais visualizar essa mensagem novamente a não ser que seja revogada do perfil de experiência. + +Os scripts associados a essa experiência serão capazes de realizar o seguinte nas regiões onde a experiência esteja ativa: + +[QUESTIONS]Isso está bem? + <form name="form"> + <button name="BlockExperience" text="Bloquear experiência"/> + <button name="Mute" text="Bloquear objeto"/> + <button name="Yes" text="Sim"/> + <button name="No" text="Não"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Aviso: O objeto '<nolink>[OBJECTNAME]</nolink>' deseja obter acesso total à sua conta de dólares Linden. Se você conceder acesso, ele poderá remover fundos de sua conta a qualquer momento ou esvaziar sua conta completamente, continuamente e sem avisos adicionais. @@ -3147,6 +3251,10 @@ Você carregou uma textura com [RESOLUTION] para o(a) '[BODYREGION]' e <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( [EXISTENCE] segundos de vida ) Você carregou uma textura com [RESOLUTION] para o(a) '[BODYREGION]' em [TIME] segundos. + </notification> + <notification name="CannotUploadTexture"> + Não foi possível carregar textura. +[REASON] </notification> <notification name="LivePreviewUnavailable"> Não podemos exibir uma visualização desta textura, pois ela é cópia proibida e/ou transferência proibida. diff --git a/indra/newview/skins/default/xui/pt/panel_experience_info.xml b/indra/newview/skins/default/xui/pt/panel_experience_info.xml new file mode 100644 index 0000000000..7fad25dad6 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Perfil de experiência"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Localização: + </text> + <text name="LocationTextText"> + qualquer lugar + </text> + <button label="Teletransportar" name="teleport_btn"/> + <button label="Mapa" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Loja do Marketplace + </text> + <text name="LocationTextText"> + qualquer lugar + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Classificação: + </text> + <text name="ContentRatingText"> + Adulto + </text> + <text name="Owner"> + Proprietário: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Editar" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/pt/panel_experience_list_editor.xml new file mode 100644 index 0000000000..6e10cc583c --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + Carregando... + </panel.string> + <panel.string name="panel_allowed"> + Experiências permitidas: + </panel.string> + <panel.string name="panel_blocked"> + Experiências bloqueadas: + </panel.string> + <panel.string name="panel_trusted"> + Experiências-chave: + </panel.string> + <panel.string name="no_results"> + (vazio) + </panel.string> + <text name="text_name"> + Lista de experiências + </text> + <scroll_list name="experience_list"> + <columns label="Nome" name="experience_name"/> + </scroll_list> + <button label="Adicionar..." name="btn_add"/> + <button label="Remover" name="btn_remove"/> + <button label="Perfil..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_experience_list_item.xml b/indra/newview/skins/default/xui/pt/panel_experience_list_item.xml new file mode 100644 index 0000000000..24022faeae --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Nome fictício + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_experience_log.xml b/indra/newview/skins/default/xui/pt/panel_experience_log.xml new file mode 100644 index 0000000000..97ef760716 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="Sem eventos."/> + <string name="loading" value="Carregando..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Hora" name="time"/> + <columns label="Evento" name="event"/> + <columns label="Experiência" name="experience_name"/> + <columns label="Objeto" name="object_name"/> + </scroll_list> + <button label="Avisar" name="btn_notify"/> + <button label="Perfil" name="btn_profile_xp"/> + <button label="Denunciar" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Avisar sobre todos os eventos Dias" name="notify_all"/> + <button label="Limpar" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_experience_search.xml b/indra/newview/skins/default/xui/pt/panel_experience_search.xml new file mode 100644 index 0000000000..e8d5ba63d5 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + '[TEXT]' não encontrado + </string> + <string name="no_results"> + Sem resultados + </string> + <string name="searching"> + Pesquisando... + </string> + <string name="loading"> + Carregando... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="Ir" name="find"/> + <icons_combo_box label="Moderado" name="maturity"> + <icons_combo_box.item label="Adulto" name="Adult" value="42"/> + <icons_combo_box.item label="Moderado" name="Mature" value="21"/> + <icons_combo_box.item label="Geral" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Nome" name="experience_name"/> + <columns label="Proprietário" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Cancelar" name="cancel_btn"/> + <button label="Exibir perfil" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_experiences.xml b/indra/newview/skins/default/xui/pt/panel_experiences.xml new file mode 100644 index 0000000000..cdf1a760d8 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Carregando experiências..."/> + <string name="no_experiences" value="Nenhuma experiência."/> + <string name="acquire" value="Adquirir uma experiência"/> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml b/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml index 9cb7a8b7d1..8c5c24d08b 100644 --- a/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="No momento, você não tem amigos do Facebook que também são residentes do Second Life. Convide seus amigos do Facebook para ingressar no Second Life hoje mesmo!"/> - <string name="facebook_friends_no_connected" value="No momento, você não está conectado ao Facebook. Vá para a aba Conta para se conectar e ativar esse recurso."/> + <string name="facebook_friends_no_connected" value="No momento, você não está conectado ao Facebook. Vá para a aba Status para se conectar e ativar esse recurso."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="Amigos do SL"/> <accordion_tab name="tab_suggested_friends" title="Adicionar essas pessoas como amigos do SL"/> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml b/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml index 22615e0769..cdf3222092 100644 --- a/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> - <combo_box.item label="Janela atual" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> - <combo_box.item label="Sem filtro" name="NoFilter"/> - </combo_box> - <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> - <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> - <text name="caption_label"> - Comentário (opcional): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Postar" name="post_photo_btn"/> - <button label="Cancelar" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> + <combo_box.item label="Janela atual" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> + <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> + <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> + <text name="caption_label"> + Comentário (opcional): + </text> + <button label="Postar" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_place.xml b/indra/newview/skins/default/xui/pt/panel_facebook_place.xml index 97596d64c6..aa8b51d64b 100644 --- a/indra/newview/skins/default/xui/pt/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/pt/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Diga algo sobre onde você está: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Postar" name="post_place_btn"/> - <button label="Cancelar" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Diga algo sobre onde você está: + </text> + <check_box initial_value="false" label="Incluir vista abstrata da localização" name="add_place_view_cb"/> + <button label="Postar" name="post_place_btn"/> + <button label="Cancelar" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_status.xml b/indra/newview/skins/default/xui/pt/panel_facebook_status.xml index 251580666e..0bbaf1086c 100644 --- a/indra/newview/skins/default/xui/pt/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/pt/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - No que você está pensando? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Postar" name="post_status_btn"/> - <button label="Cancelar" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Você está conectado ao Facebook como:"/> + <string name="facebook_disconnected" value="Não conectado ao Facebook"/> + <text name="account_caption_label"> + Não conectado ao Facebook. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprenda a publicar no Facebook] + </text> + </panel> + <text name="status_caption_label"> + No que você está pensando? + </text> + <button label="Postar" name="post_status_btn"/> + <button label="Cancelar" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml index 77d8afb47c..cbb3e362fe 100644 --- a/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> - <combo_box.item label="Janela atual" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> - <combo_box.item label="Sem filtro" name="NoFilter"/> - </combo_box> - <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> - <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> - <text name="title_label"> - Título: - </text> - <text name="description_label"> - Descrição: - </text> - <check_box initial_value="true" label="Incluir localização do SL no final da descrição" name="add_location_cb"/> - <text name="tags_label"> - Tags: - </text> - <text name="tags_help_label"> - Separe as tags com espaços + <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> + <combo_box.item label="Janela atual" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> + <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> + <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> + <text name="title_label"> + Título: + </text> + <text name="description_label"> + Descrição: + </text> + <check_box initial_value="true" label="Incluir localização do SL no final da descrição" name="add_location_cb"/> + <text name="tags_label"> + Tags: + </text> + <text name="tags_help_label"> + Separe as tags com espaços Use "" para tags com várias palavras - </text> - <combo_box name="rating_combobox" tool_tip="Classificação de conteúdo do Flickr"> - <combo_box.item label="Classificação segura do Flickr" name="SafeRating"/> - <combo_box.item label="Classificação moderada do Flickr" name="ModerateRating"/> - <combo_box.item label="Classificação restrita do Flickr" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Enviar" name="post_photo_btn"/> - <button label="Cancelar" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Classificação de conteúdo do Flickr"> + <combo_box.item label="Classificação segura do Flickr" name="SafeRating"/> + <combo_box.item label="Classificação moderada do Flickr" name="ModerateRating"/> + <combo_box.item label="Classificação restrita do Flickr" name="RestrictedRating"/> + </combo_box> + <button label="Enviar" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml index 7d8531a482..d322c60ec0 100755 --- a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Funções e membros"/> <accordion_tab name="group_notices_tab" title="Avisos"/> <accordion_tab name="group_land_tab" title="Terrenos/Bens"/> + <accordion_tab name="group_experiences_tab" title="Experiências"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml b/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml index 3088b9a996..3608c96c6a 100755 --- a/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Customizado" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Largura" name="postcard_snapshot_width"/> - <spinner label="Altura" name="postcard_snapshot_height"/> - <check_box label="Limitar proporções" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Qualidade da imagem" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Largura X Altura" name="postcard_snapshot_width"/> + <check_box label="Limitar proporções" name="postcard_keep_aspect_check"/> + <slider label="Qualidade:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml index 1279e74e21..87f2a9bc8f 100755 --- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Web: </text> - <radio_group name="use_external_browser"> - <radio_item label="Usar meu navegador (IE, Firefox, Safari)" name="external" tool_tip="Use o navegador incluso para consultar a ajuda, abrir links da web, etc. Uso em tela inteira não recomendado." value="true"/> - <radio_item label="Usar navegador incluso" name="internal" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. As janelas abrem dentro do [APP_NAME]." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Usar meu navegador (Chrome, Firefox, IE) para todos os links" name="internal" tool_tip="Use o navegador padrão do sistema para consultar a ajuda, abrir links da web etc. Uso em tela inteira não recomendado." value="0"/> + <radio_item label="Usar o navegador incorporado somente para links do SecondLife" name="external" tool_tip="Usar o navegador padrão do sistema para consultar a ajuda, abrir links da web etc. O navegador incorporado será usado somente para os links da LindenLab/SecondLife." value="1"/> </radio_group> <check_box initial_value="true" label="Habilitar plugins" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Aceitar cookies" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/pt/panel_region_experiences.xml b/indra/newview/skins/default/xui/pt/panel_region_experiences.xml new file mode 100644 index 0000000000..c7e252cd6f --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiências" name="Experiences"> + <panel.string name="trusted_estate_text"> + Qualquer experiência pode ser chave. + +Experiências-chave têm permissão para serem executadas nessa propriedade. + +Além disso, se a propriedade não permitir acesso público, os residentes participantes de qualquer experiência-chave podem entrar e permanecer na propriedade, desde que estejam na experiência-chave. + </panel.string> + <panel.string name="allowed_estate_text"> + Somente experiências dentro do terreno podem ser permitidas. + +Experiências permitidas têm permissão para ser executadas nessa propriedade. + </panel.string> + <panel.string name="blocked_estate_text"> + Somente experiências dentro da grade podem ser bloqueadas. + +É possível que as experiências bloqueadas não sejam executadas nessa propriedade. + </panel.string> + <panel.string name="estate_caption"> + Mudar as opções desta guia afeta todas as regiões desta propriedade. + </panel.string> + <panel.string name="allowed_parcel_text"> + Somente experiências dentro do terreno podem ser permitidas. + +Experiências permitidas têm permissão para ser executadas nesse terreno se não estiverem bloqueadas pela propriedade. + </panel.string> + <panel.string name="blocked_parcel_text"> + Qualquer experiência de residente pode ser bloqueada. + +É possível que as experiências bloqueadas não sejam executadas neste terreno. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_script_experience.xml b/indra/newview/skins/default/xui/pt/panel_script_experience.xml new file mode 100644 index 0000000000..8366306581 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="EXPERIÊNCIA"> + <button label="Experiência" name="Expand Experience"/> + <check_box label="Usa experiência(s)" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Escolher experiência..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + Você não é colaborador de nenhuma experiência. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml index 3c4bb18687..b038c628bc 100755 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - Salvar no meu inventário + Inventário </text> <text name="hint_lbl"> Salvar uma imagem em seu inventário custa L$[UPLOAD_COST]. Para salvar sua imagem como uma textura, selecione um dos formatos quadrados. @@ -13,8 +13,8 @@ <combo_box.item label="Grande (512x512)" name="Large(512x512)"/> <combo_box.item label="Customizado" name="Custom"/> </combo_box> - <spinner label="Largura" name="inventory_snapshot_width"/> - <spinner label="Altura" name="inventory_snapshot_height"/> + <spinner label="Largura X Altura" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Limitar proporções" name="inventory_keep_aspect_check"/> <button label="Cancelar" name="cancel_btn"/> <button label="Salvar" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml index 36b5b0cbe6..c6dbec189d 100755 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Salvar no meu PC + Disco </text> <combo_box label="Resolução" name="local_size_combo"> <combo_box.item label="Janela atual" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="Customizado" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Largura" name="local_snapshot_width"/> - <spinner label="Altura" name="local_snapshot_height"/> - <check_box label="Limitar proporções" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Formato" name="local_format_combo"> - <combo_box.item label="PNG (sem perda)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (sem perda)" name="BMP"/> - </combo_box> - <slider label="Qualidade da imagem" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Largura X Altura" name="local_snapshot_width"/> + <check_box label="Limitar proporções" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Formato: + </text> + <combo_box label="Formato" name="local_format_combo"> + <combo_box.item label="PNG (sem perda)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (sem perda)" name="BMP"/> + </combo_box> + <slider label="Qualidade:" name="image_quality_slider"/> <button label="Cancelar" name="cancel_btn"/> <flyout_button label="Salvar" name="save_btn" tool_tip="Salvar imagem em um arquivo"> <flyout_button.item label="Salvar" name="save_item"/> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml index bce44d2ed6..d588e59f6d 100755 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Postar no feed do meu perfil" name="save_to_profile_btn"/> - <button label="E-mail" name="save_to_email_btn"/> - <button label="Salvar em Meu inventário (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Salvar no meu PC" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Enviar para: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="Salvar no disco" name="save_to_computer_btn"/> + <button label="Salvar em inventário (L$[AMOUNT])" name="save_to_inventory_btn"/> + <button label="Carregar no perfil" name="save_to_profile_btn"/> + <button label="Carregar no Facebook" name="send_to_facebook_btn"/> + <button label="Carregar no Twitter" name="send_to_twitter_btn"/> + <button label="Carregar no Flickr" name="send_to_flickr_btn"/> + <button label="Enviar por email" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml index 12a648f600..ab1545a231 100755 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml @@ -10,8 +10,12 @@ Enviando... </string> <text name="title"> - E-mail + Email </text> - <button label="Mensagem" name="message_btn"/> - <button label="Configurações" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="Mensagem" name="panel_postcard_message"/> + <panel label="Configurações" name="panel_postcard_settings"/> + </tab_container> + <button label="Cancelar" name="cancel_btn"/> + <button label="Enviar" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml index 095b8fc75d..f1d7334752 100755 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - Postar no feed do meu perfil + Perfil </text> <combo_box label="Resolução" name="profile_size_combo"> <combo_box.item label="Janela atual" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Customizado" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Largura" name="profile_snapshot_width"/> - <spinner label="Altura" name="profile_snapshot_height"/> - <check_box label="Limitar proporções" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Legenda: - </text> - <check_box initial_value="true" label="Incluir local" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Largura X Altura" name="profile_snapshot_width"/> + <check_box label="Limitar proporções" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Legenda: + </text> + <check_box initial_value="true" label="Incluir local" name="add_location_cb"/> <button label="Cancelar" name="cancel_btn"/> <button label="Postar" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml b/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml index 3958d5f0f9..7c4990f71e 100644 --- a/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - Próximas etapas? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="Incluir localização do SL" name="add_location_cb"/> - <check_box initial_value="true" label="Incluir uma foto" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> - <combo_box.item label="Janela atual" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> - <combo_box.item label="Sem filtro" name="NoFilter"/> - </combo_box> - <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> - <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Enviar tweet" name="post_photo_btn"/> - <button label="Cancelar" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + Próximas etapas? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Incluir localização do SL" name="add_location_cb"/> + <check_box initial_value="true" label="Incluir uma foto" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> + <combo_box.item label="Janela atual" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> + <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> + <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> + <button label="Enviar tweet" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml index 90e2264940..8d5bc061f9 100755 --- a/indra/newview/skins/default/xui/pt/role_actions.xml +++ b/indra/newview/skins/default/xui/pt/role_actions.xml @@ -66,4 +66,8 @@ <action description="Enviar aviso" longdescription="Membros que exercem cargos com esta função podem enviar avisos na seção Avisos." name="notices send" value="42"/> <action description="Receber novos avisos e ver os anteriores" longdescription="Membros que exercem cargos com esta função podem receber e ler avisos antigos na seção Avisos." name="notices receive" value="43"/> </action_set> + <action_set description="Estas funções incluem o poder de modificar as experiências desse grupo." name="experience_tools_experience"> + <action description="Administrador de experiência" longdescription="Os membros em uma função com essa permissão podem editar os metadados de uma experiência." name="experience admin" value="49"/> + <action description="Colaborador de experiência" longdescription="Os membros em uma função com essa permissão podem contribuir com scripts para uma experiência." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml index d3cb087108..cf8f12fad8 100755 --- a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Perfil do item"> + <panel.string name="loading_experience"> + (carregando) + </panel.string> <panel.string name="unknown"> (desconhecido) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Adquirido: </text> + <text name="LabelItemExperienceTitle"> + Experiência: + </text> <panel name="perms_inv"> <text name="perm_modify"> Você pode: diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 577143b0dc..6c1e6ab7f6 100755 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -401,6 +401,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="TooltipMustSingleDrop"> Apenas um item único pode ser arrastado para este local </string> + <string name="TooltipTooManyWearables"> + Você não pode usar uma pasta que contenha mais de [AMOUNT] itens. Você pode mudar esse limite em Avançado > Mostrar configurações de depuração > WearFolderLimit. + </string> <string name="TooltipPrice" value="L$[AMOUNT]"/> <string name="TooltipOutboxDragToWorld"> Não é possível fazer rez do itens em sua caixa de saída do lojista @@ -1006,9 +1009,7 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="AgentNameSubst"> (Você) </string> - <string name="JoinAnExperience"> - Participar de uma experiência - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Suprimir alertas ao gerenciar listas de acesso ao terreno </string> @@ -1813,6 +1814,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="CompileQueueUnknownFailure"> Falha desconhecida para download </string> + <string name="CompileNoExperiencePerm"> + Pulando script [SCRIPT] com experiência [EXPERIENCE] + </string> <string name="CompileQueueTitle"> Progresso do recompilamento </string> @@ -5134,6 +5138,87 @@ Tente colocar o caminho do editor entre aspas. <string name="UserDictionary"> [Usuário] </string> + <string name="experience_tools_experience"> + Experiência + </string> + <string name="ExperienceNameNull"> + (nenhuma experiência) + </string> + <string name="ExperienceNameUntitled"> + (experiência sem título) + </string> + <string name="Land-Scope"> + Dentro do terreno + </string> + <string name="Grid-Scope"> + Dentro da grade + </string> + <string name="Allowed_Experiences_Tab"> + PERMITIDO + </string> + <string name="Blocked_Experiences_Tab"> + BLOQUEADA + </string> + <string name="Contrib_Experiences_Tab"> + COLABORADOR + </string> + <string name="Admin_Experiences_Tab"> + ADMIN + </string> + <string name="Recent_Experiences_Tab"> + RECENTES + </string> + <string name="Owned_Experiences_Tab"> + PRÓPRIAS + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], máx. [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + assumir seus controles + </string> + <string name="ExperiencePermission3"> + botão animações no seu avatar + </string> + <string name="ExperiencePermission4"> + anexar ao avatar + </string> + <string name="ExperiencePermission9"> + rastrear sua câmera + </string> + <string name="ExperiencePermission10"> + controlar sua câmera + </string> + <string name="ExperiencePermission11"> + teletransportar você + </string> + <string name="ExperiencePermission12"> + aceitar automaticamente permissões de experiência + </string> + <string name="ExperiencePermissionShortUnknown"> + realizar uma operação desconhecida: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Assumir o controle + </string> + <string name="ExperiencePermissionShort3"> + Botão animações + </string> + <string name="ExperiencePermissionShort4"> + Anexar + </string> + <string name="ExperiencePermissionShort9"> + Rastrear câmera + </string> + <string name="ExperiencePermissionShort10"> + Câmera de controle + </string> + <string name="ExperiencePermissionShort11"> + Teletransportar + </string> + <string name="ExperiencePermissionShort12"> + Autorização + </string> <string name="logging_calls_disabled_log_empty"> As conversas não estão sendo registradas. Para começar a manter um registro, selecione "Salvar: apenas registro" ou "Salvar: registro e transcrições" em Preferências> Bate-papo. </string> diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml index 40fb4caebf..9e1fd593ef 100755 --- a/indra/newview/skins/default/xui/pt/teleport_strings.xml +++ b/indra/newview/skins/default/xui/pt/teleport_strings.xml @@ -46,6 +46,9 @@ Vá para a 'Ilha Welcome Pública' para repetir o tutorial. <message name="MustGetAgeRegion"> Você deve ter 18 anos ou mais para acessar esta região. </message> + <message name="RegionTPSpecialUsageBlocked"> + Não é possível inserir a região. '[REGION_NAME]' é uma Região de Skill Gaming, portanto você deve atender certos critérios para poder entrar. Para maiores detalhes, consulte as [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml index 12691df684..86428da3ef 100755 --- a/indra/newview/skins/default/xui/ru/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml @@ -331,22 +331,6 @@ <check_box label="Безопасно (нет повреждений)" name="check safe" tool_tip="Если отмечено, то земля считается безопасной, отключены боевые повреждения. Если не отмечено, то боевые повреждения включены."/> <check_box label="Не толкать" name="PushRestrictCheck" tool_tip="Запрещает скриптам функцию толкания. Этот параметр может оказаться полезным для предотвращения нежелательного поведения на вашей земле."/> <check_box label="Показать место в поиске (L$30/неделя)" name="ShowDirectoryCheck" tool_tip="Позволить людям видеть участок в результатах поиска"/> - <combo_box name="land category with adult"> - <combo_box.item label="Любая категория" name="item0"/> - <combo_box.item label="Место Linden" name="item1"/> - <combo_box.item label="Взрослый" name="item2"/> - <combo_box.item label="Искусство и культура" name="item3"/> - <combo_box.item label="Бизнес" name="item4"/> - <combo_box.item label="Образование" name="item5"/> - <combo_box.item label="Игры" name="item6"/> - <combo_box.item label="Места встреч" name="item7"/> - <combo_box.item label="Для новичков" name="item8"/> - <combo_box.item label="Парки и природа" name="item9"/> - <combo_box.item label="Проживание" name="item10"/> - <combo_box.item label="Покупки" name="item11"/> - <combo_box.item label="Аренда" name="item13"/> - <combo_box.item label="Другое" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Любая категория" name="item0"/> <combo_box.item label="Место Linden" name="item1"/> @@ -477,5 +461,6 @@ <button label="Удалить" label_selected="Удалить" name="remove_banned"/> </panel> </panel> + <panel label="ПРИКЛЮЧЕНИЯ" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_experience_search.xml b/indra/newview/skins/default/xui/ru/floater_experience_search.xml new file mode 100644 index 0000000000..77e3784b68 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="ВЫБЕРИТЕ ПРИКЛЮЧЕНИЕ"/> diff --git a/indra/newview/skins/default/xui/ru/floater_experienceprofile.xml b/indra/newview/skins/default/xui/ru/floater_experienceprofile.xml new file mode 100644 index 0000000000..c72d8b59b9 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (нет) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Профиль приключения"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Изменить" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Рейтинг: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Место: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Владелец: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Группа: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="Разрешить" name="allow_btn"/> + <button label="Забыть" name="forget_btn"/> + <button label="Заблокировать" name="block_btn"/> + <text name="privileged"> + Это приключение включено для всех жителей. + </text> + <button label="Жалоба" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Название:"/> + <text name="edit_experience_desc_label" value="Описание:"/> + <button label="Группа" name="Group_btn"/> + <text name="edit_ContentRating"> + Рейтинг: + </text> + <icons_combo_box label="Умеренный" name="edit_ContentRatingText" tool_tip="При повышении рейтинга зрелости для приключения сбрасывается разрешение для всех жителей, которые разрешили приключение."> + <icons_combo_box.item label="Для взрослых" name="Adult" value="42"/> + <icons_combo_box.item label="Умеренный" name="Mature" value="21"/> + <icons_combo_box.item label="Общий" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Место: + </text> + <button label="Поставить текущее место" name="location_btn"/> + <button label="Очистить место" name="clear_btn"/> + <check_box label="Включить приключение" name="edit_enable_btn" tool_tip=""/> + <check_box label="Скрыть при поиске" name="edit_private_btn"/> + <text name="changes" value="Отображение изменений приключения во всех регионах может занять несколько минут."/> + <button label="Назад" name="cancel_btn"/> + <button label="Сохранить" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_experiences.xml b/indra/newview/skins/default/xui/ru/floater_experiences.xml new file mode 100644 index 0000000000..f6fedfccc7 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="ПРИКЛЮЧЕНИЯ"/> diff --git a/indra/newview/skins/default/xui/ru/floater_facebook.xml b/indra/newview/skins/default/xui/ru/floater_facebook.xml index 20b9e4e151..cbf32cb682 100644 --- a/indra/newview/skins/default/xui/ru/floater_facebook.xml +++ b/indra/newview/skins/default/xui/ru/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="ОПУБЛИКОВАТЬ В FACEBOOK"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="СТАТУС" name="panel_facebook_status"/> - <panel label="ФОТО" name="panel_facebook_photo"/> - <panel label="ВХОД" name="panel_facebook_place"/> - <panel label="ДРУЗЬЯ" name="panel_facebook_friends"/> - <panel label="АККАУНТ" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Ошибка - </text> - <text name="connection_loading_text"> - Загрузка... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="СТАТУС" name="panel_facebook_status"/> + <panel label="ФОТО" name="panel_facebook_photo"/> + <panel label="ВХОД" name="panel_facebook_place"/> + <panel label="ДРУЗЬЯ" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Ошибка + </text> + <text name="connection_loading_text"> + Загрузка... + </text> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ru/floater_inventory_view_finder.xml index 02068c57b8..aa0184fe34 100755 --- a/indra/newview/skins/default/xui/ru/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/ru/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Одежда" name="check_clothing"/> <check_box label="Жесты" name="check_gesture"/> <check_box label="Закладки" name="check_landmark"/> - <check_box label="Меши" name="check_mesh"/> <check_box label="Заметки" name="check_notecard"/> + <check_box label="Меши" name="check_mesh"/> <check_box label="Объекты" name="check_object"/> <check_box label="Скрипты" name="check_script"/> <check_box label="Звуки" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - ИЛИ - </text> + <radio_group name="date_search_direction"> + <radio_item label="Новее, чем" name="newer"/> + <radio_item label="Старше, чем" name="older"/> + </radio_group> <spinner label="Часов назад" name="spin_hours_ago"/> <spinner label="Дней назад" name="spin_days_ago"/> <button label="Закрыть" label_selected="Закрыть" name="Close"/> diff --git a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml index c420006a03..0cc9e56ff7 100644 --- a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml @@ -31,7 +31,7 @@ Частота кадров клиента от [CLIENT_FRAME_RATE_CRITICAL] до [CLIENT_FRAME_RATE_WARNING] </floater.string> <floater.string name="client_frame_time_normal_msg"> - Нормально + Нормальный </floater.string> <floater.string name="client_draw_distance_cause_msg"> Возможная причина: дальность отрисовки слишком велика @@ -61,7 +61,7 @@ Сеть теряет [NETWORK_PACKET_LOSS_WARNING]–[NETWORK_PACKET_LOSS_CRITICAL]% пакетов </floater.string> <floater.string name="network_performance_normal_msg"> - Нормально + Нормальный </floater.string> <floater.string name="network_ping_critical_ms"> 600 @@ -100,7 +100,7 @@ Частота кадров сервера [SERVER_FRAME_RATE_CRITICAL]–[SERVER_FRAME_RATE_WARNING] </floater.string> <floater.string name="server_frame_time_normal_msg"> - Нормально + Нормальный </floater.string> <floater.string name="server_physics_cause_msg"> Возможная причина: слишком много физических объектов @@ -131,21 +131,21 @@ Клиент </text> <text name="client_text"> - Нормально + Нормальный </text> <button name="network_lagmeter" tool_tip="Уровень лагов сети"/> <text name="network"> Сеть </text> <text name="network_text"> - Нормально + Нормальный </text> <button name="server_lagmeter" tool_tip="Уровень лагов сервера"/> <text name="server"> Сервер </text> <text name="server_text"> - Нормально + Нормальный </text> <button label=">>" name="minimize" tool_tip="Переключение размера"/> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ru/floater_live_lsleditor.xml index fb6e747592..30a196b1ca 100755 --- a/indra/newview/skins/default/xui/ru/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/ru/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> СКРИПТ: [NAME] </floater.string> + <floater.string name="experience_enabled"> + Снимите флажок для удаления текущего приключения + </floater.string> + <floater.string name="no_experiences"> + Вам не разрешено пользоваться приключениями + </floater.string> + <floater.string name="add_experiences"> + Выберите, чтобы добавить приключение + </floater.string> + <floater.string name="show_experience_profile"> + Щелкните для просмотра профиля приключения + </floater.string> + <floater.string name="loading"> + Загрузка... + </floater.string> <button label="Сброс" label_selected="Сброс" name="Reset"/> <check_box initial_value="true" label="Выполняется" name="running"/> <check_box initial_value="true" label="Моно" name="mono"/> + <check_box label="Использовать приключение:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_openobject.xml b/indra/newview/skins/default/xui/ru/floater_openobject.xml index 5da308eecb..5459604268 100755 --- a/indra/newview/skins/default/xui/ru/floater_openobject.xml +++ b/indra/newview/skins/default/xui/ru/floater_openobject.xml @@ -4,5 +4,5 @@ [DESC]: </text> <button label="Копировать в инвентарь" label_selected="Копировать в инвентарь" name="copy_to_inventory_button"/> - <button label="Копировать и надеть" label_selected="Копировать и надеть" name="copy_and_wear_button"/> + <button label="Копировать и добавить в костюм" label_selected="Копировать и добавить в костюм" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml index abbdeca180..67d847aa6b 100755 --- a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml @@ -67,7 +67,7 @@ <combo_box.item label="Земля > Посягательство > Объекты или текстуры" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Земля > Посягательство > Частицы" name="Land__Encroachment__Particles"/> <combo_box.item label="Земля > Посягательство > Деревья/растения" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Пари или азартные игры" name="Wagering_gambling"/> + <combo_box.item label="Нарушение политики игр" name="Wagering_gambling"/> <combo_box.item label="Другое" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/ru/floater_snapshot.xml b/indra/newview/skins/default/xui/ru/floater_snapshot.xml index 8933f94c0b..97de279b8f 100755 --- a/indra/newview/skins/default/xui/ru/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/ru/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> Не удалось сохранить на компьютере. </string> - <button name="advanced_options_btn" tool_tip="Дополнительные параметры"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] пикс. - </text> - <text name="file_size_label"> - [SIZE] КБ - </text> + <button label="ОБНОВИТЬ" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ - </text> <text name="layer_type_label"> Захват: </text> @@ -68,4 +59,10 @@ <combo_box.item label="Без фильтра" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] (ширина) x [HEIGHT] (высота) пикс. + </text> + <text name="file_size_label"> + [SIZE] КБ + </text> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_top_objects.xml b/indra/newview/skins/default/xui/ru/floater_top_objects.xml index c7ece5c9c9..b045c5bff3 100755 --- a/indra/newview/skins/default/xui/ru/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/ru/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> Не найдено. </floater.string> + <floater.string name="URLs"> + URL-адреса + </floater.string> + <floater.string name="memory"> + Память (КБ) + </floater.string> <text name="title_text"> Загрузка... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Владелец" name="owner"/> <scroll_list.columns label="Место" name="location"/> <scroll_list.columns label="Участок" name="parcel"/> - <scroll_list.columns label="Время" name="time"/> + <scroll_list.columns label="Дата" name="time"/> <scroll_list.columns label="URL-адреса" name="URLs"/> <scroll_list.columns label="Память (КБ)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/ru/floater_twitter.xml b/indra/newview/skins/default/xui/ru/floater_twitter.xml index 748092ff1f..3b9493ce98 100644 --- a/indra/newview/skins/default/xui/ru/floater_twitter.xml +++ b/indra/newview/skins/default/xui/ru/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="НАПИСАТЬ" name="panel_twitter_photo"/> - <panel label="АККАУНТ" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Ошибка - </text> - <text name="connection_loading_text"> - Загрузка... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="НАПИСАТЬ" name="panel_twitter_photo"/> + <panel label="АККАУНТ" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Ошибка + </text> + <text name="connection_loading_text"> + Загрузка... + </text> </floater> diff --git a/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml index 9fc0b6d44e..967374f8f5 100755 --- a/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="Сортировать по времени" name="sort_by_recent"/> <menu_item_check label="Всегда сортировать папки по имени" name="sort_folders_by_name"/> <menu_item_check label="Показывать системные папки вверху" name="sort_system_folders_to_top"/> - <menu_item_call label="Показать фильтры" name="show_filters"/> + <menu_item_call label="Показать фильтры..." name="show_filters"/> <menu_item_call label="Сбросить фильтры" name="reset_filters"/> <menu_item_call label="Закрыть все папки" name="close_folders"/> <menu_item_call label="Очистить бюро находок" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/ru/menu_url_experience.xml b/indra/newview/skins/default/xui/ru/menu_url_experience.xml new file mode 100644 index 0000000000..59af594c10 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Копировать URL-адрес SL в буфер обмена" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index fad1ea51e0..5b7df8a9f4 100755 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Новое окно инвентаря" name="NewInventoryWindow"/> <menu_item_call label="Места..." name="Places"/> <menu_item_call label="Подборка..." name="Picks"/> + <menu_item_call label="Приключения..." name="Experiences"/> <menu_item_call label="Управление камерой..." name="Camera Controls"/> <menu label="Движение" name="Movement"> <menu_item_call label="Сесть" name="Sit Down Here"/> @@ -46,7 +47,7 @@ <menu_item_check label="Друзья" name="My Friends"/> <menu_item_check label="Группы" name="My Groups"/> <menu_item_check label="Люди неподалеку" name="Active Speakers"/> - <menu_item_call label="Черный список" name="Block List"/> + <menu_item_check label="Черный список" name="Block List"/> <menu_item_check label="Не беспокоить" name="Do Not Disturb"/> </menu> <menu label="Мир" name="World"> diff --git a/indra/newview/skins/default/xui/ru/mime_types.xml b/indra/newview/skins/default/xui/ru/mime_types.xml index 7ed23b5d53..9b120f2f40 100755 --- a/indra/newview/skins/default/xui/ru/mime_types.xml +++ b/indra/newview/skins/default/xui/ru/mime_types.xml @@ -44,6 +44,14 @@ Воспроизвести звук для этого места </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Нет контента + </label> + <tooltip name="none_tooltip"> + Здесь нет медиа + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Поток RealTime diff --git a/indra/newview/skins/default/xui/ru/mime_types_linux.xml b/indra/newview/skins/default/xui/ru/mime_types_linux.xml index a42b0bb9cc..6feb64679c 100755 --- a/indra/newview/skins/default/xui/ru/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/ru/mime_types_linux.xml @@ -44,6 +44,14 @@ Воспроизвести звук для этого места </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Нет контента + </label> + <tooltip name="none_tooltip"> + Здесь нет медиа + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Поток RealTime diff --git a/indra/newview/skins/default/xui/ru/mime_types_mac.xml b/indra/newview/skins/default/xui/ru/mime_types_mac.xml index 7ed23b5d53..9b120f2f40 100755 --- a/indra/newview/skins/default/xui/ru/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/ru/mime_types_mac.xml @@ -44,6 +44,14 @@ Воспроизвести звук для этого места </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + Нет контента + </label> + <tooltip name="none_tooltip"> + Здесь нет медиа + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Поток RealTime diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index c312bcbef4..206be2e2df 100755 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -73,6 +73,10 @@ [MESSAGE] <usetemplate name="okcancelbuttons" notext="Отмена" yestext="Да"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="BadInstallation"> Произошла ошибка при обновлении [APP_NAME]. [http://get.secondlife.com Загрузите последнюю версию] клиента. <usetemplate name="okbutton" yestext="OK"/> @@ -575,6 +579,9 @@ <notification name="RegionNoTerraforming"> В регионе [REGION] не разрешен терраформинг. </notification> + <notification name="ParcelNoTerraforming"> + Вам не разрешено терраформировать участок [PARCEL]. + </notification> <notification name="CannotCopyWarning"> У вас нет разрешения на копирование следующих предметов: [ITEMS] @@ -1825,6 +1832,30 @@ http://secondlife.com/download. Удалить менеджера только для этого землевладения или для [ALL_ESTATES]? <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> </notification> + <notification label="Выбрать землевладение" name="EstateAllowedExperienceAdd"> + Внести в список допущенных только для этого землевладения или для [ALL_ESTATES]? + <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> + </notification> + <notification label="Выбрать землевладение" name="EstateAllowedExperienceRemove"> + Удалить из списка допущенных только для этого землевладения или для [ALL_ESTATES]? + <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> + </notification> + <notification label="Выбрать землевладение" name="EstateBlockedExperienceAdd"> + Внести в список заблокированных только для этого землевладения или для [ALL_ESTATES]? + <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> + </notification> + <notification label="Выбрать землевладение" name="EstateBlockedExperienceRemove"> + Удалить из списка заблокированных только для этого землевладения или для [ALL_ESTATES]? + <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> + </notification> + <notification label="Выбрать землевладение" name="EstateTrustedExperienceAdd"> + Внести в ключевой список только для этого землевладения или для [ALL_ESTATES]? + <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> + </notification> + <notification label="Выбрать землевладение" name="EstateTrustedExperienceRemove"> + Удалить из ключевой список только для этого землевладения или для [ALL_ESTATES]? + <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> + </notification> <notification label="Подтвердить выбрасывание" name="EstateKickUser"> Выбросить пользователя [EVIL_USER] из этого землевладения? <usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/> @@ -1899,6 +1930,10 @@ http://secondlife.com/download. При телепортации возникли технические проблемы, так как ваши настройки не синхронизированы с сервером. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + Не удалось войти в регион. «[REGION_NAME]» – это регион развивающих игр, и для входа в него надо соответствовать определенным условиям. Подробнее см. на странице [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="PreferredMaturityChanged"> Вы больше не будете получать уведомлений о посещении региона с контентом рейтинга [RATING]. Настройки для контента можно изменить на будущее с помощью команд меню «Я > Настройки > Общие». <usetemplate name="okbutton" yestext="OK"/> @@ -2205,6 +2240,9 @@ http://secondlife.com/download. <button ignore="Не заменять" name="No" text="Отмена"/> </form> </notification> + <notification name="TooManyWearables"> + Нельзя носить папку, содержащую более [AMOUNT] вещей. Это ограничение можно изменить в меню «Дополнительно > Настройки отладки > WearFolderLimit. + </notification> <notification label="Предупреждение режима «Не беспокоить»" name="DoNotDisturbModePay"> Включен режим «Не беспокоить». Вы не будете получать никаких предметов, предлагаемых в обмен за этот платеж. @@ -2814,7 +2852,7 @@ http://secondlife.com/download. [MESSAGE] -Из объекта: <nolink>[OBJECTNAME]</nolink>, владелец: [NAME]? +Из объекта: <nolink>[OBJECTNAME]</nolink>, владелец: [NAME] <form name="form"> <button name="Gotopage" text="Перейти на страницу"/> <button name="Cancel" text="Отмена"/> @@ -2840,6 +2878,72 @@ http://secondlife.com/download. <button name="Mute" text="Заблокировать"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + Невозможно приобрести новое приключение: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Изменение в группе приключения игнорируется, так как владелец не принадлежит к выбранной группе. + </notification> + <notification name="UneditableExperienceProfileMessage"> + Нередактируемое поле «[field]» игнорируется при обновлении профиля приключения. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Игнорируются изменения в поле «[field]», которые может вносить только владелец приключения. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Вы не можете устанавливать для приключения рейтинг зрелости выше, чем у владельца. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Следующие условия не допускают обновление названия и (или) описания профиля приключения: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Вы были телепортированы из региона [region_name] за удаление приключения secondlife:///app/experience/[public_id]/profile. Вам больше не разрешено пребывание в этом регионе. + <form name="form"> + <ignore name="ignore" text="Выброшен из региона за удаление приключения"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + Вам был разрешен вход в регион [region_name] путем участия в ключевом приключении secondlife:///app/experience/[public_id]/profile. При удалении этого приключения вы можете быть выброшены из региона. + <form name="form"> + <ignore name="ignore" text="Приключение разрешило вход в регион"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + У вас нет доступа к этому месту назначения. Вам может быть разрешен вход в этот регион при принятии следующего приключения: + +[EXPERIENCE_LIST] + +Могут быть доступны следующие ключевые приключения. + </notification> + <notification name="ExperienceEvent"> + Разрешен объект для события [EventType] приключением secondlife:///app/experience/[public_id]/profile. + Владелец: secondlife:///app/agent/[OwnerID]/inspect + Название объекта: [ObjectName] + Название участка: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + Разрешено присоединение для события [EventType] приключением secondlife:///app/experience/[public_id]/profile. + Владелец: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + Объект «<nolink>[OBJECTNAME]</nolink>», владелец которого – «[NAME]», требует вашего участия в приключении [GRID_WIDE]: + +[EXPERIENCE] + +После получения разрешения это сообщение больше не будет отображаться для данного приключения, пока оно не будет отозвано из профиля приключения. + +Скрипты, связанные с данным приключением, смогут выполнять следующие действия в регионах, где активно приключение: + +[QUESTIONS]Это правильно? + <form name="form"> + <button name="BlockExperience" text="Заблокировать приключение"/> + <button name="Mute" text="Заблокировать объект"/> + <button name="Yes" text="Да"/> + <button name="No" text="Нет"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Предупреждение. Объект «<nolink>[OBJECTNAME]</nolink>» требует полного доступа к вашему аккаунту для Linden-долларов. Если разрешить такой доступ, объект сможет в любое время снимать средства с вашего аккаунта или полностью опустошать его неоднократно и без предупреждения. @@ -3158,6 +3262,10 @@ http://secondlife.com/download. <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( [EXISTENCE] сек. жизни ) Вы локально обновили готовую текстуру [RESOLUTION] для «[BODYREGION]» через [TIME] сек. + </notification> + <notification name="CannotUploadTexture"> + Невозможно загрузить текстуру. +[REASON] </notification> <notification name="LivePreviewUnavailable"> Просмотр этой текстуры невозможен, так как запрещено ее копирование и/или перенос. diff --git a/indra/newview/skins/default/xui/ru/panel_experience_info.xml b/indra/newview/skins/default/xui/ru/panel_experience_info.xml new file mode 100644 index 0000000000..bd5f81506e --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Профиль приключения"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Место: + </text> + <text name="LocationTextText"> + какое-то место + </text> + <button label="Телепортация" name="teleport_btn"/> + <button label="Карта" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Магазин торгового центра: + </text> + <text name="LocationTextText"> + какое-то место + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Рейтинг: + </text> + <text name="ContentRatingText"> + Для взрослых + </text> + <text name="Owner"> + Владелец: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Изменить" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/ru/panel_experience_list_editor.xml new file mode 100644 index 0000000000..fdf3ec8188 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + загрузка… + </panel.string> + <panel.string name="panel_allowed"> + Разрешенные приключения: + </panel.string> + <panel.string name="panel_blocked"> + Заблокированные приключения: + </panel.string> + <panel.string name="panel_trusted"> + Ключевые приключения: + </panel.string> + <panel.string name="no_results"> + (пусто) + </panel.string> + <text name="text_name"> + Список приключений + </text> + <scroll_list name="experience_list"> + <columns label="Название" name="experience_name"/> + </scroll_list> + <button label="Добавить..." name="btn_add"/> + <button label="Удалить" name="btn_remove"/> + <button label="Профиль…" name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_experience_list_item.xml b/indra/newview/skins/default/xui/ru/panel_experience_list_item.xml new file mode 100644 index 0000000000..1af9915bf2 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Псевдо-имя + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_experience_log.xml b/indra/newview/skins/default/xui/ru/panel_experience_log.xml new file mode 100644 index 0000000000..043dd4db17 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="Нет событий."/> + <string name="loading" value="загрузка…"/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Время" name="time"/> + <columns label="Событие" name="event"/> + <columns label="Приключение" name="experience_name"/> + <columns label="Объект" name="object_name"/> + </scroll_list> + <button label="Уведомить" name="btn_notify"/> + <button label="Профиль" name="btn_profile_xp"/> + <button label="Пожаловаться" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Уведомлять обо всех событиях дн." name="notify_all"/> + <button label="Очистить" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_experience_search.xml b/indra/newview/skins/default/xui/ru/panel_experience_search.xml new file mode 100644 index 0000000000..38d047f509 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + Текст «[TEXT]» не найден + </string> + <string name="no_results"> + Нет результатов + </string> + <string name="searching"> + Поиск... + </string> + <string name="loading"> + Загрузка... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="Перейти" name="find"/> + <icons_combo_box label="Умеренный" name="maturity"> + <icons_combo_box.item label="Для взрослых" name="Adult" value="42"/> + <icons_combo_box.item label="Умеренный" name="Mature" value="21"/> + <icons_combo_box.item label="Общий" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Название" name="experience_name"/> + <columns label="Владелец" name="owner"/> + </scroll_list> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Отмена" name="cancel_btn"/> + <button label="Посмотреть профиль" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_experiences.xml b/indra/newview/skins/default/xui/ru/panel_experiences.xml new file mode 100644 index 0000000000..56b962a77f --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Загрузка приключений..."/> + <string name="no_experiences" value="Нет приключений."/> + <string name="acquire" value="Приобрести приключение"/> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml b/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml index 518452953d..746da8d523 100644 --- a/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Сейчас у вас нет друзей по Facebook, которые также были бы жителями Second Life. Предложите своим друзьям по Facebook присоединиться к Second Life!"/> - <string name="facebook_friends_no_connected" value="Сейчас вы не подключены к Facebook. Перейдите на вкладку «Аккаунт», чтобы подключиться и включить эту функцию."/> + <string name="facebook_friends_no_connected" value="Сейчас вы не подключены к Facebook. Перейдите на вкладку «Статус», чтобы подключиться и включить эту функцию."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="Друзья по SL"/> <accordion_tab name="tab_suggested_friends" title="Добавить этих людей как друзей по SL"/> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml b/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml index 783294be86..143a57fec7 100644 --- a/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> - <combo_box.item label="Текущее окно" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> - <combo_box.item label="Без фильтра" name="NoFilter"/> - </combo_box> - <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> - <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> - <text name="caption_label"> - Комментарий (не обязательно): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Опубликовать" name="post_photo_btn"/> - <button label="Отмена" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> + <combo_box.item label="Текущее окно" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> + <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> + <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> + <text name="caption_label"> + Комментарий (не обязательно): + </text> + <button label="Опубликовать" name="post_photo_btn"/> + <button label="Отмена" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_place.xml b/indra/newview/skins/default/xui/ru/panel_facebook_place.xml index 913d327e92..7d0917a43a 100644 --- a/indra/newview/skins/default/xui/ru/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/ru/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Напишите о том, где вы: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Опубликовать" name="post_place_btn"/> - <button label="Отмена" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Напишите о том, где вы: + </text> + <check_box initial_value="false" label="Включить вид места сверху" name="add_place_view_cb"/> + <button label="Опубликовать" name="post_place_btn"/> + <button label="Отмена" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_status.xml b/indra/newview/skins/default/xui/ru/panel_facebook_status.xml index a59f132a01..c651a8087c 100644 --- a/indra/newview/skins/default/xui/ru/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/ru/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - О чем вы думаете? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Опубликовать" name="post_status_btn"/> - <button label="Отмена" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Вы подключились к Facebook как:"/> + <string name="facebook_disconnected" value="Не подключено к Facebook"/> + <text name="account_caption_label"> + Не подключено к Facebook. + </text> + <panel name="panel_buttons"> + <button label="Подключение..." name="connect_btn"/> + <button label="Отключить" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 О публикации в Facebook] + </text> + </panel> + <text name="status_caption_label"> + О чем вы думаете? + </text> + <button label="Опубликовать" name="post_status_btn"/> + <button label="Отмена" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml index 0c93e28911..9dd68699ca 100644 --- a/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml @@ -1,40 +1,34 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> - <combo_box.item label="Текущее окно" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> - <combo_box.item label="Без фильтра" name="NoFilter"/> - </combo_box> - <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> - <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> - <text name="title_label"> - Название: - </text> - <text name="description_label"> - Описание: - </text> - <check_box initial_value="true" label="Добавить в конец описания расположение в SL" name="add_location_cb"/> - <text name="tags_label"> - Теги: - </text> - <text name="tags_help_label"> - Разделяйте теги пробелами. Теги из нескольких слов заключайте в кавычки. - </text> - <combo_box name="rating_combobox" tool_tip="Рейтинг контента Flickr"> - <combo_box.item label="Безопасный рейтинг Flickr" name="SafeRating"/> - <combo_box.item label="Умеренный рейтинг Flickr" name="ModerateRating"/> - <combo_box.item label="Ограниченный рейтинг Flickr" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Передать" name="post_photo_btn"/> - <button label="Отмена" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> + <combo_box.item label="Текущее окно" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> + <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> + <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> + <text name="title_label"> + Название: + </text> + <text name="description_label"> + Описание: + </text> + <check_box initial_value="true" label="Добавить в конец описания расположение в SL" name="add_location_cb"/> + <text name="tags_label"> + Теги: + </text> + <text name="tags_help_label"> + Разделяйте теги пробелами. Теги из нескольких слов заключайте в кавычки. + </text> + <combo_box name="rating_combobox" tool_tip="Рейтинг контента Flickr"> + <combo_box.item label="Безопасный рейтинг Flickr" name="SafeRating"/> + <combo_box.item label="Умеренный рейтинг Flickr" name="ModerateRating"/> + <combo_box.item label="Ограниченный рейтинг Flickr" name="RestrictedRating"/> + </combo_box> + <button label="Передать" name="post_photo_btn"/> + <button label="Отмена" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml index 16aaa71268..0ec667e3b2 100755 --- a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Роли и участники"/> <accordion_tab name="group_notices_tab" title="Уведомления"/> <accordion_tab name="group_land_tab" title="Земля/активы"/> + <accordion_tab name="group_experiences_tab" title="Приключения"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml b/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml index dc9d59008f..d95cdbcf0a 100755 --- a/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Задать" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Ширина" name="postcard_snapshot_width"/> - <spinner label="Высота" name="postcard_snapshot_height"/> - <check_box label="Сохранять пропорции" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Качество изображения" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Ширина x Высота" name="postcard_snapshot_width"/> + <check_box label="Сохранять пропорции" name="postcard_keep_aspect_check"/> + <slider label="Качество:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml index 1741397a84..d00f58dbff 100755 --- a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Браузер: </text> - <radio_group name="use_external_browser"> - <radio_item label="Использовать мой браузер (IE, Firefox, Safari)" name="external" tool_tip="Будет использоваться браузер, заданный в системе по умолчанию. Не рекомендуется, если [APP_NAME] работает в полноэкранном режиме." value="true"/> - <radio_item label="Использовать встроенный браузер" name="internal" tool_tip="Для просмотра справки, ссылок на веб-страницы и т. д. будет использоваться встроенный браузер. Этот браузер открывается как новое окно в [APP_NAME]." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Использовать мой браузер (Chrome, Firefox, IE) для всех ссылок" name="internal" tool_tip="Будет использоваться браузер, заданный в системе по умолчанию. Не рекомендуется, если [APP_NAME] работает в полноэкранном режиме." value="0"/> + <radio_item label="Использовать встроенный браузер только для ссылок Second Life" name="external" tool_tip="Стандартный браузер системы будет использоваться для справки, ссылок Интернета и т.д. Встроенный браузер будет использоваться только для ссылок LindenLab/SecondLife." value="1"/> </radio_group> <check_box initial_value="true" label="Разрешить плагины" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Принимать файлы cookie" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/ru/panel_region_experiences.xml b/indra/newview/skins/default/xui/ru/panel_region_experiences.xml new file mode 100644 index 0000000000..4fd70b5650 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Приключения" name="Experiences"> + <panel.string name="trusted_estate_text"> + Любое приключение может быть ключевым. + +У ключевых приключений есть разрешение на запуск в этом землевладении. + +Кроме того, если в землевладении не разрешен публичный доступ, то жители, участвующие в любом ключевом приключении, могут входить в землевладение и оставаться в нем до тех пор, пока они находятся в ключевом приключении. + </panel.string> + <panel.string name="allowed_estate_text"> + Могут быть разрешены только приключения, привязанные к земле. + +У разрешенных приключений есть разрешение на запуск в этом землевладении. + </panel.string> + <panel.string name="blocked_estate_text"> + Блокировать можно только привязанные к сетке приключения. + +Запуск заблокированных приключений в этом землевладении невозможен. + </panel.string> + <panel.string name="estate_caption"> + Изменение параметров на этой вкладке повлияет на все регионы этого землевладения. + </panel.string> + <panel.string name="allowed_parcel_text"> + Могут быть разрешены только приключения, привязанные к земле. + +У разрешенных приключений есть разрешение на запуск на этом участке, если они не заблокированы землевладением. + </panel.string> + <panel.string name="blocked_parcel_text"> + Любое приключение жителя может быть заблокировано. + +Запуск заблокированных приключений на этом участке невозможен. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_script_experience.xml b/indra/newview/skins/default/xui/ru/panel_script_experience.xml new file mode 100644 index 0000000000..f798884c6b --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="ПРИКЛЮЧЕНИЕ"> + <button label="Приключение" name="Expand Experience"/> + <check_box label="Используется приключение" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Выбрать приключение..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + Вы не являетесь автором приключений. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml index 53a150c9f9..adc612dfd8 100755 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - Сохранить в моем инвентаре + Инвентарь </text> <text name="hint_lbl"> Сохранение изображения в инвентаре стоит L$[UPLOAD_COST]. Чтобы сохранить его как текстуру, выберите один из квадратных форматов. @@ -13,8 +13,8 @@ <combo_box.item label="Большой (512x512)" name="Large(512x512)"/> <combo_box.item label="Задать" name="Custom"/> </combo_box> - <spinner label="Ширина" name="inventory_snapshot_width"/> - <spinner label="Высота" name="inventory_snapshot_height"/> + <spinner label="Ширина x Высота" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Сохранять пропорции" name="inventory_keep_aspect_check"/> <button label="Отмена" name="cancel_btn"/> <button label="Сохранить" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml index 446b9bb2fd..80ad8f7703 100755 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Сохранить на моем компьютере + Диск </text> <combo_box label="Размер" name="local_size_combo"> <combo_box.item label="Текущее окно" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="Задать" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Ширина" name="local_snapshot_width"/> - <spinner label="Высота" name="local_snapshot_height"/> - <check_box label="Сохранять пропорции" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Формат" name="local_format_combo"> - <combo_box.item label="PNG (без потерь)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (без потерь)" name="BMP"/> - </combo_box> - <slider label="Качество изображения" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Ширина x Высота" name="local_snapshot_width"/> + <check_box label="Сохранять пропорции" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Формат: + </text> + <combo_box label="Формат" name="local_format_combo"> + <combo_box.item label="PNG (без потерь)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (без потерь)" name="BMP"/> + </combo_box> + <slider label="Качество:" name="image_quality_slider"/> <button label="Отмена" name="cancel_btn"/> <flyout_button label="Сохранить" name="save_btn" tool_tip="Сохранить изображение в файл"> <flyout_button.item label="Сохранить" name="save_item"/> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml index 8cd69951ca..9a5bbf3bac 100755 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Поместить в мой профиль" name="save_to_profile_btn"/> + <button label="Сохранить на диске" name="save_to_computer_btn"/> + <button label="Сохранить в инвентаре (L$[AMOUNT])" name="save_to_inventory_btn"/> + <button label="Загрузить в профиль" name="save_to_profile_btn"/> + <button label="Загрузить в Facebook" name="send_to_facebook_btn"/> + <button label="Загрузить в Twitter" name="send_to_twitter_btn"/> + <button label="Загрузить на Flickr" name="send_to_flickr_btn"/> <button label="Отправить по почте" name="save_to_email_btn"/> - <button label="Сохранить в моем инвентаре (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Сохранить на моем компьютере" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Отправить: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml index 47f4caf8e3..8f6ab612ff 100755 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml @@ -10,8 +10,12 @@ Отправка... </string> <text name="title"> - Электронное письмо + Почта </text> - <button label="Сообщение" name="message_btn"/> - <button label="Настройки" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="Сообщение" name="panel_postcard_message"/> + <panel label="Настройки" name="panel_postcard_settings"/> + </tab_container> + <button label="Отмена" name="cancel_btn"/> + <button label="Отправить" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml index 79a9ef58d0..6b3401aa5c 100755 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - Поместить в мой профиль + Профиль </text> <combo_box label="Размер" name="profile_size_combo"> <combo_box.item label="Текущее окно" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Задать" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Ширина" name="profile_snapshot_width"/> - <spinner label="Высота" name="profile_snapshot_height"/> - <check_box label="Сохранять пропорции" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Подпись: - </text> - <check_box initial_value="true" label="Включить расположение" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Ширина x Высота" name="profile_snapshot_width"/> + <check_box label="Сохранять пропорции" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Подпись: + </text> + <check_box initial_value="true" label="Включить расположение" name="add_location_cb"/> <button label="Отмена" name="cancel_btn"/> <button label="Опубликовать" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml b/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml index 564d02411d..6c9035323a 100644 --- a/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - Что случилось? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="Включить расположение в SL" name="add_location_cb"/> - <check_box initial_value="true" label="Включить фото" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> - <combo_box.item label="Текущее окно" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> - <combo_box.item label="Без фильтра" name="NoFilter"/> - </combo_box> - <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> - <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Твит" name="post_photo_btn"/> - <button label="Отмена" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + Что случилось? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Включить расположение в SL" name="add_location_cb"/> + <check_box initial_value="true" label="Включить фото" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> + <combo_box.item label="Текущее окно" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> + <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> + <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> + <button label="Твит" name="post_photo_btn"/> + <button label="Отмена" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/role_actions.xml b/indra/newview/skins/default/xui/ru/role_actions.xml index a4ac7411a3..c29cd6d0f4 100755 --- a/indra/newview/skins/default/xui/ru/role_actions.xml +++ b/indra/newview/skins/default/xui/ru/role_actions.xml @@ -71,4 +71,8 @@ <action description="Присоединение к голосовому чату группы" longdescription="Участники роли с этой способностью могут присоединяться к сеансам голосового чата группы. ПРИМЕЧАНИЕ. Способность «Присоединение к чату группы» необходима для доступа к сеансам голосового чата." name="join voice chat" value="27"/> <action description="Moderate-чат группы" longdescription="Участники роли с этой способностью могут контролировать доступ и участие в сеансах текстового и голосового чата группы." name="moderate group chat" value="37"/> </action_set> + <action_set description="Эти способности включают право изменять приключения, которыми владеет эта группа." name="experience_tools_experience"> + <action description="Администратор приключения" longdescription="Участники роли с этой способностью могут редактировать метаданные приключения." name="experience admin" value="49"/> + <action description="Автор приключения" longdescription="Участники роли с этой способностью могут создавать скрипты для приключения." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/ru/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ru/sidepanel_item_info.xml index 0106ed50ac..c42586b7b8 100755 --- a/indra/newview/skins/default/xui/ru/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/ru/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Профиль объекта"> + <panel.string name="loading_experience"> + (загрузка) + </panel.string> <panel.string name="unknown"> (неизвестно) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Приобретено: </text> + <text name="LabelItemExperienceTitle"> + Приключение: + </text> <panel name="perms_inv"> <text name="perm_modify"> Вы можете: diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index b7daab33a9..ba63881094 100755 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -449,6 +449,9 @@ support@secondlife.com. <string name="TooltipMustSingleDrop"> Сюда можно перетащить только одну вещь </string> + <string name="TooltipTooManyWearables"> + Нельзя носить папку, содержащую более [AMOUNT] вещей. Это ограничение можно изменить в меню «Дополнительно > Настройки отладки > WearFolderLimit. + </string> <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipOutboxDragToWorld"> Нельзя выложить предметы из папке «Торговые исходящие» @@ -1057,9 +1060,7 @@ support@secondlife.com. <string name="AgentNameSubst"> (Вы) </string> - <string name="JoinAnExperience"> - Присоединитесь - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Отключить извещения при управлении списками доступа к землевладениям </string> @@ -1870,6 +1871,9 @@ support@secondlife.com. <string name="CompileQueueUnknownFailure"> Неизвестный сбой загрузки </string> + <string name="CompileNoExperiencePerm"> + Пропуск скрипта [SCRIPT] с приключением [EXPERIENCE]. + </string> <string name="CompileQueueTitle"> Ход повторной компиляции </string> @@ -5270,6 +5274,87 @@ support@secondlife.com. <string name="UserDictionary"> [Пользователь] </string> + <string name="experience_tools_experience"> + Приключение + </string> + <string name="ExperienceNameNull"> + (без приключения) + </string> + <string name="ExperienceNameUntitled"> + (приключение без названия) + </string> + <string name="Land-Scope"> + Привязано к земле + </string> + <string name="Grid-Scope"> + Привязано к сетке + </string> + <string name="Allowed_Experiences_Tab"> + РАЗРЕШЕННЫЕ + </string> + <string name="Blocked_Experiences_Tab"> + БЛОКИРОВАННЫЕ + </string> + <string name="Contrib_Experiences_Tab"> + АВТОР + </string> + <string name="Admin_Experiences_Tab"> + АДМИНИСТРАТОР + </string> + <string name="Recent_Experiences_Tab"> + НЕДАВНИЕ + </string> + <string name="Owned_Experiences_Tab"> + СОБСТВЕННОСТЬ + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], максимум: [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + взять управление на себя + </string> + <string name="ExperiencePermission3"> + запускать анимации на вашем аватаре + </string> + <string name="ExperiencePermission4"> + прикрепить к аватару + </string> + <string name="ExperiencePermission9"> + следить за камерой + </string> + <string name="ExperiencePermission10"> + управлять камерой + </string> + <string name="ExperiencePermission11"> + телепортировать вас + </string> + <string name="ExperiencePermission12"> + автоматически принимать разрешения приключения + </string> + <string name="ExperiencePermissionShortUnknown"> + выполнил неизвестную операцию: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Взять на себя + </string> + <string name="ExperiencePermissionShort3"> + Запуск анимаций + </string> + <string name="ExperiencePermissionShort4"> + Присоединить + </string> + <string name="ExperiencePermissionShort9"> + Слежение за камерой + </string> + <string name="ExperiencePermissionShort10"> + Управление камерой + </string> + <string name="ExperiencePermissionShort11"> + Телепортация + </string> + <string name="ExperiencePermissionShort12"> + Разрешение + </string> <string name="logging_calls_disabled_log_empty"> Разговоры не записываются. Чтобы начать запись разговора, в меню «Настройки > Чат» выберите «Сохранять: только журнал» или «Сохранять: журнал и записи». </string> diff --git a/indra/newview/skins/default/xui/ru/teleport_strings.xml b/indra/newview/skins/default/xui/ru/teleport_strings.xml index 40c9267408..fc6cb2cf92 100755 --- a/indra/newview/skins/default/xui/ru/teleport_strings.xml +++ b/indra/newview/skins/default/xui/ru/teleport_strings.xml @@ -48,6 +48,9 @@ <message name="MustGetAgeRegion"> Входить в этот регион могут только жители 18 лет и старше. </message> + <message name="RegionTPSpecialUsageBlocked"> + Не удалось войти в регион. «[REGION_NAME]» – это регион развивающих игр, и для входа в него надо соответствовать определенным условиям. Подробнее см. на странице [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml index 481fc540d0..090e135b3b 100755 --- a/indra/newview/skins/default/xui/tr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml @@ -331,22 +331,6 @@ Sadece büyük parseller aramada görünür. <check_box label="Güvenli (hasar yok)" name="check safe" tool_tip="İşaretliyse, araziyi Güvenli moda getirerek hasar çarpışmasını etkinsizleştirir İşaretli değilse hasar çarpışması etkinleşir."/> <check_box label="İtme Yok" name="PushRestrictCheck" tool_tip="Komut dosyalarının itmesini önler Bu seçeneğin işaretlenmesi arazinizdeki bozucu davranışları önlemeye yardımcı olabilir."/> <check_box label="Konumu Arama sonuçlarında göster (L$30/hafta)" name="ShowDirectoryCheck" tool_tip="Arama sonuçlarında bu parsel görünsün"/> - <combo_box name="land category with adult"> - <combo_box.item label="Herh. Bir Kategori" name="item0"/> - <combo_box.item label="Linden Konumu" name="item1"/> - <combo_box.item label="Yetişkin" name="item2"/> - <combo_box.item label="Sanat ve Kültür" name="item3"/> - <combo_box.item label="İş" name="item4"/> - <combo_box.item label="Eğitim" name="item5"/> - <combo_box.item label="Oyun" name="item6"/> - <combo_box.item label="Uğrak Mekan" name="item7"/> - <combo_box.item label="Yeni Gelenlere Yardım Sunan" name="item8"/> - <combo_box.item label="Park ve Doğa" name="item9"/> - <combo_box.item label="Yerleşim" name="item10"/> - <combo_box.item label="Alışveriş" name="item11"/> - <combo_box.item label="Kiralık" name="item13"/> - <combo_box.item label="Diğer" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="Herh. Bir Kategori" name="item0"/> <combo_box.item label="Linden Konumu" name="item1"/> @@ -477,5 +461,6 @@ Sadece büyük parseller aramada görünür. <button label="Kaldır" label_selected="Kaldır" name="remove_banned"/> </panel> </panel> + <panel label="DENEYİMLER" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_experience_search.xml b/indra/newview/skins/default/xui/tr/floater_experience_search.xml new file mode 100644 index 0000000000..0a025115d5 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="DENEYİM SEÇİN"/> diff --git a/indra/newview/skins/default/xui/tr/floater_experienceprofile.xml b/indra/newview/skins/default/xui/tr/floater_experienceprofile.xml new file mode 100644 index 0000000000..641d61b8f3 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (hiçbiri) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="Deneyim Profili"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="Düzenle" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + Seviye: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Konum: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + Sahip: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + Grup: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="İzin Ver" name="allow_btn"/> + <button label="Unut" name="forget_btn"/> + <button label="Engelle" name="block_btn"/> + <text name="privileged"> + Bu deneyim tüm sakinler için etkindir. + </text> + <button label="Kötüye Kullanımı Bildir" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="Ad:"/> + <text name="edit_experience_desc_label" value="Açıklama:"/> + <button label="Grup" name="Group_btn"/> + <text name="edit_ContentRating"> + Seviye: + </text> + <icons_combo_box label="Orta" name="edit_ContentRatingText" tool_tip="Bir deneyimin erişkinlik seviyesi artınca, o deneyime izin veren tüm sakinler için izinler sıfırlanır."> + <icons_combo_box.item label="Yetişkin" name="Adult" value="42"/> + <icons_combo_box.item label="Orta" name="Mature" value="21"/> + <icons_combo_box.item label="Genel" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + Konum: + </text> + <button label="Mevcut Olana Ayarla" name="location_btn"/> + <button label="Konumu Temizle" name="clear_btn"/> + <check_box label="Deneyimi Etkinleştir" name="edit_enable_btn" tool_tip=""/> + <check_box label="Aramalarda Gizle" name="edit_private_btn"/> + <text name="changes" value="Deneyim değişikliklerinin tüm bölgelerde görünmesi birkaç dakika alabilir."/> + <button label="Geri" name="cancel_btn"/> + <button label="Kaydet" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_experiences.xml b/indra/newview/skins/default/xui/tr/floater_experiences.xml new file mode 100644 index 0000000000..eae3638cad --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="DENEYİMLER"/> diff --git a/indra/newview/skins/default/xui/tr/floater_facebook.xml b/indra/newview/skins/default/xui/tr/floater_facebook.xml index 87f69fc731..656a4a81c9 100644 --- a/indra/newview/skins/default/xui/tr/floater_facebook.xml +++ b/indra/newview/skins/default/xui/tr/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="FACEBOOK'TA YAYINLA"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="DURUM" name="panel_facebook_status"/> - <panel label="FOTOĞRAF" name="panel_facebook_photo"/> - <panel label="KONUMA GİRİŞ YAPIN" name="panel_facebook_place"/> - <panel label="ARKADAŞLAR" name="panel_facebook_friends"/> - <panel label="HESAP" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Hata - </text> - <text name="connection_loading_text"> - Yükleniyor... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="DURUM" name="panel_facebook_status"/> + <panel label="FOTOĞRAF" name="panel_facebook_photo"/> + <panel label="KONUMA GİRİŞ YAPIN" name="panel_facebook_place"/> + <panel label="ARKADAŞLAR" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + Hata + </text> + <text name="connection_loading_text"> + Yükleniyor... + </text> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/tr/floater_inventory_view_finder.xml index 9d1a556751..35f30f47cc 100755 --- a/indra/newview/skins/default/xui/tr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/tr/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="Giysiler" name="check_clothing"/> <check_box label="Mimikler" name="check_gesture"/> <check_box label="Yer İmleri" name="check_landmark"/> - <check_box label="Örgüler" name="check_mesh"/> <check_box label="Not Kartları" name="check_notecard"/> + <check_box label="Örgüler" name="check_mesh"/> <check_box label="Nesneler" name="check_object"/> <check_box label="Komut Dosyaları" name="check_script"/> <check_box label="Sesler" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - VEYA - </text> + <radio_group name="date_search_direction"> + <radio_item label="Şundan daha yeni:" name="newer"/> + <radio_item label="Şundan daha eski:" name="older"/> + </radio_group> <spinner label="Saat Önce" name="spin_hours_ago"/> <spinner label="Gün Önce" name="spin_days_ago"/> <button label="Kapat" label_selected="Kapat" name="Close"/> diff --git a/indra/newview/skins/default/xui/tr/floater_lagmeter.xml b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml index 736c50be90..a373a95b0c 100644 --- a/indra/newview/skins/default/xui/tr/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml @@ -28,7 +28,7 @@ İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] altında </floater.string> <floater.string name="client_frame_time_warning_msg"> - İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] ile [CLIENT_FRAME_RATE_WARNING] arasınad + İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] ile [CLIENT_FRAME_RATE_WARNING] arasında </floater.string> <floater.string name="client_frame_time_normal_msg"> Normal diff --git a/indra/newview/skins/default/xui/tr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/tr/floater_live_lsleditor.xml index 34c3e28a0b..760948edae 100755 --- a/indra/newview/skins/default/xui/tr/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/tr/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> KOMUT DOSYASI: [NAME] </floater.string> + <floater.string name="experience_enabled"> + Mevcut deneyimi kaldırmak için kutunun işaretini kaldırın + </floater.string> + <floater.string name="no_experiences"> + Hiçbir deneyim için yetkiniz yok + </floater.string> + <floater.string name="add_experiences"> + Ekleyeceğiniz deneyimi seçin + </floater.string> + <floater.string name="show_experience_profile"> + Deneyim profilini görmek için tıklayın + </floater.string> + <floater.string name="loading"> + Yükleniyor... + </floater.string> <button label="Sıfırla" label_selected="Sıfırla" name="Reset"/> <check_box initial_value="true" label="Çalışıyor" name="running"/> <check_box initial_value="true" label="Mono" name="mono"/> + <check_box label="Deneyimi Kullanın:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_openobject.xml b/indra/newview/skins/default/xui/tr/floater_openobject.xml index 9980aee97f..adcf5dede2 100755 --- a/indra/newview/skins/default/xui/tr/floater_openobject.xml +++ b/indra/newview/skins/default/xui/tr/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="Envantere Kopyala" label_selected="Envantere Kopyala" name="copy_to_inventory_button"/> - <button label="Kopyala ve Giy" label_selected="Kopyala ve Giy" name="copy_and_wear_button"/> + <button label="Envantere kopyala" label_selected="Envantere kopyala" name="copy_to_inventory_button"/> + <button label="Kopyala ve dış görünüme ekle" label_selected="Kopyala ve dış görünüme ekle" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml index ea598a5669..28bacca763 100755 --- a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml @@ -67,7 +67,7 @@ <combo_box.item label="Arazi > Tecavüz > Nesneler veya dokular" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Arazi > Tecavvüz > Parçacıklar" name="Land__Encroachment__Particles"/> <combo_box.item label="Arazi > Tecavvüz > Ağaçlar/bitkiler" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Bahis veya Kumar" name="Wagering_gambling"/> + <combo_box.item label="Oyun Politikası İhlali" name="Wagering_gambling"/> <combo_box.item label="Diğer" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/tr/floater_snapshot.xml b/indra/newview/skins/default/xui/tr/floater_snapshot.xml index 3f588522eb..be6c58e8cf 100755 --- a/indra/newview/skins/default/xui/tr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/tr/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> Bilgisayara kaydedilemedi. </string> - <button name="advanced_options_btn" tool_tip="Gelişmiş seçenekler"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] px - </text> - <text name="file_size_label"> - [SIZE] KB - </text> + <button label="YENİLE" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - GELİŞMİŞ SEÇENEKLER - </text> <text name="layer_type_label"> Yakala: </text> @@ -68,4 +59,10 @@ <combo_box.item label="Filtre Yok" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] px (genişlik) x [HEIGHT] px (yükseklik) + </text> + <text name="file_size_label"> + [SIZE] KB + </text> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_top_objects.xml b/indra/newview/skins/default/xui/tr/floater_top_objects.xml index 19420c68e3..013e8d7ce1 100755 --- a/indra/newview/skins/default/xui/tr/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/tr/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> Hiçbiri bulunamadı. </floater.string> + <floater.string name="URLs"> + URL'ler + </floater.string> + <floater.string name="memory"> + Bellek (KB) + </floater.string> <text name="title_text"> Yükleniyor... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="Sahip" name="owner"/> <scroll_list.columns label="Konum" name="location"/> <scroll_list.columns label="Parsel" name="parcel"/> - <scroll_list.columns label="Süre" name="time"/> + <scroll_list.columns label="Tarih" name="time"/> <scroll_list.columns label="URL'ler" name="URLs"/> <scroll_list.columns label="Bellek (KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/tr/floater_twitter.xml b/indra/newview/skins/default/xui/tr/floater_twitter.xml index 3060bd1c84..93c1b0b073 100644 --- a/indra/newview/skins/default/xui/tr/floater_twitter.xml +++ b/indra/newview/skins/default/xui/tr/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="TWITTER"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="OLUŞTUR" name="panel_twitter_photo"/> - <panel label="HESAP" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - Hata - </text> - <text name="connection_loading_text"> - Yükleniyor... - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="OLUŞTUR" name="panel_twitter_photo"/> + <panel label="HESAP" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + Hata + </text> + <text name="connection_loading_text"> + Yükleniyor... + </text> </floater> diff --git a/indra/newview/skins/default/xui/tr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/tr/menu_inventory_gear_default.xml index 5f3e4e8789..ca66bc98c7 100755 --- a/indra/newview/skins/default/xui/tr/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/tr/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="En Sonunculara Göre Sırala" name="sort_by_recent"/> <menu_item_check label="Klasörleri Her Zaman Ada Göre Sırala" name="sort_folders_by_name"/> <menu_item_check label="Sistem Klasörlerini Üste Sırala" name="sort_system_folders_to_top"/> - <menu_item_call label="Filtreleri Göster" name="show_filters"/> + <menu_item_call label="Filtreleri Göster..." name="show_filters"/> <menu_item_call label="Filtreleri Sıfırla" name="reset_filters"/> <menu_item_call label="Tüm Klasörleri Kapat" name="close_folders"/> <menu_item_call label="Kaybedip Bulduklarımı Boşalt" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/tr/menu_url_experience.xml b/indra/newview/skins/default/xui/tr/menu_url_experience.xml new file mode 100644 index 0000000000..70ea4e6950 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="SLurl'yi Panoya Kopyala" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index 23e2903e03..9797ccc0b0 100755 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="Yeni Envanter Penceresi" name="NewInventoryWindow"/> <menu_item_call label="Yerler..." name="Places"/> <menu_item_call label="Favoriler..." name="Picks"/> + <menu_item_call label="Deneyimler..." name="Experiences"/> <menu_item_call label="Kamera Denetimleri..." name="Camera Controls"/> <menu label="Hareket" name="Movement"> <menu_item_call label="Otur" name="Sit Down Here"/> @@ -46,7 +47,7 @@ <menu_item_check label="Arkadaşlar" name="My Friends"/> <menu_item_check label="Gruplar" name="My Groups"/> <menu_item_check label="Yakındaki kişiler" name="Active Speakers"/> - <menu_item_call label="Engelleme Listesi" name="Block List"/> + <menu_item_check label="Engelleme Listesi" name="Block List"/> <menu_item_check label="Rahatsız Etme" name="Do Not Disturb"/> </menu> <menu label="Dünya" name="World"> diff --git a/indra/newview/skins/default/xui/tr/mime_types.xml b/indra/newview/skins/default/xui/tr/mime_types.xml index c37f872a65..fa554d34fc 100755 --- a/indra/newview/skins/default/xui/tr/mime_types.xml +++ b/indra/newview/skins/default/xui/tr/mime_types.xml @@ -44,6 +44,14 @@ Bu konumdaki sesi çal </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + İçerik Yok + </label> + <tooltip name="none_tooltip"> + Burada ortam öğesi yok + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Gerçek Zamanlı Akış diff --git a/indra/newview/skins/default/xui/tr/mime_types_linux.xml b/indra/newview/skins/default/xui/tr/mime_types_linux.xml index c37f872a65..fa554d34fc 100755 --- a/indra/newview/skins/default/xui/tr/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/tr/mime_types_linux.xml @@ -44,6 +44,14 @@ Bu konumdaki sesi çal </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + İçerik Yok + </label> + <tooltip name="none_tooltip"> + Burada ortam öğesi yok + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Gerçek Zamanlı Akış diff --git a/indra/newview/skins/default/xui/tr/mime_types_mac.xml b/indra/newview/skins/default/xui/tr/mime_types_mac.xml index c37f872a65..fa554d34fc 100755 --- a/indra/newview/skins/default/xui/tr/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/tr/mime_types_mac.xml @@ -44,6 +44,14 @@ Bu konumdaki sesi çal </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + İçerik Yok + </label> + <tooltip name="none_tooltip"> + Burada ortam öğesi yok + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Gerçek Zamanlı Akış diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index 2364bd5acf..b854d3964b 100755 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -73,6 +73,10 @@ Hata ayrıntıları: '[_NAME]' adlı bildirim notifications.xml içind [MESSAGE] <usetemplate name="okcancelbuttons" notext="İptal" yestext="Evet"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> <notification name="BadInstallation"> [APP_NAME] güncellenirken bir hata oluştu. Lütfen Görüntüleyici'nin [http://get.secondlife.com son sürümünü karşıdan yükleyin]. <usetemplate name="okbutton" yestext="Tamam"/> @@ -575,6 +579,9 @@ Grafik Kalitesi, Tercihler > Grafikler sekmesinden yükseltilebilir. <notification name="RegionNoTerraforming"> [REGION] bölgesi yer şekillendirmeye izin vermiyor. </notification> + <notification name="ParcelNoTerraforming"> + [PARCEL] parseli üzerinde yer şekillendirmesi yapma izniniz bulunmuyor. + </notification> <notification name="CannotCopyWarning"> Aşağıdaki öğeleri kopyalamak için gerekli izne sahip değilsiniz: [ITEMS] @@ -1825,6 +1832,30 @@ Binlerce bölgeyi değiştirecek ve alan sunucusunu kesintiye uğratacaktır. Sadece bu gayrimenkul için mi gayrimenkul yöneticiliğinden çıkarılsın, yoksa [ALL_ESTATES] için mi? <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> </notification> + <notification label="Gayrimenkul seç" name="EstateAllowedExperienceAdd"> + Sadece bu gayrimenkul için mi izin verilenler listesine eklensin, yoksa [ALL_ESTATES] için mi? + <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> + </notification> + <notification label="Gayrimenkul seç" name="EstateAllowedExperienceRemove"> + Yalnızca bu gayrimenkul için mi izin verilenler listesinden çıkarılsın, yoksa [ALL_ESTATES] için mi? + <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> + </notification> + <notification label="Gayrimenkul seç" name="EstateBlockedExperienceAdd"> + Yalnızca bu gayrimenkul için mi engellenenler listesine eklensin, yoksa [ALL_ESTATES] için mi? + <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> + </notification> + <notification label="Gayrimenkul seç" name="EstateBlockedExperienceRemove"> + Yalnızca bu gayrimenkul için mi engellenenler listesinden çıkarılsın, yoksa [ALL_ESTATES] için mi? + <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> + </notification> + <notification label="Gayrimenkul seç" name="EstateTrustedExperienceAdd"> + Yalnızca bu gayrimenkul için mi anahtar listesine eklensin, yoksa [ALL_ESTATES] için mi? + <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> + </notification> + <notification label="Gayrimenkul seç" name="EstateTrustedExperienceRemove"> + Yalnızca bu gayrimenkul için mi anahtar listesine çıkarılsın, yoksa [ALL_ESTATES] için mi? + <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> + </notification> <notification label="Çıkarmayı Onayla" name="EstateKickUser"> [EVIL_USER] bu gayrimenkulden çıkarılsın mı? <usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/> @@ -1899,6 +1930,10 @@ Binlerce bölgeyi değiştirecek ve alan sunucusunu kesintiye uğratacaktır. Tercihleriniz ile sunucu arasında senkronizasyon eksikliği olduğu için ışınlama işleminizde teknik sorunlar yaşanıyoruz. <usetemplate name="okbutton" yestext="Tamam"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + Bölgeye girilemiyor. "[REGION_NAME]" bir Yetenek Oyunu Bölgesi. Buraya girebilmek için bazı ölçütleri karşılamanız gerekiyor. Ayrıntılar için lütfen [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ] adresini ziyaret edin. + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> <notification name="PreferredMaturityChanged"> [RATING] içeriğine sahip bir bölgeyi ziyaret edeceğiniz hakkında başka bildirim almayacaksınız. Daha sonra menü çubuğunda Ben > Tercihler > Genel sekmesini kullanarak tercihlerinizi değiştirebilirsiniz. <usetemplate name="okbutton" yestext="Tamam"/> @@ -2205,6 +2240,9 @@ Bu nesneyi seçilen nesne ile değiştirmek istiyor musunuz? <button ignore="Hiçbir Zaman Değiştirme" name="No" text="İptal"/> </form> </notification> + <notification name="TooManyWearables"> + [AMOUNT] öğeden fazlasını içeren bir klasörü kullanamazsınız. Bu limiti Gelişmiş > Hata Ayıklama Ayarlarını Göster > KullanılabilirKlasörLimiti öğesinden değiştirebilirsiniz. + </notification> <notification label="Rahatsız Etme Modu Uyarısı" name="DoNotDisturbModePay"> Rahatsız Etme seçeneğini devreye aldınız. Bu ödemenin karşılığında sunulan hiçbir öğeyi almayacaksınız. @@ -2814,7 +2852,7 @@ Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak. [MESSAGE] -Şu nesneden: <nolink>[OBJECTNAME]</nolink>, sahibi: [NAME]? +Kaynak nesne: <nolink>[OBJECTNAME]</nolink>, sahibi: [NAME] <form name="form"> <button name="Gotopage" text="Sayfaya git"/> <button name="Cancel" text="İptal"/> @@ -2840,6 +2878,72 @@ Kabul ediyor musunuz? <button name="Mute" text="Engelle"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + Yeni bir deneyim edinilemiyor: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Deneyimin sahibi seçili grubun bir üyesi olmadığı için, deneyim grubunda yapılan bir değişiklik göz ardı edildi. + </notification> + <notification name="UneditableExperienceProfileMessage"> + Deneyim profili güncellenirken, düzenlenebilir olmayan "[field]" alanı göz ardı edildi. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Yalnızca deneyimin sahibi tarafından ayarlanabilecek olan "[field]" alanında yapılan değişiklikler göz ardı edildi. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Bir deneyimin erişkinlik seviyesini deneyimin sahibinin seviyesinden daha yüksek bir seviyeye ayarlayamazsınız. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Aşağıdaki koşullar deneyim profili adının ve/veya açıklamasının güncellenmesini engelledi: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + secondlife:///app/experience/[public_id]/profile deneyimini kaldırdığınız için [region_name] bölgesinden dışarı ışınlandınız ve artık bu bölgeye girme hakkınız yok. + <form name="form"> + <ignore name="ignore" text="Bir deneyim kaldırıldığı için bölgeden çıkarıldı"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + secondlife:///app/experience/[public_id]/profile anahtar deneyimine katılarak [region_name] bölgesine giriş izni aldınız. Bu deneyimin kaldırılması bu bölgeden çıkarılmanıza neden olabilir. + <form name="form"> + <ignore name="ignore" text="Bir deneyim bir bölgeye girme izni verdi"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + Bu hedef konuma erişim izniniz yok. Aşağıdaki bir deneyimi kabul ederek bölgeye giriş izni kazanabilirsiniz: + +[EXPERIENCE_LIST] + +Başka Anahtar Deneyimler de olabilir. + </notification> + <notification name="ExperienceEvent"> + secondlife:///app/experience/[public_id]/profile deneyimiyle [EventType] için bir nesneye izin verildi. + Sahibi: secondlife:///app/agent/[OwnerID]/inspect + Nesne Adı: [ObjectName] + Parsel Adı: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + secondlife:///app/experience/[public_id]/profile deneyimiyle [EventType] için bir eke izin verildi. + Sahibi: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + '<nolink>[OBJECTNAME]</nolink>', "[NAME]" adlı kişiye ait bir nesne, [GRID_WIDE] deneyimine katılmanızı istiyor: + +[EXPERIENCE] + +İzin verildikten sonra, deneyim profilinden iptal edilmedikçe, bu deneyim için bu iletiyi bir daha görmezsiniz. + +Bu deneyimle ilişkili komut dosyaları deneyimin etkin olduğu bölgelerde aşağıdaki eylemleri gerçekleştirebilecek: + +[QUESTIONS]Kabul ediyor musunuz? + <form name="form"> + <button name="BlockExperience" text="Deneyimi Engelle"/> + <button name="Mute" text="Nesneyi Engelle"/> + <button name="Yes" text="Evet"/> + <button name="No" text="Hayır"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> Uyarı: '<nolink>[OBJECTNAME]</nolink>' nesnesi, Linden Dolar hesabınıza tam erişim istiyor. Eğer erişime izin verirseniz, süregelen bir şekilde, ilave uyarı olmaksızın, hesabınızdan herhangi bir zamanda fon çekebilir veya hesabınızı tamamen boşaltabilir. @@ -3158,6 +3262,10 @@ Lütfen ağ ve güvenlik duvarı ayarlarınızı kontrol edin. <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( [EXISTENCE] saniyedir hayatta ) '[BODYREGION]' için [RESOLUTION] çözünürlükte kaydedilmiş bir dokuyu [TIME] saniye sonra yerel olarak güncellediniz. + </notification> + <notification name="CannotUploadTexture"> + Doku karşıya yüklenemiyor. +[REASON] </notification> <notification name="LivePreviewUnavailable"> Kopyalanamaz ve/veya aktarılamaz olduğu için bu dokunun bir önizlemesini görüntüleyemiyoruz. diff --git a/indra/newview/skins/default/xui/tr/panel_experience_info.xml b/indra/newview/skins/default/xui/tr/panel_experience_info.xml new file mode 100644 index 0000000000..0bce4fea8f --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="Deneyim Profili"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + Konum: + </text> + <text name="LocationTextText"> + bir yer + </text> + <button label="Işınla" name="teleport_btn"/> + <button label="Harita" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + Pazar yeri mağazası: + </text> + <text name="LocationTextText"> + bir yer + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + Seviye: + </text> + <text name="ContentRatingText"> + Yetişkin + </text> + <text name="Owner"> + Sahip: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="Düzenle" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/tr/panel_experience_list_editor.xml new file mode 100644 index 0000000000..5379fe4548 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + yükleniyor... + </panel.string> + <panel.string name="panel_allowed"> + İzin Verilen Deneyimler: + </panel.string> + <panel.string name="panel_blocked"> + Engellenen Deneyimler: + </panel.string> + <panel.string name="panel_trusted"> + Anahtar Deneyimler: + </panel.string> + <panel.string name="no_results"> + (boş) + </panel.string> + <text name="text_name"> + Deneyim Listesi + </text> + <scroll_list name="experience_list"> + <columns label="Ad" name="experience_name"/> + </scroll_list> + <button label="Ekle..." name="btn_add"/> + <button label="Kaldır" name="btn_remove"/> + <button label="Profil..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_experience_list_item.xml b/indra/newview/skins/default/xui/tr/panel_experience_list_item.xml new file mode 100644 index 0000000000..b904295f97 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + Geçici Ad + </text> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_experience_log.xml b/indra/newview/skins/default/xui/tr/panel_experience_log.xml new file mode 100644 index 0000000000..600530cf2d --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="Olay yok."/> + <string name="loading" value="yükleniyor..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="Süre" name="time"/> + <columns label="Etkinlik" name="event"/> + <columns label="Deneyim" name="experience_name"/> + <columns label="Nesne" name="object_name"/> + </scroll_list> + <button label="Bildir" name="btn_notify"/> + <button label="Profil" name="btn_profile_xp"/> + <button label="Raporla" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="Tüm Olayları Bildir Gün" name="notify_all"/> + <button label="Temizle" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_experience_search.xml b/indra/newview/skins/default/xui/tr/panel_experience_search.xml new file mode 100644 index 0000000000..7cc2bd1223 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + "[TEXT]" bulunamadı + </string> + <string name="no_results"> + Sonuç yok + </string> + <string name="searching"> + Arıyor... + </string> + <string name="loading"> + Yükleniyor... + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="Git" name="find"/> + <icons_combo_box label="Orta" name="maturity"> + <icons_combo_box.item label="Yetişkin" name="Adult" value="42"/> + <icons_combo_box.item label="Orta" name="Mature" value="21"/> + <icons_combo_box.item label="Genel" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="Ad" name="experience_name"/> + <columns label="Sahip" name="owner"/> + </scroll_list> + <button label="Tamam" label_selected="Tamam" name="ok_btn"/> + <button label="İptal" name="cancel_btn"/> + <button label="Profili Görüntüle" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_experiences.xml b/indra/newview/skins/default/xui/tr/panel_experiences.xml new file mode 100644 index 0000000000..15be61aad2 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="Deneyimler yükleniyor..."/> + <string name="no_experiences" value="Deneyim yok."/> + <string name="acquire" value="Bir Deneyim Edin"/> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml b/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml index 0a6b9ac600..8184d6d7cf 100644 --- a/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_friends"> <string name="facebook_friends_empty" value="Şu an için aynı zamanda bir Second Life sakini olan hiçbir Facebook arkadaşınız yok. Facebook arkadaşlarınızı bugün Second Life'a katılmaya davet edin!"/> - <string name="facebook_friends_no_connected" value="Şu anda Facebook'a bağlı değilsiniz. Bağlanmak ve bu özelliği etkinleştirmek için lütfen Hesap sekmesine gidin."/> + <string name="facebook_friends_no_connected" value="Şu anda Facebook'a bağlı değilsiniz. Bağlanmak ve bu özelliği etkinleştirmek için lütfen Durum sekmesine gidin."/> <accordion name="friends_accordion"> <accordion_tab name="tab_second_life_friends" title="SL arkadaşları"/> <accordion_tab name="tab_suggested_friends" title="Bu kişileri SL arkadaşları olarak ekle"/> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml b/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml index 64732c5fc7..d772aff937 100644 --- a/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> - <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> - <combo_box.item label="Filtre Yok" name="NoFilter"/> - </combo_box> - <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> - <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> - <text name="caption_label"> - Yorum (isteğe bağlı): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Yayınla" name="post_photo_btn"/> - <button label="İptal" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> + <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> + <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> + <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> + <text name="caption_label"> + Yorum (isteğe bağlı): + </text> + <button label="Yayınla" name="post_photo_btn"/> + <button label="İptal" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_place.xml b/indra/newview/skins/default/xui/tr/panel_facebook_place.xml index 54c392c9d8..85b401a1a0 100644 --- a/indra/newview/skins/default/xui/tr/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/tr/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - Bulunduğunuz yer hakkında bir şeyler söyleyin: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="Yayınla" name="post_place_btn"/> - <button label="İptal" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + Bulunduğunuz yer hakkında bir şeyler söyleyin: + </text> + <check_box initial_value="false" label="Konumun üstten görünümünü ekle" name="add_place_view_cb"/> + <button label="Yayınla" name="post_place_btn"/> + <button label="İptal" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_status.xml b/indra/newview/skins/default/xui/tr/panel_facebook_status.xml index 9b95fe3a35..e6feff5949 100644 --- a/indra/newview/skins/default/xui/tr/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/tr/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - Ne düşünüyorsunuz? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="Yayınla" name="post_status_btn"/> - <button label="İptal" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="Facebook'a şu kimlikle bağlandınız:"/> + <string name="facebook_disconnected" value="Facebook'a bağlanılmadı"/> + <text name="account_caption_label"> + Facebook'a bağlanılmadı. + </text> + <panel name="panel_buttons"> + <button label="Bağlan..." name="connect_btn"/> + <button label="Bağlantıyı kes" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook'ta içerik yayınlama hakkında bilgi edinin] + </text> + </panel> + <text name="status_caption_label"> + Ne düşünüyorsunuz? + </text> + <button label="Yayınla" name="post_status_btn"/> + <button label="İptal" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml index 9ebc70c67c..cab1b24621 100644 --- a/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> - <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> - <combo_box.item label="Filtre Yok" name="NoFilter"/> - </combo_box> - <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> - <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> - <text name="title_label"> - Başlık: - </text> - <text name="description_label"> - Açıklama: - </text> - <check_box initial_value="true" label="Açıklamanın sonuna SL konumunu ekle" name="add_location_cb"/> - <text name="tags_label"> - Etiketler: - </text> - <text name="tags_help_label"> - Etiketleri boşlukla ayır + <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> + <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> + <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> + <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> + <text name="title_label"> + Başlık: + </text> + <text name="description_label"> + Açıklama: + </text> + <check_box initial_value="true" label="Açıklamanın sonuna SL konumunu ekle" name="add_location_cb"/> + <text name="tags_label"> + Etiketler: + </text> + <text name="tags_help_label"> + Etiketleri boşlukla ayır Birden çok kelime içeren etiketler için "" kullan - </text> - <combo_box name="rating_combobox" tool_tip="Filckr içerik seviyesi"> - <combo_box.item label="Güvenli Flickr seviyesi" name="SafeRating"/> - <combo_box.item label="Orta Flickr seviyesi" name="ModerateRating"/> - <combo_box.item label="Kısıtlı Flickr seviyesi" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Karşıya Yükle" name="post_photo_btn"/> - <button label="İptal" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Filckr içerik seviyesi"> + <combo_box.item label="Güvenli Flickr seviyesi" name="SafeRating"/> + <combo_box.item label="Orta Flickr seviyesi" name="ModerateRating"/> + <combo_box.item label="Kısıtlı Flickr seviyesi" name="RestrictedRating"/> + </combo_box> + <button label="Karşıya Yükle" name="post_photo_btn"/> + <button label="İptal" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml index e4697eaa21..d72bb2cf31 100755 --- a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="Roller ve Üyeler"/> <accordion_tab name="group_notices_tab" title="Bildirimler"/> <accordion_tab name="group_land_tab" title="Arazi/Varlıklar"/> + <accordion_tab name="group_experiences_tab" title="Deneyimler"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml b/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml index bce0b21b9a..e1443217e8 100755 --- a/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Özel" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Genişlik" name="postcard_snapshot_width"/> - <spinner label="Yükseklik" name="postcard_snapshot_height"/> - <check_box label="Oranları koru" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Görüntü kalitesi" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Genişlik x Yükseklik" name="postcard_snapshot_width"/> + <check_box label="Oranları koru" name="postcard_keep_aspect_check"/> + <slider label="Kalite:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml index 2039761748..acb20595f7 100755 --- a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> Web: </text> - <radio_group name="use_external_browser"> - <radio_item label="Tarayıcımı kullan (IE, Firefox, Safari)" name="external" tool_tip="Yardım, web bağlantıları vs. için sistemin varsayılan web tarayıcısını kullanın. Tam ekran çalıştırılıyorsa tavsiye edilmez." value="true"/> - <radio_item label="Yerleşik tarayıcıyı kullan" name="internal" tool_tip="Yardım, web bağlantıları vs. için dahili web tarayıcısını kullanın. Bu tarayıcı [APP_NAME] içerisinde yeni bir pencere olarak açılır." value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="Tüm bağlantılar için kendi tarayıcımı kullan (Chrome, Firefox, IE)" name="internal" tool_tip="Yardım, web bağlantıları vb. için sistemin varsayılan web tarayıcısını kullanın. Tam ekran çalıştırılıyorsa tavsiye edilmez." value="0"/> + <radio_item label="Yerleşik tarayıcıyı yalnızca Second Life bağlantıları için kullan" name="external" tool_tip="Yardım, web bağlantıları vb. için sistemin varsayılan web tarayıcısını kullanın. Yerleşik tarayıcı yalnızca LindenLab/SecondLife bağlantıları için kullanılır." value="1"/> </radio_group> <check_box initial_value="true" label="Eklentileri etkinleştir" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Çerezleri kabul et" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/tr/panel_region_experiences.xml b/indra/newview/skins/default/xui/tr/panel_region_experiences.xml new file mode 100644 index 0000000000..406995c359 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Deneyimler" name="Experiences"> + <panel.string name="trusted_estate_text"> + Her Deneyim bir Anahtar olabilir. + +Bu gayrimenkul üzerinde Anahtar Deneyimlerin çalıştırılma izni var. + +Ek olarak, gayrimenkul genel erişime izin vermiyorsa, herhangi bir Anahtar Deneyime katılan Sakinler gayrimenkule girebilir ve bir Anahtar Deneyime dahil oldukları sürece burada kalabilirler. + </panel.string> + <panel.string name="allowed_estate_text"> + Yalnızca Arazi Kapsamındaki Deneyimlere İzin Verilebilir. + +Bu gayrimenkul üzerinde İzin Verilen Deneyimlerin çalıştırılma izni var. + </panel.string> + <panel.string name="blocked_estate_text"> + Yalnızca Ağ Kapsamındaki Deneyimler Engellenebilir. + +Bu gayrimenkul üzerinde Engellenmiş Deneyimler çalıştırılamaz. + </panel.string> + <panel.string name="estate_caption"> + Bu sekmedeki ayarlarda yapılan değişiklikler gayrimenkul içerisindeki tüm bölgeleri etkiler. + </panel.string> + <panel.string name="allowed_parcel_text"> + Yalnızca Arazi Kapsamındaki Deneyimlere İzin Verilebilir. + +Gayrimenkul tarafından engellenmemişlerse, İzin Verilen Deneyimlerin bu parsel üzerinde çalıştırılma izni vardır. + </panel.string> + <panel.string name="blocked_parcel_text"> + Sakinlerin Tüm Deneyimleri Engellenebilir. + +Engellenmiş Deneyimler bu parselde çalıştırılamaz. + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_script_experience.xml b/indra/newview/skins/default/xui/tr/panel_script_experience.xml new file mode 100644 index 0000000000..1e7054c310 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="DENEYİM"> + <button label="Deneyim" name="Expand Experience"/> + <check_box label="Deneyimi Kullanır" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="Deneyimi Seç..." name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + Hiçbir deneyimde katkınız yok. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml index e3b22c639a..160cba8700 100755 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - Envanterime Kaydet + Envanter </text> <text name="hint_lbl"> Bir görüntüyü envanterinize kaydetmenin maliyeti L$[UPLOAD_COST] olur. Görüntünüzü bir doku olarak kaydetmek için kare formatlardan birini seçin. @@ -13,8 +13,8 @@ <combo_box.item label="Büyük (512x512)" name="Large(512x512)"/> <combo_box.item label="Özel" name="Custom"/> </combo_box> - <spinner label="Genişlik" name="inventory_snapshot_width"/> - <spinner label="Yükseklik" name="inventory_snapshot_height"/> + <spinner label="Genişlik x Yükseklik" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="Oranları koru" name="inventory_keep_aspect_check"/> <button label="İptal" name="cancel_btn"/> <button label="Kaydet" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml index 87d7677d73..a28e390ee5 100755 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Bilgisayarıma Kaydet + Disk </text> <combo_box label="Çözünürlük" name="local_size_combo"> <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="Özel" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Genişlik" name="local_snapshot_width"/> - <spinner label="Yükseklik" name="local_snapshot_height"/> - <check_box label="Oranları koru" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Format" name="local_format_combo"> - <combo_box.item label="PNG (Kayıpsız)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (Kayıpsız)" name="BMP"/> - </combo_box> - <slider label="Görüntü kalitesi" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Genişlik x Yükseklik" name="local_snapshot_width"/> + <check_box label="Oranları koru" name="local_keep_aspect_check"/> + <text name="local_format_label"> + Format: + </text> + <combo_box label="Format" name="local_format_combo"> + <combo_box.item label="PNG (Kayıpsız)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (Kayıpsız)" name="BMP"/> + </combo_box> + <slider label="Kalite:" name="image_quality_slider"/> <button label="İptal" name="cancel_btn"/> <flyout_button label="Kaydet" name="save_btn" tool_tip="Görüntüyü bir dosyaya kaydet"> <flyout_button.item label="Kaydet" name="save_item"/> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml index 4bc1098ce9..db29e6908c 100755 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="Profil Akışımda Yayınla" name="save_to_profile_btn"/> - <button label="E-posta" name="save_to_email_btn"/> - <button label="Envanterime Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Bilgisayarıma Kaydet" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - Gönder: [secondlife:/// Facebook] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// Twitter] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="Diske Kaydet" name="save_to_computer_btn"/> + <button label="Envantere Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/> + <button label="Profile Yükle" name="save_to_profile_btn"/> + <button label="Facebook'a Yükle" name="send_to_facebook_btn"/> + <button label="Twitter'a Yükle" name="send_to_twitter_btn"/> + <button label="Flickr'a Yükle" name="send_to_flickr_btn"/> + <button label="E-postayla Gönder" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml index e999678a0d..ecb47b2218 100755 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml @@ -12,6 +12,10 @@ <text name="title"> E-posta </text> - <button label="İleti" name="message_btn"/> - <button label="Ayarlar" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="İleti" name="panel_postcard_message"/> + <panel label="Ayarlar" name="panel_postcard_settings"/> + </tab_container> + <button label="İptal" name="cancel_btn"/> + <button label="Gönder" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml index 334fd52a48..ed8f25f255 100755 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - Profil Akışımda Yayınla + Profil </text> <combo_box label="Çözünürlük" name="profile_size_combo"> <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Özel" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Genişlik" name="profile_snapshot_width"/> - <spinner label="Yükseklik" name="profile_snapshot_height"/> - <check_box label="Oranları koru" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Resim yazısı: - </text> - <check_box initial_value="true" label="Konumu dahil et" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Genişlik x Yükseklik" name="profile_snapshot_width"/> + <check_box label="Oranları koru" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Resim yazısı: + </text> + <check_box initial_value="true" label="Konumu dahil et" name="add_location_cb"/> <button label="İptal" name="cancel_btn"/> <button label="Yayınla" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml b/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml index 966e9b906d..511ecb690d 100644 --- a/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - Neler oluyor? - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="SL konumunu dahil et" name="add_location_cb"/> - <check_box initial_value="true" label="Fotoğraf ekle" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> - <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> - <combo_box.item label="Filtre Yok" name="NoFilter"/> - </combo_box> - <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> - <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="Tweet" name="post_photo_btn"/> - <button label="İptal" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + Neler oluyor? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="SL konumunu dahil et" name="add_location_cb"/> + <check_box initial_value="true" label="Fotoğraf ekle" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> + <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> + <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> + <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> + <button label="Tweet" name="post_photo_btn"/> + <button label="İptal" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml index 8f063122dc..a7e381d6a0 100755 --- a/indra/newview/skins/default/xui/tr/role_actions.xml +++ b/indra/newview/skins/default/xui/tr/role_actions.xml @@ -71,4 +71,8 @@ <action description="Grup Sesli Sohbetine Katıl" longdescription="Bu Yeteneğe sahip bir Roldeki Üyeler grup sesli sohbet oturumlarına katılabilir. NOT: Sesli sohbet oturumuna erişim için Grup Sohbetine Katıl yeteneği gereklidir." name="join voice chat" value="27"/> <action description="Grup Sohbetini Yönet" longdescription="Bu Yeteneğe sahip bir Roldeki Üyeler grup sesli ve yazılı sohbet oturumlarına errişimi ve katılımı kontrol edebilir." name="moderate group chat" value="37"/> </action_set> + <action_set description="Bu Yetenekler'e, grubun sahip olduğu deneyimleri değiştirme gücü de dahildir." name="experience_tools_experience"> + <action description="Deneyim Yöneticisi" longdescription="Bu yeteneğe sahip bir roldeki üyeler bir deneyimin meta verilerini düzenleyebilirler." name="experience admin" value="49"/> + <action description="Deneyim Yardımcısı" longdescription="Bu yeteneğe sahip bir roldeki üyeler bir deneyimin komut dizilerine katkıda bulunabilirler." name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/tr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/tr/sidepanel_item_info.xml index 86b684c497..433da27946 100755 --- a/indra/newview/skins/default/xui/tr/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/tr/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="Öğe Profili"> + <panel.string name="loading_experience"> + (yükleniyor) + </panel.string> <panel.string name="unknown"> (bilinmiyor) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> Alınan: </text> + <text name="LabelItemExperienceTitle"> + Deneyim: + </text> <panel name="perms_inv"> <text name="perm_modify"> Şunu yapabilirsiniz: diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index c4fc76fe29..b1a513fbf5 100755 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -449,6 +449,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="TooltipMustSingleDrop"> Buraya sadece bir öğe sürüklenebilir. </string> + <string name="TooltipTooManyWearables"> + [AMOUNT] öğeden fazlasını içeren bir klasörü kullanamazsınız. Bu limiti Gelişmiş > Hata Ayıklama Ayarlarını Göster > KullanılabilirKlasörLimiti öğesinden değiştirebilirsiniz. + </string> <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipOutboxDragToWorld"> Satıcı giden kutunuzda öğeler oluşturamazsınız @@ -1057,9 +1060,7 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="AgentNameSubst"> (Siz) </string> - <string name="JoinAnExperience"> - Bir tecrübeye katıl - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> Gayri menkul erişim listelerini yönetirken uyarıları bastır </string> @@ -1870,6 +1871,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="CompileQueueUnknownFailure"> Karşıdan yüklerken bilinmeyen hata </string> + <string name="CompileNoExperiencePerm"> + [SCRIPT] komut dizisi [EXPERIENCE] deneyimiyle atlanıyor. + </string> <string name="CompileQueueTitle"> Tekrar Derleme İlerlemesi </string> @@ -5271,6 +5275,87 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="UserDictionary"> [User] </string> + <string name="experience_tools_experience"> + Deneyim + </string> + <string name="ExperienceNameNull"> + (deneyim yok) + </string> + <string name="ExperienceNameUntitled"> + (başlıksız deneyim) + </string> + <string name="Land-Scope"> + Arazi Kapsamında + </string> + <string name="Grid-Scope"> + Ağ Kapsamında + </string> + <string name="Allowed_Experiences_Tab"> + İZİN VERİLEN + </string> + <string name="Blocked_Experiences_Tab"> + ENGELLENMİŞ + </string> + <string name="Contrib_Experiences_Tab"> + KATKIDA BULUNAN + </string> + <string name="Admin_Experiences_Tab"> + YÖNETİCİ + </string> + <string name="Recent_Experiences_Tab"> + SON + </string> + <string name="Owned_Experiences_Tab"> + SAHİBİ + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], maks. [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + kontrollerinizi ele alma + </string> + <string name="ExperiencePermission3"> + avatarınızdaki animasyonları tetikleme + </string> + <string name="ExperiencePermission4"> + avatarınıza ekleme + </string> + <string name="ExperiencePermission9"> + kameranızı takip etmek + </string> + <string name="ExperiencePermission10"> + kameranızı kontrol etme + </string> + <string name="ExperiencePermission11"> + sizi ışınlama + </string> + <string name="ExperiencePermission12"> + deneyim izinlerini otomatik olarak kabul et + </string> + <string name="ExperiencePermissionShortUnknown"> + bilinmeyen bir işlem gerçekleştirdi: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Kontrolü Al + </string> + <string name="ExperiencePermissionShort3"> + Animasyonları Tetikle + </string> + <string name="ExperiencePermissionShort4"> + Ekle + </string> + <string name="ExperiencePermissionShort9"> + Kamera Takibi + </string> + <string name="ExperiencePermissionShort10"> + Kamera Kontrolü + </string> + <string name="ExperiencePermissionShort11"> + Işınla + </string> + <string name="ExperiencePermissionShort12"> + İzin + </string> <string name="logging_calls_disabled_log_empty"> Sohbetlerin günlüğü tutulmuyor. Bir günlük tutmaya başlamak için, Tercihler > Sohbet altında "Kaydet: Sadece günlük" veya "Kaydet: Günlük ve dökümler" seçimini yapın. </string> diff --git a/indra/newview/skins/default/xui/tr/teleport_strings.xml b/indra/newview/skins/default/xui/tr/teleport_strings.xml index 20d09b1ee2..e3a08e04b2 100755 --- a/indra/newview/skins/default/xui/tr/teleport_strings.xml +++ b/indra/newview/skins/default/xui/tr/teleport_strings.xml @@ -48,6 +48,9 @@ Bir dakika sonra tekrar deneyin. <message name="MustGetAgeRegion"> Bu bölgeye girebilmek için 18 veya üzeri bir yaşta olmanız gerekir. </message> + <message name="RegionTPSpecialUsageBlocked"> + Bölgeye girilemiyor. "[REGION_NAME]" bir Yetenek Oyunu Bölgesi. Buraya girebilmek için bazı ölçütleri karşılamanız gerekiyor. Ayrıntılar için lütfen [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ] adresini ziyaret edin. + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml index 76db621951..a9d95e5b9b 100755 --- a/indra/newview/skins/default/xui/zh/floater_about_land.xml +++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml @@ -331,22 +331,6 @@ <check_box label="安全(無傷害)" name="check safe" tool_tip="若勾選,將把土地設為安全,禁絕傷害性的戰鬥。 若未勾選,則允許傷害性的戰鬥。"/> <check_box label="禁止推撞" name="PushRestrictCheck" tool_tip="禁止使用腳本推撞。 勾選這選項可有效防止你土地上出現滋事行為。"/> <check_box label="將地點刊登顯示在搜尋中(L$30 / 每週)" name="ShowDirectoryCheck" tool_tip="讓其他人可以在搜尋結果中看到這塊地段"/> - <combo_box name="land category with adult"> - <combo_box.item label="任何類別" name="item0"/> - <combo_box.item label="林登位置" name="item1"/> - <combo_box.item label="完全成人" name="item2"/> - <combo_box.item label="藝術與文化" name="item3"/> - <combo_box.item label="商業" name="item4"/> - <combo_box.item label="教育" name="item5"/> - <combo_box.item label="遊戲" name="item6"/> - <combo_box.item label="聚會所" name="item7"/> - <combo_box.item label="歡迎新手光臨" name="item8"/> - <combo_box.item label="公園與自然景觀" name="item9"/> - <combo_box.item label="住宅" name="item10"/> - <combo_box.item label="購物" name="item11"/> - <combo_box.item label="出租" name="item13"/> - <combo_box.item label="其他" name="item12"/> - </combo_box> <combo_box name="land category"> <combo_box.item label="任何類別" name="item0"/> <combo_box.item label="林登位置" name="item1"/> @@ -477,5 +461,6 @@ <button label="移除" label_selected="移除" name="remove_banned"/> </panel> </panel> + <panel label="體驗" name="land_experiences_panel"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_experience_search.xml b/indra/newview/skins/default/xui/zh/floater_experience_search.xml new file mode 100644 index 0000000000..c65b64c98f --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_experience_search.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="experiencepicker" title="選擇體驗"/> diff --git a/indra/newview/skins/default/xui/zh/floater_experienceprofile.xml b/indra/newview/skins/default/xui/zh/floater_experienceprofile.xml new file mode 100644 index 0000000000..4d2b3331d7 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_experienceprofile.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater title="EXPERIENCE PROFILE"> + <floater.string name="empty_slurl"> + (無) + </floater.string> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Light" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Light" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Light" + </floater.string> + <text name="edit_title" value="體驗簡覽"/> + <tab_container name="tab_container"> + <panel name="panel_experience_info"> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel name="top panel"> + <button label="編輯" name="edit_btn"/> + </layout_panel> + <layout_panel name="maturity panel"> + <text name="ContentRating"> + 分級: + </text> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + 位置: + </text> + </layout_panel> + <layout_panel> + <text name="Owner"> + 所有人: + </text> + </layout_panel> + <layout_panel name="group_panel"> + <text name="Group"> + 群組: + </text> + </layout_panel> + <layout_panel name="perm panel"> + <button label="允許" name="allow_btn"/> + <button label="忘記" name="forget_btn"/> + <button label="封鎖" name="block_btn"/> + <text name="privileged"> + 所有居民均可使用這個體驗。 + </text> + <button label="違規舉報" name="report_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + </panel> + <panel name="edit_panel_experience_info"> + <scroll_container name="edit_xp_scroll"> + <panel name="edit_scrolling_panel"> + <text name="edit_experience_title_label" value="名稱:"/> + <text name="edit_experience_desc_label" value="描述:"/> + <button label="群組" name="Group_btn"/> + <text name="edit_ContentRating"> + 分級: + </text> + <icons_combo_box label="適度成人" name="edit_ContentRatingText" tool_tip="提升體驗的內容分級將會重設所有已允許該體驗的居民的權限。"> + <icons_combo_box.item label="完全成人" name="Adult" value="42"/> + <icons_combo_box.item label="適度成人" name="Mature" value="21"/> + <icons_combo_box.item label="一般" name="PG" value="13"/> + </icons_combo_box> + <text name="edit_Location"> + 位置: + </text> + <button label="設定為目前位置" name="location_btn"/> + <button label="清空位置" name="clear_btn"/> + <check_box label="啟用體驗" name="edit_enable_btn" tool_tip=""/> + <check_box label="不顯現在搜尋結果" name="edit_private_btn"/> + <text name="changes" value="體驗的變更結果可能需要數分鐘才會擴及所有地區。"/> + <button label="返回" name="cancel_btn"/> + <button label="儲存" name="save_btn"/> + </panel> + </scroll_container> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_experiences.xml b/indra/newview/skins/default/xui/zh/floater_experiences.xml new file mode 100644 index 0000000000..995241797e --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_experiences.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_experiences" title="體驗"/> diff --git a/indra/newview/skins/default/xui/zh/floater_facebook.xml b/indra/newview/skins/default/xui/zh/floater_facebook.xml index 9847db9124..9a71a26333 100644 --- a/indra/newview/skins/default/xui/zh/floater_facebook.xml +++ b/indra/newview/skins/default/xui/zh/floater_facebook.xml @@ -1,20 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_facebook" title="發佈到臉書"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="狀態" name="panel_facebook_status"/> - <panel label="相片" name="panel_facebook_photo"/> - <panel label="打卡" name="panel_facebook_place"/> - <panel label="朋友" name="panel_facebook_friends"/> - <panel label="帳號" name="panel_facebook_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - 錯誤 - </text> - <text name="connection_loading_text"> - 載入中… - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="狀態" name="panel_facebook_status"/> + <panel label="相片" name="panel_facebook_photo"/> + <panel label="打卡" name="panel_facebook_place"/> + <panel label="朋友" name="panel_facebook_friends"/> + </tab_container> + <text name="connection_error_text"> + 錯誤 + </text> + <text name="connection_loading_text"> + 載入中… + </text> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml index 6d1d18b67c..51dc73d971 100755 --- a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml @@ -5,8 +5,8 @@ <check_box label="服裝" name="check_clothing"/> <check_box label="姿勢" name="check_gesture"/> <check_box label="地標" name="check_landmark"/> - <check_box label="網面" name="check_mesh"/> <check_box label="記事卡" name="check_notecard"/> + <check_box label="網面" name="check_mesh"/> <check_box label="物件" name="check_object"/> <check_box label="腳本" name="check_script"/> <check_box label="聲音" name="check_sound"/> @@ -19,6 +19,10 @@ <text name="- OR -"> - 或 - </text> + <radio_group name="date_search_direction"> + <radio_item label="新近於" name="newer"/> + <radio_item label="早於" name="older"/> + </radio_group> <spinner label="小時前" name="spin_hours_ago"/> <spinner label="天前" name="spin_days_ago"/> <button label="關閉" label_selected="關閉" name="Close"/> diff --git a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml index 6e58e7332f..e9a082288a 100644 --- a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml @@ -7,7 +7,7 @@ 360 </floater.string> <floater.string name="min_title_msg"> - Lag + 延遲 </floater.string> <floater.string name="min_width_px"> 90 @@ -22,28 +22,28 @@ 15 </floater.string> <floater.string name="client_frame_time_window_bg_msg"> - Normal, window in background + 正常,視窗位於背景 </floater.string> <floater.string name="client_frame_time_critical_msg"> - Client frame rate below [CLIENT_FRAME_RATE_CRITICAL] + 客戶端幀率低於 [CLIENT_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="client_frame_time_warning_msg"> - Client frame rate between [CLIENT_FRAME_RATE_CRITICAL] and [CLIENT_FRAME_RATE_WARNING] + 客戶端幀率介於 [CLIENT_FRAME_RATE_CRITICAL] 和 [CLIENT_FRAME_RATE_WARNING] 之間 </floater.string> <floater.string name="client_frame_time_normal_msg"> 正常 </floater.string> <floater.string name="client_draw_distance_cause_msg"> - Possible cause: Draw distance set too high + 可能原因:可視距離設得太遠 </floater.string> <floater.string name="client_texture_loading_cause_msg"> - Possible cause: Images loading + 可能原因:正在載入圖像 </floater.string> <floater.string name="client_texture_memory_cause_msg"> - Possible cause: Too many images in memory + 可能原因:記憶體裡圖像太多 </floater.string> <floater.string name="client_complex_objects_cause_msg"> - Possible cause: Too many complex objects in scene + 可能原因:場景內複雜物件太多 </floater.string> <floater.string name="network_text_msg"> 網路 @@ -55,10 +55,10 @@ 5 </floater.string> <floater.string name="network_packet_loss_critical_msg"> - Connection is dropping over [NETWORK_PACKET_LOSS_CRITICAL]% of packets + 這次連通丟失了至少 [NETWORK_PACKET_LOSS_CRITICAL]% 的封包 </floater.string> <floater.string name="network_packet_loss_warning_msg"> - Connection is dropping [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% of packets + 這次連通丟失了 [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% 的封包 </floater.string> <floater.string name="network_performance_normal_msg"> 正常 @@ -70,16 +70,16 @@ 300 </floater.string> <floater.string name="network_ping_critical_msg"> - Connection ping time is over [NETWORK_PING_CRITICAL] ms + 探測連通回應時間超過 [NETWORK_PING_CRITICAL] 毫秒 </floater.string> <floater.string name="network_ping_warning_msg"> - Connection ping time is [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + 探測連通回應時間為 [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] 毫秒 </floater.string> <floater.string name="network_packet_loss_cause_msg"> - Possible bad connection or 'Bandwidth' pref too high. + 可能連通不良,或所設的偏好連通頻寬過高。 </floater.string> <floater.string name="network_ping_cause_msg"> - Possible bad connection or file-sharing app. + 可能連通不良,或使用檔案分享應用程式。 </floater.string> <floater.string name="server_text_msg"> 伺服器 diff --git a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml index f4a7ba5cca..e971b166f7 100755 --- a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml @@ -9,7 +9,24 @@ <floater.string name="Title"> 腳本:[NAME] </floater.string> + <floater.string name="experience_enabled"> + 清除勾選即可移除目前的體驗 + </floater.string> + <floater.string name="no_experiences"> + 你未經授權使用任何體驗 + </floater.string> + <floater.string name="add_experiences"> + 選取新增一個體驗 + </floater.string> + <floater.string name="show_experience_profile"> + 點按即可簡覽該體驗 + </floater.string> + <floater.string name="loading"> + 載入中… + </floater.string> <button label="重設" label_selected="重設" name="Reset"/> <check_box initial_value="true" label="執行中" name="running"/> <check_box initial_value="true" label="Mono" name="mono"/> + <check_box label="使用體驗:" name="enable_xp"/> + <button label=">" name="view_profile"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_openobject.xml b/indra/newview/skins/default/xui/zh/floater_openobject.xml index ce6869487a..fa8cb0bdf3 100755 --- a/indra/newview/skins/default/xui/zh/floater_openobject.xml +++ b/indra/newview/skins/default/xui/zh/floater_openobject.xml @@ -4,5 +4,5 @@ [DESC]: </text> <button label="覆製到收納區" label_selected="覆製到收納區" name="copy_to_inventory_button"/> - <button label="覆製且穿上" label_selected="覆製且穿上" name="copy_and_wear_button"/> + <button label="複製並新增到裝扮" label_selected="複製並新增到裝扮" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml index d4b5a2f990..347b40e675 100755 --- a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml @@ -67,7 +67,7 @@ <combo_box.item label="土地 > 侵佔 > 物件或材質" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="土地 > 侵佔 > 粒子" name="Land__Encroachment__Particles"/> <combo_box.item label="土地 > 侵佔 > 樹種 / 植物" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="下注或賭博" name="Wagering_gambling"/> + <combo_box.item label="違反遊戲規則" name="Wagering_gambling"/> <combo_box.item label="其他" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/zh/floater_snapshot.xml b/indra/newview/skins/default/xui/zh/floater_snapshot.xml index a65227bbd4..4090248083 100755 --- a/indra/newview/skins/default/xui/zh/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/zh/floater_snapshot.xml @@ -39,17 +39,8 @@ <string name="local_failed_str"> 無法儲入電腦。 </string> - <button name="advanced_options_btn" tool_tip="進階選項"/> - <text name="image_res_text"> - [WIDTH] x [HEIGHT] 像素 - </text> - <text name="file_size_label"> - [SIZE] KB - </text> + <button label="刷新" name="new_snapshot_btn"/> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - 進階選項 - </text> <text name="layer_type_label"> 擷取快照: </text> @@ -68,4 +59,10 @@ <combo_box.item label="不用濾鏡" name="NoFilter"/> </combo_box> </panel> + <text name="image_res_text"> + [WIDTH] 像素(寬) x [HEIGHT] 像素(高) + </text> + <text name="file_size_label"> + [SIZE] KB + </text> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_top_objects.xml b/indra/newview/skins/default/xui/zh/floater_top_objects.xml index 6f50be0855..58530f00c1 100755 --- a/indra/newview/skins/default/xui/zh/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/zh/floater_top_objects.xml @@ -21,6 +21,12 @@ <floater.string name="none_descriptor"> 查無結果。 </floater.string> + <floater.string name="URLs"> + URL + </floater.string> + <floater.string name="memory"> + 記憶體 (KB) + </floater.string> <text name="title_text"> 載入中... </text> @@ -30,7 +36,7 @@ <scroll_list.columns label="所有人" name="owner"/> <scroll_list.columns label="位置" name="location"/> <scroll_list.columns label="地段" name="parcel"/> - <scroll_list.columns label="時間" name="time"/> + <scroll_list.columns label="日期" name="time"/> <scroll_list.columns label="URL" name="URLs"/> <scroll_list.columns label="記憶體 (KB)" name="memory"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/zh/floater_twitter.xml b/indra/newview/skins/default/xui/zh/floater_twitter.xml index 0df68ba9be..ac49b2a967 100644 --- a/indra/newview/skins/default/xui/zh/floater_twitter.xml +++ b/indra/newview/skins/default/xui/zh/floater_twitter.xml @@ -1,17 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_twitter" title="推特"> - <panel name="background"> - <tab_container name="tabs"> - <panel label="編撰" name="panel_twitter_photo"/> - <panel label="帳號" name="panel_twitter_account"/> - </tab_container> - <panel name="connection_status_panel"> - <text name="connection_error_text"> - 錯誤 - </text> - <text name="connection_loading_text"> - 載入中… - </text> - </panel> - </panel> + <tab_container name="tabs"> + <panel label="編撰" name="panel_twitter_photo"/> + <panel label="帳號" name="panel_twitter_account"/> + </tab_container> + <text name="connection_error_text"> + 錯誤 + </text> + <text name="connection_loading_text"> + 載入中… + </text> </floater> diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml index 8ad0e7324f..a4461f8c6a 100755 --- a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml @@ -5,7 +5,7 @@ <menu_item_check label="依最近排序" name="sort_by_recent"/> <menu_item_check label="總是由名稱排序資料夾" name="sort_folders_by_name"/> <menu_item_check label="系統資料夾排序到最上方" name="sort_system_folders_to_top"/> - <menu_item_call label="顯示過濾器" name="show_filters"/> + <menu_item_call label="顯示過濾器…" name="show_filters"/> <menu_item_call label="重設過濾器" name="reset_filters"/> <menu_item_call label="關閉全部資料夾" name="close_folders"/> <menu_item_call label="清空 Lost and Found" name="empty_lostnfound"/> diff --git a/indra/newview/skins/default/xui/zh/menu_url_experience.xml b/indra/newview/skins/default/xui/zh/menu_url_experience.xml new file mode 100644 index 0000000000..97ff33b921 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/menu_url_experience.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index 46d46e901c..79b149a716 100755 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -8,6 +8,7 @@ <menu_item_call label="新收納區視窗" name="NewInventoryWindow"/> <menu_item_call label="地點…" name="Places"/> <menu_item_call label="精選地點…" name="Picks"/> + <menu_item_call label="體驗…" name="Experiences"/> <menu_item_call label="攝影機控制…" name="Camera Controls"/> <menu label="動作" name="Movement"> <menu_item_call label="坐下" name="Sit Down Here"/> @@ -46,7 +47,7 @@ <menu_item_check label="朋友" name="My Friends"/> <menu_item_check label="群組" name="My Groups"/> <menu_item_check label="附近的人群" name="Active Speakers"/> - <menu_item_call label="封鎖清單" name="Block List"/> + <menu_item_check label="封鎖清單" name="Block List"/> <menu_item_check label="請勿打擾" name="Do Not Disturb"/> </menu> <menu label="世界" name="World"> diff --git a/indra/newview/skins/default/xui/zh/mime_types.xml b/indra/newview/skins/default/xui/zh/mime_types.xml index 70af2d2f19..8967475abb 100755 --- a/indra/newview/skins/default/xui/zh/mime_types.xml +++ b/indra/newview/skins/default/xui/zh/mime_types.xml @@ -44,6 +44,14 @@ 播放這個位置的音頻 </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + 無內容 + </label> + <tooltip name="none_tooltip"> + 此處無媒體 + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> 即時串流 diff --git a/indra/newview/skins/default/xui/zh/mime_types_linux.xml b/indra/newview/skins/default/xui/zh/mime_types_linux.xml index 70af2d2f19..8967475abb 100755 --- a/indra/newview/skins/default/xui/zh/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/zh/mime_types_linux.xml @@ -44,6 +44,14 @@ 播放這個位置的音頻 </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + 無內容 + </label> + <tooltip name="none_tooltip"> + 此處無媒體 + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> 即時串流 diff --git a/indra/newview/skins/default/xui/zh/mime_types_mac.xml b/indra/newview/skins/default/xui/zh/mime_types_mac.xml index 70af2d2f19..8967475abb 100755 --- a/indra/newview/skins/default/xui/zh/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/zh/mime_types_mac.xml @@ -44,6 +44,14 @@ 播放這個位置的音頻 </playtip> </widgetset> + <widgetset name="none"> + <label name="none_label"> + 無內容 + </label> + <tooltip name="none_tooltip"> + 此處無媒體 + </tooltip> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> 即時串流 diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index bd05725e2b..5b520dd745 100755 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -73,6 +73,10 @@ [MESSAGE] <usetemplate name="okcancelbuttons" notext="取消" yestext="是"/> </notification> + <notification name="GenericAlertOK"> + [MESSAGE] + <usetemplate name="okbutton" yestext="確定"/> + </notification> <notification name="BadInstallation"> [APP_NAME] 更新時出錯。 請 [http://get.secondlife.com 下載] 最新版本的 Viewer。 <usetemplate name="okbutton" yestext="確定"/> @@ -575,6 +579,9 @@ <notification name="RegionNoTerraforming"> 這個 [REGION] 地區並不允許變更地形。 </notification> + <notification name="ParcelNoTerraforming"> + 你無權針對地段 [PARCEL] 進行土地變形。 + </notification> <notification name="CannotCopyWarning"> 你沒有權限複製以下項目: [ITEMS] @@ -1816,6 +1823,30 @@ SHA1 指紋:[MD5_DIGEST] 僅針對這個領地或針對 [ALL_ESTATES] 移除領地管理人? <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> </notification> + <notification label="選擇領地" name="EstateAllowedExperienceAdd"> + 僅針對這個領地或針對 [ALL_ESTATES] 將它新增到允許清單? + <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> + </notification> + <notification label="選擇領地" name="EstateAllowedExperienceRemove"> + 僅針對這個領地或針對 [ALL_ESTATES] 將它從允許清單中移除? + <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> + </notification> + <notification label="選擇領地" name="EstateBlockedExperienceAdd"> + 僅針對這個領地或針對 [ALL_ESTATES] 將它新增到封鎖清單? + <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> + </notification> + <notification label="選擇領地" name="EstateBlockedExperienceRemove"> + 僅針對這個領地或針對 [ALL_ESTATES] 將它從封鎖清單中移除? + <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> + </notification> + <notification label="選擇領地" name="EstateTrustedExperienceAdd"> + 僅針對這個領地或針對 [ALL_ESTATES] 將它新增到金鑰清單? + <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> + </notification> + <notification label="選擇領地" name="EstateTrustedExperienceRemove"> + 僅針對這個領地或針對 [ALL_ESTATES] 將它從金鑰清單中移除? + <usetemplate canceltext="取消" name="yesnocancelbuttons" notext="全部領地" yestext="這個領地"/> + </notification> <notification label="確認踢出" name="EstateKickUser"> 將 [EVIL_USER] 由這領地踢出? <usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/> @@ -1890,6 +1921,10 @@ SHA1 指紋:[MD5_DIGEST] 發生技術問題,你的偏好設定和伺服器上的不一致。 <usetemplate name="okbutton" yestext="確定"/> </notification> + <notification name="RegionTPSpecialUsageBlocked"> + 無法進入地區。 '[REGION_NAME]' 是個「技巧性博奕」(Skill Gaming)地區,你必須符合一定條件才可進入。 欲知詳情,請參閱 [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life 技巧性博奕常見問題集]。 + <usetemplate name="okbutton" yestext="確定"/> + </notification> <notification name="PreferredMaturityChanged"> 你將不再收到通知,告知你即將進入一個 [RATING] 內容分級的地區。 你可以到選單列底下的「我自己 > 偏好設定 > 一般設定」變更你的內容偏好。 <usetemplate name="okbutton" yestext="確定"/> @@ -2196,6 +2231,9 @@ SHA1 指紋:[MD5_DIGEST] <button ignore="絕不取代" name="No" text="取消"/> </form> </notification> + <notification name="TooManyWearables"> + 你不能對含超過 [AMOUNT] 個物項的資料夾作穿戴動作。 欲變更此上限,可到「進階」>「顯示除錯設定」>「WearFolderLimit」。 + </notification> <notification label="「請勿打擾」模式警告" name="DoNotDisturbModePay"> 你已開啟「請勿打擾」。 你將不會收到任何付款購買的物項。 @@ -2804,7 +2842,7 @@ SHA1 指紋:[MD5_DIGEST] [MESSAGE] -來源物件:<nolink>[OBJECTNAME]</nolink>(所有人是 [NAME])? +來源物件:<nolink>[OBJECTNAME]</nolink>(所有人:[NAME]) <form name="form"> <button name="Gotopage" text="前往頁面"/> <button name="Cancel" text="取消"/> @@ -2830,6 +2868,72 @@ SHA1 指紋:[MD5_DIGEST] <button name="Mute" text="封鎖"/> </form> </notification> + <notification name="ExperienceAcquireFailed"> + 無法取得新的體驗: + [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="確定"/> + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + 已取消對體驗群組的變更,因為擁有人不是所選群組的成員。 + </notification> + <notification name="UneditableExperienceProfileMessage"> + 已在更新體驗簡覽時忽略不可編輯的欄位 '[field]'。 + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + 已忽略對欄位 '[field]' 的變更,只有體驗擁有人可作此變更。 + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + 你不能將體驗的內容分級設定為比擁有人所設更高的等級。 + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + 以下項目導致無法更新體驗的名稱或描述:[extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + 你已移除金鑰體驗 secondlife:///app/experience/[public_id]/profile,因此被瞬間傳送離開 [region_name] 地區,因為你已無權續留。 + <form name="form"> + <ignore name="ignore" text="移除體驗後,已被踢出地區"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + 你已參與金鑰體驗 secondlife:///app/experience/[public_id]/profile,因此獲准進入 [region_name] 地區,若移除此體驗,你可能會被踢出地區。 + <form name="form"> + <ignore name="ignore" text="已透過體驗獲准進入地區"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + 你並沒有權限進入此目的地。 若接受以下一項體驗,可獲准進入該地區: + +[EXPERIENCE_LIST] + +可能有其他金鑰體驗供選擇。 + </notification> + <notification name="ExperienceEvent"> + 一個物件已得到 secondlife:///app/experience/[public_id]/profile 體驗允許,可以[EventType]。 + 所有人:secondlife:///app/agent/[OwnerID]/inspect + 物件名稱:[ObjectName] + 地段名稱:[ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + 一個附件已得到 secondlife:///app/experience/[public_id]/profile 體驗允許,可以[EventType]。 + 所有人:secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + '<nolink>[OBJECTNAME]</nolink>',一個由 '[NAME]' 擁有的物件,邀請你參與以下的 [GRID_WIDE] 體驗: + +[EXPERIENCE] + +允准之後,除非在「體驗簡覽」撤銷該權限,否則你將不再看到此訊息。 + +本體驗的相關腳本,將可在啟用本體驗的地區進行以下動作: + +[QUESTIONS] 你是否同意? + <form name="form"> + <button name="BlockExperience" text="封鎖體驗"/> + <button name="Mute" text="封鎖物件"/> + <button name="Yes" text="是"/> + <button name="No" text="否"/> + </form> + </notification> <notification name="ScriptQuestionCaution"> 警告:物件 '<nolink>[OBJECTNAME]</nolink>' 要求全權存取你的林登幣帳戶。 你如果允許存取帳戶,它將可在任何時候從你帳戶取走資金,或完全加以清空,或定期取走部分資金,且不會發出警告。 @@ -3148,6 +3252,10 @@ SHA1 指紋:[MD5_DIGEST] <notification name="AvatarRezSelfBakedTextureUpdateNotification"> (存續 [EXISTENCE] 秒鐘) 你在 [TIME] 秒鐘後在本地為 '[BODYREGION]' 更新了一個 [RESOLUTION] 的定貌材質。 + </notification> + <notification name="CannotUploadTexture"> + 無法上傳質料。 +[REASON] </notification> <notification name="LivePreviewUnavailable"> 我們無法顯示這個材質的預覽,因為它設為「禁止複製」且 / 或「禁止轉移」。 diff --git a/indra/newview/skins/default/xui/zh/panel_experience_info.xml b/indra/newview/skins/default/xui/zh/panel_experience_info.xml new file mode 100644 index 0000000000..04d22c46ea --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_experience_info.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_experience_info"> + <text name="title" value="體驗簡覽"/> + <scroll_container name="xp_scroll"> + <panel name="scrolling_panel"> + <layout_stack> + <layout_panel> + <text name="experience_title" value="Kyle's Superhero RPG"/> + </layout_panel> + <layout_panel name="location panel"> + <text name="Location"> + 位置: + </text> + <text name="LocationTextText"> + 某某地點 + </text> + <button label="瞬間傳送" name="teleport_btn"/> + <button label="地圖" name="map_btn"/> + </layout_panel> + <layout_panel name="marketplace panel"> + <text name="Location"> + 第二人生購物市集商店: + </text> + <text name="LocationTextText"> + 某某地點 + </text> + </layout_panel> + <layout_panel> + <text name="ContentRating"> + 分級: + </text> + <text name="ContentRatingText"> + 完全成人 + </text> + <text name="Owner"> + 所有人: + </text> + <text name="OwnerText"> + Kyle + </text> + <button label="編輯" name="edit_btn"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_experience_list_editor.xml b/indra/newview/skins/default/xui/zh/panel_experience_list_editor.xml new file mode 100644 index 0000000000..469f942578 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_experience_list_editor.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="experince_list_editor"> + <panel.string name="loading"> + 載入中... + </panel.string> + <panel.string name="panel_allowed"> + 允許的體驗: + </panel.string> + <panel.string name="panel_blocked"> + 封鎖的體驗: + </panel.string> + <panel.string name="panel_trusted"> + 金鑰體驗: + </panel.string> + <panel.string name="no_results"> + (空白) + </panel.string> + <text name="text_name"> + 體驗清單 + </text> + <scroll_list name="experience_list"> + <columns label="名稱" name="experience_name"/> + </scroll_list> + <button label="添加..." name="btn_add"/> + <button label="移除" name="btn_remove"/> + <button label="檔案..." name="btn_profile"/> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_experience_list_item.xml b/indra/newview/skins/default/xui/zh/panel_experience_list_item.xml new file mode 100644 index 0000000000..3ec619b8de --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_experience_list_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <text name="experience_name"> + 測試用名稱 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_experience_log.xml b/indra/newview/skins/default/xui/zh/panel_experience_log.xml new file mode 100644 index 0000000000..791dcd0a2e --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_experience_log.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="EVENTS"> + <string name="no_events" value="無活動。"/> + <string name="loading" value="載入中..."/> + <layout_stack> + <layout_panel> + <scroll_list name="experience_log_list"> + <columns label="時間" name="time"/> + <columns label="活動" name="event"/> + <columns label="體驗" name="experience_name"/> + <columns label="物件" name="object_name"/> + </scroll_list> + <button label="通知" name="btn_notify"/> + <button label="簡覽" name="btn_profile_xp"/> + <button label="回報" name="btn_report_xp"/> + </layout_panel> + <layout_panel name="button_panel"> + <check_box label="對所有活動作通知 天數" name="notify_all"/> + <button label="清除" name="btn_clear"/> + <button label="<" name="btn_prev"/> + <button label=">" name="btn_next"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_experience_search.xml b/indra/newview/skins/default/xui/zh/panel_experience_search.xml new file mode 100644 index 0000000000..9b0145748e --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_experience_search.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="SEARCH"> + <string name="not_found"> + 查無「[TEXT]」 + </string> + <string name="no_results"> + 沒有結果 + </string> + <string name="searching"> + 搜尋中... + </string> + <string name="loading"> + 載入中… + </string> + <string name="maturity_icon_general"> + "Parcel_PG_Light" + </string> + <string name="maturity_icon_moderate"> + "Parcel_M_Light" + </string> + <string name="maturity_icon_adult"> + "Parcel_R_Light" + </string> + <panel name="search_panel"> + <button label="前往" name="find"/> + <icons_combo_box label="適度成人" name="maturity"> + <icons_combo_box.item label="完全成人" name="Adult" value="42"/> + <icons_combo_box.item label="適度成人" name="Mature" value="21"/> + <icons_combo_box.item label="一般" name="PG" value="13"/> + </icons_combo_box> + <scroll_list name="search_results"> + <columns label="名稱" name="experience_name"/> + <columns label="所有人" name="owner"/> + </scroll_list> + <button label="確定" label_selected="確定" name="ok_btn"/> + <button label="取消" name="cancel_btn"/> + <button label="察看簡覽" name="profile_btn"/> + <button label="<" name="left_btn"/> + <button label=">" name="right_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_experiences.xml b/indra/newview/skins/default/xui/zh/panel_experiences.xml new file mode 100644 index 0000000000..bb1df97058 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_experiences.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Experiences"> + <string name="loading_experiences" value="體驗載入中..."/> + <string name="no_experiences" value="未設體驗。"/> + <string name="acquire" value="取得體驗"/> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml b/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml index d43fcf4665..85d2ac36f3 100644 --- a/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml @@ -1,26 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="圖像解析度"> - <combo_box.item label="目前視窗" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="1200x630" name="1200x630"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> - <combo_box.item label="不用濾鏡" name="NoFilter"/> - </combo_box> - <button label="重新整理" name="new_snapshot_btn" tool_tip="點按即可刷新"/> - <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> - <text name="caption_label"> - 說明(可留空): - </text> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="發佈" name="post_photo_btn"/> - <button label="取消" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <combo_box name="resolution_combobox" tool_tip="圖像解析度"> + <combo_box.item label="目前視窗" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> + <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> + <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> + <text name="caption_label"> + 說明(可留空): + </text> + <button label="發佈" name="post_photo_btn"/> + <button label="取消" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_place.xml b/indra/newview/skins/default/xui/zh/panel_facebook_place.xml index 27bd789af1..56d4d687ef 100644 --- a/indra/newview/skins/default/xui/zh/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/zh/panel_facebook_place.xml @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_place"> - <layout_stack name="stack_place"> - <layout_panel name="place_detail_panel"> - <text name="place_caption_label"> - 描述一下你所在的地方: - </text> - </layout_panel> - <layout_panel name="place_map_panel"> - <check_box initial_value="false" label="" name="add_place_view_cb"/> - </layout_panel> - <layout_panel name="place_button_panel"> - <button label="發佈" name="post_place_btn"/> - <button label="取消" name="cancel_place_btn"/> - </layout_panel> - </layout_stack> + <text name="place_caption_label"> + 描述一下你所在的地方: + </text> + <check_box initial_value="false" label="包括地點的俯瞰圖" name="add_place_view_cb"/> + <button label="發佈" name="post_place_btn"/> + <button label="取消" name="cancel_place_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_status.xml b/indra/newview/skins/default/xui/zh/panel_facebook_status.xml index b947b49a4f..3a7cbd07b0 100644 --- a/indra/newview/skins/default/xui/zh/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/zh/panel_facebook_status.xml @@ -1,14 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_facebook_status"> - <layout_stack name="stack_status"> - <layout_panel name="status_detail_panel"> - <text name="status_caption_label"> - 你在想些什麼? - </text> - </layout_panel> - <layout_panel name="status_button_panel"> - <button label="發佈" name="post_status_btn"/> - <button label="取消" name="cancel_status_btn"/> - </layout_panel> - </layout_stack> + <string name="facebook_connected" value="已成功連通臉書,身分為:"/> + <string name="facebook_disconnected" value="未連通臉書"/> + <text name="account_caption_label"> + 未連通臉書。 + </text> + <panel name="panel_buttons"> + <button label="連通…" name="connect_btn"/> + <button label="中斷" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 如何發佈到臉書] + </text> + </panel> + <text name="status_caption_label"> + 你在想些什麼? + </text> + <button label="發佈" name="post_status_btn"/> + <button label="取消" name="cancel_status_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml index 75738abebc..ece239a29f 100644 --- a/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml @@ -1,41 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_flickr_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="圖像解析度"> - <combo_box.item label="目前視窗" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> - <combo_box.item label="不用濾鏡" name="NoFilter"/> - </combo_box> - <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> - <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> - <text name="title_label"> - 標題: - </text> - <text name="description_label"> - 描述: - </text> - <check_box initial_value="true" label="在描述結尾加上第二人生的地點" name="add_location_cb"/> - <text name="tags_label"> - 標籤: - </text> - <text name="tags_help_label"> - 不同標籤之間以半形空格分隔 + <combo_box name="resolution_combobox" tool_tip="圖像解析度"> + <combo_box.item label="目前視窗" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> + <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> + <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> + <text name="title_label"> + 標題: + </text> + <text name="description_label"> + 描述: + </text> + <check_box initial_value="true" label="在描述結尾加上第二人生的地點" name="add_location_cb"/> + <text name="tags_label"> + 標籤: + </text> + <text name="tags_help_label"> + 不同標籤之間以半形空格分隔 標籤若含空格,用 "" 半形符號括住 - </text> - <combo_box name="rating_combobox" tool_tip="Flickr 內容分級"> - <combo_box.item label="安全級 Flickr 內容" name="SafeRating"/> - <combo_box.item label="適中級 Flickr 內容" name="ModerateRating"/> - <combo_box.item label="限制級 Flickr 內容" name="RestrictedRating"/> - </combo_box> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="上傳" name="post_photo_btn"/> - <button label="取消" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + </text> + <combo_box name="rating_combobox" tool_tip="Flickr 內容分級"> + <combo_box.item label="安全級 Flickr 內容" name="SafeRating"/> + <combo_box.item label="適中級 Flickr 內容" name="ModerateRating"/> + <combo_box.item label="限制級 Flickr 內容" name="RestrictedRating"/> + </combo_box> + <button label="上傳" name="post_photo_btn"/> + <button label="取消" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml index 43e3507961..1fb0b3f5bb 100755 --- a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml @@ -23,6 +23,7 @@ <accordion_tab name="group_roles_tab" title="角色與成員"/> <accordion_tab name="group_notices_tab" title="通知"/> <accordion_tab name="group_land_tab" title="土地 / 資產"/> + <accordion_tab name="group_experiences_tab" title="體驗"/> </accordion> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/zh/panel_postcard_settings.xml b/indra/newview/skins/default/xui/zh/panel_postcard_settings.xml index 900ab3a54e..8ab122ccc3 100755 --- a/indra/newview/skins/default/xui/zh/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/zh/panel_postcard_settings.xml @@ -7,17 +7,7 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="自訂" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="寬" name="postcard_snapshot_width"/> - <spinner label="高度" name="postcard_snapshot_height"/> - <check_box label="鎖住比例" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="圖像品質" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="寬 x 高" name="postcard_snapshot_width"/> + <check_box label="鎖住比例" name="postcard_keep_aspect_check"/> + <slider label="清晰度:" name="image_quality_slider"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml index ab4d9a881d..fcbed76d49 100755 --- a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml @@ -14,9 +14,9 @@ <text name="Web:"> 網頁: </text> - <radio_group name="use_external_browser"> - <radio_item label="使用我的網頁瀏覽器(例如 IE, Firefox, Safari)" name="external" tool_tip="使用系統預設的瀏覽器瀏覽幫助,開啟網頁。全螢幕模式下不建議這麼做。" value="true"/> - <radio_item label="使用內建網頁瀏覽器" name="internal" tool_tip="使用內建的瀏覽器瀏覽幫助,開啟網頁。該瀏覽器將透過 [APP_NAME] 開啟新視窗。" value=""/> + <radio_group name="preferred_browser_behavior"> + <radio_item label="所有連結都用我的網頁瀏覽器(例如 Chrome、Firefox、IE)開啟" name="internal" tool_tip="使用系統預設的瀏覽器瀏覽幫助,開啟網頁。全螢幕模式下不建議這麼做。" value="0"/> + <radio_item label="僅在開啟第二人生連結時使用內建瀏覽器" name="external" tool_tip="使用系統預設的瀏覽器瀏覽幫助,開啟網頁。僅在開啟 LindenLab/SecondLife 的連結時才會使用內建瀏覽器。" value="1"/> </radio_group> <check_box initial_value="true" label="啟用外掛" name="browser_plugins_enabled"/> <check_box initial_value="true" label="接受 cookies" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/zh/panel_region_experiences.xml b/indra/newview/skins/default/xui/zh/panel_region_experiences.xml new file mode 100644 index 0000000000..7b1b697fd6 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_region_experiences.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="體驗" name="Experiences"> + <panel.string name="trusted_estate_text"> + 任何體驗都可以成為金鑰體驗。 + +金鑰體驗可在此領地執行。 + +此外,即使這個領地平常不開放進入,參與任何鑰匙體驗的居民,只要維持處在「金鑰體驗」狀態,仍可進入領地停留。 + </panel.string> + <panel.string name="allowed_estate_text"> + 只允准「土地範圍」的體驗。 + +獲准的體驗可在此領地執行。 + </panel.string> + <panel.string name="blocked_estate_text"> + 只封鎖「網格範圍」的體驗。 + +遭封鎖的體驗不得在此領地執行。 + </panel.string> + <panel.string name="estate_caption"> + 變更此夜籤中的設定會影響這個領地內的全部地區設定。 + </panel.string> + <panel.string name="allowed_parcel_text"> + 只允准「土地範圍」的體驗。 + +獲准的體驗若未被領地封鎖,就可在此地段執行。 + </panel.string> + <panel.string name="blocked_parcel_text"> + 任何居民的體驗都可以加以封鎖。 + +遭封鎖的體驗不得在此地段執行。 + </panel.string> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_script_experience.xml b/indra/newview/skins/default/xui/zh/panel_script_experience.xml new file mode 100644 index 0000000000..40fd0a90de --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_script_experience.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="script_experience" title="體驗"> + <button label="體驗" name="Expand Experience"/> + <check_box label="使用體驗" name="enable_xp"/> + <layout_stack name="xp_details"> + <layout_panel> + <combo_box label="選擇體驗…" name="Experiences..."/> + </layout_panel> + </layout_stack> + <text name="No Experiences"> + 你尚未對任何體驗作貢獻。 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml index 20fb9b494a..9c45c54a5e 100755 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - 儲存到我的收納區 + 收納區 </text> <text name="hint_lbl"> 將圖像儲存到收納區的費用為 L$[UPLOAD_COST]。 若要將圖像存為材質,請選擇一個正方格式。 @@ -13,8 +13,8 @@ <combo_box.item label="大(512x512)" name="Large(512x512)"/> <combo_box.item label="自訂" name="Custom"/> </combo_box> - <spinner label="寬" name="inventory_snapshot_width"/> - <spinner label="高度" name="inventory_snapshot_height"/> + <spinner label="寬 x 高" name="inventory_snapshot_width"/> + <spinner label="" name="inventory_snapshot_height"/> <check_box label="鎖住比例" name="inventory_keep_aspect_check"/> <button label="取消" name="cancel_btn"/> <button label="儲存" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_local.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_local.xml index a929c9a3fb..691ab8bac7 100755 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - 儲存到電腦上 + 硬碟 </text> <combo_box label="解析度" name="local_size_combo"> <combo_box.item label="目前視窗" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="自訂" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="寬" name="local_snapshot_width"/> - <spinner label="高度" name="local_snapshot_height"/> - <check_box label="鎖住比例" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="格式" name="local_format_combo"> - <combo_box.item label="PNG(零失真)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP(零失真)" name="BMP"/> - </combo_box> - <slider label="圖像品質" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="寬 x 高" name="local_snapshot_width"/> + <check_box label="鎖住比例" name="local_keep_aspect_check"/> + <text name="local_format_label"> + 格式 + </text> + <combo_box label="格式" name="local_format_combo"> + <combo_box.item label="PNG(零失真)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP(零失真)" name="BMP"/> + </combo_box> + <slider label="清晰度:" name="image_quality_slider"/> <button label="取消" name="cancel_btn"/> <flyout_button label="儲存" name="save_btn" tool_tip="儲存圖像到檔案"> <flyout_button.item label="儲存" name="save_item"/> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml index 43d7280373..a5a1cbfb51 100755 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml @@ -1,16 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="送至我的檔案訊息發佈" name="save_to_profile_btn"/> - <button label="電郵" name="save_to_email_btn"/> - <button label="儲存到我的收納區(L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="儲存到電腦上" name="save_to_computer_btn"/> - <text name="send_to_facebook_textbox"> - [secondlife:/// 臉書(Facebook)] - </text> - <text name="send_to_twitter_textbox"> - [secondlife:/// 推特(Twitter)] - </text> - <text name="send_to_flickr_textbox"> - [secondlife:/// Flickr] - </text> + <button label="儲存到硬碟" name="save_to_computer_btn"/> + <button label="儲存到收納區(L$[AMOUNT])" name="save_to_inventory_btn"/> + <button label="上傳到簡覽" name="save_to_profile_btn"/> + <button label="上傳到臉書" name="send_to_facebook_btn"/> + <button label="上傳到推特" name="send_to_twitter_btn"/> + <button label="上傳到 Flickr" name="send_to_flickr_btn"/> + <button label="用電郵傳送" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_postcard.xml index 853a856104..77f8b335db 100755 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_postcard.xml @@ -12,6 +12,10 @@ <text name="title"> 電郵 </text> - <button label="訊息" name="message_btn"/> - <button label="設定" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel label="訊息" name="panel_postcard_message"/> + <panel label="設定" name="panel_postcard_settings"/> + </tab_container> + <button label="取消" name="cancel_btn"/> + <button label="送出" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_profile.xml index 6f64a4e83c..1f202572f5 100755 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - 送至我的檔案訊息發佈 + 簡覽 </text> <combo_box label="解析度" name="profile_size_combo"> <combo_box.item label="目前視窗" name="CurrentWindow"/> @@ -10,19 +10,12 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="自訂" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="寬" name="profile_snapshot_width"/> - <spinner label="高度" name="profile_snapshot_height"/> - <check_box label="鎖住比例" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - 內容敘述: - </text> - <check_box initial_value="true" label="加入所在位置" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="寬 x 高" name="profile_snapshot_width"/> + <check_box label="鎖住比例" name="profile_keep_aspect_check"/> + <text name="caption_label"> + 內容敘述: + </text> + <check_box initial_value="true" label="加入所在位置" name="add_location_cb"/> <button label="取消" name="cancel_btn"/> <button label="發佈" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml b/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml index d015f4aa95..19eb23eac7 100644 --- a/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml @@ -1,32 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_twitter_photo"> - <layout_stack name="stack_photo"> - <layout_panel name="text_panel"> - <text name="status_label"> - 說一說你正在做什麼 - </text> - <text name="status_counter_label"> - 140 - </text> - <check_box initial_value="true" label="加入所在位置" name="add_location_cb"/> - <check_box initial_value="true" label="附上照片" name="add_photo_cb"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <combo_box name="resolution_combobox" tool_tip="圖像解析度"> - <combo_box.item label="目前視窗" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - </combo_box> - <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> - <combo_box.item label="不用濾鏡" name="NoFilter"/> - </combo_box> - <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> - <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> - </layout_panel> - <layout_panel name="photo_button_panel"> - <button label="發到推特" name="post_photo_btn"/> - <button label="取消" name="cancel_photo_btn"/> - </layout_panel> - </layout_stack> + <text name="status_label"> + 說一說你正在做什麼 + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="加入所在位置" name="add_location_cb"/> + <check_box initial_value="true" label="附上照片" name="add_photo_cb"/> + <combo_box name="resolution_combobox" tool_tip="圖像解析度"> + <combo_box.item label="目前視窗" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> + <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> + <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> + <button label="發到推特" name="post_photo_btn"/> + <button label="取消" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml index 96f931f73f..0a3ef8c710 100755 --- a/indra/newview/skins/default/xui/zh/role_actions.xml +++ b/indra/newview/skins/default/xui/zh/role_actions.xml @@ -71,4 +71,8 @@ <action description="加入群組語音聊天" longdescription="身負具這能力的角色的成員,可以加入群組的語音聊天會話。 注意:欲加入語音聊天會話,需有「加入群組聊天」能力。" name="join voice chat" value="27"/> <action description="適度成人內容的群組聊天" longdescription="身負具這能力的角色的成員,可以控制誰可加入群組語音和文字聊天會話。" name="moderate group chat" value="37"/> </action_set> + <action_set description="這些能力包括修改本群組所擁有的體驗的權限" name="experience_tools_experience"> + <action description="體驗管理" longdescription="擔任有此能力的角色的成員,可以編輯一個體驗的元資料。" name="experience admin" value="49"/> + <action description="體驗貢獻者" longdescription="擔任有此能力的角色的成員,可以為一個體驗貢獻腳本。" name="experience contributor" value="50"/> + </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml index 1b093e0ecd..dcb709d2e3 100755 --- a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="item properties" title="物品檔案"> + <panel.string name="loading_experience"> + (載入中) + </panel.string> <panel.string name="unknown"> (未知) </panel.string> @@ -43,6 +46,9 @@ <text name="LabelAcquiredTitle"> 取得於: </text> + <text name="LabelItemExperienceTitle"> + 體驗: + </text> <panel name="perms_inv"> <text name="perm_modify"> 你可以: diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index ad2c331ee4..e8edf1270b 100755 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -444,6 +444,9 @@ http://secondlife.com/viewer-access-faq <string name="TooltipMustSingleDrop"> 只有一個物品可以被拖曳到此處 </string> + <string name="TooltipTooManyWearables"> + 你不能對含超過 [AMOUNT] 個物項的資料夾作穿戴動作。 欲變更此上限,可到「進階」>「顯示除錯設定」>「WearFolderLimit」。 + </string> <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipOutboxDragToWorld"> 商家發件匣內的物項無法產生到虛擬世界 @@ -1052,9 +1055,7 @@ http://secondlife.com/viewer-access-faq <string name="AgentNameSubst"> (你) </string> - <string name="JoinAnExperience"> - 加入體驗 - </string> + <string name="JoinAnExperience"/> <string name="SilentlyManageEstateAccess"> 管理領出入許可名單時,不顯示警示 </string> @@ -1865,6 +1866,9 @@ http://secondlife.com/viewer-access-faq <string name="CompileQueueUnknownFailure"> 下載失敗,原因不明 </string> + <string name="CompileNoExperiencePerm"> + 略過體驗 [EXPERIENCE] 的腳本 [SCRIPT]。 + </string> <string name="CompileQueueTitle"> 重新編譯進度 </string> @@ -5268,6 +5272,87 @@ http://secondlife.com/viewer-access-faq <string name="UserDictionary"> [User] </string> + <string name="experience_tools_experience"> + 體驗 + </string> + <string name="ExperienceNameNull"> + (沒有體驗) + </string> + <string name="ExperienceNameUntitled"> + (無名的體驗) + </string> + <string name="Land-Scope"> + 土地範圍型 + </string> + <string name="Grid-Scope"> + 網格範圍型 + </string> + <string name="Allowed_Experiences_Tab"> + 准許 + </string> + <string name="Blocked_Experiences_Tab"> + 已封鎖的 + </string> + <string name="Contrib_Experiences_Tab"> + 貢獻者 + </string> + <string name="Admin_Experiences_Tab"> + 管理員 + </string> + <string name="Recent_Experiences_Tab"> + 最近 + </string> + <string name="Owned_Experiences_Tab"> + 擁有 + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES] 項,最多 [MAXEXPERIENCES] 項) + </string> + <string name="ExperiencePermission1"> + 取得你的各項控制 + </string> + <string name="ExperiencePermission3"> + 對你的化身觸發動作 + </string> + <string name="ExperiencePermission4"> + 附著到你的化身 + </string> + <string name="ExperiencePermission9"> + 追蹤你的攝影機 + </string> + <string name="ExperiencePermission10"> + 控制你的攝影機 + </string> + <string name="ExperiencePermission11"> + 瞬間傳送你本人 + </string> + <string name="ExperiencePermission12"> + 自動接受各種體驗權限 + </string> + <string name="ExperiencePermissionShortUnknown"> + 進行了未知的操作:[Permission] + </string> + <string name="ExperiencePermissionShort1"> + 取得控制 + </string> + <string name="ExperiencePermissionShort3"> + 觸發動作 + </string> + <string name="ExperiencePermissionShort4"> + 附著 + </string> + <string name="ExperiencePermissionShort9"> + 追蹤攝影機 + </string> + <string name="ExperiencePermissionShort10"> + 控制攝影機 + </string> + <string name="ExperiencePermissionShort11"> + 瞬間傳送 + </string> + <string name="ExperiencePermissionShort12"> + 權限 + </string> <string name="logging_calls_disabled_log_empty"> 交談未留記錄。 若想開始留記錄,請到「偏好設定 > 聊天」,選擇「儲存:只留歷史記錄」或「儲存:歷史記錄兼交談內容」。 </string> diff --git a/indra/newview/skins/default/xui/zh/teleport_strings.xml b/indra/newview/skins/default/xui/zh/teleport_strings.xml index 37080a8d0c..61db294272 100755 --- a/indra/newview/skins/default/xui/zh/teleport_strings.xml +++ b/indra/newview/skins/default/xui/zh/teleport_strings.xml @@ -48,6 +48,9 @@ <message name="MustGetAgeRegion"> 你必須年滿 18 歲才可進入這地區。 </message> + <message name="RegionTPSpecialUsageBlocked"> + 無法進入地區。 '[REGION_NAME]' 是個「技巧性博奕」(Skill Gaming)地區,你必須符合一定條件才可進入。 欲知詳情,請參閱 [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life 技巧性博奕常見問題集]。 + </message> </message_set> <message_set name="progress"> <message name="sending_dest"> -- cgit v1.2.3 From e21f8284fdd9cd86e2822b233775e9a3d77917d5 Mon Sep 17 00:00:00 2001 From: maksymsproductengine <maksymsproductengine@lindenlab.com> Date: Fri, 21 Nov 2014 19:36:18 +0200 Subject: ACME-1639 FIXED A few references to "Trusted Experiences" need to be changed to Key experiences --- indra/newview/skins/default/xui/en/notifications.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index fa5c1cda4a..61385e9805 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4509,7 +4509,7 @@ Remove estate manager for this estate only or for [ALL_ESTATES]? label="Select estate" name="EstateTrustedExperienceAdd" type="alert"> - Add to trusted list for this estate only or for [ALL_ESTATES]? + Add to key list for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate canceltext="Cancel" @@ -4523,7 +4523,7 @@ Remove estate manager for this estate only or for [ALL_ESTATES]? label="Select estate" name="EstateTrustedExperienceRemove" type="alert"> - Remove from trusted list for this estate only or for [ALL_ESTATES]? + Remove from key list for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate canceltext="Cancel" @@ -7283,7 +7283,7 @@ Unable to acquire a new experience: name="TrustedExperienceEntry" persist="false" type="notify"> - You have been allowed into the region [region_name] by participating in the trusted experience secondlife:///app/experience/[public_id]/profile removing this experience may kick you from the region. + You have been allowed into the region [region_name] by participating in the key experience secondlife:///app/experience/[public_id]/profile removing this experience may kick you from the region. <form name="form"> <ignore name="ignore" text="Allowed into a region by an experience"/> -- cgit v1.2.3 From c7841b48bdec74848a64e2dd0eac453ce855093d Mon Sep 17 00:00:00 2001 From: Oz Linden <oz@lindenlab.com> Date: Mon, 12 Jan 2015 16:40:19 -0500 Subject: increment minor version to 3.8 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index c282746153..19811903a7 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.25 +3.8.0 -- cgit v1.2.3 From 1fce3cc89eca7edf05ef550707e955af3d4d5fc7 Mon Sep 17 00:00:00 2001 From: Oz Linden <oz@lindenlab.com> Date: Mon, 8 Jun 2015 17:35:18 -0400 Subject: corrections needed for new tools --- indra/newview/llappviewer.cpp | 4 ++-- indra/newview/llexperiencelog.cpp | 4 ++-- indra/newview/llpanelexperiencepicker.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'indra') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 8185c7c2aa..a2aee2e000 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4705,7 +4705,7 @@ void LLAppViewer::saveExperienceCache() std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "experience_cache.xml"); LL_INFOS("ExperienceCache") << "Saving " << filename << LL_ENDL; - llofstream cache_stream(filename); + llofstream cache_stream(filename.c_str()); if(cache_stream.is_open()) { LLExperienceCache::exportFile(cache_stream); @@ -4717,7 +4717,7 @@ void LLAppViewer::loadExperienceCache() std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "experience_cache.xml"); LL_INFOS("ExperienceCache") << "Loading " << filename << LL_ENDL; - llifstream cache_stream(filename); + llifstream cache_stream(filename.c_str()); if(cache_stream.is_open()) { LLExperienceCache::importFile(cache_stream); diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index 7b594577db..ec6134a4b3 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -188,7 +188,7 @@ void LLExperienceLog::saveEvents() settings["Notify"] = mNotifyNewEvent; settings["PageSize"] = (int)mPageSize; - llofstream stream(filename); + llofstream stream(filename.c_str()); LLSDSerialize::toPrettyXML(settings, stream); } @@ -198,7 +198,7 @@ void LLExperienceLog::loadEvents() LLSD settings = LLSD::emptyMap(); std::string filename = getFilename(); - llifstream stream(filename); + llifstream stream(filename.c_str()); LLSDSerialize::fromXMLDocument(settings, stream); if(settings.has("MaxDays")) diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp index b7c0f3b1fb..70d826a407 100644 --- a/indra/newview/llpanelexperiencepicker.cpp +++ b/indra/newview/llpanelexperiencepicker.cpp @@ -141,7 +141,7 @@ BOOL LLPanelExperiencePicker::postBuild() void LLPanelExperiencePicker::editKeystroke( class LLLineEditor* caller, void* user_data ) { - getChildView(BTN_FIND)->setEnabled(caller->getText().size() >= 0); + getChildView(BTN_FIND)->setEnabled(true); } void LLPanelExperiencePicker::onBtnFind() -- cgit v1.2.3 From 25a6adaac753081329e110e8f2b7264b53495a1e Mon Sep 17 00:00:00 2001 From: Oz Linden <oz@lindenlab.com> Date: Mon, 8 Jun 2015 17:56:21 -0400 Subject: remove false positive trigraphs --- indra/newview/lltoastnotifypanel.cpp | 2 +- indra/newview/llviewermedia.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 602c701a33..98ed2f0fc4 100755 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -46,7 +46,7 @@ const S32 BOTTOM_PAD = VPAD * 3; const S32 IGNORE_BTN_TOP_DELTA = 3*VPAD;//additional ignore_btn padding S32 BUTTON_WIDTH = 90; -// *TODO: magic numbers(?) - copied from llnotify.cpp(250) +// *TODO: magic numbers - copied from llnotify.cpp(250) const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 509227c683..3eae0f8d86 100755 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -196,7 +196,7 @@ private: // 500 means "Internal Server error" but we decided it's okay to // accept this and go past it in the MIME type probe // 302 means the resource can be found temporarily in a different place - added this for join.secondlife.com - // 499 is a code specifc to join.secondlife.com (?) apparently safe to ignore + // 499 is a code specifc to join.secondlife.com apparently safe to ignore // if( ((status >= 200) && (status < 300)) || // ((status >= 400) && (status < 499)) || // (status == 500) || -- cgit v1.2.3 From 30d35f5cfbeec2d5d0dc0f85ff31d0bab4a56e87 Mon Sep 17 00:00:00 2001 From: Oz Linden <oz@lindenlab.com> Date: Mon, 8 Jun 2015 18:13:07 -0400 Subject: make a lot of values agree with declared types --- indra/newview/app_settings/settings.xml | 96 ++++++++++++++++----------------- 1 file changed, 48 insertions(+), 48 deletions(-) (limited to 'indra') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 845cb5ae96..9d9bc43bd7 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -47,7 +47,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>300</real> + <real>300.0</real> </map> <key>AckCollectTime</key> <map> @@ -80,7 +80,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>1</real> + <real>1.0</real> </map> <key>AdvanceSnapshot</key> <map> @@ -1651,7 +1651,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>100</real> + <integer>100</integer> </map> <key>ChatLoadGroupTimeout</key> <map> @@ -4260,7 +4260,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>3</real> + <real>3.0</real> </map> <key>FullScreenAutoDetectAspectRatio</key> <map> @@ -6275,7 +6275,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <real>0</real> + <integer>0</integer> </map> <key>MeshEnabled</key> <map> @@ -6286,7 +6286,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <real>1</real> + <integer>1</integer> </map> <key>MeshImportUseSLM</key> <map> @@ -6297,7 +6297,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <real>1</real> + <integer>1</integer> </map> <key>MeshUploadLogXML</key> <map> @@ -6308,7 +6308,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <real>0</real> + <integer>0</integer> </map> <key>MeshUploadFakeErrors</key> <map> @@ -6319,7 +6319,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>0</real> + <integer>0</integer> </map> <key>MeshUploadTimeOut</key> <map> @@ -6330,7 +6330,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>600</real> + <integer>600</integer> </map> <key>MigrateCacheDirectory</key> <map> @@ -8554,7 +8554,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>64</real> + <real>64.0</real> </map> <key>RenderCubeMap</key> <map> @@ -8690,7 +8690,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>16</real> + <integer>16</integer> </map> <key>RenderEdgeDepthCutoff</key> @@ -8736,7 +8736,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>4</real> + <real>4.0</real> </map> <key>RenderDeferredSpotShadowBias</key> <map> @@ -8803,7 +8803,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>0</real> + <real>0.0</real> </map> <key>RenderDepthPrePass</key> @@ -8997,7 +8997,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>0</real> + <integer>0</integer> </map> <key>RenderSpecularResX</key> @@ -9009,7 +9009,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>1024</real> + <integer>1024</integer> </map> <key>RenderSpecularResY</key> @@ -9021,7 +9021,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>256</real> + <integer>256</integer> </map> <key>RenderSpecularExponent</key> @@ -9177,7 +9177,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>4</real> + <integer>4</integer> </map> <key>RenderShadowBlurDistFactor</key> <map> @@ -9344,9 +9344,9 @@ <string>Vector3</string> <key>Value</key> <array> - <real>1</real> - <real>0</real> - <real>0</real> + <real>1.0</real> + <real>0.0</real> + <real>0.0</real> </array> </map> <key>RenderGlowMaxExtractAlpha</key> @@ -9947,7 +9947,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>0</real> + <integer>0</integer> </map> <key>RenderAutoMuteLogging</key> <map> @@ -10169,7 +10169,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>250000</real> + <integer>250000</integer> </map> <key>MeshMetaDataDiscount</key> <map> @@ -10180,7 +10180,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>384</real> + <integer>384</integer> </map> <key>MeshMinimumByteSize</key> <map> @@ -10191,7 +10191,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>16</real> + <integer>16</integer> </map> <key>MeshBytesPerTriangle</key> <map> @@ -10202,7 +10202,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>16</real> + <integer>16</integer> </map> <key>Mesh2MaxConcurrentRequests</key> <map> @@ -10334,7 +10334,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>1024</real> + <integer>1024</integer> </map> <key>SceneLoadLowMemoryBound</key> <map> @@ -10345,7 +10345,7 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>750</real> + <integer>750</integer> </map> <key>SceneLoadMinRadius</key> <map> @@ -12138,7 +12138,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>6</real> + <integer>6</integer> </map> <key>UICheckboxctrlBtnSize</key> <map> @@ -12149,7 +12149,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>13</real> + <integer>13</integer> </map> <key>UICheckboxctrlHeight</key> <map> @@ -12160,7 +12160,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>16</real> + <integer>16</integer> </map> <key>UICheckboxctrlHPad</key> <map> @@ -12171,7 +12171,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>2</real> + <integer>2</integer> </map> <key>UICheckboxctrlSpacing</key> <map> @@ -12182,7 +12182,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>5</real> + <integer>5</integer> </map> <key>UICheckboxctrlVPad</key> <map> @@ -12193,7 +12193,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>2</real> + <integer>2</integer> </map> <key>UICloseBoxFromTop</key> <map> @@ -12204,7 +12204,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>5</real> + <integer>5</integer> </map> <key>UIExtraTriangleHeight</key> <map> @@ -12215,7 +12215,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>-1</real> + <integer>-1</integer> </map> <key>UIExtraTriangleWidth</key> <map> @@ -12226,7 +12226,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>4</real> + <integer>4</integer> </map> <key>UIFloaterCloseBoxSize</key> <map> @@ -12237,7 +12237,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>16</real> + <integer>16</integer> </map> <key>UIFloaterHPad</key> <map> @@ -12248,7 +12248,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>6</real> + <integer>6</integer> </map> <key>UIFloaterTestBool</key> <map> @@ -12468,7 +12468,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>500</real> + <integer>500</integer> </map> <key>UIMinimizedWidth</key> <map> @@ -12479,7 +12479,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>160</real> + <integer>160</integer> </map> <key>UIMultiSliderctrlSpacing</key> <map> @@ -12490,7 +12490,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>4</real> + <integer>4</integer> </map> <key>UIMultiTrackHeight</key> <map> @@ -13150,7 +13150,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <real>3</real> + <integer>3</integer> </map> <key>UseCircuitCodeTimeout</key> <map> @@ -15158,9 +15158,9 @@ <string>Color4</string> <key>Value</key> <array> - <real>0</real> - <real>0</real> - <real>0</real> + <real>0.0</real> + <real>0.0</real> + <real>0.0</real> <real>1.0</real> </array> </map> @@ -15477,7 +15477,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>2</real> + <real>2.0</real> </map> <key>TeleportLocalDelay</key> <map> @@ -15488,7 +15488,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>1</real> + <real>1.0</real> </map> <key>FMODExProfilerEnable</key> <map> -- cgit v1.2.3 From 52e1cbaab4721b29405f3ff20c440557c906ea4c Mon Sep 17 00:00:00 2001 From: Oz Linden <oz@lindenlab.com> Date: Tue, 30 Jun 2015 14:31:54 -0400 Subject: increment viewer version to 3.8.1 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 19811903a7..f280719674 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.8.0 +3.8.1 -- cgit v1.2.3