Exemple #1
0
    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()
Exemple #2
0
 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))
Exemple #3
0
 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))
Exemple #4
0
 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
Exemple #5
0
 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()
Exemple #6
0
 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
Exemple #7
0
    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
Exemple #8
0
    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()
Exemple #9
0
    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)
Exemple #10
0
 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