Merge in EAM from viewer-release
Remove the derpy stuff lindens like to do Wide strings aren't normal strings Make it all a bit better~ Redid the Duration floater because it was kinda icky, gave it more flexibility~<3 Display parcel ban and access durations as dates instead of text, sortable! Reworked the rather icky lookin' Access panel control ordering Enabled lowering parcel ban time without needing to find and remove first
This commit is contained in:
@@ -803,7 +803,7 @@ void LLParcel::expirePasses(S32 now)
|
|||||||
|
|
||||||
if (entry.mTime != 0 && entry.mTime < now)
|
if (entry.mTime != 0 && entry.mTime < now)
|
||||||
{
|
{
|
||||||
mAccessList.erase(itor++);
|
itor = mAccessList.erase(itor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -894,7 +894,7 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time)
|
|||||||
{
|
{
|
||||||
if (time == 0 || (entry.mTime != 0 && entry.mTime < time))
|
if (time == 0 || (entry.mTime != 0 && entry.mTime < time))
|
||||||
{
|
{
|
||||||
mAccessList.erase(itor++);
|
itor = mAccessList.erase(itor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -937,15 +937,18 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time)
|
|||||||
const LLAccessEntry& entry = (*itor).second;
|
const LLAccessEntry& entry = (*itor).second;
|
||||||
if (entry.mID == agent_id)
|
if (entry.mID == agent_id)
|
||||||
{
|
{
|
||||||
if (time == 0 || (entry.mTime != 0 && entry.mTime < time))
|
// Singu Note: Allow amending ban time to be less without needing to remove
|
||||||
|
//if (time == 0 || (entry.mTime != 0 && entry.mTime < time))
|
||||||
{
|
{
|
||||||
mBanList.erase(itor++);
|
itor = mBanList.erase(itor);
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// existing one expires later
|
// existing one expires later
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -973,7 +976,7 @@ BOOL remove_from_access_array(std::map<LLUUID,LLAccessEntry>* list,
|
|||||||
const LLAccessEntry& entry = (*itor).second;
|
const LLAccessEntry& entry = (*itor).second;
|
||||||
if (entry.mID == agent_id)
|
if (entry.mID == agent_id)
|
||||||
{
|
{
|
||||||
list->erase(itor++);
|
itor = list->erase(itor);
|
||||||
removed = TRUE;
|
removed = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -432,6 +432,13 @@ void LLLineEditor::setCursorToEnd()
|
|||||||
deselect();
|
deselect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLLineEditor::resetScrollPosition()
|
||||||
|
{
|
||||||
|
mScrollHPos = 0;
|
||||||
|
// make sure cursor stays in visible range
|
||||||
|
setCursor(getCursor());
|
||||||
|
}
|
||||||
|
|
||||||
BOOL LLLineEditor::canDeselect() const
|
BOOL LLLineEditor::canDeselect() const
|
||||||
{
|
{
|
||||||
return hasSelection();
|
return hasSelection();
|
||||||
|
|||||||
@@ -190,6 +190,9 @@ public:
|
|||||||
void setCursor( S32 pos );
|
void setCursor( S32 pos );
|
||||||
void setCursorToEnd();
|
void setCursorToEnd();
|
||||||
|
|
||||||
|
// set scroll to earliest position it can reasonably be set
|
||||||
|
void resetScrollPosition();
|
||||||
|
|
||||||
// Selects characters 'start' to 'end'.
|
// Selects characters 'start' to 'end'.
|
||||||
void setSelection(S32 start, S32 end);
|
void setSelection(S32 start, S32 end);
|
||||||
|
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ void LLSpinCtrl::forceSetValue(const LLSD& value )
|
|||||||
mValue = v;
|
mValue = v;
|
||||||
|
|
||||||
updateEditor();
|
updateEditor();
|
||||||
|
mEditor->resetScrollPosition();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,7 +330,9 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
|
|||||||
|
|
||||||
if( success )
|
if( success )
|
||||||
{
|
{
|
||||||
updateEditor();
|
// We committed and clamped value
|
||||||
|
// try to display as much as possible
|
||||||
|
mEditor->resetScrollPosition();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -461,6 +464,7 @@ BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask)
|
|||||||
// text editors don't support revert normally (due to user confusion)
|
// text editors don't support revert normally (due to user confusion)
|
||||||
// but not allowing revert on a spinner seems dangerous
|
// but not allowing revert on a spinner seems dangerous
|
||||||
updateEditor();
|
updateEditor();
|
||||||
|
mEditor->resetScrollPosition();
|
||||||
mEditor->setFocus(FALSE);
|
mEditor->setFocus(FALSE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ set(viewer_SOURCE_FILES
|
|||||||
llfloateravatarlist.cpp
|
llfloateravatarlist.cpp
|
||||||
llfloateravatarpicker.cpp
|
llfloateravatarpicker.cpp
|
||||||
llfloateravatartextures.cpp
|
llfloateravatartextures.cpp
|
||||||
|
llfloaterbanduration.cpp
|
||||||
llfloaterbeacons.cpp
|
llfloaterbeacons.cpp
|
||||||
llfloaterblacklist.cpp
|
llfloaterblacklist.cpp
|
||||||
llfloaterbuildoptions.cpp
|
llfloaterbuildoptions.cpp
|
||||||
@@ -720,6 +721,7 @@ set(viewer_HEADER_FILES
|
|||||||
llfloateravatarlist.h
|
llfloateravatarlist.h
|
||||||
llfloateravatarpicker.h
|
llfloateravatarpicker.h
|
||||||
llfloateravatartextures.h
|
llfloateravatartextures.h
|
||||||
|
llfloaterbanduration.h
|
||||||
llfloaterbeacons.h
|
llfloaterbeacons.h
|
||||||
llfloaterblacklist.h
|
llfloaterblacklist.h
|
||||||
llfloaterbuildoptions.h
|
llfloaterbuildoptions.h
|
||||||
|
|||||||
@@ -1430,7 +1430,7 @@ static void cmd_eject(const LLAvatarListEntry* entry) { send_eject(entry->getID
|
|||||||
static void cmd_ban(const LLAvatarListEntry* entry) { send_eject(entry->getID(), true); }
|
static void cmd_ban(const LLAvatarListEntry* entry) { send_eject(entry->getID(), true); }
|
||||||
static void cmd_estate_eject(const LLAvatarListEntry* entry){ send_estate_message("kickestate", {entry->getID().asString()}); }
|
static void cmd_estate_eject(const LLAvatarListEntry* entry){ send_estate_message("kickestate", {entry->getID().asString()}); }
|
||||||
static void cmd_estate_tp_home(const LLAvatarListEntry* entry){ send_estate_message("teleporthomeuser", {gAgentID.asString(), entry->getID().asString()}); }
|
static void cmd_estate_tp_home(const LLAvatarListEntry* entry){ send_estate_message("teleporthomeuser", {gAgentID.asString(), entry->getID().asString()}); }
|
||||||
static void cmd_estate_ban(const LLAvatarListEntry* entry) { LLPanelEstateInfo::sendEstateAccessDelta(ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | ESTATE_ACCESS_NO_REPLY, entry->getID()); }
|
static void cmd_estate_ban(const LLAvatarListEntry* entry) { LLPanelEstateAccess::sendEstateAccessDelta(ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | ESTATE_ACCESS_NO_REPLY, entry->getID()); }
|
||||||
|
|
||||||
void LLFloaterAvatarList::doCommand(avlist_command_t func, bool single/*=false*/) const
|
void LLFloaterAvatarList::doCommand(avlist_command_t func, bool single/*=false*/) const
|
||||||
{
|
{
|
||||||
|
|||||||
92
indra/newview/llfloaterbanduration.cpp
Normal file
92
indra/newview/llfloaterbanduration.cpp
Normal file
@@ -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 "llcombobox.h"
|
||||||
|
#include "llspinctrl.h"
|
||||||
|
#include "lluictrlfactory.h"
|
||||||
|
|
||||||
|
LLFloaterBanDuration::LLFloaterBanDuration(const LLSD& target) : LLFloater()
|
||||||
|
{
|
||||||
|
LLUICtrlFactory::instance().buildFloater(this, "floater_ban_duration.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL LLFloaterBanDuration::postBuild()
|
||||||
|
{
|
||||||
|
childSetAction("ok_btn", boost::bind(&LLFloaterBanDuration::onClickBan, this));
|
||||||
|
childSetAction("cancel_btn", boost::bind(&LLFloaterBanDuration::close, this, false));
|
||||||
|
|
||||||
|
auto combo = getChild<LLUICtrl>("ban_duration_combo");
|
||||||
|
combo->setCommitCallback(boost::bind(&LLFloaterBanDuration::onClickCombo, this, _2, getChild<LLUICtrl>("ban_duration")));
|
||||||
|
combo->onCommit();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LLFloaterBanDuration* LLFloaterBanDuration::show(select_callback_t callback, const uuid_vec_t& ids)
|
||||||
|
{
|
||||||
|
LLFloaterBanDuration* floater = showInstance();
|
||||||
|
if (!floater)
|
||||||
|
{
|
||||||
|
LL_WARNS() << "Cannot instantiate ban duration floater" << LL_ENDL;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
floater->mSelectionCallback = callback;
|
||||||
|
floater->mAvatar_ids = ids;
|
||||||
|
|
||||||
|
return floater;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLFloaterBanDuration::onClickCombo(const LLSD& val, LLUICtrl* duration)
|
||||||
|
{
|
||||||
|
duration->setEnabled(val.asInteger() != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLFloaterBanDuration::onClickBan()
|
||||||
|
{
|
||||||
|
if (mSelectionCallback)
|
||||||
|
{
|
||||||
|
S32 time = 0;
|
||||||
|
if (auto type = getChild<LLUICtrl>("ban_duration_combo")->getValue().asInteger())
|
||||||
|
{
|
||||||
|
LLSpinCtrl* duration_spin = getChild<LLSpinCtrl>("ban_duration");
|
||||||
|
if (duration_spin)
|
||||||
|
{
|
||||||
|
time = (duration_spin->getValue().asInteger() * 3600);
|
||||||
|
if (type > 1)
|
||||||
|
{
|
||||||
|
time *= type == 2 ? 24 : type == 3 ? 168 : 730;
|
||||||
|
}
|
||||||
|
time += LLDate::now().secondsSinceEpoch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mSelectionCallback(mAvatar_ids, time);
|
||||||
|
}
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
52
indra/newview/llfloaterbanduration.h
Normal file
52
indra/newview/llfloaterbanduration.h
Normal file
@@ -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
|
||||||
|
, public LLFloaterSingleton<LLFloaterBanDuration>
|
||||||
|
{
|
||||||
|
typedef std::function<void(const uuid_vec_t&, const S32 duration)> select_callback_t;
|
||||||
|
|
||||||
|
public:
|
||||||
|
LLFloaterBanDuration(const LLSD& target);
|
||||||
|
BOOL postBuild() override;
|
||||||
|
static LLFloaterBanDuration* show(select_callback_t callback, const uuid_vec_t& ids);
|
||||||
|
|
||||||
|
private:
|
||||||
|
~LLFloaterBanDuration() {};
|
||||||
|
void onClickBan();
|
||||||
|
void onClickCombo(const LLSD&, LLUICtrl*);
|
||||||
|
|
||||||
|
uuid_vec_t mAvatar_ids;
|
||||||
|
select_callback_t mSelectionCallback;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // LL_FLOATERBANDURATION_H
|
||||||
|
|
||||||
@@ -52,6 +52,7 @@
|
|||||||
#include "llcombobox.h"
|
#include "llcombobox.h"
|
||||||
#include "llfloaterauction.h"
|
#include "llfloaterauction.h"
|
||||||
#include "llfloateravatarpicker.h"
|
#include "llfloateravatarpicker.h"
|
||||||
|
#include "llfloaterbanduration.h"
|
||||||
#include "llfloatergroups.h"
|
#include "llfloatergroups.h"
|
||||||
#include "llfloaterscriptlimits.h"
|
#include "llfloaterscriptlimits.h"
|
||||||
#include "llgroupactions.h"
|
#include "llgroupactions.h"
|
||||||
@@ -220,7 +221,6 @@ void LLFloaterLand::onOpen()
|
|||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// virtual
|
// virtual
|
||||||
void LLFloaterLand::onClose(bool app_quitting)
|
void LLFloaterLand::onClose(bool app_quitting)
|
||||||
{
|
{
|
||||||
@@ -471,6 +471,13 @@ BOOL LLPanelLandGeneral::postBuild()
|
|||||||
mBtnBuyLand = getChild<LLButton>("Buy Land...");
|
mBtnBuyLand = getChild<LLButton>("Buy Land...");
|
||||||
mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND);
|
mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(gDisconnected)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
// note: on region change this will not be re checked, should not matter on Agni as
|
// note: on region change this will not be re checked, should not matter on Agni as
|
||||||
// 99% of the time all regions will return the same caps. In case of an erroneous setting
|
// 99% of the time all regions will return the same caps. In case of an erroneous setting
|
||||||
// to enabled the floater will just throw an error when trying to get it's cap
|
// to enabled the floater will just throw an error when trying to get it's cap
|
||||||
@@ -584,6 +591,11 @@ void LLPanelLandGeneral::refresh()
|
|||||||
mBtnReleaseLand->setEnabled(FALSE);
|
mBtnReleaseLand->setEnabled(FALSE);
|
||||||
mBtnReclaimLand->setEnabled(FALSE);
|
mBtnReclaimLand->setEnabled(FALSE);
|
||||||
mBtnBuyPass->setEnabled(FALSE);
|
mBtnBuyPass->setEnabled(FALSE);
|
||||||
|
|
||||||
|
if(gDisconnected)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -591,7 +603,7 @@ void LLPanelLandGeneral::refresh()
|
|||||||
BOOL is_leased = (LLParcel::OS_LEASED == parcel->getOwnershipStatus());
|
BOOL is_leased = (LLParcel::OS_LEASED == parcel->getOwnershipStatus());
|
||||||
BOOL region_xfer = FALSE;
|
BOOL region_xfer = FALSE;
|
||||||
if(regionp
|
if(regionp
|
||||||
&& !regionp->getRegionFlag(REGION_FLAGS_BLOCK_LAND_RESELL))
|
&& !(regionp->getRegionFlag(REGION_FLAGS_BLOCK_LAND_RESELL)))
|
||||||
{
|
{
|
||||||
region_xfer = TRUE;
|
region_xfer = TRUE;
|
||||||
}
|
}
|
||||||
@@ -1245,7 +1257,7 @@ void LLPanelLandObjects::refresh()
|
|||||||
mOwnerList->deleteAllItems();
|
mOwnerList->deleteAllItems();
|
||||||
mOwnerList->setEnabled(FALSE);
|
mOwnerList->setEnabled(FALSE);
|
||||||
|
|
||||||
if (!parcel)
|
if (!parcel || gDisconnected)
|
||||||
{
|
{
|
||||||
mSWTotalObjects->setTextArg("[COUNT]", llformat("%d", 0));
|
mSWTotalObjects->setTextArg("[COUNT]", llformat("%d", 0));
|
||||||
mSWTotalObjects->setTextArg("[TOTAL]", llformat("%d", 0));
|
mSWTotalObjects->setTextArg("[TOTAL]", llformat("%d", 0));
|
||||||
@@ -1619,13 +1631,12 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
|
|||||||
{
|
{
|
||||||
msg->getU32("DataExtended", "TimeStamp", most_recent_time, i);
|
msg->getU32("DataExtended", "TimeStamp", most_recent_time, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (owner_id.isNull())
|
if (owner_id.isNull())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL in_sim = (std::find(avatar_ids.begin(), avatar_ids.end(), owner_id) != avatar_ids.end());
|
|
||||||
|
|
||||||
LLNameListCtrl::NameItem item_params;
|
LLNameListCtrl::NameItem item_params;
|
||||||
item_params.value = owner_id;
|
item_params.value = owner_id;
|
||||||
item_params.target = is_group_owned ? LLNameListCtrl::GROUP : LLNameListCtrl::INDIVIDUAL;
|
item_params.target = is_group_owned ? LLNameListCtrl::GROUP : LLNameListCtrl::INDIVIDUAL;
|
||||||
@@ -1635,7 +1646,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
|
|||||||
item_params.columns.add().type("icon").value(self->mIconGroup->getName()).column("type");
|
item_params.columns.add().type("icon").value(self->mIconGroup->getName()).column("type");
|
||||||
item_params.columns.add().value(OWNER_GROUP).font(FONT).column("online_status");
|
item_params.columns.add().value(OWNER_GROUP).font(FONT).column("online_status");
|
||||||
}
|
}
|
||||||
else if (in_sim)
|
else if (std::find(avatar_ids.begin(), avatar_ids.end(), owner_id) != avatar_ids.end())
|
||||||
{
|
{
|
||||||
item_params.columns.add().type("icon").value(self->mIconAvatarInSim->getName()).column("type");
|
item_params.columns.add().type("icon").value(self->mIconAvatarInSim->getName()).column("type");
|
||||||
item_params.columns.add().value(OWNER_INSIM).font(FONT).column("online_status");
|
item_params.columns.add().value(OWNER_INSIM).font(FONT).column("online_status");
|
||||||
@@ -1661,10 +1672,10 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
|
|||||||
item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date");
|
item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date");
|
||||||
|
|
||||||
self->mOwnerList->addNameItemRow(item_params);
|
self->mOwnerList->addNameItemRow(item_params);
|
||||||
|
|
||||||
LL_DEBUGS() << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent")
|
LL_DEBUGS() << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent")
|
||||||
<< ") owns " << object_count << " objects." << LL_ENDL;
|
<< ") owns " << object_count << " objects." << LL_ENDL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for no results
|
// check for no results
|
||||||
if (0 == self->mOwnerList->getItemCount())
|
if (0 == self->mOwnerList->getItemCount())
|
||||||
{
|
{
|
||||||
@@ -1842,10 +1853,15 @@ void LLPanelLandObjects::onCommitClean(LLUICtrl *caller, void* user_data)
|
|||||||
LLParcel* parcel = lop->mParcel->getParcel();
|
LLParcel* parcel = lop->mParcel->getParcel();
|
||||||
if (parcel)
|
if (parcel)
|
||||||
{
|
{
|
||||||
lop->mOtherTime = atoi(lop->mCleanOtherObjectsTime->getText().c_str());
|
S32 return_time = atoi(lop->mCleanOtherObjectsTime->getText().c_str());
|
||||||
|
// Only send return time if it has changed
|
||||||
|
if (return_time != lop->mOtherTime)
|
||||||
|
{
|
||||||
|
lop->mOtherTime = return_time;
|
||||||
|
|
||||||
parcel->setCleanOtherTime(lop->mOtherTime);
|
parcel->setCleanOtherTime(lop->mOtherTime);
|
||||||
send_other_clean_time_message(parcel->getLocalID(), lop->mOtherTime);
|
send_other_clean_time_message(parcel->getLocalID(), lop->mOtherTime);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2014,7 +2030,7 @@ void LLPanelLandOptions::refresh()
|
|||||||
refreshSearch();
|
refreshSearch();
|
||||||
|
|
||||||
LLParcel *parcel = mParcel->getParcel();
|
LLParcel *parcel = mParcel->getParcel();
|
||||||
if (!parcel)
|
if (!parcel || gDisconnected)
|
||||||
{
|
{
|
||||||
mCheckEditObjects ->set(FALSE);
|
mCheckEditObjects ->set(FALSE);
|
||||||
mCheckEditObjects ->setEnabled(FALSE);
|
mCheckEditObjects ->setEnabled(FALSE);
|
||||||
@@ -2203,7 +2219,7 @@ void LLPanelLandOptions::draw()
|
|||||||
void LLPanelLandOptions::refreshSearch()
|
void LLPanelLandOptions::refreshSearch()
|
||||||
{
|
{
|
||||||
LLParcel *parcel = mParcel->getParcel();
|
LLParcel *parcel = mParcel->getParcel();
|
||||||
if (!parcel)
|
if (!parcel || gDisconnected)
|
||||||
{
|
{
|
||||||
mCheckShowDirectory->set(FALSE);
|
mCheckShowDirectory->set(FALSE);
|
||||||
mCheckShowDirectory->setEnabled(FALSE);
|
mCheckShowDirectory->setEnabled(FALSE);
|
||||||
@@ -2499,19 +2515,32 @@ void LLPanelLandAccess::refresh()
|
|||||||
LLParcel *parcel = mParcel->getParcel();
|
LLParcel *parcel = mParcel->getParcel();
|
||||||
|
|
||||||
// Display options
|
// Display options
|
||||||
if (parcel)
|
if (parcel && !gDisconnected)
|
||||||
{
|
{
|
||||||
BOOL use_access_list = parcel->getParcelFlag(PF_USE_ACCESS_LIST);
|
BOOL use_access_list = parcel->getParcelFlag(PF_USE_ACCESS_LIST);
|
||||||
BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP);
|
BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP);
|
||||||
BOOL public_access = !use_access_list && !use_group;
|
BOOL public_access = !use_access_list;
|
||||||
|
|
||||||
getChild<LLUICtrl>("public_access")->setValue(public_access );
|
|
||||||
getChild<LLUICtrl>("GroupCheck")->setValue(use_group );
|
|
||||||
|
|
||||||
|
if (parcel->getRegionAllowAccessOverride())
|
||||||
|
{
|
||||||
|
getChild<LLUICtrl>("public_access")->setValue(public_access );
|
||||||
|
getChild<LLUICtrl>("GroupCheck")->setValue(use_group );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getChild<LLUICtrl>("public_access")->setValue(TRUE);
|
||||||
|
getChild<LLUICtrl>("GroupCheck")->setValue(FALSE);
|
||||||
|
}
|
||||||
std::string group_name;
|
std::string group_name;
|
||||||
gCacheName->getGroupName(parcel->getGroupID(), group_name);
|
gCacheName->getGroupName(parcel->getGroupID(), group_name);
|
||||||
getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name );
|
getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name );
|
||||||
|
|
||||||
|
const auto always = getString("Always");
|
||||||
|
|
||||||
|
static const LLCachedControl<std::string> date("ShortDateFormat");
|
||||||
|
static const LLCachedControl<std::string> time("LongTimeFormat");
|
||||||
|
const auto time_format = date() + ' ' + time();
|
||||||
|
|
||||||
// Allow list
|
// Allow list
|
||||||
if (mListAccess)
|
if (mListAccess)
|
||||||
{
|
{
|
||||||
@@ -2519,6 +2548,9 @@ void LLPanelLandAccess::refresh()
|
|||||||
mListAccess->clearSortOrder();
|
mListAccess->clearSortOrder();
|
||||||
mListAccess->deleteAllItems();
|
mListAccess->deleteAllItems();
|
||||||
S32 count = parcel->mAccessList.size();
|
S32 count = parcel->mAccessList.size();
|
||||||
|
getChild<LLUICtrl>("AllowedText")->setTextArg("[COUNT]", llformat("%d",count));
|
||||||
|
getChild<LLUICtrl>("AllowedText")->setTextArg("[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||||
|
|
||||||
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
||||||
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||||
|
|
||||||
@@ -2526,34 +2558,22 @@ void LLPanelLandAccess::refresh()
|
|||||||
cit != parcel->mAccessList.end(); ++cit)
|
cit != parcel->mAccessList.end(); ++cit)
|
||||||
{
|
{
|
||||||
const LLAccessEntry& entry = (*cit).second;
|
const LLAccessEntry& entry = (*cit).second;
|
||||||
std::string suffix;
|
LLSD item;
|
||||||
|
item["id"] = entry.mID;
|
||||||
|
LLSD& columns = item["columns"];
|
||||||
|
columns[0]["column"] = "name"; // to be populated later
|
||||||
|
columns[1]["column"] = "duration";
|
||||||
if (entry.mTime != 0)
|
if (entry.mTime != 0)
|
||||||
{
|
{
|
||||||
S32 now = time(NULL);
|
columns[1]["type"] = "date";
|
||||||
S32 seconds = entry.mTime - now;
|
columns[1]["format"] = time_format;
|
||||||
if (seconds < 0) seconds = 0;
|
columns[1]["value"] = LLDate(entry.mTime);
|
||||||
suffix.assign(" (");
|
|
||||||
if (seconds >= 120)
|
|
||||||
{
|
|
||||||
std::string buf = llformat("%d ", (seconds/60)) + getString("minutes");
|
|
||||||
suffix.append(buf);
|
|
||||||
}
|
|
||||||
else if (seconds >= 60)
|
|
||||||
{
|
|
||||||
suffix.append(getString("1_minute"));
|
|
||||||
}
|
|
||||||
else if (seconds == 1)
|
|
||||||
{
|
|
||||||
suffix.append(getString("1_second"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::string buf = llformat("%d ", seconds) + getString("seconds");
|
|
||||||
suffix.append(buf);
|
|
||||||
}
|
|
||||||
suffix.append(" " + getString("remaining") + ")");
|
|
||||||
}
|
}
|
||||||
mListAccess->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
|
else
|
||||||
|
{
|
||||||
|
columns[1]["value"] = always;
|
||||||
|
}
|
||||||
|
mListAccess->addElement(item);
|
||||||
}
|
}
|
||||||
mListAccess->sortByName(TRUE);
|
mListAccess->sortByName(TRUE);
|
||||||
}
|
}
|
||||||
@@ -2565,6 +2585,8 @@ void LLPanelLandAccess::refresh()
|
|||||||
mListBanned->clearSortOrder();
|
mListBanned->clearSortOrder();
|
||||||
mListBanned->deleteAllItems();
|
mListBanned->deleteAllItems();
|
||||||
S32 count = parcel->mBanList.size();
|
S32 count = parcel->mBanList.size();
|
||||||
|
getChild<LLUICtrl>("BanCheck")->setTextArg("[COUNT]", llformat("%d",count));
|
||||||
|
getChild<LLUICtrl>("BanCheck")->setTextArg("[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||||
|
|
||||||
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
||||||
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||||
@@ -2573,34 +2595,22 @@ void LLPanelLandAccess::refresh()
|
|||||||
cit != parcel->mBanList.end(); ++cit)
|
cit != parcel->mBanList.end(); ++cit)
|
||||||
{
|
{
|
||||||
const LLAccessEntry& entry = (*cit).second;
|
const LLAccessEntry& entry = (*cit).second;
|
||||||
std::string suffix;
|
LLSD item;
|
||||||
|
item["id"] = entry.mID;
|
||||||
|
LLSD& columns = item["columns"];
|
||||||
|
columns[0]["column"] = "name"; // to be populated later
|
||||||
|
columns[1]["column"] = "duration";
|
||||||
if (entry.mTime != 0)
|
if (entry.mTime != 0)
|
||||||
{
|
{
|
||||||
S32 now = time(NULL);
|
columns[1]["type"] = "date";
|
||||||
S32 seconds = entry.mTime - now;
|
columns[1]["format"] = time_format;
|
||||||
if (seconds < 0) seconds = 0;
|
columns[1]["value"] = LLDate(entry.mTime);
|
||||||
suffix.assign(" (");
|
|
||||||
if (seconds >= 120)
|
|
||||||
{
|
|
||||||
std::string buf = llformat("%d ", (seconds/60)) + getString("minutes");
|
|
||||||
suffix.append(buf);
|
|
||||||
}
|
|
||||||
else if (seconds >= 60)
|
|
||||||
{
|
|
||||||
suffix.append(getString("1_minute"));
|
|
||||||
}
|
|
||||||
else if (seconds == 1)
|
|
||||||
{
|
|
||||||
suffix.append(getString("1_second"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::string buf = llformat("%d ", seconds) + getString("seconds");
|
|
||||||
suffix.append(buf);
|
|
||||||
}
|
|
||||||
suffix.append(" " + getString("remaining") + ")");
|
|
||||||
}
|
}
|
||||||
mListBanned->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
|
else
|
||||||
|
{
|
||||||
|
columns[1]["value"] = always;
|
||||||
|
}
|
||||||
|
mListBanned->addElement(item);
|
||||||
}
|
}
|
||||||
mListBanned->sortByName(TRUE);
|
mListBanned->sortByName(TRUE);
|
||||||
}
|
}
|
||||||
@@ -2608,18 +2618,22 @@ void LLPanelLandAccess::refresh()
|
|||||||
if(parcel->getRegionDenyAnonymousOverride())
|
if(parcel->getRegionDenyAnonymousOverride())
|
||||||
{
|
{
|
||||||
getChild<LLUICtrl>("limit_payment")->setValue(TRUE);
|
getChild<LLUICtrl>("limit_payment")->setValue(TRUE);
|
||||||
|
getChild<LLUICtrl>("limit_payment")->setLabelArg("[ESTATE_PAYMENT_LIMIT]", getString("access_estate_defined") );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
getChild<LLUICtrl>("limit_payment")->setValue((parcel->getParcelFlag(PF_DENY_ANONYMOUS)));
|
getChild<LLUICtrl>("limit_payment")->setValue((parcel->getParcelFlag(PF_DENY_ANONYMOUS)));
|
||||||
|
getChild<LLUICtrl>("limit_payment")->setLabelArg("[ESTATE_PAYMENT_LIMIT]", std::string() );
|
||||||
}
|
}
|
||||||
if(parcel->getRegionDenyAgeUnverifiedOverride())
|
if(parcel->getRegionDenyAgeUnverifiedOverride())
|
||||||
{
|
{
|
||||||
getChild<LLUICtrl>("limit_age_verified")->setValue(TRUE);
|
getChild<LLUICtrl>("limit_age_verified")->setValue(TRUE);
|
||||||
|
getChild<LLUICtrl>("limit_age_verified")->setLabelArg("[ESTATE_AGE_LIMIT]", getString("access_estate_defined") );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
getChild<LLUICtrl>("limit_age_verified")->setValue((parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED)));
|
getChild<LLUICtrl>("limit_age_verified")->setValue((parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED)));
|
||||||
|
getChild<LLUICtrl>("limit_age_verified")->setLabelArg("[ESTATE_AGE_LIMIT]", std::string() );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST);
|
BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST);
|
||||||
@@ -2669,13 +2683,22 @@ void LLPanelLandAccess::refresh_ui()
|
|||||||
getChildView("HoursSpin")->setEnabled(FALSE);
|
getChildView("HoursSpin")->setEnabled(FALSE);
|
||||||
getChildView("AccessList")->setEnabled(FALSE);
|
getChildView("AccessList")->setEnabled(FALSE);
|
||||||
getChildView("BannedList")->setEnabled(FALSE);
|
getChildView("BannedList")->setEnabled(FALSE);
|
||||||
|
getChildView("add_allowed")->setEnabled(FALSE);
|
||||||
|
getChildView("remove_allowed")->setEnabled(FALSE);
|
||||||
|
getChildView("add_banned")->setEnabled(FALSE);
|
||||||
|
getChildView("remove_banned")->setEnabled(FALSE);
|
||||||
|
|
||||||
LLParcel *parcel = mParcel->getParcel();
|
LLParcel *parcel = mParcel->getParcel();
|
||||||
if (parcel)
|
if (parcel && !gDisconnected)
|
||||||
{
|
{
|
||||||
BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED);
|
BOOL can_manage_allowed = false;
|
||||||
BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED);
|
BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED);
|
||||||
|
|
||||||
|
if (parcel->getRegionAllowAccessOverride())
|
||||||
|
{ // Estate owner may have disabled allowing the parcel owner from managing access.
|
||||||
|
can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED);
|
||||||
|
}
|
||||||
|
|
||||||
getChildView("public_access")->setEnabled(can_manage_allowed);
|
getChildView("public_access")->setEnabled(can_manage_allowed);
|
||||||
BOOL public_access = getChild<LLUICtrl>("public_access")->getValue().asBoolean();
|
BOOL public_access = getChild<LLUICtrl>("public_access")->getValue().asBoolean();
|
||||||
if (public_access)
|
if (public_access)
|
||||||
@@ -2707,7 +2730,6 @@ void LLPanelLandAccess::refresh_ui()
|
|||||||
{
|
{
|
||||||
getChildView("Only Allow")->setToolTip(std::string());
|
getChildView("Only Allow")->setToolTip(std::string());
|
||||||
}
|
}
|
||||||
getChildView("GroupCheck")->setEnabled(FALSE);
|
|
||||||
getChildView("PassCheck")->setEnabled(FALSE);
|
getChildView("PassCheck")->setEnabled(FALSE);
|
||||||
getChildView("pass_combo")->setEnabled(FALSE);
|
getChildView("pass_combo")->setEnabled(FALSE);
|
||||||
getChildView("AccessList")->setEnabled(FALSE);
|
getChildView("AccessList")->setEnabled(FALSE);
|
||||||
@@ -2717,11 +2739,7 @@ void LLPanelLandAccess::refresh_ui()
|
|||||||
getChildView("limit_payment")->setEnabled(FALSE);
|
getChildView("limit_payment")->setEnabled(FALSE);
|
||||||
getChildView("limit_age_verified")->setEnabled(FALSE);
|
getChildView("limit_age_verified")->setEnabled(FALSE);
|
||||||
|
|
||||||
std::string group_name;
|
|
||||||
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
|
|
||||||
{
|
|
||||||
getChildView("GroupCheck")->setEnabled(can_manage_allowed);
|
|
||||||
}
|
|
||||||
BOOL sell_passes = getChild<LLUICtrl>("PassCheck")->getValue().asBoolean();
|
BOOL sell_passes = getChild<LLUICtrl>("PassCheck")->getValue().asBoolean();
|
||||||
getChildView("PassCheck")->setEnabled(can_manage_allowed);
|
getChildView("PassCheck")->setEnabled(can_manage_allowed);
|
||||||
if (sell_passes)
|
if (sell_passes)
|
||||||
@@ -2731,6 +2749,12 @@ void LLPanelLandAccess::refresh_ui()
|
|||||||
getChildView("HoursSpin")->setEnabled(can_manage_allowed);
|
getChildView("HoursSpin")->setEnabled(can_manage_allowed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::string group_name;
|
||||||
|
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
|
||||||
|
{
|
||||||
|
bool can_allow_groups = !public_access || (public_access && (getChild<LLUICtrl>("limit_payment")->getValue().asBoolean() ^ getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean()));
|
||||||
|
getChildView("GroupCheck")->setEnabled(can_manage_allowed && can_allow_groups);
|
||||||
|
}
|
||||||
getChildView("AccessList")->setEnabled(true/*can_manage_allowed*/);
|
getChildView("AccessList")->setEnabled(true/*can_manage_allowed*/);
|
||||||
S32 allowed_list_count = parcel->mAccessList.size();
|
S32 allowed_list_count = parcel->mAccessList.size();
|
||||||
getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
|
getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
|
||||||
@@ -2779,12 +2803,12 @@ void LLPanelLandAccess::onCommitPublicAccess(LLUICtrl *ctrl, void *userdata)
|
|||||||
|
|
||||||
// If we disabled public access, enable group access by default (if applicable)
|
// If we disabled public access, enable group access by default (if applicable)
|
||||||
BOOL public_access = self->getChild<LLUICtrl>("public_access")->getValue().asBoolean();
|
BOOL public_access = self->getChild<LLUICtrl>("public_access")->getValue().asBoolean();
|
||||||
if (public_access == FALSE)
|
if (!public_access)
|
||||||
{
|
{
|
||||||
std::string group_name;
|
std::string group_name;
|
||||||
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
|
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
|
||||||
{
|
{
|
||||||
self->getChild<LLUICtrl>("GroupCheck")->setValue(public_access ? FALSE : TRUE);
|
self->getChild<LLUICtrl>("GroupCheck")->setValue(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2893,7 +2917,7 @@ void LLPanelLandAccess::onClickAddAccess()
|
|||||||
{
|
{
|
||||||
LLFloater* root_floater = gFloaterView->getParentFloater(this);
|
LLFloater* root_floater = gFloaterView->getParentFloater(this);
|
||||||
LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
|
LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
|
||||||
boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1));
|
boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1), true, true);
|
||||||
if (picker)
|
if (picker)
|
||||||
{
|
{
|
||||||
root_floater->addDependentFloater(picker);
|
root_floater->addDependentFloater(picker);
|
||||||
@@ -2902,17 +2926,29 @@ void LLPanelLandAccess::onClickAddAccess()
|
|||||||
|
|
||||||
void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids)
|
void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids)
|
||||||
{
|
{
|
||||||
if (!ids.empty())
|
LLParcel* parcel = mParcel->getParcel();
|
||||||
|
if (!parcel) return;
|
||||||
|
|
||||||
|
U32 lists_to_update = 0;
|
||||||
|
|
||||||
|
for (const auto& id : ids)
|
||||||
{
|
{
|
||||||
LLUUID id = ids[0];
|
if (parcel->addToAccessList(id, 0))
|
||||||
LLParcel* parcel = mParcel->getParcel();
|
|
||||||
if (parcel)
|
|
||||||
{
|
{
|
||||||
parcel->addToAccessList(id, 0);
|
lists_to_update |= AL_ACCESS;
|
||||||
LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS);
|
// agent was successfully added to access list
|
||||||
refresh();
|
// but we also need to check ban list to ensure that agent will not be in two lists simultaneously
|
||||||
|
if(parcel->removeFromBanList(id))
|
||||||
|
{
|
||||||
|
lists_to_update |= AL_BAN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lists_to_update)
|
||||||
|
{
|
||||||
|
LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -2942,7 +2978,7 @@ void LLPanelLandAccess::onClickAddBanned()
|
|||||||
{
|
{
|
||||||
LLFloater* root_floater = gFloaterView->getParentFloater(this);
|
LLFloater* root_floater = gFloaterView->getParentFloater(this);
|
||||||
LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
|
LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
|
||||||
boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1));
|
boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1), true, true);
|
||||||
if (picker)
|
if (picker)
|
||||||
{
|
{
|
||||||
root_floater->addDependentFloater(picker);
|
root_floater->addDependentFloater(picker);
|
||||||
@@ -2951,17 +2987,40 @@ void LLPanelLandAccess::onClickAddBanned()
|
|||||||
|
|
||||||
void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids)
|
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];
|
root_floater->addDependentFloater(duration_floater);
|
||||||
LLParcel* parcel = mParcel->getParcel();
|
}
|
||||||
if (parcel)
|
}
|
||||||
|
|
||||||
|
void LLPanelLandAccess::callbackAvatarCBBanned2(const uuid_vec_t& ids, S32 duration)
|
||||||
|
{
|
||||||
|
LLParcel* parcel = mParcel->getParcel();
|
||||||
|
if (!parcel) return;
|
||||||
|
|
||||||
|
U32 lists_to_update = 0;
|
||||||
|
|
||||||
|
for (const auto& id : ids)
|
||||||
|
{
|
||||||
|
if (parcel->addToBanList(id, duration))
|
||||||
{
|
{
|
||||||
parcel->addToBanList(id, 0);
|
lists_to_update |= AL_BAN;
|
||||||
LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_BAN);
|
// agent was successfully added to ban list
|
||||||
refresh();
|
// 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lists_to_update)
|
||||||
|
{
|
||||||
|
LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -3010,7 +3069,7 @@ BOOL LLPanelLandCovenant::postBuild()
|
|||||||
void LLPanelLandCovenant::refresh()
|
void LLPanelLandCovenant::refresh()
|
||||||
{
|
{
|
||||||
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
|
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
|
||||||
if(!region) return;
|
if(!region || gDisconnected) return;
|
||||||
|
|
||||||
LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
|
LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
|
||||||
if (region_name)
|
if (region_name)
|
||||||
|
|||||||
@@ -384,6 +384,7 @@ public:
|
|||||||
void onClickAddAccess();
|
void onClickAddAccess();
|
||||||
void onClickAddBanned();
|
void onClickAddBanned();
|
||||||
void callbackAvatarCBBanned(const uuid_vec_t& ids);
|
void callbackAvatarCBBanned(const uuid_vec_t& ids);
|
||||||
|
void callbackAvatarCBBanned2(const uuid_vec_t& ids, S32 duration);
|
||||||
void callbackAvatarCBAccess(const uuid_vec_t& ids);
|
void callbackAvatarCBAccess(const uuid_vec_t& ids);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,7 @@
|
|||||||
#define LL_LLFLOATERREGIONINFO_H
|
#define LL_LLFLOATERREGIONINFO_H
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "llagent.h"
|
||||||
#include "llfloater.h"
|
#include "llfloater.h"
|
||||||
#include "llpanel.h"
|
#include "llpanel.h"
|
||||||
|
|
||||||
@@ -63,15 +64,17 @@ class LLPanelRegionDebugInfo;
|
|||||||
class LLPanelRegionTerrainInfo;
|
class LLPanelRegionTerrainInfo;
|
||||||
class LLPanelEstateInfo;
|
class LLPanelEstateInfo;
|
||||||
class LLPanelEstateCovenant;
|
class LLPanelEstateCovenant;
|
||||||
|
class LLPanelEstateAccess;
|
||||||
|
|
||||||
|
|
||||||
class LLFloaterRegionInfo : public LLFloater, public LLFloaterSingleton<LLFloaterRegionInfo>
|
class LLFloaterRegionInfo : public LLFloater, public LLFloaterSingleton<LLFloaterRegionInfo>
|
||||||
{
|
{
|
||||||
friend class LLUISingleton<LLFloaterRegionInfo, VisibilityPolicy<LLFloater> >;
|
friend class LLUISingleton<LLFloaterRegionInfo, VisibilityPolicy<LLFloater>>;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
/*virtual*/ void onOpen();
|
/*virtual*/ void onOpen();
|
||||||
|
/*virtual*/ void onClose(bool app_quitting);
|
||||||
/*virtual*/ BOOL postBuild();
|
/*virtual*/ BOOL postBuild();
|
||||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||||
/*virtual*/ void open();
|
/*virtual*/ void open();
|
||||||
@@ -88,6 +91,7 @@ public:
|
|||||||
//static void incrementSerial() { sRequestSerial++; }
|
//static void incrementSerial() { sRequestSerial++; }
|
||||||
|
|
||||||
static LLPanelEstateInfo* getPanelEstate();
|
static LLPanelEstateInfo* getPanelEstate();
|
||||||
|
static LLPanelEstateAccess* getPanelAccess();
|
||||||
static LLPanelEstateCovenant* getPanelCovenant();
|
static LLPanelEstateCovenant* getPanelCovenant();
|
||||||
static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
|
static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
|
||||||
|
|
||||||
@@ -106,6 +110,7 @@ protected:
|
|||||||
protected:
|
protected:
|
||||||
void onTabSelected(const LLSD& param);
|
void onTabSelected(const LLSD& param);
|
||||||
void refreshFromRegion(LLViewerRegion* region);
|
void refreshFromRegion(LLViewerRegion* region);
|
||||||
|
void onGodLevelChange(U8 god_level);
|
||||||
|
|
||||||
// member data
|
// member data
|
||||||
LLTabContainer* mTab;
|
LLTabContainer* mTab;
|
||||||
@@ -113,6 +118,10 @@ protected:
|
|||||||
info_panels_t mInfoPanels;
|
info_panels_t mInfoPanels;
|
||||||
//static S32 sRequestSerial; // serial # of last EstateOwnerRequest
|
//static S32 sRequestSerial; // serial # of last EstateOwnerRequest
|
||||||
static LLUUID sRequestInvoice;
|
static LLUUID sRequestInvoice;
|
||||||
|
|
||||||
|
private:
|
||||||
|
LLAgent::god_level_change_slot_t mGodLevelChangeSlot;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -261,41 +270,18 @@ public:
|
|||||||
|
|
||||||
void onChangeFixedSun();
|
void onChangeFixedSun();
|
||||||
void onChangeUseGlobalTime();
|
void onChangeUseGlobalTime();
|
||||||
|
void onChangeAccessOverride();
|
||||||
|
|
||||||
void onClickEditSky();
|
void onClickEditSky();
|
||||||
void onClickEditSkyHelp();
|
void onClickEditSkyHelp();
|
||||||
void onClickEditDayCycle();
|
void onClickEditDayCycle();
|
||||||
void onClickEditDayCycleHelp();
|
void onClickEditDayCycleHelp();
|
||||||
|
|
||||||
void onClickAddAllowedAgent();
|
|
||||||
void onClickRemoveAllowedAgent();
|
|
||||||
void onClickAddAllowedGroup();
|
|
||||||
void onClickRemoveAllowedGroup();
|
|
||||||
void onClickAddBannedAgent();
|
|
||||||
void onClickRemoveBannedAgent();
|
|
||||||
void onClickAddEstateManager();
|
|
||||||
void onClickRemoveEstateManager();
|
|
||||||
void onClickKickUser();
|
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, LLEstateAccessChangeInfo* change_info);
|
|
||||||
|
|
||||||
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);
|
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, const std::vector<LLAvatarName>& names);
|
void onKickUserCommit(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names);
|
||||||
static void onClickMessageEstate(void* data);
|
static void onClickMessageEstate(void* data);
|
||||||
bool onMessageCommit(const LLSD& notification, const LLSD& response);
|
bool onMessageCommit(const LLSD& notification, const LLSD& response);
|
||||||
@@ -331,7 +317,6 @@ protected:
|
|||||||
void commitEstateAccess();
|
void commitEstateAccess();
|
||||||
void commitEstateManagers();
|
void commitEstateManagers();
|
||||||
|
|
||||||
void clearAccessLists();
|
|
||||||
BOOL checkSunHourSlider(LLUICtrl* child_ctrl);
|
BOOL checkSunHourSlider(LLUICtrl* child_ctrl);
|
||||||
|
|
||||||
U32 mEstateID;
|
U32 mEstateID;
|
||||||
@@ -410,8 +395,6 @@ public:
|
|||||||
|
|
||||||
// LLPanel
|
// LLPanel
|
||||||
/*virtual*/ BOOL postBuild();
|
/*virtual*/ BOOL postBuild();
|
||||||
|
|
||||||
// LLPanelRegionInfo
|
|
||||||
/*virtual*/ void onOpen(const LLSD& key);
|
/*virtual*/ void onOpen(const LLSD& key);
|
||||||
|
|
||||||
// LLView
|
// LLView
|
||||||
@@ -463,4 +446,104 @@ private:
|
|||||||
LLComboBox* mDayCyclePresetCombo;
|
LLComboBox* mDayCyclePresetCombo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if 0 // Singu TODO: Experiences
|
||||||
|
class LLPanelRegionExperiences : public LLPanelRegionInfo
|
||||||
|
{
|
||||||
|
LOG_CLASS(LLPanelEnvironmentInfo);
|
||||||
|
|
||||||
|
public:
|
||||||
|
LLPanelRegionExperiences();
|
||||||
|
/*virtual*/ BOOL postBuild() override;
|
||||||
|
BOOL sendUpdate() override;
|
||||||
|
|
||||||
|
static bool experienceCoreConfirm(const LLSD& notification, const LLSD& response);
|
||||||
|
static void sendEstateExperienceDelta(U32 flags, const LLUUID& agent_id);
|
||||||
|
|
||||||
|
static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content);
|
||||||
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
||||||
|
void sendPurchaseRequest()const;
|
||||||
|
void processResponse( const LLSD& content );
|
||||||
|
private:
|
||||||
|
void refreshRegionExperiences();
|
||||||
|
|
||||||
|
static std::string regionCapabilityQuery(LLViewerRegion* region, const std::string &cap);
|
||||||
|
|
||||||
|
void setupList(LLPanelExperienceListEditor* child, const char* control_name, U32 add_id, U32 remove_id);
|
||||||
|
static LLSD addIds( LLPanelExperienceListEditor* panel );
|
||||||
|
|
||||||
|
void itemChanged(U32 event_type, const LLUUID& id);
|
||||||
|
|
||||||
|
LLPanelExperienceListEditor* mTrusted;
|
||||||
|
LLPanelExperienceListEditor* mAllowed;
|
||||||
|
LLPanelExperienceListEditor* mBlocked;
|
||||||
|
LLUUID mDefaultExperience;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // Singu TODO: Experiences
|
||||||
|
|
||||||
|
class LLPanelEstateAccess : public LLPanelRegionInfo
|
||||||
|
{
|
||||||
|
LOG_CLASS(LLPanelEnvironmentInfo);
|
||||||
|
|
||||||
|
public:
|
||||||
|
LLPanelEstateAccess();
|
||||||
|
|
||||||
|
virtual BOOL postBuild();
|
||||||
|
virtual void updateChild(LLUICtrl* child_ctrl);
|
||||||
|
|
||||||
|
void updateControls(LLViewerRegion* region);
|
||||||
|
void updateLists();
|
||||||
|
|
||||||
|
void setPendingUpdate(bool pending) { mPendingUpdate = pending; }
|
||||||
|
bool getPendingUpdate() { return mPendingUpdate; }
|
||||||
|
|
||||||
|
virtual bool refreshFromRegion(LLViewerRegion* region);
|
||||||
|
|
||||||
|
static void onEstateAccessReceived(const LLSD& result);
|
||||||
|
|
||||||
|
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, const std::vector<LLAvatarName>& names, LLEstateAccessChangeInfo* change_info);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Send the actual EstateOwnerRequest "estateaccessdelta" message
|
||||||
|
static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
|
||||||
|
|
||||||
|
private:
|
||||||
|
//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
|
#endif
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ LLNameListCtrl::LLNameListCtrl(const std::string& name, const LLRect& rect, BOOL
|
|||||||
|
|
||||||
// public
|
// public
|
||||||
LLScrollListItem* LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos,
|
LLScrollListItem* LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos,
|
||||||
BOOL enabled, const std::string& suffix)
|
BOOL enabled, const std::string& suffix, const std::string& prefix)
|
||||||
{
|
{
|
||||||
//LL_INFOS() << "LLNameListCtrl::addNameItem " << agent_id << LL_ENDL;
|
//LL_INFOS() << "LLNameListCtrl::addNameItem " << agent_id << LL_ENDL;
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ LLScrollListItem* LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPositi
|
|||||||
item.enabled = enabled;
|
item.enabled = enabled;
|
||||||
item.target = INDIVIDUAL;
|
item.target = INDIVIDUAL;
|
||||||
|
|
||||||
return addNameItemRow(item, pos, suffix);
|
return addNameItemRow(item, pos, suffix, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
// virtual, public
|
// virtual, public
|
||||||
@@ -160,7 +160,8 @@ LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition p
|
|||||||
LLScrollListItem* LLNameListCtrl::addNameItemRow(
|
LLScrollListItem* LLNameListCtrl::addNameItemRow(
|
||||||
const LLNameListCtrl::NameItem& name_item,
|
const LLNameListCtrl::NameItem& name_item,
|
||||||
EAddPosition pos,
|
EAddPosition pos,
|
||||||
const std::string& suffix)
|
const std::string& suffix,
|
||||||
|
const std::string& prefix)
|
||||||
{
|
{
|
||||||
LLUUID id = name_item.value().asUUID();
|
LLUUID id = name_item.value().asUUID();
|
||||||
LLNameListItem* item = new LLNameListItem(name_item,name_item.target() == GROUP);
|
LLNameListItem* item = new LLNameListItem(name_item,name_item.target() == GROUP);
|
||||||
@@ -174,8 +175,19 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
|
|||||||
switch(name_item.target)
|
switch(name_item.target)
|
||||||
{
|
{
|
||||||
case GROUP:
|
case GROUP:
|
||||||
gCacheName->getGroupName(id, fullname);
|
if (!gCacheName->getGroupName(id, fullname))
|
||||||
// fullname will be "nobody" if group not found
|
{
|
||||||
|
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(id);
|
||||||
|
if (it != mAvatarNameCacheConnections.end())
|
||||||
|
{
|
||||||
|
if (it->second.connected())
|
||||||
|
{
|
||||||
|
it->second.disconnect();
|
||||||
|
}
|
||||||
|
mAvatarNameCacheConnections.erase(it);
|
||||||
|
}
|
||||||
|
mAvatarNameCacheConnections[id] = gCacheName->getGroup(id, boost::bind(&LLNameListCtrl::onGroupNameCache, this, _1, _2, item->getHandle()));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SPECIAL:
|
case SPECIAL:
|
||||||
// just use supplied name
|
// just use supplied name
|
||||||
@@ -203,12 +215,12 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
|
|||||||
}
|
}
|
||||||
mAvatarNameCacheConnections.erase(it);
|
mAvatarNameCacheConnections.erase(it);
|
||||||
}
|
}
|
||||||
mAvatarNameCacheConnections[id] = LLAvatarNameCache::get(id,boost::bind(&LLNameListCtrl::onAvatarNameCache,this, _1, _2, suffix, item->getHandle()));
|
mAvatarNameCacheConnections[id] = LLAvatarNameCache::get(id,boost::bind(&LLNameListCtrl::onAvatarNameCache,this, _1, _2, suffix, prefix, item->getHandle()));
|
||||||
|
|
||||||
if (mPendingLookupsRemaining <= 0)
|
if (mPendingLookupsRemaining <= 0)
|
||||||
{
|
{
|
||||||
// BAKER TODO:
|
// BAKER TODO:
|
||||||
// We might get into a state where mPendingLookupsRemainig might
|
// We might get into a state where mPendingLookupsRemaining might
|
||||||
// go negative. So just reset it right now and figure out if it's
|
// go negative. So just reset it right now and figure out if it's
|
||||||
// possible later :)
|
// possible later :)
|
||||||
mPendingLookupsRemaining = 0;
|
mPendingLookupsRemaining = 0;
|
||||||
@@ -231,7 +243,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
|
|||||||
LLScrollListCell* cell = item->getColumn(mNameColumnIndex);
|
LLScrollListCell* cell = item->getColumn(mNameColumnIndex);
|
||||||
if (cell)
|
if (cell)
|
||||||
{
|
{
|
||||||
cell->setValue(fullname);
|
cell->setValue(prefix + fullname);
|
||||||
}
|
}
|
||||||
|
|
||||||
dirtyColumns();
|
dirtyColumns();
|
||||||
@@ -271,9 +283,24 @@ 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,
|
void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
|
||||||
const LLAvatarName& av_name,
|
const LLAvatarName& av_name,
|
||||||
std::string suffix,
|
std::string suffix,
|
||||||
|
std::string prefix,
|
||||||
LLHandle<LLNameListItem> item)
|
LLHandle<LLNameListItem> item)
|
||||||
{
|
{
|
||||||
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(agent_id);
|
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(agent_id);
|
||||||
@@ -295,6 +322,11 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
|
|||||||
name.append(suffix);
|
name.append(suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!prefix.empty())
|
||||||
|
{
|
||||||
|
name.insert(0, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
LLNameListItem* list_item = item.get();
|
LLNameListItem* list_item = item.get();
|
||||||
if (list_item && list_item->getUUID() == agent_id)
|
if (list_item && list_item->getUUID() == agent_id)
|
||||||
{
|
{
|
||||||
@@ -326,6 +358,33 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
|
|||||||
dirtyColumns();
|
dirtyColumns();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLNameListCtrl::onGroupNameCache(const LLUUID& group_id, const std::string name, LLHandle<LLNameListItem> item)
|
||||||
|
{
|
||||||
|
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(group_id);
|
||||||
|
if (it != mAvatarNameCacheConnections.end())
|
||||||
|
{
|
||||||
|
if (it->second.connected())
|
||||||
|
{
|
||||||
|
it->second.disconnect();
|
||||||
|
}
|
||||||
|
mAvatarNameCacheConnections.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::sortByName(BOOL ascending)
|
void LLNameListCtrl::sortByName(BOOL ascending)
|
||||||
{
|
{
|
||||||
sortByColumnIndex(mNameColumnIndex,ascending);
|
sortByColumnIndex(mNameColumnIndex,ascending);
|
||||||
|
|||||||
@@ -124,11 +124,12 @@ public:
|
|||||||
// Add a user to the list by name. It will be added, the name
|
// Add a user to the list by name. It will be added, the name
|
||||||
// requested from the cache, and updated as necessary.
|
// requested from the cache, and updated as necessary.
|
||||||
LLScrollListItem* addNameItem(const LLUUID& agent_id, EAddPosition pos = ADD_BOTTOM,
|
LLScrollListItem* addNameItem(const LLUUID& agent_id, EAddPosition pos = ADD_BOTTOM,
|
||||||
BOOL enabled = TRUE, const std::string& suffix = LLStringUtil::null);
|
BOOL enabled = TRUE, const std::string& suffix = LLStringUtil::null, const std::string& prefix = LLStringUtil::null);
|
||||||
LLScrollListItem* addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM);
|
LLScrollListItem* addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM);
|
||||||
|
|
||||||
/*virtual*/ LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
|
/*virtual*/ LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
|
||||||
LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, const std::string& suffix = LLStringUtil::null);
|
LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, const std::string& suffix = LLStringUtil::null,
|
||||||
|
const std::string& prefix = LLStringUtil::null);
|
||||||
|
|
||||||
// Add a user to the list by name. It will be added, the name
|
// Add a user to the list by name. It will be added, the name
|
||||||
// requested from the cache, and updated as necessary.
|
// requested from the cache, and updated as necessary.
|
||||||
@@ -139,6 +140,8 @@ public:
|
|||||||
|
|
||||||
void removeNameItem(const LLUUID& agent_id);
|
void removeNameItem(const LLUUID& agent_id);
|
||||||
|
|
||||||
|
LLScrollListItem* getNameItemByAgentId(const LLUUID& agent_id);
|
||||||
|
|
||||||
// LLView interface
|
// LLView interface
|
||||||
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
|
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
|
||||||
BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
|
BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
|
||||||
@@ -149,7 +152,8 @@ public:
|
|||||||
|
|
||||||
void sortByName(BOOL ascending);
|
void sortByName(BOOL ascending);
|
||||||
private:
|
private:
|
||||||
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, std::string suffix, LLHandle<LLNameListItem> item);
|
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:
|
private:
|
||||||
S32 mNameColumnIndex;
|
S32 mNameColumnIndex;
|
||||||
|
|||||||
@@ -9371,7 +9371,7 @@ void estate_bulk_eject(const uuid_vec_t& ids, bool ban, S32 option)
|
|||||||
else
|
else
|
||||||
strings.push_back(idstr);
|
strings.push_back(idstr);
|
||||||
if (ban)
|
if (ban)
|
||||||
LLPanelEstateInfo::sendEstateAccessDelta(ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | ESTATE_ACCESS_NO_REPLY, id);
|
LLPanelEstateAccess::sendEstateAccessDelta(ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | ESTATE_ACCESS_NO_REPLY, id);
|
||||||
}
|
}
|
||||||
if (!tphome) send_estate_message("kickestate", strings);
|
if (!tphome) send_estate_message("kickestate", strings);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1984,6 +1984,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
|||||||
capabilityNames.append("DispatchRegionInfo");
|
capabilityNames.append("DispatchRegionInfo");
|
||||||
capabilityNames.append("DirectDelivery");
|
capabilityNames.append("DirectDelivery");
|
||||||
capabilityNames.append("EnvironmentSettings");
|
capabilityNames.append("EnvironmentSettings");
|
||||||
|
capabilityNames.append("EstateAccess");
|
||||||
capabilityNames.append("EstateChangeInfo");
|
capabilityNames.append("EstateChangeInfo");
|
||||||
capabilityNames.append("EventQueueGet");
|
capabilityNames.append("EventQueueGet");
|
||||||
capabilityNames.append("ExtEnvironment");
|
capabilityNames.append("ExtEnvironment");
|
||||||
@@ -2019,6 +2020,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
|||||||
capabilityNames.append("ParcelVoiceInfoRequest");
|
capabilityNames.append("ParcelVoiceInfoRequest");
|
||||||
capabilityNames.append("ProductInfoRequest");
|
capabilityNames.append("ProductInfoRequest");
|
||||||
capabilityNames.append("ProvisionVoiceAccountRequest");
|
capabilityNames.append("ProvisionVoiceAccountRequest");
|
||||||
|
capabilityNames.append("ReadOfflineMsgs"); // Requires to respond reliably: AcceptFriendship, AcceptGroupInvite, DeclineFriendship, DeclineGroupInvite
|
||||||
capabilityNames.append("RemoteParcelRequest");
|
capabilityNames.append("RemoteParcelRequest");
|
||||||
capabilityNames.append("RenderMaterials");
|
capabilityNames.append("RenderMaterials");
|
||||||
capabilityNames.append("RequestTextureDownload");
|
capabilityNames.append("RequestTextureDownload");
|
||||||
|
|||||||
@@ -1349,6 +1349,7 @@ Select the thumbnail to choose a different texture.
|
|||||||
<string name="1_second">1 second</string>
|
<string name="1_second">1 second</string>
|
||||||
<string name="seconds">seconds</string>
|
<string name="seconds">seconds</string>
|
||||||
<string name="remaining">remaining</string>
|
<string name="remaining">remaining</string>
|
||||||
|
<string name="Always">Always</string>
|
||||||
<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall"
|
<check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall"
|
||||||
height="16" initial_value="false" label="Allow Group Access: [GROUP]"
|
height="16" initial_value="false" label="Allow Group Access: [GROUP]"
|
||||||
left="8" mouse_opaque="true" name="GroupCheck" radio_style="false"
|
left="8" mouse_opaque="true" name="GroupCheck" radio_style="false"
|
||||||
@@ -1377,13 +1378,16 @@ Select the thumbnail to choose a different texture.
|
|||||||
<text bottom="-220" enabled="true" follows="left|right|top" font="SansSerifSmall"
|
<text bottom="-220" enabled="true" follows="left|right|top" font="SansSerifSmall"
|
||||||
height="16" initial_value="false" label="Always Allow" left="20"
|
height="16" initial_value="false" label="Always Allow" left="20"
|
||||||
mouse_opaque="true" name="AllowedText" radio_style="false" width="195">
|
mouse_opaque="true" name="AllowedText" radio_style="false" width="195">
|
||||||
Allowed Residents
|
Allowed ([COUNT], max [MAX])
|
||||||
</text>
|
</text>
|
||||||
<name_list allow_calling_card_drop="false" background_visible="true" bottom="-304"
|
<name_list allow_calling_card_drop="false" background_visible="true" bottom="-304"
|
||||||
column_padding="0" draw_border="true" draw_heading="false" enabled="true"
|
column_padding="0" draw_border="true" draw_heading="true" enabled="true"
|
||||||
follows="top|bottom" heading_font="SansSerifSmall" heading_height="14"
|
follows="top|bottom" heading_font="SansSerifSmall" heading_height="16"
|
||||||
height="80" left="20" mouse_opaque="true" multi_select="true" name_system="LandManagementNameSystem"
|
height="80" left="20" mouse_opaque="true" multi_select="true" name_system="LandManagementNameSystem"
|
||||||
name="AccessList" tool_tip="([LISTED] listed, [MAX] max)" width="195" menu_num="0"/>
|
name="AccessList" tool_tip="([LISTED] listed, [MAX] max)" width="195" menu_num="0">
|
||||||
|
<column label="Name" name="name" width="120"/>
|
||||||
|
<column label="Duration" name="duration" width="75"/>
|
||||||
|
</name_list>
|
||||||
<button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
|
<button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
|
||||||
halign="center" height="16" label="Add..." label_selected="Add..."
|
halign="center" height="16" label="Add..." label_selected="Add..."
|
||||||
left_delta="5" mouse_opaque="true" name="add_allowed" scale_image="true"
|
left_delta="5" mouse_opaque="true" name="add_allowed" scale_image="true"
|
||||||
@@ -1393,17 +1397,18 @@ Select the thumbnail to choose a different texture.
|
|||||||
left_delta="100" mouse_opaque="true" name="remove_allowed"
|
left_delta="100" mouse_opaque="true" name="remove_allowed"
|
||||||
scale_image="true" width="80" />
|
scale_image="true" width="80" />
|
||||||
<text bottom="-220" enabled="true" follows="left|right|top" font="SansSerifSmall"
|
<text bottom="-220" enabled="true" follows="left|right|top" font="SansSerifSmall"
|
||||||
height="16" initial_value="false"
|
height="16" left="240" mouse_opaque="true" name="BanCheck" width="195">
|
||||||
label="Ban" left="240" mouse_opaque="true"
|
Banned ([COUNT], max [MAX])
|
||||||
name="BanCheck" radio_style="false" width="195">
|
|
||||||
Banned Residents
|
|
||||||
</text>
|
</text>
|
||||||
<name_list allow_calling_card_drop="false" background_visible="true" bottom="-304"
|
<name_list allow_calling_card_drop="false" background_visible="true" bottom="-304"
|
||||||
column_padding="0" draw_border="true" draw_heading="false" enabled="true"
|
column_padding="0" draw_border="true" draw_heading="true" enabled="true"
|
||||||
follows="top|bottom" heading_font="SansSerifSmall"
|
follows="top|bottom" heading_font="SansSerifSmall"
|
||||||
heading_height="14" height="80" left_delta="0" mouse_opaque="true"
|
heading_height="16" height="80" left_delta="0" mouse_opaque="true"
|
||||||
multi_select="true" name="BannedList" name_system="LandManagementNameSystem"
|
multi_select="true" name="BannedList" name_system="LandManagementNameSystem"
|
||||||
tool_tip="([LISTED] listed, [MAX] max)" width="195" menu_num="0"/>
|
tool_tip="([LISTED] listed, [MAX] max)" width="195" menu_num="0">
|
||||||
|
<column label="Name" name="name" width="120"/>
|
||||||
|
<column label="Duration" name="duration" width="75"/>
|
||||||
|
</name_list>
|
||||||
<button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
|
<button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
|
||||||
halign="center" height="16" label="Add..." label_selected="Add..."
|
halign="center" height="16" label="Add..." label_selected="Add..."
|
||||||
left_delta="5" mouse_opaque="true" name="add_banned" scale_image="true"
|
left_delta="5" mouse_opaque="true" name="add_banned" scale_image="true"
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
<?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="80"
|
||||||
|
layout="topleft"
|
||||||
|
name="ban_duration"
|
||||||
|
title="Duration"
|
||||||
|
single_instance="true"
|
||||||
|
width="180">
|
||||||
|
<!-- Liru make this a combo: Hours, Days, Weeks, Months -->
|
||||||
|
<combo_box name="ban_duration_combo" bottom="-40" left="10" height="20" width="100" initial_value="0">
|
||||||
|
<combo_item name="permanent" label="Permanent" value="0"/>
|
||||||
|
<combo_item name="hours" label="Hours" value="1"/>
|
||||||
|
<combo_item name="days" label="Days" value="2"/>
|
||||||
|
<combo_item name="weeks" label="Weeks" value="3"/>
|
||||||
|
<combo_item name="months" label="Months" value="4"/>
|
||||||
|
</combo_box>
|
||||||
|
|
||||||
|
<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_duration"
|
||||||
|
bottom_delta="-2"
|
||||||
|
left_delta="100"
|
||||||
|
width="60"/>
|
||||||
|
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="OK"
|
||||||
|
left="10"
|
||||||
|
name="ok_btn"
|
||||||
|
bottom_delta="-30"
|
||||||
|
width="80">
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="Cancel"
|
||||||
|
left_delta="80"
|
||||||
|
name="cancel_btn"
|
||||||
|
bottom_delta="0"
|
||||||
|
width="80">
|
||||||
|
</button>
|
||||||
|
</floater>
|
||||||
@@ -3391,6 +3391,69 @@ You can only have [MAX_MANAGER] Estate Managers.
|
|||||||
Can't add estate owner to estate 'Banned Resident' list.
|
Can't add estate owner to estate 'Banned Resident' list.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="ProblemAddingEstateManagerBanned"
|
||||||
|
type="alertmodal">
|
||||||
|
Unable to add banned resident to estate manager list.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="ProblemBanningEstateManager"
|
||||||
|
type="alertmodal">
|
||||||
|
Unable to add estate manager [AGENT] to banned list.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="GroupIsAlreadyInList"
|
||||||
|
type="alertmodal">
|
||||||
|
<nolink>[GROUP]</nolink> is already in the Allowed Groups list.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="AgentIsAlreadyInList"
|
||||||
|
type="alertmodal">
|
||||||
|
[AGENT] is already in your [LIST_TYPE] list.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="AgentsAreAlreadyInList"
|
||||||
|
type="alertmodal">
|
||||||
|
[AGENT] are already in your [LIST_TYPE] list.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="AgentWasAddedToList"
|
||||||
|
type="alertmodal">
|
||||||
|
[AGENT] was added to [LIST_TYPE] list of [ESTATE].
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="AgentsWereAddedToList"
|
||||||
|
type="alertmodal">
|
||||||
|
[AGENT] were added to [LIST_TYPE] list of [ESTATE].
|
||||||
|
|
||||||
|
</notification>
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="AgentWasRemovedFromList"
|
||||||
|
type="alertmodal">
|
||||||
|
[AGENT] was removed from [LIST_TYPE] list of [ESTATE].
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="AgentsWereRemovedFromList"
|
||||||
|
type="alertmodal">
|
||||||
|
[AGENT] were removed from [LIST_TYPE] list of [ESTATE].
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="CanNotChangeAppearanceUntilLoaded"
|
name="CanNotChangeAppearanceUntilLoaded"
|
||||||
|
|||||||
466
indra/newview/skins/default/xui/en-us/panel_region_access.xml
Normal file
466
indra/newview/skins/default/xui/en-us/panel_region_access.xml
Normal file
@@ -0,0 +1,466 @@
|
|||||||
|
<?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"
|
||||||
|
bottom="320"
|
||||||
|
width="480">
|
||||||
|
|
||||||
|
|
||||||
|
<tab_container
|
||||||
|
bottom="-10"
|
||||||
|
follows="all"
|
||||||
|
layout="topleft"
|
||||||
|
left="3"
|
||||||
|
name="tabs"
|
||||||
|
tab_min_width="70"
|
||||||
|
tab_height="30"
|
||||||
|
tab_position="top"
|
||||||
|
top="-1"
|
||||||
|
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"
|
||||||
|
follows="left|top"
|
||||||
|
height="20"
|
||||||
|
layout="topleft"
|
||||||
|
name="estate_manager_label"
|
||||||
|
bottom="-20"
|
||||||
|
left="10"
|
||||||
|
width="200">
|
||||||
|
Estate Managers:
|
||||||
|
</text>
|
||||||
|
<button
|
||||||
|
bottom_delta="3"
|
||||||
|
follows="left|top"
|
||||||
|
font="SansSerifSmall"
|
||||||
|
height="18"
|
||||||
|
label="?"
|
||||||
|
name="estate_manager_help"
|
||||||
|
right="-10"
|
||||||
|
width="18" />
|
||||||
|
<!-- Estate Managers box -->
|
||||||
|
<view_border
|
||||||
|
bevel_style="none"
|
||||||
|
follows="top|left"
|
||||||
|
height="400"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
bottom_delta="-408"
|
||||||
|
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"
|
||||||
|
menu_num="0"
|
||||||
|
name_system="LandManagementNameSystem"
|
||||||
|
bottom_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"
|
||||||
|
bottom_delta="-29"
|
||||||
|
width="114" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="Remove..."
|
||||||
|
layout="topleft"
|
||||||
|
name="remove_estate_manager_btn"
|
||||||
|
left_delta="123"
|
||||||
|
bottom_delta="0"
|
||||||
|
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">
|
||||||
|
<text
|
||||||
|
type="string"
|
||||||
|
length="1"
|
||||||
|
follows="left|top"
|
||||||
|
height="20"
|
||||||
|
layout="topleft"
|
||||||
|
name="allow_resident_label"
|
||||||
|
bottom="-20"
|
||||||
|
left="10"
|
||||||
|
width="200">
|
||||||
|
Allowed Residents:
|
||||||
|
</text>
|
||||||
|
<button
|
||||||
|
bottom_delta="3"
|
||||||
|
follows="left|top"
|
||||||
|
font="SansSerifSmall"
|
||||||
|
height="18"
|
||||||
|
label="?"
|
||||||
|
name="allow_resident_help"
|
||||||
|
right="-10"
|
||||||
|
width="18" />
|
||||||
|
<panel
|
||||||
|
follows="left|top|right"
|
||||||
|
height="27"
|
||||||
|
label="top_panel"
|
||||||
|
layout="topleft"
|
||||||
|
left="0"
|
||||||
|
name="allowed_search_panel"
|
||||||
|
right="-1"
|
||||||
|
bottom_delta="-27">
|
||||||
|
<filter_editor
|
||||||
|
follows="left|top|right"
|
||||||
|
height="23"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
label="Search allowed agents"
|
||||||
|
max_length_chars="300"
|
||||||
|
name="allowed_search_input"
|
||||||
|
text_color="Black"
|
||||||
|
text_pad_left="10"
|
||||||
|
bottom="-27"
|
||||||
|
width="440" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
bottom_delta="-1"
|
||||||
|
height="24"
|
||||||
|
label="Copy"
|
||||||
|
layout="topleft"
|
||||||
|
left_delta="440"
|
||||||
|
name="copy_allowed_list_btn"
|
||||||
|
width="60" />
|
||||||
|
</panel>
|
||||||
|
<!-- Always allowed box -->
|
||||||
|
<view_border
|
||||||
|
bevel_style="none"
|
||||||
|
follows="top|left"
|
||||||
|
height="373"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
bottom_delta="-381"
|
||||||
|
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"
|
||||||
|
menu_num="0"
|
||||||
|
name_system="LandManagementNameSystem"
|
||||||
|
bottom_delta="0"
|
||||||
|
width="498">
|
||||||
|
<columns
|
||||||
|
label="Name"
|
||||||
|
name="name"
|
||||||
|
width="498" />
|
||||||
|
</name_list>
|
||||||
|
<!-- Allowed Residents buttons -->
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="Add..."
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
name="add_allowed_avatar_btn"
|
||||||
|
bottom_delta="-29"
|
||||||
|
width="114" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="Remove..."
|
||||||
|
layout="topleft"
|
||||||
|
name="remove_allowed_avatar_btn"
|
||||||
|
left_delta="123"
|
||||||
|
bottom_delta="0"
|
||||||
|
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">
|
||||||
|
<text
|
||||||
|
type="string"
|
||||||
|
length="1"
|
||||||
|
follows="left|top"
|
||||||
|
height="20"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
name="allow_group_label"
|
||||||
|
bottom="-20"
|
||||||
|
width="200">
|
||||||
|
Allowed Groups:
|
||||||
|
</text>
|
||||||
|
<button
|
||||||
|
bottom_delta="3"
|
||||||
|
follows="left|top"
|
||||||
|
font="SansSerifSmall"
|
||||||
|
height="18"
|
||||||
|
label="?"
|
||||||
|
name="allow_group_help"
|
||||||
|
right="-10"
|
||||||
|
width="18" />
|
||||||
|
<panel
|
||||||
|
follows="left|top|right"
|
||||||
|
height="27"
|
||||||
|
label="top_panel"
|
||||||
|
layout="topleft"
|
||||||
|
left="0"
|
||||||
|
name="allowed_group_search_panel"
|
||||||
|
right="-1"
|
||||||
|
bottom_delta="-27">
|
||||||
|
<filter_editor
|
||||||
|
follows="left|top|right"
|
||||||
|
height="23"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
label="Search allowed groups"
|
||||||
|
max_length_chars="300"
|
||||||
|
name="allowed_group_search_input"
|
||||||
|
text_color="Black"
|
||||||
|
text_pad_left="10"
|
||||||
|
bottom="-27"
|
||||||
|
width="440" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
bottom_delta="-1"
|
||||||
|
height="24"
|
||||||
|
label="Copy"
|
||||||
|
layout="topleft"
|
||||||
|
left_delta="440"
|
||||||
|
name="copy_allowed_group_list_btn"
|
||||||
|
width="60" />
|
||||||
|
</panel>
|
||||||
|
<!-- Groups always allowed box -->
|
||||||
|
<view_border
|
||||||
|
bevel_style="none"
|
||||||
|
follows="top|left"
|
||||||
|
height="373"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
bottom_delta="-381"
|
||||||
|
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"
|
||||||
|
bottom_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"
|
||||||
|
bottom_delta="-29"
|
||||||
|
width="114" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="Remove..."
|
||||||
|
layout="topleft"
|
||||||
|
name="remove_allowed_group_btn"
|
||||||
|
left_delta="123"
|
||||||
|
bottom_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">
|
||||||
|
<text
|
||||||
|
type="string"
|
||||||
|
length="1"
|
||||||
|
follows="left|top"
|
||||||
|
height="20"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
name="ban_resident_label"
|
||||||
|
bottom="-20"
|
||||||
|
width="200">
|
||||||
|
Banned Residents:
|
||||||
|
</text>
|
||||||
|
<button
|
||||||
|
bottom_delta="3"
|
||||||
|
follows="left|top"
|
||||||
|
font="SansSerifSmall"
|
||||||
|
height="18"
|
||||||
|
label="?"
|
||||||
|
name="ban_resident_help"
|
||||||
|
right="-10"
|
||||||
|
width="18" />
|
||||||
|
<panel
|
||||||
|
follows="left|top|right"
|
||||||
|
height="27"
|
||||||
|
label="top_panel"
|
||||||
|
layout="topleft"
|
||||||
|
left="0"
|
||||||
|
name="banned_search_panel"
|
||||||
|
right="-1"
|
||||||
|
bottom_delta="-27">
|
||||||
|
<filter_editor
|
||||||
|
follows="left|top|right"
|
||||||
|
height="23"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
label="Search banned agents"
|
||||||
|
max_length_chars="300"
|
||||||
|
name="banned_search_input"
|
||||||
|
text_color="Black"
|
||||||
|
text_pad_left="10"
|
||||||
|
bottom="-27"
|
||||||
|
width="440" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
bottom_delta="-1"
|
||||||
|
height="24"
|
||||||
|
label="Copy"
|
||||||
|
layout="topleft"
|
||||||
|
left_delta="440"
|
||||||
|
name="copy_banned_list_btn"
|
||||||
|
width="60" />
|
||||||
|
</panel>
|
||||||
|
<!-- Always banned box -->
|
||||||
|
<view_border
|
||||||
|
bevel_style="none"
|
||||||
|
follows="top|left"
|
||||||
|
height="373"
|
||||||
|
layout="topleft"
|
||||||
|
left="10"
|
||||||
|
bottom_delta="-381"
|
||||||
|
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"
|
||||||
|
menu_num="0"
|
||||||
|
name_system="LandManagementNameSystem"
|
||||||
|
bottom_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"
|
||||||
|
bottom_delta="-29"
|
||||||
|
width="114" />
|
||||||
|
<button
|
||||||
|
follows="left|top"
|
||||||
|
height="23"
|
||||||
|
label="Remove..."
|
||||||
|
layout="topleft"
|
||||||
|
name="remove_banned_avatar_btn"
|
||||||
|
left_delta="123"
|
||||||
|
bottom_delta="0"
|
||||||
|
width="114" />
|
||||||
|
</panel>
|
||||||
|
|
||||||
|
|
||||||
|
</tab_container>
|
||||||
|
</panel>
|
||||||
@@ -198,254 +198,6 @@
|
|||||||
bottom_delta="-16"
|
bottom_delta="-16"
|
||||||
width="278" />
|
width="278" />
|
||||||
|
|
||||||
<text
|
|
||||||
type="string"
|
|
||||||
length="1"
|
|
||||||
follows="left|top"
|
|
||||||
height="20"
|
|
||||||
layout="topleft"
|
|
||||||
name="estate_manager_label"
|
|
||||||
bottom_delta="-28"
|
|
||||||
left="10"
|
|
||||||
width="200">
|
|
||||||
Estate Managers:
|
|
||||||
</text>
|
|
||||||
<button
|
|
||||||
bottom_delta="3"
|
|
||||||
follows="left|top"
|
|
||||||
font="SansSerifSmall"
|
|
||||||
height="18"
|
|
||||||
label="?"
|
|
||||||
name="estate_manager_help"
|
|
||||||
left_delta="202"
|
|
||||||
width="18" />
|
|
||||||
<text
|
|
||||||
type="string"
|
|
||||||
length="1"
|
|
||||||
follows="left|top"
|
|
||||||
height="20"
|
|
||||||
layout="topleft"
|
|
||||||
left="250"
|
|
||||||
name="allow_resident_label"
|
|
||||||
bottom_delta="-4"
|
|
||||||
width="200">
|
|
||||||
Allowed Residents:
|
|
||||||
</text>
|
|
||||||
<button
|
|
||||||
bottom_delta="3"
|
|
||||||
follows="left|top"
|
|
||||||
font="SansSerifSmall"
|
|
||||||
height="18"
|
|
||||||
label="?"
|
|
||||||
name="allow_resident_help"
|
|
||||||
left_delta="202"
|
|
||||||
width="18" />
|
|
||||||
|
|
||||||
<!-- Estate Managers box -->
|
|
||||||
<view_border
|
|
||||||
bevel_style="none"
|
|
||||||
follows="top|left"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left="10"
|
|
||||||
bottom_delta="-72"
|
|
||||||
width="220" />
|
|
||||||
<name_list
|
|
||||||
follows="left|top"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left_delta="0"
|
|
||||||
multi_select="true"
|
|
||||||
name="estate_manager_name_list"
|
|
||||||
menu_num="0"
|
|
||||||
name_system="LandManagementNameSystem"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="220" />
|
|
||||||
|
|
||||||
<!-- Allowed Residents box -->
|
|
||||||
<view_border
|
|
||||||
bevel_style="none"
|
|
||||||
follows="top|left"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left="250"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="220" />
|
|
||||||
<name_list
|
|
||||||
follows="left|top"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left_delta="0"
|
|
||||||
multi_select="true"
|
|
||||||
name="allowed_avatar_name_list"
|
|
||||||
menu_num="0"
|
|
||||||
name_system="LandManagementNameSystem"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="220" />
|
|
||||||
|
|
||||||
<!-- Estate Managers buttons -->
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
label="Add..."
|
|
||||||
layout="topleft"
|
|
||||||
left="10"
|
|
||||||
name="add_estate_manager_btn"
|
|
||||||
bottom_delta="-26"
|
|
||||||
width="97" />
|
|
||||||
<button
|
|
||||||
bottom_delta="0"
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
label="Remove..."
|
|
||||||
layout="topleft"
|
|
||||||
name="remove_estate_manager_btn"
|
|
||||||
left_delta="123"
|
|
||||||
width="97" />
|
|
||||||
|
|
||||||
<!-- Allowed Residents buttons -->
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
left="250"
|
|
||||||
label="Add..."
|
|
||||||
layout="topleft"
|
|
||||||
name="add_allowed_avatar_btn"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="97" />
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="20"
|
|
||||||
label="Remove..."
|
|
||||||
layout="topleft"
|
|
||||||
name="remove_allowed_avatar_btn"
|
|
||||||
left_delta="123"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="97" />
|
|
||||||
|
|
||||||
<text
|
|
||||||
type="string"
|
|
||||||
length="1"
|
|
||||||
follows="left|top"
|
|
||||||
height="20"
|
|
||||||
layout="topleft"
|
|
||||||
left="10"
|
|
||||||
name="allow_group_label"
|
|
||||||
bottom_delta="-28"
|
|
||||||
width="200">
|
|
||||||
Allowed Groups:
|
|
||||||
</text>
|
|
||||||
<button
|
|
||||||
bottom_delta="3"
|
|
||||||
follows="left|top"
|
|
||||||
font="SansSerifSmall"
|
|
||||||
height="18"
|
|
||||||
label="?"
|
|
||||||
name="allow_group_help"
|
|
||||||
left_delta="202"
|
|
||||||
width="18" />
|
|
||||||
<text
|
|
||||||
type="string"
|
|
||||||
length="1"
|
|
||||||
follows="left|top"
|
|
||||||
height="20"
|
|
||||||
layout="topleft"
|
|
||||||
left="250"
|
|
||||||
name="ban_resident_label"
|
|
||||||
bottom_delta="-4"
|
|
||||||
width="200">
|
|
||||||
Banned Residents:
|
|
||||||
</text>
|
|
||||||
<button
|
|
||||||
bottom_delta="3"
|
|
||||||
follows="left|top"
|
|
||||||
font="SansSerifSmall"
|
|
||||||
height="18"
|
|
||||||
label="?"
|
|
||||||
name="ban_resident_help"
|
|
||||||
left_delta="202"
|
|
||||||
width="18" />
|
|
||||||
|
|
||||||
<!-- Allowed Groups box -->
|
|
||||||
<view_border
|
|
||||||
bevel_style="none"
|
|
||||||
follows="top|left"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left="10"
|
|
||||||
bottom_delta="-72"
|
|
||||||
width="220" />
|
|
||||||
<name_list
|
|
||||||
follows="left|top"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left_delta="0"
|
|
||||||
multi_select="true"
|
|
||||||
name="allowed_group_name_list"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="220" />
|
|
||||||
|
|
||||||
<!-- Banned Residents box -->
|
|
||||||
<view_border
|
|
||||||
bevel_style="none"
|
|
||||||
follows="top|left"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left="250"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="220" />
|
|
||||||
<name_list
|
|
||||||
follows="left|top"
|
|
||||||
height="71"
|
|
||||||
layout="topleft"
|
|
||||||
left_delta="0"
|
|
||||||
multi_select="true"
|
|
||||||
name="banned_avatar_name_list"
|
|
||||||
menu_num="0"
|
|
||||||
name_system="LandManagementNameSystem"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="220" />
|
|
||||||
|
|
||||||
<!-- Allowed Groups buttons -->
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
label="Add..."
|
|
||||||
layout="topleft"
|
|
||||||
left="10"
|
|
||||||
name="add_allowed_group_btn"
|
|
||||||
bottom_delta="-26"
|
|
||||||
width="97" />
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
label="Remove..."
|
|
||||||
layout="topleft"
|
|
||||||
name="remove_allowed_group_btn"
|
|
||||||
left_delta="123"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="97" />
|
|
||||||
|
|
||||||
<!-- Banned Residents buttons -->
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
label="Add..."
|
|
||||||
layout="topleft"
|
|
||||||
left="250"
|
|
||||||
name="add_banned_avatar_btn"
|
|
||||||
bottom_delta="0"
|
|
||||||
width="97" />
|
|
||||||
<button
|
|
||||||
follows="left|top"
|
|
||||||
height="23"
|
|
||||||
label="Remove..."
|
|
||||||
layout="topleft"
|
|
||||||
name="remove_banned_avatar_btn"
|
|
||||||
bottom_delta="0"
|
|
||||||
left_delta="123"
|
|
||||||
width="97" />
|
|
||||||
|
|
||||||
<button
|
<button
|
||||||
follows="left|top"
|
follows="left|top"
|
||||||
height="23"
|
height="23"
|
||||||
|
|||||||
@@ -3671,6 +3671,10 @@ If you continue to receive this message, please contact Second Life support for
|
|||||||
<string name="RegionInfoBannedResidents">Banned Residents: ([BANNEDAGENTS], max [MAXBANNED])</string>
|
<string name="RegionInfoBannedResidents">Banned Residents: ([BANNEDAGENTS], max [MAXBANNED])</string>
|
||||||
<string name="RegionInfoListTypeAllowedAgents">Allowed Residents</string>
|
<string name="RegionInfoListTypeAllowedAgents">Allowed Residents</string>
|
||||||
<string name="RegionInfoListTypeBannedAgents">Banned Residents</string>
|
<string name="RegionInfoListTypeBannedAgents">Banned Residents</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 -->
|
<!-- script limits floater -->
|
||||||
<string name="ScriptLimitsParcelScriptMemory">Parcel Script Memory</string>
|
<string name="ScriptLimitsParcelScriptMemory">Parcel Script Memory</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user