chargesBrowserUtil.py (7608B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\browsers\chargesBrowserUtil.py 2 import blue 3 import carbonui.const as uiconst 4 import evetypes 5 import metaGroups 6 from carbonui.primitives.line import Line 7 from carbonui.util.sortUtil import SortListOfTuples 8 from eve.client.script.ui.control.entries.item import Item 9 from eve.client.script.ui.control.entries.line import Line as ListentryLine 10 from eve.client.script.ui.control.entries.util import GetFromClass 11 from eve.client.script.ui.control.listgroup import ListGroup 12 from eve.client.script.ui.shared.fittingScreen import AMMO_FAVORITE_CONFIG 13 from eve.client.script.ui.shared.fittingScreen.settingUtil import GetAllAmmoFavorites 14 from eve.client.script.ui.shared.market.entries import GetHintWithAvgPrice 15 from eve.common.lib import appConst as const 16 from eveservices.menu import GetMenuService 17 from fsdBuiltData.common.iconIDs import GetIconFile 18 from localization import GetByLabel 19 from menu import MenuLabel 20 21 class ChargeBrowserListProvider(object): 22 23 def __init__(self, dblClickFunc, onDropDataFunc, reloadFunc): 24 self.dblClickFunc = dblClickFunc 25 self.onDropDataFunc = onDropDataFunc 26 self.reloadFunc = reloadFunc 27 28 def GetChargesScrollList(self, moduleTypeID, chargeTypeIDs): 29 godma = sm.GetService('godma') 30 scrolllist = [] 31 factionChargeIDs = set() 32 otherChargeIDs = set() 33 for eachTypeID in chargeTypeIDs: 34 metaGroup = evetypes.GetMetaGroupID(eachTypeID) 35 if metaGroup == const.metaGroupFaction: 36 factionChargeIDs.add(eachTypeID) 37 else: 38 otherChargeIDs.add(eachTypeID) 39 40 if chargeTypeIDs: 41 scrolllist.append(GetFromClass(ListGroup, {'GetSubContent': self._GetFavoritesContent, 42 'label': GetByLabel('UI/Fitting/FittingWindow/FavoriteAmmo'), 43 'id': ('ammobrowser', 'favorites'), 44 'showlen': 0, 45 'chargeTypeIDs': chargeTypeIDs, 46 'sublevel': 0, 47 'showicon': 'hide', 48 'state': 'locked', 49 'BlockOpenWindow': True, 50 'DropData': self._DropOnFavorites, 51 'moduleTypeID': moduleTypeID})) 52 scrolllist.append(GetFromClass(HorizontalLine, {'height': 2})) 53 scrolllist += self._GetScrollListFromTypeList(moduleTypeID, otherChargeIDs) 54 if factionChargeIDs: 55 scrolllist.append(GetFromClass(ListGroup, {'GetSubContent': self._GetAmmoSubContent, 56 'label': metaGroups.get_name(const.metaGroupFaction), 57 'id': ('ammobrowser', 'factionChargeIDs'), 58 'showlen': 0, 59 'chargeTypeIDs': factionChargeIDs, 60 'sublevel': 0, 61 'showicon': GetIconFile(metaGroups.get_icon_id(const.metaGroupFaction)), 62 'state': 'locked', 63 'BlockOpenWindow': True, 64 'moduleTypeID': moduleTypeID})) 65 return scrolllist 66 67 def _GetFavoritesContent(self, nodedata, *args): 68 moduleTypeID = nodedata.moduleTypeID 69 typeIDs = nodedata.chargeTypeIDs 70 favoriteChargeIDs = set() 71 allFavorites = GetAllAmmoFavorites() 72 for eachTypeID in typeIDs: 73 if eachTypeID in allFavorites: 74 favoriteChargeIDs.add(eachTypeID) 75 76 return self._GetScrollListFromTypeList(moduleTypeID, favoriteChargeIDs, sublevel=1, isFavorite=True) 77 78 def _GetAmmoSubContent(self, nodedata, *args): 79 moduleTypeID = nodedata.moduleTypeID 80 typeIDs = nodedata.chargeTypeIDs 81 return self._GetScrollListFromTypeList(moduleTypeID, typeIDs, sublevel=1) 82 83 def _GetScrollListFromTypeList(self, moduleTypeID, chargeTypeIDs, sublevel = 0, isFavorite = False): 84 scrolllist = [] 85 for eachTypeID in chargeTypeIDs: 86 label = evetypes.GetName(eachTypeID) 87 techLevel = evetypes.GetTechLevel(eachTypeID) 88 scrolllist.append(((techLevel, label), GetFromClass(ChargeItem, {'label': label, 89 'typeID': eachTypeID, 90 'itemID': None, 91 'getIcon': 1, 92 'OnDropData': self.onDropDataFunc, 93 'OnDblClick': (self.dblClickFunc, moduleTypeID, eachTypeID), 94 'sublevel': sublevel, 95 'GetMenu': self._GetChargeMenu, 96 'isFavorite': isFavorite, 97 'ignoreRightClick': True}))) 98 99 scrolllist = SortListOfTuples(scrolllist) 100 return scrolllist 101 102 def _GetChargeMenu(self, entry, *args): 103 node = entry.sr.node 104 typeID = entry.typeID 105 selectedNodes = node.scroll.GetSelectedNodes(node) 106 removableTypeIDs = set() 107 notRemovableTypeIDs = set() 108 for eachNode in selectedNodes: 109 if node.get('isFavorite', False): 110 removableTypeIDs.add(eachNode.typeID) 111 else: 112 notRemovableTypeIDs.add(eachNode.typeID) 113 114 m = [] 115 if notRemovableTypeIDs: 116 m += [(MenuLabel('UI/Fitting/FittingWindow/AddToFavorites'), self._AddToFavorite, (notRemovableTypeIDs,))] 117 if removableTypeIDs: 118 m += [(MenuLabel('UI/Fitting/FittingWindow/RemoveFromFavorites'), self._RemoveFromFavorite, (removableTypeIDs,))] 119 if len(selectedNodes) == 1: 120 m += GetMenuService().GetMenuFromItemIDTypeID(None, typeID, includeMarketDetails=True) 121 return m 122 123 def _RemoveFromFavorite(self, removableTypeIDs): 124 allFavoritesSet = GetAllAmmoFavorites() 125 for eachTypeID in removableTypeIDs: 126 allFavoritesSet.discard(eachTypeID) 127 128 settings.user.ui.Set(AMMO_FAVORITE_CONFIG, allFavoritesSet) 129 self.reloadFunc() 130 131 def _AddToFavorite(self, typeIDsSet): 132 allFavoritesSet = GetAllAmmoFavorites() 133 allFavoritesSet.update(typeIDsSet) 134 settings.user.ui.Set(AMMO_FAVORITE_CONFIG, allFavoritesSet) 135 self.reloadFunc() 136 137 def _DropOnFavorites(self, dragObj, nodes): 138 typeIDs = set() 139 for eachNode in nodes: 140 try: 141 if not IsCharge(eachNode.typeID): 142 continue 143 typeIDs.add(eachNode.typeID) 144 except: 145 continue 146 147 self._AddToFavorite(typeIDs) 148 149 150 def IsCharge(typeID): 151 return evetypes.GetCategoryID(typeID) == const.categoryCharge 152 153 154 class HorizontalLine(ListentryLine): 155 156 def ApplyAttributes(self, attributes): 157 ListentryLine.ApplyAttributes(self, attributes) 158 Line(parent=self, align=uiconst.TOTOP, color=(1, 1, 1, 0.07)) 159 160 161 def GetValidChargeTypeIDs(typeList, searchFittingHelper, moduleFilterSettings = None, chargeFilterSettings = None): 162 filterString = chargeFilterSettings.text_filter.get().lower() if chargeFilterSettings else None 163 ret = set() 164 for typeID in typeList: 165 try: 166 blue.pyos.BeNice() 167 if not filterString or filterString in searchFittingHelper.GetTypeName(typeID): 168 ret.add(typeID) 169 except Exception: 170 pass 171 172 return ret 173 174 175 def GetValidSpecialAssetsChargeTypeIDs(typeList, searchFittingHelper, moduleFilterSettings = None, chargeFilterSettings = None): 176 validTypeIDs = set() 177 for typeID in typeList: 178 try: 179 if searchFittingHelper.IsCharge(typeID): 180 validTypeIDs.add(typeID) 181 except Exception: 182 pass 183 184 return GetValidChargeTypeIDs(validTypeIDs, searchFittingHelper, moduleFilterSettings, chargeFilterSettings) 185 186 187 class ChargeItem(Item): 188 189 def GetHint(self): 190 return GetHintWithAvgPrice(self.sr.node)