accessGroupMemberCont.py (6788B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\accessGroups\accessGroupMemberCont.py 2 from carbonui.primitives.container import Container 3 from carbonui.util.bunch import Bunch 4 from carbonui.util.various_unsorted import SortListOfTuples 5 from eve.client.script.ui.control.eveScroll import Scroll 6 from eve.client.script.ui.structure import ChangeSignalConnect 7 from eve.client.script.ui.structure.accessGroups.accessMemberEntry import AccessMemberEntry 8 from eve.client.script.ui.structure.accessGroups.ownerGroupUtils import GetOwnerIDsAndMembershipTypeFromNodes, GetOwnerTypeSortValue 9 from localization import GetByLabel 10 from ownergroups.ownergroupConst import PUBLIC_MEMBER_ID 11 from ownergroups.ownergroupsUIUtil import ACCESS_SORT_ORDER 12 from player_messaging.client.ui_message import prompt_player_fsd_dialog 13 14 class AccessGroupMemberCont(Container): 15 16 def ApplyAttributes(self, attributes): 17 self.currentGroupID = None 18 self.groupMemberEntries = {} 19 self.controller = attributes.controller 20 self.ChangeSignalConnection(connect=True) 21 Container.ApplyAttributes(self, attributes) 22 self.scroll = Scroll(name='memberScroll', parent=self) 23 self.scroll.sr.content.OnDropData = self.OnDropDataInScroll 24 25 def ChangeSignalConnection(self, connect = True): 26 signalAndCallback = [(self.controller.on_group_selected, self.LoadGroup), 27 (self.controller.on_groupmembers_changed, self.OnGroupMembersChanged), 28 (self.controller.on_groupmembers_removed, self.OnGroupMembersRemoved), 29 (self.controller.on_group_updated, self.UpdateGroup)] 30 ChangeSignalConnect(signalAndCallback, connect) 31 32 def UpdateGroup(self, groupID): 33 if groupID == self.currentGroupID: 34 self.LoadGroup(groupID) 35 36 def LoadGroup(self, groupID): 37 myGroupInfo = self.controller.GetMyGroupInfo(groupID) 38 if myGroupInfo is None: 39 return 40 self.groupMemberEntries = {} 41 self.currentGroupID = groupID 42 searchResults = self.controller.GetCurrentSearchResults() 43 try: 44 groupMembers = self.GetFilteredMembers(groupID, searchResults) 45 except UserError as e: 46 self.scroll.Load(contentList=[], noContentHint='UI/Structures/AccessGroups/MemberlistNotLoaded') 47 prompt_player_fsd_dialog(e.msg, e.dict) 48 return 49 50 toPrime = groupMembers.keys() 51 cfg.eveowners.Prime(toPrime) 52 scrollList = [] 53 for memberID, membershipType in groupMembers.iteritems(): 54 node, sortValue = self.GetNodeAndSortValueForAccessEntry(groupID, memberID, membershipType) 55 self.groupMemberEntries[memberID] = node 56 scrollList.append((sortValue, node)) 57 58 scrollList = SortListOfTuples(scrollList) 59 if searchResults: 60 noContentHint = GetByLabel('UI/Structures/AccessGroups/SearchNoContentHint') 61 else: 62 noContentHint = '' 63 self.scroll.Load(contentList=scrollList, noContentHint=noContentHint) 64 65 def GetFilteredMembers(self, groupID, searchResults): 66 groupMembers = self.controller.GetMembers(groupID) 67 if searchResults: 68 matchedMembers, _ = searchResults 69 return {memberID:m for memberID, m in groupMembers.iteritems() if memberID in matchedMembers} 70 else: 71 return groupMembers 72 73 def GetSortValue(self, membershipType, ownerName, entryType): 74 ownerTypeSortValue = GetOwnerTypeSortValue(entryType) 75 accessSortValue = ACCESS_SORT_ORDER.index(membershipType) 76 sortValue = (accessSortValue, ownerTypeSortValue, ownerName.lower()) 77 return sortValue 78 79 def GetNodeAndSortValueForAccessEntry(self, groupID, memberID, membershipType): 80 ownerInfo, ownerName, entryType = self._GetOwnerInfoAndName(memberID) 81 sortValue = self.GetSortValue(membershipType, ownerName, entryType) 82 node = Bunch(decoClass=AccessMemberEntry, ownerName=ownerName, itemID=memberID, memberID=memberID, membershipType=membershipType, entryType=entryType, controller=self.controller, groupID=groupID, ownerInfo=ownerInfo, OnDropData=self.OnDropDataInScroll) 83 node.sort_sortValue = sortValue 84 return (node, sortValue) 85 86 def _GetOwnerInfoAndName(self, memberID): 87 if memberID == PUBLIC_MEMBER_ID: 88 return (None, GetByLabel('UI/Structures/AccessGroups/PublicUser'), PUBLIC_MEMBER_ID) 89 else: 90 ownerInfo = cfg.eveowners.Get(memberID) 91 ownerName = ownerInfo.name 92 return (ownerInfo, ownerName, ownerInfo.typeID) 93 94 def UpdateAccessMemberEntryNode(self, memberID, membershipType): 95 node = self.groupMemberEntries[memberID] 96 node.membershipType = membershipType 97 ownerInfo, ownerName, entryType = self._GetOwnerInfoAndName(memberID) 98 sortValue = self.GetSortValue(membershipType, ownerName, entryType) 99 node.sort_sortValue = sortValue 100 if node.panel: 101 node.panel.Load(node) 102 103 def OnGroupMembersChangedSameMembershipType(self, groupID, memberIDs, membershipType, *args): 104 membershipTypesByMemberID = {x:membershipType for x in memberIDs} 105 self.OnGroupMembersChanged(groupID, membershipTypesByMemberID) 106 107 def OnGroupMembersChanged(self, groupID, *args): 108 membershipTypesByMemberID = self.controller.GetMembers(groupID) 109 if self.currentGroupID != groupID: 110 return 111 entriesToAdd = [] 112 for eachMemberID, membershipType in membershipTypesByMemberID.iteritems(): 113 if eachMemberID in self.groupMemberEntries: 114 self.UpdateAccessMemberEntryNode(eachMemberID, membershipType) 115 else: 116 node, sortValue = self.GetNodeAndSortValueForAccessEntry(groupID, eachMemberID, membershipType) 117 self.groupMemberEntries[eachMemberID] = node 118 entriesToAdd.append(node) 119 120 self.scroll.AddNodes(0, entriesToAdd) 121 self.scroll.Sort('sortValue') 122 123 def OnGroupMembersRemoved(self, groupID, memberIDs): 124 if self.currentGroupID != groupID: 125 return 126 nodesToRemove = [] 127 for eachMemberID in memberIDs: 128 node = self.groupMemberEntries.pop(eachMemberID, None) 129 if node: 130 nodesToRemove.append(node) 131 132 self.scroll.RemoveNodes(nodesToRemove) 133 134 def OnDropDataInScroll(self, dragObj, nodes): 135 membershipTypesByMemberID = GetOwnerIDsAndMembershipTypeFromNodes(nodes) 136 if membershipTypesByMemberID: 137 self.controller.AddMembers(self.currentGroupID, membershipTypesByMemberID) 138 139 def Close(self, *args): 140 self.ChangeSignalConnection(connect=False) 141 Container.Close(self)