diff options
Diffstat (limited to 'indra')
112 files changed, 3206 insertions, 1114 deletions
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h index d3791ef4d1..e1ccd333f1 100644 --- a/indra/llmessage/llregionflags.h +++ b/indra/llmessage/llregionflags.h @@ -166,7 +166,7 @@ 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_MANAGERS = 15; const S32 ESTATE_MAX_ACCESS_IDS = 500; // max for access, banned const S32 ESTATE_MAX_GROUP_IDS = (S32) ESTATE_ACCESS_MAX_ENTRIES_PER_PACKET; diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index cfab6b7fc8..ff8bf30319 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -499,6 +499,13 @@ void LLLineEditor::setCursorToEnd() deselect(); } +void LLLineEditor::resetScrollPosition() +{ + mScrollHPos = 0; + // make sure cursor says in visible range + setCursor(getCursor()); +} + BOOL LLLineEditor::canDeselect() const { return hasSelection(); diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 287837a15c..f775d53e63 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -208,6 +208,9 @@ public: void setCursor( S32 pos ); void setCursorToEnd(); + // set scroll to earliest position it can reasonable set + void resetScrollPosition(); + // Selects characters 'start' to 'end'. void setSelection(S32 start, S32 end); virtual void getSelectionRange(S32 *position, S32 *length) const; diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index f6831c6d5e..ce3fc29d32 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -290,6 +290,7 @@ void LLSpinCtrl::forceSetValue(const LLSD& value ) LLF32UICtrl::setValue(value); updateEditor(); + mEditor->resetScrollPosition(); } } @@ -355,7 +356,9 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data ) if( success ) { - updateEditor(); + // We commited and clamped value + // try to display as much as possible + mEditor->resetScrollPosition(); } else { @@ -475,6 +478,7 @@ BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask) // text editors don't support revert normally (due to user confusion) // but not allowing revert on a spinner seems dangerous updateEditor(); + mEditor->resetScrollPosition(); mEditor->setFocus(FALSE); return TRUE; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a7e8db1b1c..766dc5226c 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -218,6 +218,7 @@ set(viewer_SOURCE_FILES llfloateravatarpicker.cpp llfloateravatarrendersettings.cpp llfloateravatartextures.cpp + llfloaterbanduration.cpp llfloaterbeacons.cpp llfloaterbigpreview.cpp llfloaterbuildoptions.cpp @@ -844,6 +845,7 @@ set(viewer_HEADER_FILES llfloateravatarpicker.h llfloateravatarrendersettings.h llfloateravatartextures.h + llfloaterbanduration.h llfloaterbeacons.h llfloaterbigpreview.h llfloaterbuildoptions.h diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 5e3254243a..024b066c0b 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.1.2 +6.2.1 diff --git a/indra/newview/llfloaterbanduration.cpp b/indra/newview/llfloaterbanduration.cpp new file mode 100644 index 0000000000..6ba6c30cab --- /dev/null +++ b/indra/newview/llfloaterbanduration.cpp @@ -0,0 +1,92 @@ +/** +* @file llfloaterbanduration.cpp +* +* $LicenseInfo:firstyear=2004&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2018, 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 "llfloaterbanduration.h" + +#include "llfloaterreg.h" +#include "llspinctrl.h" +#include "llradiogroup.h" + +LLFloaterBanDuration::LLFloaterBanDuration(const LLSD& target) + : LLFloater(target) +{ +} + +BOOL LLFloaterBanDuration::postBuild() +{ + childSetAction("ok_btn", boost::bind(&LLFloaterBanDuration::onClickBan, this)); + childSetAction("cancel_btn", boost::bind(&LLFloaterBanDuration::onClickCancel, this)); + + getChild<LLUICtrl>("ban_duration_radio")->setCommitCallback(boost::bind(&LLFloaterBanDuration::onClickRadio, this)); + getChild<LLRadioGroup>("ban_duration_radio")->setSelectedIndex(0); + getChild<LLUICtrl>("ban_hours")->setEnabled(FALSE); + + return TRUE; +} + +LLFloaterBanDuration* LLFloaterBanDuration::show(select_callback_t callback, uuid_vec_t ids) +{ + LLFloaterBanDuration* floater = LLFloaterReg::showTypedInstance<LLFloaterBanDuration>("ban_duration"); + if (!floater) + { + LL_WARNS() << "Cannot instantiate ban duration floater" << LL_ENDL; + return NULL; + } + + floater->mSelectionCallback = callback; + floater->mAvatar_ids = ids; + + return floater; +} + +void LLFloaterBanDuration::onClickRadio() +{ + getChild<LLUICtrl>("ban_hours")->setEnabled(getChild<LLRadioGroup>("ban_duration_radio")->getSelectedIndex() != 0); +} + +void LLFloaterBanDuration::onClickCancel() +{ + closeFloater(); +} + +void LLFloaterBanDuration::onClickBan() +{ + if (mSelectionCallback) + { + S32 time = 0; + if (getChild<LLRadioGroup>("ban_duration_radio")->getSelectedIndex() != 0) + { + LLSpinCtrl* hours_spin = getChild<LLSpinCtrl>("ban_hours"); + if (hours_spin) + { + time = LLDate::now().secondsSinceEpoch() + (hours_spin->getValue().asInteger() * 3600); + } + } + mSelectionCallback(mAvatar_ids, time); + } + closeFloater(); +} + diff --git a/indra/newview/llfloaterbanduration.h b/indra/newview/llfloaterbanduration.h new file mode 100644 index 0000000000..e8ec7cc669 --- /dev/null +++ b/indra/newview/llfloaterbanduration.h @@ -0,0 +1,52 @@ +/** +* @file llfloaterbanduration.h +* +* $LicenseInfo:firstyear=2004&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2018, 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_FLOATERBANDURATION_H +#define LL_FLOATERBANDURATION_H + +#include "llfloater.h" + +class LLFloaterBanDuration : public LLFloater +{ + typedef boost::function<void(const uuid_vec_t&, const S32 duration)> select_callback_t; + +public: + LLFloaterBanDuration(const LLSD& target); + BOOL postBuild(); + static LLFloaterBanDuration* show(select_callback_t callback, uuid_vec_t id); + +private: + ~LLFloaterBanDuration() {}; + void onClickBan(); + void onClickCancel(); + void onClickRadio(); + + uuid_vec_t mAvatar_ids; + select_callback_t mSelectionCallback; +}; + +#endif // LL_FLOATERBANDURATION_H + diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index a462f391ca..7f2e8fd82a 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -46,6 +46,7 @@ #include "llfloaterreg.h" #include "llfloateravatarpicker.h" #include "llfloaterauction.h" +#include "llfloaterbanduration.h" #include "llfloatergroups.h" #include "llfloaterscriptlimits.h" #include "llavataractions.h" @@ -2504,33 +2505,49 @@ void LLPanelLandAccess::refresh() cit != parcel->mBanList.end(); ++cit) { const LLAccessEntry& entry = (*cit).second; - std::string prefix; + std::string duration; if (entry.mTime != 0) { LLStringUtil::format_map_t args; S32 now = time(NULL); - S32 seconds = entry.mTime - now; + S32 seconds = entry.mTime - now; if (seconds < 0) seconds = 0; - prefix.assign(" ("); - if (seconds >= 120) + + if (seconds >= 7200) { - args["[MINUTES]"] = llformat("%d", (seconds/60)); - std::string buf = parent_floater->getString ("Minutes", args); - prefix.append(buf); + args["[HOURS]"] = llformat("%d", (seconds / 3600)); + duration = parent_floater->getString("Hours", args); + } + else if (seconds >= 3600) + { + duration = "1 " + parent_floater->getString("Hour"); + } + else if (seconds >= 120) + { + args["[MINUTES]"] = llformat("%d", (seconds / 60)); + duration = parent_floater->getString("Minutes", args); } else if (seconds >= 60) { - prefix.append("1 " + parent_floater->getString("Minute")); + duration = "1 " + parent_floater->getString("Minute"); } else { args["[SECONDS]"] = llformat("%d", seconds); - std::string buf = parent_floater->getString ("Seconds", args); - prefix.append(buf); + duration = parent_floater->getString("Seconds", args); } - prefix.append(" " + parent_floater->getString("Remaining") + ") "); } - mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, "", prefix); + else + { + duration = parent_floater->getString("Always"); + } + LLSD item; + item["id"] = entry.mID; + LLSD& columns = item["columns"]; + columns[0]["column"] = "name"; // to be populated later + columns[1]["column"] = "duration"; + columns[1]["value"] = duration; + mListBanned->addElement(item); } mListBanned->sortByName(TRUE); } @@ -2882,7 +2899,7 @@ void LLPanelLandAccess::onClickAddBanned() LLView * button = findChild<LLButton>("add_banned"); LLFloater * root_floater = gFloaterView->getParentFloater(this); LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show( - boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1), FALSE, FALSE, FALSE, root_floater->getName(), button); + boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1), TRUE, FALSE, FALSE, root_floater->getName(), button); if (picker) { root_floater->addDependentFloater(picker); @@ -2892,23 +2909,41 @@ void LLPanelLandAccess::onClickAddBanned() // static void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids) { - if (!ids.empty()) + LLFloater * root_floater = gFloaterView->getParentFloater(this); + LLFloaterBanDuration* duration_floater = LLFloaterBanDuration::show( + boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned2, this, _1, _2), ids); + if (duration_floater) { - LLUUID id = ids[0]; - LLParcel* parcel = mParcel->getParcel(); - if (parcel && parcel->addToBanList(id, 0)) + root_floater->addDependentFloater(duration_floater); + } +} + +void LLPanelLandAccess::callbackAvatarCBBanned2(const uuid_vec_t& ids, S32 duration) +{ + LLParcel* parcel = mParcel->getParcel(); + if (!parcel) return; + + U32 lists_to_update = 0; + + for (uuid_vec_t::const_iterator it = ids.begin(); it < ids.end(); it++) + { + LLUUID id = *it; + if (parcel->addToBanList(id, duration)) { - U32 lists_to_update = AL_BAN; + lists_to_update |= AL_BAN; // agent was successfully added to ban list // but we also need to check access list to ensure that agent will not be in two lists simultaneously if (parcel->removeFromAccessList(id)) { lists_to_update |= AL_ACCESS; } - LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update); - refresh(); } } + if (lists_to_update > 0) + { + LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update); + refresh(); + } } // static diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 0540ddb880..e846d42666 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -378,6 +378,7 @@ public: void onClickAddAccess(); void onClickAddBanned(); void callbackAvatarCBBanned(const uuid_vec_t& ids); + void callbackAvatarCBBanned2(const uuid_vec_t& ids, S32 duration); void callbackAvatarCBAccess(const uuid_vec_t& ids); protected: diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index a0522c99c2..ec934a4732 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -51,6 +51,7 @@ #include "llfloateravatarpicker.h" #include "llbutton.h" #include "llcheckboxctrl.h" +#include "llclipboard.h" #include "llcombobox.h" #include "lldaycyclemanager.h" #include "llenvmanager.h" @@ -98,10 +99,13 @@ #include "llexperiencecache.h" #include "llpanelexperiences.h" #include "llcorehttputil.h" +#include "llavatarnamecache.h" const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; +const U32 MAX_LISTED_NAMES = 100; + #define TMP_DISABLE_WLES // STORM-1180 ///---------------------------------------------------------------------------- @@ -207,6 +211,11 @@ BOOL LLFloaterRegionInfo::postBuild() panel->buildFromFile("panel_region_estate.xml"); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true)); + panel = new LLPanelEstateAccess; + mInfoPanels.push_back(panel); + panel->buildFromFile("panel_region_access.xml"); + mTab->addTabPanel(panel); + panel = new LLPanelEstateCovenant; mInfoPanels.push_back(panel); panel->buildFromFile("panel_region_covenant.xml"); @@ -269,6 +278,19 @@ void LLFloaterRegionInfo::onOpen(const LLSD& key) refreshFromRegion(gAgent.getRegion()); requestRegionInfo(); requestMeshRezInfo(); + + if (!mGodLevelChangeSlot.connected()) + { + mGodLevelChangeSlot = gAgent.registerGodLevelChanageListener(boost::bind(&LLFloaterRegionInfo::onGodLevelChange, this, _1)); + } +} + +void LLFloaterRegionInfo::onClose(bool app_quitting) +{ + if (mGodLevelChangeSlot.connected()) + { + mGodLevelChangeSlot.disconnect(); + } } // static @@ -280,6 +302,7 @@ void LLFloaterRegionInfo::requestRegionInfo() tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE); tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE); tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE); + tab->getChild<LLPanel>("Access")->setCtrlsEnabled(FALSE); // Must allow anyone to request the RegionInfo data // so non-owners/non-gods can see the values. @@ -307,8 +330,7 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**) LLPanelEstateInfo::initDispatch(dispatch); } - LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); - LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate"); + LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); // unpack the message std::string request; @@ -324,7 +346,10 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**) //dispatch the message dispatch.dispatch(request, invoice, strings); - panel->updateControls(gAgent.getRegion()); + if (panel) + { + panel->updateControls(gAgent.getRegion()); + } } @@ -464,6 +489,16 @@ LLPanelEstateInfo* LLFloaterRegionInfo::getPanelEstate() } // static +LLPanelEstateAccess* LLFloaterRegionInfo::getPanelAccess() +{ + LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); + if (!floater) return NULL; + LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); + LLPanelEstateAccess* panel = (LLPanelEstateAccess*)tab->getChild<LLPanel>("Access"); + return panel; +} + +// static LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant() { LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); @@ -517,6 +552,7 @@ void LLFloaterRegionInfo::disableTabCtrls() tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE); tab->getChild<LLPanel>("panel_env_info")->setCtrlsEnabled(FALSE); tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE); + tab->getChild<LLPanel>("Access")->setCtrlsEnabled(FALSE); } void LLFloaterRegionInfo::onTabSelected(const LLSD& param) @@ -567,6 +603,15 @@ void LLFloaterRegionInfo::disableTopButtons() getChildView("top_scripts_btn")->setEnabled(false); } +void LLFloaterRegionInfo::onGodLevelChange(U8 god_level) +{ + LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); + if (floater && floater->getVisible()) + { + refreshFromRegion(gAgent.getRegion()); + } +} + ///---------------------------------------------------------------------------- /// Local class implementation ///---------------------------------------------------------------------------- @@ -1522,11 +1567,7 @@ LLPanelEstateInfo::LLPanelEstateInfo() void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) { std::string name; - -// name.assign("setowner"); -// static LLDispatchSetEstateOwner set_owner; -// dispatch.addHandler(name, &set_owner); - + name.assign("estateupdateinfo"); static LLDispatchEstateUpdateInfo estate_update_info; dispatch.addHandler(name, &estate_update_info); @@ -1535,7 +1576,6 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) static LLDispatchSetEstateAccess set_access; dispatch.addHandler(name, &set_access); - name.assign("setexperience"); static LLDispatchSetEstateExperience set_experience; dispatch.addHandler(name, &set_experience); @@ -1544,124 +1584,6 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) } //--------------------------------------------------------------------------- -// Add/Remove estate access button callbacks -//--------------------------------------------------------------------------- -void LLPanelEstateInfo::onClickAddAllowedAgent() -{ - LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list"); - if (!list) return; - if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) - { - //args - - LLSD args; - args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - LLNotificationsUtil::add("MaxAllowedAgentOnRegion", args); - return; - } - accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd"); -} - -void LLPanelEstateInfo::onClickRemoveAllowedAgent() -{ - accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list"); -} - -void LLPanelEstateInfo::onClickAddAllowedGroup() -{ - LLCtrlListInterface *list = childGetListInterface("allowed_group_name_list"); - if (!list) return; - if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) - { - LLSD args; - args["MAX_GROUPS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - LLNotificationsUtil::add("MaxAllowedGroupsOnRegion", args); - return; - } - - LLNotification::Params params("ChangeLindenAccess"); - params.functor.function(boost::bind(&LLPanelEstateInfo::addAllowedGroup, this, _1, _2)); - if (isLindenEstate()) - { - LLNotifications::instance().add(params); - } - else - { - LLNotifications::instance().forceResponse(params, 0); - } -} - -bool LLPanelEstateInfo::addAllowedGroup(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (option != 0) return false; - - LLFloater* parent_floater = gFloaterView->getParentFloater(this); - - LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID())); - if (widget) - { - widget->removeNoneOption(); - widget->setSelectGroupCallback(boost::bind(&LLPanelEstateInfo::addAllowedGroup2, 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); - } - } - - return false; -} - -void LLPanelEstateInfo::onClickRemoveAllowedGroup() -{ - accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list"); -} - -void LLPanelEstateInfo::onClickAddBannedAgent() -{ - LLCtrlListInterface *list = childGetListInterface("banned_avatar_name_list"); - if (!list) return; - if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) - { - LLSD args; - args["MAX_BANNED"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - LLNotificationsUtil::add("MaxBannedAgentsOnRegion", args); - return; - } - accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd"); -} - -void LLPanelEstateInfo::onClickRemoveBannedAgent() -{ - accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list"); -} - -// static -void LLPanelEstateInfo::onClickAddEstateManager() -{ - LLCtrlListInterface *list = childGetListInterface("estate_manager_name_list"); - if (!list) return; - if (list->getItemCount() >= ESTATE_MAX_MANAGERS) - { // Tell user they can't add more managers - LLSD args; - args["MAX_MANAGER"] = llformat("%d",ESTATE_MAX_MANAGERS); - LLNotificationsUtil::add("MaxManagersOnRegion", args); - } - else - { // Go pick managers to add - accessAddCore(ESTATE_ACCESS_MANAGER_ADD, "EstateManagerAdd"); - } -} - -// static -void LLPanelEstateInfo::onClickRemoveEstateManager() -{ - accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list"); -} - -//--------------------------------------------------------------------------- // Kick from estate methods //--------------------------------------------------------------------------- @@ -1774,11 +1696,13 @@ struct LLEstateAccessChangeInfo LLSD sd; sd["name"] = mDialogName; sd["operation"] = (S32)mOperationFlag; - for (uuid_vec_t::const_iterator it = mAgentOrGroupIDs.begin(); - it != mAgentOrGroupIDs.end(); - ++it) + for (U32 i = 0; i < mAgentOrGroupIDs.size(); ++i) { - sd["allowed_ids"].append(*it); + sd["allowed_ids"].append(mAgentOrGroupIDs[i]); + if (mAgentNames.size() > i) + { + sd["allowed_names"].append(mAgentNames[i].asLLSD()); + } } return sd; } @@ -1786,348 +1710,9 @@ struct LLEstateAccessChangeInfo U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc. std::string mDialogName; uuid_vec_t mAgentOrGroupIDs; // List of agent IDs to apply to this change + std::vector<LLAvatarName> mAgentNames; // Optional list of the agent names for notifications }; -// Special case callback for groups, since it has different callback format than names -void LLPanelEstateInfo::addAllowedGroup2(LLUUID id) -{ - LLSD payload; - payload["operation"] = (S32)ESTATE_ACCESS_ALLOWED_GROUP_ADD; - payload["dialog_name"] = "EstateAllowedGroupAdd"; - payload["allowed_ids"].append(id); - - LLSD args; - args["ALL_ESTATES"] = all_estates_text(); - - LLNotification::Params params("EstateAllowedGroupAdd"); - params.payload(payload) - .substitutions(args) - .functor.function(accessCoreConfirm); - if (isLindenEstate()) - { - LLNotifications::instance().forceResponse(params, 0); - } - else - { - LLNotifications::instance().add(params); - } -} - -// static -void LLPanelEstateInfo::accessAddCore(U32 operation_flag, const std::string& dialog_name) -{ - LLSD payload; - payload["operation"] = (S32)operation_flag; - payload["dialog_name"] = dialog_name; - // agent id filled in after avatar picker - - LLNotification::Params params("ChangeLindenAccess"); - params.payload(payload) - .functor.function(accessAddCore2); - - if (isLindenEstate()) - { - LLNotifications::instance().add(params); - } - else - { - // same as clicking "OK" - LLNotifications::instance().forceResponse(params, 0); - } -} - -// static -bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (option != 0) - { - // abort change - return false; - } - - LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]); - //Get parent floater name - LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); - LLFloater* parent_floater = panel ? gFloaterView->getParentFloater(panel) : NULL; - const std::string& parent_floater_name = parent_floater ? parent_floater->getName() : ""; - - //Determine the button that triggered opening of the avatar picker - //(so that a shadow frustum from the button to the avatar picker can be created) - LLView * button = NULL; - switch(change_info->mOperationFlag) - { - case ESTATE_ACCESS_ALLOWED_AGENT_ADD: - button = panel->findChild<LLButton>("add_allowed_avatar_btn"); - break; - - case ESTATE_ACCESS_BANNED_AGENT_ADD: - button = panel->findChild<LLButton>("add_banned_avatar_btn"); - break; - - case ESTATE_ACCESS_MANAGER_ADD: - button = panel->findChild<LLButton>("add_estate_manager_btn"); - break; - } - - // avatar picker yes multi-select, yes close-on-select - LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::accessAddCore3, _1, (void*)change_info), - TRUE, TRUE, FALSE, parent_floater_name, button); - - //Allows the closed parent floater to close the child floater (avatar picker) - if (child_floater) - { - parent_floater->addDependentFloater(child_floater); - } - - return false; -} - -// static -void LLPanelEstateInfo::accessAddCore3(const uuid_vec_t& ids, void* data) -{ - LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data; - if (!change_info) return; - if (ids.empty()) - { - // User didn't select a name. - delete change_info; - change_info = NULL; - return; - } - // User did select a name. - change_info->mAgentOrGroupIDs = ids; - // Can't put estate owner on ban list - LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); - if (!panel) return; - LLViewerRegion* region = gAgent.getRegion(); - if (!region) return; - - if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD) - { - LLCtrlListInterface *list = panel->childGetListInterface("allowed_avatar_name_list"); - int currentCount = (list ? list->getItemCount() : 0); - if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS) - { - LLSD args; - args["NUM_ADDED"] = llformat("%d",ids.size()); - args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents"); - args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS); - LLNotificationsUtil::add("MaxAgentOnRegionBatch", args); - delete change_info; - return; - } - } - if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD) - { - LLCtrlListInterface *list = panel->childGetListInterface("banned_avatar_name_list"); - int currentCount = (list ? list->getItemCount() : 0); - if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS) - { - LLSD args; - args["NUM_ADDED"] = llformat("%d",ids.size()); - args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents"); - args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS); - LLNotificationsUtil::add("MaxAgentOnRegionBatch", args); - delete change_info; - return; - } - } - - LLSD args; - args["ALL_ESTATES"] = all_estates_text(); - - LLNotification::Params params(change_info->mDialogName); - params.substitutions(args) - .payload(change_info->asLLSD()) - .functor.function(accessCoreConfirm); - - if (isLindenEstate()) - { - // just apply to this estate - LLNotifications::instance().forceResponse(params, 0); - } - else - { - // ask if this estate or all estates with this owner - LLNotifications::instance().add(params); - } -} - -// static -void LLPanelEstateInfo::accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name) -{ - LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); - if (!panel) return; - LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name); - if (!name_list) return; - - std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected(); - if (list_vector.size() == 0) - return; - - LLSD payload; - payload["operation"] = (S32)operation_flag; - payload["dialog_name"] = dialog_name; - - for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin(); - iter != list_vector.end(); - iter++) - { - LLScrollListItem *item = (*iter); - payload["allowed_ids"].append(item->getUUID()); - } - - LLNotification::Params params("ChangeLindenAccess"); - params.payload(payload) - .functor.function(accessRemoveCore2); - - if (isLindenEstate()) - { - // warn on change linden estate - LLNotifications::instance().add(params); - } - else - { - // just proceed, as if clicking OK - LLNotifications::instance().forceResponse(params, 0); - } -} - -// static -bool LLPanelEstateInfo::accessRemoveCore2(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (option != 0) - { - // abort - return false; - } - - // If Linden estate, can only apply to "this" estate, not all estates - // owned by NULL. - if (isLindenEstate()) - { - accessCoreConfirm(notification, response); - } - else - { - LLSD args; - args["ALL_ESTATES"] = all_estates_text(); - LLNotificationsUtil::add(notification["payload"]["dialog_name"], - args, - notification["payload"], - accessCoreConfirm); - } - return false; -} - -// Used for both access add and remove operations, depending on the mOperationFlag -// passed in (ESTATE_ACCESS_BANNED_AGENT_ADD, ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, etc.) -// static -bool LLPanelEstateInfo::accessCoreConfirm(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(); - if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD) - && region && (region->getOwner() == id)) - { - LLNotificationsUtil::add("OwnerCanNotBeDenied"); - break; - } - switch(option) - { - case 0: - // This estate - sendEstateAccessDelta(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; - sendEstateAccessDelta(flags, id); - } - else if (region->isEstateManager()) - { - flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES; - sendEstateAccessDelta(flags, id); - } - break; - } - case 2: - default: - break; - } - } - return false; -} - -// key = "estateaccessdelta" -// str(estate_id) will be added to front of list by forward_EstateOwnerRequest_to_dataserver -// str[0] = str(agent_id) requesting the change -// str[1] = str(flags) (ESTATE_ACCESS_DELTA_*) -// str[2] = str(agent_id) to add or remove -// static -void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_group_id) -{ - LLMessageSystem* msg = gMessageSystem; - msg->newMessage("EstateOwnerMessage"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used - - msg->nextBlock("MethodData"); - msg->addString("Method", "estateaccessdelta"); - msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice()); - - std::string buf; - gAgent.getID().toString(buf); - msg->nextBlock("ParamList"); - msg->addString("Parameter", buf); - - buf = llformat("%u", flags); - msg->nextBlock("ParamList"); - msg->addString("Parameter", buf); - - agent_or_group_id.toString(buf); - msg->nextBlock("ParamList"); - msg->addString("Parameter", buf); - - - LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); - - if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | - ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_REMOVE)) - { - - panel->clearAccessLists(); - } - - gAgent.sendReliableMessage(); -} - // static void LLPanelEstateInfo::updateEstateOwnerName(const std::string& name) { @@ -2157,36 +1742,9 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region) getChildView("apply_btn")->setEnabled(FALSE); - BOOL has_allowed_avatar = getChild<LLNameListCtrl>("allowed_avatar_name_list")->getFirstSelected() ? TRUE : FALSE; - BOOL has_allowed_group = getChild<LLNameListCtrl>("allowed_group_name_list")->getFirstSelected() ? TRUE : FALSE; - BOOL has_banned_agent = getChild<LLNameListCtrl>("banned_avatar_name_list")->getFirstSelected() ? TRUE : FALSE; - BOOL has_estate_manager = getChild<LLNameListCtrl>("estate_manager_name_list")->getFirstSelected() ? TRUE : FALSE; - - getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager); - getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && (god || owner || manager)); - getChildView("allowed_avatar_name_list")->setEnabled(god || owner || manager); - - getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager); - getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && (god || owner || manager) ); - getChildView("allowed_group_name_list")->setEnabled(god || owner || manager); - - // Can't ban people from mainland, orientation islands, etc. because this - // creates much network traffic and server load. - // Disable their accounts in CSR tool instead. - bool linden_estate = isLindenEstate(); - bool enable_ban = (god || owner || manager) && !linden_estate; - getChildView("add_banned_avatar_btn")->setEnabled(enable_ban); - getChildView("remove_banned_avatar_btn")->setEnabled(has_banned_agent && enable_ban); - getChildView("banned_avatar_name_list")->setEnabled(god || owner || manager); - getChildView("message_estate_btn")->setEnabled(god || owner || manager); getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager); - // estate managers can't add estate managers - getChildView("add_estate_manager_btn")->setEnabled(god || owner); - getChildView("remove_estate_manager_btn")->setEnabled(has_estate_manager && (god || owner)); - getChildView("estate_manager_name_list")->setEnabled(god || owner); - refresh(); } @@ -2208,10 +1766,6 @@ bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region) //integers.push_back(LLFloaterRegionInfo::());::getPanelEstate(); - LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); - panel->clearAccessLists(); - - sendEstateOwnerMessage(gMessageSystem, "getinfo", invoice, strings); refresh(); @@ -2242,49 +1796,6 @@ BOOL LLPanelEstateInfo::postBuild() initCtrl("voice_chat_check"); initCtrl("parcel_access_override"); - getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); - LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list"); - if (avatar_name_list) - { - avatar_name_list->setCommitOnSelectionChange(TRUE); - avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); - } - - childSetAction("add_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddAllowedAgent, this)); - childSetAction("remove_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedAgent, this)); - - getChild<LLUICtrl>("allowed_group_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); - LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list"); - if (group_name_list) - { - group_name_list->setCommitOnSelectionChange(TRUE); - group_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); - } - - getChild<LLUICtrl>("add_allowed_group_btn")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onClickAddAllowedGroup, this)); - childSetAction("remove_allowed_group_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedGroup, this)); - - getChild<LLUICtrl>("banned_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); - LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list"); - if (banned_name_list) - { - banned_name_list->setCommitOnSelectionChange(TRUE); - banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); - } - - childSetAction("add_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddBannedAgent, this)); - childSetAction("remove_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveBannedAgent, this)); - - getChild<LLUICtrl>("estate_manager_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); - LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list"); - if (manager_name_list) - { - manager_name_list->setCommitOnSelectionChange(TRUE); - manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4); // Allow extras for dupe issue - } - - childSetAction("add_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickAddEstateManager, this)); - childSetAction("remove_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveEstateManager, this)); childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this)); childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this)); @@ -2429,22 +1940,6 @@ void LLPanelEstateInfo::setOwnerName(const std::string& name) getChild<LLUICtrl>("estate_owner")->setValue(LLSD(name)); } -void LLPanelEstateInfo::clearAccessLists() -{ - LLNameListCtrl* name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list"); - if (name_list) - { - name_list->deleteAllItems(); - } - - name_list = getChild<LLNameListCtrl>("banned_avatar_name_list"); - if (name_list) - { - name_list->deleteAllItems(); - } - updateControls(gAgent.getRegion()); -} - // static void LLPanelEstateInfo::onClickMessageEstate(void* userdata) { @@ -2858,182 +2353,18 @@ bool LLDispatchEstateUpdateInfo::operator()( return true; } - -// key = "setaccess" -// strings[0] = str(estate_id) -// strings[1] = str(packed_access_lists) -// strings[2] = str(num allowed agent ids) -// strings[3] = str(num allowed group ids) -// strings[4] = str(num banned agent ids) -// strings[5] = str(num estate manager agent ids) -// strings[6] = bin(uuid) -// strings[7] = bin(uuid) -// strings[8] = bin(uuid) -// ... bool LLDispatchSetEstateAccess::operator()( - const LLDispatcher* dispatcher, - const std::string& key, - const LLUUID& invoice, - const sparam_t& strings) + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings) { - LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); - if (!panel) return true; - - S32 index = 1; // skip estate_id - U32 access_flags = strtoul(strings[index++].c_str(), NULL,10); - S32 num_allowed_agents = strtol(strings[index++].c_str(), NULL, 10); - S32 num_allowed_groups = strtol(strings[index++].c_str(), NULL, 10); - S32 num_banned_agents = strtol(strings[index++].c_str(), NULL, 10); - S32 num_estate_managers = strtol(strings[index++].c_str(), NULL, 10); - - // sanity ckecks - if (num_allowed_agents > 0 - && !(access_flags & ESTATE_ACCESS_ALLOWED_AGENTS)) + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (panel && panel->getPendingUpdate()) { - LL_WARNS() << "non-zero count for allowed agents, but no corresponding flag" << LL_ENDL; - } - if (num_allowed_groups > 0 - && !(access_flags & ESTATE_ACCESS_ALLOWED_GROUPS)) - { - LL_WARNS() << "non-zero count for allowed groups, but no corresponding flag" << LL_ENDL; - } - if (num_banned_agents > 0 - && !(access_flags & ESTATE_ACCESS_BANNED_AGENTS)) - { - LL_WARNS() << "non-zero count for banned agents, but no corresponding flag" << LL_ENDL; - } - if (num_estate_managers > 0 - && !(access_flags & ESTATE_ACCESS_MANAGERS)) - { - LL_WARNS() << "non-zero count for managers, but no corresponding flag" << LL_ENDL; - } - - // grab the UUID's out of the string fields - if (access_flags & ESTATE_ACCESS_ALLOWED_AGENTS) - { - LLNameListCtrl* allowed_agent_name_list; - allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list"); - - int totalAllowedAgents = num_allowed_agents; - - if (allowed_agent_name_list) - { - totalAllowedAgents += allowed_agent_name_list->getItemCount(); - } - - LLStringUtil::format_map_t args; - args["[ALLOWEDAGENTS]"] = llformat ("%d", totalAllowedAgents); - args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_ACCESS_IDS); - std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args); - panel->getChild<LLUICtrl>("allow_resident_label")->setValue(LLSD(msg)); - - if (allowed_agent_name_list) - { - // Don't sort these as we add them, sort them when we are done. - allowed_agent_name_list->clearSortOrder(); - for (S32 i = 0; i < num_allowed_agents && i < ESTATE_MAX_ACCESS_IDS; i++) - { - LLUUID id; - memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ - allowed_agent_name_list->addNameItem(id); - } - allowed_agent_name_list->sortByName(TRUE); - } + panel->setPendingUpdate(false); + panel->updateLists(); } - - if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS) - { - LLNameListCtrl* allowed_group_name_list; - allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list"); - - LLStringUtil::format_map_t args; - args["[ALLOWEDGROUPS]"] = llformat ("%d", num_allowed_groups); - args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_GROUP_IDS); - std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args); - panel->getChild<LLUICtrl>("allow_group_label")->setValue(LLSD(msg)); - - if (allowed_group_name_list) - { - // Don't sort these as we add them, sort them when we are done. - allowed_group_name_list->clearSortOrder(); - allowed_group_name_list->deleteAllItems(); - for (S32 i = 0; i < num_allowed_groups && i < ESTATE_MAX_GROUP_IDS; i++) - { - LLUUID id; - memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ - allowed_group_name_list->addGroupNameItem(id); - } - allowed_group_name_list->sortByName(TRUE); - } - } - - if (access_flags & ESTATE_ACCESS_BANNED_AGENTS) - { - LLNameListCtrl* banned_agent_name_list; - banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list"); - - int totalBannedAgents = num_banned_agents; - - if (banned_agent_name_list) - { - totalBannedAgents += banned_agent_name_list->getItemCount(); - } - - - LLStringUtil::format_map_t args; - args["[BANNEDAGENTS]"] = llformat("%d", totalBannedAgents); - args["[MAXBANNED]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); - std::string msg = LLTrans::getString("RegionInfoBannedResidents", args); - panel->getChild<LLUICtrl>("ban_resident_label")->setValue(LLSD(msg)); - - if (banned_agent_name_list) - { - // Don't sort these as we add them, sort them when we are done. - banned_agent_name_list->clearSortOrder(); - - for (S32 i = 0; i < num_banned_agents && i < ESTATE_MAX_ACCESS_IDS; i++) - { - LLUUID id; - memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ - banned_agent_name_list->addNameItem(id); - } - banned_agent_name_list->sortByName(TRUE); - } - } - - if (access_flags & ESTATE_ACCESS_MANAGERS) - { - LLStringUtil::format_map_t args; - args["[ESTATEMANAGERS]"] = llformat("%d", num_estate_managers); - args["[MAXMANAGERS]"] = llformat("%d", ESTATE_MAX_MANAGERS); - std::string msg = LLTrans::getString("RegionInfoEstateManagers", args); - panel->getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg)); - - LLNameListCtrl* estate_manager_name_list = - panel->getChild<LLNameListCtrl>("estate_manager_name_list"); - if (estate_manager_name_list) - { - // Don't sort these as we add them, sort them when we are done. - estate_manager_name_list->clearSortOrder(); - - estate_manager_name_list->deleteAllItems(); // Clear existing entries - - // There should be only ESTATE_MAX_MANAGERS people in the list, but if the database gets more (SL-46107) don't - // truncate the list unless it's really big. Go ahead and show the extras so the user doesn't get confused, - // and they can still remove them. - for (S32 i = 0; i < num_estate_managers && i < (ESTATE_MAX_MANAGERS * 4); i++) - { - LLUUID id; - memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ - estate_manager_name_list->addNameItem(id); - } - estate_manager_name_list->sortByName(TRUE); - } - } - - // Update the buttons which may change based on the list contents but also needs to account for general access features. - panel->updateControls(gAgent.getRegion()); - return true; } @@ -3942,3 +3273,969 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) onChangeAnything(); } + + +LLPanelEstateAccess::LLPanelEstateAccess() +: LLPanelRegionInfo(), mPendingUpdate(false) +{} + +BOOL LLPanelEstateAccess::postBuild() +{ + getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); + LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list"); + if (avatar_name_list) + { + avatar_name_list->setCommitOnSelectionChange(TRUE); + avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); + } + + getChild<LLUICtrl>("allowed_search_input")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onAllowedSearchEdit, this, _2)); + childSetAction("add_allowed_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickAddAllowedAgent, this)); + childSetAction("remove_allowed_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveAllowedAgent, this)); + childSetAction("copy_allowed_list_btn", boost::bind(&LLPanelEstateAccess::onClickCopyAllowedList, this)); + + getChild<LLUICtrl>("allowed_group_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); + LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list"); + if (group_name_list) + { + group_name_list->setCommitOnSelectionChange(TRUE); + group_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); + } + + getChild<LLUICtrl>("allowed_group_search_input")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onAllowedGroupsSearchEdit, this, _2)); + getChild<LLUICtrl>("add_allowed_group_btn")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onClickAddAllowedGroup, this)); + childSetAction("remove_allowed_group_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveAllowedGroup, this)); + childSetAction("copy_allowed_group_list_btn", boost::bind(&LLPanelEstateAccess::onClickCopyAllowedGroupList, this)); + + getChild<LLUICtrl>("banned_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); + LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list"); + if (banned_name_list) + { + banned_name_list->setCommitOnSelectionChange(TRUE); + banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); + } + + getChild<LLUICtrl>("banned_search_input")->setCommitCallback(boost::bind(&LLPanelEstateAccess::onBannedSearchEdit, this, _2)); + childSetAction("add_banned_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickAddBannedAgent, this)); + childSetAction("remove_banned_avatar_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveBannedAgent, this)); + childSetAction("copy_banned_list_btn", boost::bind(&LLPanelEstateAccess::onClickCopyBannedList, this)); + + getChild<LLUICtrl>("estate_manager_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); + LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list"); + if (manager_name_list) + { + manager_name_list->setCommitOnSelectionChange(TRUE); + manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4); // Allow extras for dupe issue + } + + childSetAction("add_estate_manager_btn", boost::bind(&LLPanelEstateAccess::onClickAddEstateManager, this)); + childSetAction("remove_estate_manager_btn", boost::bind(&LLPanelEstateAccess::onClickRemoveEstateManager, this)); + + return TRUE; +} + +void LLPanelEstateAccess::updateControls(LLViewerRegion* region) +{ + BOOL god = gAgent.isGodlike(); + BOOL owner = (region && (region->getOwner() == gAgent.getID())); + BOOL manager = (region && region->isEstateManager()); + BOOL enable_cotrols = god || owner || manager; + setCtrlsEnabled(enable_cotrols); + + BOOL has_allowed_avatar = getChild<LLNameListCtrl>("allowed_avatar_name_list")->getFirstSelected() ? TRUE : FALSE; + BOOL has_allowed_group = getChild<LLNameListCtrl>("allowed_group_name_list")->getFirstSelected() ? TRUE : FALSE; + BOOL has_banned_agent = getChild<LLNameListCtrl>("banned_avatar_name_list")->getFirstSelected() ? TRUE : FALSE; + BOOL has_estate_manager = getChild<LLNameListCtrl>("estate_manager_name_list")->getFirstSelected() ? TRUE : FALSE; + + getChildView("add_allowed_avatar_btn")->setEnabled(enable_cotrols); + getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && enable_cotrols); + getChildView("allowed_avatar_name_list")->setEnabled(enable_cotrols); + + getChildView("add_allowed_group_btn")->setEnabled(enable_cotrols); + getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && enable_cotrols); + getChildView("allowed_group_name_list")->setEnabled(enable_cotrols); + + // Can't ban people from mainland, orientation islands, etc. because this + // creates much network traffic and server load. + // Disable their accounts in CSR tool instead. + bool linden_estate = LLPanelEstateInfo::isLindenEstate(); + bool enable_ban = enable_cotrols && !linden_estate; + getChildView("add_banned_avatar_btn")->setEnabled(enable_ban); + getChildView("remove_banned_avatar_btn")->setEnabled(has_banned_agent && enable_ban); + getChildView("banned_avatar_name_list")->setEnabled(enable_cotrols); + + // estate managers can't add estate managers + getChildView("add_estate_manager_btn")->setEnabled(god || owner); + getChildView("remove_estate_manager_btn")->setEnabled(has_estate_manager && (god || owner)); + getChildView("estate_manager_name_list")->setEnabled(god || owner); + + if (enable_cotrols != mCtrlsEnabled) + { + mCtrlsEnabled = enable_cotrols; + updateLists(); // update the lists on the agent's access level change + } +} + +//--------------------------------------------------------------------------- +// Add/Remove estate access button callbacks +//--------------------------------------------------------------------------- +void LLPanelEstateAccess::onClickAddAllowedAgent() +{ + LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list"); + if (!list) return; + if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) + { + //args + + LLSD args; + args["MAX_AGENTS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + LLNotificationsUtil::add("MaxAllowedAgentOnRegion", args); + return; + } + accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd"); +} + +void LLPanelEstateAccess::onClickRemoveAllowedAgent() +{ + accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list"); +} + +void LLPanelEstateAccess::onClickAddAllowedGroup() +{ + LLCtrlListInterface *list = childGetListInterface("allowed_group_name_list"); + if (!list) return; + if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) + { + LLSD args; + args["MAX_GROUPS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + LLNotificationsUtil::add("MaxAllowedGroupsOnRegion", args); + return; + } + + LLNotification::Params params("ChangeLindenAccess"); + params.functor.function(boost::bind(&LLPanelEstateAccess::addAllowedGroup, this, _1, _2)); + if (LLPanelEstateInfo::isLindenEstate()) + { + LLNotifications::instance().add(params); + } + else + { + LLNotifications::instance().forceResponse(params, 0); + } +} + +bool LLPanelEstateAccess::addAllowedGroup(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) return false; + + LLFloater* parent_floater = gFloaterView->getParentFloater(this); + + LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID())); + if (widget) + { + widget->removeNoneOption(); + widget->setSelectGroupCallback(boost::bind(&LLPanelEstateAccess::addAllowedGroup2, 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); + } + } + + return false; +} + +void LLPanelEstateAccess::onClickRemoveAllowedGroup() +{ + accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list"); +} + +void LLPanelEstateAccess::onClickAddBannedAgent() +{ + LLCtrlListInterface *list = childGetListInterface("banned_avatar_name_list"); + if (!list) return; + if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) + { + LLSD args; + args["MAX_BANNED"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + LLNotificationsUtil::add("MaxBannedAgentsOnRegion", args); + return; + } + accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd"); +} + +void LLPanelEstateAccess::onClickRemoveBannedAgent() +{ + accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list"); +} + +void LLPanelEstateAccess::onClickCopyAllowedList() +{ + copyListToClipboard("allowed_avatar_name_list"); +} + +void LLPanelEstateAccess::onClickCopyAllowedGroupList() +{ + copyListToClipboard("allowed_group_name_list"); +} + +void LLPanelEstateAccess::onClickCopyBannedList() +{ + copyListToClipboard("banned_avatar_name_list"); +} + +// static +void LLPanelEstateAccess::onClickAddEstateManager() +{ + LLCtrlListInterface *list = childGetListInterface("estate_manager_name_list"); + if (!list) return; + if (list->getItemCount() >= ESTATE_MAX_MANAGERS) + { // Tell user they can't add more managers + LLSD args; + args["MAX_MANAGER"] = llformat("%d", ESTATE_MAX_MANAGERS); + LLNotificationsUtil::add("MaxManagersOnRegion", args); + } + else + { // Go pick managers to add + accessAddCore(ESTATE_ACCESS_MANAGER_ADD, "EstateManagerAdd"); + } +} + +// static +void LLPanelEstateAccess::onClickRemoveEstateManager() +{ + accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list"); +} + + +// Special case callback for groups, since it has different callback format than names +void LLPanelEstateAccess::addAllowedGroup2(LLUUID id) +{ + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (panel) + { + LLNameListCtrl* group_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list"); + LLScrollListItem* item = group_list->getNameItemByAgentId(id); + if (item) + { + LLSD args; + args["GROUP"] = item->getColumn(0)->getValue().asString(); + LLNotificationsUtil::add("GroupIsAlreadyInList", args); + return; + } + } + + LLSD payload; + payload["operation"] = (S32)ESTATE_ACCESS_ALLOWED_GROUP_ADD; + payload["dialog_name"] = "EstateAllowedGroupAdd"; + payload["allowed_ids"].append(id); + + LLSD args; + args["ALL_ESTATES"] = all_estates_text(); + + LLNotification::Params params("EstateAllowedGroupAdd"); + params.payload(payload) + .substitutions(args) + .functor.function(accessCoreConfirm); + if (LLPanelEstateInfo::isLindenEstate()) + { + LLNotifications::instance().forceResponse(params, 0); + } + else + { + LLNotifications::instance().add(params); + } +} + +// static +void LLPanelEstateAccess::accessAddCore(U32 operation_flag, const std::string& dialog_name) +{ + LLSD payload; + payload["operation"] = (S32)operation_flag; + payload["dialog_name"] = dialog_name; + // agent id filled in after avatar picker + + LLNotification::Params params("ChangeLindenAccess"); + params.payload(payload) + .functor.function(accessAddCore2); + + if (LLPanelEstateInfo::isLindenEstate()) + { + LLNotifications::instance().add(params); + } + else + { + // same as clicking "OK" + LLNotifications::instance().forceResponse(params, 0); + } +} + +// static +bool LLPanelEstateAccess::accessAddCore2(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) + { + // abort change + return false; + } + + LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]); + //Get parent floater name + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + LLFloater* parent_floater = panel ? gFloaterView->getParentFloater(panel) : NULL; + const std::string& parent_floater_name = parent_floater ? parent_floater->getName() : ""; + + //Determine the button that triggered opening of the avatar picker + //(so that a shadow frustum from the button to the avatar picker can be created) + LLView * button = NULL; + switch (change_info->mOperationFlag) + { + case ESTATE_ACCESS_ALLOWED_AGENT_ADD: + button = panel->findChild<LLButton>("add_allowed_avatar_btn"); + break; + + case ESTATE_ACCESS_BANNED_AGENT_ADD: + button = panel->findChild<LLButton>("add_banned_avatar_btn"); + break; + + case ESTATE_ACCESS_MANAGER_ADD: + button = panel->findChild<LLButton>("add_estate_manager_btn"); + break; + } + + // avatar picker yes multi-select, yes close-on-select + LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateAccess::accessAddCore3, _1, _2, (void*)change_info), + TRUE, TRUE, FALSE, parent_floater_name, button); + + //Allows the closed parent floater to close the child floater (avatar picker) + if (child_floater) + { + parent_floater->addDependentFloater(child_floater); + } + + return false; +} + +// static +void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, std::vector<LLAvatarName> names, void* data) +{ + LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data; + if (!change_info) return; + if (ids.empty()) + { + // User didn't select a name. + delete change_info; + change_info = NULL; + return; + } + // User did select a name. + change_info->mAgentOrGroupIDs = ids; + // Can't put estate owner on ban list + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + LLViewerRegion* region = gAgent.getRegion(); + if (!region) return; + + if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD) + { + LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list"); + int currentCount = (name_list ? name_list->getItemCount() : 0); + if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS) + { + LLSD args; + args["NUM_ADDED"] = llformat("%d", ids.size()); + args["MAX_AGENTS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents"); + args["NUM_EXCESS"] = llformat("%d", (ids.size() + currentCount) - ESTATE_MAX_ACCESS_IDS); + LLNotificationsUtil::add("MaxAgentOnRegionBatch", args); + delete change_info; + return; + } + + uuid_vec_t ids_allowed; + std::vector<LLAvatarName> names_allowed; + std::string already_allowed; + bool single = true; + for (U32 i = 0; i < ids.size(); ++i) + { + LLScrollListItem* item = name_list->getNameItemByAgentId(ids[i]); + if (item) + { + if (!already_allowed.empty()) + { + already_allowed += ", "; + single = false; + } + already_allowed += item->getColumn(0)->getValue().asString(); + } + else + { + ids_allowed.push_back(ids[i]); + names_allowed.push_back(names[i]); + } + } + if (!already_allowed.empty()) + { + LLSD args; + args["AGENT"] = already_allowed; + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents"); + LLNotificationsUtil::add(single ? "AgentIsAlreadyInList" : "AgentsAreAlreadyInList", args); + if (ids_allowed.empty()) + { + delete change_info; + return; + } + } + change_info->mAgentOrGroupIDs = ids_allowed; + change_info->mAgentNames = names_allowed; + } + if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD) + { + LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list"); + LLNameListCtrl* em_list = panel->getChild<LLNameListCtrl>("estate_manager_name_list"); + int currentCount = (name_list ? name_list->getItemCount() : 0); + if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS) + { + LLSD args; + args["NUM_ADDED"] = llformat("%d", ids.size()); + args["MAX_AGENTS"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents"); + args["NUM_EXCESS"] = llformat("%d", (ids.size() + currentCount) - ESTATE_MAX_ACCESS_IDS); + LLNotificationsUtil::add("MaxAgentOnRegionBatch", args); + delete change_info; + return; + } + + uuid_vec_t ids_allowed; + std::vector<LLAvatarName> names_allowed; + std::string already_banned; + std::string em_ban; + bool single = true; + for (U32 i = 0; i < ids.size(); ++i) + { + bool is_allowed = true; + LLScrollListItem* em_item = em_list->getNameItemByAgentId(ids[i]); + if (em_item) + { + if (!em_ban.empty()) + { + em_ban += ", "; + } + em_ban += em_item->getColumn(0)->getValue().asString(); + is_allowed = false; + } + + LLScrollListItem* item = name_list->getNameItemByAgentId(ids[i]); + if (item) + { + if (!already_banned.empty()) + { + already_banned += ", "; + single = false; + } + already_banned += item->getColumn(0)->getValue().asString(); + is_allowed = false; + } + + if (is_allowed) + { + ids_allowed.push_back(ids[i]); + names_allowed.push_back(names[i]); + } + } + if (!em_ban.empty()) + { + LLSD args; + args["AGENT"] = em_ban; + LLNotificationsUtil::add("ProblemBanningEstateManager", args); + if (ids_allowed.empty()) + { + delete change_info; + return; + } + } + if (!already_banned.empty()) + { + LLSD args; + args["AGENT"] = already_banned; + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents"); + LLNotificationsUtil::add(single ? "AgentIsAlreadyInList" : "AgentsAreAlreadyInList", args); + if (ids_allowed.empty()) + { + delete change_info; + return; + } + } + change_info->mAgentOrGroupIDs = ids_allowed; + change_info->mAgentNames = names_allowed; + } + + LLSD args; + args["ALL_ESTATES"] = all_estates_text(); + LLNotification::Params params(change_info->mDialogName); + params.substitutions(args) + .payload(change_info->asLLSD()) + .functor.function(accessCoreConfirm); + + if (LLPanelEstateInfo::isLindenEstate()) + { + // just apply to this estate + LLNotifications::instance().forceResponse(params, 0); + } + else + { + // ask if this estate or all estates with this owner + LLNotifications::instance().add(params); + } +} + +// static +void LLPanelEstateAccess::accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name) +{ + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name); + if (!name_list) return; + + std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected(); + if (list_vector.size() == 0) + return; + + LLSD payload; + payload["operation"] = (S32)operation_flag; + payload["dialog_name"] = dialog_name; + + for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin(); + iter != list_vector.end(); + iter++) + { + LLScrollListItem *item = (*iter); + payload["allowed_ids"].append(item->getUUID()); + } + + LLNotification::Params params("ChangeLindenAccess"); + params.payload(payload) + .functor.function(accessRemoveCore2); + + if (LLPanelEstateInfo::isLindenEstate()) + { + // warn on change linden estate + LLNotifications::instance().add(params); + } + else + { + // just proceed, as if clicking OK + LLNotifications::instance().forceResponse(params, 0); + } +} + +// static +bool LLPanelEstateAccess::accessRemoveCore2(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) + { + // abort + return false; + } + + // If Linden estate, can only apply to "this" estate, not all estates + // owned by NULL. + if (LLPanelEstateInfo::isLindenEstate()) + { + accessCoreConfirm(notification, response); + } + else + { + LLSD args; + args["ALL_ESTATES"] = all_estates_text(); + LLNotificationsUtil::add(notification["payload"]["dialog_name"], + args, + notification["payload"], + accessCoreConfirm); + } + return false; +} + +// Used for both access add and remove operations, depending on the mOperationFlag +// passed in (ESTATE_ACCESS_BANNED_AGENT_ADD, ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, etc.) +// static +bool LLPanelEstateAccess::accessCoreConfirm(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger(); + U32 flags = originalFlags; + + LLViewerRegion* region = gAgent.getRegion(); + + if (option == 2) // cancel + { + return false; + } + else if (option == 1) + { + // All estates, either than I own or manage for this owner. + // This will be verified on simulator. JC + if (!region) return false; + if (region->getOwner() == gAgent.getID() + || gAgent.isGodlike()) + { + flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES; + } + else if (region->isEstateManager()) + { + flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES; + } + } + + std::string names; + U32 listed_names = 0; + for (U32 i = 0; i < notification["payload"]["allowed_ids"].size(); ++i) + { + if (i + 1 != notification["payload"]["allowed_ids"].size()) + { + flags |= ESTATE_ACCESS_NO_REPLY; + } + else + { + flags &= ~ESTATE_ACCESS_NO_REPLY; + } + + const LLUUID id = notification["payload"]["allowed_ids"][i].asUUID(); + if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD) + && region && (region->getOwner() == id)) + { + LLNotificationsUtil::add("OwnerCanNotBeDenied"); + break; + } + + sendEstateAccessDelta(flags, id); + + if ((flags & (ESTATE_ACCESS_ALLOWED_GROUP_ADD | ESTATE_ACCESS_ALLOWED_GROUP_REMOVE)) == 0) + { + // fill the name list for confirmation + if (listed_names < MAX_LISTED_NAMES) + { + if (!names.empty()) + { + names += ", "; + } + if (!notification["payload"]["allowed_names"][i]["display_name"].asString().empty()) + { + names += notification["payload"]["allowed_names"][i]["display_name"].asString(); + } + else + { //try to get an agent name from cache + LLAvatarName av_name; + if (LLAvatarNameCache::get(id, &av_name)) + { + names += av_name.getCompleteName(); + } + } + + } + listed_names++; + } + } + if (listed_names > MAX_LISTED_NAMES) + { + LLSD args; + args["EXTRA_COUNT"] = llformat("%d", listed_names - MAX_LISTED_NAMES); + names += " " + LLTrans::getString("AndNMore", args); + } + + if (!names.empty()) // show the conirmation + { + LLSD args; + args["AGENT"] = names; + + if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE)) + { + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents"); + } + else if (flags & (ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_REMOVE)) + { + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents"); + } + + if (flags & ESTATE_ACCESS_APPLY_TO_ALL_ESTATES) + { + args["ESTATE"] = LLTrans::getString("RegionInfoAllEstates"); + } + else if (flags & ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES) + { + args["ESTATE"] = LLTrans::getString("RegionInfoManagedEstates"); + } + else + { + args["ESTATE"] = LLTrans::getString("RegionInfoThisEstate"); + } + + bool single = (listed_names == 1); + if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_ADD)) + { + LLNotificationsUtil::add(single ? "AgentWasAddedToList" : "AgentsWereAddedToList", args); + } + else if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | ESTATE_ACCESS_BANNED_AGENT_REMOVE)) + { + LLNotificationsUtil::add(single ? "AgentWasRemovedFromList" : "AgentsWereRemovedFromList", args); + } + } + + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (panel) + { + panel->setPendingUpdate(true); + } + + return false; +} + +// key = "estateaccessdelta" +// str(estate_id) will be added to front of list by forward_EstateOwnerRequest_to_dataserver +// str[0] = str(agent_id) requesting the change +// str[1] = str(flags) (ESTATE_ACCESS_DELTA_*) +// str[2] = str(agent_id) to add or remove +// static +void LLPanelEstateAccess::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_group_id) +{ + LLMessageSystem* msg = gMessageSystem; + msg->newMessage("EstateOwnerMessage"); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used + + msg->nextBlock("MethodData"); + msg->addString("Method", "estateaccessdelta"); + msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice()); + + std::string buf; + gAgent.getID().toString(buf); + msg->nextBlock("ParamList"); + msg->addString("Parameter", buf); + + buf = llformat("%u", flags); + msg->nextBlock("ParamList"); + msg->addString("Parameter", buf); + + agent_or_group_id.toString(buf); + msg->nextBlock("ParamList"); + msg->addString("Parameter", buf); + + gAgent.sendReliableMessage(); +} + +void LLPanelEstateAccess::updateChild(LLUICtrl* child_ctrl) +{ + // Ensure appropriate state of the management ui. + updateControls(gAgent.getRegion()); +} + +void LLPanelEstateAccess::updateLists() +{ + std::string cap_url = gAgent.getRegionCapability("EstateAccess"); + if (!cap_url.empty()) + { + LLCoros::instance().launch("LLFloaterRegionInfo::requestEstateGetAccessCoro", boost::bind(LLPanelEstateAccess::requestEstateGetAccessCoro, cap_url)); + } +} + +void LLPanelEstateAccess::requestEstateGetAccessCoro(std::string url) +{ + LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); + LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("requestEstateGetAccessoCoro", httpPolicy)); + LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); + + LLSD result = httpAdapter->getAndSuspend(httpRequest, url); + + LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; + LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + + LLNameListCtrl* allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list"); + if (allowed_agent_name_list && result.has("AllowedAgents")) + { + LLStringUtil::format_map_t args; + args["[ALLOWEDAGENTS]"] = llformat("%d", result["AllowedAgents"].size()); + args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args); + panel->getChild<LLUICtrl>("allow_resident_label")->setValue(LLSD(msg)); + + allowed_agent_name_list->clearSortOrder(); + allowed_agent_name_list->deleteAllItems(); + for (LLSD::array_const_iterator it = result["AllowedAgents"].beginArray(); it != result["AllowedAgents"].endArray(); ++it) + { + LLUUID id = (*it)["id"].asUUID(); + allowed_agent_name_list->addNameItem(id); + } + allowed_agent_name_list->sortByName(TRUE); + } + + LLNameListCtrl* banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list"); + if (banned_agent_name_list && result.has("BannedAgents")) + { + LLStringUtil::format_map_t args; + args["[BANNEDAGENTS]"] = llformat("%d", result["BannedAgents"].size()); + args["[MAXBANNED]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + std::string msg = LLTrans::getString("RegionInfoBannedResidents", args); + panel->getChild<LLUICtrl>("ban_resident_label")->setValue(LLSD(msg)); + + banned_agent_name_list->clearSortOrder(); + banned_agent_name_list->deleteAllItems(); + for (LLSD::array_const_iterator it = result["BannedAgents"].beginArray(); it != result["BannedAgents"].endArray(); ++it) + { + LLSD item; + item["id"] = (*it)["id"].asUUID(); + LLSD& columns = item["columns"]; + + columns[0]["column"] = "name"; // to be populated later + + columns[1]["column"] = "last_login_date"; + columns[1]["value"] = (*it)["last_login_date"].asString().substr(0, 16); // cut the seconds + + std::string ban_date = (*it)["ban_date"].asString(); + columns[2]["column"] = "ban_date"; + columns[2]["value"] = ban_date[0] != '0' ? ban_date.substr(0, 16) : LLTrans::getString("na"); // server returns the "0000-00-00 00:00:00" date in case it doesn't know it + + columns[3]["column"] = "bannedby"; + LLUUID banning_id = (*it)["banning_id"].asUUID(); + LLAvatarName av_name; + if (banning_id.isNull()) + { + columns[3]["value"] = LLTrans::getString("na"); + } + else if (LLAvatarNameCache::get(banning_id, &av_name)) + { + columns[3]["value"] = av_name.getCompleteName(); //TODO: fetch the name if it wasn't cached + } + + banned_agent_name_list->addElement(item); + } + banned_agent_name_list->sortByName(TRUE); + } + + LLNameListCtrl* allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list"); + if (allowed_group_name_list && result.has("AllowedGroups")) + { + LLStringUtil::format_map_t args; + args["[ALLOWEDGROUPS]"] = llformat("%d", result["AllowedGroups"].size()); + args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_GROUP_IDS); + std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args); + panel->getChild<LLUICtrl>("allow_group_label")->setValue(LLSD(msg)); + + allowed_group_name_list->clearSortOrder(); + allowed_group_name_list->deleteAllItems(); + for (LLSD::array_const_iterator it = result["AllowedGroups"].beginArray(); it != result["AllowedGroups"].endArray(); ++it) + { + LLUUID id = (*it)["id"].asUUID(); + allowed_group_name_list->addGroupNameItem(id); + } + allowed_group_name_list->sortByName(TRUE); + } + + LLNameListCtrl* estate_manager_name_list = panel->getChild<LLNameListCtrl>("estate_manager_name_list"); + if (estate_manager_name_list && result.has("Managers")) + { + LLStringUtil::format_map_t args; + args["[ESTATEMANAGERS]"] = llformat("%d", result["Managers"].size()); + args["[MAXMANAGERS]"] = llformat("%d", ESTATE_MAX_MANAGERS); + std::string msg = LLTrans::getString("RegionInfoEstateManagers", args); + panel->getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg)); + + estate_manager_name_list->clearSortOrder(); + estate_manager_name_list->deleteAllItems(); + for (LLSD::array_const_iterator it = result["Managers"].beginArray(); it != result["Managers"].endArray(); ++it) + { + LLUUID id = (*it)["agent_id"].asUUID(); + estate_manager_name_list->addNameItem(id); + } + estate_manager_name_list->sortByName(TRUE); + } + + + panel->updateControls(gAgent.getRegion()); +} + +//--------------------------------------------------------------------------- +// Access lists search +//--------------------------------------------------------------------------- +void LLPanelEstateAccess::onAllowedSearchEdit(const std::string& search_string) +{ + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + LLNameListCtrl* allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list"); + searchAgent(allowed_agent_name_list, search_string); +} + +void LLPanelEstateAccess::onAllowedGroupsSearchEdit(const std::string& search_string) +{ + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + LLNameListCtrl* allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list"); + searchAgent(allowed_group_name_list, search_string); +} + +void LLPanelEstateAccess::onBannedSearchEdit(const std::string& search_string) +{ + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + LLNameListCtrl* banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list"); + searchAgent(banned_agent_name_list, search_string); +} + +void LLPanelEstateAccess::searchAgent(LLNameListCtrl* listCtrl, const std::string& search_string) +{ + if (!listCtrl) return; + + if (!search_string.empty()) + { + listCtrl->setSearchColumn(0); // name column + listCtrl->selectItemByPrefix(search_string, FALSE); + } + else + { + listCtrl->deselectAllItems(TRUE); + } +} + +void LLPanelEstateAccess::copyListToClipboard(std::string list_name) +{ + LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess(); + if (!panel) return; + LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_name); + if (!name_list) return; + + std::vector<LLScrollListItem*> list_vector = name_list->getAllData(); + if (list_vector.size() == 0) return; + + LLSD::String list_to_copy; + for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin(); + iter != list_vector.end(); + iter++) + { + LLScrollListItem *item = (*iter); + if (item) + { + list_to_copy += item->getColumn(0)->getValue().asString(); + } + if (std::next(iter) != list_vector.end()) + { + list_to_copy += "\n"; + } + } + + LLClipboard::instance().copyToClipboard(utf8str_to_wstring(list_to_copy), 0, list_to_copy.length()); +} + +bool LLPanelEstateAccess::refreshFromRegion(LLViewerRegion* region) +{ + updateLists(); + return LLPanelRegionInfo::refreshFromRegion(region); +} + diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index c9d0e51640..5d0f5fc6fc 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -29,6 +29,7 @@ #define LL_LLFLOATERREGIONINFO_H #include <vector> +#include "llagent.h" #include "llassettype.h" #include "llfloater.h" #include "llhost.h" @@ -64,6 +65,7 @@ class LLPanelEstateCovenant; class LLPanelExperienceListEditor; class LLPanelExperiences; class LLPanelRegionExperiences; +class LLPanelEstateAccess; class LLEventTimer; class LLEnvironmentSettings; @@ -79,6 +81,7 @@ public: /*virtual*/ void onOpen(const LLSD& key); + /*virtual*/ void onClose(bool app_quitting); /*virtual*/ BOOL postBuild(); static void processEstateOwnerRequest(LLMessageSystem* msg, void**); @@ -92,6 +95,7 @@ public: //static void incrementSerial() { sRequestSerial++; } static LLPanelEstateInfo* getPanelEstate(); + static LLPanelEstateAccess* getPanelAccess(); static LLPanelEstateCovenant* getPanelCovenant(); static LLPanelRegionTerrainInfo* getPanelRegionTerrain(); static LLPanelRegionExperiences* getPanelExperiences(); @@ -110,12 +114,11 @@ private: LLFloaterRegionInfo(const LLSD& seed); ~LLFloaterRegionInfo(); - - protected: void onTabSelected(const LLSD& param); void disableTabCtrls(); void refreshFromRegion(LLViewerRegion* region); + void onGodLevelChange(U8 god_level); // member data LLTabContainer* mTab; @@ -123,6 +126,10 @@ protected: info_panels_t mInfoPanels; //static S32 sRequestSerial; // serial # of last EstateOwnerRequest static LLUUID sRequestInvoice; + +private: + LLAgent::god_level_change_slot_t mGodLevelChangeSlot; + }; @@ -163,6 +170,7 @@ protected: const LLUUID& invoice, const strings_t& strings); + // member data LLHost mHost; }; @@ -281,35 +289,11 @@ public: void onClickEditDayCycle(); void onClickEditDayCycleHelp(); - void onClickAddAllowedAgent(); - void onClickRemoveAllowedAgent(); - void onClickAddAllowedGroup(); - void onClickRemoveAllowedGroup(); - void onClickAddBannedAgent(); - void onClickRemoveBannedAgent(); - void onClickAddEstateManager(); - void onClickRemoveEstateManager(); void onClickKickUser(); - // Group picker callback is different, can't use core methods below - bool addAllowedGroup(const LLSD& notification, const LLSD& response); - void addAllowedGroup2(LLUUID id); - // Core methods for all above add/remove button clicks - static void accessAddCore(U32 operation_flag, const std::string& dialog_name); - static bool accessAddCore2(const LLSD& notification, const LLSD& response); - static void accessAddCore3(const uuid_vec_t& ids, void* data); - - static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name); - static bool accessRemoveCore2(const LLSD& notification, const LLSD& response); - - // used for both add and remove operations - static bool accessCoreConfirm(const LLSD& notification, const LLSD& response); bool kickUserConfirm(const LLSD& notification, const LLSD& response); - // Send the actual EstateOwnerRequest "estateaccessdelta" message - static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id); - void onKickUserCommit(const uuid_vec_t& ids); static void onClickMessageEstate(void* data); bool onMessageCommit(const LLSD& notification, const LLSD& response); @@ -345,7 +329,6 @@ protected: void commitEstateAccess(); void commitEstateManagers(); - void clearAccessLists(); BOOL checkSunHourSlider(LLUICtrl* child_ctrl); U32 mEstateID; @@ -507,4 +490,66 @@ private: LLUUID mDefaultExperience; }; + +class LLPanelEstateAccess : public LLPanelRegionInfo +{ + LOG_CLASS(LLPanelEnvironmentInfo); + +public: + LLPanelEstateAccess(); + + virtual BOOL postBuild(); + virtual void updateChild(LLUICtrl* child_ctrl); + + void updateControls(LLViewerRegion* region); + void updateLists(); + + void setPendingUpdate(bool pending) { mPendingUpdate = pending; } + bool getPendingUpdate() { return mPendingUpdate; } + + virtual bool refreshFromRegion(LLViewerRegion* region); + +private: + void onClickAddAllowedAgent(); + void onClickRemoveAllowedAgent(); + void onClickCopyAllowedList(); + void onClickAddAllowedGroup(); + void onClickRemoveAllowedGroup(); + void onClickCopyAllowedGroupList(); + void onClickAddBannedAgent(); + void onClickRemoveBannedAgent(); + void onClickCopyBannedList(); + void onClickAddEstateManager(); + void onClickRemoveEstateManager(); + void onAllowedSearchEdit(const std::string& search_string); + void onAllowedGroupsSearchEdit(const std::string& search_string); + void onBannedSearchEdit(const std::string& search_string); + + // Group picker callback is different, can't use core methods below + bool addAllowedGroup(const LLSD& notification, const LLSD& response); + void addAllowedGroup2(LLUUID id); + + // Core methods for all above add/remove button clicks + static void accessAddCore(U32 operation_flag, const std::string& dialog_name); + static bool accessAddCore2(const LLSD& notification, const LLSD& response); + static void accessAddCore3(const uuid_vec_t& ids, std::vector<LLAvatarName> names, void* data); + + static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name); + static bool accessRemoveCore2(const LLSD& notification, const LLSD& response); + + // used for both add and remove operations + static bool accessCoreConfirm(const LLSD& notification, const LLSD& response); + + // Send the actual EstateOwnerRequest "estateaccessdelta" message + static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id); + + static void requestEstateGetAccessCoro(std::string url); + + void searchAgent(LLNameListCtrl* listCtrl, const std::string& search_string); + void copyListToClipboard(std::string list_name); + + bool mPendingUpdate; + BOOL mCtrlsEnabled; +}; + #endif diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index fe75ab8e50..62e0e2d077 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -32,6 +32,7 @@ #include "llavatarnamecache.h" #include "llcachename.h" +#include "llfloater.h" #include "llfloaterreg.h" #include "llinventory.h" #include "llscrolllistitem.h" @@ -212,7 +213,10 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask) BOOL handled = FALSE; S32 column_index = getColumnIndexFromOffset(x); LLNameListItem* hit_item = dynamic_cast<LLNameListItem*>(hitItem(x, y)); - if (hit_item + LLFloater* floater = gFloaterView->getParentFloater(this); + if (floater + && floater->isFrontmost() + && hit_item && column_index == mNameColumnIndex) { // ...this is the column with the avatar name @@ -313,8 +317,19 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow( switch(name_item.target) { case GROUP: - gCacheName->getGroupName(id, fullname); - // fullname will be "nobody" if group not found + if (!gCacheName->getGroupName(id, fullname)) + { + avatar_name_cache_connection_map_t::iterator it = mGroupNameCacheConnections.find(id); + if (it != mGroupNameCacheConnections.end()) + { + if (it->second.connected()) + { + it->second.disconnect(); + } + mGroupNameCacheConnections.erase(it); + } + mGroupNameCacheConnections[id] = gCacheName->getGroup(id, boost::bind(&LLNameListCtrl::onGroupNameCache, this, _1, _2, item->getHandle())); + } break; case SPECIAL: // just use supplied name @@ -415,6 +430,20 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id) } } +// public +LLScrollListItem* LLNameListCtrl::getNameItemByAgentId(const LLUUID& agent_id) +{ + for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++) + { + LLScrollListItem* item = *it; + if (item && item->getUUID() == agent_id) + { + return item; + } + } + return NULL; +} + void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, std::string suffix, @@ -479,6 +508,31 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id, dirtyColumns(); } +void LLNameListCtrl::onGroupNameCache(const LLUUID& group_id, const std::string name, LLHandle<LLNameListItem> item) +{ + avatar_name_cache_connection_map_t::iterator it = mGroupNameCacheConnections.find(group_id); + if (it != mGroupNameCacheConnections.end()) + { + if (it->second.connected()) + { + it->second.disconnect(); + } + mGroupNameCacheConnections.erase(it); + } + + LLNameListItem* list_item = item.get(); + if (list_item && list_item->getUUID() == group_id) + { + LLScrollListCell* cell = list_item->getColumn(mNameColumnIndex); + if (cell) + { + cell->setValue(name); + setNeedsSort(); + } + } + + dirtyColumns(); +} void LLNameListCtrl::updateColumns(bool force_update) { diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 677b49e667..ef0be135e6 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -154,6 +154,8 @@ public: void removeNameItem(const LLUUID& agent_id); + LLScrollListItem* getNameItemByAgentId(const LLUUID& agent_id); + // LLView interface /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, @@ -171,6 +173,7 @@ public: private: void showInspector(const LLUUID& avatar_id, bool is_group, bool is_experience = false); void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, std::string suffix, std::string prefix, LLHandle<LLNameListItem> item); + void onGroupNameCache(const LLUUID& group_id, const std::string name, LLHandle<LLNameListItem> item); private: S32 mNameColumnIndex; @@ -179,6 +182,7 @@ private: bool mShortNames; // display name only, no SLID typedef std::map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t; avatar_name_cache_connection_map_t mAvatarNameCacheConnections; + avatar_name_cache_connection_map_t mGroupNameCacheConnections; S32 mPendingLookupsRemaining; namelist_complete_signal_t mNameListCompleteSignal; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index a7b2fafddf..2a61c26b30 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -40,6 +40,7 @@ #include "llfloateravatarpicker.h" #include "llfloateravatarrendersettings.h" #include "llfloateravatartextures.h" +#include "llfloaterbanduration.h" #include "llfloaterbigpreview.h" #include "llfloaterbeacons.h" #include "llfloaterbuildoptions.h" @@ -201,6 +202,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("avatar_render_settings", "floater_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarRenderSettings>); LLFloaterReg::add("avatar_textures", "floater_avatar_textures.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarTextures>); + LLFloaterReg::add("ban_duration", "floater_ban_duration.xml", &LLFloaterReg::build<LLFloaterBanDuration>); LLFloaterReg::add("beacons", "floater_beacons.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBeacons>); LLFloaterReg::add("bulk_perms", "floater_bulk_perms.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBulkPermission>); LLFloaterReg::add("buy_currency", "floater_buy_currency.xml", &LLFloaterBuyCurrency::buildFloater); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 0d7e295b9a..4d9288f152 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2892,6 +2892,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("DispatchRegionInfo"); capabilityNames.append("DirectDelivery"); capabilityNames.append("EnvironmentSettings"); + capabilityNames.append("EstateAccess"); capabilityNames.append("EstateChangeInfo"); capabilityNames.append("EventQueueGet"); capabilityNames.append("FacebookConnect"); diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml index 8ededff319..4a0b136235 100644 --- a/indra/newview/skins/default/xui/de/floater_auction.xml +++ b/indra/newview/skins/default/xui/de/floater_auction.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="LINDEN LAND VERKAUF STARTEN"> +<floater name="floater_auction" title="LINDEN-LANDVERKAUF STARTEN"> <floater.string name="already for sale"> Parzellen, die bereits zum Verkauf stehen, können nicht auktioniert werden. </floater.string> <check_box initial_value="true" label="Gelben Auswahlrahmen einschließen" name="fence_check"/> - <button label="Foto" label_selected="Foto" name="snapshot_btn"/> + <button label="Screenshot" label_selected="Screenshot" name="snapshot_btn"/> <button label="An jeden verkaufen" label_selected="An jeden verkaufen" name="sell_to_anyone_btn"/> <button label="Einstellungen löschen" label_selected="Einstellungen löschen" name="reset_parcel_btn"/> <button label="Auktion beginnen" label_selected="Auktion beginnen" name="start_auction_btn"/> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 931c338d35..a4dfde66bc 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -200,6 +200,7 @@ <combo_box.item label="Objekt bezahlen" name="Payobject"/> <combo_box.item label="Öffnen" name="Open"/> <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Keine" name="None"/> </combo_box> <check_box label="Zum Verkauf:" name="checkbox for sale" tool_tip="Ermöglicht, dass Einwohner dieses Objekt, seine Inhalte oder eine Kopie zum angegebenen Preis inworld erwerben."/> <spinner label="L$" name="Edit Cost" tool_tip="Objektkosten."/> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index 15e83de2d1..5917a0b529 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -13,6 +13,7 @@ <menu_item_call label="Kamerasteuerungen..." name="Camera Controls"/> <menu label="Bewegung" name="Movement"> <menu_item_call label="Hinsetzen" name="Sit Down Here"/> + <menu_item_call label="Aufstehen" name="Stand up"/> <menu_item_check label="Fliegen" name="Fly"/> <menu_item_check label="Immer rennen" name="Always Run"/> <menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index f41fe3139b..17ed6a5385 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -1588,6 +1588,30 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un <notification name="ProblemAddingEstateManagerBanned"> Verbannter Einwohner kann nicht zur Grundbesitzverwalterliste hinzugefügt werden. </notification> + <notification name="ProblemBanningEstateManager"> + Grundbesitzverwalter [AGENT] kann nicht zur Bannliste hinzugefügt werden. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> befindet sich bereits auf der Liste der zulässigen Gruppen. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] befindet sich bereits auf Ihrer [LIST_TYPE]-Liste. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] befinden sich bereits auf Ihrer [LIST_TYPE]-Liste. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] wurde der [LIST_TYPE]-Liste von [ESTATE] hinzugefügt. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] wurden zur [LIST_TYPE]-Liste von [ESTATE] hinzugefügt. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind. </notification> @@ -1905,7 +1929,7 @@ Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belas <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> <notification label="Grundbesitz wählen" name="EstateBannedAgentRemove"> - Einwohner nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von der Bannliste entfernen? + Den Einwohner nur für diesen Grundbesitz oder für [ALL_ESTATES] von der Bannliste entfernen? <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> <notification label="Grundbesitz wählen" name="EstateManagerAdd"> @@ -3188,16 +3212,22 @@ Klicken Sie auf 'Akzeptieren ', um dem Chat beizutreten, oder auf &a Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später. Sie werden nun wieder mit dem Chat in Ihrer Nähe verbunden. </notification> <notification name="VoiceEffectsExpired"> - Ein oder mehrere Ihrer Voice-Morph-Abos ist/sind abgelaufen. -[[URL] Hier klicken], um Ihr Abo zu erneuern. + Ein oder mehrere Ihrer Voice-Morph-Abos sind abgelaufen. +[[URL] Klicken Sie hier], um Ihr Abo zu erneuern. + +Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen. </notification> <notification name="VoiceEffectsExpiredInUse"> - Das aktive Voice-Morph-Abo ist abgelaufen. Ihre normalen Voice-Einstellungen werden angewendet. -[[URL] Hier klicken], um Ihr Abo zu erneuern. + Das aktive Voice-Morph-Abo ist abgelaufen. Ihre normalen Voice-Einstellungen werden angewendet. +[[URL] Klicken Sie hier], um Ihr Abo zu erneuern. + +Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen. </notification> <notification name="VoiceEffectsWillExpire"> - Ein oder mehrere Ihrer Voice-Morph-Abos werden in weniger als [INTERVAL] Tagen ablaufen. -[[URL] Hier klicken], um Ihr Abo zu erneuern. + Ein oder mehrere Ihrer Voice-Morph-Abos laufen in weniger als [INTERVAL] Tagen ab. +[[URL] Klicken Sie hier], um Ihr Abo zu erneuern. + +Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen. </notification> <notification name="VoiceEffectsNew"> Neue Voice-Morph-Effekte sind erhältlich! @@ -3249,6 +3279,9 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt. <notification name="SnapshotToComputerFailed"> Fehler beim Speichern des Bildes unter [PATH]: Zu wenig Speicherplatz auf dem Medium. [NEED_MEMORY]KB werden benötigt, es stehen jedoch nur [FREE_MEMORY]KB zur Verfügung. </notification> + <notification name="SnapshotToLocalDirNotExist"> + Fehler beim Speichern des Bildes unter [PATH]: Verzeichnis nicht vorhanden. + </notification> <notification name="PresetNotSaved"> Fehler beim Speichern der Voreinstellung [NAME]. </notification> diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml index 32c9598edf..287f55a127 100644 --- a/indra/newview/skins/default/xui/de/panel_login.xml +++ b/indra/newview/skins/default/xui/de/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=de</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=de + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Benutzername" name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/> @@ -11,8 +16,13 @@ </combo_box> <button label="Anmelden" name="connect_btn"/> <check_box label="Details speichern" name="remember_check"/> - <text name="forgot_password_text">Kennwort vergessen</text> + <text name="forgot_password_text"> + Kennwort vergessen + </text> <combo_box label="Grid auswählen" name="server_combo"/> + <text name="sign_up_text"> + Registrieren + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_login_first.xml b/indra/newview/skins/default/xui/de/panel_login_first.xml index 44637d5159..038001157e 100644 --- a/indra/newview/skins/default/xui/de/panel_login_first.xml +++ b/indra/newview/skins/default/xui/de/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=de </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> Kennwort vergessen </text> + <text name="sign_up_text"> + Registrieren + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_access.xml b/indra/newview/skins/default/xui/de/panel_region_access.xml new file mode 100644 index 0000000000..4ebc4867fb --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Zugang" name="Access"> + <tab_container name="tabs"> + <panel label="GRUNDBESITZVERWALTER" name="estate_managers_panel"> + <text name="estate_manager_label"> + Grundbesitzverwalter: + </text> + <name_list name="estate_manager_name_list"> + <columns label="Name" name="name"/> + </name_list> + <button label="Hinzufügen..." name="add_estate_manager_btn"/> + <button label="Entfernen..." name="remove_estate_manager_btn"/> + </panel> + <panel label="ZULÄSSIG" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="Zulässige Agenten suchen" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Immer zugelassen: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Name" name="name"/> + </name_list> + <button label="Hinzufügen..." name="add_allowed_avatar_btn"/> + <button label="Entfernen..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="ZULÄSSIGE GRUPPEN" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="Zulässige Gruppen Suchen" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Immer zugelassene Gruppen: + </text> + <name_list name="allowed_group_name_list"> + <columns label="Name" name="name"/> + </name_list> + <button label="Hinzufügen..." name="add_allowed_group_btn"/> + <button label="Entfernen..." name="remove_allowed_group_btn"/> + </panel> + <panel label="VERBANNT" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Verbannte Agenten suchen" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Immer verbannt: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Name" name="name"/> + <columns label="Letztes Login-Datum" name="last_login_date"/> + <columns label="Datum der Verbannung" name="ban_date"/> + <columns label="Verbannt von" name="bannedby"/> + </name_list> + <button label="Hinzufügen..." name="add_banned_avatar_btn"/> + <button label="Entfernen..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml index 2a7b654954..b713dd58d0 100644 --- a/indra/newview/skins/default/xui/de/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml @@ -16,7 +16,7 @@ (unbekannt) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Nur nachstehend aufgelistete Einwohner und Gruppen zulassen" name="estate_restricted_access"/> + <radio_item label="Nur Einwohner und Gruppen zulassen, die im Reiter "Zugang" aufgelistet sind." name="estate_restricted_access"/> <radio_item label="Alle Besucher zugelassen" name="estate_public_access"/> </radio_group> <check_box label="Muss 18+ sein" name="limit_age_verified" tool_tip="Nur Einwohner, die mindestens 18 Jahre alt sind, können diesen Grundbesitz betreten. Weitere Informationen finden Sie unter [SUPPORT_SITE]."/> diff --git a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml index 1a3cd083f5..3ae76fd9c9 100644 --- a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Objekt bezahlen" name="Payobject"/> <combo_box.item label="Öffnen" name="Open"/> <combo_box.item label="Zoomen" name="Zoom"/> + <combo_box.item label="Keine" name="None"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index ac1f0d18e8..6e980d1609 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -2228,6 +2228,18 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich unter http://suppo <string name="RegionInfoListTypeBannedAgents"> Immer verbannt </string> + <string name="RegionInfoAllEstates"> + alle Grundbesitze + </string> + <string name="RegionInfoManagedEstates"> + verwaltete Grundbesitze + </string> + <string name="RegionInfoThisEstate"> + dieser Grundbesitz + </string> + <string name="AndNMore"> + und [EXTRA_COUNT] weitere + </string> <string name="ScriptLimitsParcelScriptMemory"> Parzellenskript-Speicher </string> 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 535af317d9..d04e738b22 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -22,6 +22,14 @@ "Parcel_R_Dark" </floater.string> <floater.string + name="Hours"> + [HOURS] hrs. + </floater.string> + <floater.string + name="Hour"> + hr. + </floater.string> + <floater.string name="Minutes"> [MINUTES] min. </floater.string> @@ -37,6 +45,10 @@ name="Remaining"> remaining </floater.string> + <floater.string + name="Always"> + Always + </floater.string> <tab_container follows="all" halign="left" @@ -2063,19 +2075,29 @@ Only large parcels can be listed in search. name="BanCheck" top="0" width="200"> - Always banned ([COUNT], max [MAX]) + Banned ([COUNT], max [MAX]) </text> <name_list column_padding="0" follows="top|bottom" - heading_height="14" + heading_height="16" height="125" layout="topleft" left="0" multi_select="true" + draw_heading="true" name="BannedList" tool_tip="([LISTED] listed, [MAX] max)" - width="230" /> + width="230"> + <columns + label="Name" + name="name" + width="155" /> + <columns + label="Duration" + name="duration" + width="75" /> + </name_list> <button follows="bottom" height="23" diff --git a/indra/newview/skins/default/xui/en/floater_ban_duration.xml b/indra/newview/skins/default/xui/en/floater_ban_duration.xml new file mode 100644 index 0000000000..5562f28877 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_ban_duration.xml @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + can_minimize="false" + can_tear_off="false" + can_resize="false" + can_drag_on_left="false" + can_close="true" + height="150" + layout="topleft" + name="ban_duration" + title="Ban duration" + single_instance="true" + width="180"> + <text + type="string" + length="1" + follows="left|top" + height="15" + layout="topleft" + left="15" + name="duration_textbox" + top="10" + width="75"> + Ban duration: + </text> + + <radio_group + draw_border="false" + enabled="true" + follows="left|top" + height="40" + left="20" + mouse_opaque="true" + name="ban_duration_radio" + tab_stop="true" + width="200"> + <radio_item + type="string" + follows="left|top" + height="20" + width="200" + label="Always" + name="always_radio"> + Always + </radio_item> + <radio_item + type="string" + follows="left|top" + height="20" + width="200" + label="Temporary" + name="temporary_radio"> + Temporary + </radio_item> + </radio_group> + + <spinner + allow_digits_only="true" + decimal_digits="0" + follows="left|top" + height="20" + increment="1" + max_val="8766" + min_val="1" + initial_val="1" + name="ban_hours" + top_delta="50" + left="40" + width="60"/> + <text + type="string" + length="1" + follows="left|top" + height="15" + left_delta="70" + name="hours_textbox" + top_delta="5" + width="75"> + hours. + </text> + + <button + follows="left|top" + height="23" + label="Ok" + left="15" + name="ok_btn" + top_delta="30" + width="75"> + </button> + <button + follows="left|top" + height="23" + label="Cancel" + left_pad="0" + name="cancel_btn" + top_delta="0" + width="75"> + </button> +</floater> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 121914b1cb..b7cd6517ea 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3815,6 +3815,62 @@ Can't add estate owner to estate 'Banned Resident' list. type="alertmodal"> Unable to add banned resident to estate manager list. </notification> + + <notification + icon="alertmodal.tga" + name="ProblemBanningEstateManager" + type="alertmodal"> +Unable to add estate manager [AGENT] to banned list. + </notification> + + <notification + icon="alertmodal.tga" + name="GroupIsAlreadyInList" + type="alertmodal"> +<nolink>[GROUP]</nolink> is already in the Allowed Groups list. + </notification> + + <notification + icon="alertmodal.tga" + name="AgentIsAlreadyInList" + type="alertmodal"> +[AGENT] is already in your [LIST_TYPE] list. + </notification> + + <notification + icon="alertmodal.tga" + name="AgentsAreAlreadyInList" + type="alertmodal"> +[AGENT] are already in your [LIST_TYPE] list. + </notification> + + <notification + icon="alertmodal.tga" + name="AgentWasAddedToList" + type="alertmodal"> +[AGENT] was added to [LIST_TYPE] list of [ESTATE]. + </notification> + + <notification + icon="alertmodal.tga" + name="AgentsWereAddedToList" + type="alertmodal"> +[AGENT] were added to [LIST_TYPE] list of [ESTATE]. + + </notification> + <notification + icon="alertmodal.tga" + name="AgentWasRemovedFromList" + type="alertmodal"> +[AGENT] was removed from [LIST_TYPE] list of [ESTATE]. + </notification> + + <notification + icon="alertmodal.tga" + name="AgentsWereRemovedFromList" + type="alertmodal"> +[AGENT] were removed from [LIST_TYPE] list of [ESTATE]. + </notification> <notification icon="alertmodal.tga" @@ -4616,7 +4672,8 @@ Add to allowed list for this estate only or for [ALL_ESTATES]? icon="alert.tga" label="Select estate" name="EstateAllowedAgentRemove" - type="alert"> + type="alertmodal"> + <unique/> Remove from allowed list for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate @@ -4645,7 +4702,8 @@ Add to group allowed list for this estate only or for [ALL_ESTATES]? icon="alert.tga" label="Select estate" name="EstateAllowedGroupRemove" - type="alert"> + type="alertmodal"> + <unique/> Remove from group allowed list for this estate only or [ALL_ESTATES]? <tag>group</tag> <tag>confirm</tag> @@ -4674,8 +4732,9 @@ Deny access for this estate only or for [ALL_ESTATES]? icon="alert.tga" label="Select estate" name="EstateBannedAgentRemove" - type="alert"> -Remove this Resident from the ban list for access for this estate only or for [ALL_ESTATES]? + type="alertmodal"> + <unique/> +Remove this Resident from the ban list for access for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate canceltext="Cancel" @@ -4702,7 +4761,8 @@ Add estate manager for this estate only or for [ALL_ESTATES]? icon="alert.tga" label="Select estate" name="EstateManagerRemove" - type="alert"> + type="alertmodal"> + <unique/> Remove estate manager for this estate only or for [ALL_ESTATES]? <tag>confirm</tag> <usetemplate diff --git a/indra/newview/skins/default/xui/en/panel_region_access.xml b/indra/newview/skins/default/xui/en/panel_region_access.xml new file mode 100644 index 0000000000..4be073195b --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_region_access.xml @@ -0,0 +1,421 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + border="true" + follows="top|left" + height="510" + help_topic="panel_region_access_tab" + label="Access" + layout="topleft" + left="0" + name="Access" + top="320" + width="530"> + + +<tab_container + bottom="-10" + follows="all" + layout="topleft" + left="3" + name="tabs" + tab_min_width="70" + tab_height="30" + tab_position="top" + top="10" + halign="center" + right="-5"> + +<!-- ============================= ESTATE MANAGERS tab ====================== --> + <panel + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" + bottom="-1" + follows="all" + label="ESTATE MANAGERS" + layout="topleft" + left="0" + help_topic="estate_managers_tab" + name="estate_managers_panel" + right="-1" + top="0"> + <text + type="string" + length="1" + bottom="34" + follows="left|top" + height="20" + layout="topleft" + name="estate_manager_label" + top_pad="10" + left="10" + width="200"> + Estate Managers: + </text> + <!-- Estate Managers box --> + <view_border + bevel_style="none" + follows="top|left" + height="400" + layout="topleft" + left="10" + top_pad="-5" + width="498" /> + <name_list + follows="left|top" + height="400" + layout="topleft" + left_delta="0" + multi_select="true" + draw_heading="true" + name="estate_manager_name_list" + top_delta="0" + width="498"> + <columns + label="Name" + name="name" + width="498" /> + </name_list> + <!-- Estate Managers buttons --> + <button + follows="left|top" + height="23" + label="Add..." + layout="topleft" + left="10" + name="add_estate_manager_btn" + top_pad="6" + width="114" /> + <button + follows="left|top" + height="23" + label="Remove..." + layout="topleft" + name="remove_estate_manager_btn" + left_pad="6" + width="114" /> + </panel> + + +<!-- ================================ ALLOWED tab =========================== --> + <panel + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" + bottom="-1" + follows="all" + label="ALLOWED" + layout="topleft" + left="0" + help_topic="allowed_tab" + name="allowed_panel" + right="-1" + top="0"> + <panel + follows="left|top|right" + height="27" + label="top_panel" + layout="topleft" + left="0" + name="allowed_search_panel" + right="-1" + top="0"> + <filter_editor + follows="left|top|right" + height="23" + layout="topleft" + left="6" + label="Search allowed agents" + max_length_chars="300" + name="allowed_search_input" + text_color="Black" + text_pad_left="10" + top="4" + width="440" /> + <button + follows="left|top" + height="23" + label="Copy" + layout="topleft" + left_pad="10" + name="copy_allowed_list_btn" + width="40" /> + </panel> + <text + type="string" + length="1" + bottom="34" + follows="left|top" + height="20" + layout="topleft" + name="allow_resident_label" + top_pad="10" + left="10" + width="200"> + Always allowed: + </text> + <!-- Always allowed box --> + <view_border + bevel_style="none" + follows="top|left" + height="370" + layout="topleft" + left="10" + top_pad="-5" + width="498" /> + <name_list + follows="left|top" + height="370" + layout="topleft" + left_delta="0" + multi_select="true" + draw_heading="true" + name="allowed_avatar_name_list" + top_delta="0" + width="498"> + <columns + label="Name" + name="name" + width="498" /> + </name_list> + <!-- Always allowed buttons --> + <button + follows="left|top" + height="23" + label="Add..." + layout="topleft" + left="10" + name="add_allowed_avatar_btn" + top_pad="6" + width="114" /> + <button + follows="left|top" + height="23" + label="Remove..." + layout="topleft" + name="remove_allowed_avatar_btn" + left_pad="6" + width="114" /> + </panel> + + <!-- ============================= ALLOWED GROUPS tab ======================= --> + <panel + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" + bottom="-1" + follows="all" + label="ALLOWED GROUPS" + layout="topleft" + left="0" + help_topic="allowed_groups_tab" + name="allowed_groups_panel" + right="-1" + top="0"> + <panel + follows="left|top|right" + height="27" + label="top_panel" + layout="topleft" + left="0" + name="allowed_group_search_panel" + right="-1" + top="0"> + <filter_editor + follows="left|top|right" + height="23" + layout="topleft" + left="6" + label="Search allowed groups" + max_length_chars="300" + name="allowed_group_search_input" + text_color="Black" + text_pad_left="10" + top="4" + width="440" /> + <button + follows="left|top" + height="23" + label="Copy" + layout="topleft" + left_pad="10" + name="copy_allowed_group_list_btn" + width="40" /> + </panel> + <text + type="string" + length="1" + follows="left|top" + height="20" + layout="topleft" + left="10" + name="allow_group_label" + top_pad="10" + width="200"> + Groups always allowed: + </text> + <!-- Groups always allowed box --> + <view_border + bevel_style="none" + follows="top|left" + height="370" + layout="topleft" + left="10" + top_pad="-5" + width="498" /> + <name_list + follows="left|top" + height="370" + layout="topleft" + left_delta="0" + multi_select="true" + draw_heading="true" + name="allowed_group_name_list" + top_delta="0" + width="498"> + <columns + label="Name" + name="name" + width="498" /> + </name_list> + <!-- Groups always allowed buttons --> + <button + follows="left|top" + height="23" + label="Add..." + layout="topleft" + left="10" + name="add_allowed_group_btn" + top_pad="6" + width="114" /> + <button + follows="left|top" + height="23" + label="Remove..." + layout="topleft" + name="remove_allowed_group_btn" + left_pad="6" + top_delta="0" + width="114" /> + </panel> + + <!-- ================================ BANNED tab ============================ --> + <panel + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" + bottom="-1" + follows="all" + label="BANNED" + layout="topleft" + left="0" + help_topic="banned_tab" + name="banned_panel" + right="-1" + top="0"> + <panel + follows="left|top|right" + height="27" + label="top_panel" + layout="topleft" + left="0" + name="banned_search_panel" + right="-1" + top="0"> + <filter_editor + follows="left|top|right" + height="23" + layout="topleft" + left="6" + label="Search banned agents" + max_length_chars="300" + name="banned_search_input" + text_color="Black" + text_pad_left="10" + top="4" + width="440" /> + <button + follows="left|top" + height="23" + label="Copy" + layout="topleft" + left_pad="10" + name="copy_banned_list_btn" + width="40" /> + </panel> + <text + type="string" + length="1" + follows="left|top" + height="20" + layout="topleft" + left="10" + name="ban_resident_label" + top_pad="10" + width="200"> + Always banned: + </text> + <!-- Always banned box --> + <view_border + bevel_style="none" + follows="top|left" + height="370" + layout="topleft" + left="10" + top_pad="-5" + width="498" /> + <name_list + follows="left|top" + height="370" + layout="topleft" + left_delta="0" + multi_select="true" + draw_heading="true" + name="banned_avatar_name_list" + top_delta="0" + width="498"> + <columns + label="Name" + name="name" + width="140" /> + <columns + label="Last login date" + name="last_login_date" + width="100" /> + <columns + label="Date banned" + name="ban_date" + width="100" /> + <columns + label="Banned by" + name="bannedby" + width="140" /> + </name_list> + <!-- Always banned buttons --> + <button + follows="left|top" + height="23" + label="Add..." + layout="topleft" + left="10" + name="add_banned_avatar_btn" + top_pad="6" + width="114" /> + <button + follows="left|top" + height="23" + label="Remove..." + layout="topleft" + name="remove_banned_avatar_btn" + left_pad="6" + top_delta="0" + width="114" /> + </panel> + + +</tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml index a0c1dd0be6..9b9c870c49 100644 --- a/indra/newview/skins/default/xui/en/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml @@ -82,7 +82,7 @@ <view_border bevel_style="none" follows="top|left" - height="105" + height="185" layout="topleft" left="10" top_pad="5" @@ -96,7 +96,7 @@ width="200"> <radio_item height="16" - label="Allow only residents and groups listed below" + label="Allow only residents and groups listed on the Access tab" layout="topleft" name="estate_restricted_access" /> <radio_item @@ -137,10 +137,10 @@ height="18" label="Allow Voice Chat" layout="topleft" - left="290" + left="20" name="voice_chat_check" - top_delta="-78" - width="200" /> + top_pad="2" + width="240" /> <check_box height="18" label="Allow Direct Teleport" @@ -148,7 +148,7 @@ left_delta="0" name="allow_direct_teleport" top_pad="2" - width="80" /> + width="240" /> <button enabled="false" follows="left|top" @@ -156,215 +156,9 @@ label="Apply" layout="topleft" name="apply_btn" - top_pad="30" - left_delta="0" - width="97" /> - - <text - type="string" - length="1" - bottom="34" - follows="left|top" - height="20" - layout="topleft" - name="estate_manager_label" - top_pad="25" - left="10" - width="200"> - Estate Managers: - </text> - <text - type="string" - length="1" - follows="left|top" - height="20" - layout="topleft" - left="280" - name="allow_resident_label" - top_delta="0" - width="200"> - Always allowed: - </text> - - <!-- Estate Managers box --> - <view_border - bevel_style="none" - follows="top|left" - height="71" - layout="topleft" - left="10" - top_pad="-5" - width="235" /> - <name_list - follows="left|top" - height="71" - layout="topleft" - left_delta="0" - multi_select="true" - name="estate_manager_name_list" - top_delta="0" - width="235" /> - - <!-- Always allowed box --> - <view_border - bevel_style="none" - follows="top|left" - height="71" - layout="topleft" - left="280" - top_delta="0" - width="235" /> - <name_list - follows="left|top" - height="71" - layout="topleft" - left_delta="0" - multi_select="true" - name="allowed_avatar_name_list" - top_delta="0" - width="235" /> - - <!-- Estate Managers buttons --> - <button - follows="left|top" - height="23" - label="Add..." - layout="topleft" - left="10" - name="add_estate_manager_btn" - top_pad="6" - width="114" /> - <button - follows="left|top" - height="23" - label="Remove..." - layout="topleft" - name="remove_estate_manager_btn" - left_pad="6" - width="114" /> - - <!-- Always allowed buttons --> - <button - follows="left|top" - height="23" - left="280" - label="Add..." - layout="topleft" - name="add_allowed_avatar_btn" - top_delta="0" - width="114" /> - <button - follows="left|top" - height="23" - label="Remove..." - layout="topleft" - name="remove_allowed_avatar_btn" - left_pad="6" - top_delta="0" - width="114" /> - - <text - type="string" - length="1" - follows="left|top" - height="20" - layout="topleft" - left="10" - name="allow_group_label" top_pad="10" - width="200"> - Groups always allowed: - </text> - <text - type="string" - length="1" - follows="left|top" - height="20" - layout="topleft" - left="280" - name="ban_resident_label" - top_delta="0" - width="200"> - Always banned: - </text> - - <!-- Groups always allowed box --> - <view_border - bevel_style="none" - follows="top|left" - height="71" - layout="topleft" - left="10" - top_pad="-5" - width="235" /> - <name_list - follows="left|top" - height="71" - layout="topleft" left_delta="0" - multi_select="true" - name="allowed_group_name_list" - top_delta="0" - width="235" /> - - <!-- Always banned box --> - <view_border - bevel_style="none" - follows="top|left" - height="71" - layout="topleft" - left="280" - top_delta="0" - width="235" /> - <name_list - follows="left|top" - height="71" - layout="topleft" - left_delta="0" - multi_select="true" - name="banned_avatar_name_list" - top_delta="0" - width="235" /> - - <!-- Groups always allowed buttons --> - <button - follows="left|top" - height="23" - label="Add..." - layout="topleft" - left="10" - name="add_allowed_group_btn" - top_pad="6" - width="114" /> - <button - follows="left|top" - height="23" - label="Remove..." - layout="topleft" - name="remove_allowed_group_btn" - left_pad="6" - top_delta="0" - width="114" /> - - <!-- Always banned buttons --> - <button - follows="left|top" - height="23" - label="Add..." - layout="topleft" - left="280" - name="add_banned_avatar_btn" - top_delta="0" - width="114" /> - <button - follows="left|top" - height="23" - label="Remove..." - layout="topleft" - name="remove_banned_avatar_btn" - top_delta="0" - left_pad="6" - width="114" /> + width="97" /> <button follows="left|top" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index d91f3ac095..4dbafd27e0 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2658,6 +2658,10 @@ If you continue to receive this message, please contact Second Life support for <string name="RegionInfoBannedResidents">Always banned: ([BANNEDAGENTS], max [MAXBANNED])</string> <string name="RegionInfoListTypeAllowedAgents">Always allowed</string> <string name="RegionInfoListTypeBannedAgents">Always banned</string> + <string name="RegionInfoAllEstates">all estates</string> + <string name="RegionInfoManagedEstates">managed estates</string> + <string name="RegionInfoThisEstate">this estate</string> + <string name="AndNMore">and [EXTRA_COUNT] more</string> <!-- script limits floater --> <string name="ScriptLimitsParcelScriptMemory">Parcel Script Memory</string> diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml index 6faf19dbb5..cbafe92cdf 100644 --- a/indra/newview/skins/default/xui/es/floater_auction.xml +++ b/indra/newview/skins/default/xui/es/floater_auction.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_auction" title="COMENZAR LA VENTA DE TERRENO LINDEN"> <floater.string name="already for sale"> - No puede subastar parcelas que ya están en venta. + No puedes ofertar en parcelas que ya están en venta. </floater.string> - <check_box initial_value="true" label="Incluir la valla amarilla de selección" name="fence_check"/> + <check_box initial_value="true" label="Incluir la cerca de selección amarilla" name="fence_check"/> <button label="Foto" label_selected="Foto" name="snapshot_btn"/> <button label="Vender a cualquiera" label_selected="Vender a cualquiera" name="sell_to_anyone_btn"/> - <button label="Limpiar las configuraciones" label_selected="Limpiar las configuraciones" name="reset_parcel_btn"/> + <button label="Borrar las configuraciones" label_selected="Borrar las configuraciones" name="reset_parcel_btn"/> <button label="Comenzar subasta" label_selected="Comenzar subasta" name="start_auction_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 52fd556b2b..6fce98472d 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -180,6 +180,7 @@ <combo_box.item label="Pagar al objeto" name="Payobject"/> <combo_box.item label="Abrirlo" name="Open"/> <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Ninguno" name="None"/> </combo_box> <check_box label="En venta:" name="checkbox for sale" tool_tip="Permite a las personas comprar este objeto, su contenido o su copia en el mundo virtual al precio indicado."/> <spinner label="L$" name="Edit Cost" tool_tip="Precio del objeto."/> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index afb6790a88..7cc3c0320a 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -13,6 +13,7 @@ <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"/> + <menu_item_call label="Levantarme" name="Stand up"/> <menu_item_check label="Volar" name="Fly"/> <menu_item_check label="Correr siempre" name="Always Run"/> <menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 78121c41fc..eac09b767b 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -1579,6 +1579,30 @@ Se superan en [NUM_EXCESS] los [MAX_AGENTS] permitidos en [LIST_TYPE]. <notification name="ProblemAddingEstateManagerBanned"> No se puede añadir un residente expulsado a la lista de administradores de estado. </notification> + <notification name="ProblemBanningEstateManager"> + No fue posible agregar al administrador de estado [AGENT] a la lista de prohibidos. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> ya está en la lista de Grupos autorizados. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] ya está en tu lista [LIST_TYPE]. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] ya está en tu lista [LIST_TYPE]. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] fue añadido a la lista [LIST_TYPE] de [ESTATE]. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] fueron añadidos a la lista [LIST_TYPE] de [ESTATE]. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] fue eliminado de la lista [LIST_TYPE] de [ESTATE]. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] fueron eliminados de la lista [LIST_TYPE] de [ESTATE]. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> No puedes cambiar la apariencia hasta que no se carguen la ropa y la forma. </notification> @@ -1897,7 +1921,7 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> </notification> <notification label="Seleccionar el estado" name="EstateBannedAgentRemove"> - ¿Quitar de la lista de prohibición de acceso a este residente para que acceda sólo a este estado o a [ALL_ESTATES]? + ¿Quitar a este Residente de la lista de acceso prohibido para este estado únicamente o para [ALL_ESTATES]? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todos los estados" yestext="Este estado"/> </notification> <notification label="Seleccionar el estado" name="EstateManagerAdd"> @@ -3172,16 +3196,22 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a Fallo al conectar a [VOICE_CHANNEL_NAME]; por favor, inténtalo más tarde. Vas a ser reconectado al chat de voz. </notification> <notification name="VoiceEffectsExpired"> - Una o más de las transformaciones de voz a las que estás suscrito han caducado. -[Pulsa aquí [URL]] para renovar la suscripción. + Una o más de las transformaciones de voz a las que estás suscrito han caducado. +[[URL] Pulsa aquí] para renovar la suscripción. + +Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz. </notification> <notification name="VoiceEffectsExpiredInUse"> - La transformación de voz activa ha caducado y se ha aplicado tu configuración de voz normal. -[Pulsa aquí [URL]] para renovar la suscripción. + La transformación de voz activa ha caducado y se ha aplicado tu configuración de voz normal. +[[URL] Pulsa aquí] para renovar la suscripción. + +Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz. </notification> <notification name="VoiceEffectsWillExpire"> - Una o más de tus transformaciones de voz caducarán en menos de [INTERVAL] días. -[Pulsa aquí [URL]] para renovar la suscripción. + Una o más de tus transformaciones de voz caducarán en menos de [INTERVAL] días. +[[URL] Pulsa aquí] para renovar la suscripción + +Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz. </notification> <notification name="VoiceEffectsNew"> Están disponibles nuevas transformaciones de voz. @@ -3233,6 +3263,9 @@ Por tu seguridad, serán bloqueadas durante unos segundos. <notification name="SnapshotToComputerFailed"> Error al guardar la foto en [PATH]: Disco lleno. Se requieren [NEED_MEMORY]KB pero solo hay [FREE_MEMORY]KB libres. </notification> + <notification name="SnapshotToLocalDirNotExist"> + Error al guardar la foto en [PATH]: El directorio no existe. + </notification> <notification name="PresetNotSaved"> Error al guardar el valor predefinido [NAME]. </notification> diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml index 5300fce153..f79d3b9422 100644 --- a/indra/newview/skins/default/xui/es/panel_login.xml +++ b/indra/newview/skins/default/xui/es/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=es</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=es + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Nombre de usuario" name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/> @@ -11,8 +16,13 @@ </combo_box> <button label="Iniciar sesión" name="connect_btn"/> <check_box label="Recordarme" name="remember_check"/> - <text name="forgot_password_text">Contraseña olvidada</text> + <text name="forgot_password_text"> + Contraseña olvidada + </text> <combo_box label="Seleccionar cuadrícula" name="server_combo"/> + <text name="sign_up_text"> + Regístrate + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_login_first.xml b/indra/newview/skins/default/xui/es/panel_login_first.xml index 7787c6526f..ccb6858351 100644 --- a/indra/newview/skins/default/xui/es/panel_login_first.xml +++ b/indra/newview/skins/default/xui/es/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=es </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> Contraseña olvidada </text> + <text name="sign_up_text"> + Regístrate + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_access.xml b/indra/newview/skins/default/xui/es/panel_region_access.xml new file mode 100644 index 0000000000..3177aa2ab2 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Acceso" name="Access"> + <tab_container name="tabs"> + <panel label="ADMINISTRADORES DE ESTADO" name="estate_managers_panel"> + <text name="estate_manager_label"> + Administradores de estado: + </text> + <name_list name="estate_manager_name_list"> + <columns label="Nombre" name="name"/> + </name_list> + <button label="Añadir..." name="add_estate_manager_btn"/> + <button label="Quitar..." name="remove_estate_manager_btn"/> + </panel> + <panel label="PERMITIDO" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="Buscar agentes autorizados" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Siempre autorizado: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Nombre" name="name"/> + </name_list> + <button label="Añadir..." name="add_allowed_avatar_btn"/> + <button label="Quitar..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="GRUPOS AUTORIZADOS:" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="Buscar grupos autorizados" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Grupos siempre autorizados: + </text> + <name_list name="allowed_group_name_list"> + <columns label="Nombre" name="name"/> + </name_list> + <button label="Añadir..." name="add_allowed_group_btn"/> + <button label="Quitar..." name="remove_allowed_group_btn"/> + </panel> + <panel label="PROHIBIDO" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Buscar agentes prohibidos" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Siempre prohibido: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Nombre" name="name"/> + <columns label="Última fecha de inicio de sesión" name="last_login_date"/> + <columns label="Fecha de prohibición" name="ban_date"/> + <columns label="Prohibido por" name="bannedby"/> + </name_list> + <button label="Añadir..." name="add_banned_avatar_btn"/> + <button label="Quitar..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml index 7e12b0e599..b3ee34bbfd 100644 --- a/indra/newview/skins/default/xui/es/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml @@ -16,7 +16,7 @@ (desconocido) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Permitir únicamente a los residentes y grupos indicados a continuación" name="estate_restricted_access"/> + <radio_item label="Permitir únicamente a los residentes y grupos indicados en la pestaña Acceso" name="estate_restricted_access"/> <radio_item label="Cualquiera puede visitar" name="estate_public_access"/> </radio_group> <check_box label="Debe ser mayor de 18" name="limit_age_verified" tool_tip="Para poder acceder a este estado, los Residentes deben ser mayores de 18 años. Para más información, consulta [SUPPORT_SITE]."/> diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml index 874422c58b..3470416e61 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Pagar el objeto" name="Payobject"/> <combo_box.item label="Abrir" name="Open"/> <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Ninguno" name="None"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index a7d405f293..68cd72802d 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -2205,6 +2205,18 @@ Si sigues recibiendo el mismo mensaje, solicita ayuda al personal de asistencia <string name="RegionInfoListTypeBannedAgents"> Siempre prohibido </string> + <string name="RegionInfoAllEstates"> + todos los estados + </string> + <string name="RegionInfoManagedEstates"> + estados administrados + </string> + <string name="RegionInfoThisEstate"> + este estado + </string> + <string name="AndNMore"> + y [EXTRA_COUNT] más + </string> <string name="ScriptLimitsParcelScriptMemory"> Memoria de los scripts de la parcela </string> diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml index 6cef2a3591..b1bd2cdd2f 100644 --- a/indra/newview/skins/default/xui/fr/floater_auction.xml +++ b/indra/newview/skins/default/xui/fr/floater_auction.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="COMMENCER LA VENTE DE TERRAINS LINDEN"> +<floater name="floater_auction" title="COMMENCER LA VENTE DES TERRAINS LINDEN"> <floater.string name="already for sale"> Vous ne pouvez pas mettre aux enchères des parcelles déjà en vente. </floater.string> - <check_box initial_value="true" label="Inclure le marquage de sélection jaune" name="fence_check"/> - <button label="Capture d'écran" label_selected="Capture d'écran" name="snapshot_btn" width="110"/> - <button label="Vendre à n'importe qui" label_selected="Vendre à n'importe qui" name="sell_to_anyone_btn"/> + <check_box initial_value="true" label="Inclure la cloison jaune de sélection" name="fence_check"/> + <button label="Photo" label_selected="Photo" name="snapshot_btn" width="110"/> + <button label="Vendre à n’importe qui" label_selected="Vendre à n’importe qui" name="sell_to_anyone_btn"/> <button label="Effacer les paramètres" label_selected="Effacer les paramètres" name="reset_parcel_btn"/> <button label="Commencer les enchères" label_selected="Commencer les enchères" name="start_auction_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index f0d7b3416d..9597d38dca 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -200,6 +200,7 @@ <combo_box.item label="Payer l'objet" name="Payobject"/> <combo_box.item label="Ouvrir" name="Open"/> <combo_box.item label="Zoomer" name="Zoom"/> + <combo_box.item label="Aucun" name="None"/> </combo_box> <check_box label="À vendre :" name="checkbox for sale" tool_tip="Permet aux gens d'acheter cet objet, son contenu ou de le copier dans Second Life à un prix donné."/> <spinner label="L$" name="Edit Cost" tool_tip="Coût de l'objet."/> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index c15a27aac4..12c50464da 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -13,6 +13,7 @@ <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"/> + <menu_item_call label="Se lever" name="Stand up"/> <menu_item_check label="Voler" name="Fly"/> <menu_item_check label="Toujours courir" name="Always Run"/> <menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 18b3b2a35e..3ac2cfb69b 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -1571,6 +1571,30 @@ Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS]. <notification name="ProblemAddingEstateManagerBanned"> Impossible d’ajouter un résident banni à la liste des gérants de domaine. </notification> + <notification name="ProblemBanningEstateManager"> + Impossible d'ajouter le gérant de domaine à la liste interdite. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> est déjà dans la liste des groupes autorisés. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] est déjà dans votre liste [LIST_TYPE]. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] sont déjà dans votre liste [LIST_TYPE]. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] a été ajouté à la liste [LIST_TYPE] de [ESTATE]. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] ont été ajoutéq à la liste [LIST_TYPE] de [ESTATE]. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] a été supprimé de la liste [LIST_TYPE] de [ESTATE]. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] ont été supprimés de la liste [LIST_TYPE] de [ESTATE]. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Impossible de changer d'apparence jusqu'à ce que les habits et la silhouette soient chargés. </notification> @@ -1888,7 +1912,7 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> </notification> <notification label="Choisir le domaine" name="EstateBannedAgentRemove"> - Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ? + Supprimer ce résident de la liste des résidents interdits pour ce domaine uniquement ou pour [ALL_ESTATES] ? <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> </notification> <notification label="Choisir le domaine" name="EstateManagerAdd"> @@ -3172,16 +3196,22 @@ Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignore Échec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté(e) au chat vocal près de vous. </notification> <notification name="VoiceEffectsExpired"> - Au moins l'un des effets de voix auxquels vous êtes abonné a expiré. -[[URL] Cliquez ici] pour renouveler votre abonnement. + Au moins l'un des effets de voix auxquels vous êtes abonné a expiré. +[[URL] Cliquez ici] pour renouveler votre abonnement. + +Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix. </notification> <notification name="VoiceEffectsExpiredInUse"> L'effet de voix actif a expiré. Vos paramètres de voix normaux ont été rétablis. -[[URL] Cliquez ici] pour renouveler votre abonnement. +[[URL] Cliquez ici] pour renouveler votre abonnement. + +Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix. </notification> <notification name="VoiceEffectsWillExpire"> - Au moins l'un de vos effets de voix expirera dans moins de [INTERVAL] jours. -[[URL] Cliquez ici] pour renouveler votre abonnement. + Au moins l'un de vos effets de voix expirera dans moins de [INTERVAL] jours. +[[URL] Cliquez ici] pour renouveler votre abonnement. + +Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix. </notification> <notification name="VoiceEffectsNew"> De nouveaux effets de voix sont disponibles ! @@ -3233,6 +3263,9 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité. <notification name="SnapshotToComputerFailed"> Échec d’enregistrement de la photo dans [PATH] : Le disque est plein. [NEED_MEMORY]KB est nécessaire mais l'espace libre est de seulement [FREE_MEMORY]KB. </notification> + <notification name="SnapshotToLocalDirNotExist"> + Échec d’enregistrement de la photo dans [PATH] : Le répertoire n'existe pas. + </notification> <notification name="PresetNotSaved"> Erreur d’enregistrement du préréglage [NAME]. </notification> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index 2b8249c8a9..a4f0ff7061 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=fr</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=fr + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Nom d'utilisateur" name="username_combo" tool_tip="Nom d'utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/> @@ -11,8 +16,13 @@ </combo_box> <button label="Connexion" name="connect_btn"/> <check_box label="Mémoriser mes informations" name="remember_check"/> - <text name="forgot_password_text">Mot de passe oublié</text> - <combo_box label="Sélectionner la grille" name="server_combo" left_pad="20"/> + <text name="forgot_password_text"> + Mot de passe oublié + </text> + <combo_box label="Sélectionner la grille" left_pad="20" name="server_combo"/> + <text name="sign_up_text"> + S'inscrire + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_login_first.xml b/indra/newview/skins/default/xui/fr/panel_login_first.xml index 9534ac7b83..8f40d0230c 100644 --- a/indra/newview/skins/default/xui/fr/panel_login_first.xml +++ b/indra/newview/skins/default/xui/fr/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=fr </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -10,10 +13,13 @@ <combo_box label="Nom d'utilisateur" name="username_combo" tool_tip="Nom d'utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/> <line_editor label="Mot de passe" name="password_edit"/> <button label="Connexion" name="connect_btn"/> - <check_box label="Mémoriser mes informations" name="remember_check" font="SansSerifSmall"/> + <check_box font="SansSerifSmall" label="Mémoriser mes informations" name="remember_check"/> <text name="forgot_password_text"> Mot de passe oublié </text> + <text name="sign_up_text"> + S'inscrire + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/fr/panel_region_access.xml b/indra/newview/skins/default/xui/fr/panel_region_access.xml new file mode 100644 index 0000000000..db77f3b8f1 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="ACCÈS" name="Access"> + <tab_container name="tabs"> + <panel label="GÉRANTS DU DOMAINE" name="estate_managers_panel"> + <text name="estate_manager_label"> + Gérants du domaine : + </text> + <name_list name="estate_manager_name_list"> + <columns label="Nom" name="name"/> + </name_list> + <button label="Ajouter..." name="add_estate_manager_btn"/> + <button label="Supprimer..." name="remove_estate_manager_btn"/> + </panel> + <panel label="AUTORISÉ" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="Rechercher des agents autorisés" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Toujours autorisé : + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Nom" name="name"/> + </name_list> + <button label="Ajouter..." name="add_allowed_avatar_btn"/> + <button label="Supprimer..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="GROUPES AUTORISÉS" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="Rechercher des groupes autorisés" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Groupes toujours autorisés : + </text> + <name_list name="allowed_group_name_list"> + <columns label="Nom" name="name"/> + </name_list> + <button label="Ajouter..." name="add_allowed_group_btn"/> + <button label="Supprimer" name="remove_allowed_group_btn"/> + </panel> + <panel label="INTERDIT" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Rechercher des agents interdits" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Toujours interdit : + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Nom" name="name"/> + <columns label="Date de la dernière connexion" name="last_login_date"/> + <columns label="Date d'interdiction" name="ban_date"/> + <columns label="Interdit par" name="bannedby"/> + </name_list> + <button label="Ajouter..." name="add_banned_avatar_btn"/> + <button label="Supprimer..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml index 9bf3fdfc96..0987ef3fa3 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml @@ -18,7 +18,7 @@ domaine. (inconnu) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Autoriser uniquement les résidents et les groupes indiqués ci-dessous" name="estate_restricted_access"/> + <radio_item label="Autoriser uniquement les résidents et les groupes indiqués dans l'onglet Accès" name="estate_restricted_access"/> <radio_item label="Visite ouverte à tous" name="estate_public_access"/> </radio_group> <check_box label="Doit avoir plus de 18 ans" name="limit_age_verified" tool_tip="Pour accéder à ce domaine, les résidents doivent avoir au moins 18 ans. Consultez le [SUPPORT_SITE] pour plus d'informations."/> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml index 0b2ac87876..737ecb7ac5 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Payer l'objet" name="Payobject"/> <combo_box.item label="Ouvrir" name="Open"/> <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Aucun" name="None"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index d1d5d7edf6..9cd5770108 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -2229,6 +2229,18 @@ Si vous continuez de recevoir ce message, contactez l’assistance Second Life <string name="RegionInfoListTypeBannedAgents"> Toujours interdit </string> + <string name="RegionInfoAllEstates"> + tous les domaines + </string> + <string name="RegionInfoManagedEstates"> + domaines gérés + </string> + <string name="RegionInfoThisEstate"> + ce domaine + </string> + <string name="AndNMore"> + et [EXTRA_COUNT] plus + </string> <string name="ScriptLimitsParcelScriptMemory"> Mémoire des scripts de parcelles </string> diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml index 4cad8b744d..ea524a153c 100644 --- a/indra/newview/skins/default/xui/it/floater_auction.xml +++ b/indra/newview/skins/default/xui/it/floater_auction.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_auction" title="INIZIA LA VENDITA DI TERRENO LINDEN"> <floater.string name="already for sale"> - Non puoi mettere in asta terreni che sono già in vendita. + Non puoi mettere all’asta terreni che sono già in vendita. </floater.string> - <check_box initial_value="true" label="Includi barriere di selezione gialle" name="fence_check"/> - <button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/> + <check_box initial_value="true" label="Includi la parte selezionata in giallo" name="fence_check"/> + <button label="Istantanea" label_selected="Istantanea" name="snapshot_btn"/> <button label="Vendi a chiunque" label_selected="Vendi a chiunque" name="sell_to_anyone_btn"/> <button label="Cancella impostazioni" label_selected="Cancella impostazioni" name="reset_parcel_btn"/> <button label="Inizia l'asta" label_selected="Inizia l'asta" name="start_auction_btn"/> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 4359275dc2..a21ae9a485 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -207,6 +207,7 @@ <combo_box.item label="Paga l'oggetto" name="Payobject"/> <combo_box.item label="Apri" name="Open"/> <combo_box.item label="Ingrandisci" name="Zoom"/> + <combo_box.item label="Nessuno" name="None"/> </combo_box> <check_box label="In vendita:" name="checkbox for sale" tool_tip="Permette alla gente di comprare questo oggetto, il suo contenuto o la sua copia virtuale ad un prezzo stabilito."/> <spinner label="L$" name="Edit Cost" tool_tip="Costo oggetto."/> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 2bd8eeb8d9..ae82a89d28 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -13,6 +13,7 @@ <menu_item_call label="Controlli fotocamera..." name="Camera Controls"/> <menu label="Spostamento" name="Movement"> <menu_item_call label="Siedi" name="Sit Down Here"/> + <menu_item_call label="Alzati" name="Stand up"/> <menu_item_check label="Vola" name="Fly"/> <menu_item_check label="Corri sempre" name="Always Run"/> <menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 9a1b1a1968..07a3eb5095 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -1573,6 +1573,30 @@ Eccede il [MAX_AGENTS] [LIST_TYPE] limite di [NUM_EXCESS]. <notification name="ProblemAddingEstateManagerBanned"> Impossibile aggiungere il residente espulso alla lista dei gestori delle proprietà. </notification> + <notification name="ProblemBanningEstateManager"> + Impossibile aggiunere il gestore della proprietà immobiliare [AGENT] all’elenco degli espulsi. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> si trova già nell’elenco dei Gruppi ammessi. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] è gia nel tuo elenco [LIST_TYPE]. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] è gia nel tuo elenco [LIST_TYPE]. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] è stato aggiunto all’elenco [LIST_TYPE] di [ESTATE]. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] è stato aggiunto all’elenco [LIST_TYPE] di [ESTATE]. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] è stato rimosso dall’elenco [LIST_TYPE] di [ESTATE]. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] è stato rimosso dall’elenco [LIST_TYPE] di [ESTATE]. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Impossibile cambiare l'aspetto fisico finchè gli abiti e i vestiti non sono caricati. </notification> @@ -1892,7 +1916,7 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server. <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/> </notification> <notification label="Seleziona la proprietà" name="EstateBannedAgentRemove"> - Rimuovi questo residente dalla lista dei residenti bloccati nell'accesso solo a questa proprietà oppure per [ALL_ESTATES]? + Rimuovi questo Residente dall’elenco degli espulsi solo per questa proprietà immobiliare oppure per [ALL_ESTATES]? <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/> </notification> <notification label="Seleziona la proprietà" name="EstateManagerAdd"> @@ -3175,16 +3199,22 @@ Clicca su Accetta per unirti alla chat oppure su Declina per declinare l'in Collegamento a [VOICE_CHANNEL_NAME] non riuscito, riprova più tardi. Verrai ora ricollegato alla chat vocale nei dintorni. </notification> <notification name="VoiceEffectsExpired"> - Almeno una delle manipolazioni vocali alle quali sei iscritto è scaduta. -[[URL] Fai clic qui] per rinnovare l'abbonamento. + Almeno una delle manipolazioni vocali alle quali sei iscritto è scaduta. +[[URL] Fai clic qui] per rinnovare l'abbonamento. + +Se sei un membro Premium, [[PREMIUM_URL] fai clic qui] per ricevere in regalo la manipolazione vocale. </notification> <notification name="VoiceEffectsExpiredInUse"> - Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali. -[[URL] Fai clic qui] per rinnovare l'abbonamento. + Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali. +[[URL] Fai clic qui] per rinnovare l'abbonamento. + +Se sei un membro Premium, [[PREMIUM_URL] fai clic qui] per ricevere in regalo la manipolazione vocale. </notification> <notification name="VoiceEffectsWillExpire"> - Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni. -[[URL] Fai clic qui] per rinnovare l'abbonamento. + Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni. +[[URL] Fai clic qui] per rinnovare l'abbonamento. + +Se sei un membro Premium, [[PREMIUM_URL] fai clic qui] per ricevere in regalo la manipolazione vocale. </notification> <notification name="VoiceEffectsNew"> Sono disponibili nuove manipolazioni vocali. @@ -3236,6 +3266,9 @@ Per sicurezza, verranno bloccati per alcuni secondi. <notification name="SnapshotToComputerFailed"> Salvataggio istantanea in [PATH] non riuscito: Il disco è pieno. Sono necessari [NEED_MEMORY] KB ma sono disponibili solo [FREE_MEMORY] KB . </notification> + <notification name="SnapshotToLocalDirNotExist"> + Salvataggio istantanea in [PATH] non riuscito: La cartella non esiste. + </notification> <notification name="PresetNotSaved"> Errore durante il salvataggio del valore predefinito [NAME]. </notification> diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml index 6c1777163c..228bebd92a 100644 --- a/indra/newview/skins/default/xui/it/panel_login.xml +++ b/indra/newview/skins/default/xui/it/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=it</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=it + </panel.string> + <panel.string name="sign_up_url"> + http://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Nome utente" name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come roby12 o Stella Solare"/> @@ -11,8 +16,13 @@ </combo_box> <button label="Accedi" name="connect_btn"/> <check_box label="Ricordami" name="remember_check"/> - <text name="forgot_password_text">Password dimenticata</text> + <text name="forgot_password_text"> + Password dimenticata + </text> <combo_box label="Seleziona griglia" name="server_combo"/> + <text name="sign_up_text"> + Registrati + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_login_first.xml b/indra/newview/skins/default/xui/it/panel_login_first.xml index 6f120a17fc..5b04fd411a 100644 --- a/indra/newview/skins/default/xui/it/panel_login_first.xml +++ b/indra/newview/skins/default/xui/it/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=it </panel.string> + <panel.string name="sign_up_url"> + http://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> Password dimenticata </text> + <text name="sign_up_text"> + Registrati + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_access.xml b/indra/newview/skins/default/xui/it/panel_region_access.xml new file mode 100644 index 0000000000..06ab2b40e7 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="ACCESSO" name="Access"> + <tab_container name="tabs"> + <panel label="GESTORI DELLE PROPRIETÀ IMMOBILIARI" name="estate_managers_panel"> + <text name="estate_manager_label"> + Gestori delle proprietà immobiliari + </text> + <name_list name="estate_manager_name_list"> + <columns label="Nome" name="name"/> + </name_list> + <button label="Aggiungi..." name="add_estate_manager_btn"/> + <button label="Rimuovi..." name="remove_estate_manager_btn"/> + </panel> + <panel label="AMMESSO" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="Cerca agenti ammessi" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Sempre ammesso: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Nome" name="name"/> + </name_list> + <button label="Aggiungi..." name="add_allowed_avatar_btn"/> + <button label="Rimuovi..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="GRUPPI AMMESSI" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="Cerca gruppi consentiti" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Gruppi sempre consentiti: + </text> + <name_list name="allowed_group_name_list"> + <columns label="Nome" name="name"/> + </name_list> + <button label="Aggiungi..." name="add_allowed_group_btn"/> + <button label="Rimuovi..." name="remove_allowed_group_btn"/> + </panel> + <panel label="ESPULSI" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Cerca agenti espulsi" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Sempre espulsi: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Nome" name="name"/> + <columns label="Ultima data di accesso" name="last_login_date"/> + <columns label="Data espulsione" name="ban_date"/> + <columns label="Espulso da" name="bannedby"/> + </name_list> + <button label="Aggiungi..." name="add_banned_avatar_btn"/> + <button label="Rimuovi..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml index 3983d25111..b4422e4c60 100644 --- a/indra/newview/skins/default/xui/it/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml @@ -16,7 +16,7 @@ (sconosciuto) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Consenti solo residenti e gruppi elencati qui sotto" name="estate_restricted_access"/> + <radio_item label="Consenti accesso solo ai residenti e ai gruppi elencati nella scheda di Accesso" name="estate_restricted_access"/> <radio_item label="Chiunque può visitare" name="estate_public_access"/> </radio_group> <check_box label="È necessario avere più di 18 anni" name="limit_age_verified" tool_tip="Per poter visitare questa proprietà immobiliare i Residenti devono avere almeno 18 anni. Vedi [SUPPORT_SITE] per maggiori informazioni."/> diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml index 4736644dd4..a96bb15399 100644 --- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Paga oggetto" name="Payobject"/> <combo_box.item label="Apri" name="Open"/> <combo_box.item label="Ingrandisci" name="Zoom"/> + <combo_box.item label="Nessuno" name="None"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 11dbf8f96e..0ea6bd5d22 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -2213,6 +2213,18 @@ Se continui a ricevere questo messaggio, contatta l'assistenza Second Life <string name="RegionInfoListTypeBannedAgents"> Sempre esclusi: </string> + <string name="RegionInfoAllEstates"> + tutte le proprietà immobiliari + </string> + <string name="RegionInfoManagedEstates"> + proprietà immobiliari che gestisci + </string> + <string name="RegionInfoThisEstate"> + questa proprietà immobiliare + </string> + <string name="AndNMore"> + e [EXTRA_COUNT] ancora + </string> <string name="ScriptLimitsParcelScriptMemory"> Memoria dello script del lotto </string> diff --git a/indra/newview/skins/default/xui/ja/floater_auction.xml b/indra/newview/skins/default/xui/ja/floater_auction.xml index e9aa287f2c..21c8d90b01 100644 --- a/indra/newview/skins/default/xui/ja/floater_auction.xml +++ b/indra/newview/skins/default/xui/ja/floater_auction.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_auction" title="リンデンランドの販売開始"> <floater.string name="already for sale"> - 売り出し中の区画は、オークションに出品できません。 + 販売中の区画をオークションに出品することはできません。 </floater.string> - <check_box initial_value="true" label="黄色の選択フェンスを含める" name="fence_check"/> + <check_box initial_value="true" label="黄色のセレクションフェンスを含める" name="fence_check"/> <button label="スナップショット" label_selected="スナップショット" name="snapshot_btn"/> <button label="誰にでも販売" label_selected="誰にでも販売" name="sell_to_anyone_btn"/> <button label="設定をクリア" label_selected="設定をクリア" name="reset_parcel_btn"/> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index d21913919c..aec0dbdb55 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -206,6 +206,7 @@ <combo_box.item label="オブジェクトに支払う" name="Payobject"/> <combo_box.item label="開く" name="Open"/> <combo_box.item label="ズームする" name="Zoom"/> + <combo_box.item label="なし" name="None"/> </combo_box> <check_box label="販売対象:" name="checkbox for sale" tool_tip="このオブジェクトやオブジェクトの中身が購入できるようになるか、指定価格でインワールドにコピーできるようになります。"/> <spinner label="L$" name="Edit Cost" tool_tip="オブジェクトの価格。"/> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index a7c894ea69..7810094823 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -13,6 +13,7 @@ <menu_item_call label="カメラコントロール..." name="Camera Controls"/> <menu label="ムーブメント" name="Movement"> <menu_item_call label="座る" name="Sit Down Here"/> + <menu_item_call label="立ち上がる" name="Stand up"/> <menu_item_check label="飛ぶ" name="Fly"/> <menu_item_check label="常に走る" name="Always Run"/> <menu_item_call label="私のアニメーションを停止する" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index a73891c9eb..16aeb4dcd7 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1605,6 +1605,30 @@ SHA1 フィンガープリント: [MD5_DIGEST] <notification name="ProblemAddingEstateManagerBanned"> 追放された住人を不動産管理者リストに追加できません。 </notification> + <notification name="ProblemBanningEstateManager"> + 禁止リストに不動産マネージャー [AGENT] を追加できません。 + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> はすでに許可されたグループのリストに追加されています。 + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] はすでにあなたの [LIST_TYPE] リストに追加されています。 + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] はすでにあなたの [LIST_TYPE] リストに追加されています。 + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] が [ESTATE] の [LIST_TYPE] リストに追加されました。 + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] が [ESTATE] の [LIST_TYPE] リストに追加されました。 + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] が [ESTATE] の [LIST_TYPE] リストから削除されました。 + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] が [ESTATE] の [LIST_TYPE] リストから削除されました。 + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> 衣類およびシェイプが読み込まれるまでは、容姿の変更はできません。 </notification> @@ -1925,7 +1949,7 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name を参照してくだ <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> </notification> <notification label="不動産を選択" name="EstateBannedAgentRemove"> - この住人が、この不動産限定、または [ALL_ESTATES] にアクセスできるように、禁止リストから削除しますか? + この住人をこの不動産の立入禁止リストからのみ削除しますか?それとも [ALL_ESTATES] の立入禁止リストから削除しますか? <usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/> </notification> <notification label="不動産を選択" name="EstateManagerAdd"> @@ -3218,13 +3242,22 @@ M キーを押して変更します。 [VOICE_CHANNEL_NAME] への接続に失敗しました。あとで再度お試しください。 「近くのボイスチャット」に再接続されます。 </notification> <notification name="VoiceEffectsExpired"> - ボイスモーフィング効果の1つまたは複数の有効期限が終了しました。期限を延長・更新するには[[URL]こちらをクリック]してください。 + ボイスモーフィング効果の1つまたは複数の有効期限が終了しました。 +期限を延長・更新するには [[URL] Click here] をクリックしてください。 + +プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。 </notification> <notification name="VoiceEffectsExpiredInUse"> - ボイスモーフィング効果の有効期限が終了したため、あなたの通常のボイス設定が適用されました。期限を延長・更新するには[[URL]こちらをクリック]してください。 + ボイスモーフィング効果の有効期限が終了したため、あなたの通常のボイス設定が適用されました。 +期限を延長・更新するには [[URL] Click here] をクリックしてください。 + +プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。 </notification> <notification name="VoiceEffectsWillExpire"> - ボイスモーフィング効果の1つまたは複数の有効期限が[INTERVAL]日以内に終了します。期限を延長・更新するには[[URL]こちらをクリック]してください。 + ボイスモーフィング効果の1つまたは複数の有効期限が [INTERVAL] 日以内に終了します。 +期限を延長・更新するには [[URL] Click here] をクリックしてください。 + +プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。 </notification> <notification name="VoiceEffectsNew"> 新しいボイスモーフィング効果が登場! @@ -3276,6 +3309,9 @@ M キーを押して変更します。 <notification name="SnapshotToComputerFailed"> スナップショットを [PATH] に保存できませんでした:ディスクの空き容量が不足しています。[NEED_MEMORY]KB が必要ですが、[FREE_MEMORY]KB しかありません。 </notification> + <notification name="SnapshotToLocalDirNotExist"> + スナップショットを [PATH] に保存できませんでした:ディレクトリは存在しません。 + </notification> <notification name="PresetNotSaved"> プリセット [NAME] の保存エラー。 </notification> diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index 5f2007e0da..86e7e9dac4 100644 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=ja</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=ja + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="ユーザー名" name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/> @@ -11,8 +16,13 @@ </combo_box> <button label="ログイン" name="connect_btn"/> <check_box label="記憶する" name="remember_check"/> - <text name="forgot_password_text">パスワードを忘れた場合</text> + <text name="forgot_password_text"> + パスワードを忘れた場合 + </text> <combo_box label="グリッドを選択" name="server_combo"/> + <text name="sign_up_text"> + 登録 + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_login_first.xml b/indra/newview/skins/default/xui/ja/panel_login_first.xml index d350e2f9a2..644cee25f2 100644 --- a/indra/newview/skins/default/xui/ja/panel_login_first.xml +++ b/indra/newview/skins/default/xui/ja/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=ja </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> パスワードを忘れた場合 </text> + <text name="sign_up_text"> + 登録 + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_access.xml b/indra/newview/skins/default/xui/ja/panel_region_access.xml new file mode 100644 index 0000000000..c0612dd150 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="アクセス" name="Access"> + <tab_container name="tabs"> + <panel label="不動産マネージャー" name="estate_managers_panel"> + <text name="estate_manager_label"> + 不動産マネージャー: + </text> + <name_list name="estate_manager_name_list"> + <columns label="名前" name="name"/> + </name_list> + <button label="追加..." name="add_estate_manager_btn"/> + <button label="削除…" name="remove_estate_manager_btn"/> + </panel> + <panel label="許可" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="許可されたエージェントを検索" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + 常に許可: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="名前" name="name"/> + </name_list> + <button label="追加..." name="add_allowed_avatar_btn"/> + <button label="削除…" name="remove_allowed_avatar_btn"/> + </panel> + <panel label="許可されたグループ" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="許可されたグループを検索" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + 常に許可されたグループ: + </text> + <name_list name="allowed_group_name_list"> + <columns label="名前" name="name"/> + </name_list> + <button label="追加..." name="add_allowed_group_btn"/> + <button label="削除…" name="remove_allowed_group_btn"/> + </panel> + <panel label="禁止" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="禁止されたエージェントを検索" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + 常に禁止: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="名前" name="name"/> + <columns label="最後にログインした日" name="last_login_date"/> + <columns label="禁止された日付" name="ban_date"/> + <columns label="禁止した人:" name="bannedby"/> + </name_list> + <button label="追加..." name="add_banned_avatar_btn"/> + <button label="削除…" name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml index 77c7406952..6464a65feb 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml @@ -16,7 +16,7 @@ (不明) </text> <radio_group name="externally_visible_radio"> - <radio_item label="下記の住人とグループのみ許可する" name="estate_restricted_access"/> + <radio_item label="アクセスタブに記載された住人とグループのみ許可する" name="estate_restricted_access"/> <radio_item label="誰でも訪問可" name="estate_public_access"/> </radio_group> <check_box label="18 歳以上である必要があります" name="limit_age_verified" tool_tip="この不動産(エステート)にアクセスするには、18 才以上でなければなりません。詳細については、[SUPPORT_SITE] をご覧ください。"/> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml index 52f093e154..d8325d8dc0 100644 --- a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="オブジェクトに支払う" name="Payobject"/> <combo_box.item label="開く" name="Open"/> <combo_box.item label="ズーム" name="Zoom"/> + <combo_box.item label="なし" name="None"/> </combo_box> <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 f0fcbab642..497ea649d1 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -2227,6 +2227,18 @@ support@secondlife.com にお問い合わせください。 <string name="RegionInfoListTypeBannedAgents"> 常に禁止 </string> + <string name="RegionInfoAllEstates"> + すべての不動産 + </string> + <string name="RegionInfoManagedEstates"> + 管理されている不動産 + </string> + <string name="RegionInfoThisEstate"> + この不動産 + </string> + <string name="AndNMore"> + および [EXTRA_COUNT] つの不動産 + </string> <string name="ScriptLimitsParcelScriptMemory"> 区画スクリプトメモリ </string> diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml index 074f7bf001..92b983169d 100644 --- a/indra/newview/skins/default/xui/pt/floater_auction.xml +++ b/indra/newview/skins/default/xui/pt/floater_auction.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="INICIAR VENDA DE TERRENO LINDEN START"> +<floater name="floater_auction" title="INICIAR VENDA DE TERRENO LINDEN"> <floater.string name="already for sale"> - Você não pode leiloar terrenos que já estão configurados para venda. + Você não pode leiloar terrenos que já estão para venda. </floater.string> - <check_box initial_value="true" label="Incluir marcador de seleção amarelo" name="fence_check"/> + <check_box initial_value="true" label="Incluir uma cerca de seleção amarela" name="fence_check"/> <button label="Foto" label_selected="Foto" name="snapshot_btn"/> <button label="Vender a qualquer um" label_selected="Vender a qualquer um" name="sell_to_anyone_btn"/> - <button label="Clear Settings" label_selected="Limpar configurações" name="reset_parcel_btn"/> - <button label="Iniciar Leilão" label_selected="Iniciar Leilão" name="start_auction_btn"/> + <button label="Limpar configurações" label_selected="Limpar configurações" name="reset_parcel_btn"/> + <button label="Iniciar leilão" label_selected="Iniciar leilão" name="start_auction_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index 3875b403b1..0882f485a6 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -200,6 +200,7 @@ <combo_box.item label="Pagar objeto" name="Payobject"/> <combo_box.item label="Abrir" name="Open"/> <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Nenhum" name="None"/> </combo_box> <check_box label="À venda" name="checkbox for sale" tool_tip="Permita que as pessoas comprem esse objeto, seu conteúdo ou copiá-lo no mundo virtual por um preço específico."/> <spinner label="L$" name="Edit Cost" tool_tip="Custo do objeto."/> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index cff26196cc..e82b7bc62a 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -13,6 +13,7 @@ <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"/> + <menu_item_call label="Ficar de pé" name="Stand up"/> <menu_item_check label="Voar" name="Fly"/> <menu_item_check label="Correr sempre" name="Always Run"/> <menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 60607ee0b4..478af96e95 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -1565,6 +1565,30 @@ Ultrapassa o limite de [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS]. <notification name="ProblemAddingEstateManagerBanned"> Não foi possível adicionar residentes banidos à lista de gerentes de propriedades. </notification> + <notification name="ProblemBanningEstateManager"> + Não foi possível adicionar o gerente [AGENT] à lista de banimento. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> já está na lista de Grupos permitidos. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] já está na sua [LIST_TYPE] lista. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] já está na sua [LIST_TYPE] lista. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] foi adicionado na [LIST_TYPE] lista de [ESTATE]. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] foi adicionado na [LIST_TYPE] lista de [ESTATE]. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] foi removido da [LIST_TYPE] lista de [ESTATE]. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] foi removido da [LIST_TYPE] lista de [ESTATE]. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Não é possível alterar a aparência até que as roupas e formas estejam carregadas. </notification> @@ -1880,7 +1904,7 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar. <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/> </notification> <notification label="Selecione a propriedade" name="EstateBannedAgentRemove"> - Remover este residente da lista de banidos para acesso a esta propriedade apenas ou para [ALL_ESTATES]? + Remover este Residente da lista de banimento para acessar este estado somente ou para [ALL_ESTATES]? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/> </notification> <notification label="Selecione a propriedade" name="EstateManagerAdd"> @@ -3160,16 +3184,22 @@ Clique em Aceitar para atender ou em Recusar para recusar este convite. Clique Falha de conexão com [VOICE_CHANNEL_NAME]. Tente novamente mais tarde. Agora você será reconectado ao bate-papo local. </notification> <notification name="VoiceEffectsExpired"> - Um ou mais serviços de distorção de voz que você assinou veceu. -[[URL] Clique aqui] para renovar o serviço. + Um ou mais serviços de distorção de voz que você assinou venceu. +[[URL] Clique aqui] para renovar o serviço. + +Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz. </notification> <notification name="VoiceEffectsExpiredInUse"> - A Distorção de voz ativa expirou. Suas configurações de voz padrão foram ativadas. -[[URL] Clique aqui] para renovar o serviço. + A Distorção de voz ativa expirou. Suas configurações de voz padrão foram ativadas. +[[URL] Clique aqui] para renovar o serviço. + +Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz. </notification> <notification name="VoiceEffectsWillExpire"> - Uma ou mais das suas distorções de voz tem vencimento em menos de [INTERVAL] dias. -[[URL] Clique aqui] para renovar o serviço. + Uma ou mais das suas distorções de voz tem vencimento em menos de [INTERVAL] dias. +[[URL] Clique aqui] para renovar o serviço. + +Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz. </notification> <notification name="VoiceEffectsNew"> Novas Distorções de voz! @@ -3221,6 +3251,9 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes. <notification name="SnapshotToComputerFailed"> Falha ao salvar fotografia em [PATH]: Disco cheio. [NEED_MEMORY]KB é necessário, mas somente [FREE_MEMORY]KB está livre. </notification> + <notification name="SnapshotToLocalDirNotExist"> + Falha ao salvar fotografia em [PATH]: O diretório não existe. + </notification> <notification name="PresetNotSaved"> Erro ao salvar predefinição [NAME]. </notification> diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml index ffcf72b1b4..ffe637b3c1 100644 --- a/indra/newview/skins/default/xui/pt/panel_login.xml +++ b/indra/newview/skins/default/xui/pt/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php?lang=pt</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=pt + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Nome de usuário" name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 ou Magia Solar"/> @@ -11,8 +16,13 @@ </combo_box> <button label="Login" name="connect_btn"/> <check_box label="Lembrar-me" name="remember_check"/> - <text name="forgot_password_text">Senha esquecida</text> + <text name="forgot_password_text"> + Senha esquecida + </text> <combo_box label="Selecionar grade" name="server_combo"/> + <text name="sign_up_text"> + Cadastre-se + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_login_first.xml b/indra/newview/skins/default/xui/pt/panel_login_first.xml index 6e4ef65bea..86c61163bc 100644 --- a/indra/newview/skins/default/xui/pt/panel_login_first.xml +++ b/indra/newview/skins/default/xui/pt/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=pt </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> Senha esquecida </text> + <text name="sign_up_text"> + Cadastre-se + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_access.xml b/indra/newview/skins/default/xui/pt/panel_region_access.xml new file mode 100644 index 0000000000..cc2136a459 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Acesso" name="Access"> + <tab_container name="tabs"> + <panel label="GERENTES" name="estate_managers_panel"> + <text name="estate_manager_label"> + Gerentes: + </text> + <name_list name="estate_manager_name_list"> + <columns label="Nome" name="name"/> + </name_list> + <button label="Adicionar..." name="add_estate_manager_btn"/> + <button label="Remover..." name="remove_estate_manager_btn"/> + </panel> + <panel label="PERMITIDO" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="Buscar agentes permitidos" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Sempre permitido: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Nome" name="name"/> + </name_list> + <button label="Adicionar..." name="add_allowed_avatar_btn"/> + <button label="Remover..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="GRUPOS PERMITIDOS" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="Buscar grupos permitidos" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Grupos sempre permitidos: + </text> + <name_list name="allowed_group_name_list"> + <columns label="Nome" name="name"/> + </name_list> + <button label="Adicionar..." name="add_allowed_group_btn"/> + <button label="Remover..." name="remove_allowed_group_btn"/> + </panel> + <panel label="BANIDO" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Buscar agentes banidos" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Sempre banido: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Nome" name="name"/> + <columns label="Último acesso" name="last_login_date"/> + <columns label="Data do banimento" name="ban_date"/> + <columns label="Banido por" name="bannedby"/> + </name_list> + <button label="Adicionar..." name="add_banned_avatar_btn"/> + <button label="Remover..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml index 8b405f601a..ac864ebb4b 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml @@ -16,7 +16,7 @@ (desconhecido) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Permitir somente os residentes e os grupos listados abaixo" name="estate_restricted_access"/> + <radio_item label="Permitir somente residentes e grupos listados na aba Acesso" name="estate_restricted_access"/> <radio_item label="Qualquer um pode visitar" name="estate_public_access"/> </radio_group> <check_box label="Deve ser maior de 18 anos" name="limit_age_verified" tool_tip="Os residentes devem ter 18 anos ou mais para acessar esta propriedade. Consulte o [SUPPORT_SITE] para obter mais informações."/> diff --git a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml index d616bd5186..578d8761d1 100644 --- a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Pagar por objeto" name="Payobject"/> <combo_box.item label="Abrir" name="Open"/> <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Nenhum" name="None"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 7068d3b267..3075113480 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -2173,6 +2173,18 @@ Se você continuar a receber essa mensagem, entre em contato com o suporte do Se <string name="RegionInfoListTypeBannedAgents"> Sempre banido </string> + <string name="RegionInfoAllEstates"> + todos os terrenos + </string> + <string name="RegionInfoManagedEstates"> + administre terrenos + </string> + <string name="RegionInfoThisEstate"> + este terreno + </string> + <string name="AndNMore"> + e [EXTRA_COUNT] mais + </string> <string name="ScriptLimitsParcelScriptMemory"> Memória de scripts no lote </string> diff --git a/indra/newview/skins/default/xui/ru/floater_auction.xml b/indra/newview/skins/default/xui/ru/floater_auction.xml index 105c75c919..e6cc700024 100644 --- a/indra/newview/skins/default/xui/ru/floater_auction.xml +++ b/indra/newview/skins/default/xui/ru/floater_auction.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="НАЧАТЬ ПРОДАЖУ ЗЕМЛИ ЛИНДЕНОВ"> +<floater name="floater_auction" title="НАЧАТЬ ПРОДАЖУ ЗЕМЛИ LINDEN"> <floater.string name="already for sale"> Нельзя выставить на аукцион участки, которые уже продаются. </floater.string> <check_box initial_value="true" label="Включая желтую ограду вокруг выбранного участка" name="fence_check"/> - <button label="Снимок" label_selected="Снимок" name="snapshot_btn"/> + <button label="Моментальный снимок" label_selected="Моментальный снимок" name="snapshot_btn"/> <button label="Купить может каждый" label_selected="Купить может каждый" name="sell_to_anyone_btn"/> <button label="Очистить настройки" label_selected="Очистить настройки" name="reset_parcel_btn"/> <button label="Начать аукцион" label_selected="Начать аукцион" name="start_auction_btn"/> diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml index 3e1a81f101..82ee3c49ae 100644 --- a/indra/newview/skins/default/xui/ru/floater_tools.xml +++ b/indra/newview/skins/default/xui/ru/floater_tools.xml @@ -203,6 +203,7 @@ <combo_box.item label="Заплатить за объект" name="Payobject"/> <combo_box.item label="Открыть" name="Open"/> <combo_box.item label="Увеличение" name="Zoom"/> + <combo_box.item label="Нет" name="None"/> </combo_box> <check_box label="Для продажи:" name="checkbox for sale" tool_tip="Позволяет игрокам покупать этот объект, его содержимое или копировать его в игровом мире по указанной цене."/> <spinner label="L$" name="Edit Cost" tool_tip="Стоимость объекта."/> diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index d2ebfbecc0..876972ba24 100644 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -13,6 +13,7 @@ <menu_item_call label="Управление камерой..." name="Camera Controls"/> <menu label="Движение" name="Movement"> <menu_item_call label="Сесть" name="Sit Down Here"/> + <menu_item_call label="Встать" name="Stand up"/> <menu_item_check label="Полет" name="Fly"/> <menu_item_check label="Всегда бегать" name="Always Run"/> <menu_item_call label="Остановить анимацию" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index ad6dff2839..08accc39fe 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -1573,6 +1573,30 @@ <notification name="ProblemAddingEstateManagerBanned"> Невозможно добавить заблокированного жителя в список менеджеров землевладения. </notification> + <notification name="ProblemBanningEstateManager"> + Невозможно добавить заблокированного жителя в список менеджеров землевладения [AGENT]. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>\[GROUP]</nolink> уже находится в списке допущенных групп. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] уже находится на вашем [LIST_TYPE] листе. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] уже находится на вашем [LIST_TYPE] листе. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] был добавлен в [LIST_TYPE] лист [ESTATE]. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] был добавлен в [LIST_TYPE] лист [ESTATE]. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] был удален из [LIST_TYPE] листа [ESTATE]. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] был удален из [LIST_TYPE] листа [ESTATE]. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Нельзя изменять внешность, пока загружаются одежда и фигура. </notification> @@ -1888,7 +1912,7 @@ <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> </notification> <notification label="Выбрать землевладение" name="EstateBannedAgentRemove"> - Удалить этого жителя из списка запрета доступа только для этого землевладения или для [ALL_ESTATES]? + Удалить этого жителя из списка заблокированного доступа только для этого землевладения или для [ALL_ESTATES]? <usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Для всех землевладений" yestext="Для этого землевладения"/> </notification> <notification label="Выбрать землевладение" name="EstateManagerAdd"> @@ -3171,16 +3195,22 @@ Не удалось подключиться к [VOICE_CHANNEL_NAME], повторите попытку позже. Будет установлено подключение к локальному голосовому чату. </notification> <notification name="VoiceEffectsExpired"> - Истек срок действия одного или нескольких типов изменения голоса, на которые вы подписаны. -[[URL] Щелкните здесь], чтобы обновить подписку. + Истек срок действия подписки на один или несколько типов анимационного изменения голоса. +[[URL] Щелкните здесь], чтобы обновить подписку. + +Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса. </notification> <notification name="VoiceEffectsExpiredInUse"> - Истек срок действия активного типа изменения голоса, применены настройки вашего обычного голоса. -[[URL] Щелкните здесь], чтобы обновить подписку. + Истек срок действия анимационного изменения голоса, действуют настройки вашего обычного голоса. +[[URL] Щелкните здесь], чтобы обновить подписку. + +Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса. </notification> <notification name="VoiceEffectsWillExpire"> - Срок действия одного или нескольких ваших типов изменения голоса истекает через [INTERVAL] дней или раньше. -[[URL] Щелкните здесь], чтобы обновить подписку. + Срок действия одного или нескольких ваших типов анимационного изменения голоса истекает через [INTERVAL] дней или раньше. +[[URL] Щелкните здесь], чтобы обновить подписку. + +Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса. </notification> <notification name="VoiceEffectsNew"> Появились новые типы изменения голоса! @@ -3232,6 +3262,9 @@ <notification name="SnapshotToComputerFailed"> Не удалось сохранить моментальный снимок на [PATH]: Диск переполнен. Необходимо [NEED_MEMORY] Кбайт, но доступно только [FREE_MEMORY] Кбайт. </notification> + <notification name="SnapshotToLocalDirNotExist"> + Не удалось сохранить моментальный снимок на [PATH]: Каталог не существует. + </notification> <notification name="PresetNotSaved"> Ошибка при сохранении пресета [NAME]. </notification> diff --git a/indra/newview/skins/default/xui/ru/panel_login.xml b/indra/newview/skins/default/xui/ru/panel_login.xml index 2e0ae89b28..14107286e5 100644 --- a/indra/newview/skins/default/xui/ru/panel_login.xml +++ b/indra/newview/skins/default/xui/ru/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Имя пользователя" name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/> @@ -11,8 +16,13 @@ </combo_box> <button label="Войти" name="connect_btn"/> <check_box label="Запомнить меня" name="remember_check"/> - <text name="forgot_password_text">Забыли пароль?</text> + <text name="forgot_password_text"> + Забыли пароль? + </text> <combo_box label="Выберите сетку" name="server_combo"/> + <text name="sign_up_text"> + Регистрация + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_login_first.xml b/indra/newview/skins/default/xui/ru/panel_login_first.xml index bb4875373a..5db81ea7ca 100644 --- a/indra/newview/skins/default/xui/ru/panel_login_first.xml +++ b/indra/newview/skins/default/xui/ru/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> Забытый пароль </text> + <text name="sign_up_text"> + Регистрация + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/ru/panel_region_access.xml b/indra/newview/skins/default/xui/ru/panel_region_access.xml new file mode 100644 index 0000000000..48adfbcd95 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Доступ" name="Access"> + <tab_container name="tabs"> + <panel label="МЕНЕДЖЕРЫ ЗЕМЛЕВЛАДЕНИЯ" name="estate_managers_panel"> + <text name="estate_manager_label"> + Менеджеры землевладения: + </text> + <name_list name="estate_manager_name_list"> + <columns label="Имя" name="name"/> + </name_list> + <button label="Добавить..." name="add_estate_manager_btn"/> + <button label="Удалить..." name="remove_estate_manager_btn"/> + </panel> + <panel label="РАЗРЕШЕННЫЕ" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="Поиск допущенных агентов" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Разрешено всегда: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Имя" name="name"/> + </name_list> + <button label="Добавить..." name="add_allowed_avatar_btn"/> + <button label="Удалить..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="ДОПУЩЕННЫЕ ГРУППЫ" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="Поиск допущенных групп" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Допуск групп всегда разрешен: + </text> + <name_list name="allowed_group_name_list"> + <columns label="Имя" name="name"/> + </name_list> + <button label="Добавить..." name="add_allowed_group_btn"/> + <button label="Удалить..." name="remove_allowed_group_btn"/> + </panel> + <panel label="ЗАБЛОКИРОВАНЫ" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Поиск заблокированных агентов" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Всегда заблокированы: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Имя" name="name"/> + <columns label="Дата последнего входа" name="last_login_date"/> + <columns label="Дата блокировки" name="ban_date"/> + <columns label="Заблокированы по инициативе" name="bannedby"/> + </name_list> + <button label="Добавить..." name="add_banned_avatar_btn"/> + <button label="Удалить..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_region_estate.xml b/indra/newview/skins/default/xui/ru/panel_region_estate.xml index be93edf730..5789058b3b 100644 --- a/indra/newview/skins/default/xui/ru/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/ru/panel_region_estate.xml @@ -16,7 +16,7 @@ (неизвестно) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Разрешено только нижеперечисленным жителям и группам" name="estate_restricted_access"/> + <radio_item label="Разрешено только жителям и группам, перечисленным на вкладке доступа" name="estate_restricted_access"/> <radio_item label="Доступ открыт для всех" name="estate_public_access"/> </radio_group> <check_box label="Должен быть 18 и старше" name="limit_age_verified" tool_tip="Доступ к этому землевладению имеют только жители 18 лет и старше. Более подробная информация находится здесь: [SUPPORT_SITE]."/> diff --git a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml index a2b8753317..28afb79a08 100644 --- a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Заплатить за объект" name="Payobject"/> <combo_box.item label="Открыть" name="Open"/> <combo_box.item label="Приблизить" name="Zoom"/> + <combo_box.item label="Нет" name="None"/> </combo_box> <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 64d0e8ccf3..9192ebf601 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -2226,6 +2226,18 @@ support@secondlife.com. <string name="RegionInfoListTypeBannedAgents"> Всегда заблокированы </string> + <string name="RegionInfoAllEstates"> + все землевладения + </string> + <string name="RegionInfoManagedEstates"> + управляемые землевладения + </string> + <string name="RegionInfoThisEstate"> + это землевладение + </string> + <string name="AndNMore"> + и \[EXTRA_COUNT] более + </string> <string name="ScriptLimitsParcelScriptMemory"> Память под скрипты на участке </string> diff --git a/indra/newview/skins/default/xui/tr/floater_auction.xml b/indra/newview/skins/default/xui/tr/floater_auction.xml index 3c945a9c96..dccf47d819 100644 --- a/indra/newview/skins/default/xui/tr/floater_auction.xml +++ b/indra/newview/skins/default/xui/tr/floater_auction.xml @@ -3,8 +3,8 @@ <floater.string name="already for sale"> Zaten satışa çıkarılmış olan parselleri açık artırmaya sunamazsınız. </floater.string> - <check_box initial_value="true" label="Sarı seçim çiti dahil edilsin" name="fence_check"/> - <button label="Anlık Görüntü" label_selected="Anlık Görüntü" name="snapshot_btn"/> + <check_box initial_value="true" label="Sarı seçim çitini dahil et" name="fence_check"/> + <button label="Anlık görüntü" label_selected="Anlık görüntü" name="snapshot_btn"/> <button label="Herkese Sat" label_selected="Herkese Sat" name="sell_to_anyone_btn"/> <button label="Ayarları Temizle" label_selected="Ayarları Temizle" name="reset_parcel_btn"/> <button label="Açık Artırmayı Başlat" label_selected="Açık Artırmayı Başlat" name="start_auction_btn"/> diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml index e46e53c110..d6b9a4a533 100644 --- a/indra/newview/skins/default/xui/tr/floater_tools.xml +++ b/indra/newview/skins/default/xui/tr/floater_tools.xml @@ -203,6 +203,7 @@ <combo_box.item label="Nesneye ödeme yap" name="Payobject"/> <combo_box.item label="Aç" name="Open"/> <combo_box.item label="Yakınlaştır" name="Zoom"/> + <combo_box.item label="Yok" name="None"/> </combo_box> <check_box label="Satılık:" name="checkbox for sale" tool_tip="İnsanların bu nesneyi, içeriğini veya SL dünyasındaki kopyasını satın almasına izin verin."/> <spinner label="L$" name="Edit Cost" tool_tip="Nesne maliyeti."/> diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index 158308c99b..b83847a013 100644 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -13,6 +13,7 @@ <menu_item_call label="Kamera Denetimleri..." name="Camera Controls"/> <menu label="Hareket" name="Movement"> <menu_item_call label="Otur" name="Sit Down Here"/> + <menu_item_call label="Kalk" name="Stand up"/> <menu_item_check label="Uç" name="Fly"/> <menu_item_check label="Daima Koş" name="Always Run"/> <menu_item_call label="Beni Anime Etmeyi Durdur" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index d80f8e6686..13867cf5b8 100644 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -1574,6 +1574,30 @@ Lütfen sadece bir nesne seçin ve tekrar deneyin. <notification name="ProblemAddingEstateManagerBanned"> Engellenmiş sakin, gayrimenkul yöneticisi listesine eklenemez. </notification> + <notification name="ProblemBanningEstateManager"> + Gayrimenkul yöneticisi [AGENT] engellenen listesine eklenemiyor. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> zaten İzin Verilen Gruplar listesinde yer alıyor. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] zaten [LIST_TYPE] listenizde yer alıyor. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] zaten [LIST_TYPE] listenizde yer alıyor. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT], [ESTATE] [LIST_TYPE] listesine eklendi. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT], [ESTATE] [LIST_TYPE] listesine eklendi. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT], [ESTATE] [LIST_TYPE] listesinden kaldırıldı. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT], [ESTATE] [LIST_TYPE] listesinden kaldırıldı. + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Giysi ve şekil yüklenene kadar görünüm değiştirilemez. </notification> @@ -1889,7 +1913,7 @@ Binlerce bölgeyi değiştirecek ve alan sunucusunu kesintiye uğratacaktır. <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> </notification> <notification label="Gayrimenkul seç" name="EstateBannedAgentRemove"> - Bu Sakin sadece bu gayrimenkul için mi yasaklı listesinden çıkarılsın, yoksa [ALL_ESTATES] için mi? + Bu Sakin sadece bu gayrimenkul için mi yoksa [ALL_ESTATES] için mi erişim yasağı listesinden çıkarılsın? <usetemplate canceltext="İptal" name="yesnocancelbuttons" notext="Tüm Gayrimenkuller" yestext="Bu Gayrimenkul"/> </notification> <notification label="Gayrimenkul seç" name="EstateManagerAdd"> @@ -3171,16 +3195,22 @@ Sohbete katılmak için Kabul Et'i, daveti geri çevirmek için ise Reddet& [VOICE_CHANNEL_NAME] ile bağlantı kurulamadı, lütfen daha sonra tekrar deneyin. Şimdi Yakındaki bir Sesli Sohbete yeniden bağlanılacaksınız. </notification> <notification name="VoiceEffectsExpired"> - Abone olduğunuz Ses Şekillerinden birinin ya da daha fazlasının süresi dolmuş. -Aboneliğinizi yenilemek için [[URL] burayı tıklatın]. + Abone olduğunuz Ses Dönüşümlerinden birinin ya da daha fazlasının süresi dolmuş. +Aboneliğinizi yenilemek için [[URL] buraya tıklayın]. + +Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın]. </notification> <notification name="VoiceEffectsExpiredInUse"> - Etkin Ses Şeklinin süresi dolmuş, normal ses ayarlarınız uygulandı. -Aboneliğinizi yenilemek için [[URL] burayı tıklatın]. + Etkin Ses Dönüşümünün süresi dolmuş, normal ses ayarlarınız uygulandı. +Aboneliğinizi yenilemek için [[URL] buraya tıklayın]. + +Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın]. </notification> <notification name="VoiceEffectsWillExpire"> - Abone olduğunuz Ses Şekillerinden birinin ya da daha fazlasının süresi [INTERVAL] gün içinde dolacak. -Aboneliğinizi yenilemek için [[URL] burayı tıklatın]. + Ses Dönüşümlerinizden birinin ya da daha fazlasının süresi [INTERVAL] günden daha az bir zamanda dolacak. +Aboneliğinizi yenilemek için [[URL] buraya tıklayın]. + +Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın]. </notification> <notification name="VoiceEffectsNew"> Yeni Ses Şekilleri kullanılabilir! @@ -3232,6 +3262,9 @@ Güvenliğiniz için birkaç saniye engellenecek. <notification name="SnapshotToComputerFailed"> Anlık görüntü [PATH] yoluna kaydedilemedi: Disk dolu. [NEED_MEMORY]KB gerekli ancak yalnızca [FREE_MEMORY]KB boş. </notification> + <notification name="SnapshotToLocalDirNotExist"> + Anlık görüntü [PATH] yoluna kaydedilemedi: Dizin mevcut değil. + </notification> <notification name="PresetNotSaved"> Ön ayar ([NAME]) kaydedilirken hata oluştu. </notification> diff --git a/indra/newview/skins/default/xui/tr/panel_login.xml b/indra/newview/skins/default/xui/tr/panel_login.xml index 8b320ce9aa..e9fec9783f 100644 --- a/indra/newview/skins/default/xui/tr/panel_login.xml +++ b/indra/newview/skins/default/xui/tr/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="Kullanıcı Adı" name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/> @@ -11,8 +16,13 @@ </combo_box> <button label="Oturum Aç" name="connect_btn"/> <check_box label="Beni hatırla" name="remember_check"/> - <text name="forgot_password_text">Parolamı unuttum</text> + <text name="forgot_password_text"> + Parolamı unuttum + </text> <combo_box label="Ağ seç" name="server_combo"/> + <text name="sign_up_text"> + Kaydol + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_login_first.xml b/indra/newview/skins/default/xui/tr/panel_login_first.xml index 622edd0a8d..1fc80c2b97 100644 --- a/indra/newview/skins/default/xui/tr/panel_login_first.xml +++ b/indra/newview/skins/default/xui/tr/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> Parolamı unuttum </text> + <text name="sign_up_text"> + Kaydol + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/tr/panel_region_access.xml b/indra/newview/skins/default/xui/tr/panel_region_access.xml new file mode 100644 index 0000000000..57e721bc04 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Erişim" name="Access"> + <tab_container name="tabs"> + <panel label="GAYRİMENKUL YÖNETİCİLERİ" name="estate_managers_panel"> + <text name="estate_manager_label"> + Gayrimenkul Yöneticileri: + </text> + <name_list name="estate_manager_name_list"> + <columns label="Ad" name="name"/> + </name_list> + <button label="Ekle..." name="add_estate_manager_btn"/> + <button label="Kaldır..." name="remove_estate_manager_btn"/> + </panel> + <panel label="İZİN VERİLEN" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="İzin verilen aracıları ara" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + Her zaman izin verilen: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="Ad" name="name"/> + </name_list> + <button label="Ekle..." name="add_allowed_avatar_btn"/> + <button label="Kaldır..." name="remove_allowed_avatar_btn"/> + </panel> + <panel label="İZİN VERİLEN GRUPLAR" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="İzin verilen grupları ara" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + Her zaman izin verilen gruplar: + </text> + <name_list name="allowed_group_name_list"> + <columns label="Ad" name="name"/> + </name_list> + <button label="Ekle..." name="add_allowed_group_btn"/> + <button label="Kaldır..." name="remove_allowed_group_btn"/> + </panel> + <panel label="ENGELLENEN" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="Engellenen aracıları ara" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + Her zaman engellenen: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="Ad" name="name"/> + <columns label="Son oturum açma tarihi" name="last_login_date"/> + <columns label="Engellenme tarihi" name="ban_date"/> + <columns label="Engelleyen" name="bannedby"/> + </name_list> + <button label="Ekle..." name="add_banned_avatar_btn"/> + <button label="Kaldır..." name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_region_estate.xml b/indra/newview/skins/default/xui/tr/panel_region_estate.xml index fc8dab9c69..ad5553c582 100644 --- a/indra/newview/skins/default/xui/tr/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/tr/panel_region_estate.xml @@ -16,7 +16,7 @@ (bilinmiyor) </text> <radio_group name="externally_visible_radio"> - <radio_item label="Yalnızca aşağıda listelenen sakinlere ve gruplara izin ver" name="estate_restricted_access"/> + <radio_item label="Sadece Erişim sekmesinde listelenen sakinlere ve gruplara izin ver" name="estate_restricted_access"/> <radio_item label="Herkes ziyaret edebilir" name="estate_public_access"/> </radio_group> <check_box label="18 yaşından büyük olmalıdır" name="limit_age_verified" tool_tip="Sakinlerin bu gayrimenkule erişebilmesi için 18 veya üzeri bir yaşta olmaları gerekir. Daha fazla bilgi için [SUPPORT_SITE] adresini ziyaret edin."/> diff --git a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml index 266ddbd433..c1b42ecbb5 100644 --- a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="Nesneye ödeme yap" name="Payobject"/> <combo_box.item label="Aç" name="Open"/> <combo_box.item label="Yakınlaştır" name="Zoom"/> + <combo_box.item label="Yok" name="None"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 222e0da6a4..dddf2365ab 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -2226,6 +2226,18 @@ Bu mesaj size gelmeye devam ederse lütfen http://support.secondlife.com adresin <string name="RegionInfoListTypeBannedAgents"> Her zaman engellenen </string> + <string name="RegionInfoAllEstates"> + tüm gayrimenkuller + </string> + <string name="RegionInfoManagedEstates"> + yönetilen gayrimenkuller + </string> + <string name="RegionInfoThisEstate"> + bu gayrimenkul + </string> + <string name="AndNMore"> + ve [EXTRA_COUNT] tane daha + </string> <string name="ScriptLimitsParcelScriptMemory"> Parsel Komut Dosyası Belleği </string> diff --git a/indra/newview/skins/default/xui/zh/floater_auction.xml b/indra/newview/skins/default/xui/zh/floater_auction.xml index 1b589a92cc..0ab94160c2 100644 --- a/indra/newview/skins/default/xui/zh/floater_auction.xml +++ b/indra/newview/skins/default/xui/zh/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="開始 Linden 土地出售"> +<floater name="floater_auction" title="開始Linden土地出售"> <floater.string name="already for sale"> 出售中的地段無法進行拍賣。 </floater.string> diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml index 1ac35487ba..539c7454f1 100644 --- a/indra/newview/skins/default/xui/zh/floater_tools.xml +++ b/indra/newview/skins/default/xui/zh/floater_tools.xml @@ -203,6 +203,7 @@ <combo_box.item label="支付物件" name="Payobject"/> <combo_box.item label="打開" name="Open"/> <combo_box.item label="縮放" name="Zoom"/> + <combo_box.item label="無" name="None"/> </combo_box> <check_box label="出售中:" name="checkbox for sale" tool_tip="允許別人在虛擬世界裡以特定的價格購買此物件、其內容或其複本。"/> <spinner label="L$" name="Edit Cost" tool_tip="物件成本。"/> diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index a1f438ff72..a5c9684973 100644 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -13,6 +13,7 @@ <menu_item_call label="攝影機控制…" name="Camera Controls"/> <menu label="動作" name="Movement"> <menu_item_call label="坐下" name="Sit Down Here"/> + <menu_item_call label="起立" name="Stand up"/> <menu_item_check label="飛行" name="Fly"/> <menu_item_check label="以跑代步" name="Always Run"/> <menu_item_call label="停止我身上的動作" name="Stop Animating My Avatar"/> diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index c5fdea8578..d304e95b09 100644 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -1567,6 +1567,30 @@ SHA1 指紋:[MD5_DIGEST] <notification name="ProblemAddingEstateManagerBanned"> 無法把被封鎖的居民加入領地的管理人名單。 </notification> + <notification name="ProblemBanningEstateManager"> + 無法將領地管理人[AGENT]加入封鎖名單。 + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink>已在獲准群組名單中。 + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT]已在你的[LIST_TYPE]名單。 + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT]已在你的[LIST_TYPE]名單。 + </notification> + <notification name="AgentWasAddedToList"> + [AGENT]已新增到[ESTATE]的[LIST_TYPE]名單。 + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT]已新增到[ESTATE]的[LIST_TYPE]名單。 + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT]已從[ESTATE]的[LIST_TYPE]名單中被移除。 + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT]已從[ESTATE]的[LIST_TYPE]名單中被移除。 + </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> 無法變更外觀,直到服裝與體形下載完畢。 </notification> @@ -3167,14 +3191,20 @@ SHA1 指紋:[MD5_DIGEST] <notification name="VoiceEffectsExpired"> 至少一個你訂用的變聲效果已經過期。 [[URL] 點按這裡] 繼續訂用。 + +付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。 </notification> <notification name="VoiceEffectsExpiredInUse"> 使用中的變聲效果已經過期,已用你平時的聲音設定取代。 -[[URL] 點按這裡] 繼續訂用。 +[[URL] 點按這裡]繼續訂用。 + +付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。 </notification> <notification name="VoiceEffectsWillExpire"> 至少一個你訂用的變聲效果將在 [INTERVAL] 天後到期。 -[[URL] 點按這裡] 繼續訂用。 +[[URL] 點按這裡]繼續訂用。 + +付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。 </notification> <notification name="VoiceEffectsNew"> 新的變聲效果上市了! @@ -3226,6 +3256,9 @@ SHA1 指紋:[MD5_DIGEST] <notification name="SnapshotToComputerFailed"> 將快照儲存於[PATH]時失敗:磁碟已滿。 需要[NEED_MEMORY]KB的空間,但只剩[FREE_MEMORY]KB空間。 </notification> + <notification name="SnapshotToLocalDirNotExist"> + 將快照儲存於[PATH]時失敗:目錄不存在。 + </notification> <notification name="PresetNotSaved"> 儲存預設名稱[NAME]時出錯。 </notification> diff --git a/indra/newview/skins/default/xui/zh/panel_login.xml b/indra/newview/skins/default/xui/zh/panel_login.xml index 5292e5fc38..59618972af 100644 --- a/indra/newview/skins/default/xui/zh/panel_login.xml +++ b/indra/newview/skins/default/xui/zh/panel_login.xml @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> - <panel.string name="forgot_password_url">http://secondlife.com/account/request.php</panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <panel.string name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack name="ui_stack"> <layout_panel name="ui_container"> <combo_box label="使用者名稱" name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,例如 bobsmith12 或 Steller Sunshine"/> @@ -11,8 +16,13 @@ </combo_box> <button label="登入" name="connect_btn"/> <check_box label="記得我" name="remember_check"/> - <text name="forgot_password_text">忘記密碼</text> + <text name="forgot_password_text"> + 忘記密碼 + </text> <combo_box label="選擇模擬世界" name="server_combo"/> + <text name="sign_up_text"> + 註冊 + </text> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_login_first.xml b/indra/newview/skins/default/xui/zh/panel_login_first.xml index a8af615b7c..4d72fcdd03 100644 --- a/indra/newview/skins/default/xui/zh/panel_login_first.xml +++ b/indra/newview/skins/default/xui/zh/panel_login_first.xml @@ -3,6 +3,9 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> + <panel.string name="sign_up_url"> + http://join.secondlife.com/ + </panel.string> <layout_stack name="logo_stack"> <layout_panel name="parent_panel2"> <layout_stack name="widget_stack"> @@ -14,6 +17,9 @@ <text name="forgot_password_text"> 忘記密碼 </text> + <text name="sign_up_text"> + 註冊 + </text> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_access.xml b/indra/newview/skins/default/xui/zh/panel_region_access.xml new file mode 100644 index 0000000000..7842d26321 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_region_access.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="出入許可" name="Access"> + <tab_container name="tabs"> + <panel label="領地管理員" name="estate_managers_panel"> + <text name="estate_manager_label"> + 領地管理員: + </text> + <name_list name="estate_manager_name_list"> + <columns label="名稱" name="name"/> + </name_list> + <button label="新增…" name="add_estate_manager_btn"/> + <button label="移除…" name="remove_estate_manager_btn"/> + </panel> + <panel label="獲准" name="allowed_panel"> + <panel label="top_panel" name="allowed_search_panel"> + <filter_editor label="搜尋獲准的用戶" name="allowed_search_input"/> + </panel> + <text name="allow_resident_label"> + 永遠准許: + </text> + <name_list name="allowed_avatar_name_list"> + <columns label="名稱" name="name"/> + </name_list> + <button label="新增…" name="add_allowed_avatar_btn"/> + <button label="移除…" name="remove_allowed_avatar_btn"/> + </panel> + <panel label="准許的群組" name="allowed_groups_panel"> + <panel label="top_panel" name="allowed_group_search_panel"> + <filter_editor label="搜尋獲准的群組" name="allowed_group_search_input"/> + </panel> + <text name="allow_group_label"> + 永遠准許的群組: + </text> + <name_list name="allowed_group_name_list"> + <columns label="名稱" name="name"/> + </name_list> + <button label="新增…" name="add_allowed_group_btn"/> + <button label="移除…" name="remove_allowed_group_btn"/> + </panel> + <panel label="禁入的" name="banned_panel"> + <panel label="top_panel" name="banned_search_panel"> + <filter_editor label="搜尋禁入的用戶" name="banned_search_input"/> + </panel> + <text name="ban_resident_label"> + 永遠禁入: + </text> + <name_list name="banned_avatar_name_list"> + <columns label="名稱" name="name"/> + <columns label="上次登入日期" name="last_login_date"/> + <columns label="遭禁日期" name="ban_date"/> + <columns label="封鎖者:" name="bannedby"/> + </name_list> + <button label="新增…" name="add_banned_avatar_btn"/> + <button label="移除…" name="remove_banned_avatar_btn"/> + </panel> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_estate.xml b/indra/newview/skins/default/xui/zh/panel_region_estate.xml index 3825e7ab23..b25f6975c9 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_estate.xml @@ -16,7 +16,7 @@ (未知) </text> <radio_group name="externally_visible_radio"> - <radio_item label="只允許下列的居民和群組" name="estate_restricted_access"/> + <radio_item label="只允許名列於「准入」頁籤的居民和群組" name="estate_restricted_access"/> <radio_item label="任何人都可造訪" name="estate_public_access"/> </radio_group> <check_box label="必須滿18歲" name="limit_age_verified" tool_tip="居民必須年滿 18 歲才能進入這領地。 參閱 [SUPPORT_SITE] 獲取進一步資訊。"/> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml index 5ca10e5bda..4b6ffefc52 100644 --- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml @@ -75,6 +75,7 @@ <combo_box.item label="支付物件" name="Payobject"/> <combo_box.item label="打開" name="Open"/> <combo_box.item label="縮放" name="Zoom"/> + <combo_box.item label="無" name="None"/> </combo_box> <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 036a2f6713..d14eac88ef 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -2222,6 +2222,18 @@ http://secondlife.com/support 求助解決問題。 <string name="RegionInfoListTypeBannedAgents"> 永遠封鎖 </string> + <string name="RegionInfoAllEstates"> + 全部領地 + </string> + <string name="RegionInfoManagedEstates"> + 受管領地 + </string> + <string name="RegionInfoThisEstate"> + 這個領地 + </string> + <string name="AndNMore"> + 及其他[EXTRA_COUNT]個 + </string> <string name="ScriptLimitsParcelScriptMemory"> 地段腳本記憶體 </string> |