Merge from lindenlab/viewmaster so we can get rid of it
commit
7cd5f7d479
|
|
@ -62,6 +62,7 @@ enum LAND_STAT_FLAGS
|
|||
STAT_FILTER_BY_PARCEL = 0x00000001,
|
||||
STAT_FILTER_BY_OWNER = 0x00000002,
|
||||
STAT_FILTER_BY_OBJECT = 0x00000004,
|
||||
STAT_FILTER_BY_PARCEL_NAME = 0x00000008,
|
||||
STAT_REQUEST_LAST_ENTRY = 0x80000000,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2704,6 +2704,11 @@ BOOL LLScrollListCtrl::hasSortOrder() const
|
|||
return !mSortColumns.empty();
|
||||
}
|
||||
|
||||
void LLScrollListCtrl::clearSortOrder()
|
||||
{
|
||||
mSortColumns.clear();
|
||||
}
|
||||
|
||||
void LLScrollListCtrl::clearColumns()
|
||||
{
|
||||
column_map_t::iterator itor;
|
||||
|
|
|
|||
|
|
@ -373,6 +373,7 @@ public:
|
|||
std::string getSortColumnName();
|
||||
BOOL getSortAscending() { return mSortColumns.empty() ? TRUE : mSortColumns.back().second; }
|
||||
BOOL hasSortOrder() const;
|
||||
void clearSortOrder();
|
||||
|
||||
S32 selectMultiple( uuid_vec_t ids );
|
||||
// conceptually const, but mutates mItemList
|
||||
|
|
|
|||
|
|
@ -2377,12 +2377,6 @@ LLPanelLandAccess::~LLPanelLandAccess()
|
|||
void LLPanelLandAccess::refresh()
|
||||
{
|
||||
LLFloater* parent_floater = gFloaterView->getParentFloater(this);
|
||||
|
||||
if (mListAccess)
|
||||
mListAccess->deleteAllItems();
|
||||
if (mListBanned)
|
||||
mListBanned->deleteAllItems();
|
||||
|
||||
LLParcel *parcel = mParcel->getParcel();
|
||||
|
||||
// Display options
|
||||
|
|
@ -2400,7 +2394,11 @@ void LLPanelLandAccess::refresh()
|
|||
getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name );
|
||||
|
||||
// Allow list
|
||||
if (mListAccess)
|
||||
{
|
||||
// Clear the sort order so we don't re-sort on every add.
|
||||
mListAccess->clearSortOrder();
|
||||
mListAccess->deleteAllItems();
|
||||
S32 count = parcel->mAccessList.size();
|
||||
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
||||
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||
|
|
@ -2435,13 +2433,17 @@ void LLPanelLandAccess::refresh()
|
|||
}
|
||||
suffix.append(" " + parent_floater->getString("Remaining") + ")");
|
||||
}
|
||||
if (mListAccess)
|
||||
mListAccess->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
|
||||
mListAccess->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
|
||||
}
|
||||
mListAccess->sortByName(TRUE);
|
||||
}
|
||||
|
||||
// Ban List
|
||||
if(mListBanned)
|
||||
{
|
||||
// Clear the sort order so we don't re-sort on every add.
|
||||
mListBanned->clearSortOrder();
|
||||
mListBanned->deleteAllItems();
|
||||
S32 count = parcel->mBanList.size();
|
||||
|
||||
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
||||
|
|
@ -2479,6 +2481,7 @@ void LLPanelLandAccess::refresh()
|
|||
}
|
||||
mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
|
||||
}
|
||||
mListBanned->sortByName(TRUE);
|
||||
}
|
||||
|
||||
if(parcel->getRegionDenyAnonymousOverride())
|
||||
|
|
@ -2614,13 +2617,13 @@ void LLPanelLandAccess::refresh_ui()
|
|||
getChildView("AccessList")->setEnabled(can_manage_allowed);
|
||||
S32 allowed_list_count = parcel->mAccessList.size();
|
||||
getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
|
||||
BOOL has_selected = mListAccess->getSelectionInterface()->getFirstSelectedIndex() >= 0;
|
||||
BOOL has_selected = (mListAccess && mListAccess->getSelectionInterface()->getFirstSelectedIndex() >= 0);
|
||||
getChildView("remove_allowed")->setEnabled(can_manage_allowed && has_selected);
|
||||
|
||||
getChildView("BannedList")->setEnabled(can_manage_banned);
|
||||
S32 banned_list_count = parcel->mBanList.size();
|
||||
getChildView("add_banned")->setEnabled(can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST);
|
||||
has_selected = mListBanned->getSelectionInterface()->getFirstSelectedIndex() >= 0;
|
||||
has_selected = (mListBanned && mListBanned->getSelectionInterface()->getFirstSelectedIndex() >= 0);
|
||||
getChildView("remove_banned")->setEnabled(can_manage_banned && has_selected);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -287,8 +287,7 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
|
|||
//dispatch the message
|
||||
dispatch.dispatch(request, invoice, strings);
|
||||
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
panel->updateControls(region);
|
||||
panel->updateControls(gAgent.getRegion());
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1924,10 +1923,18 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
|
|||
BOOL manager = (region && region->isEstateManager());
|
||||
setCtrlsEnabled(god || owner || manager);
|
||||
|
||||
BOOL has_allowed_avatar = getChild<LLNameListCtrl>("allowed_avatar_name_list")->getFirstSelected() ? TRUE : FALSE;
|
||||
BOOL has_allowed_group = getChild<LLNameListCtrl>("allowed_group_name_list")->getFirstSelected() ? TRUE : FALSE;
|
||||
BOOL has_banned_agent = getChild<LLNameListCtrl>("banned_avatar_name_list")->getFirstSelected() ? TRUE : FALSE;
|
||||
BOOL has_estate_manager = getChild<LLNameListCtrl>("estate_manager_name_list")->getFirstSelected() ? TRUE : FALSE;
|
||||
|
||||
getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager);
|
||||
getChildView("remove_allowed_avatar_btn")->setEnabled(god || owner || manager);
|
||||
getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && (god || owner || manager));
|
||||
getChildView("allowed_avatar_name_list")->setEnabled(god || owner || manager);
|
||||
|
||||
getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager);
|
||||
getChildView("remove_allowed_group_btn")->setEnabled(god || owner || manager);
|
||||
getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && (god || owner || manager) );
|
||||
getChildView("allowed_group_name_list")->setEnabled(god || owner || manager);
|
||||
|
||||
// Can't ban people from mainland, orientation islands, etc. because this
|
||||
// creates much network traffic and server load.
|
||||
|
|
@ -1935,14 +1942,15 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
|
|||
bool linden_estate = isLindenEstate();
|
||||
bool enable_ban = (god || owner || manager) && !linden_estate;
|
||||
getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
|
||||
getChildView("remove_banned_avatar_btn")->setEnabled(enable_ban);
|
||||
getChildView("remove_banned_avatar_btn")->setEnabled(has_banned_agent && enable_ban);
|
||||
getChildView("banned_avatar_name_list")->setEnabled(god || owner || manager);
|
||||
|
||||
getChildView("message_estate_btn")->setEnabled(god || owner || manager);
|
||||
getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager);
|
||||
|
||||
// estate managers can't add estate managers
|
||||
getChildView("add_estate_manager_btn")->setEnabled(god || owner);
|
||||
getChildView("remove_estate_manager_btn")->setEnabled(god || owner);
|
||||
getChildView("remove_estate_manager_btn")->setEnabled(has_estate_manager && (god || owner));
|
||||
getChildView("estate_manager_name_list")->setEnabled(god || owner);
|
||||
|
||||
refresh();
|
||||
|
|
@ -1979,10 +1987,8 @@ bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
|
|||
|
||||
void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl)
|
||||
{
|
||||
if (checkRemovalButton(child_ctrl->getName()))
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
// Ensure appropriate state of the management ui.
|
||||
updateControls(gAgent.getRegion());
|
||||
}
|
||||
|
||||
bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg)
|
||||
|
|
@ -2080,23 +2086,8 @@ void LLPanelEstateInfo::refreshFromEstate()
|
|||
getChild<LLUICtrl>("limit_payment")->setValue(estate_info.getDenyAnonymous());
|
||||
getChild<LLUICtrl>("limit_age_verified")->setValue(estate_info.getDenyAgeUnverified());
|
||||
|
||||
// If visible from mainland, disable the access allowed
|
||||
// UI, as anyone can teleport there.
|
||||
// However, gods need to be able to edit the access list for
|
||||
// linden estates, regardless of visibility, to allow object
|
||||
// and L$ transfers.
|
||||
{
|
||||
bool visible_from_mainland = estate_info.getIsExternallyVisible();
|
||||
bool god = gAgent.isGodlike();
|
||||
bool linden_estate = isLindenEstate();
|
||||
|
||||
bool enable_agent = (!visible_from_mainland || (god && linden_estate));
|
||||
bool enable_group = enable_agent;
|
||||
bool enable_ban = !linden_estate;
|
||||
|
||||
setAccessAllowedEnabled(enable_agent, enable_group, enable_ban);
|
||||
}
|
||||
|
||||
// Ensure appriopriate state of the management UI
|
||||
updateControls(gAgent.getRegion());
|
||||
refresh();
|
||||
}
|
||||
|
||||
|
|
@ -2225,47 +2216,6 @@ void LLPanelEstateInfo::setOwnerName(const std::string& name)
|
|||
getChild<LLUICtrl>("estate_owner")->setValue(LLSD(name));
|
||||
}
|
||||
|
||||
void LLPanelEstateInfo::setAccessAllowedEnabled(bool enable_agent,
|
||||
bool enable_group,
|
||||
bool enable_ban)
|
||||
{
|
||||
getChildView("allow_resident_label")->setEnabled(enable_agent);
|
||||
getChildView("allowed_avatar_name_list")->setEnabled(enable_agent);
|
||||
getChildView("allowed_avatar_name_list")->setVisible( enable_agent);
|
||||
getChildView("add_allowed_avatar_btn")->setEnabled(enable_agent);
|
||||
getChildView("remove_allowed_avatar_btn")->setEnabled(enable_agent);
|
||||
|
||||
// Groups
|
||||
getChildView("allow_group_label")->setEnabled(enable_group);
|
||||
getChildView("allowed_group_name_list")->setEnabled(enable_group);
|
||||
getChildView("allowed_group_name_list")->setVisible( enable_group);
|
||||
getChildView("add_allowed_group_btn")->setEnabled(enable_group);
|
||||
getChildView("remove_allowed_group_btn")->setEnabled(enable_group);
|
||||
|
||||
// Ban
|
||||
getChildView("ban_resident_label")->setEnabled(enable_ban);
|
||||
getChildView("banned_avatar_name_list")->setEnabled(enable_ban);
|
||||
getChildView("banned_avatar_name_list")->setVisible( enable_ban);
|
||||
getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
|
||||
getChildView("remove_banned_avatar_btn")->setEnabled(enable_ban);
|
||||
|
||||
// Update removal buttons if needed
|
||||
if (enable_agent)
|
||||
{
|
||||
checkRemovalButton("allowed_avatar_name_list");
|
||||
}
|
||||
|
||||
if (enable_group)
|
||||
{
|
||||
checkRemovalButton("allowed_group_name_list");
|
||||
}
|
||||
|
||||
if (enable_ban)
|
||||
{
|
||||
checkRemovalButton("banned_avatar_name_list");
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelEstateInfo::clearAccessLists()
|
||||
{
|
||||
LLNameListCtrl* name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
|
||||
|
|
@ -2279,39 +2229,7 @@ void LLPanelEstateInfo::clearAccessLists()
|
|||
{
|
||||
name_list->deleteAllItems();
|
||||
}
|
||||
}
|
||||
|
||||
// enables/disables the "remove" button for the various allow/ban lists
|
||||
BOOL LLPanelEstateInfo::checkRemovalButton(std::string name)
|
||||
{
|
||||
std::string btn_name = "";
|
||||
if (name == "allowed_avatar_name_list")
|
||||
{
|
||||
btn_name = "remove_allowed_avatar_btn";
|
||||
}
|
||||
else if (name == "allowed_group_name_list")
|
||||
{
|
||||
btn_name = "remove_allowed_group_btn";
|
||||
}
|
||||
else if (name == "banned_avatar_name_list")
|
||||
{
|
||||
btn_name = "remove_banned_avatar_btn";
|
||||
}
|
||||
else if (name == "estate_manager_name_list")
|
||||
{
|
||||
//ONLY OWNER CAN ADD /DELET ESTATE MANAGER
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region && (region->getOwner() == gAgent.getID()))
|
||||
{
|
||||
btn_name = "remove_estate_manager_btn";
|
||||
}
|
||||
}
|
||||
|
||||
// enable the remove button if something is selected
|
||||
LLNameListCtrl* name_list = getChild<LLNameListCtrl>(name);
|
||||
getChildView(btn_name)->setEnabled(name_list && name_list->getFirstSelected() ? TRUE : FALSE);
|
||||
|
||||
return (btn_name != "");
|
||||
updateControls(gAgent.getRegion());
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -2792,15 +2710,15 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||
|
||||
if (allowed_agent_name_list)
|
||||
{
|
||||
//allowed_agent_name_list->deleteAllItems();
|
||||
// Don't sort these as we add them, sort them when we are done.
|
||||
allowed_agent_name_list->clearSortOrder();
|
||||
for (S32 i = 0; i < num_allowed_agents && i < ESTATE_MAX_ACCESS_IDS; i++)
|
||||
{
|
||||
LLUUID id;
|
||||
memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
|
||||
allowed_agent_name_list->addNameItem(id);
|
||||
}
|
||||
panel->getChildView("remove_allowed_avatar_btn")->setEnabled(allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE);
|
||||
allowed_agent_name_list->sortByColumnIndex(0, TRUE);
|
||||
allowed_agent_name_list->sortByName(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2817,6 +2735,8 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||
|
||||
if (allowed_group_name_list)
|
||||
{
|
||||
// Don't sort these as we add them, sort them when we are done.
|
||||
allowed_group_name_list->clearSortOrder();
|
||||
allowed_group_name_list->deleteAllItems();
|
||||
for (S32 i = 0; i < num_allowed_groups && i < ESTATE_MAX_GROUP_IDS; i++)
|
||||
{
|
||||
|
|
@ -2824,8 +2744,7 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||
memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
|
||||
allowed_group_name_list->addGroupNameItem(id);
|
||||
}
|
||||
panel->getChildView("remove_allowed_group_btn")->setEnabled(allowed_group_name_list->getFirstSelected() ? TRUE : FALSE);
|
||||
allowed_group_name_list->sortByColumnIndex(0, TRUE);
|
||||
allowed_group_name_list->sortByName(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2849,15 +2768,16 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||
|
||||
if (banned_agent_name_list)
|
||||
{
|
||||
//banned_agent_name_list->deleteAllItems();
|
||||
// Don't sort these as we add them, sort them when we are done.
|
||||
banned_agent_name_list->clearSortOrder();
|
||||
|
||||
for (S32 i = 0; i < num_banned_agents && i < ESTATE_MAX_ACCESS_IDS; i++)
|
||||
{
|
||||
LLUUID id;
|
||||
memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
|
||||
banned_agent_name_list->addNameItem(id);
|
||||
}
|
||||
panel->getChildView("remove_banned_avatar_btn")->setEnabled(banned_agent_name_list->getFirstSelected() ? TRUE : FALSE);
|
||||
banned_agent_name_list->sortByColumnIndex(0, TRUE);
|
||||
banned_agent_name_list->sortByName(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2872,6 +2792,9 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||
panel->getChild<LLNameListCtrl>("estate_manager_name_list");
|
||||
if (estate_manager_name_list)
|
||||
{
|
||||
// Don't sort these as we add them, sort them when we are done.
|
||||
estate_manager_name_list->clearSortOrder();
|
||||
|
||||
estate_manager_name_list->deleteAllItems(); // Clear existing entries
|
||||
|
||||
// There should be only ESTATE_MAX_MANAGERS people in the list, but if the database gets more (SL-46107) don't
|
||||
|
|
@ -2883,11 +2806,13 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||
memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
|
||||
estate_manager_name_list->addNameItem(id);
|
||||
}
|
||||
panel->getChildView("remove_estate_manager_btn")->setEnabled(estate_manager_name_list->getFirstSelected() ? TRUE : FALSE);
|
||||
estate_manager_name_list->sortByColumnIndex(0, TRUE);
|
||||
estate_manager_name_list->sortByName(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the buttons which may change based on the list contents but also needs to account for general access features.
|
||||
panel->updateControls(gAgent.getRegion());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -312,9 +312,6 @@ public:
|
|||
const std::string getOwnerName() const;
|
||||
void setOwnerName(const std::string& name);
|
||||
|
||||
// If visible from mainland, allowed agent and allowed groups
|
||||
// are ignored, so must disable UI.
|
||||
void setAccessAllowedEnabled(bool enable_agent, bool enable_group, bool enable_ban);
|
||||
protected:
|
||||
virtual BOOL sendUpdate();
|
||||
// confirmation dialog callback
|
||||
|
|
@ -324,7 +321,6 @@ protected:
|
|||
void commitEstateManagers();
|
||||
|
||||
void clearAccessLists();
|
||||
BOOL checkRemovalButton(std::string name);
|
||||
BOOL checkSunHourSlider(LLUICtrl* child_ctrl);
|
||||
|
||||
U32 mEstateID;
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ LLFloaterTopObjects::LLFloaterTopObjects(const LLSD& key)
|
|||
mCommitCallbackRegistrar.add("TopObjects.Refresh", boost::bind(&LLFloaterTopObjects::onRefresh, this));
|
||||
mCommitCallbackRegistrar.add("TopObjects.GetByObjectName", boost::bind(&LLFloaterTopObjects::onGetByObjectName, this));
|
||||
mCommitCallbackRegistrar.add("TopObjects.GetByOwnerName", boost::bind(&LLFloaterTopObjects::onGetByOwnerName, this));
|
||||
mCommitCallbackRegistrar.add("TopObjects.GetByParcelName", boost::bind(&LLFloaterTopObjects::onGetByParcelName, this));
|
||||
mCommitCallbackRegistrar.add("TopObjects.CommitObjectsList",boost::bind(&LLFloaterTopObjects::onCommitObjectsList, this));
|
||||
}
|
||||
|
||||
|
|
@ -99,21 +100,6 @@ BOOL LLFloaterTopObjects::postBuild()
|
|||
|
||||
setDefaultBtn("show_beacon_btn");
|
||||
|
||||
/*
|
||||
LLLineEditor* line_editor = getChild<LLLineEditor>("owner_name_editor");
|
||||
if (line_editor)
|
||||
{
|
||||
line_editor->setCommitOnFocusLost(FALSE);
|
||||
line_editor->setCommitCallback(onGetByOwnerName, this);
|
||||
}
|
||||
|
||||
line_editor = getChild<LLLineEditor>("object_name_editor");
|
||||
if (line_editor)
|
||||
{
|
||||
line_editor->setCommitOnFocusLost(FALSE);
|
||||
line_editor->setCommitCallback(onGetByObjectName, this);
|
||||
}*/
|
||||
|
||||
mCurrentMode = STAT_REPORT_TOP_SCRIPTS;
|
||||
mFlags = 0;
|
||||
mFilter.clear();
|
||||
|
|
@ -168,9 +154,11 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
F32 score;
|
||||
std::string name_buf;
|
||||
std::string owner_buf;
|
||||
std::string parcel_buf("unknown");
|
||||
F32 mono_score = 0.f;
|
||||
bool have_extended_data = false;
|
||||
S32 public_urls = 0;
|
||||
F32 script_memory = 0.f;
|
||||
|
||||
msg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block);
|
||||
msg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block);
|
||||
|
|
@ -180,12 +168,18 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
msg->getF32Fast(_PREHASH_ReportData, _PREHASH_Score, score, block);
|
||||
msg->getStringFast(_PREHASH_ReportData, _PREHASH_TaskName, name_buf, block);
|
||||
msg->getStringFast(_PREHASH_ReportData, _PREHASH_OwnerName, owner_buf, block);
|
||||
|
||||
if(msg->has("DataExtended"))
|
||||
{
|
||||
have_extended_data = true;
|
||||
msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
|
||||
msg->getF32("DataExtended", "MonoScore", mono_score, block);
|
||||
msg->getS32("DataExtended", "PublicURLs", public_urls, block);
|
||||
if (msg->getSize("DataExtended", "ParcelName") > 0)
|
||||
{
|
||||
msg->getString("DataExtended", "ParcelName", parcel_buf, block);
|
||||
msg->getF32("DataExtended", "Size", script_memory, block);
|
||||
}
|
||||
}
|
||||
|
||||
LLSD element;
|
||||
|
|
@ -193,13 +187,14 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
element["id"] = task_id;
|
||||
|
||||
LLSD columns;
|
||||
columns[0]["column"] = "score";
|
||||
columns[0]["value"] = llformat("%0.3f", score);
|
||||
columns[0]["font"] = "SANSSERIF";
|
||||
S32 column_num = 0;
|
||||
columns[column_num]["column"] = "score";
|
||||
columns[column_num]["value"] = llformat("%0.3f", score);
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
columns[1]["column"] = "name";
|
||||
columns[1]["value"] = name_buf;
|
||||
columns[1]["font"] = "SANSSERIF";
|
||||
columns[column_num]["column"] = "name";
|
||||
columns[column_num]["value"] = name_buf;
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
// Owner names can have trailing spaces sent from server
|
||||
LLStringUtil::trim(owner_buf);
|
||||
|
|
@ -215,28 +210,33 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
// ...just strip out legacy "Resident" name
|
||||
owner_buf = LLCacheName::cleanFullName(owner_buf);
|
||||
}
|
||||
columns[2]["column"] = "owner";
|
||||
columns[2]["value"] = owner_buf;
|
||||
columns[2]["font"] = "SANSSERIF";
|
||||
columns[column_num]["column"] = "owner";
|
||||
columns[column_num]["value"] = owner_buf;
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
columns[3]["column"] = "location";
|
||||
columns[3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
|
||||
columns[3]["font"] = "SANSSERIF";
|
||||
columns[4]["column"] = "time";
|
||||
columns[4]["type"] = "date";
|
||||
columns[4]["value"] = LLDate((time_t)time_stamp);
|
||||
columns[4]["font"] = "SANSSERIF";
|
||||
columns[column_num]["column"] = "location";
|
||||
columns[column_num]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
columns[column_num]["column"] = "parcel";
|
||||
columns[column_num]["value"] = parcel_buf;
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
columns[column_num]["column"] = "time";
|
||||
columns[column_num]["type"] = "date";
|
||||
columns[column_num]["value"] = LLDate((time_t)time_stamp);
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS
|
||||
&& have_extended_data)
|
||||
{
|
||||
columns[5]["column"] = "mono_time";
|
||||
columns[5]["value"] = llformat("%0.3f", mono_score);
|
||||
columns[5]["font"] = "SANSSERIF";
|
||||
columns[column_num]["column"] = "memory";
|
||||
columns[column_num]["value"] = llformat("%0.0f", (script_memory / 1000.f));
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
|
||||
columns[6]["column"] = "URLs";
|
||||
columns[6]["value"] = llformat("%d", public_urls);
|
||||
columns[6]["font"] = "SANSSERIF";
|
||||
columns[column_num]["column"] = "URLs";
|
||||
columns[column_num]["value"] = llformat("%d", public_urls);
|
||||
columns[column_num++]["font"] = "SANSSERIF";
|
||||
}
|
||||
element["columns"] = columns;
|
||||
list->addElement(element);
|
||||
|
|
@ -260,18 +260,18 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
{
|
||||
setTitle(getString("top_scripts_title"));
|
||||
list->setColumnLabel("score", getString("scripts_score_label"));
|
||||
list->setColumnLabel("mono_time", getString("scripts_mono_time_label"));
|
||||
|
||||
LLUIString format = getString("top_scripts_text");
|
||||
format.setArg("[COUNT]", llformat("%d", total_count));
|
||||
format.setArg("[TIME]", llformat("%0.1f", mtotalScore));
|
||||
format.setArg("[TIME]", llformat("%0.3f", mtotalScore));
|
||||
getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
|
||||
}
|
||||
else
|
||||
{
|
||||
setTitle(getString("top_colliders_title"));
|
||||
list->setColumnLabel("score", getString("colliders_score_label"));
|
||||
list->setColumnLabel("mono_time", "");
|
||||
list->setColumnLabel("URLs", "");
|
||||
list->setColumnLabel("memory", "");
|
||||
LLUIString format = getString("top_colliders_text");
|
||||
format.setArg("[COUNT]", llformat("%d", total_count));
|
||||
getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
|
||||
|
|
@ -301,6 +301,7 @@ void LLFloaterTopObjects::updateSelectionInfo()
|
|||
{
|
||||
getChild<LLUICtrl>("object_name_editor")->setValue(sli->getColumn(1)->getValue().asString());
|
||||
getChild<LLUICtrl>("owner_name_editor")->setValue(sli->getColumn(2)->getValue().asString());
|
||||
getChild<LLUICtrl>("parcel_name_editor")->setValue(sli->getColumn(4)->getValue().asString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -480,6 +481,15 @@ void LLFloaterTopObjects::onGetByOwnerName()
|
|||
onRefresh();
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterTopObjects::onGetByParcelName()
|
||||
{
|
||||
mFlags = STAT_FILTER_BY_PARCEL_NAME;
|
||||
mFilter = getChild<LLUICtrl>("parcel_name_editor")->getValue().asString();
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterTopObjects::showBeacon()
|
||||
{
|
||||
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("objects_list");
|
||||
|
|
|
|||
|
|
@ -73,9 +73,7 @@ private:
|
|||
|
||||
void onGetByOwnerName();
|
||||
void onGetByObjectName();
|
||||
|
||||
// static void onGetByOwnerNameClicked(void* data) { onGetByOwnerName(NULL, data); };
|
||||
// static void onGetByObjectNameClicked(void* data) { onGetByObjectName(NULL, data); };
|
||||
void onGetByParcelName();
|
||||
|
||||
void showBeacon();
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
#pragma warning(pop) // Restore all warnings to the previous state
|
||||
#endif
|
||||
|
||||
const U32 MAX_CACHED_GROUPS = 10;
|
||||
const U32 MAX_CACHED_GROUPS = 20;
|
||||
|
||||
//
|
||||
// LLRoleActionSet
|
||||
|
|
@ -234,10 +234,16 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) :
|
|||
mRoleDataComplete(FALSE),
|
||||
mRoleMemberDataComplete(FALSE),
|
||||
mGroupPropertiesDataComplete(FALSE),
|
||||
mPendingRoleMemberRequest(FALSE)
|
||||
mPendingRoleMemberRequest(FALSE),
|
||||
mAccessTime(0.0f)
|
||||
{
|
||||
}
|
||||
|
||||
void LLGroupMgrGroupData::setAccessed()
|
||||
{
|
||||
mAccessTime = (F32)LLFrameTimer::getTotalSeconds();
|
||||
}
|
||||
|
||||
BOOL LLGroupMgrGroupData::getRoleData(const LLUUID& role_id, LLRoleData& role_data)
|
||||
{
|
||||
role_data_map_t::const_iterator it;
|
||||
|
|
@ -1360,7 +1366,7 @@ void LLGroupMgr::processCreateGroupReply(LLMessageSystem* msg, void ** data)
|
|||
|
||||
LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
|
||||
{
|
||||
LLGroupMgrGroupData* group_datap;
|
||||
LLGroupMgrGroupData* group_datap = NULL;
|
||||
|
||||
group_map_t::iterator existing_group = LLGroupMgr::getInstance()->mGroups.find(id);
|
||||
if (existing_group == LLGroupMgr::getInstance()->mGroups.end())
|
||||
|
|
@ -1373,6 +1379,11 @@ LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
|
|||
group_datap = existing_group->second;
|
||||
}
|
||||
|
||||
if (group_datap)
|
||||
{
|
||||
group_datap->setAccessed();
|
||||
}
|
||||
|
||||
return group_datap;
|
||||
}
|
||||
|
||||
|
|
@ -1413,25 +1424,41 @@ void LLGroupMgr::notifyObservers(LLGroupChange gc)
|
|||
|
||||
void LLGroupMgr::addGroup(LLGroupMgrGroupData* group_datap)
|
||||
{
|
||||
if (mGroups.size() > MAX_CACHED_GROUPS)
|
||||
while (mGroups.size() >= MAX_CACHED_GROUPS)
|
||||
{
|
||||
// get rid of groups that aren't observed
|
||||
for (group_map_t::iterator gi = mGroups.begin(); gi != mGroups.end() && mGroups.size() > MAX_CACHED_GROUPS / 2; )
|
||||
// LRU: Remove the oldest un-observed group from cache until group size is small enough
|
||||
|
||||
F32 oldest_access = LLFrameTimer::getTotalSeconds();
|
||||
group_map_t::iterator oldest_gi = mGroups.end();
|
||||
|
||||
for (group_map_t::iterator gi = mGroups.begin(); gi != mGroups.end(); ++gi )
|
||||
{
|
||||
observer_multimap_t::iterator oi = mObservers.find(gi->first);
|
||||
if (oi == mObservers.end())
|
||||
{
|
||||
// not observed
|
||||
LLGroupMgrGroupData* unobserved_groupp = gi->second;
|
||||
delete unobserved_groupp;
|
||||
mGroups.erase(gi++);
|
||||
}
|
||||
else
|
||||
{
|
||||
++gi;
|
||||
if (gi->second
|
||||
&& (gi->second->getAccessTime() < oldest_access))
|
||||
{
|
||||
oldest_access = gi->second->getAccessTime();
|
||||
oldest_gi = gi;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (oldest_gi != mGroups.end())
|
||||
{
|
||||
delete oldest_gi->second;
|
||||
mGroups.erase(oldest_gi);
|
||||
}
|
||||
else
|
||||
{
|
||||
// All groups must be currently open, none to remove.
|
||||
// Just add the new group anyway, but get out of this loop as it
|
||||
// will never drop below max_cached_groups.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mGroups[group_datap->getID()] = group_datap;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public:
|
|||
|
||||
BOOL isInRole(const LLUUID& role_id) { return (mRolesList.find(role_id) != mRolesList.end()); }
|
||||
|
||||
protected:
|
||||
private:
|
||||
LLUUID mID;
|
||||
S32 mContribution;
|
||||
U64 mAgentPowers;
|
||||
|
|
@ -233,6 +233,9 @@ public:
|
|||
BOOL isRoleMemberDataComplete() { return mRoleMemberDataComplete; }
|
||||
BOOL isGroupPropertiesDataComplete() { return mGroupPropertiesDataComplete; }
|
||||
|
||||
F32 getAccessTime() const { return mAccessTime; }
|
||||
void setAccessed();
|
||||
|
||||
public:
|
||||
typedef std::map<LLUUID,LLGroupMemberData*> member_list_t;
|
||||
typedef std::map<LLUUID,LLGroupRoleData*> role_list_t;
|
||||
|
|
@ -280,6 +283,7 @@ private:
|
|||
BOOL mGroupPropertiesDataComplete;
|
||||
|
||||
BOOL mPendingRoleMemberRequest;
|
||||
F32 mAccessTime;
|
||||
};
|
||||
|
||||
struct LLRoleAction
|
||||
|
|
|
|||
|
|
@ -440,7 +440,7 @@ void show_item_original(const LLUUID& item_uuid)
|
|||
//sidetray inventory panel
|
||||
LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
|
||||
|
||||
bool reset_inventory_filter = !floater_inventory->isInVisibleChain();
|
||||
bool do_reset_inventory_filter = !floater_inventory->isInVisibleChain();
|
||||
|
||||
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel();
|
||||
if (!active_panel)
|
||||
|
|
@ -460,37 +460,49 @@ void show_item_original(const LLUUID& item_uuid)
|
|||
}
|
||||
active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_NO);
|
||||
|
||||
if(reset_inventory_filter)
|
||||
if(do_reset_inventory_filter)
|
||||
{
|
||||
//inventory floater
|
||||
bool floater_inventory_visible = false;
|
||||
|
||||
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
|
||||
for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
|
||||
{
|
||||
LLFloaterInventory* floater_inventory = dynamic_cast<LLFloaterInventory*>(*iter);
|
||||
if (floater_inventory)
|
||||
{
|
||||
LLPanelMainInventory* main_inventory = floater_inventory->getMainInventoryPanel();
|
||||
|
||||
main_inventory->onFilterEdit("");
|
||||
|
||||
if(floater_inventory->getVisible())
|
||||
{
|
||||
floater_inventory_visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(sidepanel_inventory && !floater_inventory_visible)
|
||||
{
|
||||
LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel();
|
||||
|
||||
main_inventory->onFilterEdit("");
|
||||
}
|
||||
reset_inventory_filter();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void reset_inventory_filter()
|
||||
{
|
||||
//inventory floater
|
||||
bool floater_inventory_visible = false;
|
||||
|
||||
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
|
||||
for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
|
||||
{
|
||||
LLFloaterInventory* floater_inventory = dynamic_cast<LLFloaterInventory*>(*iter);
|
||||
if (floater_inventory)
|
||||
{
|
||||
LLPanelMainInventory* main_inventory = floater_inventory->getMainInventoryPanel();
|
||||
|
||||
main_inventory->onFilterEdit("");
|
||||
|
||||
if(floater_inventory->getVisible())
|
||||
{
|
||||
floater_inventory_visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!floater_inventory_visible)
|
||||
{
|
||||
LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
|
||||
if (sidepanel_inventory)
|
||||
{
|
||||
LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel();
|
||||
if (main_inventory)
|
||||
{
|
||||
main_inventory->onFilterEdit("");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void open_outbox()
|
||||
{
|
||||
LLFloaterReg::showInstance("outbox");
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ void show_item_profile(const LLUUID& item_uuid);
|
|||
void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id);
|
||||
|
||||
void show_item_original(const LLUUID& item_uuid);
|
||||
void reset_inventory_filter();
|
||||
|
||||
void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name);
|
||||
|
||||
|
|
|
|||
|
|
@ -966,6 +966,7 @@ void LLInventoryPanel::doToSelected(const LLSD& userdata)
|
|||
|
||||
void LLInventoryPanel::doCreate(const LLSD& userdata)
|
||||
{
|
||||
reset_inventory_filter();
|
||||
menu_create_inventory_item(mFolderRoot, LLFolderBridge::sSelf.get(), userdata);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -336,13 +336,19 @@ namespace LLMarketplaceImport
|
|||
// Interface class
|
||||
//
|
||||
|
||||
static const F32 MARKET_IMPORTER_UPDATE_FREQUENCY = 1.0f;
|
||||
|
||||
//static
|
||||
void LLMarketplaceInventoryImporter::update()
|
||||
{
|
||||
if (instanceExists())
|
||||
{
|
||||
LLMarketplaceInventoryImporter::instance().updateImport();
|
||||
static LLTimer update_timer;
|
||||
if (update_timer.hasExpired())
|
||||
{
|
||||
LLMarketplaceInventoryImporter::instance().updateImport();
|
||||
update_timer.setTimerExpirySec(MARKET_IMPORTER_UPDATE_FREQUENCY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
|
|||
name = av_name.getCompleteName();
|
||||
|
||||
item_list::iterator iter;
|
||||
for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
|
||||
for (iter = getItemList().begin(); iter != getItemList().end(); ++iter)
|
||||
{
|
||||
LLScrollListItem* item = *iter;
|
||||
if (item->getUUID() == agent_id)
|
||||
|
|
@ -410,6 +410,7 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
|
|||
if (cell)
|
||||
{
|
||||
cell->setValue(name);
|
||||
setNeedsSort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -431,3 +432,8 @@ void LLNameListCtrl::updateColumns()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLNameListCtrl::sortByName(BOOL ascending)
|
||||
{
|
||||
sortByColumnIndex(mNameColumnIndex,ascending);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,6 +110,8 @@ public:
|
|||
|
||||
void setAllowCallingCardDrop(BOOL b) { mAllowCallingCardDrop = b; }
|
||||
|
||||
void sortByName(BOOL ascending);
|
||||
|
||||
/*virtual*/ void updateColumns();
|
||||
|
||||
/*virtual*/ void mouseOverHighlightNthItem( S32 index );
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ public:
|
|||
LLTextBox *mGroupName;
|
||||
std::string mOwnerWarning;
|
||||
std::string mAlreadyInGroup;
|
||||
std::string mTooManySelected;
|
||||
bool mConfirmedOwnerInvite;
|
||||
|
||||
void (*mCloseCallback)(void* data);
|
||||
|
|
@ -185,6 +186,17 @@ void LLPanelGroupInvite::impl::submitInvitations()
|
|||
role_member_pairs[item->getUUID()] = role_id;
|
||||
}
|
||||
|
||||
const S32 MAX_GROUP_INVITES = 100; // Max invites per request. 100 to match server cap.
|
||||
if (role_member_pairs.size() > MAX_GROUP_INVITES)
|
||||
{
|
||||
// Fail!
|
||||
LLSD msg;
|
||||
msg["MESSAGE"] = mTooManySelected;
|
||||
LLNotificationsUtil::add("GenericAlert", msg);
|
||||
(*mCloseCallback)(mCloseCallbackUserData);
|
||||
return;
|
||||
}
|
||||
|
||||
LLGroupMgr::getInstance()->sendGroupMemberInvites(mGroupID, role_member_pairs);
|
||||
|
||||
if(already_in_group)
|
||||
|
|
@ -621,6 +633,7 @@ BOOL LLPanelGroupInvite::postBuild()
|
|||
|
||||
mImplementation->mOwnerWarning = getString("confirm_invite_owner_str");
|
||||
mImplementation->mAlreadyInGroup = getString("already_in_group");
|
||||
mImplementation->mTooManySelected = getString("invite_selection_too_large");
|
||||
|
||||
update();
|
||||
|
||||
|
|
|
|||
|
|
@ -306,6 +306,7 @@ void LLPanelMainInventory::newWindow()
|
|||
|
||||
void LLPanelMainInventory::doCreate(const LLSD& userdata)
|
||||
{
|
||||
reset_inventory_filter();
|
||||
menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<floater
|
||||
legacy_header_height="18"
|
||||
can_resize="true"
|
||||
height="350"
|
||||
height="372"
|
||||
layout="topleft"
|
||||
min_height="300"
|
||||
min_width="450"
|
||||
|
|
@ -22,10 +22,6 @@
|
|||
name="scripts_score_label">
|
||||
Time
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="scripts_mono_time_label">
|
||||
Mono Time
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="top_colliders_title">
|
||||
Top Colliders
|
||||
|
|
@ -68,31 +64,35 @@
|
|||
<scroll_list.columns
|
||||
label="Score"
|
||||
name="score"
|
||||
width="55" />
|
||||
width="45" />
|
||||
<scroll_list.columns
|
||||
label="Name"
|
||||
name="name"
|
||||
width="140" />
|
||||
width="130" />
|
||||
<scroll_list.columns
|
||||
label="Owner"
|
||||
name="owner"
|
||||
width="105" />
|
||||
width="100" />
|
||||
<scroll_list.columns
|
||||
label="Location"
|
||||
name="location"
|
||||
width="130" />
|
||||
width="120" />
|
||||
<scroll_list.columns
|
||||
label="Parcel"
|
||||
name="parcel"
|
||||
width="120" />
|
||||
<scroll_list.columns
|
||||
label="Time"
|
||||
name="time"
|
||||
width="150" />
|
||||
<scroll_list.columns
|
||||
label="Mono Time"
|
||||
name="mono_time"
|
||||
width="100" />
|
||||
width="130" />
|
||||
<scroll_list.columns
|
||||
label="URLs"
|
||||
name="URLs"
|
||||
width="100" />
|
||||
width="40" />
|
||||
<scroll_list.columns
|
||||
label="Memory (KB)"
|
||||
name="memory"
|
||||
width="40" />
|
||||
<scroll_list.commit_callback
|
||||
function="TopObjects.CommitObjectsList" />
|
||||
</scroll_list>
|
||||
|
|
@ -193,6 +193,38 @@
|
|||
<button.commit_callback
|
||||
function="TopObjects.GetByOwnerName" />
|
||||
</button>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="5"
|
||||
name="parcel_name_text"
|
||||
width="107">
|
||||
Parcel:
|
||||
</text>
|
||||
<line_editor
|
||||
follows="left|bottom|right"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="3"
|
||||
name="parcel_name_editor"
|
||||
top_delta="-3"
|
||||
width="568" />
|
||||
<button
|
||||
follows="bottom|right"
|
||||
height="23"
|
||||
label="Filter"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="filter_parcel_btn"
|
||||
top_delta="0"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="TopObjects.GetByParcelName" />
|
||||
</button>
|
||||
<button
|
||||
follows="bottom|right"
|
||||
height="22"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@
|
|||
name="already_in_group">
|
||||
Some Residents you chose are already in the group, and so were not sent an invitation.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="invite_selection_too_large">
|
||||
Group Invitations not sent: too many Residents selected. Group Invitations are limited to 100 per request.
|
||||
</panel.string>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@
|
|||
<button
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Delay Restart"
|
||||
label="Cancel Restart"
|
||||
layout="topleft"
|
||||
left_pad="155"
|
||||
name="cancel_restart_btn"
|
||||
|
|
|
|||
Loading…
Reference in New Issue