diff options
-rwxr-xr-x | indra/newview/llgroupmgr.cpp | 9 | ||||
-rwxr-xr-x | indra/newview/llgroupmgr.h | 15 | ||||
-rwxr-xr-x | indra/newview/llnamelistctrl.cpp | 58 | ||||
-rwxr-xr-x | indra/newview/llnamelistctrl.h | 17 | ||||
-rwxr-xr-x | indra/newview/llpanelgrouproles.cpp | 195 | ||||
-rwxr-xr-x | indra/newview/llpanelgrouproles.h | 13 | ||||
-rwxr-xr-x | indra/newview/skins/default/xui/en/panel_group_roles.xml | 1251 |
7 files changed, 830 insertions, 728 deletions
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index bfdb8588e4..7cb53066ea 100755 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -235,7 +235,6 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) : mRoleDataComplete(false), mRoleMemberDataComplete(false), mGroupPropertiesDataComplete(false), - mGroupBanStatus(LLGroupMgrGroupData::STATUS_INIT), mPendingRoleMemberRequest(false), mAccessTime(0.0f) { @@ -747,14 +746,11 @@ void LLGroupMgrGroupData::cancelRoleChanges() void LLGroupMgrGroupData::createBanEntry(const LLUUID& ban_id, const LLGroupBanData& ban_data) { mBanList[ban_id] = ban_data; - // Refresh the list } void LLGroupMgrGroupData::removeBanEntry(const LLUUID& ban_id) { - // Once we get this hooked up to the backend, we want to confirm the create or delete worked. mBanList.erase(ban_id); - // Refresh the list } @@ -1948,9 +1944,6 @@ void LLGroupMgr::processGroupBanRequest(const LLSD& content) if (!gdatap) return; - //LLSD banlist = LLSD::emptyMap(); - - LLSD::map_const_iterator i = content["ban_list"].beginMap(); LLSD::map_const_iterator iEnd = content["ban_list"].endMap(); for(;i != iEnd; ++i) @@ -1963,7 +1956,7 @@ void LLGroupMgr::processGroupBanRequest(const LLSD& content) } gdatap->mChanged = TRUE; - gdatap->setGroupBanStatus(LLGroupMgrGroupData::STATUS_COMPLETE); +// gdatap->setGroupBanStatus(LLGroupMgrGroupData::STATUS_COMPLETE); LLGroupMgr::getInstance()->notifyObservers(GC_BANLIST); } diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 49e354a26c..7e3297b757 100755 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -212,14 +212,6 @@ struct LLGroupTitle class LLGroupMgrGroupData { friend class LLGroupMgr; -public: - enum EGroupDataStatus - { - STATUS_INIT, - STATUS_REQUESTING, - STATUS_COMPLETE - }; - public: LLGroupMgrGroupData(const LLUUID& id); @@ -250,9 +242,6 @@ public: bool isRoleDataComplete() { return mRoleDataComplete; } bool isRoleMemberDataComplete() { return mRoleMemberDataComplete; } bool isGroupPropertiesDataComplete() { return mGroupPropertiesDataComplete; } - - EGroupDataStatus getGroupBanStatus() { return mGroupBanStatus; } - void setGroupBanStatus(EGroupDataStatus status) { mGroupBanStatus = status; } F32 getAccessTime() const { return mAccessTime; } void setAccessed(); @@ -271,8 +260,6 @@ public: void removeBanEntry(const LLUUID& ban_id); - - public: typedef std::map<LLUUID,LLGroupMemberData*> member_list_t; typedef std::map<LLUUID,LLGroupRoleData*> role_list_t; @@ -319,8 +306,6 @@ private: bool mRoleDataComplete; bool mRoleMemberDataComplete; bool mGroupPropertiesDataComplete; - - EGroupDataStatus mGroupBanStatus; bool mPendingRoleMemberRequest; F32 mAccessTime; diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 7f396b7b7e..ed684004f0 100755 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -65,7 +65,8 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p) mNameColumn(p.name_column.column_name), mAllowCallingCardDrop(p.allow_calling_card_drop), mShortNames(p.short_names), - mAvatarNameCacheConnection() + mAvatarNameCacheConnection(), + mPendingLookupsRemaining(0) {} // public @@ -79,6 +80,12 @@ LLScrollListItem* LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPositi item.enabled = enabled; item.target = INDIVIDUAL; + ////////////////////////////////////////////////////////////////////////// + // BAKER - FIX NameListCtrl + //mPendingLookupsRemaining--; + ////////////////////////////////////////////////////////////////////////// + + return addNameItemRow(item, pos, suffix); } @@ -275,6 +282,12 @@ void LLNameListCtrl::addGroupNameItem(LLNameListCtrl::NameItem& item, EAddPositi LLScrollListItem* LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition pos) { item.target = INDIVIDUAL; + + ////////////////////////////////////////////////////////////////////////// + // BAKER - FIX NameListCtrl + //mPendingLookupsRemaining--; + ////////////////////////////////////////////////////////////////////////// + return addNameItemRow(item, pos); } @@ -284,6 +297,12 @@ LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition p LLParamSDParser parser; parser.readSD(element, item_params); item_params.userdata = userdata; + + ////////////////////////////////////////////////////////////////////////// + // BAKER - FIX NameListCtrl + //mPendingLookupsRemaining--; + ////////////////////////////////////////////////////////////////////////// + return addNameItemRow(item_params, pos); } @@ -335,6 +354,20 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow( mAvatarNameCacheConnection.disconnect(); } mAvatarNameCacheConnection = LLAvatarNameCache::get(id,boost::bind(&LLNameListCtrl::onAvatarNameCache,this, _1, _2, item->getHandle())); + + ////////////////////////////////////////////////////////////////////////// + // BAKER - FIX NameListCtrl + if(mPendingLookupsRemaining <= 0) + { + // We might get into a state where mPendingLookupsRemaining might + // go negative. So just reset it right now and figure out if it's + // possible later :) + mPendingLookupsRemaining = 0; + mNameListCompleteSignal(false); + } + mPendingLookupsRemaining++; + ////////////////////////////////////////////////////////////////////////// + } break; } @@ -386,6 +419,12 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id) { selectNthItem(idx); // not sure whether this is needed, taken from previous implementation deleteSingleItem(idx); + + ////////////////////////////////////////////////////////////////////////// + // BAKER - FIX NameListCtrl + mPendingLookupsRemaining--; + ////////////////////////////////////////////////////////////////////////// + } } @@ -412,6 +451,23 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id, } } + ////////////////////////////////////////////////////////////////////////// + // BAKER - FIX NameListCtrl + //if (mPendingLookupsRemaining <= 0) + { + // We might get into a state where mPendingLookupsRemaining might + // go negative. So just reset it right now and figure out if it's + // possible later :) + //mPendingLookupsRemaining = 0; + + mNameListCompleteSignal(true); + } + //else + { + // mPendingLookupsRemaining--; + } + ////////////////////////////////////////////////////////////////////////// + dirtyColumns(); } diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 271802d48a..80ed081fd3 100755 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -67,6 +67,8 @@ class LLNameListCtrl : public LLScrollListCtrl, public LLInstanceTracker<LLNameListCtrl> { public: + typedef boost::signals2::signal<void(bool)> namelist_complete_signal_t; + typedef enum e_name_type { INDIVIDUAL, @@ -151,7 +153,7 @@ public: /*virtual*/ void updateColumns(); - /*virtual*/ void mouseOverHighlightNthItem( S32 index ); + /*virtual*/ void mouseOverHighlightNthItem( S32 index ); private: void showInspector(const LLUUID& avatar_id, bool is_group); void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, LLHandle<LLNameListItem> item); @@ -162,6 +164,19 @@ private: BOOL mAllowCallingCardDrop; bool mShortNames; // display name only, no SLID boost::signals2::connection mAvatarNameCacheConnection; + + ////////////////////////////////////////////////////////////////////////// + // BAKER: Fixing name list control not being updated properly. + S32 mPendingLookupsRemaining; + namelist_complete_signal_t mNameListCompleteSignal; + +public: + boost::signals2::connection setOnNameListCompleteCallback(boost::function<void(bool)> onNameListCompleteCallback) + { + return mNameListCompleteSignal.connect(onNameListCompleteCallback); + } + ////////////////////////////////////////////////////////////////////////// + }; diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index f3cb9900fe..76cb3cc498 100755 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1304,6 +1304,8 @@ void LLPanelGroupMembersSubTab::deactivate() bool LLPanelGroupMembersSubTab::needsApply(std::string& mesg) { + LL_INFOS("BAKER") << "[BAKER] needsApply()" << LL_ENDL; + return mChanged; } @@ -2711,8 +2713,6 @@ void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id) LLPanelGroupSubTab::setGroupID(id); } -////////////////////////////////////////////////////////////////////////// - //////////////////////////// // LLPanelGroupBanListSubTab @@ -2724,14 +2724,10 @@ LLPanelGroupBanListSubTab::LLPanelGroupBanListSubTab() mBanList(NULL), mCreateBanButton(NULL), mDeleteBanButton(NULL) -{ - LL_INFOS("BAKER") << "[BAKER] LLPanelGroupBanListSubTab::ctor()" << LL_ENDL; -} +{} BOOL LLPanelGroupBanListSubTab::postBuildSubTab(LLView* root) { - LL_INFOS("BAKER") << "[BAKER] LLPanelGroupBanListSubTab::postBuildSubTab()" << LL_ENDL; - LLPanelGroupSubTab::postBuildSubTab(root); // Upcast parent so we can ask it for sibling controls. @@ -2740,49 +2736,50 @@ BOOL LLPanelGroupBanListSubTab::postBuildSubTab(LLView* root) // Look recursively from the parent to find all our widgets. bool recurse = true; - // BAKER TODO: - // What are these? Looks like something inhereted from LLPanelGroupSubTab - mHeader = parent->getChild<LLPanel>("banlist_header", recurse); - mFooter = parent->getChild<LLPanel>("banlist_footer", recurse); - ////////////////////////////////////////////////////////////////////////// + mHeader = parent->getChild<LLPanel>("banlist_header", recurse); + mFooter = parent->getChild<LLPanel>("banlist_footer", recurse); mBanList = parent->getChild<LLNameListCtrl>("ban_list", recurse); - mCreateBanButton = parent->getChild<LLButton>("ban_create", recurse); - mDeleteBanButton = parent->getChild<LLButton>("ban_delete", recurse); + + mCreateBanButton = parent->getChild<LLButton>("ban_create", recurse); + mDeleteBanButton = parent->getChild<LLButton>("ban_delete", recurse); + mRefreshBanListButton = parent->getChild<LLButton>("ban_refresh", recurse); - if(!mBanList || !mCreateBanButton || !mDeleteBanButton) + if(!mBanList || !mCreateBanButton || !mDeleteBanButton || !mRefreshBanListButton) return FALSE; mBanList->setCommitOnSelectionChange(TRUE); mBanList->setCommitCallback(onBanEntrySelect, this); mCreateBanButton->setClickedCallback(onCreateBanEntry, this); - mCreateBanButton->setEnabled(FALSE); - + mCreateBanButton->setEnabled(TRUE); + mDeleteBanButton->setClickedCallback(onDeleteBanEntry, this); mDeleteBanButton->setEnabled(FALSE); - setFooterEnabled(FALSE); - - LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); - if(gdatap && (gdatap->getGroupBanStatus() == LLGroupMgrGroupData::STATUS_INIT)) - { - LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID); - gdatap->setGroupBanStatus(LLGroupMgrGroupData::STATUS_REQUESTING); - } + mRefreshBanListButton->setClickedCallback(onRefreshBanList, this); + mRefreshBanListButton->setEnabled(FALSE); + mBanList->setOnNameListCompleteCallback(boost::bind(&LLPanelGroupBanListSubTab::onBanListCompleted, this, _1)); + + setFooterEnabled(FALSE); return TRUE; } void LLPanelGroupBanListSubTab::activate() { - LL_INFOS("BAKER") << "[BAKER] LLPanelGroupBanListSubTab::activate()" << LL_ENDL; - LLPanelGroupSubTab::activate(); mBanList->deselectAllItems(); mDeleteBanButton->setEnabled(FALSE); + // BAKER: Should I really request everytime activate() is called? + // Perhaps I should only do it on a force refresh, or if an action on the list happens... + // Because it's not going to live-update the list anyway... You'd have to refresh if you + // wanted to see someone else's additions anyway... + // + LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID); + setFooterEnabled(FALSE); update(GC_ALL); } @@ -2820,68 +2817,53 @@ void LLPanelGroupBanListSubTab::update(LLGroupChange gc) //if (gc != GC_ALL && gc != GC_BANLIST) // return; - LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); - if(!gdatap) - { - LL_INFOS("BAKER") << "[BAKER] No group data!" << LL_ENDL; - return; - } - - switch(gdatap->getGroupBanStatus()) - { - // Must be initial update [ Check if I should request this at panel creation - // with everything else -- might as well] - // Request our ban list! - case LLGroupMgrGroupData::STATUS_INIT: - LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID); - gdatap->setGroupBanStatus(LLGroupMgrGroupData::STATUS_REQUESTING); - break; +// LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); +// if(!gdatap) +// { +// LL_INFOS("BAKER") << "[BAKER] No group data!" << LL_ENDL; +// return; +// } + + populateBanList(); +// // Do I even need this anymore? +// switch(gdatap->getGroupBanStatus()) +// { +// // Must be initial update [ Check if I should request this at panel creation +// // with everything else -- might as well] +// // Request our ban list! +// case LLGroupMgrGroupData::STATUS_INIT: +// LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID); +// gdatap->setGroupBanStatus(LLGroupMgrGroupData::STATUS_REQUESTING); +// break; +// +// // Already have a request out -- don't bother sending another one +// // Repeat sending won't make a difference, as it'll be behind a load balancer +// case LLGroupMgrGroupData::STATUS_REQUESTING: +// // Maybe here we call populate ban list as well, and see about how many +// // more names we need to complete the ban list +// break; +// +// // See if the list needs updating -- if we call update, but nothing changed, +// // there's no reason to send another request. +// // [NOTHING CHANGED] - Do Nothing! +// // [SOMETHING CHANGED] - Don't panic! Just repopulate the ban list! +// case LLGroupMgrGroupData::STATUS_COMPLETE: +// populateBanList(); +// break; +// } +// - // Already have a request out -- don't bother sending another one - // Repeat sending won't make a difference, as it'll be behind a load balancer - case LLGroupMgrGroupData::STATUS_REQUESTING: - break; - - // See if the list needs updating -- if we call update, but nothing changed, - // there's no reason to send another request. - // [NOTHING CHANGED] - Do Nothing! - // [SOMETHING CHANGED] - Don't panic! Just repopulate the ban list! - case LLGroupMgrGroupData::STATUS_COMPLETE: - populateBanList(); - break; - } + } void LLPanelGroupBanListSubTab::draw() { LLPanelGroupSubTab::draw(); - // if(mPendingBanUpdate) + //if(mPendingBanUpdate) // populateBanList(); } -void LLPanelGroupBanListSubTab::populateBanList() -{ - LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); - if(!gdatap) - { - LL_INFOS("BAKER") << "[BAKER] No group data!" << LL_ENDL; - return; - } - - if(gdatap->getGroupBanStatus() != LLGroupMgrGroupData::STATUS_COMPLETE) - return; - - mBanList->deleteAllItems(); - std::map<LLUUID,LLGroupBanData>::const_iterator entry = gdatap->mBanList.begin(); - for(; entry != gdatap->mBanList.end(); entry++) - { - LLNameListCtrl::NameItem ban_entry; - ban_entry.value = entry->first; - mBanList->addNameItemRow(ban_entry); - } -} - void LLPanelGroupBanListSubTab::onBanEntrySelect(LLUICtrl* ctrl, void* user_data) { @@ -3035,10 +3017,59 @@ void LLPanelGroupBanListSubTab::handleDeleteBanEntry() } -void LLPanelGroupBanListSubTab::setGroupID(const LLUUID& id) +void LLPanelGroupBanListSubTab::onRefreshBanList(void* user_data) { - LL_INFOS("BAKER") << "[BAKER] LLPanelGroupBanListSubTab::setGroupID()" << LL_ENDL; + LL_INFOS("BAKER") << "[BAKER] LLPanelGroupBanListSubTab::onRefreshBanList()" << LL_ENDL; + + LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data); + if (!self) + return; + + self->handleRefreshBanList(); +} + +void LLPanelGroupBanListSubTab::handleRefreshBanList() +{ + LL_INFOS("BAKER") << "[BAKER] LLPanelGroupBanListSubTab::handleRefreshBanList()" << LL_ENDL; + mRefreshBanListButton->setEnabled(FALSE); + LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID); +} + + +void LLPanelGroupBanListSubTab::onBanListCompleted(bool isComplete) +{ + if(isComplete) + { + mRefreshBanListButton->setEnabled(TRUE); + populateBanList(); + } +} + +void LLPanelGroupBanListSubTab::populateBanList() +{ + LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); + if(!gdatap) + { + LL_INFOS("BAKER") << "[BAKER] No group data!" << LL_ENDL; + return; + } + + mBanList->deleteAllItems(); + std::map<LLUUID,LLGroupBanData>::const_iterator entry = gdatap->mBanList.begin(); + for(; entry != gdatap->mBanList.end(); entry++) + { + LLNameListCtrl::NameItem ban_entry; + ban_entry.value = entry->first; + mBanList->addNameItemRow(ban_entry); + } + + mRefreshBanListButton->setEnabled(TRUE); +} + + +void LLPanelGroupBanListSubTab::setGroupID(const LLUUID& id) +{ if(mBanList) mBanList->deleteAllItems(); @@ -3050,3 +3081,5 @@ void LLPanelGroupBanListSubTab::setGroupID(const LLUUID& id) + + diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index 01c1d8c16d..2f37805f48 100755 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -335,7 +335,6 @@ public: // Triggered when group information changes in the group manager. virtual void update(LLGroupChange gc); - // virtual void draw(); static void onBanEntrySelect(LLUICtrl* ctrl, void* user_data); @@ -349,18 +348,24 @@ public: static void onDeleteBanEntry(void* user_data); void handleDeleteBanEntry(); - - virtual void setGroupID(const LLUUID& id); + + static void onRefreshBanList(void* user_data); + void handleRefreshBanList(); + + void onBanListCompleted(bool isComplete); protected: void populateBanList(); +public: + virtual void setGroupID(const LLUUID& id); protected: LLNameListCtrl* mBanList; LLButton* mCreateBanButton; LLButton* mDeleteBanButton; - + LLButton* mRefreshBanListButton; + }; #endif // LL_LLPANELGROUPROLES_H diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index 9817f70ac7..70d19de848 100755 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -7,132 +7,132 @@ top="0" name="roles_tab" width="304"> - <panel.string - name="default_needs_apply_text"> - There are unsaved changes - </panel.string> - <panel.string - name="want_apply_text"> - Do you want to save your changes? - </panel.string> - <panel.string - name="help_text" /> - <tab_container - border="false" - follows="left|top|right" - height="552" - halign="center" + <panel.string + name="default_needs_apply_text"> + There are unsaved changes + </panel.string> + <panel.string + name="want_apply_text"> + Do you want to save your changes? + </panel.string> + <panel.string + name="help_text" /> + <tab_container + border="false" + follows="left|top|right" + height="552" + halign="center" + layout="topleft" + left="0" + right="-1" + name="roles_tab_container" + tab_position="top" + tab_height="22" + tab_min_width="90" + top="0" + width="304"> + <panel + border="false" + follows="all" + height="303" + label="MEMBERS" layout="topleft" left="0" right="-1" - name="roles_tab_container" - tab_position="top" - tab_height="22" - tab_min_width="90" - top="0" - width="304"> - <panel - border="false" - follows="all" - height="303" - label="MEMBERS" - layout="topleft" - left="0" - right="-1" - help_topic="roles_members_tab" - name="members_sub_tab" - tool_tip="Members" - class="panel_group_members_subtab"> - <panel.string - name="help_text"> - You can add or remove Roles assigned to Members. -Select multiple Members by holding the Ctrl key and -clicking on their names. - </panel.string> - <panel.string - name="donation_area"> - [AREA] m² - </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 Members" - name="filter_input" /> - <name_list - column_padding="2" - draw_heading="true" - height="240" - follows="left|top|right" - layout="topleft" - left="0" - right="-1" - multi_select="true" - name="member_list" - short_names="false" - top_pad="5"> - <name_list.columns - label="Member" - name="name" - relative_width="0.44" /> - <name_list.columns - label="Donation" - name="donated" - relative_width="0.25" /> - <name_list.columns - label="Status" - name="online" - relative_width="0.14" /> - </name_list> - <button - height="23" - follows="top|left" - label="Invite" - left="5" - name="member_invite" - width="100" /> - <button - height="23" - label="Eject" - follows="top|left" - left_pad="10" - name="member_eject" - width="100" /> - <button - height="23" - label="Ban" - follows="top|left" - left_pad="10" - name="member_ban" - width="100" /> - </panel> - <panel - border="false" - height="303" - label="ROLES" - layout="topleft" - left="0" - right="-1" - help_topic="roles_roles_tab" - name="roles_sub_tab" - class="panel_group_roles_subtab"> - <!-- <button + help_topic="roles_members_tab" + name="members_sub_tab" + tool_tip="Members" + class="panel_group_members_subtab"> + <panel.string + name="help_text"> + You can add or remove Roles assigned to Members. + Select multiple Members by holding the Ctrl key and + clicking on their names. + </panel.string> + <panel.string + name="donation_area"> + [AREA] m² + </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 Members" + name="filter_input" /> + <name_list + column_padding="2" + draw_heading="true" + height="240" + follows="left|top|right" + layout="topleft" + left="0" + right="-1" + multi_select="true" + name="member_list" + short_names="false" + top_pad="5"> + <name_list.columns + label="Member" + name="name" + relative_width="0.44" /> + <name_list.columns + label="Donation" + name="donated" + relative_width="0.25" /> + <name_list.columns + label="Status" + name="online" + relative_width="0.14" /> + </name_list> + <button + height="23" + follows="top|left" + label="Invite" + left="5" + name="member_invite" + width="100" /> + <button + height="23" + label="Eject" + follows="top|left" + left_pad="10" + name="member_eject" + width="100" /> + <button + height="23" + label="Ban" + follows="top|left" + left_pad="10" + name="member_ban" + width="100" /> + </panel> + <panel + border="false" + height="303" + label="ROLES" + layout="topleft" + left="0" + right="-1" + help_topic="roles_roles_tab" + name="roles_sub_tab" + class="panel_group_roles_subtab"> + <!-- <button enabled="false" height="20" label="Show All" @@ -141,520 +141,535 @@ 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 - column_padding="0" - draw_heading="true" - draw_stripes="false" - heading_height="23" - height="132" - layout="topleft" - search_column="1" - left="0" - follows="left|top|right" - right="-1" - name="role_list" - top_pad="2" - width="310"> - <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 - follows="top|left" - height="23" - label="New Role" - layout="topleft" - left="0" - name="role_create" - width="120" /> - <button - height="23" - follows="top|left" - label="Delete Role" - layout="topleft" - left_pad="10" - name="role_delete" - width="120" /> - </panel> - <panel - border="false" - height="303" - label="ABILITIES" - layout="topleft" - left="0" - right="-1" - help_topic="roles_actions_tab" - name="actions_sub_tab" - class="panel_group_actions_subtab" - tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability." - width="310"> - <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" /> - <scroll_list - column_padding="0" - draw_stripes="true" - height="200" - follows="left|top|right" - layout="topleft" - left="0" - right="-1" - name="action_list" - search_column="2" - tool_tip="Select an Ability to view more details" - top_pad="5" - width="300"> - <scroll_list.columns - label="" - name="icon" - width="2" /> - <scroll_list.columns - label="" - name="checkbox" - width="20" /> - <scroll_list.columns - label="" - name="action" - width="270" /> - </scroll_list> - </panel> - <panel - border="false" - height="303" - label="BANNED AGENTS" - 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 agents 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> - <filter_editor - layout="topleft" - top="5" - left="5" - right="-5" - height="22" - search_button_visible="false" - follows="left|top|right" - label="Filter Bans" - name="filter_bans" /> - <name_list - column_padding="0" - draw_heading="true" - height="240" - 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.65" /> - <name_list.columns - label="Date Banned" - name="date_banned" - relative_width="0.35" /> - </name_list> - <button - follows="top|left" - height="23" - label="Ban!" - layout="topleft" - left="3" - name="ban_create" - width="120" /> - <button - height="23" - follows="top|left" - label="Unban!" - layout="topleft" - left_pad="10" - name="ban_delete" - width="120" /> - </panel> - </tab_container> + <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 + column_padding="0" + draw_heading="true" + draw_stripes="false" + heading_height="23" + height="132" + layout="topleft" + search_column="1" + left="0" + follows="left|top|right" + right="-1" + name="role_list" + top_pad="2" + width="310"> + <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 + follows="top|left" + height="23" + label="New Role" + layout="topleft" + left="0" + name="role_create" + width="120" /> + <button + height="23" + follows="top|left" + label="Delete Role" + layout="topleft" + left_pad="10" + name="role_delete" + width="120" /> + </panel> <panel - height="350" - background_visible="false" - bg_alpha_color="FloaterUnfocusBorderColor" + border="false" + height="303" + label="ABILITIES" layout="topleft" - follows="top|left|right" left="0" right="-1" - width="313" - mouse_opaque="false" - name="members_footer" - top="325" - visible="false"> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - top="8" - text_color="EmphasisColor" - name="static" - width="300"> - Assigned Roles - </text> - <scroll_list - draw_stripes="true" - follows="left|top|right" - height="150" - layout="topleft" - left="0" - right="-1" - name="member_assigned_roles" - top_pad="0"> - <scroll_list.columns - label="" - name="checkbox" - width="20" /> - <scroll_list.columns - label="" - name="role" - width="270" /> - </scroll_list> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - top_pad="5" - text_color="EmphasisColor" - name="static2" - width="285"> - Allowed Abilities - </text> - <scroll_list - draw_stripes="true" - follows="left|top|right" - height="150" - layout="topleft" - left="0" - right="-1" - name="member_allowed_actions" - search_column="2" - tool_tip="For details of each allowed ability see the abilities tab" - top_pad="0"> - <scroll_list.columns - label="" - name="icon" - width="2" /> - <scroll_list.columns - label="" - name="checkbox" - width="20" /> - <scroll_list.columns - label="" - name="action" - width="270" /> - </scroll_list> + help_topic="roles_actions_tab" + name="actions_sub_tab" + class="panel_group_actions_subtab" + tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability." + width="310"> + <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" /> + <scroll_list + column_padding="0" + draw_stripes="true" + height="200" + follows="left|top|right" + layout="topleft" + left="0" + right="-1" + name="action_list" + search_column="2" + tool_tip="Select an Ability to view more details" + top_pad="5" + width="300"> + <scroll_list.columns + label="" + name="icon" + width="2" /> + <scroll_list.columns + label="" + name="checkbox" + width="20" /> + <scroll_list.columns + label="" + name="action" + width="270" /> + </scroll_list> </panel> <panel - height="550" - background_visible="false" - bg_alpha_color="FloaterUnfocusBorderColor" + border="false" + height="303" + label="BANNED AGENTS" layout="topleft" - follows="top|left|right" left="0" right="-1" - width="313" - mouse_opaque="false" - name="roles_footer" - top_delta="0" - top="209" - visible="false"> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - top="5" - name="static" - width="300"> - Role Name - </text> - <line_editor - type="string" - height="20" - layout="topleft" - left="0" - follows="left|top|right" - right="-1" - max_length_bytes="20" - name="role_name" - top_pad="0" - width="300"> - </line_editor> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - name="static3" - top_pad="5" - width="300"> - Role Title - </text> - <line_editor - type="string" - height="20" - layout="topleft" - left="0" - follows="left|top|right" - right="-1" - max_length_bytes="20" - name="role_title" - top_pad="0" - width="300"> - </line_editor> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - name="static2" - top_pad="5" - width="200"> - Description - </text> - <text_editor - type="string" - layout="topleft" - left="0" - follows="left|top|right" - right="-1" - max_length="295" - height="35" - name="role_description" - top_pad="0" - width="300" - word_wrap="true"> - </text_editor> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - text_color="EmphasisColor" - name="static4" - top_pad="5" - width="300"> - Assigned Members - </text> - <name_list - draw_stripes="true" - height="128" - layout="topleft" - left="0" - follows="left|top|right" - right="-1" - name="role_assigned_members" - top_pad="0" - width="300" /> - <check_box - height="15" - label="Reveal members" - left="5" - layout="topleft" - name="role_visible_in_list" - tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." - top_pad="4" - width="300" /> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - text_color="EmphasisColor" - name="static5" - top_pad="2" - width="300"> - Allowed Abilities - </text> - <scroll_list - draw_stripes="true" - height="140" - layout="topleft" - left="0" - follows="left|top|right" - right="-1" - name="role_allowed_actions" - search_column="2" - tool_tip="For details of each allowed ability see the abilities tab" - top_pad="0" - width="300"> - <scroll_list.columns - label="" - name="icon" - width="2" /> - <scroll_list.columns - label="" - name="checkbox" - width="20" /> - <scroll_list.columns - label="" - name="action" - width="270" /> - </scroll_list> + help_topic="roles_banlist_tab" + name="banlist_sub_tab" + class="panel_group_banlist_subtab" + tool_tip="View the banned agents 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> + <filter_editor + layout="topleft" + top="5" + left="5" + right="-5" + height="22" + search_button_visible="false" + follows="left|top|right" + label="Filter Bans" + name="filter_bans" /> + <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.4" /> + <name_list.columns + label="Date Banned" + name="ban_date" + relative_width="0.3" /> + <name_list.columns + label="Reason" + name="ban_reason" /> + </name_list> + <button + follows="top|left" + height="23" + label="Ban!" + layout="topleft" + left="3" + name="ban_create" + tool_tip="Ban residents from your group" + width="120" /> + <button + follows="top|left" + height="23" + label="Unban!" + 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" + /> </panel> - <panel - height="424" - background_visible="false" - bg_alpha_color="FloaterUnfocusBorderColor" + </tab_container> + <panel + height="350" + background_visible="false" + bg_alpha_color="FloaterUnfocusBorderColor" + layout="topleft" + follows="top|left|right" + left="0" + right="-1" + width="313" + mouse_opaque="false" + name="members_footer" + top="325" + visible="false"> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + top="8" + text_color="EmphasisColor" + name="static" + width="300"> + Assigned Roles + </text> + <scroll_list + draw_stripes="true" + follows="left|top|right" + height="150" layout="topleft" - follows="top|left|right" left="0" right="-1" - width="313" - mouse_opaque="false" - name="actions_footer" - top_delta="0" - top="255" - visible="false"> - <text_editor - bg_readonly_color="Transparent" - text_readonly_color="EmphasisColor" - font="SansSerifSmall" - type="string" - enabled="false" - halign="left" - layout="topleft" + name="member_assigned_roles" + top_pad="0"> + <scroll_list.columns + label="" + name="checkbox" + width="20" /> + <scroll_list.columns + label="" + name="role" + width="270" /> + </scroll_list> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + top_pad="5" + text_color="EmphasisColor" + name="static2" + width="285"> + Allowed Abilities + </text> + <scroll_list + draw_stripes="true" follows="left|top|right" - left="0" - right="-1" - height="90" - max_length="512" - name="action_description" - top="0" - word_wrap="true"> - This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner. - </text_editor> - <text + height="150" + layout="topleft" + left="0" + right="-1" + name="member_allowed_actions" + search_column="2" + tool_tip="For details of each allowed ability see the abilities tab" + top_pad="0"> + <scroll_list.columns + label="" + name="icon" + width="2" /> + <scroll_list.columns + label="" + name="checkbox" + width="20" /> + <scroll_list.columns + label="" + name="action" + width="270" /> + </scroll_list> + </panel> + <panel + height="550" + background_visible="false" + bg_alpha_color="FloaterUnfocusBorderColor" + layout="topleft" + follows="top|left|right" + left="0" + right="-1" + width="313" + mouse_opaque="false" + name="roles_footer" + top_delta="0" + top="209" + visible="false"> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + top="5" + name="static" + width="300"> + Role Name + </text> + <line_editor + type="string" + height="20" + layout="topleft" + left="0" + follows="left|top|right" + right="-1" + max_length_bytes="20" + name="role_name" + top_pad="0" + width="300"> + </line_editor> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + name="static3" + top_pad="5" + width="300"> + Role Title + </text> + <line_editor + type="string" + height="20" + layout="topleft" + left="0" + follows="left|top|right" + right="-1" + max_length_bytes="20" + name="role_title" + top_pad="0" + width="300"> + </line_editor> + <text type="string" height="16" layout="topleft" follows="left|top" left="5" name="static2" - top_pad="1" - width="300"> - Roles with this ability - </text> - <scroll_list - height="172" - layout="topleft" - follows="left|top|right" - left="5" - right="-1" - name="action_roles" - top_pad="0" - width="300" /> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="5" - name="static3" top_pad="5" - width="300"> - Members with this ability - </text> - <name_list - height="122" - follows="left|top|right" - layout="topleft" - left="5" - right="-1" - name="action_members" - top_pad="0" - width="300" /> - </panel> + width="200"> + Description + </text> + <text_editor + type="string" + layout="topleft" + left="0" + follows="left|top|right" + right="-1" + max_length="295" + height="35" + name="role_description" + top_pad="0" + width="300" + word_wrap="true"> + </text_editor> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + text_color="EmphasisColor" + name="static4" + top_pad="5" + width="300"> + Assigned Members + </text> + <name_list + draw_stripes="true" + height="128" + layout="topleft" + left="0" + follows="left|top|right" + right="-1" + name="role_assigned_members" + top_pad="0" + width="300" /> + <check_box + height="15" + label="Reveal members" + left="5" + layout="topleft" + name="role_visible_in_list" + tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." + top_pad="4" + width="300" /> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + text_color="EmphasisColor" + name="static5" + top_pad="2" + width="300"> + Allowed Abilities + </text> + <scroll_list + draw_stripes="true" + height="140" + layout="topleft" + left="0" + follows="left|top|right" + right="-1" + name="role_allowed_actions" + search_column="2" + tool_tip="For details of each allowed ability see the abilities tab" + top_pad="0" + width="300"> + <scroll_list.columns + label="" + name="icon" + width="2" /> + <scroll_list.columns + label="" + name="checkbox" + width="20" /> + <scroll_list.columns + label="" + name="action" + width="270" /> + </scroll_list> + </panel> + <panel + height="424" + background_visible="false" + bg_alpha_color="FloaterUnfocusBorderColor" + layout="topleft" + follows="top|left|right" + left="0" + right="-1" + width="313" + mouse_opaque="false" + name="actions_footer" + top_delta="0" + top="255" + visible="false"> + <text_editor + bg_readonly_color="Transparent" + text_readonly_color="EmphasisColor" + font="SansSerifSmall" + type="string" + enabled="false" + halign="left" + layout="topleft" + follows="left|top|right" + left="0" + right="-1" + height="90" + max_length="512" + name="action_description" + top="0" + word_wrap="true"> + This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner. + </text_editor> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + name="static2" + top_pad="1" + width="300"> + Roles with this ability + </text> + <scroll_list + height="172" + layout="topleft" + follows="left|top|right" + left="5" + right="-1" + name="action_roles" + top_pad="0" + width="300" /> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="5" + name="static3" + top_pad="5" + width="300"> + Members with this ability + </text> + <name_list + height="122" + follows="left|top|right" + layout="topleft" + left="5" + right="-1" + name="action_members" + top_pad="0" + width="300" /> + </panel> </panel> |