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