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

menuProvider.py (6127B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\accessGroups\menuProvider.py
      2 from collections import defaultdict
      3 from carbon.common.script.sys.serviceConst import ROLEMASK_ELEVATEDPLAYER
      4 from carbonui.util.sortUtil import SortListOfTuples
      5 from eve.client.script.ui.shared.addressBookWindow import AddressBookWindow
      6 from eve.client.script.ui.structure.accessGroups.nameAndDescriptionWnd import AccessGroupsEditGroup
      7 from localization import GetByLabel
      8 from ownergroups.ownergroupConst import MEMBERSHIP_TYPE_MANAGER, MEMBERSHIP_TYPE_ADMIN, MEMBERSHIP_TYPE_EXCLUDED, MEMBERSHIP_TYPE_MEMBER, PUBLIC_MEMBER_ID
      9 from ownergroups.ownergroupsUIUtil import MENU_LABEL_PATH_DICT, ACCESS_SORT_ORDER
     10 import blue
     11 from carbonui.uicore import uicore
     12 from eveservices.menu import GetMenuService
     13 from menu import MenuLabel
     14 
     15 class MenuProvider(object):
     16 
     17     def GetMenuForMember(self, groupID, nodes, myMemberShipType, parentController, corpOwnedGroup):
     18         characterListDict = defaultdict(list)
     19         nodesByMemberID = {}
     20         for eachNode in nodes:
     21             memberID = eachNode.memberID
     22             nodesByMemberID[memberID] = eachNode
     23             for eachMembershipType in [MEMBERSHIP_TYPE_MANAGER, MEMBERSHIP_TYPE_ADMIN, MEMBERSHIP_TYPE_EXCLUDED]:
     24                 if not self._CanModifyOther(myMemberShipType, eachMembershipType):
     25                     continue
     26                 if eachNode.membershipType == eachMembershipType:
     27                     memberShipKey = (eachMembershipType, True)
     28                 else:
     29                     memberShipKey = (eachMembershipType, False)
     30                 characterListDict[memberShipKey].append(memberID)
     31 
     32         m = []
     33         for eachMembershipType, memberIDs in characterListDict.iteritems():
     34             membershipType, haveLevel = eachMembershipType
     35             charIDs = self._GetFilteredCharIDsBasedOnMembership(myMemberShipType, nodesByMemberID, doTypeCheck=True)
     36             label = GetByLabel(MENU_LABEL_PATH_DICT.get(eachMembershipType))
     37             if not charIDs:
     38                 continue
     39             if len(charIDs) > 1:
     40                 label += ' (%s)' % len(charIDs)
     41             sortValue = ACCESS_SORT_ORDER.index(membershipType)
     42             if haveLevel:
     43                 newMembershipType = MEMBERSHIP_TYPE_MEMBER
     44             else:
     45                 newMembershipType = membershipType
     46             m.append(((sortValue, label.lower()), (label, parentController.UpdateMembershipTypes, (groupID, charIDs, newMembershipType))))
     47 
     48         m = SortListOfTuples(m)
     49         removeText = GetByLabel('UI/Structures/AccessGroups/RemoveMember')
     50         removableMemberIDs = self._GetFilteredCharIDsBasedOnMembership(myMemberShipType, nodesByMemberID)
     51         if session.charid in nodesByMemberID:
     52             removableMemberIDs.add(session.charid)
     53         if not corpOwnedGroup and removableMemberIDs:
     54             if len(removableMemberIDs) > 1:
     55                 removeText += ' (%s)' % len(removableMemberIDs)
     56             m += [(removeText, parentController.RemoveMembers, (groupID, removableMemberIDs))]
     57         memberMenuOptions = self._GetGenericMemberMenuOptions(nodesByMemberID)
     58         if memberMenuOptions:
     59             m += [None] + memberMenuOptions
     60         return m
     61 
     62     def _GetFilteredCharIDsBasedOnMembership(self, ownMembership, membershipTypeByMemberID, doTypeCheck = False):
     63         filteredMemberIDs = set()
     64         for memberID, node in membershipTypeByMemberID.iteritems():
     65             if doTypeCheck and node.entryType in (PUBLIC_MEMBER_ID, const.typeAlliance, const.typeCorporation):
     66                 continue
     67             if ownMembership == MEMBERSHIP_TYPE_ADMIN or self._CanModifyOther(ownMembership, node.membershipType):
     68                 filteredMemberIDs.add(memberID)
     69 
     70         return filteredMemberIDs
     71 
     72     def _GetGenericMemberMenuOptions(self, nodesByMemberID):
     73         if len(nodesByMemberID) != 1:
     74             return []
     75         node = nodesByMemberID.values()[0]
     76         if node.ownerInfo is None:
     77             return []
     78         memberID = node.memberID
     79         typeID = node.ownerInfo.typeID
     80         if typeID == const.typeAlliance:
     81             menuLabel = MenuLabel('UI/Common/Alliance')
     82         elif typeID == const.typeCorporation:
     83             menuLabel = MenuLabel('UI/Common/Corporation')
     84         else:
     85             menuLabel = MenuLabel('UI/Common/Pilot', {'character': memberID})
     86         memberMenuOptions = [(menuLabel, ('isDynamic', GetMenuService().GetMenuFromItemIDTypeID, (memberID, typeID)))]
     87         return memberMenuOptions
     88 
     89     def _CanModifyOther(self, myMembership, theirMembership):
     90         if myMembership == MEMBERSHIP_TYPE_ADMIN:
     91             return True
     92         myIndex = ACCESS_SORT_ORDER.index(myMembership)
     93         theirIndex = ACCESS_SORT_ORDER.index(theirMembership)
     94         if myIndex < theirIndex:
     95             return True
     96         return False
     97 
     98     def GetMenuForGroupID(self, node, parentController):
     99         groupID = node.groupInfo.groupID
    100         accessRight = node.groupInfo.membershipType
    101         ownedByCorp = node.groupInfo.creatorID == session.corpid
    102         m = []
    103         if not ownedByCorp:
    104             m += [(MenuLabel('UI/Structures/AccessGroups/AddMembers'), self._OpenPeopleAndPlaces, ())]
    105         if accessRight == MEMBERSHIP_TYPE_ADMIN and not ownedByCorp:
    106             m += [(MenuLabel('UI/Structures/AccessGroups/EditGroup'), self._EditGroup, (parentController, groupID)), None, (MenuLabel('UI/Structures/AccessGroups/DeleteGroup'), parentController.Delete, (groupID,))]
    107         if session.role & ROLEMASK_ELEVATEDPLAYER:
    108             m.append(('GM: groupID: ' + str(groupID), blue.pyos.SetClipboardData, (str(groupID),)))
    109         return m
    110 
    111     def _OpenPeopleAndPlaces(self):
    112         wnd = AddressBookWindow.GetIfOpen()
    113         if wnd and not wnd.destroyed:
    114             wnd.Maximize()
    115         else:
    116             return uicore.cmd.OpenPeopleAndPlaces()
    117 
    118     def _EditGroup(self, parentController, groupID):
    119         groupInfo = parentController.GetMyGroupInfo(groupID)
    120         editWnd = AccessGroupsEditGroup(controller=parentController, groupInfo=groupInfo)