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

favorites.py (7335B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\pointerTool\favorites.py
      2 from carbon.common.script.sys.service import ROLE_GML, ROLE_WORLDMOD
      3 from eve.client.script.ui.shared.pointerTool.link import parse_help_pointer_url, SCHEME_HELP_POINTER
      4 from localization import GetByLabel
      5 from menu import MenuLabel
      6 from player_messaging.client.ui_message import prompt_player_fsd_dialog
      7 from utillib import KeyVal
      8 import blue
      9 import carbonui.const as uiconst
     10 ROOT_GROUPID = 0
     11 FAVORITES_SETTING_CONFIG_NAME = 'uiHelpPointerFavorites'
     12 
     13 def GetFavoriteKeyVal(**kwargs):
     14     return KeyVal(groupID=kwargs.get('groupID'), groupName=kwargs.get('groupName', ''), subGroups=kwargs.get('subGroups', []), uiElementNames=kwargs.get('uiElementNames', []) or [], subLevel=kwargs.get('subLevel', 0))
     15 
     16 
     17 def __GetMaxSubGroupID(parentGroup):
     18     if parentGroup.subGroups:
     19         return max((x.groupID for x in parentGroup.subGroups))
     20     return 0
     21 
     22 
     23 def __AddSubGroup(parentGroup, newGroup):
     24     parentGroup.subGroups.append(newGroup)
     25 
     26 
     27 def __RemoveSubGroup(parentGroup, groupID):
     28     for eachGroup in parentGroup.subGroups:
     29         if eachGroup.groupID == groupID:
     30             if prompt_player_fsd_dialog('AskDeleteFavoritePointerGroup', {'groupName': eachGroup.groupName}, uiconst.YESNO) == uiconst.ID_YES:
     31                 parentGroup.subGroups.remove(eachGroup)
     32                 return True
     33 
     34     return False
     35 
     36 
     37 def __AddUIElementsWithIdx(parentGroup, uiElements, idx = -1):
     38     if len(uiElements) == 1 and uiElements[0] in parentGroup.uiElementNames and idx > -1:
     39         uiElement = uiElements[0]
     40         currentIdx = parentGroup.uiElementNames.index(uiElement)
     41         if idx == currentIdx:
     42             return
     43         newIdx = idx if currentIdx > idx else idx - 1
     44         parentGroup.uiElementNames.remove(uiElement)
     45         parentGroup.uiElementNames.insert(newIdx, uiElement)
     46         return
     47     uiElementsToAdd = [ x for x in uiElements if x not in parentGroup.uiElementNames ]
     48     if not uiElementsToAdd:
     49         return
     50     if idx == -1 or idx is None:
     51         parentGroup.uiElementNames.extend(uiElementsToAdd)
     52     elif len(uiElements) == 1:
     53         parentGroup.uiElementNames.insert(idx, uiElementsToAdd[0])
     54     else:
     55         newList = parentGroup.uiElementNames[:idx] + uiElements + parentGroup.uiElementNames[idx:]
     56         parentGroup.uiElementNames = newList
     57 
     58 
     59 def __RemoveUiElements(parentGroup, uiElements):
     60     wasRemoved = False
     61     for element in uiElements:
     62         if element in parentGroup.uiElementNames:
     63             parentGroup.uiElementNames.remove(element)
     64             wasRemoved = True
     65 
     66     return wasRemoved
     67 
     68 
     69 def AddFavoriteGroup(*args):
     70     folderNameLabel = GetByLabel('UI/Market/Marketbase/FolderName')
     71     typeFolderNameLabel = GetByLabel('UI/Market/Marketbase/TypeFolderName')
     72     from eve.client.script.ui.util.utilWindows import NamePopup
     73     newName = NamePopup(folderNameLabel, typeFolderNameLabel, maxLength=30)
     74     if newName is None:
     75         return
     76     rootGroup = GetFavoriteRootGroup()
     77     maxGroupID = __GetMaxSubGroupID(rootGroup)
     78     newGroup = GetFavoriteKeyVal(groupID=maxGroupID + 1, groupName=newName, subLevel=1)
     79     __AddSubGroup(rootGroup, newGroup)
     80     TrySaveGroup(rootGroup)
     81     sm.ScatterEvent('OnFavoriteGroupChanged')
     82 
     83 
     84 def RemoveSubGroup(groupID):
     85     rootGroup = GetFavoriteRootGroup()
     86     wasRemoved = __RemoveSubGroup(rootGroup, groupID)
     87     if wasRemoved:
     88         TrySaveGroup(rootGroup)
     89         sm.ScatterEvent('OnFavoriteGroupChanged')
     90 
     91 
     92 def OnDropDataInFavorite(idFromNode, nodes):
     93     groupID = idFromNode[1]
     94     AddElementsToGroup(groupID, nodes)
     95 
     96 
     97 def AddElementsToGroup(groupID, nodes, idx = -1):
     98     groupToAddTo = FindGroupWithGroupID(groupID)
     99     uiElementsToAdd = FindUIElementsFromNodes(nodes)
    100     if uiElementsToAdd and groupToAddTo:
    101         __AddUIElementsWithIdx(groupToAddTo, uiElementsToAdd, idx=idx)
    102         TrySaveGroup(groupToAddTo)
    103         sm.ScatterEvent('OnFavoriteGroupChanged')
    104 
    105 
    106 def FindUIElementsFromNodes(nodes):
    107     pointerObjects = FindPointerObjectsForNodes(nodes)
    108     if not pointerObjects:
    109         return []
    110     uiElementNames = [ getattr(x, 'uiElementName', None) for x in pointerObjects ]
    111     uiElementNames = filter(None, uiElementNames)
    112     return uiElementNames
    113 
    114 
    115 def RemoveElementFromGroup(groupID, nodes):
    116     groupToRemoveFrom = FindGroupWithGroupID(groupID)
    117     uiElementsToRemove = FindUIElementsFromNodes(nodes)
    118     if uiElementsToRemove and groupToRemoveFrom:
    119         wasRemoved = __RemoveUiElements(groupToRemoveFrom, uiElementsToRemove)
    120         if wasRemoved:
    121             TrySaveGroup(groupToRemoveFrom)
    122             sm.ScatterEvent('OnFavoriteGroupChanged')
    123 
    124 
    125 def FindPointerObjectsForNodes(nodes):
    126     allPointers = sm.GetService('helpPointer').GetAllPointersByElementName()
    127     pointerObjects = []
    128     for x in nodes:
    129         po = getattr(x, 'pointerObjects', [])
    130         if po:
    131             pointerObjects += po
    132         guid = getattr(x, '__guid__', None)
    133         if guid == 'TextLink' and x.url.startswith(SCHEME_HELP_POINTER):
    134             uiElementName = parse_help_pointer_url(x.url)
    135             if uiElementName and uiElementName in allPointers:
    136                 pointerObjects.append(allPointers[uiElementName])
    137 
    138     return pointerObjects
    139 
    140 
    141 def FindGroupWithGroupID(groupID):
    142     rootGroup = GetFavoriteRootGroup()
    143     if groupID == ROOT_GROUPID:
    144         return rootGroup
    145     for each in rootGroup.subGroups:
    146         if each.groupID == groupID:
    147             return each
    148 
    149 
    150 def TrySaveGroup(groupKeyVal):
    151     if groupKeyVal.groupID != ROOT_GROUPID:
    152         return
    153     settings.user.ui.Set(FAVORITES_SETTING_CONFIG_NAME, groupKeyVal)
    154 
    155 
    156 def GetFavoriteGroups():
    157     rootGroup = GetFavoriteRootGroup()
    158     return rootGroup.subGroups
    159 
    160 
    161 def GetFavoriteGroupMenu(node):
    162     m = []
    163     m += [(MenuLabel('UI/HelpPointers/Wnd/AddGroup'), AddFavoriteGroup, (ROOT_GROUPID,))]
    164     return m
    165 
    166 
    167 def GetFavoriteSubGroupMenu(groupData):
    168     groupID = groupData['groupID']
    169     m = [(MenuLabel('UI/HelpPointers/Wnd/DeleteGroup'), RemoveSubGroup, (groupID,))]
    170     return m
    171 
    172 
    173 def GetFavoriteRootGroup():
    174     rootGroup = settings.user.ui.Get(FAVORITES_SETTING_CONFIG_NAME, None)
    175     if rootGroup is None:
    176         return GetFavoriteKeyVal(groupID=0)
    177     return GetFavoriteKeyVal(**rootGroup.__dict__)
    178 
    179 
    180 def AddToFavoriteGroup(groupID, node):
    181     AddElementsToGroup(groupID, [node])
    182 
    183 
    184 def GetNormalPointerEntryMenu(entry):
    185     menu = []
    186     node = entry.sr.node
    187     if session.role & (ROLE_GML | ROLE_WORLDMOD):
    188         menu += [('GM: Unique UI Name: ' + node.uiElementName, blue.pyos.SetClipboardData, (node.uiElementName,))]
    189     menu += [(MenuLabel('UI/HelpPointers/Wnd/AddToFavoriteRoot'), AddToFavoriteGroup, (0, node))]
    190     if GetFavoriteGroups():
    191         menu += [(MenuLabel('UI/HelpPointers/Wnd/AddToFavoriteSubGroup'), ('isDynamic', ShowFavoriteGroups, (node,)))]
    192     return menu
    193 
    194 
    195 def ShowFavoriteGroups(node):
    196     m = []
    197     for eachGroup in GetFavoriteGroups():
    198         m += [(eachGroup.groupName, AddToFavoriteGroup, (eachGroup.groupID, node))]
    199 
    200     return m
    201 
    202 
    203 def GetFavoritePointerEntryMenu(entry):
    204     node = entry.sr.node
    205     parentGroupID = node.parentGroup.groupID
    206     m = []
    207     m += [(MenuLabel('UI/HelpPointers/Wnd/RemoveFromGroup'), RemoveElementFromGroup, (parentGroupID, [node]))]
    208     return m