summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2019-04-17 11:24:08 -0700
committerGraham Linden <graham@lindenlab.com>2019-04-17 11:24:08 -0700
commit5f8cca95f8890d22496932827626f6c437d2b188 (patch)
tree716675dbd41416fd383568dfb47c5d3246f03423
parenta7e7d4a8185cd63c2f6f87fea992667912999426 (diff)
parent81dbd3663bdaff741e68de0ec4d4d35bedf6649d (diff)
Merge 6.2.1
-rwxr-xr-x.hgtags1
-rwxr-xr-xdoc/contributions.txt1
-rw-r--r--indra/llmessage/llregionflags.h2
-rw-r--r--indra/llui/lllineeditor.cpp60
-rw-r--r--indra/llui/lllineeditor.h3
-rw-r--r--indra/llui/llspinctrl.cpp6
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llestateinfomodel.cpp386
-rw-r--r--indra/newview/llestateinfomodel.h139
-rw-r--r--indra/newview/llfloaterbanduration.cpp92
-rw-r--r--indra/newview/llfloaterbanduration.h52
-rw-r--r--indra/newview/llfloaterland.cpp75
-rw-r--r--indra/newview/llfloaterland.h1
-rw-r--r--indra/newview/llfloaterregioninfo.cpp2017
-rw-r--r--indra/newview/llfloaterregioninfo.h116
-rw-r--r--indra/newview/llnamelistctrl.cpp60
-rw-r--r--indra/newview/llnamelistctrl.h4
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewerobject.cpp2
-rw-r--r--indra/newview/llviewerregion.cpp1
-rw-r--r--indra/newview/llviewerwindow.cpp10
-rw-r--r--indra/newview/skins/default/xui/de/floater_auction.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml45
-rw-r--r--indra/newview/skins/default/xui/de/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/de/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml28
-rw-r--r--indra/newview/skins/default/xui/en/floater_ban_duration.xml100
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml70
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_access.xml421
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_estate.xml220
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml28
-rw-r--r--indra/newview/skins/default/xui/es/floater_auction.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml45
-rw-r--r--indra/newview/skins/default/xui/es/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/es/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/floater_auction.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml43
-rw-r--r--indra/newview/skins/default/xui/fr/panel_login.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/panel_login_first.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/it/floater_auction.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml47
-rw-r--r--indra/newview/skins/default/xui/it/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/it/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/floater_auction.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml42
-rw-r--r--indra/newview/skins/default/xui/ja/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_estate.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_auction.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml47
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/ru/floater_auction.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/notifications.xml45
-rw-r--r--indra/newview/skins/default/xui/ru/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/ru/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml24
-rw-r--r--indra/newview/skins/default/xui/tr/floater_auction.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/menu_viewer.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/notifications.xml45
-rw-r--r--indra/newview/skins/default/xui/tr/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/tr/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_auction.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_tools.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/notifications.xml37
-rw-r--r--indra/newview/skins/default/xui/zh/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_login_first.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_access.xml57
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_estate.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_task_info.xml125
-rw-r--r--indra/newview/skins/default/xui/zh/strings.xml12
119 files changed, 4483 insertions, 1909 deletions
diff --git a/.hgtags b/.hgtags
index b0da8b0d98..4823c05504 100755
--- a/.hgtags
+++ b/.hgtags
@@ -546,3 +546,4 @@ ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release
21b7604680ef6b6ea67f8bebaaa588d6e263bdc1 6.0.1-release
a3143db58a0f6b005232bf9018e7fef17ff9ec90 6.1.0-release
50f0ece62ddb5a244ecb6d00ef5a89d80ad50efa 6.1.1-release
+82a89165e5929a6c3073d6cd60a543cb395f147b 6.2.0-release
diff --git a/doc/contributions.txt b/doc/contributions.txt
index cfc98584bc..4e92559256 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -222,6 +222,7 @@ Ansariel Hiller
MAINT-8085
MAINT-8723
SL-10385
+ SL-10891
Aralara Rajal
Arare Chantilly
CHUIBUG-191
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h
index a0c87b65cc..c13f39df9b 100644
--- a/indra/llmessage/llregionflags.h
+++ b/indra/llmessage/llregionflags.h
@@ -169,7 +169,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 ee8c445afb..f1914ee9c5 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -503,6 +503,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();
@@ -1685,42 +1692,37 @@ void LLLineEditor::doDelete()
void LLLineEditor::drawBackground()
{
- F32 alpha = getCurrentTransparency();
- if (mUseBgColor)
+ bool has_focus = hasFocus();
+ LLUIImage* image;
+ if ( mReadOnly )
+ {
+ image = mBgImageDisabled;
+ }
+ else if ( has_focus || mShowImageFocused)
{
- gl_rect_2d(getLocalRect(), mBgColor % alpha, TRUE);
+ image = mBgImageFocused;
}
else
{
- bool has_focus = hasFocus();
- LLUIImage* image;
- if (mReadOnly)
- {
- image = mBgImageDisabled;
- }
- else if (has_focus || mShowImageFocused)
- {
- image = mBgImageFocused;
- }
- else
- {
- image = mBgImage;
- }
+ image = mBgImage;
+ }
- if (!image) return;
- // optionally draw programmatic border
- if (has_focus)
- {
- LLColor4 tmp_color = gFocusMgr.getFocusColor();
- tmp_color.setAlpha(alpha);
- image->drawBorder(0, 0, getRect().getWidth(), getRect().getHeight(),
- tmp_color,
- gFocusMgr.getFocusFlashWidth());
- }
- LLColor4 tmp_color = UI_VERTEX_COLOR;
+ if (!image) return;
+
+ F32 alpha = getCurrentTransparency();
+
+ // optionally draw programmatic border
+ if (has_focus)
+ {
+ LLColor4 tmp_color = gFocusMgr.getFocusColor();
tmp_color.setAlpha(alpha);
- image->draw(getLocalRect(), tmp_color);
+ image->drawBorder(0, 0, getRect().getWidth(), getRect().getHeight(),
+ tmp_color,
+ gFocusMgr.getFocusFlashWidth());
}
+ LLColor4 tmp_color = UI_VERTEX_COLOR;
+ tmp_color.setAlpha(alpha);
+ image->draw(getLocalRect(), tmp_color);
}
void LLLineEditor::draw()
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index a711ccefab..aa5779d45f 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -210,6 +210,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 7739feb419..02b6271e5a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -217,6 +217,7 @@ set(viewer_SOURCE_FILES
llfloateravatarpicker.cpp
llfloateravatarrendersettings.cpp
llfloateravatartextures.cpp
+ llfloaterbanduration.cpp
llfloaterbeacons.cpp
llfloaterbigpreview.cpp
llfloaterbuildoptions.cpp
@@ -841,6 +842,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 6abaeb2f90..ca06394388 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.2.0
+6.2.2
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 394df72068..fd4c2917d5 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16413,6 +16413,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>ResetUIScaleOnFirstRun</key>
+ <map>
+ <key>Comment</key>
+ <string>Resets the UI scale factor on first run due to changed display scaling behavior</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
</map>
</llsd>
diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp
index e8da458168..4fdb860592 100644
--- a/indra/newview/llestateinfomodel.cpp
+++ b/indra/newview/llestateinfomodel.cpp
@@ -34,101 +34,15 @@
// viewer
#include "llagent.h"
+#include "llfloaterregioninfo.h" // for invoice id
#include "llviewerregion.h"
-#include "llcorehttputil.h"
-
-//=========================================================================
-namespace
-{
- class LLDispatchEstateUpdateInfo : public LLDispatchHandler
- {
- public:
- LLDispatchEstateUpdateInfo() {}
- virtual ~LLDispatchEstateUpdateInfo() {}
- virtual bool operator()(const LLDispatcher* dispatcher, const std::string& key,
- const LLUUID& invoice, const sparam_t& strings)
- {
- // key = "estateupdateinfo"
- // strings[0] = estate name
- // strings[1] = str(owner_id)
- // strings[2] = str(estate_id)
- // strings[3] = str(estate_flags)
- // strings[4] = str((S32)(sun_hour * 1024))
- // strings[5] = str(parent_estate_id)
- // strings[6] = str(covenant_id)
- // strings[7] = str(covenant_timestamp)
- // strings[8] = str(send_to_agent_only)
- // strings[9] = str(abuse_email_addr)
-
- LL_DEBUGS("ESTATEINFOM") << "Received estate update" << LL_ENDL;
-
- // Update estate info model.
- // This will call LLPanelEstateInfo::refreshFromEstate().
- // *TODO: Move estate message handling stuff to llestateinfomodel.cpp.
- LLEstateInfoModel::instance().updateEstateInfo(strings);
-
- return true;
- }
- };
-
- class LLDispatchSetEstateAccess : public LLDispatchHandler
- {
- public:
- LLDispatchSetEstateAccess() {}
- virtual ~LLDispatchSetEstateAccess() {}
- virtual bool operator()(
- const LLDispatcher* dispatcher, const std::string& key,
- const LLUUID& invoice, const sparam_t& strings)
- {
- // 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)
- // ...
-
- LLEstateInfoModel::instance().updateAccessInfo(strings);
-
- return true;
- }
-
- };
-
- class LLDispatchSetEstateExperience : public LLDispatchHandler
- {
- public:
- virtual bool operator()(const LLDispatcher* dispatcher, const std::string& key,
- const LLUUID& invoice, const sparam_t& strings)
- {
- // key = "setexperience"
- // strings[0] = str(estate_id)
- // strings[1] = str(send_to_agent_only)
- // strings[2] = str(num blocked)
- // strings[3] = str(num trusted)
- // strings[4] = str(num allowed)
- // strings[8] = bin(uuid) ...
- // ...
-
- LLEstateInfoModel::instance().updateExperienceInfo(strings);
-
- return true;
- }
-
- };
-}
+#include "llcorehttputil.h"
-//=========================================================================
-LLEstateInfoModel::LLEstateInfoModel():
- mID(0),
- mFlags(0),
- mSunHour(0),
- mRegion(nullptr)
+LLEstateInfoModel::LLEstateInfoModel()
+: mID(0)
+, mFlags(0)
+, mSunHour(0)
{
}
@@ -137,52 +51,40 @@ boost::signals2::connection LLEstateInfoModel::setUpdateCallback(const update_si
return mUpdateSignal.connect(cb);
}
-boost::signals2::connection LLEstateInfoModel::setUpdateAccessCallback(const update_flaged_signal_t::slot_type& cb)
-{
- return mUpdateAccess.connect(cb);
-}
-
-boost::signals2::connection LLEstateInfoModel::setUpdateExperienceCallback(const update_signal_t::slot_type& cb)
-{
- return mUpdateExperience.connect(cb);
-}
-
boost::signals2::connection LLEstateInfoModel::setCommitCallback(const update_signal_t::slot_type& cb)
{
return mCommitSignal.connect(cb);
}
-void LLEstateInfoModel::setRegion(LLViewerRegion* region)
-{
- if (region != mRegion)
- {
- mRegion = region;
-
- if (mRegion)
- {
- nextInvoice();
- sendEstateOwnerMessage("getinfo", strings_t());
- }
- }
-}
-
-
-void LLEstateInfoModel::clearRegion()
-{
- mRegion = nullptr;
-}
-
void LLEstateInfoModel::sendEstateInfo()
{
if (!commitEstateInfoCaps())
{
// the caps method failed, try the old way
- nextInvoice();
+ LLFloaterRegionInfo::nextInvoice();
commitEstateInfoDataserver();
}
}
-void LLEstateInfoModel::updateEstateInfo(const strings_t& strings)
+bool LLEstateInfoModel::getUseFixedSun() const { return getFlag(REGION_FLAGS_SUN_FIXED); }
+bool LLEstateInfoModel::getIsExternallyVisible() const { return getFlag(REGION_FLAGS_EXTERNALLY_VISIBLE); }
+bool LLEstateInfoModel::getAllowDirectTeleport() const { return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT); }
+bool LLEstateInfoModel::getDenyAnonymous() const { return getFlag(REGION_FLAGS_DENY_ANONYMOUS); }
+bool LLEstateInfoModel::getDenyAgeUnverified() const { return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED); }
+bool LLEstateInfoModel::getAllowVoiceChat() const { return getFlag(REGION_FLAGS_ALLOW_VOICE); }
+bool LLEstateInfoModel::getAllowAccessOverride() const { return getFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE); }
+bool LLEstateInfoModel::getAllowEnvironmentOverride() const { return getFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE); }
+
+void LLEstateInfoModel::setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); }
+void LLEstateInfoModel::setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); }
+void LLEstateInfoModel::setAllowDirectTeleport(bool val) { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); }
+void LLEstateInfoModel::setDenyAnonymous(bool val) { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); }
+void LLEstateInfoModel::setDenyAgeUnverified(bool val) { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); }
+void LLEstateInfoModel::setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); }
+void LLEstateInfoModel::setAllowAccessOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE, val); }
+void LLEstateInfoModel::setAllowEnvironmentOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE, val); }
+
+void LLEstateInfoModel::update(const strings_t& strings)
{
// NOTE: LLDispatcher extracts strings with an extra \0 at the
// end. If we pass the std::string direct to the UI/renderer
@@ -193,10 +95,10 @@ void LLEstateInfoModel::updateEstateInfo(const strings_t& strings)
mFlags = strtoul(strings[3].c_str(), NULL, 10);
mSunHour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
- LL_DEBUGS("ESTATEINFOM") << "Received estate info: "
+ LL_DEBUGS("WindlightSync") << "Received estate info: "
<< "is_sun_fixed = " << getUseFixedSun()
<< ", sun_hour = " << getSunHour() << LL_ENDL;
- LL_DEBUGS("ESTATEINFOM") << getInfoDump() << LL_ENDL;
+ LL_DEBUGS() << getInfoDump() << LL_ENDL;
// Update region owner.
LLViewerRegion* regionp = gAgent.getRegion();
@@ -206,205 +108,20 @@ void LLEstateInfoModel::updateEstateInfo(const strings_t& strings)
mUpdateSignal();
}
-void LLEstateInfoModel::updateAccessInfo(const strings_t& strings)
-{
- 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))
- {
- LL_WARNS("ESTATEINFOM") << "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("ESTATEINFOM") << "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("ESTATEINFOM") << "non-zero count for banned agents, but no corresponding flag" << LL_ENDL;
- }
- if (num_estate_managers > 0
- && !(access_flags & ESTATE_ACCESS_MANAGERS))
- {
- LL_WARNS("ESTATEINFOM") << "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)
- {
- mAllowedAgents.clear();
-
- 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 */
- mAllowedAgents.insert(id);
- }
- }
-
- if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS)
- {
- mAllowedGroups.clear();
-
- 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 */
- mAllowedGroups.insert(id);
- }
- }
-
- if (access_flags & ESTATE_ACCESS_BANNED_AGENTS)
- {
- mBannedAgents.clear();
-
- 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 */
- mBannedAgents.insert(id);
- }
- }
-
- if (access_flags & ESTATE_ACCESS_MANAGERS)
- {
- mEstateManagers.clear();
-
- // 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 */
- mEstateManagers.insert(id);
- }
- }
-
- // Update the buttons which may change based on the list contents but also needs to account for general access features.
- mUpdateAccess(access_flags);
-}
-
-void LLEstateInfoModel::updateExperienceInfo(const strings_t& strings)
-{
- strings_t::const_iterator it = strings.begin();
- ++it; // U32 estate_id = strtol((*it).c_str(), NULL, 10);
- ++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10);
-
- LLUUID id;
- S32 num_blocked = strtol((*(it++)).c_str(), NULL, 10);
- S32 num_trusted = strtol((*(it++)).c_str(), NULL, 10);
- S32 num_allowed = strtol((*(it++)).c_str(), NULL, 10);
-
- mExperienceAllowed.clear();
- mExperienceTrusted.clear();
- mExperienceBlocked.clear();
-
- while (num_blocked-- > 0)
- {
- memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
- mExperienceBlocked.insert(id);
- }
-
- while (num_trusted-- > 0)
- {
- memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
- mExperienceTrusted.insert(id);
- }
-
- while (num_allowed-- > 0)
- {
- memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
- mExperienceAllowed.insert(id);
- }
-
- mUpdateExperience();
-}
-
void LLEstateInfoModel::notifyCommit()
{
mCommitSignal();
}
-void LLEstateInfoModel::initSingleton()
-{
- gMessageSystem->setHandlerFunc("EstateOwnerMessage", &processEstateOwnerRequest);
-
- // name.assign("setowner");
- // static LLDispatchSetEstateOwner set_owner;
- // dispatch.addHandler(name, &set_owner);
-
- static LLDispatchEstateUpdateInfo estate_update_info;
- mDispatch.addHandler("estateupdateinfo", &estate_update_info);
-
- static LLDispatchSetEstateAccess set_access;
- mDispatch.addHandler("setaccess", &set_access);
-
- static LLDispatchSetEstateExperience set_experience;
- mDispatch.addHandler("setexperience", &set_experience);
-
-}
-
-void LLEstateInfoModel::sendEstateOwnerMessage(const std::string& request, const strings_t& strings)
-{
- if (!mRegion)
- {
- LL_WARNS("ESTATEINFOM") << "No selected region." << LL_ENDL;
- return;
- }
- LLMessageSystem* msg(gMessageSystem);
- LLUUID invoice(LLEstateInfoModel::instance().getLastInvoice());
-
- LL_INFOS() << "Sending estate request '" << request << "'" << LL_ENDL;
- 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", request);
- msg->addUUID("Invoice", invoice);
- if (strings.empty())
- {
- msg->nextBlock("ParamList");
- msg->addString("Parameter", NULL);
- }
- else
- {
- strings_t::const_iterator it = strings.begin();
- strings_t::const_iterator end = strings.end();
- for (; it != end; ++it)
- {
- msg->nextBlock("ParamList");
- msg->addString("Parameter", *it);
- }
- }
- msg->sendReliable(mRegion->getHost());
-}
-
//== PRIVATE STUFF ============================================================
// tries to send estate info using a cap; returns true if it succeeded
bool LLEstateInfoModel::commitEstateInfoCaps()
{
- if (!mRegion)
- {
- LL_WARNS("ESTATEINFOM") << "Attempt to update estate caps with no anchor region! Don't do that!" << LL_ENDL;
- return false;
- }
- std::string url = mRegion->getCapability("EstateChangeInfo");
+ std::string url = gAgent.getRegionCapability("EstateChangeInfo");
if (url.empty())
{
- LL_WARNS("ESTATEINFOM") << "No EstateChangeInfo cap from region." << LL_ENDL;
// whoops, couldn't find the cap, so bail out
return false;
}
@@ -433,14 +150,13 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url)
body["deny_age_unverified"] = getDenyAgeUnverified();
body["allow_voice_chat"] = getAllowVoiceChat();
body["override_public_access"] = getAllowAccessOverride();
- body["override_environment"] = getAllowEnvironmentOverride();
- body["invoice"] = getLastInvoice();
+ body["invoice"] = LLFloaterRegionInfo::getLastInvoice();
- LL_DEBUGS("ESTATEINFOM") << "Sending estate caps: "
+ LL_DEBUGS("WindlightSync") << "Sending estate caps: "
<< "is_sun_fixed = " << getUseFixedSun()
<< ", sun_hour = " << getSunHour() << LL_ENDL;
- LL_DEBUGS("ESTATEINFOM") << body << LL_ENDL;
+ LL_DEBUGS() << body << LL_ENDL;
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body);
@@ -449,12 +165,12 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url)
if (status)
{
- LL_INFOS("ESTATEINFOM") << "Committed estate info" << LL_ENDL;
+ LL_INFOS() << "Committed estate info" << LL_ENDL;
LLEstateInfoModel::instance().notifyCommit();
}
else
{
- LL_WARNS("ESTATEINFOM") << "Failed to commit estate info " << LL_ENDL;
+ LL_WARNS() << "Failed to commit estate info " << LL_ENDL;
}
}
@@ -467,15 +183,10 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url)
// strings[3] = str((S32)(sun_hour * 1024.f))
void LLEstateInfoModel::commitEstateInfoDataserver()
{
- if (!mRegion)
- {
- LL_WARNS("ESTATEINFOM") << "No selected region." << LL_ENDL;
- return;
- }
- LL_DEBUGS("ESTATEINFOM") << "Sending estate info: "
+ LL_DEBUGS("WindlightSync") << "Sending estate info: "
<< "is_sun_fixed = " << getUseFixedSun()
<< ", sun_hour = " << getSunHour() << LL_ENDL;
- LL_DEBUGS("ESTATEINFOM") << getInfoDump() << LL_ENDL;
+ LL_DEBUGS() << getInfoDump() << LL_ENDL;
LLMessageSystem* msg = gMessageSystem;
msg->newMessage("EstateOwnerMessage");
@@ -486,7 +197,7 @@ void LLEstateInfoModel::commitEstateInfoDataserver()
msg->nextBlock("MethodData");
msg->addString("Method", "estatechangeinfo");
- msg->addUUID("Invoice", getLastInvoice());
+ msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
msg->nextBlock("ParamList");
msg->addString("Parameter", getName());
@@ -497,7 +208,7 @@ void LLEstateInfoModel::commitEstateInfoDataserver()
msg->nextBlock("ParamList");
msg->addString("Parameter", llformat("%d", (S32) (getSunHour() * 1024.0f)));
- msg->sendReliable(mRegion->getHost());
+ gAgent.sendMessage();
}
std::string LLEstateInfoModel::getInfoDump()
@@ -513,28 +224,9 @@ std::string LLEstateInfoModel::getInfoDump()
dump["deny_age_unverified" ] = getDenyAgeUnverified();
dump["allow_voice_chat" ] = getAllowVoiceChat();
dump["override_public_access"] = getAllowAccessOverride();
- dump["override_environment"] = getAllowEnvironmentOverride();
+ dump["override_environment"] = getAllowEnvironmentOverride();
std::stringstream dump_str;
dump_str << dump;
return dump_str.str();
}
-
-// static
-void LLEstateInfoModel::processEstateOwnerRequest(LLMessageSystem* msg, void**)
-{
- // unpack the message
- std::string request;
- LLUUID invoice;
- LLDispatcher::sparam_t strings;
- LLDispatcher::unpackMessage(msg, request, invoice, strings);
- if (invoice != LLEstateInfoModel::instance().getLastInvoice())
- {
- LL_WARNS("ESTATEINFOM") << "Mismatched Estate message: " << request << LL_ENDL;
- return;
- }
-
- //dispatch the message
- LLEstateInfoModel::instance().mDispatch.dispatch(request, invoice, strings);
-}
-
diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h
index 2c89a85500..d6f00c573c 100644
--- a/indra/newview/llestateinfomodel.h
+++ b/indra/newview/llestateinfomodel.h
@@ -32,123 +32,78 @@ class LLMessageSystem;
#include "llsingleton.h"
#include "llcoros.h"
#include "lleventcoro.h"
-#include "lldispatcher.h"
-#include "llregionflags.h"
-class LLViewerRegion;
/**
* Contains estate info, notifies interested parties of its changes.
*/
class LLEstateInfoModel : public LLSingleton<LLEstateInfoModel>
{
- LLSINGLETON_C11(LLEstateInfoModel);
+ LLSINGLETON(LLEstateInfoModel);
LOG_CLASS(LLEstateInfoModel);
public:
- typedef std::vector<std::string> strings_t;
- typedef boost::signals2::signal<void()> update_signal_t;
- typedef boost::signals2::signal<void(U32)> update_flaged_signal_t;
- typedef boost::signals2::connection connection_t;
+ typedef boost::signals2::signal<void()> update_signal_t;
+ boost::signals2::connection setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
+ boost::signals2::connection setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
- connection_t setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
- connection_t setUpdateAccessCallback(const update_flaged_signal_t::slot_type& cb);
- connection_t setUpdateExperienceCallback(const update_signal_t::slot_type& cb);
- connection_t setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
-
- void setRegion(LLViewerRegion* region);
- void clearRegion();
- void sendEstateInfo(); /// send estate info to the simulator
+ void sendEstateInfo(); /// send estate info to the simulator
// getters
- bool getUseFixedSun() const { return getFlag(REGION_FLAGS_SUN_FIXED); }
- bool getIsExternallyVisible() const { return getFlag(REGION_FLAGS_EXTERNALLY_VISIBLE); }
- bool getAllowDirectTeleport() const { return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT); }
- bool getDenyAnonymous() const { return getFlag(REGION_FLAGS_DENY_ANONYMOUS); }
- bool getDenyAgeUnverified() const { return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED); }
- bool getAllowVoiceChat() const { return getFlag(REGION_FLAGS_ALLOW_VOICE); }
- bool getAllowAccessOverride() const { return getFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE); }
- bool getAllowEnvironmentOverride() const { return getFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE); }
-
- const std::string& getName() const { return mName; }
- const LLUUID& getOwnerID() const { return mOwnerID; }
- U32 getID() const { return mID; }
- F32 getSunHour() const { return getUseFixedSun() ? mSunHour : 0.f; }
+ bool getUseFixedSun() const;
+ bool getIsExternallyVisible() const;
+ bool getAllowDirectTeleport() const;
+ bool getDenyAnonymous() const;
+ bool getDenyAgeUnverified() const;
+ bool getAllowVoiceChat() const;
+ bool getAllowAccessOverride() const;
+ bool getAllowEnvironmentOverride() const;
+
+ const std::string& getName() const { return mName; }
+ const LLUUID& getOwnerID() const { return mOwnerID; }
+ U32 getID() const { return mID; }
+ F32 getSunHour() const { return getUseFixedSun() ? mSunHour : 0.f; }
// setters
- void setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); }
- void setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); }
- void setAllowDirectTeleport(bool val) { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); }
- void setDenyAnonymous(bool val) { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); }
- void setDenyAgeUnverified(bool val) { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); }
- void setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); }
- void setAllowAccessOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE, val); }
- void setAllowEnvironmentOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE, val); }
-
- void setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
-
- const uuid_set_t & getAllowedAgents() const { return mAllowedAgents; }
- const uuid_set_t & getAllowedGroups() const { return mAllowedGroups; }
- const uuid_set_t & getBannedAgents() const { return mBannedAgents; }
- const uuid_set_t & getEstateManagers() const { return mEstateManagers; }
-
- const uuid_set_t & getAllowedExperiences() const { return mExperienceAllowed; }
- const uuid_set_t & getTrustedExperiences() const { return mExperienceTrusted; }
- const uuid_set_t & getBlockedExperiences() const { return mExperienceBlocked; }
-
- void sendEstateOwnerMessage(const std::string& request, const strings_t& strings);
-
- //---------------------------------------------------------------------
- /// refresh model with data from the incoming server message
- void updateEstateInfo(const strings_t& strings);
- void updateAccessInfo(const strings_t& strings);
- void updateExperienceInfo(const strings_t& strings);
+ void setUseFixedSun(bool val);
+ void setIsExternallyVisible(bool val);
+ void setAllowDirectTeleport(bool val);
+ void setDenyAnonymous(bool val);
+ void setDenyAgeUnverified(bool val);
+ void setAllowVoiceChat(bool val);
+ void setAllowAccessOverride(bool val);
+ void setAllowEnvironmentOverride(bool val);
- const LLUUID & getLastInvoice() { return mRequestInvoice; }
- const LLUUID & nextInvoice() { mRequestInvoice.generate(); return mRequestInvoice; }
+ void setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
protected:
+ typedef std::vector<std::string> strings_t;
- void notifyCommit();
+ friend class LLDispatchEstateUpdateInfo;
- virtual void initSingleton() override;
+ /// refresh model with data from the incoming server message
+ void update(const strings_t& strings);
+
+ void notifyCommit();
private:
- bool commitEstateInfoCaps();
- void commitEstateInfoDataserver();
- inline bool getFlag(U64 flag) const;
- inline void setFlag(U64 flag, bool val);
- U64 getFlags() const { return mFlags; }
- std::string getInfoDump();
+ bool commitEstateInfoCaps();
+ void commitEstateInfoDataserver();
+ inline bool getFlag(U64 flag) const;
+ inline void setFlag(U64 flag, bool val);
+ U64 getFlags() const { return mFlags; }
+ std::string getInfoDump();
// estate info
- std::string mName; /// estate name
- LLUUID mOwnerID; /// estate owner id
- U32 mID; /// estate id
- U64 mFlags; /// estate flags
- F32 mSunHour; /// estate sun hour
-
- uuid_set_t mAllowedAgents;
- uuid_set_t mAllowedGroups;
- uuid_set_t mBannedAgents;
- uuid_set_t mEstateManagers;
-
- uuid_set_t mExperienceAllowed;
- uuid_set_t mExperienceTrusted;
- uuid_set_t mExperienceBlocked;
-
- update_signal_t mUpdateSignal; /// emitted when we receive update from sim
- update_flaged_signal_t mUpdateAccess;
- update_signal_t mUpdateExperience;
- update_signal_t mCommitSignal; /// emitted when our update gets applied to sim
-
- LLDispatcher mDispatch;
- LLUUID mRequestInvoice;
- LLViewerRegion* mRegion;
-
- void commitEstateInfoCapsCoro(std::string url);
+ std::string mName; /// estate name
+ LLUUID mOwnerID; /// estate owner id
+ U32 mID; /// estate id
+ U64 mFlags; /// estate flags
+ F32 mSunHour; /// estate sun hour
- static void processEstateOwnerRequest(LLMessageSystem* msg, void**);
+ update_signal_t mUpdateSignal; /// emitted when we receive update from sim
+ update_signal_t mCommitSignal; /// emitted when our update gets applied to sim
+ void commitEstateInfoCapsCoro(std::string url);
};
inline bool LLEstateInfoModel::getFlag(U64 flag) const
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 eeb1c17f4b..450f2d6ff1 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"
@@ -2546,33 +2547,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);
}
@@ -2924,7 +2941,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);
@@ -2934,23 +2951,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 0eea46bc5a..7556a96cbd 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -381,6 +381,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 a7887eb9b4..bb76af9a3c 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 "llestateinfomodel.h"
#include "llfilepicker.h"
@@ -95,17 +96,57 @@
#include "llexperiencecache.h"
#include "llpanelexperiences.h"
#include "llcorehttputil.h"
+#include "llavatarnamecache.h"
#include "llenvironment.h"
const S32 TERRAIN_TEXTURE_COUNT = 4;
const S32 CORNER_COUNT = 4;
+const U32 MAX_LISTED_NAMES = 100;
+
#define TMP_DISABLE_WLES // STORM-1180
///----------------------------------------------------------------------------
/// Local class declaration
///----------------------------------------------------------------------------
+class LLDispatchEstateUpdateInfo : public LLDispatchHandler
+{
+public:
+ LLDispatchEstateUpdateInfo() {}
+ virtual ~LLDispatchEstateUpdateInfo() {}
+ virtual bool operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings);
+};
+
+class LLDispatchSetEstateAccess : public LLDispatchHandler
+{
+public:
+ LLDispatchSetEstateAccess() {}
+ virtual ~LLDispatchSetEstateAccess() {}
+ virtual bool operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings);
+};
+
+class LLDispatchSetEstateExperience : public LLDispatchHandler
+{
+public:
+ virtual bool operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings);
+
+ LLSD getIDs( sparam_t::const_iterator it, sparam_t::const_iterator end, S32 count );
+};
+
+
/*
void unpack_request_params(
LLMessageSystem* msg,
@@ -182,6 +223,10 @@ bool estate_dispatch_initialized = false;
/// LLFloaterRegionInfo
///----------------------------------------------------------------------------
+//S32 LLFloaterRegionInfo::sRequestSerial = 0;
+LLUUID LLFloaterRegionInfo::sRequestInvoice;
+
+
LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
: LLFloater(seed),
mEnvironmentPanel(NULL),
@@ -200,6 +245,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");
@@ -238,6 +288,10 @@ BOOL LLFloaterRegionInfo::postBuild()
panel->buildFromFile("panel_region_experiences.xml");
mTab->addTabPanel(panel);
}
+
+ gMessageSystem->setHandlerFunc(
+ "EstateOwnerMessage",
+ &processEstateOwnerRequest);
// Request region info when agent region changes.
mRegionChangedCallback = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::onRegionChanged, this));
@@ -260,9 +314,22 @@ void LLFloaterRegionInfo::onOpen(const LLSD& key)
disableTabCtrls();
return;
}
- LLEstateInfoModel::instance().clearRegion();
- requestRegionInfo(); // will cause refreshFromRegion()
+ 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();
+ }
}
void LLFloaterRegionInfo::onRegionChanged()
@@ -273,6 +340,7 @@ void LLFloaterRegionInfo::onRegionChanged()
}
}
+// static
void LLFloaterRegionInfo::requestRegionInfo()
{
LLTabContainer* tab = findChild<LLTabContainer>("region_panels");
@@ -296,6 +364,44 @@ void LLFloaterRegionInfo::requestRegionInfo()
}
// static
+void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
+{
+ static LLDispatcher dispatch;
+ LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+ if(!floater)
+ {
+ return;
+ }
+
+ if (!estate_dispatch_initialized)
+ {
+ LLPanelEstateInfo::initDispatch(dispatch);
+ }
+
+ LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
+
+ // unpack the message
+ std::string request;
+ LLUUID invoice;
+ LLDispatcher::sparam_t strings;
+ LLDispatcher::unpackMessage(msg, request, invoice, strings);
+ if(invoice != getLastInvoice())
+ {
+ LL_WARNS() << "Mismatched Estate message: " << request << LL_ENDL;
+ return;
+ }
+
+ //dispatch the message
+ dispatch.dispatch(request, invoice, strings);
+
+ if (panel)
+ {
+ panel->updateControls(gAgent.getRegion());
+ }
+}
+
+
+// static
void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
{
LLPanel* panel;
@@ -436,6 +542,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");
@@ -489,6 +605,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)
@@ -541,6 +658,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
///----------------------------------------------------------------------------
@@ -609,10 +735,43 @@ void LLPanelRegionInfo::updateChild(LLUICtrl* child_ctr)
// virtual
bool LLPanelRegionInfo::refreshFromRegion(LLViewerRegion* region)
{
- LLEstateInfoModel::instance().setRegion(region);
+ if (region) mHost = region->getHost();
return true;
}
+void LLPanelRegionInfo::sendEstateOwnerMessage(
+ LLMessageSystem* msg,
+ const std::string& request,
+ const LLUUID& invoice,
+ const strings_t& strings)
+{
+ LL_INFOS() << "Sending estate request '" << request << "'" << LL_ENDL;
+ 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", request);
+ msg->addUUID("Invoice", invoice);
+ if(strings.empty())
+ {
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", NULL);
+ }
+ else
+ {
+ strings_t::const_iterator it = strings.begin();
+ strings_t::const_iterator end = strings.end();
+ for(; it != end; ++it)
+ {
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", *it);
+ }
+ }
+ msg->sendReliable(mHost);
+}
+
void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable)
{
LLView* button = findChildView(btn_name);
@@ -746,7 +905,8 @@ void LLPanelRegionGeneralInfo::onKickCommit(const uuid_vec_t& ids)
ids[0].toString(buffer);
strings.push_back(strings_t::value_type(buffer));
- LLEstateInfoModel::instance().sendEstateOwnerMessage("teleporthomeuser", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "teleporthomeuser", invoice, strings);
}
}
@@ -771,8 +931,9 @@ bool LLPanelRegionGeneralInfo::onKickAllCommit(const LLSD& notification, const L
gAgent.getID().toString(buffer);
strings.push_back(buffer);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
// historical message name
- LLEstateInfoModel::instance().sendEstateOwnerMessage("teleporthomeallusers", strings);
+ sendEstateOwnerMessage(gMessageSystem, "teleporthomeallusers", invoice, strings);
}
return false;
}
@@ -811,7 +972,8 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L
LLAgentUI::buildFullname(name);
strings.push_back(strings_t::value_type(name));
strings.push_back(strings_t::value_type(text));
- LLEstateInfoModel::instance().sendEstateOwnerMessage("simulatormessage", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "simulatormessage", invoice, strings);
return false;
}
@@ -897,7 +1059,8 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate()
buffer = llformat("%s", (getChild<LLUICtrl>("allow_parcel_changes_check")->getValue().asBoolean() ? "Y" : "N"));
strings.push_back(strings_t::value_type(buffer));
- LLEstateInfoModel::instance().sendEstateOwnerMessage("setregioninfo", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings);
}
// if we changed access levels, tell user about it
@@ -969,7 +1132,8 @@ BOOL LLPanelRegionDebugInfo::sendUpdate()
buffer = llformat("%s", (getChild<LLUICtrl>("disable_physics_check")->getValue().asBoolean() ? "Y" : "N"));
strings.push_back(buffer);
- LLEstateInfoModel::instance().sendEstateOwnerMessage("setregiondebug", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "setregiondebug", invoice, strings);
return TRUE;
}
@@ -1039,7 +1203,9 @@ bool LLPanelRegionDebugInfo::callbackReturn(const LLSD& notification, const LLSD
strings.push_back(llformat("%d", flags));
strings.push_back(target_avatar.asString());
- LLEstateInfoModel::instance().sendEstateOwnerMessage("estateobjectreturn", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+
+ sendEstateOwnerMessage(gMessageSystem, "estateobjectreturn", invoice, strings);
}
else
{
@@ -1057,6 +1223,7 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
strings_t strings;
strings.push_back("1"); // one physics step
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
if(!instance) return;
LLFloaterReg::showInstance("top_objects");
@@ -1066,7 +1233,7 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
self->getChildView("top_colliders_btn")->setEnabled(false);
self->getChildView("top_scripts_btn")->setEnabled(false);
- LLEstateInfoModel::instance().sendEstateOwnerMessage("colliders", strings);
+ self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);
}
// static
@@ -1075,6 +1242,7 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
strings_t strings;
strings.push_back("6"); // top 5 scripts
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
if(!instance) return;
LLFloaterReg::showInstance("top_objects");
@@ -1084,7 +1252,7 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
self->getChildView("top_colliders_btn")->setEnabled(false);
self->getChildView("top_scripts_btn")->setEnabled(false);
- LLEstateInfoModel::instance().sendEstateOwnerMessage("scripts", strings);
+ self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);
}
// static
@@ -1101,16 +1269,19 @@ bool LLPanelRegionDebugInfo::callbackRestart(const LLSD& notification, const LLS
strings_t strings;
strings.push_back("120");
- LLEstateInfoModel::instance().sendEstateOwnerMessage("restart", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings);
return false;
}
// static
void LLPanelRegionDebugInfo::onClickCancelRestart(void* data)
{
+ LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
strings_t strings;
strings.push_back("-1");
- LLEstateInfoModel::instance().sendEstateOwnerMessage("restart", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ self->sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings);
}
// static
@@ -1275,6 +1446,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
LL_INFOS() << "LLPanelRegionTerrainInfo::sendUpdate" << LL_ENDL;
std::string buffer;
strings_t strings;
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
// update the model
LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
@@ -1283,7 +1455,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
region_info.mTerrainLowerLimit = (F32) getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal();
// and sync the region with it
- region_info.sendRegionTerrain(LLEstateInfoModel::instance().getLastInvoice());
+ region_info.sendRegionTerrain(invoice);
// =======================================
// Assemble and send texturedetail message
@@ -1311,6 +1483,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
LLTextureCtrl* texture_ctrl;
std::string id_str;
+ LLMessageSystem* msg = gMessageSystem;
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
@@ -1324,7 +1497,7 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
strings.push_back(buffer);
}
}
- LLEstateInfoModel::instance().sendEstateOwnerMessage("texturedetail", strings);
+ sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
strings.clear();
// ========================================
@@ -1337,13 +1510,13 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
strings.push_back(buffer3);
}
- LLEstateInfoModel::instance().sendEstateOwnerMessage("textureheights", strings);
+ sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
strings.clear();
// ========================================
// Send texturecommit message
- LLEstateInfoModel::instance().sendEstateOwnerMessage("texturecommit", strings);
+ sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
return TRUE;
}
@@ -1383,10 +1556,12 @@ void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data)
std::string filepath = picker.getFirstFile();
gXferManager->expectFileForRequest(filepath);
+ LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data;
strings_t strings;
strings.push_back("download filename");
strings.push_back(filepath);
- LLEstateInfoModel::instance().sendEstateOwnerMessage("terrain", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
}
// static
@@ -1401,10 +1576,12 @@ void LLPanelRegionTerrainInfo::onClickUploadRaw(void* data)
std::string filepath = picker.getFirstFile();
gXferManager->expectFileForTransfer(filepath);
+ LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data;
strings_t strings;
strings.push_back("upload filename");
strings.push_back(filepath);
- LLEstateInfoModel::instance().sendEstateOwnerMessage("terrain", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
LLNotificationsUtil::add("RawUploadStarted");
}
@@ -1422,7 +1599,8 @@ bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, con
strings_t strings;
strings.push_back("bake");
- LLEstateInfoModel::instance().sendEstateOwnerMessage("terrain", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
return false;
}
@@ -1436,129 +1614,28 @@ LLPanelEstateInfo::LLPanelEstateInfo()
mEstateID(0) // invalid
{
LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
estate_info.setCommitCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
estate_info.setUpdateCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
-
- estate_info.setUpdateAccessCallback(boost::bind(&LLPanelEstateInfo::refreshAccessFromEstate, this, _1));
}
-//---------------------------------------------------------------------------
-// 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()
+// static
+void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch)
{
- 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");
-}
+ std::string name;
+
+ name.assign("estateupdateinfo");
+ static LLDispatchEstateUpdateInfo estate_update_info;
+ dispatch.addHandler(name, &estate_update_info);
-void LLPanelEstateInfo::onClickRemoveBannedAgent()
-{
- accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list");
-}
+ name.assign("setaccess");
+ static LLDispatchSetEstateAccess set_access;
+ dispatch.addHandler(name, &set_access);
-// 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");
- }
-}
+ name.assign("setexperience");
+ static LLDispatchSetEstateExperience set_experience;
+ dispatch.addHandler(name, &set_experience);
-// static
-void LLPanelEstateInfo::onClickRemoveEstateManager()
-{
- accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list");
+ estate_dispatch_initialized = true;
}
//---------------------------------------------------------------------------
@@ -1603,7 +1680,7 @@ bool LLPanelEstateInfo::kickUserConfirm(const LLSD& notification, const LLSD& re
strings_t strings;
strings.push_back(notification["payload"]["agent_id"].asString());
- LLEstateInfoModel::instance().sendEstateOwnerMessage("kickestate", strings);
+ sendEstateOwnerMessage(gMessageSystem, "kickestate", LLFloaterRegionInfo::getLastInvoice(), strings);
break;
}
default:
@@ -1674,11 +1751,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;
}
@@ -1686,348 +1765,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", LLEstateInfoModel::instance().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)
{
@@ -2057,36 +1797,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();
}
@@ -2103,13 +1816,12 @@ bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
strings_t strings;
//integers_t integers;
//LLFloaterRegionInfo::incrementSerial();
+ LLFloaterRegionInfo::nextInvoice();
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
//integers.push_back(LLFloaterRegionInfo::());::getPanelEstate();
- LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
- panel->clearAccessLists();
-
- LLEstateInfoModel::instance().setRegion(region);
+ sendEstateOwnerMessage(gMessageSystem, "getinfo", invoice, strings);
refresh();
@@ -2139,49 +1851,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));
@@ -2228,147 +1897,6 @@ void LLPanelEstateInfo::refreshFromEstate()
refresh();
}
-
-void LLPanelEstateInfo::refreshAccessFromEstate(U32 flags)
-{
- const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
- // grab the UUID's out of the string fields
- if (flags & ESTATE_ACCESS_ALLOWED_AGENTS)
- {
- LLNameListCtrl *allowed_agent_name_list(getChild<LLNameListCtrl>("allowed_avatar_name_list"));
-
- const uuid_set_t& allowed_agents(estate_info.getAllowedAgents());
- int totalAllowedAgents = allowed_agents.size();
-
- 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);
- 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();
- allowed_agent_name_list->deleteAllItems();
-
- for (const LLUUID &id : allowed_agents)
- {
- allowed_agent_name_list->addNameItem(id);
- }
- allowed_agent_name_list->sortByName(TRUE);
- }
- }
-
- if (flags & ESTATE_ACCESS_ALLOWED_GROUPS)
- {
- LLNameListCtrl* allowed_group_name_list(getChild<LLNameListCtrl>("allowed_group_name_list"));
- const uuid_set_t &allowed_groups(estate_info.getAllowedGroups());
-
- LLStringUtil::format_map_t args;
- args["[ALLOWEDGROUPS]"] = llformat("%d", allowed_groups.size());
- args["[MAXACCESS]"] = llformat("%d", ESTATE_MAX_GROUP_IDS);
- std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args);
- 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 (const LLUUID &id: allowed_groups)
- {
- allowed_group_name_list->addGroupNameItem(id);
- }
- allowed_group_name_list->sortByName(TRUE);
- }
- }
-
- if (flags & ESTATE_ACCESS_BANNED_AGENTS)
- {
- LLNameListCtrl* banned_agent_name_list(getChild<LLNameListCtrl>("banned_avatar_name_list"));
- const uuid_set_t &banned_agents(estate_info.getBannedAgents());
- int totalBannedAgents = banned_agents.size();
-
- 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);
- 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 (const LLUUID &id: banned_agents)
- {
- banned_agent_name_list->addNameItem(id);
- }
- banned_agent_name_list->sortByName(TRUE);
- }
- }
-
- if (flags & ESTATE_ACCESS_MANAGERS)
- {
- LLNameListCtrl* estate_manager_name_list(getChild<LLNameListCtrl>("estate_manager_name_list"));
- const uuid_set_t &estate_mgrs(estate_info.getEstateManagers());
-
- LLStringUtil::format_map_t args;
- args["[ESTATEMANAGERS]"] = llformat("%d", estate_mgrs.size());
- args["[MAXMANAGERS]"] = llformat("%d", ESTATE_MAX_MANAGERS);
- std::string msg = LLTrans::getString("RegionInfoEstateManagers", args);
- getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg));
-
- 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 (const LLUUID &id : estate_mgrs)
- {
- 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.
- updateControls(gAgent.getRegion());
-}
-
-
-namespace
-{
- LLSD set_to_llsdarray(const uuid_set_t &values)
- {
- LLSD result(LLSD::emptyArray());
-
- for (const LLUUID &id : values)
- {
- result.append(id);
- }
- return result;
- }
-}
-
BOOL LLPanelEstateInfo::sendUpdate()
{
LL_INFOS() << "LLPanelEsateInfo::sendUpdate()" << LL_ENDL;
@@ -2406,6 +1934,8 @@ bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, con
estate_info.setDenyAgeUnverified(getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean());
estate_info.setAllowVoiceChat(getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean());
estate_info.setAllowAccessOverride(getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean());
+ // JIGGLYPUFF
+ //estate_info.setAllowAccessOverride(getChild<LLUICtrl>("")->getValue().asBoolean());
// send the update to sim
estate_info.sendEstateInfo();
}
@@ -2465,22 +1995,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)
{
@@ -2501,8 +2015,8 @@ bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& re
LLAgentUI::buildFullname(name);
strings.push_back(strings_t::value_type(name));
strings.push_back(strings_t::value_type(text));
-
- LLEstateInfoModel::instance().sendEstateOwnerMessage("instantmessage", strings);
+ LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
+ sendEstateOwnerMessage(gMessageSystem, "instantmessage", invoice, strings);
return false;
}
@@ -2787,7 +2301,7 @@ void LLPanelEstateCovenant::sendChangeCovenantID(const LLUUID &asset_id)
msg->nextBlock("MethodData");
msg->addString("Method", "estatechangecovenantid");
- msg->addUUID("Invoice", LLEstateInfoModel::instance().getLastInvoice());
+ msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
msg->nextBlock("ParamList");
msg->addString("Parameter", getCovenantID().asString());
@@ -2867,6 +2381,96 @@ void LLPanelEstateCovenant::setCovenantTextEditor(const std::string& text)
mEditor->setText(text);
}
+// key = "estateupdateinfo"
+// strings[0] = estate name
+// strings[1] = str(owner_id)
+// strings[2] = str(estate_id)
+// strings[3] = str(estate_flags)
+// strings[4] = str((S32)(sun_hour * 1024))
+// strings[5] = str(parent_estate_id)
+// strings[6] = str(covenant_id)
+// strings[7] = str(covenant_timestamp)
+// strings[8] = str(send_to_agent_only)
+// strings[9] = str(abuse_email_addr)
+bool LLDispatchEstateUpdateInfo::operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings)
+{
+ LL_DEBUGS() << "Received estate update" << LL_ENDL;
+
+ // Update estate info model.
+ // This will call LLPanelEstateInfo::refreshFromEstate().
+ // *TODO: Move estate message handling stuff to llestateinfomodel.cpp.
+ LLEstateInfoModel::instance().update(strings);
+
+ return true;
+}
+
+bool LLDispatchSetEstateAccess::operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings)
+{
+ LLPanelEstateAccess* panel = LLFloaterRegionInfo::getPanelAccess();
+ if (panel && panel->getPendingUpdate())
+ {
+ panel->setPendingUpdate(false);
+ panel->updateLists();
+ }
+ return true;
+}
+
+LLSD LLDispatchSetEstateExperience::getIDs( sparam_t::const_iterator it, sparam_t::const_iterator end, S32 count )
+{
+ LLSD idList = LLSD::emptyArray();
+ LLUUID id;
+ while(count--> 0)
+ {
+ memcpy(id.mData, (*(it++)).data(), UUID_BYTES);
+ idList.append(id);
+ }
+ return idList;
+}
+
+// key = "setexperience"
+// strings[0] = str(estate_id)
+// strings[1] = str(send_to_agent_only)
+// strings[2] = str(num blocked)
+// strings[3] = str(num trusted)
+// strings[4] = str(num allowed)
+// strings[8] = bin(uuid) ...
+// ...
+bool LLDispatchSetEstateExperience::operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings)
+{
+ LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences();
+ if (!panel) return true;
+
+ sparam_t::const_iterator it = strings.begin();
+ ++it; // U32 estate_id = strtol((*it).c_str(), NULL, 10);
+ ++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10);
+
+ LLUUID id;
+ S32 num_blocked = strtol((*(it++)).c_str(), NULL, 10);
+ S32 num_trusted = strtol((*(it++)).c_str(), NULL, 10);
+ S32 num_allowed = strtol((*(it++)).c_str(), NULL, 10);
+
+ LLSD ids = LLSD::emptyMap()
+ .with("blocked", getIDs(it, strings.end(), num_blocked))
+ .with("trusted", getIDs(it + (num_blocked), strings.end(), num_trusted))
+ .with("allowed", getIDs(it + (num_blocked+num_trusted), strings.end(), num_allowed));
+
+ panel->processResponse(ids);
+
+ return true;
+}
+
BOOL LLPanelRegionExperiences::postBuild()
{
mAllowed = setupList("panel_allowed", ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE);
@@ -2879,8 +2483,6 @@ BOOL LLPanelRegionExperiences::postBuild()
getChild<LLTextBox>("allowed_text_help")->setText(getString("allowed_estate_text"));
getChild<LLTextBox>("blocked_text_help")->setText(getString("blocked_estate_text"));
- LLEstateInfoModel::instance().setUpdateExperienceCallback(boost::bind(&LLPanelRegionExperiences::refreshExperiencesFromEstate, this));
-
return LLPanelRegionInfo::postBuild();
}
@@ -2924,18 +2526,6 @@ void LLPanelRegionExperiences::processResponse( const LLSD& content )
}
-void LLPanelRegionExperiences::refreshExperiencesFromEstate()
-{
- const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
-
- LLSD ids = LLSDMap("blocked", set_to_llsdarray(estate_info.getBlockedExperiences()))
- ("trusted", set_to_llsdarray(estate_info.getTrustedExperiences()))
- ("allowed", set_to_llsdarray(estate_info.getAllowedExperiences()));
-
- processResponse(ids);
-}
-
-
// Used for both access add and remove operations, depending on the flag
// passed in (ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE, etc.)
// static
@@ -2998,7 +2588,11 @@ void LLPanelRegionExperiences::sendEstateExperienceDelta(U32 flags, const LLUUID
str[1] = llformat("%u", flags);
experience_id.toString(str[2]);
- LLEstateInfoModel::instance().sendEstateOwnerMessage("estateexperiencedelta", str);
+ LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences();
+ if (panel)
+ {
+ panel->sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str);
+ }
}
@@ -3136,6 +2730,971 @@ 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);
+}
+
//=========================================================================
const U32 LLPanelRegionEnvironment::DIRTY_FLAG_OVERRIDE(0x01 << 4);
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index e4687fff0c..0dda13cdc5 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 LLPanelRegionEnvironment;
class LLEventTimer;
@@ -75,15 +77,21 @@ public:
/*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
/*virtual*/ BOOL postBuild();
+ static void processEstateOwnerRequest(LLMessageSystem* msg, void**);
+
// get and process region info if necessary.
static void processRegionInfo(LLMessageSystem* msg);
+ static const LLUUID& getLastInvoice() { return sRequestInvoice; }
+ static void nextInvoice() { sRequestInvoice.generate(); }
//static S32 getSerial() { return sRequestSerial; }
//static void incrementSerial() { sRequestSerial++; }
static LLPanelEstateInfo* getPanelEstate();
+ static LLPanelEstateAccess* getPanelAccess();
static LLPanelEstateCovenant* getPanelCovenant();
static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
static LLPanelRegionExperiences* getPanelExperiences();
@@ -103,20 +111,22 @@ 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;
typedef std::vector<LLPanelRegionInfo*> info_panels_t;
info_panels_t mInfoPanels;
LLPanelRegionEnvironment *mEnvironmentPanel;
+ //static S32 sRequestSerial; // serial # of last EstateOwnerRequest
+ static LLUUID sRequestInvoice;
private:
+ LLAgent::god_level_change_slot_t mGodLevelChangeSlot;
boost::signals2::connection mRegionChangedCallback;
};
@@ -152,6 +162,15 @@ protected:
typedef std::vector<std::string> strings_t;
//typedef std::vector<U32> integers_t;
+ void sendEstateOwnerMessage(
+ LLMessageSystem* msg,
+ const std::string& request,
+ const LLUUID& invoice,
+ const strings_t& strings);
+
+
+ // member data
+ LLHost mHost;
};
/////////////////////////////////////////////////////////////////////////////
@@ -253,9 +272,12 @@ private:
};
/////////////////////////////////////////////////////////////////////////////
+
class LLPanelEstateInfo : public LLPanelRegionInfo
{
public:
+ static void initDispatch(LLDispatcher& dispatch);
+
void onChangeFixedSun();
void onChangeUseGlobalTime();
void onChangeAccessOverride();
@@ -265,35 +287,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);
@@ -315,7 +313,6 @@ public:
virtual void refresh();
void refreshFromEstate();
- void refreshAccessFromEstate(U32 flags);
static bool isLindenEstate();
@@ -330,7 +327,6 @@ protected:
void commitEstateAccess();
void commitEstateManagers();
- void clearAccessLists();
BOOL checkSunHourSlider(LLUICtrl* child_ctrl);
U32 mEstateID;
@@ -418,7 +414,7 @@ public:
void sendPurchaseRequest()const;
void processResponse( const LLSD& content );
private:
- void refreshExperiencesFromEstate();
+ void refreshRegionExperiences();
static std::string regionCapabilityQuery(LLViewerRegion* region, const std::string &cap);
@@ -433,4 +429,66 @@ private:
LLUUID mDefaultExperience;
};
+
+class LLPanelEstateAccess : public LLPanelRegionInfo
+{
+ LOG_CLASS(LLPanelEstateAccess);
+
+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 756dafe270..07f100ca55 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"
@@ -199,6 +200,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/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index a7151c4d1b..226283e1b2 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -3072,7 +3072,7 @@ void LLViewerObject::unlinkControlAvatar()
if (mControlAvatar)
{
mControlAvatar->markForDeath();
- mControlAvatar->mRootVolp = NULL;
+ mControlAvatar->mRootVolp = NULL;
mControlAvatar = NULL;
}
}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 1c4f7c7b4d..4c9e57f0b4 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -2893,6 +2893,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("ExtEnvironment");
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 996d140805..6bb161aa4b 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1779,6 +1779,16 @@ LLViewerWindow::LLViewerWindow(const Params& p)
LLCoordScreen scr;
mWindow->getSize(&scr);
+ // Reset UI scale factor on first run if OS's display scaling is not 100%
+ if (gSavedSettings.getBOOL("ResetUIScaleOnFirstRun"))
+ {
+ if (mWindow->getSystemUISize() != 1.f)
+ {
+ gSavedSettings.setF32("UIScaleFactor", 1.f);
+ }
+ gSavedSettings.setBOOL("ResetUIScaleOnFirstRun", FALSE);
+ }
+
// Get the real window rect the window was created with (since there are various OS-dependent reasons why
// the size of a window or fullscreen context may have been adjusted slightly...)
F32 ui_scale_factor = llclamp(gSavedSettings.getF32("UIScaleFactor"), MIN_UI_SCALE, MAX_UI_SCALE) * mWindow->getSystemUISize();
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 563d179d4c..2382434682 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -198,6 +198,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index b4d5b96803..c24b7fb5d5 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -12,6 +12,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 e14419efb1..1b4696b615 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1584,6 +1584,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">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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>
@@ -3181,16 +3205,22 @@ Klicken Sie auf &apos;Akzeptieren &apos;, 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!
@@ -3242,6 +3272,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 dd8a562cb7..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 &quot;Zugang&quot; 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]."/>
@@ -26,7 +26,7 @@
<check_box label="Direktteleport zulassen" name="allow_direct_teleport"/>
<button label="Übernehmen" name="apply_btn"/>
<text name="estate_manager_label">
- Grundbesitzverwalter:
+ Grundbesitzsverwalter:
</text>
<text name="allow_resident_label">
Immer zugelassen:
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 c30611c66c..c8cd499956 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Objektprofil">
- <panel.string name="text deed continued">Übertragung</panel.string>
- <panel.string name="text deed">Übertragung</panel.string>
- <panel.string name="text modify info 1">Sie können dieses Objekt bearbeiten.</panel.string>
- <panel.string name="text modify info 2">Sie können diese Objekte bearbeiten.</panel.string>
- <panel.string name="text modify info 3">Sie können dieses Objekt nicht bearbeiten.</panel.string>
- <panel.string name="text modify info 4">Sie können diese Objekte nicht bearbeiten.</panel.string>
- <panel.string name="text modify info 5">Dieses Objekt kann nicht über eine Regionsgrenze hinweg geändert werden</panel.string>
- <panel.string name="text modify info 6">Diese Objekte können nicht über eine Regionsgrenze hinweg geändert werden</panel.string>
- <panel.string name="text modify warning">Diese Objekt verfügt über verknüpfte Teile</panel.string>
- <panel.string name="Cost Default">Preis: L$</panel.string>
- <panel.string name="Cost Total">Summenpreis: L$</panel.string>
- <panel.string name="Cost Per Unit">Stückpreis: L$</panel.string>
- <panel.string name="Cost Mixed">Mischpreis</panel.string>
- <panel.string name="Sale Mixed">Mischverkauf</panel.string>
+ <panel.string name="text deed continued">
+ Übertragung
+ </panel.string>
+ <panel.string name="text deed">
+ Übertragung
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Sie können dieses Objekt bearbeiten.
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Sie können diese Objekte bearbeiten.
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Sie können dieses Objekt nicht bearbeiten.
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Sie können diese Objekte nicht bearbeiten.
+ </panel.string>
+ <panel.string name="text modify info 5">
+ Dieses Objekt kann nicht über eine Regionsgrenze hinweg geändert werden
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Diese Objekte können nicht über eine Regionsgrenze hinweg geändert werden
+ </panel.string>
+ <panel.string name="text modify warning">
+ Diese Objekt verfügt über verknüpfte Teile
+ </panel.string>
+ <panel.string name="Cost Default">
+ Preis: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Summenpreis: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Stückpreis: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Mischpreis
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Mischverkauf
+ </panel.string>
<text name="title" value="Objektprofil"/>
<text name="where" value="(Inworld)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Name:</text>
- <text name="Description:">Beschreibung:</text>
- <text name="CreatorNameLabel">Ersteller:</text>
- <text name="Owner:">Eigentümer:</text>
- <text name="Group_label">Gruppe:</text>
+ <text name="Name:">
+ Name:
+ </text>
+ <text name="Description:">
+ Beschreibung:
+ </text>
+ <text name="CreatorNameLabel">
+ Ersteller:
+ </text>
+ <text name="Owner:">
+ Eigentümer:
+ </text>
+ <text name="Group_label">
+ Gruppe:
+ </text>
<button name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
<name_box initial_value="Wird geladen..." name="Group Name Proxy"/>
<button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
- <text name="label click action">Bei Linksklick:</text>
+ <text name="label click action">
+ Bei Linksklick:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Berühren (Standard)" name="Touch/grab(default)"/>
<combo_box.item label="Auf Objekt setzen" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">Sie können dieses Objekt bearbeiten.</text>
- <text name="Anyone can:">Jeder:</text>
+ <text name="perm_modify">
+ Sie können dieses Objekt bearbeiten.
+ </text>
+ <text name="Anyone can:">
+ Jeder:
+ </text>
<check_box label="Kopieren" name="checkbox allow everyone copy"/>
<check_box label="Bewegen" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Gruppe:</text>
+ <text name="GroupLabel">
+ Gruppe:
+ </text>
<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
- <text name="NextOwnerLabel">Nächster Eigentümer:</text>
+ <text name="NextOwnerLabel">
+ Nächster Eigentümer:
+ </text>
<check_box label="Bearbeiten" name="checkbox next owner can modify"/>
<check_box label="Kopieren" name="checkbox next owner can copy"/>
<check_box label="Transferieren" name="checkbox next owner can transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Preis: L$" name="Edit Cost"/>
<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
- <text name="pathfinding_attributes_label">Pathfinding-Attribute:</text>
- <text name="B:">B:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ Pathfinding-Attribute:
+ </text>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Öffnen" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index f80b1ee1ec..7b292674c4 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -2240,6 +2240,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 37c4e3ff8d..48f80c4d72 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 42b1a1ec1b..931e44b319 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3815,6 +3815,62 @@ Can&apos;t add estate owner to estate &apos;Banned Resident&apos; 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">
+&lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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 71133f582f..12edeb3ce9 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -315,17 +315,6 @@ Please try logging in again in a minute.</string>
<string name="BUTTON_DOCK">Dock</string>
<string name="BUTTON_HELP">Show Help</string>
- <!-- ToolTips for notecards -->
- <string name="TooltipNotecardNotAllowedTypeDrop">
-Items of this type can't be attached
-to notecards on this region.
- </string>
- <string name="TooltipNotecardOwnerRestrictedDrop">
-Only items with unrestricted
-'next owner' permissions
-"can be attached to notecards.
- </string>
-
<!-- searching - generic -->
<string name="Searching">Searching...</string>
<string name="NoneFound">None found.</string>
@@ -378,11 +367,6 @@ Error in upload request. Please visit
http://secondlife.com/support for help fixing this problem.
</string>
- <!-- Settings errors -->
- <string name="SettingValidationError">Validation failed for importing settings [NAME]</string>
- <string name="SettingImportFileError">Could not open file [FILE]</string>
- <string name="SettingParseFileError">Could not open file [FILE]</string>
- <string name="SettingTranslateError">Could not translate legacy windlight [NAME]</string>
<!-- Asset Type human readable names: these will replace variable [TYPE] in notification FailedToFindWearable* -->
<!-- Will also replace [OBJECTTYPE] in notifications: UserGiveItem, ObjectGiveItem -->
<string name="texture">texture</string>
@@ -409,10 +393,9 @@ http://secondlife.com/support for help fixing this problem.
<string name="simstate">simstate</string>
<string name="favorite">favorite</string>
<string name="symbolic link">link</string>
- <string name="settings blob">settings</string>
- <string name="symbolic folder link">folder link</string>
- <string name="mesh">mesh</string>
-
+ <string name="symbolic folder link">folder link</string>
+ <string name="mesh">mesh</string>
+
<!-- llvoavatar. Displayed in the avatar chat bubble -->
<string name="AvatarEditingAppearance">(Editing Appearance)</string>
<string name="AvatarAway">Away</string>
@@ -536,7 +519,6 @@ http://secondlife.com/support for help fixing this problem.
<string name="ManageEstateSilently">Manage your estates silently</string>
<string name="ChangeYourDefaultAnimations">Change your default animations</string>
<string name="ForceSitAvatar">Force your avatar to sit</string>
- <string name="ChangeEnvSettings">Change your environment settings</string>
<string name="NotConnected">Not Connected</string>
<string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name -->
@@ -2676,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 d95b2e41af..57475b2f53 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -178,6 +178,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 4f407e4b1a..2467f7785b 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -12,6 +12,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"/>
@@ -281,6 +282,7 @@
<menu_item_check label="Formas del físico" name="Physics Shapes"/>
<menu_item_check label="Actualizar el tipo" name="Update Type"/>
<menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/>
+ <menu_item_check label="Recuento de triángulo" name="Triangle Count"/>
<menu_item_check label="Crear cola" name="Build Queue"/>
<menu_item_check label="Partículas" name="Particles"/>
<menu_item_check label="Articulaciones" name="Joints"/>
@@ -355,6 +357,7 @@
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
<menu_item_check label="Mostrar los huesos" name="Show Bones"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
+ <menu_item_check label="Mostrar las medidas impostoras" name="Show Impostor Extents"/>
<menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/>
</menu>
<menu_item_check label="HTTP Textures" name="HTTP Textures"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 8ba8144cb6..46bfa00296 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1574,6 +1574,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">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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>
@@ -3164,16 +3188,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.
@@ -3225,6 +3255,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 ae62976486..4cfbffb887 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 b9c8139f16..2032edfb3a 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Perfil del objeto">
- <panel.string name="text deed continued">Transferir</panel.string>
- <panel.string name="text deed">Transferir</panel.string>
- <panel.string name="text modify info 1">Puedes modificar este objeto</panel.string>
- <panel.string name="text modify info 2">Puedes modificar estos objetos</panel.string>
- <panel.string name="text modify info 3">No puedes modificar este objeto</panel.string>
- <panel.string name="text modify info 4">No puedes modificar estos objetos</panel.string>
- <panel.string name="text modify info 5">No se puede modificar este objeto a través del límite de una región</panel.string>
- <panel.string name="text modify info 6">No se pueden modificar estos objetos a través del límite de una región</panel.string>
- <panel.string name="text modify warning">Este objeto tiene partes enlazadas</panel.string>
- <panel.string name="Cost Default">Precio: L$</panel.string>
- <panel.string name="Cost Total">Precio total: L$</panel.string>
- <panel.string name="Cost Per Unit">Price Per: L$</panel.string>
- <panel.string name="Cost Mixed">Mixed Price</panel.string>
- <panel.string name="Sale Mixed">Mixed Sale</panel.string>
+ <panel.string name="text deed continued">
+ Transferir
+ </panel.string>
+ <panel.string name="text deed">
+ Transferir
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Puedes modificar este objeto
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Puedes modificar estos objetos
+ </panel.string>
+ <panel.string name="text modify info 3">
+ No puedes modificar este objeto
+ </panel.string>
+ <panel.string name="text modify info 4">
+ No puedes modificar estos objetos
+ </panel.string>
+ <panel.string name="text modify info 5">
+ No se puede modificar este objeto a través del límite de una región
+ </panel.string>
+ <panel.string name="text modify info 6">
+ No se pueden modificar estos objetos a través del límite de una región
+ </panel.string>
+ <panel.string name="text modify warning">
+ Este objeto tiene partes enlazadas
+ </panel.string>
+ <panel.string name="Cost Default">
+ Precio: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Precio total: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Price Per: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Mixed Price
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Mixed Sale
+ </panel.string>
<text name="title" value="Perfil del objeto"/>
<text name="where" value="(En el mundo)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Nombre:</text>
- <text name="Description:">Descripción:</text>
- <text name="CreatorNameLabel">Creador:</text>
- <text name="Owner:">Propietario:</text>
- <text name="Group_label">Grupo:</text>
+ <text name="Name:">
+ Nombre:
+ </text>
+ <text name="Description:">
+ Descripción:
+ </text>
+ <text name="CreatorNameLabel">
+ Creador:
+ </text>
+ <text name="Owner:">
+ Propietario:
+ </text>
+ <text name="Group_label">
+ Grupo:
+ </text>
<button name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
<name_box initial_value="Cargando..." name="Group Name Proxy"/>
<button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
- <text name="label click action">Pulsa para:</text>
+ <text name="label click action">
+ Pulsa para:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Tocarlo (por defecto)" name="Touch/grab(default)"/>
<combo_box.item label="Sentarme en el objeto" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">Puedes modificar este objeto</text>
- <text name="Anyone can:">Cualquiera:</text>
+ <text name="perm_modify">
+ Puedes modificar este objeto
+ </text>
+ <text name="Anyone can:">
+ Cualquiera:
+ </text>
<check_box label="Copiar" name="checkbox allow everyone copy"/>
<check_box label="Mover" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Grupo:</text>
+ <text name="GroupLabel">
+ Grupo:
+ </text>
<check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/>
- <text name="NextOwnerLabel">Próximo propietario:</text>
+ <text name="NextOwnerLabel">
+ Próximo propietario:
+ </text>
<check_box label="Modificar" name="checkbox next owner can modify"/>
<check_box label="Copiar" name="checkbox next owner can copy"/>
<check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Precio: L$" name="Edit Cost"/>
<check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Permitir que la gente vea este objeto en los resultados de la búsqueda"/>
- <text name="pathfinding_attributes_label">Atributos de pathfinding:</text>
- <text name="B:">B:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ Atributos de pathfinding:
+ </text>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Abrir" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index a6bda0dabe..5b1f26e3d4 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -2217,6 +2217,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&apos;écran" label_selected="Capture d&apos;écran" name="snapshot_btn" width="110"/>
- <button label="Vendre à n&apos;importe qui" label_selected="Vendre à n&apos;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 90c2bde6f4..2d4bafff2d 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -198,6 +198,7 @@
<combo_box.item label="Payer l&apos;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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 185820fb63..49cbd0df47 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -12,6 +12,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&apos;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"/>
@@ -296,6 +297,7 @@
<menu_item_check label="Zone de texture" name="Texture Area"/>
<menu_item_check label="Zone de face" name="Face Area"/>
<menu_item_check label="Infos sur le niveau de détail" name="LOD Info"/>
+ <menu_item_check label="Nombre de triangles" name="Triangle Count"/>
<menu_item_check label="File d&apos;attente pour la construction" name="Build Queue"/>
<menu_item_check label="Lumières" name="Lights"/>
<menu_item_check label="Particules" name="Particles"/>
@@ -408,6 +410,7 @@
<menu_item_check label="Afficher le squelette de collision" name="Show Collision Skeleton"/>
<menu_item_check label="Voir les os" name="Show Bones"/>
<menu_item_check label="Afficher la cible de l&apos;avatar" name="Display Agent Target"/>
+ <menu_item_check label="Afficher les étendues d&apos;imposteur" name="Show Impostor Extents"/>
<menu_item_call label="Dump Attachments" name="Dump Attachments"/>
<menu_item_call label="Débogage des textures des avatars" name="Debug Avatar Textures"/>
<menu_item_call label="Dump Local Textures" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 7fbea9c0ae..67d0421c67 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1567,6 +1567,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&apos;ajouter le gérant de domaine à la liste interdite.
+ </notification>
+ <notification name="GroupIsAlreadyInList">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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&apos;apparence jusqu&apos;à ce que les habits et la silhouette soient chargés.
</notification>
@@ -3165,16 +3189,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&apos;un des effets de voix auxquels vous êtes abonné a expiré.
-[[URL] Cliquez ici] pour renouveler votre abonnement.
+ Au moins l&apos;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&apos;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&apos;un de vos effets de voix expirera dans moins de [INTERVAL] jours.
-[[URL] Cliquez ici] pour renouveler votre abonnement.
+ Au moins l&apos;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 !
@@ -3226,6 +3256,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&apos;espace libre est de seulement [FREE_MEMORY]KB.
</notification>
+ <notification name="SnapshotToLocalDirNotExist">
+ Échec d’enregistrement de la photo dans [PATH] : Le répertoire n&apos;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&apos;utilisateur" name="username_combo" tool_tip="Nom d&apos;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&apos;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&apos;utilisateur" name="username_combo" tool_tip="Nom d&apos;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&apos;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&apos;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&apos;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&apos;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 f6b4f28046..9064da2a5f 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Profil de l&apos;objet">
- <panel.string name="text deed continued">Céder</panel.string>
- <panel.string name="text deed">Céder</panel.string>
- <panel.string name="text modify info 1">Vous pouvez modifier cet objet</panel.string>
- <panel.string name="text modify info 2">Vous pouvez modifier ces objets</panel.string>
- <panel.string name="text modify info 3">Vous ne pouvez pas modifier cet objet</panel.string>
- <panel.string name="text modify info 4">Vous ne pouvez pas modifier ces objets</panel.string>
- <panel.string name="text modify info 5">Impossible de modifier cet objet au-delà de la frontière d&apos;une région</panel.string>
- <panel.string name="text modify info 6">Impossible de modifier ces objets au-delà de la frontière d&apos;une région</panel.string>
- <panel.string name="text modify warning">Cet objet comprend des parties liées</panel.string>
- <panel.string name="Cost Default">Prix : L$</panel.string>
- <panel.string name="Cost Total">Prix total : L$</panel.string>
- <panel.string name="Cost Per Unit">Prix par : L$</panel.string>
- <panel.string name="Cost Mixed">Prix mixte</panel.string>
- <panel.string name="Sale Mixed">Vente mixte</panel.string>
+ <panel.string name="text deed continued">
+ Céder
+ </panel.string>
+ <panel.string name="text deed">
+ Céder
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Vous pouvez modifier cet objet
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Vous pouvez modifier ces objets
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Vous ne pouvez pas modifier cet objet
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Vous ne pouvez pas modifier ces objets
+ </panel.string>
+ <panel.string name="text modify info 5">
+ Impossible de modifier cet objet au-delà de la frontière d&apos;une région
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Impossible de modifier ces objets au-delà de la frontière d&apos;une région
+ </panel.string>
+ <panel.string name="text modify warning">
+ Cet objet comprend des parties liées
+ </panel.string>
+ <panel.string name="Cost Default">
+ Prix : L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Prix total : L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Prix par : L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Prix mixte
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Vente mixte
+ </panel.string>
<text name="title" value="Profil de l&apos;objet"/>
<text name="where" value="(dans Second Life)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Nom :</text>
- <text name="Description:">Description :</text>
- <text name="CreatorNameLabel">Créateur :</text>
- <text name="Owner:">Propriétaire :</text>
- <text name="Group_label">Groupe :</text>
+ <text name="Name:">
+ Nom :
+ </text>
+ <text name="Description:">
+ Description :
+ </text>
+ <text name="CreatorNameLabel">
+ Créateur :
+ </text>
+ <text name="Owner:">
+ Propriétaire :
+ </text>
+ <text name="Group_label">
+ Groupe :
+ </text>
<button name="button set group" tool_tip="Choisir un groupe pour partager les droits relatifs à cet objet"/>
<name_box initial_value="Chargement…" name="Group Name Proxy"/>
<button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les droits au prochain propriétaire. Seul un officier peut céder les objets partagés d&apos;un groupe."/>
- <text name="label click action">Cliquer pour :</text>
+ <text name="label click action">
+ Cliquer pour :
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/>
<combo_box.item label="S&apos;asseoir sur l&apos;objet" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<combo_box.item label="Payer l&apos;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">Vous pouvez modifier cet objet</text>
- <text name="Anyone can:">N&apos;importe qui :</text>
+ <text name="perm_modify">
+ Vous pouvez modifier cet objet
+ </text>
+ <text name="Anyone can:">
+ N&apos;importe qui :
+ </text>
<check_box label="Copier" name="checkbox allow everyone copy"/>
<check_box label="Bouger" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Groupe :</text>
+ <text name="GroupLabel">
+ Groupe :
+ </text>
<check_box label="Partager" name="checkbox share with group" tool_tip="Autoriser tous les membres du groupe choisi à partager vos droits de modification pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Céder."/>
- <text name="NextOwnerLabel">Le prochain propriétaire :</text>
+ <text name="NextOwnerLabel">
+ Le prochain propriétaire :
+ </text>
<check_box label="Modifier" name="checkbox next owner can modify"/>
<check_box label="Copier" name="checkbox next owner can copy"/>
<check_box label="Transférer" name="checkbox next owner can transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Prix : L$" name="Edit Cost"/>
<check_box label="Afficher avec la recherche" name="search_check" tool_tip="Permettre aux autres résidents de voir cet objet dans les résultats de recherche"/>
- <text name="pathfinding_attributes_label">Attributs de recherche de chemin :</text>
- <text name="B:">B :</text>
- <text name="O:">O :</text>
- <text name="G:">G :</text>
- <text name="E:">E :</text>
- <text name="N:">N :</text>
- <text name="F:">F :</text>
+ <text name="pathfinding_attributes_label">
+ Attributs de recherche de chemin :
+ </text>
+ <text name="B:">
+ B :
+ </text>
+ <text name="O:">
+ O :
+ </text>
+ <text name="G:">
+ G :
+ </text>
+ <text name="E:">
+ E :
+ </text>
+ <text name="N:">
+ N :
+ </text>
+ <text name="F:">
+ F :
+ </text>
</panel>
<panel name="button_panel">
<button label="Ouvrir" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 5cd3c563bf..5cf22ff348 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -2240,6 +2240,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&apos;asta" label_selected="Inizia l&apos;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 1ebb45d02b..c81c3736b4 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -205,6 +205,7 @@
<combo_box.item label="Paga l&apos;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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index c3f48c0963..597fe9c2e4 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -12,6 +12,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"/>
@@ -281,6 +282,7 @@
<menu_item_check label="Forme fisica" name="Physics Shapes"/>
<menu_item_check label="Aggiorna tipo" name="Update Type"/>
<menu_item_check label="Info livello dettaglio" name="LOD Info"/>
+ <menu_item_check label="Conteggio triangolo" name="Triangle Count"/>
<menu_item_check label="Crea coda" name="Build Queue"/>
<menu_item_check label="Particelle" name="Particles"/>
<menu_item_check label="Giunti" name="Joints"/>
@@ -355,6 +357,7 @@
<menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
<menu_item_check label="Mostra ossa" name="Show Bones"/>
<menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
+ <menu_item_check label="Mostra Impostor Extents" name="Show Impostor Extents"/>
<menu_item_call label="Debug texture dell&apos;avatar" name="Debug Avatar Textures"/>
</menu>
<menu_item_check label="Texture HTTP" name="HTTP Textures"/>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 1baf8e1b87..f64b652204 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1569,6 +1569,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">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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&apos;aspetto fisico finchè gli abiti e i vestiti non sono caricati.
</notification>
@@ -1872,7 +1896,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">
- Vuoi rimuovere questo Residente dall’elenco degli espulsi solo per questa proprietà immobiliare 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">
@@ -3168,16 +3192,22 @@ Clicca su Accetta per unirti alla chat oppure su Declina per declinare l&apos;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&apos;abbonamento.
+ Almeno una delle manipolazioni vocali alle quali sei iscritto è scaduta.
+[[URL] Fai clic qui] per rinnovare l&apos;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&apos;abbonamento.
+ Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali.
+[[URL] Fai clic qui] per rinnovare l&apos;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&apos;abbonamento.
+ Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni.
+[[URL] Fai clic qui] per rinnovare l&apos;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.
@@ -3229,6 +3259,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 525458d163..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."/>
@@ -26,10 +26,10 @@
<check_box label="Permetti teleport diretto" name="allow_direct_teleport"/>
<button label="Applica" name="apply_btn"/>
<text name="estate_manager_label">
- Gestori delle proprietà immobiliari:
+ Manager delle proprietà:
</text>
<text name="allow_resident_label">
- Sempre consentiti:
+ Sempre consentito:
</text>
<button label="Aggiungi..." name="add_estate_manager_btn"/>
<button label="Rimuovi..." name="remove_estate_manager_btn"/>
@@ -39,7 +39,7 @@
Gruppi sempre consentiti:
</text>
<text name="ban_resident_label">
- Sempre espulsi:
+ Sempre escluso:
</text>
<button label="Aggiungi..." name="add_allowed_group_btn"/>
<button label="Rimuovi..." name="remove_allowed_group_btn"/>
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 aabefd7d3c..72a89c77ab 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Profilo dell&apos;oggetto">
- <panel.string name="text deed continued">Cessione</panel.string>
- <panel.string name="text deed">Cessione</panel.string>
- <panel.string name="text modify info 1">Tu puoi modificare questo oggetto</panel.string>
- <panel.string name="text modify info 2">Tu puoi modificare questi oggetti</panel.string>
- <panel.string name="text modify info 3">Non puoi modificare questo oggetto</panel.string>
- <panel.string name="text modify info 4">Non puoi modificare questi oggetti</panel.string>
- <panel.string name="text modify info 5">Questo oggetto non può essere modificato attraverso il confine di una regione</panel.string>
- <panel.string name="text modify info 6">Questi oggetti non possono essere modificati attraverso il confine di una regione</panel.string>
- <panel.string name="text modify warning">Questo oggetto ha parti collegate</panel.string>
- <panel.string name="Cost Default">Prezzo: L$</panel.string>
- <panel.string name="Cost Total">Prezzo totale: L$</panel.string>
- <panel.string name="Cost Per Unit">Prezzo per: L$</panel.string>
- <panel.string name="Cost Mixed">Prezzo misto</panel.string>
- <panel.string name="Sale Mixed">Vendita mista</panel.string>
+ <panel.string name="text deed continued">
+ Cessione
+ </panel.string>
+ <panel.string name="text deed">
+ Cessione
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Tu puoi modificare questo oggetto
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Tu puoi modificare questi oggetti
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Non puoi modificare questo oggetto
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Non puoi modificare questi oggetti
+ </panel.string>
+ <panel.string name="text modify info 5">
+ Questo oggetto non può essere modificato attraverso il confine di una regione
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Questi oggetti non possono essere modificati attraverso il confine di una regione
+ </panel.string>
+ <panel.string name="text modify warning">
+ Questo oggetto ha parti collegate
+ </panel.string>
+ <panel.string name="Cost Default">
+ Prezzo: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Prezzo totale: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Prezzo per: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Prezzo misto
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Vendita mista
+ </panel.string>
<text name="title" value="Profilo dell&apos;oggetto"/>
<text name="where" value="(in Second Life)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Nome:</text>
- <text name="Description:">Descrizione:</text>
- <text name="CreatorNameLabel">Ideatore:</text>
- <text name="Owner:">Proprietario:</text>
- <text name="Group_label">Gruppo:</text>
+ <text name="Name:">
+ Nome:
+ </text>
+ <text name="Description:">
+ Descrizione:
+ </text>
+ <text name="CreatorNameLabel">
+ Ideatore:
+ </text>
+ <text name="Owner:">
+ Proprietario:
+ </text>
+ <text name="Group_label">
+ Gruppo:
+ </text>
<button name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all&apos;oggetto"/>
<name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/>
<button label="Cessione" label_selected="Cessione" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo."/>
- <text name="label click action">Fai clic per:</text>
+ <text name="label click action">
+ Fai clic per:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Tocca (predefinito)" name="Touch/grab(default)"/>
<combo_box.item label="Siediti sull&apos;oggetto" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">Tu puoi modificare questo oggetto</text>
- <text name="Anyone can:">Chiunque:</text>
+ <text name="perm_modify">
+ Tu puoi modificare questo oggetto
+ </text>
+ <text name="Anyone can:">
+ Chiunque:
+ </text>
<check_box label="Copia" name="checkbox allow everyone copy"/>
<check_box label="Sposta" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Gruppo:</text>
+ <text name="GroupLabel">
+ Gruppo:
+ </text>
<check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
- <text name="NextOwnerLabel">Proprietario successivo:</text>
+ <text name="NextOwnerLabel">
+ Proprietario successivo:
+ </text>
<check_box label="Modifica" name="checkbox next owner can modify"/>
<check_box label="Copia" name="checkbox next owner can copy"/>
<check_box label="Trasferisci" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Prezzo: L$" name="Edit Cost"/>
<check_box label="Mostra nella ricerca" name="search_check" tool_tip="Permetti alle persone di vedere questo oggetto nei risultati della ricerca"/>
- <text name="pathfinding_attributes_label">Attributi pathfinding:</text>
- <text name="B:">B:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ Attributi pathfinding:
+ </text>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Apri" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 455ccf87eb..fc0da06985 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -2225,6 +2225,18 @@ Se continui a ricevere questo messaggio, contatta l&apos;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 a67916b50f..60ddae66c5 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -204,6 +204,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 6dcb4e0ef3..9411a4dd5e 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -12,6 +12,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"/>
@@ -296,6 +297,7 @@
<menu_item_check label="テクスチャの範囲" name="Texture Area"/>
<menu_item_check label="側面" name="Face Area"/>
<menu_item_check label="LOD 情報" name="LOD Info"/>
+ <menu_item_check label="三角形の数" name="Triangle Count"/>
<menu_item_check label="制作キュー" name="Build Queue"/>
<menu_item_check label="光" name="Lights"/>
<menu_item_check label="パーティクル" name="Particles"/>
@@ -408,6 +410,7 @@
<menu_item_check label="骨組みの衝突判定を表示する" name="Show Collision Skeleton"/>
<menu_item_check label="骨を表示" name="Show Bones"/>
<menu_item_check label="エージェントのターゲットを表示する" name="Display Agent Target"/>
+ <menu_item_check label="インポスターの範囲を表示" name="Show Impostor Extents"/>
<menu_item_call label="アタッチメントをダンプ" name="Dump Attachments"/>
<menu_item_call label="アバターテクスチャをデバッグ" name="Debug Avatar Textures"/>
<menu_item_call label="ローカルテクスチャをダンプ" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 9251a8e5ff..8e22c7668f 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1599,6 +1599,30 @@ SHA1 フィンガープリント: [MD5_DIGEST]
<notification name="ProblemAddingEstateManagerBanned">
追放された住人を不動産管理者リストに追加できません。
</notification>
+ <notification name="ProblemBanningEstateManager">
+ 禁止リストに不動産マネージャー [AGENT] を追加できません。
+ </notification>
+ <notification name="GroupIsAlreadyInList">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; はすでに許可されたグループのリストに追加されています。
+ </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>
@@ -3209,13 +3233,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">
新しいボイスモーフィング効果が登場!
@@ -3267,6 +3300,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 385c16dfab..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] をご覧ください。"/>
@@ -26,25 +26,25 @@
<check_box label="直接テレポートを許可" name="allow_direct_teleport"/>
<button label="適用" name="apply_btn"/>
<text name="estate_manager_label">
- 不動産マネージャー:
+ 不動産マネージャー:
</text>
<text name="allow_resident_label">
常に許可:
</text>
<button label="追加..." name="add_estate_manager_btn"/>
- <button label="削除…" name="remove_estate_manager_btn"/>
+ <button label="削除..." name="remove_estate_manager_btn"/>
<button label="追加..." name="add_allowed_avatar_btn"/>
- <button label="削除…" name="remove_allowed_avatar_btn"/>
+ <button label="削除..." name="remove_allowed_avatar_btn"/>
<text name="allow_group_label">
- 常に許可されたグループ:
+ グループを常に許可:
</text>
<text name="ban_resident_label">
常に禁止:
</text>
<button label="追加..." name="add_allowed_group_btn"/>
- <button label="削除…" name="remove_allowed_group_btn"/>
+ <button label="削除..." name="remove_allowed_group_btn"/>
<button label="追加..." name="add_banned_avatar_btn"/>
- <button label="削除…" name="remove_banned_avatar_btn"/>
+ <button label="削除..." name="remove_banned_avatar_btn"/>
<button label="メッセージを不動産に送信..." name="message_estate_btn"/>
<button label="不動産から住人を追い出す..." name="kick_user_from_estate_btn"/>
</panel>
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 858307800b..9c70a1172f 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="オブジェクトのプロフィール">
- <panel.string name="text deed continued">譲渡</panel.string>
- <panel.string name="text deed">譲渡</panel.string>
- <panel.string name="text modify info 1">このオブジェクトを修正できます</panel.string>
- <panel.string name="text modify info 2">これらのオブジェクトを修正できます</panel.string>
- <panel.string name="text modify info 3">このオブジェクトを修正できません</panel.string>
- <panel.string name="text modify info 4">これらのオブジェクトを修正できません</panel.string>
- <panel.string name="text modify info 5">地域(リージョン)の境界を越えてこのオブジェクトを修正できません</panel.string>
- <panel.string name="text modify info 6">地域(リージョン)の境界を越えてこれらのオブジェクトを修正できません</panel.string>
- <panel.string name="text modify warning">このオブジェクトには、パーツがリンクされています</panel.string>
- <panel.string name="Cost Default">価格: L$</panel.string>
- <panel.string name="Cost Total">合計価格: L$</panel.string>
- <panel.string name="Cost Per Unit">Price Per: L$</panel.string>
- <panel.string name="Cost Mixed">Mixed Price</panel.string>
- <panel.string name="Sale Mixed">Mixed Sale</panel.string>
+ <panel.string name="text deed continued">
+ 譲渡
+ </panel.string>
+ <panel.string name="text deed">
+ 譲渡
+ </panel.string>
+ <panel.string name="text modify info 1">
+ このオブジェクトを修正できます
+ </panel.string>
+ <panel.string name="text modify info 2">
+ これらのオブジェクトを修正できます
+ </panel.string>
+ <panel.string name="text modify info 3">
+ このオブジェクトを修正できません
+ </panel.string>
+ <panel.string name="text modify info 4">
+ これらのオブジェクトを修正できません
+ </panel.string>
+ <panel.string name="text modify info 5">
+ 地域(リージョン)の境界を越えてこのオブジェクトを修正できません
+ </panel.string>
+ <panel.string name="text modify info 6">
+ 地域(リージョン)の境界を越えてこれらのオブジェクトを修正できません
+ </panel.string>
+ <panel.string name="text modify warning">
+ このオブジェクトには、パーツがリンクされています
+ </panel.string>
+ <panel.string name="Cost Default">
+ 価格: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ 合計価格: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Price Per: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Mixed Price
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Mixed Sale
+ </panel.string>
<text name="title" value="オブジェクトのプロフィール"/>
<text name="where" value="(インワールド)"/>
<panel label="" name="properties_panel">
- <text name="Name:">名前:</text>
- <text name="Description:">説明:</text>
- <text name="CreatorNameLabel">制作者:</text>
- <text name="Owner:">所有者:</text>
- <text name="Group_label">グループ:</text>
+ <text name="Name:">
+ 名前:
+ </text>
+ <text name="Description:">
+ 説明:
+ </text>
+ <text name="CreatorNameLabel">
+ 制作者:
+ </text>
+ <text name="Owner:">
+ 所有者:
+ </text>
+ <text name="Group_label">
+ グループ:
+ </text>
<button name="button set group" tool_tip="このオブジェクト権限を共有するグループを選択します"/>
<name_box initial_value="ローディング..." name="Group Name Proxy"/>
<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="このアイテムを譲渡すると「次の所有者」の権限が適用されます。 グループ共有オブジェクトは、グループのオフィサーが譲渡できます。"/>
- <text name="label click action">クリックで:</text>
+ <text name="label click action">
+ クリックで:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="触る(デフォルト)" name="Touch/grab(default)"/>
<combo_box.item label="オブジェクトに座る" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">このオブジェクトを修正できます</text>
- <text name="Anyone can:">全員:</text>
+ <text name="perm_modify">
+ このオブジェクトを修正できます
+ </text>
+ <text name="Anyone can:">
+ 全員:
+ </text>
<check_box label="コピー" name="checkbox allow everyone copy"/>
<check_box label="移動" name="checkbox allow everyone move"/>
- <text name="GroupLabel">グループ:</text>
+ <text name="GroupLabel">
+ グループ:
+ </text>
<check_box label="共有" name="checkbox share with group" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 譲渡しない限り、役割制限を有効にはできません。"/>
- <text name="NextOwnerLabel">次の所有者:</text>
+ <text name="NextOwnerLabel">
+ 次の所有者:
+ </text>
<check_box label="修正" name="checkbox next owner can modify"/>
<check_box label="コピー" name="checkbox next owner can copy"/>
<check_box label="再販・プレゼント" name="checkbox next owner can transfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販できます"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="価格: L$" name="Edit Cost"/>
<check_box label="検索に表示" name="search_check" tool_tip="このオブジェクトを検索結果に表示します"/>
- <text name="pathfinding_attributes_label">パスファインディング属性:</text>
- <text name="B:">B.</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ パスファインディング属性:
+ </text>
+ <text name="B:">
+ B.
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="開く" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 80fa306157..48329f86cd 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -2239,6 +2239,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 0c17624aa5..4e9b6e3bbd 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -198,6 +198,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index fddc9f6abf..3fe267ccd7 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -12,6 +12,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"/>
@@ -281,6 +282,7 @@
<menu_item_check label="Formas físicas" name="Physics Shapes"/>
<menu_item_check label="Tipo de atualização" name="Update Type"/>
<menu_item_check label="Dados LOD" name="LOD Info"/>
+ <menu_item_check label="Contar triângulo" name="Triangle Count"/>
<menu_item_check label="Fila de construção" name="Build Queue"/>
<menu_item_check label="Partículas" name="Particles"/>
<menu_item_check label="Junções" name="Joints"/>
@@ -355,6 +357,7 @@
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
<menu_item_check label="Exibir ossos" name="Show Bones"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
+ <menu_item_check label="Mostrar as extensões do impostor" name="Show Impostor Extents"/>
<menu_item_call label="Depurar texturas do avatar" name="Debug Avatar Textures"/>
</menu>
<menu_item_check label="Texturas HTTP" name="HTTP Textures"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 59c84b781d..082293fa33 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -1561,6 +1561,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">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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>
@@ -1860,7 +1884,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 banimento para acessar esta propriedade somente 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">
@@ -3153,16 +3177,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!
@@ -3214,6 +3244,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 bbfaa4a4f5..ed609dfc3d 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Perfil do objeto">
- <panel.string name="text deed continued">Doar</panel.string>
- <panel.string name="text deed">Doar</panel.string>
- <panel.string name="text modify info 1">Você pode modificar este objeto</panel.string>
- <panel.string name="text modify info 2">Você pode modificar estes objetos</panel.string>
- <panel.string name="text modify info 3">Você não pode modificar este objeto</panel.string>
- <panel.string name="text modify info 4">Você não pode modificar estes objetos</panel.string>
- <panel.string name="text modify info 5">Não é possível modificar este objeto através de uma demarcação da região</panel.string>
- <panel.string name="text modify info 6">Não é possível modificar estes objetos através de uma demarcação da região</panel.string>
- <panel.string name="text modify warning">O objeto contém links ligando suas partes</panel.string>
- <panel.string name="Cost Default">Preço: L$</panel.string>
- <panel.string name="Cost Total">Preço total: L$</panel.string>
- <panel.string name="Cost Per Unit">Preço unitário: L$</panel.string>
- <panel.string name="Cost Mixed">Preço misto</panel.string>
- <panel.string name="Sale Mixed">Venda mista</panel.string>
+ <panel.string name="text deed continued">
+ Doar
+ </panel.string>
+ <panel.string name="text deed">
+ Doar
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Você pode modificar este objeto
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Você pode modificar estes objetos
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Você não pode modificar este objeto
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Você não pode modificar estes objetos
+ </panel.string>
+ <panel.string name="text modify info 5">
+ Não é possível modificar este objeto através de uma demarcação da região
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Não é possível modificar estes objetos através de uma demarcação da região
+ </panel.string>
+ <panel.string name="text modify warning">
+ O objeto contém links ligando suas partes
+ </panel.string>
+ <panel.string name="Cost Default">
+ Preço: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Preço total: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Preço unitário: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Preço misto
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Venda mista
+ </panel.string>
<text name="title" value="Perfil do objeto"/>
<text name="where" value="(Inworld)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Nome:</text>
- <text name="Description:">Descrição:</text>
- <text name="CreatorNameLabel">Criador:</text>
- <text name="Owner:">Proprietário:</text>
- <text name="Group_label">Grupo:</text>
+ <text name="Name:">
+ Nome:
+ </text>
+ <text name="Description:">
+ Descrição:
+ </text>
+ <text name="CreatorNameLabel">
+ Criador:
+ </text>
+ <text name="Owner:">
+ Proprietário:
+ </text>
+ <text name="Group_label">
+ Grupo:
+ </text>
<button name="button set group" tool_tip="Selecione o grupo que terá acesso à autorização do objeto"/>
<name_box initial_value="Carregando..." name="Group Name Proxy"/>
<button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono. Objetos de grupos podem ser doados por um oficial do grupo."/>
- <text name="label click action">Clique para:</text>
+ <text name="label click action">
+ Clique para:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Tocar (padrão)" name="Touch/grab(default)"/>
<combo_box.item label="Sentar em objeto" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">Você pode modificar este objeto</text>
- <text name="Anyone can:">Todos:</text>
+ <text name="perm_modify">
+ Você pode modificar este objeto
+ </text>
+ <text name="Anyone can:">
+ Todos:
+ </text>
<check_box label="Copiar" name="checkbox allow everyone copy"/>
<check_box label="Movimentar" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Grupo:</text>
+ <text name="GroupLabel">
+ Grupo:
+ </text>
<check_box label="Compartilhar" name="checkbox share with group" tool_tip="Permitir que todos os membros do grupo tenham o seu nível de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
- <text name="NextOwnerLabel">Próximo proprietário:</text>
+ <text name="NextOwnerLabel">
+ Próximo proprietário:
+ </text>
<check_box label="Modificar" name="checkbox next owner can modify"/>
<check_box label="Copiar" name="checkbox next owner can copy"/>
<check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Preço: L$" name="Edit Cost"/>
<check_box label="Mostrar nos resultados de busca" name="search_check" tool_tip="Incluir o objeto nos resultados de busca"/>
- <text name="pathfinding_attributes_label">Atributos do pathfinding:</text>
- <text name="B:">B:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ Atributos do pathfinding:
+ </text>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Abrir" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 4c23e48b89..076a0cc7d3 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -2185,6 +2185,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 74c27ce162..2d7af4d581 100644
--- a/indra/newview/skins/default/xui/ru/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ru/floater_tools.xml
@@ -201,6 +201,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 8e94c4f5fd..06f9d103ee 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -12,6 +12,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"/>
@@ -293,6 +294,7 @@
<menu_item_check label="Площадь текстуры" name="Texture Area"/>
<menu_item_check label="Площадь грани" name="Face Area"/>
<menu_item_check label="Данные об уровнях детализации" name="LOD Info"/>
+ <menu_item_check label="Количество треугольников" name="Triangle Count"/>
<menu_item_check label="Очередь построителя" name="Build Queue"/>
<menu_item_check label="Освещение" name="Lights"/>
<menu_item_check label="Частицы" name="Particles"/>
@@ -405,6 +407,7 @@
<menu_item_check label="Показать скелет" name="Show Collision Skeleton"/>
<menu_item_check label="Показать кости" name="Show Bones"/>
<menu_item_check label="Отобразить действие агента" name="Display Agent Target"/>
+ <menu_item_check label="Показать пределы импостера" name="Show Impostor Extents"/>
<menu_item_call label="Вывод присоединений" name="Dump Attachments"/>
<menu_item_call label="Отладка текстур аватара" name="Debug Avatar Textures"/>
<menu_item_call label="Вывод локальных текстур" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 663cb808ae..9bef3d4b53 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -1569,6 +1569,30 @@
<notification name="ProblemAddingEstateManagerBanned">
Невозможно добавить заблокированного жителя в список менеджеров землевладения.
</notification>
+ <notification name="ProblemBanningEstateManager">
+ Невозможно добавить заблокированного жителя в список менеджеров землевладения [AGENT].
+ </notification>
+ <notification name="GroupIsAlreadyInList">
+ &lt;nolink&gt;\[GROUP]&lt;/nolink&gt; уже находится в списке допущенных групп.
+ </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>
@@ -3164,16 +3188,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">
Появились новые типы изменения голоса!
@@ -3225,6 +3255,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 843fcaa9f8..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]."/>
@@ -36,7 +36,7 @@
<button label="Добавить..." name="add_allowed_avatar_btn"/>
<button label="Удалить..." name="remove_allowed_avatar_btn"/>
<text name="allow_group_label">
- Допуск групп всегда разрешен:
+ Группы всегда разрешены:
</text>
<text name="ban_resident_label">
Всегда заблокированы:
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 4059a800f0..d7f96cab1f 100644
--- a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Профиль объекта">
- <panel.string name="text deed continued">Сделка</panel.string>
- <panel.string name="text deed">Сделка</panel.string>
- <panel.string name="text modify info 1">Этот объект можно изменять</panel.string>
- <panel.string name="text modify info 2">Эти объекты можно изменять</panel.string>
- <panel.string name="text modify info 3">Этот объект нельзя изменять</panel.string>
- <panel.string name="text modify info 4">Эти объекты нельзя изменять</panel.string>
- <panel.string name="text modify info 5">Этот объект нельзя изменять через границу региона</panel.string>
- <panel.string name="text modify info 6">Эти объекты нельзя изменять через границу региона</panel.string>
- <panel.string name="text modify warning">Этот объект содержит объединенные части</panel.string>
- <panel.string name="Cost Default">Цена: L$</panel.string>
- <panel.string name="Cost Total">Итоговая цена: L$</panel.string>
- <panel.string name="Cost Per Unit">Цена за: L$</panel.string>
- <panel.string name="Cost Mixed">Смешанная цена</panel.string>
- <panel.string name="Sale Mixed">Смешанная продажа</panel.string>
+ <panel.string name="text deed continued">
+ Сделка
+ </panel.string>
+ <panel.string name="text deed">
+ Сделка
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Этот объект можно изменять
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Эти объекты можно изменять
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Этот объект нельзя изменять
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Эти объекты нельзя изменять
+ </panel.string>
+ <panel.string name="text modify info 5">
+ Этот объект нельзя изменять через границу региона
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Эти объекты нельзя изменять через границу региона
+ </panel.string>
+ <panel.string name="text modify warning">
+ Этот объект содержит объединенные части
+ </panel.string>
+ <panel.string name="Cost Default">
+ Цена: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Итоговая цена: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Цена за: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Смешанная цена
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Смешанная продажа
+ </panel.string>
<text name="title" value="Профиль объекта"/>
<text name="where" value="(в мире)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Название:</text>
- <text name="Description:">Описание:</text>
- <text name="CreatorNameLabel">Создатель:</text>
- <text name="Owner:">Владелец:</text>
- <text name="Group_label">Группа:</text>
+ <text name="Name:">
+ Название:
+ </text>
+ <text name="Description:">
+ Описание:
+ </text>
+ <text name="CreatorNameLabel">
+ Создатель:
+ </text>
+ <text name="Owner:">
+ Владелец:
+ </text>
+ <text name="Group_label">
+ Группа:
+ </text>
<button name="button set group" tool_tip="Выберите группу для передачи ей прав доступа к объекту"/>
<name_box initial_value="Загрузка..." name="Group Name Proxy"/>
<button label="Сделка" label_selected="Сделка" name="button deed" tool_tip="В результате сделки объект передается группе, при этом права на него будут соответствовать правам следующего владельца. Переданный группе объект может передаваться должностным лицом группы."/>
- <text name="label click action">Действие по щелчку:</text>
+ <text name="label click action">
+ Действие по щелчку:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Коснуться (по умолчанию)" name="Touch/grab(default)"/>
<combo_box.item label="Сесть на объект" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">Этот объект можно изменять</text>
- <text name="Anyone can:">Все:</text>
+ <text name="perm_modify">
+ Этот объект можно изменять
+ </text>
+ <text name="Anyone can:">
+ Все:
+ </text>
<check_box label="Копировать" name="checkbox allow everyone copy"/>
<check_box label="Переместить" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Группа:</text>
+ <text name="GroupLabel">
+ Группа:
+ </text>
<check_box label="Поделиться" name="checkbox share with group" tool_tip="Позволить всем участникам выбранной группы получить установленные вам права на этот объект. Для включения ролевых ограничений необходимо произвести сделку."/>
- <text name="NextOwnerLabel">Следующий владелец:</text>
+ <text name="NextOwnerLabel">
+ Следующий владелец:
+ </text>
<check_box label="Изменять" name="checkbox next owner can modify"/>
<check_box label="Копировать" name="checkbox next owner can copy"/>
<check_box label="Передать" name="checkbox next owner can transfer" tool_tip="Следующий владелец может отдать или перепродать объект"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Цена: L$" name="Edit Cost"/>
<check_box label="Показать в результатах поиска" name="search_check" tool_tip="Показывать объект в результатах поиска"/>
- <text name="pathfinding_attributes_label">Атрибуты поиска пути:</text>
- <text name="B:">Н:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">В:</text>
- <text name="N:">С:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ Атрибуты поиска пути:
+ </text>
+ <text name="B:">
+ Н:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ В:
+ </text>
+ <text name="N:">
+ С:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Открыть" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index dc4741e9bd..1a16600744 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -636,15 +636,6 @@ support@secondlife.com.
<string name="BUTTON_HELP">
Показать справку
</string>
- <string name="TooltipNotecardNotAllowedTypeDrop">
- Элементы этого типа не могут быть занесены в
-карточку для комментариев в этом регионе.
- </string>
- <string name="TooltipNotecardOwnerRestrictedDrop">
- Только элементы с безусловным разрешением
-‘следующего владельца’ можно внести
-в карточки для комментариев.
- </string>
<string name="Searching">
Поиск...
</string>
@@ -793,9 +784,6 @@ support@secondlife.com.
<string name="symbolic link">
ссылку
</string>
- <string name="settings blob">
- настройки
- </string>
<string name="symbolic folder link">
ссылку на папку
</string>
@@ -2238,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 0c26f717af..cd069dccf0 100644
--- a/indra/newview/skins/default/xui/tr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/tr/floater_tools.xml
@@ -201,6 +201,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 384c89b028..1d03cadbb2 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -12,6 +12,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"/>
@@ -294,6 +295,7 @@
<menu_item_check label="Doku Alanı" name="Texture Area"/>
<menu_item_check label="Yüz Alanı" name="Face Area"/>
<menu_item_check label="Ayrıntı Seviyesi Bilgisi" name="LOD Info"/>
+ <menu_item_check label="Üçgen Sayısı" name="Triangle Count"/>
<menu_item_check label="İnşa Kuyruğu" name="Build Queue"/>
<menu_item_check label="Işıklar" name="Lights"/>
<menu_item_check label="Parçacıklar" name="Particles"/>
@@ -406,6 +408,7 @@
<menu_item_check label="Çarpışma İskeletini Göster" name="Show Collision Skeleton"/>
<menu_item_check label="Kemikleri Göster" name="Show Bones"/>
<menu_item_check label="Aracı Hedefini Göster" name="Display Agent Target"/>
+ <menu_item_check label="Düşük Grafik Özellikli Avatar Kapsamını Göster" name="Show Impostor Extents"/>
<menu_item_call label="Aksesuarların Dökümünü Al" name="Dump Attachments"/>
<menu_item_call label="Avatar Dokuları İçin Hata Ayıklama" name="Debug Avatar Textures"/>
<menu_item_call label="Yerel Dokuların Dökümünü Al" name="Dump Local Textures"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index 5cca46d483..ea1447a367 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -1570,6 +1570,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">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 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>
@@ -3164,16 +3188,22 @@ Sohbete katılmak için Kabul Et&apos;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!
@@ -3225,6 +3255,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 ddb4bbf160..d3d3d4e0f5 100644
--- a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="Nesne Profili">
- <panel.string name="text deed continued">Devret</panel.string>
- <panel.string name="text deed">Devret</panel.string>
- <panel.string name="text modify info 1">Bu nesneyi değiştirebilirsiniz</panel.string>
- <panel.string name="text modify info 2">Bu nesneleri değiştirebilirsiniz</panel.string>
- <panel.string name="text modify info 3">Bu nesneyi değiştiremezsiniz</panel.string>
- <panel.string name="text modify info 4">Bu nesneleri değiştiremezsiniz</panel.string>
- <panel.string name="text modify info 5">Bir bölge sınırı üzerinden bu nesneyi değiştiremezsiniz</panel.string>
- <panel.string name="text modify info 6">Bir bölge sınırı üzerinden bu nesneleri değiştiremezsiniz</panel.string>
- <panel.string name="text modify warning">Bu nesne bağlantılı parçalara sahip</panel.string>
- <panel.string name="Cost Default">Fiyat: L$</panel.string>
- <panel.string name="Cost Total">Toplam Fiyat: L$</panel.string>
- <panel.string name="Cost Per Unit">Birim Fiyatı: L$</panel.string>
- <panel.string name="Cost Mixed">Karma Fiyat</panel.string>
- <panel.string name="Sale Mixed">Karma Satış</panel.string>
+ <panel.string name="text deed continued">
+ Devret
+ </panel.string>
+ <panel.string name="text deed">
+ Devret
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Bu nesneyi değiştirebilirsiniz
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Bu nesneleri değiştirebilirsiniz
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Bu nesneyi değiştiremezsiniz
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Bu nesneleri değiştiremezsiniz
+ </panel.string>
+ <panel.string name="text modify info 5">
+ Bir bölge sınırı üzerinden bu nesneyi değiştiremezsiniz
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Bir bölge sınırı üzerinden bu nesneleri değiştiremezsiniz
+ </panel.string>
+ <panel.string name="text modify warning">
+ Bu nesne bağlantılı parçalara sahip
+ </panel.string>
+ <panel.string name="Cost Default">
+ Fiyat: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Toplam Fiyat: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Birim Fiyatı: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Karma Fiyat
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Karma Satış
+ </panel.string>
<text name="title" value="Nesne Profili"/>
<text name="where" value="(SL Dünyası)"/>
<panel label="" name="properties_panel">
- <text name="Name:">Ad:</text>
- <text name="Description:">Açıklama:</text>
- <text name="CreatorNameLabel">Oluşturan:</text>
- <text name="Owner:">Sahip:</text>
- <text name="Group_label">Grup:</text>
+ <text name="Name:">
+ Ad:
+ </text>
+ <text name="Description:">
+ Açıklama:
+ </text>
+ <text name="CreatorNameLabel">
+ Oluşturan:
+ </text>
+ <text name="Owner:">
+ Sahip:
+ </text>
+ <text name="Group_label">
+ Grup:
+ </text>
<button name="button set group" tool_tip="Bu nesnenin izinlerini paylaşmak için bir grup seçin"/>
<name_box initial_value="Yükleniyor..." name="Group Name Proxy"/>
<button label="Devret" label_selected="Devret" name="button deed" tool_tip="Bu nesne devredilerek verildiğinde, nesnenin sonraki sahibi için izinler geçerli olur. Grup içerisinde paylaşılan nesneler bir grup yetkilisi tarafından devredilebilir."/>
- <text name="label click action">Şu eylem için tıklayın:</text>
+ <text name="label click action">
+ Şu eylem için tıklayın:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="Dokun (varsayılan)" name="Touch/grab(default)"/>
<combo_box.item label="Nesnenin üzerine otur" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">Bu nesneyi değiştirebilirsiniz</text>
- <text name="Anyone can:">Herkes:</text>
+ <text name="perm_modify">
+ Bu nesneyi değiştirebilirsiniz
+ </text>
+ <text name="Anyone can:">
+ Herkes:
+ </text>
<check_box label="Kopyala" name="checkbox allow everyone copy"/>
<check_box label="Hareket Et" name="checkbox allow everyone move"/>
- <text name="GroupLabel">Grup:</text>
+ <text name="GroupLabel">
+ Grup:
+ </text>
<check_box label="Paylaş" name="checkbox share with group" tool_tip="Ayarlanan grubun tüm üyelerinin, bu nesne için değiştirme izinlerinizi paylaşmasına izin verir. Rol kısıtlamalarını etkinleştirmek için Devretme yapmalısınız."/>
- <text name="NextOwnerLabel">Sonraki sahip:</text>
+ <text name="NextOwnerLabel">
+ Sonraki sahip:
+ </text>
<check_box label="Değiştir" name="checkbox next owner can modify"/>
<check_box label="Kopyala" name="checkbox next owner can copy"/>
<check_box label="Aktar" name="checkbox next owner can transfer" tool_tip="Sonraki sahibi bu nesneyi verebilir veya tekrar satabilir"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="Fiyat: L$" name="Edit Cost"/>
<check_box label="Aramada göster" name="search_check" tool_tip="Kişiler arama sonuçlarında bu nesneyi görebilsin"/>
- <text name="pathfinding_attributes_label">Yol bulma özellikleri:</text>
- <text name="B:">B:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ Yol bulma özellikleri:
+ </text>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Aç" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index 16bad98bc4..db627f1bc1 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -2238,6 +2238,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 f51f7a8ae2..2df01eb831 100644
--- a/indra/newview/skins/default/xui/zh/floater_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_tools.xml
@@ -201,6 +201,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"/>
<spinner label="L$" name="Edit Cost"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 39d4a7c4f7..9f8756a299 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -12,6 +12,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 b1b35f0614..a8903489a7 100644
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -1563,6 +1563,30 @@ SHA1 指紋:[MD5_DIGEST]
<notification name="ProblemAddingEstateManagerBanned">
無法把被封鎖的居民加入領地的管理人名單。
</notification>
+ <notification name="ProblemBanningEstateManager">
+ 無法將領地管理人[AGENT]加入封鎖名單。
+ </notification>
+ <notification name="GroupIsAlreadyInList">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt;已在獲准群組名單中。
+ </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>
@@ -3162,14 +3186,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">
新的變聲效果上市了!
@@ -3221,6 +3251,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 4be4f0aac1..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] 獲取進一步資訊。"/>
@@ -29,22 +29,22 @@
領地管理員:
</text>
<text name="allow_resident_label">
- 永遠准許:
+ 永遠允許:
</text>
- <button label="新增…" name="add_estate_manager_btn"/>
- <button label="移除…" name="remove_estate_manager_btn"/>
- <button label="新增…" name="add_allowed_avatar_btn"/>
- <button label="移除…" name="remove_allowed_avatar_btn"/>
+ <button label="添加..." name="add_estate_manager_btn"/>
+ <button label="移除..." name="remove_estate_manager_btn"/>
+ <button label="添加..." name="add_allowed_avatar_btn"/>
+ <button label="移除..." name="remove_allowed_avatar_btn"/>
<text name="allow_group_label">
- 永遠准許的群組:
+ 永遠允許的群組:
</text>
<text name="ban_resident_label">
- 永遠禁入:
+ 永遠封鎖:
</text>
- <button label="新增…" name="add_allowed_group_btn"/>
- <button label="移除…" name="remove_allowed_group_btn"/>
- <button label="新增…" name="add_banned_avatar_btn"/>
- <button label="移除…" name="remove_banned_avatar_btn"/>
+ <button label="添加..." name="add_allowed_group_btn"/>
+ <button label="移除..." name="remove_allowed_group_btn"/>
+ <button label="添加..." name="add_banned_avatar_btn"/>
+ <button label="移除..." name="remove_banned_avatar_btn"/>
<button label="送出訊息到領地..." name="message_estate_btn"/>
<button label="由領地將居民踢出..." name="kick_user_from_estate_btn"/>
</panel>
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 0884f1789b..8cb2721fce 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
@@ -1,31 +1,71 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="object properties" title="物件檔案">
- <panel.string name="text deed continued">讓渡</panel.string>
- <panel.string name="text deed">讓渡</panel.string>
- <panel.string name="text modify info 1">你能修改這個物件</panel.string>
- <panel.string name="text modify info 2">你能修改這些物件</panel.string>
- <panel.string name="text modify info 3">你不能修改這個物件</panel.string>
- <panel.string name="text modify info 4">你不能修改這些物件</panel.string>
- <panel.string name="text modify info 5">無法跨地區修改這個物件</panel.string>
- <panel.string name="text modify info 6">無法跨地區修改這些物件</panel.string>
- <panel.string name="text modify warning">這個物件含有聯結的部分</panel.string>
- <panel.string name="Cost Default">價格: L$</panel.string>
- <panel.string name="Cost Total">總價格:L$</panel.string>
- <panel.string name="Cost Per Unit">單價:L$</panel.string>
- <panel.string name="Cost Mixed">混合價格</panel.string>
- <panel.string name="Sale Mixed">混合銷售</panel.string>
+ <panel.string name="text deed continued">
+ 讓渡
+ </panel.string>
+ <panel.string name="text deed">
+ 讓渡
+ </panel.string>
+ <panel.string name="text modify info 1">
+ 你能修改這個物件
+ </panel.string>
+ <panel.string name="text modify info 2">
+ 你能修改這些物件
+ </panel.string>
+ <panel.string name="text modify info 3">
+ 你不能修改這個物件
+ </panel.string>
+ <panel.string name="text modify info 4">
+ 你不能修改這些物件
+ </panel.string>
+ <panel.string name="text modify info 5">
+ 無法跨地區修改這個物件
+ </panel.string>
+ <panel.string name="text modify info 6">
+ 無法跨地區修改這些物件
+ </panel.string>
+ <panel.string name="text modify warning">
+ 這個物件含有聯結的部分
+ </panel.string>
+ <panel.string name="Cost Default">
+ 價格: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ 總價格:L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ 單價:L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ 混合價格
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ 混合銷售
+ </panel.string>
<text name="title" value="物件檔案"/>
<text name="where" value="(在虛擬世界)"/>
<panel label="" name="properties_panel">
- <text name="Name:">名稱:</text>
- <text name="Description:">描述:</text>
- <text name="CreatorNameLabel">創造者:</text>
- <text name="Owner:">所有人:</text>
- <text name="Group_label">群組:</text>
+ <text name="Name:">
+ 名稱:
+ </text>
+ <text name="Description:">
+ 描述:
+ </text>
+ <text name="CreatorNameLabel">
+ 創造者:
+ </text>
+ <text name="Owner:">
+ 所有人:
+ </text>
+ <text name="Group_label">
+ 群組:
+ </text>
<button name="button set group" tool_tip="選擇一個群組以分享這物件的權限"/>
<name_box initial_value="載入中..." name="Group Name Proxy"/>
<button label="讓渡" label_selected="讓渡" name="button deed" tool_tip="「讓渡」會把這物件贈送出去並賦予「下一個所有人」權限。 群組所分享的物件可由群組職員加以讓渡。"/>
- <text name="label click action">點按以:</text>
+ <text name="label click action">
+ 點按以:
+ </text>
<combo_box name="clickaction">
<combo_box.item label="觸碰(預設)" name="Touch/grab(default)"/>
<combo_box.item label="坐在物件上" name="Sitonobject"/>
@@ -33,15 +73,24 @@
<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">你能修改這個物件</text>
- <text name="Anyone can:">任何人:</text>
+ <text name="perm_modify">
+ 你能修改這個物件
+ </text>
+ <text name="Anyone can:">
+ 任何人:
+ </text>
<check_box label="恚庨" name="checkbox allow everyone copy"/>
<check_box label="移動" name="checkbox allow everyone move"/>
- <text name="GroupLabel">群組:</text>
+ <text name="GroupLabel">
+ 群組:
+ </text>
<check_box label="分享" name="checkbox share with group" tool_tip="允許此群組所有成員共享你修改此物件的權限。 你必須讓渡才能啟動角色限制。"/>
- <text name="NextOwnerLabel">下一個所有人:</text>
+ <text name="NextOwnerLabel">
+ 下一個所有人:
+ </text>
<check_box label="修改" name="checkbox next owner can modify"/>
<check_box label="恚庨" name="checkbox next owner can copy"/>
<check_box label="轉移" name="checkbox next owner can transfer" tool_tip="下一個所有人可贈送或轉售這個物件"/>
@@ -54,13 +103,27 @@
</combo_box>
<spinner label="價格: L$" name="Edit Cost"/>
<check_box label="顯示在搜尋中" name="search_check" tool_tip="讓其他人可以在搜尋結果中察看到此物件"/>
- <text name="pathfinding_attributes_label">尋徑屬性:</text>
- <text name="B:">B:</text>
- <text name="O:">O:</text>
- <text name="G:">G:</text>
- <text name="E:">E:</text>
- <text name="N:">N:</text>
- <text name="F:">F:</text>
+ <text name="pathfinding_attributes_label">
+ 尋徑屬性:
+ </text>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="打開" name="open_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 57da57a82c..1518c6edf5 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -2234,6 +2234,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>