Merge LL 3.7.13 Group Banz
commit
8da9ca220e
1
.hgtags
1
.hgtags
|
|
@ -523,3 +523,4 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release
|
|||
91dae9494b4d147541c7a01902334ba19a7ec05e 3.7.10-release
|
||||
64799eb298834073a3e9992cd8d27c3cb9d30b10 3.7.11-release
|
||||
3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release
|
||||
d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release
|
||||
|
|
|
|||
|
|
@ -8598,16 +8598,16 @@
|
|||
<integer>0</integer>
|
||||
</map>
|
||||
<key>MemoryLogFrequency</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Seconds between display of Memory in log (0 for never)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>600.0</real>
|
||||
</map>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Seconds between display of Memory in log (0 for never)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>30.0</real>
|
||||
</map>
|
||||
<key>MemoryPrivatePoolEnabled</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ LLConversationItem::LLConversationItem(std::string display_name, const LLUUID& u
|
|||
mConvType(CONV_UNKNOWN),
|
||||
mLastActiveTime(0.0),
|
||||
mDisplayModeratorOptions(false),
|
||||
mDisplayGroupBanOptions(false),
|
||||
mAvatarNameCacheConnection()
|
||||
{
|
||||
}
|
||||
|
|
@ -65,6 +66,7 @@ LLConversationItem::LLConversationItem(const LLUUID& uuid, LLFolderViewModelInte
|
|||
mConvType(CONV_UNKNOWN),
|
||||
mLastActiveTime(0.0),
|
||||
mDisplayModeratorOptions(false),
|
||||
mDisplayGroupBanOptions(false),
|
||||
mAvatarNameCacheConnection()
|
||||
{
|
||||
}
|
||||
|
|
@ -77,6 +79,7 @@ LLConversationItem::LLConversationItem(LLFolderViewModelInterface& root_view_mod
|
|||
mConvType(CONV_UNKNOWN),
|
||||
mLastActiveTime(0.0),
|
||||
mDisplayModeratorOptions(false),
|
||||
mDisplayGroupBanOptions(false),
|
||||
mAvatarNameCacheConnection()
|
||||
{
|
||||
}
|
||||
|
|
@ -161,6 +164,12 @@ void LLConversationItem::buildParticipantMenuOptions(menuentry_vec_t& items, U32
|
|||
items.push_back(std::string("ModerateVoiceMute"));
|
||||
items.push_back(std::string("ModerateVoiceUnmute"));
|
||||
}
|
||||
|
||||
if ((getType() != CONV_SESSION_1_ON_1) && mDisplayGroupBanOptions)
|
||||
{
|
||||
items.push_back(std::string("Group Ban Separator"));
|
||||
items.push_back(std::string("BanMember"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ protected:
|
|||
bool mNeedsRefresh; // Flag signaling to the view that something changed for this item
|
||||
F64 mLastActiveTime;
|
||||
bool mDisplayModeratorOptions;
|
||||
bool mDisplayGroupBanOptions;
|
||||
boost::signals2::connection mAvatarNameCacheConnection;
|
||||
};
|
||||
|
||||
|
|
@ -208,6 +209,7 @@ public:
|
|||
void dumpDebugData();
|
||||
void setModeratorOptionsVisible(bool visible) { mDisplayModeratorOptions = visible; }
|
||||
void setDisplayModeratorRole(bool displayRole);
|
||||
void setGroupBanVisible(bool visible) { mDisplayGroupBanOptions = visible; }
|
||||
|
||||
private:
|
||||
void onAvatarNameCache(const LLAvatarName& av_name); // callback used by fetchAvatarName
|
||||
|
|
|
|||
|
|
@ -533,6 +533,7 @@ void LLFloaterIMContainer::draw()
|
|||
{
|
||||
LLConversationItemParticipant* participant_model = dynamic_cast<LLConversationItemParticipant*>(*current_participant_model);
|
||||
participant_model->setModeratorOptionsVisible(isGroupModerator() && participant_model->getUUID() != gAgentID);
|
||||
participant_model->setGroupBanVisible(haveAbilityToBan() && participant_model->getUUID() != gAgentID);
|
||||
|
||||
current_participant_model++;
|
||||
}
|
||||
|
|
@ -1151,6 +1152,10 @@ void LLFloaterIMContainer::doToParticipants(const std::string& command, uuid_vec
|
|||
{
|
||||
toggleAllowTextChat(userID);
|
||||
}
|
||||
else if ("ban_member" == command)
|
||||
{
|
||||
banSelectedMember(userID);
|
||||
}
|
||||
}
|
||||
else if (selectedIDS.size() > 1)
|
||||
{
|
||||
|
|
@ -1408,6 +1413,10 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v
|
|||
else if ("can_offer_teleport" == item)
|
||||
{
|
||||
return LLAvatarActions::canOfferTeleport(uuids);
|
||||
}
|
||||
else if ("can_ban_member" == item)
|
||||
{
|
||||
return canBanSelectedMember(single_id);
|
||||
}
|
||||
else if (("can_moderate_voice" == item) || ("can_allow_text_chat" == item) || ("can_mute" == item) || ("can_unmute" == item))
|
||||
{
|
||||
|
|
@ -1831,6 +1840,95 @@ bool LLFloaterIMContainer::isGroupModerator()
|
|||
return false;
|
||||
}
|
||||
|
||||
bool LLFloaterIMContainer::haveAbilityToBan()
|
||||
{
|
||||
LLSpeakerMgr * speaker_manager = getSpeakerMgrForSelectedParticipant();
|
||||
if (NULL == speaker_manager)
|
||||
{
|
||||
LL_WARNS() << "Speaker manager is missing" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
LLUUID group_uuid = speaker_manager->getSessionID();
|
||||
|
||||
return gAgent.isInGroup(group_uuid) && gAgent.hasPowerInGroup(group_uuid, GP_GROUP_BAN_ACCESS);
|
||||
}
|
||||
|
||||
bool LLFloaterIMContainer::canBanSelectedMember(const LLUUID& participant_uuid)
|
||||
{
|
||||
LLSpeakerMgr * speaker_manager = getSpeakerMgrForSelectedParticipant();
|
||||
if (NULL == speaker_manager)
|
||||
{
|
||||
LL_WARNS() << "Speaker manager is missing" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
LLUUID group_uuid = speaker_manager->getSessionID();
|
||||
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_uuid);
|
||||
if(!gdatap)
|
||||
{
|
||||
LL_WARNS("Groups") << "Unable to get group data for group " << group_uuid << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!gdatap->mMembers.size())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find((participant_uuid));
|
||||
if (mi == gdatap->mMembers.end())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLGroupMemberData* member_data = (*mi).second;
|
||||
// Is the member an owner?
|
||||
if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if( gAgent.hasPowerInGroup(group_uuid, GP_ROLE_REMOVE_MEMBER) &&
|
||||
gAgent.hasPowerInGroup(group_uuid, GP_GROUP_BAN_ACCESS) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLFloaterIMContainer::banSelectedMember(const LLUUID& participant_uuid)
|
||||
{
|
||||
LLSpeakerMgr * speaker_manager = getSpeakerMgrForSelectedParticipant();
|
||||
if (NULL == speaker_manager)
|
||||
{
|
||||
LL_WARNS() << "Speaker manager is missing" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLUUID group_uuid = speaker_manager->getSessionID();
|
||||
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_uuid);
|
||||
if(!gdatap)
|
||||
{
|
||||
LL_WARNS("Groups") << "Unable to get group data for group " << group_uuid << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
std::vector<LLUUID> ids;
|
||||
ids.push_back(participant_uuid);
|
||||
|
||||
LLGroupBanData ban_data;
|
||||
gdatap->createBanEntry(participant_uuid, ban_data);
|
||||
LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_POST, group_uuid, LLGroupMgr::BAN_CREATE, ids);
|
||||
LLGroupMgr::getInstance()->sendGroupMemberEjects(group_uuid, ids);
|
||||
LLGroupMgr::getInstance()->sendGroupMembersRequest(group_uuid);
|
||||
LLSD args;
|
||||
std::string name;
|
||||
gCacheName->getFullName(participant_uuid, name);
|
||||
args["AVATAR_NAME"] = name;
|
||||
args["GROUP_NAME"] = gdatap->mName;
|
||||
LLNotifications::instance().add(LLNotification::Params("EjectAvatarFromGroup").substitutions(args));
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterIMContainer::moderateVoice(const std::string& command, const LLUUID& userID)
|
||||
{
|
||||
if (!gAgent.getRegion()) return;
|
||||
|
|
|
|||
|
|
@ -169,12 +169,16 @@ private:
|
|||
LLSpeaker * getSpeakerOfSelectedParticipant(LLSpeakerMgr * speaker_managerp);
|
||||
LLSpeakerMgr * getSpeakerMgrForSelectedParticipant();
|
||||
bool isGroupModerator();
|
||||
bool haveAbilityToBan();
|
||||
bool canBanSelectedMember(const LLUUID& participant_uuid);
|
||||
LLUUID getGroupUIIDForSelectedParticipant();
|
||||
bool isMuted(const LLUUID& avatar_id);
|
||||
void moderateVoice(const std::string& command, const LLUUID& userID);
|
||||
void moderateVoiceAllParticipants(bool unmute);
|
||||
void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);
|
||||
void toggleAllowTextChat(const LLUUID& participant_uuid);
|
||||
void toggleMute(const LLUUID& participant_id, U32 flags);
|
||||
void banSelectedMember(const LLUUID& participant_uuid);
|
||||
void openNearbyChat();
|
||||
bool isParticipantListExpanded();
|
||||
|
||||
|
|
|
|||
|
|
@ -1893,8 +1893,8 @@ class GroupBanDataResponder : public LLHTTPClient::Responder
|
|||
public:
|
||||
GroupBanDataResponder(const LLUUID& gropup_id, BOOL force_refresh=false);
|
||||
virtual ~GroupBanDataResponder() {}
|
||||
virtual void result(const LLSD& pContent);
|
||||
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
|
||||
virtual void httpSuccess();
|
||||
virtual void httpFailure();
|
||||
private:
|
||||
LLUUID mGroupID;
|
||||
BOOL mForceRefresh;
|
||||
|
|
@ -1905,18 +1905,18 @@ GroupBanDataResponder::GroupBanDataResponder(const LLUUID& gropup_id, BOOL force
|
|||
mForceRefresh(force_refresh)
|
||||
{}
|
||||
|
||||
void GroupBanDataResponder::errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent)
|
||||
void GroupBanDataResponder::httpFailure()
|
||||
{
|
||||
LL_WARNS("GrpMgr") << "Error receiving group member data [status:"
|
||||
<< pStatus << "]: " << pContent << LL_ENDL;
|
||||
<< mStatus << "]: " << mContent << LL_ENDL;
|
||||
}
|
||||
|
||||
void GroupBanDataResponder::result(const LLSD& content)
|
||||
void GroupBanDataResponder::httpSuccess()
|
||||
{
|
||||
if (content.has("ban_list"))
|
||||
if (mContent.has("ban_list"))
|
||||
{
|
||||
// group ban data received
|
||||
LLGroupMgr::processGroupBanRequest(content);
|
||||
LLGroupMgr::processGroupBanRequest(mContent);
|
||||
}
|
||||
else if (mForceRefresh)
|
||||
{
|
||||
|
|
@ -2179,6 +2179,22 @@ void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content)
|
|||
online_status,
|
||||
is_owner);
|
||||
|
||||
LLGroupMemberData* member_old = group_datap->mMembers[member_id];
|
||||
if (member_old && group_datap->mRoleMemberDataComplete)
|
||||
{
|
||||
LLGroupMemberData::role_list_t::iterator rit = member_old->roleBegin();
|
||||
LLGroupMemberData::role_list_t::iterator end = member_old->roleEnd();
|
||||
|
||||
for ( ; rit != end; ++rit)
|
||||
{
|
||||
data->addRole((*rit).first,(*rit).second);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
group_datap->mRoleMemberDataComplete = false;
|
||||
}
|
||||
|
||||
group_datap->mMembers[member_id] = data;
|
||||
}
|
||||
|
||||
|
|
@ -2198,7 +2214,7 @@ void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content)
|
|||
group_datap->mMemberDataComplete = true;
|
||||
group_datap->mMemberRequestID.setNull();
|
||||
// Make the role-member data request
|
||||
if (group_datap->mPendingRoleMemberRequest)
|
||||
if (group_datap->mPendingRoleMemberRequest || !group_datap->mRoleMemberDataComplete)
|
||||
{
|
||||
group_datap->mPendingRoleMemberRequest = false;
|
||||
LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_id);
|
||||
|
|
|
|||
|
|
@ -64,7 +64,8 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p)
|
|||
mNameColumnIndex(p.name_column.column_index),
|
||||
mNameColumn(p.name_column.column_name),
|
||||
mAllowCallingCardDrop(p.allow_calling_card_drop),
|
||||
mShortNames(p.short_names)
|
||||
mShortNames(p.short_names),
|
||||
mPendingLookupsRemaining(0)
|
||||
{}
|
||||
|
||||
// public
|
||||
|
|
|
|||
|
|
@ -387,7 +387,7 @@ void LLPanelGroupBulk::addUsers(uuid_vec_t& agent_ids)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "llPanelGroupBulk: Selected avatar has no name: " << dest->getID() << LL_ENDL;
|
||||
llwarns << "llPanelGroupBulk: Selected avatar has no name: " << dest->getID() << llendl;
|
||||
names.push_back("(Unknown)");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class LLPanelGroupBulk : public LLPanel
|
|||
{
|
||||
public:
|
||||
LLPanelGroupBulk(const LLUUID& group_id);
|
||||
~LLPanelGroupBulk();
|
||||
/*virtual*/ ~LLPanelGroupBulk();
|
||||
|
||||
public:
|
||||
static void callbackClickSubmit(void* userdata) {}
|
||||
|
|
|
|||
|
|
@ -492,7 +492,7 @@ void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "llPanelGroupInvite: Selected avatar has no name: " << dest->getID() << LL_ENDL;
|
||||
llwarns << "llPanelGroupInvite: Selected avatar has no name: " << dest->getID() << llendl;
|
||||
names.push_back("(Unknown)");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2024,7 +2024,7 @@ bool LLPanelGroupRolesSubTab::needsApply(std::string& mesg)
|
|||
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
|
||||
if(!gdatap)
|
||||
{
|
||||
LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
|
||||
llwarns << "Unable to get group data for group " << mGroupID << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -2412,8 +2412,8 @@ void LLPanelGroupRolesSubTab::handleActionCheck(LLUICtrl* ctrl, bool force)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Unable to look up role information for role id: "
|
||||
<< role_id << LL_ENDL;
|
||||
LL_WARNS() << "Unable to look up role information for role id: "
|
||||
<< role_id << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2452,9 +2452,8 @@ void LLPanelGroupRolesSubTab::handleActionCheck(LLUICtrl* ctrl, bool force)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Unable to look up role information for role id: "
|
||||
<< role_id <<
|
||||
LL_ENDL;
|
||||
llwarns << "Unable to look up role information for role id: "
|
||||
<< role_id << llendl;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -2903,6 +2902,7 @@ void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id)
|
|||
LLPanelGroupSubTab::setGroupID(id);
|
||||
}
|
||||
|
||||
|
||||
// LLPanelGroupBanListSubTab /////////////////////////////////////////////
|
||||
static LLPanelInjector<LLPanelGroupBanListSubTab> t_panel_group_ban_subtab("panel_group_banlist_subtab");
|
||||
|
||||
|
|
@ -3153,17 +3153,18 @@ void LLPanelGroupBanListSubTab::populateBanList()
|
|||
|
||||
ban_entry.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL");
|
||||
|
||||
// Baker TODO: MAINT-
|
||||
// Check out utc_to_pacific_time()
|
||||
|
||||
std::string ban_date_str = bd.mBanDate.toHTTPDateString("%Y/%m/%d");
|
||||
time_t utc_time;
|
||||
utc_time = time_corrected();
|
||||
LLSD substitution;
|
||||
substitution["datetime"] = (S32) utc_time;
|
||||
LLStringUtil::format (ban_date_str, substitution);
|
||||
// time_t utc_time;
|
||||
// utc_time = time_corrected();
|
||||
// LLSD substitution;
|
||||
// substitution["datetime"] = (S32) utc_time;
|
||||
// LLStringUtil::format (ban_date_str, substitution);
|
||||
|
||||
LL_INFOS("BAKER") << "[BAKER] BAN_DATE: " << bd.mBanDate.toHTTPDateString("%Y/%m/%d") << LL_ENDL;
|
||||
LL_INFOS("BAKER") << "[BAKER] BAN_DATE_MODIFIED: " << ban_date_str << LL_ENDL;
|
||||
//LL_INFOS("BAKER") << "[BAKER] BAN_DATE: " << bd.mBanDate.toHTTPDateString("%Y/%m/%d") << LL_ENDL;
|
||||
//LL_INFOS("BAKER") << "[BAKER] BAN_DATE_MODIFIED: " << ban_date_str << LL_ENDL;
|
||||
|
||||
//ban_entry.columns.add().column("ban_date").value(ban_date_str.font.name("SANSSERIF_SMALL").style("NORMAL");
|
||||
ban_entry.columns.add().column("ban_date").value(bd.mBanDate.toHTTPDateString("%Y/%m/%d")).font.name("SANSSERIF_SMALL").style("NORMAL");
|
||||
|
|
|
|||
|
|
@ -214,4 +214,12 @@
|
|||
<on_enable function="Avatar.EnableItem" parameter="can_moderate_voice" />
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
<menu_item_separator layout="topleft" name="Group Ban Separator"/>
|
||||
<menu_item_call
|
||||
label="Ban member"
|
||||
layout="topleft"
|
||||
name="BanMember">
|
||||
<on_click function="Avatar.DoToSelected" parameter="ban_member" />
|
||||
<on_enable function="Avatar.EnableItem" parameter="can_ban_member" />
|
||||
</menu_item_call>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -174,138 +174,136 @@ clicking on their names.
|
|||
right="-5"
|
||||
name="show_all_button"
|
||||
width="100" />-->
|
||||
<panel.string
|
||||
name="help_text">
|
||||
Roles have a title and an allowed list of Abilities
|
||||
that Members can perform. Members can belong to
|
||||
one or more Roles. A group can have up to 10 Roles,
|
||||
including the Everyone and Owner Roles.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="cant_delete_role">
|
||||
The 'Everyone' and 'Owners' Roles are special and can't be deleted.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_folder_icon" translate="false">
|
||||
Inv_FolderClosed
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_all_have_icon" translate="false">
|
||||
Checkbox_On
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_partial_icon" translate="false">
|
||||
Checkbox_Off
|
||||
</panel.string>
|
||||
|
||||
<filter_editor
|
||||
layout="topleft"
|
||||
top="5"
|
||||
left="5"
|
||||
right="-5"
|
||||
height="22"
|
||||
search_button_visible="false"
|
||||
follows="left|top|right"
|
||||
label="Filter Roles"
|
||||
name="filter_input" />
|
||||
|
||||
<scroll_list
|
||||
<panel.string
|
||||
name="help_text">
|
||||
Roles have a title and an allowed list of Abilities
|
||||
that Members can perform. Members can belong to
|
||||
one or more Roles. A group can have up to 10 Roles,
|
||||
including the Everyone and Owner Roles.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="cant_delete_role">
|
||||
The 'Everyone' and 'Owners' Roles are special and can't be deleted.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_folder_icon" translate="false">
|
||||
Inv_FolderClosed
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_all_have_icon" translate="false">
|
||||
Checkbox_On
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_partial_icon" translate="false">
|
||||
Checkbox_Off
|
||||
</panel.string>
|
||||
<filter_editor
|
||||
layout="topleft"
|
||||
top="5"
|
||||
left="5"
|
||||
right="-5"
|
||||
height="22"
|
||||
search_button_visible="false"
|
||||
follows="left|top|right"
|
||||
label="Filter Roles"
|
||||
name="filter_input" />
|
||||
<scroll_list
|
||||
name="role_list"
|
||||
left="3"
|
||||
top_pad="5"
|
||||
right="-1"
|
||||
height="129"
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
draw_stripes="false"
|
||||
heading_height="23"
|
||||
search_column="1"
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
draw_stripes="false"
|
||||
heading_height="23"
|
||||
search_column="1"
|
||||
follows="all"
|
||||
layout="topleft">
|
||||
|
||||
<scroll_list.columns
|
||||
label="Role"
|
||||
name="name"
|
||||
relative_width="0.45" />
|
||||
<scroll_list.columns
|
||||
label="Title"
|
||||
name="title"
|
||||
relative_width="0.45" />
|
||||
<scroll_list.columns
|
||||
label="#"
|
||||
name="members"
|
||||
relative_width="0.15" />
|
||||
</scroll_list>
|
||||
<scroll_list.columns
|
||||
label="Role"
|
||||
name="name"
|
||||
relative_width="0.45" />
|
||||
<scroll_list.columns
|
||||
label="Title"
|
||||
name="title"
|
||||
relative_width="0.45" />
|
||||
<scroll_list.columns
|
||||
label="#"
|
||||
name="members"
|
||||
relative_width="0.15" />
|
||||
</scroll_list>
|
||||
|
||||
<button
|
||||
name="role_create"
|
||||
<button
|
||||
name="role_create"
|
||||
label="New Role"
|
||||
left="3"
|
||||
top_pad="4"
|
||||
width="100"
|
||||
height="23"
|
||||
height="23"
|
||||
follows="bottom|left"
|
||||
layout="topleft" />
|
||||
|
||||
<button
|
||||
name="role_delete"
|
||||
name="role_delete"
|
||||
label="Delete Role"
|
||||
left_pad="4"
|
||||
width="100"
|
||||
height="23"
|
||||
follows="bottom|left"
|
||||
layout="topleft" />
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<!-- ABILITIES sub tab -->
|
||||
|
||||
<panel
|
||||
<panel
|
||||
name="actions_sub_tab"
|
||||
label="Abilities"
|
||||
tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability."
|
||||
help_topic="roles_actions_tab"
|
||||
left="0"
|
||||
left="0"
|
||||
top="0"
|
||||
right="-1"
|
||||
right="-1"
|
||||
height="188"
|
||||
class="panel_group_actions_subtab"
|
||||
class="panel_group_actions_subtab"
|
||||
follows="all"
|
||||
layout="topleft">
|
||||
|
||||
<panel.string
|
||||
name="help_text">
|
||||
Abilities allow Members in Roles to do specific
|
||||
things in this group. There's a broad variety of Abilities.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_folder_icon" translate="false">
|
||||
Inv_FolderClosed
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_all_have_icon" translate="false">
|
||||
Checkbox_On
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_partial_icon" translate="false">
|
||||
Checkbox_Off
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="help_text">
|
||||
Abilities allow Members in Roles to do specific
|
||||
things in this group. There's a broad variety of Abilities.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_folder_icon" translate="false">
|
||||
Inv_FolderClosed
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_all_have_icon" translate="false">
|
||||
Checkbox_On
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="power_partial_icon" translate="false">
|
||||
Checkbox_Off
|
||||
</panel.string>
|
||||
|
||||
<filter_editor
|
||||
layout="topleft"
|
||||
top="5"
|
||||
left="5"
|
||||
right="-5"
|
||||
height="22"
|
||||
search_button_visible="false"
|
||||
follows="left|top|right"
|
||||
label="Filter Abilities"
|
||||
name="filter_input" />
|
||||
<filter_editor
|
||||
layout="topleft"
|
||||
top="5"
|
||||
left="5"
|
||||
right="-5"
|
||||
height="22"
|
||||
search_button_visible="false"
|
||||
follows="left|top|right"
|
||||
label="Filter Abilities"
|
||||
name="filter_input" />
|
||||
|
||||
<scroll_list
|
||||
name="action_list"
|
||||
tool_tip="Select an Ability to view more details"
|
||||
<scroll_list
|
||||
name="action_list"
|
||||
tool_tip="Select an Ability to view more details"
|
||||
left="0"
|
||||
top_pad="5"
|
||||
top_pad="5"
|
||||
right="-1"
|
||||
height="161"
|
||||
column_padding="0"
|
||||
|
|
@ -316,28 +314,108 @@ things in this group. There's a broad variety of Abilities.
|
|||
|
||||
|
||||
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="icon"
|
||||
width="2" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="icon"
|
||||
width="2" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="action"/>
|
||||
|
||||
</scroll_list>
|
||||
</panel>
|
||||
</scroll_list>
|
||||
</panel>
|
||||
|
||||
<panel
|
||||
border="false"
|
||||
height="303"
|
||||
label="Banned Residents"
|
||||
label="BANNED RESIDENTS"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
right="-1"
|
||||
help_topic="roles_banlist_tab"
|
||||
name="banlist_sub_tab"
|
||||
class="panel_group_banlist_subtab"
|
||||
tool_tip="View the banned residents from this group."
|
||||
width="310">
|
||||
<panel.string
|
||||
name="help_text">
|
||||
Any resident on the ban list will be unable to join the group.
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="ban_count_template">
|
||||
Ban count: [COUNT]/[LIMIT]
|
||||
</panel.string>
|
||||
<name_list
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
height="400"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
right="-1"
|
||||
multi_select="true"
|
||||
name="ban_list"
|
||||
short_names="false"
|
||||
top_pad="5">
|
||||
<name_list.columns
|
||||
label="Resident"
|
||||
name="name"
|
||||
font.name="SANSSERIF_SMALL"
|
||||
font.style="NORMAL"
|
||||
relative_width="0.7" />
|
||||
<name_list.columns
|
||||
label="Date Banned"
|
||||
name="ban_date"
|
||||
relative_width="0.3" />
|
||||
</name_list>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Ban Resident(s)"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="ban_create"
|
||||
tool_tip="Ban residents from your group"
|
||||
width="120" />
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Remove Ban(s)"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="ban_delete"
|
||||
tool_tip="Unban selected residents from your group"
|
||||
width="120" />
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
width="23"
|
||||
image_overlay="Refresh_Off"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="ban_refresh"
|
||||
tool_tip="Refresh the ban list"
|
||||
/>
|
||||
<text
|
||||
type="string"
|
||||
height="18"
|
||||
left_pad="5"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="ban_count"
|
||||
width="100">
|
||||
</text>
|
||||
</panel>
|
||||
<panel
|
||||
border="false"
|
||||
height="303"
|
||||
label="Banned Residents"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
right="-1"
|
||||
help_topic="roles_banlist_tab"
|
||||
name="banlist_sub_tab"
|
||||
class="panel_group_banlist_subtab"
|
||||
|
|
@ -470,29 +548,29 @@ things in this group. There's a broad variety of Abilities.
|
|||
top_pad="4"
|
||||
height="16"
|
||||
type="string"
|
||||
text_color="EmphasisColor"
|
||||
text_color="EmphasisColor"
|
||||
follows="left|top|right"
|
||||
layout="topleft">
|
||||
Assigned Roles
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<scroll_list
|
||||
name="member_assigned_roles"
|
||||
<scroll_list
|
||||
name="member_assigned_roles"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="93"
|
||||
draw_stripes="true"
|
||||
follows="top|left|right"
|
||||
layout="topleft">
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="role"
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="role"
|
||||
width="135" />
|
||||
</scroll_list>
|
||||
</scroll_list>
|
||||
|
||||
<!--
|
||||
|
||||
|
|
@ -507,105 +585,105 @@ things in this group. There's a broad variety of Abilities.
|
|||
|
||||
//-->
|
||||
<text
|
||||
type="string"
|
||||
type="string"
|
||||
top_pad="4"
|
||||
right="-1"
|
||||
height="16"
|
||||
height="16"
|
||||
follows="left|top|right"
|
||||
text_color="EmphasisColor"
|
||||
name="static2"
|
||||
text_color="EmphasisColor"
|
||||
name="static2"
|
||||
layout="topleft">
|
||||
Allowed Abilities
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<scroll_list
|
||||
<scroll_list
|
||||
tool_tip="For details of each allowed ability see the abilities tab"
|
||||
right="-1"
|
||||
right="-1"
|
||||
top_pad="0"
|
||||
height="93"
|
||||
draw_stripes="true"
|
||||
name="member_allowed_actions"
|
||||
search_column="2"
|
||||
name="member_allowed_actions"
|
||||
search_column="2"
|
||||
follows="all"
|
||||
layout="topleft">
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="icon"
|
||||
width="2" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="icon"
|
||||
width="2" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="action"/>
|
||||
</scroll_list>
|
||||
</scroll_list>
|
||||
<!--
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
//-->
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<!-- ROLES footer -->
|
||||
|
||||
<panel
|
||||
<panel
|
||||
name="roles_footer"
|
||||
top="192"
|
||||
left="0"
|
||||
right="-1"
|
||||
left="0"
|
||||
right="-1"
|
||||
height="226"
|
||||
background_visible="false"
|
||||
bg_alpha_color="FloaterUnfocusBorderColor"
|
||||
mouse_opaque="false"
|
||||
mouse_opaque="false"
|
||||
visible="false"
|
||||
follows="all"
|
||||
layout="topleft">
|
||||
|
||||
<text
|
||||
<text
|
||||
name="role_name_label"
|
||||
left="5"
|
||||
top_pad="3"
|
||||
width="70"
|
||||
height="16"
|
||||
height="16"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
follows="left|top"
|
||||
layout="topleft">
|
||||
Role Name
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<line_editor
|
||||
<line_editor
|
||||
name="role_name"
|
||||
left_pad="4"
|
||||
right="-1"
|
||||
height="20"
|
||||
height="20"
|
||||
type="string"
|
||||
layout="topleft"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
follows="left|top|right"
|
||||
max_length_bytes="20">
|
||||
</line_editor>
|
||||
</line_editor>
|
||||
|
||||
<text
|
||||
<text
|
||||
name="role_title_label"
|
||||
top_pad="4"
|
||||
left="5"
|
||||
width="70"
|
||||
height="16"
|
||||
height="16"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
follows="left|top"
|
||||
layout="topleft">
|
||||
Role Title
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<line_editor
|
||||
<line_editor
|
||||
name="role_title"
|
||||
left_pad="4"
|
||||
right="-1"
|
||||
height="20"
|
||||
height="20"
|
||||
type="string"
|
||||
follows="left|top|right"
|
||||
max_length_bytes="20"
|
||||
follows="left|top|right"
|
||||
max_length_bytes="20"
|
||||
layout="topleft">
|
||||
</line_editor>
|
||||
</line_editor>
|
||||
|
||||
<check_box
|
||||
top_pad="4"
|
||||
|
|
@ -628,21 +706,21 @@ things in this group. There's a broad variety of Abilities.
|
|||
follows="left|top"
|
||||
layout="topleft">
|
||||
Description
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<text_editor
|
||||
type="string"
|
||||
layout="topleft"
|
||||
follows="left|top|right"
|
||||
right="-1"
|
||||
max_length="295"
|
||||
<text_editor
|
||||
type="string"
|
||||
layout="topleft"
|
||||
follows="left|top|right"
|
||||
right="-1"
|
||||
max_length="295"
|
||||
height="37"
|
||||
name="role_description"
|
||||
top_pad="0"
|
||||
name="role_description"
|
||||
top_pad="0"
|
||||
left="5"
|
||||
width="300"
|
||||
word_wrap="true">
|
||||
</text_editor>
|
||||
width="300"
|
||||
word_wrap="true">
|
||||
</text_editor>
|
||||
|
||||
<!--
|
||||
<layout_stack
|
||||
|
|
@ -672,23 +750,23 @@ things in this group. There's a broad variety of Abilities.
|
|||
follows="top|left|right"
|
||||
layout="topleft">
|
||||
|
||||
<text
|
||||
<text
|
||||
name="assigned_members_label"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="16"
|
||||
height="16"
|
||||
type="string"
|
||||
follows="left|top|right"
|
||||
text_color="EmphasisColor"
|
||||
text_color="EmphasisColor"
|
||||
layout="topleft">
|
||||
Assigned Members
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<name_list
|
||||
name="role_assigned_members"
|
||||
<name_list
|
||||
name="role_assigned_members"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="69"
|
||||
draw_stripes="true"
|
||||
|
|
@ -720,18 +798,18 @@ things in this group. There's a broad variety of Abilities.
|
|||
left="0"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="16"
|
||||
height="16"
|
||||
type="string"
|
||||
text_color="EmphasisColor"
|
||||
text_color="EmphasisColor"
|
||||
follows="left|top|right"
|
||||
layout="topleft">
|
||||
Allowed Abilities
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<scroll_list
|
||||
name="role_allowed_actions"
|
||||
tool_tip="For details of each allowed ability see the abilities tab"
|
||||
top_pad="0"
|
||||
<scroll_list
|
||||
name="role_allowed_actions"
|
||||
tool_tip="For details of each allowed ability see the abilities tab"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="20"
|
||||
draw_stripes="true"
|
||||
|
|
@ -739,25 +817,25 @@ things in this group. There's a broad variety of Abilities.
|
|||
follows="all"
|
||||
layout="topleft">
|
||||
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="icon"
|
||||
width="2" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="icon"
|
||||
width="2" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="checkbox"
|
||||
width="20" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="action"/>
|
||||
</scroll_list>
|
||||
</scroll_list>
|
||||
<!--
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
//-->
|
||||
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<!-- ABILITIES footer -->
|
||||
|
||||
|
|
@ -767,8 +845,8 @@ things in this group. There's a broad variety of Abilities.
|
|||
left="4"
|
||||
right="-4"
|
||||
height="226"
|
||||
background_visible="false"
|
||||
bg_alpha_color="FloaterUnfocusBorderColor"
|
||||
background_visible="false"
|
||||
bg_alpha_color="FloaterUnfocusBorderColor"
|
||||
mouse_opaque="false"
|
||||
visible="false"
|
||||
follows="all"
|
||||
|
|
@ -785,7 +863,7 @@ things in this group. There's a broad variety of Abilities.
|
|||
layout="topleft"
|
||||
name="action_description_panel">
|
||||
|
||||
<text_editor
|
||||
<text_editor
|
||||
name="action_description"
|
||||
top="0"
|
||||
left="0"
|
||||
|
|
@ -794,14 +872,14 @@ things in this group. There's a broad variety of Abilities.
|
|||
halign="left"
|
||||
bg_readonly_color="Transparent"
|
||||
font="SansSerifSmall"
|
||||
type="string"
|
||||
enabled="false"
|
||||
max_length="512"
|
||||
type="string"
|
||||
enabled="false"
|
||||
max_length="512"
|
||||
word_wrap="true"
|
||||
follows="left|top|right"
|
||||
layout="topleft">
|
||||
This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner.
|
||||
</text_editor>
|
||||
</text_editor>
|
||||
|
||||
</panel>
|
||||
<!--
|
||||
|
|
@ -822,22 +900,22 @@ things in this group. There's a broad variety of Abilities.
|
|||
layout="topleft">
|
||||
//-->
|
||||
|
||||
<text
|
||||
<text
|
||||
name="action_roles_label"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="16"
|
||||
height="16"
|
||||
type="string"
|
||||
text_color="EmphasisColor"
|
||||
follows="left|top|right"
|
||||
layout="topleft">
|
||||
Roles with this ability
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<scroll_list
|
||||
name="action_roles"
|
||||
top_pad="0"
|
||||
<scroll_list
|
||||
name="action_roles"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="90"
|
||||
follows="left|top|right"
|
||||
|
|
@ -852,22 +930,22 @@ things in this group. There's a broad variety of Abilities.
|
|||
layout="topleft">
|
||||
//-->
|
||||
|
||||
<text
|
||||
<text
|
||||
name="action_members_label"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="16"
|
||||
height="16"
|
||||
type="string"
|
||||
text_color="EmphasisColor"
|
||||
follows="top|left|right"
|
||||
layout="topleft">
|
||||
Members with this ability
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<name_list
|
||||
name="action_members"
|
||||
<name_list
|
||||
name="action_members"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
height="46"
|
||||
follows="all"
|
||||
|
|
@ -876,7 +954,7 @@ things in this group. There's a broad variety of Abilities.
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
//-->
|
||||
</panel>
|
||||
</panel>
|
||||
<!--
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
Loading…
Reference in New Issue