def SortIconsBy(self, sortby, direction): self.sortIconsBy = sortby self.sortIconsDir = direction settings.user.ui.Set('containerSortIconsBy_%s' % self.name, (sortby, direction)) sortData = [] for rec in self.items: if rec is None: continue name = uiutil.StripTags(uix.GetItemName(rec).lower()) type = uiutil.StripTags(uix.GetCategoryGroupTypeStringForItem(rec).lower()) id = rec.itemID qty = 0 if not (rec.singleton or rec.typeID in (const.typeBookmark,)): qty = rec.stacksize if sortby == 'name': sortKey = (name, type, qty, id, rec) elif sortby == 'qty': sortKey = (qty, type, name, id, rec) elif sortby == 'type': sortKey = (type, name, qty, id, rec) else: log.LogError('Unknown sortkey used in container sorting', sortby, direction) continue sortData.append((sortKey, rec)) locCmpFunc = localization.util.GetSortFunc(localization.util.GetLanguageID()) def _sort(left, right): if len(left) == 0: return 0 if isinstance(left[0], basestring): res = locCmpFunc(left[0], right[0]) else: res = cmp(left[0], right[0]) if res == 0: return _sort(left[1:], right[1:]) return res sortedList = sorted(sortData, cmp=_sort, key=lambda x: x[0]) sortedList = [ x[1] for x in sortedList ] if direction: sortedList.reverse() self.items = sortedList self.RefreshView()
def OnMouseEnter(self, *args): if uicore.uilib.leftbtn: return SE_BaseClassCore.OnMouseEnter(self, *args) self.sr.hint = '' if getattr(self, 'rec', None): TryGhostFitItemOnMouseAction(self.rec) if self.sr.node and self.sr.node.viewMode == 'icons': self.sr.hint = '%s%s' % ( [uix.GetItemQty(self.sr.node, 'ln') + ' - ', ''][bool( self.rec.singleton)], uix.GetItemName(self.sr.node.item, self.sr.node))
def OnMouseEnter(self, *args): if uicore.uilib.leftbtn: return SE_BaseClassCore.OnMouseEnter(self, *args) self.sr.hint = '' wnd = FittingWindow.GetIfOpen() if wnd is not None: if getattr(self, 'rec', None): wnd.HiliteFitting(self.rec) if self.sr.node and self.sr.node.viewMode == 'icons': self.sr.hint = '%s%s' % ( [uix.GetItemQty(self.sr.node, 'ln') + ' - ', ''][bool( self.rec.singleton)], uix.GetItemName(self.sr.node.item, self.sr.node))
def GetValue(self, condition, item): if condition == ITEM_CATEGORY: return item.categoryID if condition == ITEM_GROUP: return item.groupID if condition == ITEM_VOLUME: return GetItemVolume(item) if condition == ITEM_PRICE: price = util.GetAveragePrice(item) if price is not None: price = util.RoundISK(price) return price if condition == ITEM_STACKSIZE: return item.stacksize if condition == ITEM_ASSEMBLED: return item.singleton if condition == ITEM_SLOT: effects = cfg.dgmtypeeffects.get(item.typeID, []) return [effect.effectID for effect in effects] if condition == ITEM_NAME: name = uix.GetItemName(item) return StripTags(name) if condition == ITEM_METAGROUP: ret = int( sm.GetService('godma').GetTypeAttribute( item.typeID, const.attributeMetaGroupID, 0)) if not ret: ret = int( sm.GetService('godma').GetTypeAttribute( item.typeID, const.attributeTechLevel, 1)) if ret == 3: ret = 14 return ret if condition == ITEM_METALEVEL: return int( sm.GetService('godma').GetTypeAttribute( item.typeID, const.attributeMetaLevel, 0)) if condition == ITEM_POWER: return int( sm.GetService('godma').GetTypeAttribute( item.typeID, const.attributePower, 0)) if condition == ITEM_CPU: return int( sm.GetService('godma').GetTypeAttribute( item.typeID, const.attributeCpu, 0)) if condition == ITEM_BLUEPRINT_COPY: return item.singleton == const.singletonBlueprintCopy
def OnMouseEnter(self, *args): if uicore.uilib.leftbtn: return self.sr.hint = '' wnd = form.FittingWindow.GetIfOpen() if wnd is not None: if getattr(self, 'rec', None): wnd.HiliteFitting(self.rec) if self.sr.node: if self.sr.node.viewMode == 'icons': self.sr.hint = '%s%s' % ( [uix.GetItemQty(self.sr.node, 'ln') + ' - ', ''][bool( self.rec.singleton)], uix.GetItemName(self.sr.node.item, self.sr.node)) else: eve.Message('ListEntryEnter') self.ShowHilited()
def GetHint(self, *args): ret = uix.GetItemName(self.sr.node.item, self.sr.node) if self.rec.stacksize > 1: quantity = uix.GetItemQty(self.sr.node, 'ln') ret = localization.GetByLabel('UI/Inventory/QuantityAndName', quantity=quantity, name=ret) marketPrice = util.GetAveragePrice(self.rec) if marketPrice is None: marketPriceStr = localization.GetByLabel( 'UI/Inventory/PriceUnavailable') else: marketPriceStr = util.FmtISKAndRound(marketPrice) ret += '<br>' + localization.GetByLabel( 'UI/Inventory/ItemEstimatedPrice', estPrice=marketPriceStr) if self.rec.stacksize > 1 and marketPrice: ret += '<br>' + localization.GetByLabel( 'UI/Inventory/ItemEstimatedPriceStack', estPrice=util.FmtISKAndRound(marketPrice * self.rec.stacksize)) return ret
def GetContainerGroupEntries(self, containersInfo, scrollID): scrollList = [] cfg.evelocations.Prime(containersInfo.keys()) for containerID, infoOnContainer in containersInfo.iteritems(): containerItem, itemsInContainer = infoOnContainer containerName = uix.GetItemName(containerItem) containerData = { 'GetSubContent': self.GetContainerSubContent, 'label': containerName, 'MenuFunction': self.GetContainerMenu, 'groupItems': itemsInContainer, 'id': ('assetslocations_%s' % containerID, containerID), 'state': 'locked', 'showicon': 'hide', 'showlen': 1, 'itemID': containerID, 'item': containerItem, 'sublevel': 1, 'scrollID': scrollID, 'OnDblClick': self.OnDblClickContainer } scrollList.append(listentry.Get('Group', data=containerData)) return scrollList
def Load(self, node): self.sr.node = node data = node self.sr.node.__guid__ = self.__guid__ self.sr.node.itemID = node.item.itemID self.id = node.item.itemID self.rec = node.item self.typeID = node.item.typeID self.isShip = self.rec.categoryID == const.categoryShip and self.rec.singleton self.isUnassembledShip = self.rec.categoryID == const.categoryShip and not self.rec.singleton self.isStation = self.rec.categoryID == const.categoryStation and self.rec.groupID == const.groupStation self.isContainer = self.rec.groupID in ( const.groupWreck, const.groupCargoContainer, const.groupSecureCargoContainer, const.groupAuditLogSecureContainer, const.groupFreightContainer) and self.rec.singleton self.isUnassembledContainer = self.rec.groupID in ( const.groupWreck, const.groupCargoContainer, const.groupSecureCargoContainer, const.groupAuditLogSecureContainer, const.groupFreightContainer) and not self.rec.singleton self.isHardware = node.invtype.Group().Category().IsHardware() self.sr.node.isBlueprint = node.invtype.Group( ).categoryID == const.categoryBlueprint if self.sr.node.isBlueprint: self.sr.node.isCopy = self.sr.node.isBlueprint and self.rec.singleton == const.singletonBlueprintCopy if self.sr.node is None: return self.Reset() self.name = uix.GetItemName(node.item, self.sr.node) self.quantity = self.rec.stacksize listFlag = self.sr.node.viewMode in ('list', 'details') if util.GetActiveShip() == self.sr.node.item.itemID: if self.activeShipHighlite is None: if listFlag: padding = (0, 0, 0, 1) else: padding = (-5, -3, -5, -6) self.activeShipHighlite = uiprimitives.Container( name='activeShipHighlite', parent=self, idx=-1) uicontrols.Frame( texturePath= 'res:/UI/Texture/Classes/InvItem/bgSelected.png', color=COLOR_ACTIVESHIP, parent=self.activeShipHighlite, padding=padding) uicontrols.Frame(parent=self.activeShipHighlite, color=COLOR_ACTIVESHIP, padding=padding, opacity=0.4) elif self.activeShipHighlite: self.activeShipHighlite.Close() self.activeShipHighlite = None self.UpdateHiliteFillColor() if self.sr.node.Get('selected', 0): self.Select(animate=False) else: self.Deselect(animate=False) attribs = node.Get('godmaattribs', {}) self.powerType = None for icon in (self.sr.ammosize_icon, self.sr.slotsize_icon, self.sr.contraband_icon): if icon: icon.Hide() if self.isHardware: if self.sr.node.viewMode != 'list': if attribs.has_key(const.attributeChargeSize): self.ConstructAmmoSizeIcon() self.sr.ammosize_icon.rectLeft = [ 0, 16, 32, 48, 64 ][int(attribs[const.attributeChargeSize]) - 1] elif attribs.has_key(const.attributeRigSize): self.ConstructAmmoSizeIcon() self.sr.ammosize_icon.rectLeft = [ 0, 16, 32, 48, 64 ][int(attribs[const.attributeRigSize]) - 1] for effect in cfg.dgmtypeeffects.get(self.rec.typeID, []): if effect.effectID in (const.effectRigSlot, const.effectHiPower, const.effectMedPower, const.effectLoPower): if self.sr.node.viewMode != 'list': effinfo = cfg.dgmeffects.Get(effect.effectID) iconNo = { const.effectRigSlot: 'ui_38_16_124', const.effectHiPower: 'ui_38_16_123', const.effectMedPower: 'ui_38_16_122', const.effectLoPower: 'ui_38_16_121' }[effect.effectID] self.ConstructSlotSizeIcon() self.sr.slotsize_icon.LoadIcon(iconNo, ignoreSize=True) self.powerType = effect.effectID continue if self.sr.node.viewMode != 'list' and effect.effectID == const.effectSubSystem and const.attributeSubSystemSlot in attribs: subsystemFlag = attribs.get(const.attributeSubSystemSlot, None) iconNo = 'ui_38_16_42' self.ConstructSlotSizeIcon() self.sr.slotsize_icon.LoadIcon(iconNo, ignoreSize=True) elif self.rec.groupID == const.groupVoucher: if self.rec.typeID != const.typeBookmark: self.subTypeID = self.sr.node.voucher.GetTypeInfo()[1] elif self.rec.categoryID == const.categoryCharge and attribs.has_key( const.attributeChargeSize): self.ConstructAmmoSizeIcon() self.sr.ammosize_icon.rectLeft = [ 0, 16, 32, 48, 64 ][int(attribs[const.attributeChargeSize]) - 1] if 0 < len(self.sr.node.invtype.Illegality( )) and self.sr.node.invtype.Illegality().get( sm.GetService('map').GetItem( eve.session.solarsystemid2).factionID, None) is not None: self.ConstructContrabandIcon() if listFlag: self.sr.label.width = uicore.desktop.width if self.sr.node.viewMode == 'icons': self.LoadMainIcon() self.UpdateLabel() self.LoadTechLevelIcon(node.item.typeID) locked = node.Get('locked', 0) viewOnly = node.Get('viewOnly', 0) self.SetLockState(locked) if not locked: self.SetState(viewOnly) if self.isStation: self.DisableDrag() self.OnInvClipboardChanged()
def UpdateAll(self, updateActions=0): if not self or self.destroyed: return if eve.session.shipid in self.itemIDs: self.itemIDs.remove(eve.session.shipid) bp = sm.GetService('michelle').GetBallpark() if not self.ImVisible() or not bp or not self.itemIDs: self.sr.updateTimer = None self.FlushContent() return goForSlim = 1 slimItems = [] invItems = [] fleetMember = None for itemID in self.itemIDs: blue.pyos.BeNice() if sm.GetService('fleet').IsMember(itemID): fleetMember = cfg.eveowners.Get(itemID) break slimItem = None if goForSlim: slimItem = uix.GetBallparkRecord(itemID) if slimItem: slimItems.append(slimItem) if not slimItem: invItem = self.TryGetInvItem(itemID) if invItem: invItems.append(invItem) goForSlim = 0 if not slimItems and not invItems and not fleetMember: self.itemIDs = [] self.lastActionSerial = None self.lastActionDist = None self.FlushContent() return if not self or self.destroyed: return text = '' blue.pyos.BeNice() updateActions = updateActions or 0 typeID = None fleetSlim = None if fleetMember: multi = 1 text = fleetMember.name typeID = fleetMember.typeID fleetSlim = self.GetSlimItemForCharID(fleetMember.id) blue.pyos.BeNice() elif invItems: text = uix.GetItemName(invItems[0]) typeID = invItems[0].typeID multi = len(invItems) blue.pyos.BeNice() elif slimItems: text = uix.GetSlimItemName(slimItems[0]) typeID = slimItems[0].typeID multi = len(slimItems) if multi == 1: slimItem = slimItems[0] itemID = slimItem.itemID ball = bp.GetBall(itemID) if not ball: self.itemIDs = [] self.sr.updateTimer = None self.FlushContent() return dist = ball.surfaceDist if dist is not None: md = None myball = bp.GetBall(eve.session.shipid) if myball: md = myball.mode text += '<br>' + localization.GetByLabel( 'UI/Inflight/ActiveItem/SelectedItemDistance', distToItem=util.FmtDist(dist, maxdemicals=1)) if not self.lastActionDist or md != self.lastActionDist[ 1] or self.CheckDistanceUpdate( self.lastActionDist[0], dist): self.lastActionDist = (dist, md) updateActions = 1 sec = slimItem.securityStatus if sec: text += '<br>' + localization.GetByLabel( 'UI/Inflight/ActiveItem/SelectedItemSecurity', secStatus=sec) blue.pyos.BeNice() corpID = None charID = None categoryID = None bountyItemID = None bountyTypeID = None bountySlim = None displayUtilMenu = False if multi > 1: text += '<br>' + localization.GetByLabel( 'UI/Inflight/ActiveItem/MultipleItems', itemCount=multi) blue.pyos.BeNice() elif multi == 1: if slimItems: slim = slimItems[0] if slim.categoryID == const.categoryShip: if util.IsCharacter(slim.charID): charID = slim.charID categoryID = slim.categoryID if slim.categoryID == const.categoryEntity: bountyTypeID = slim.typeID elif slim.charID: bountyItemID = slim.charID bountySlim = slim killRightID, price = self.bountySvc.GetBestKillRight( slim.charID) self.utilMenu.UpdateKillRightInfo(killRightID, price, slim.charID, slim.itemID) stateSvc = sm.GetService('state') if killRightID is not None and not ( stateSvc.CheckSuspect(slim) or stateSvc.CheckCriminal(slim)): displayUtilMenu = True blue.pyos.BeNice() self.sr.utilMenuArea.display = displayUtilMenu self.utilMenu.display = displayUtilMenu if self.lastIcon != (typeID, itemID, charID): uthread.pool('ActiveItem::GetIcon', self.GetIcon, typeID, itemID, charID, corpID, categoryID) self.lastIcon = (typeID, itemID, charID) else: self.sr.iconpar.state = uiconst.UI_PICKCHILDREN if categoryID == const.categoryShip and charID: self.sr.chariconpar.state = uiconst.UI_PICKCHILDREN bountyHint = None reducedBountyIndication = None if (bountyItemID, bountyTypeID) != self.lastBountyCheck: bounty, bountyHint, reducedBountyIndication = self.CheckBounty( bountyTypeID, bountySlim) blue.pyos.BeNice() if bounty: self.bounty = localization.GetByLabel('UI/Common/BountyAmount', bountyAmount=util.FmtISK( bounty, 0)) else: self.bounty = None self.lastBountyCheck = (bountyItemID, bountyTypeID) self.lastBountyInfo = (bountyHint, reducedBountyIndication) else: bountyHint, reducedBountyIndication = self.lastBountyInfo if self.bounty: text += '<br>' text += self.bounty if reducedBountyIndication: text += reducedBountyIndication if updateActions: self.ReloadActions(slimItems, invItems, fleetMember, fleetSlim) else: self.CheckActions(1) self.SetText(text, bountyHint) self.ShowNoSelectedHint() blue.pyos.BeNice() self.laseUpdateWidth = self.absoluteRight - self.absoluteLeft if not self.sr.updateTimer and not invItems: self.sr.updateTimer = base.AutoTimer(500, self.UpdateAll)
def QuickFilter(self, item): name = uix.GetItemName(item).lower() typename = cfg.invtypes.Get(item.typeID).name.lower() input = self.quickFilterInput.lower() return name.find(input) + 1 or typename.find(input) + 1