NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)