Example #1
0
 def PromptUserForQuantity(self, item, itemQuantity, sourceLocation=None):
     if self.locationFlag is not None and item.flagID != self.locationFlag or item.locationID != getattr(
             self._GetInvCacheContainer(), 'itemID', None):
         if self.hasCapacity:
             cap = self.GetCapacity()
             capacity = cap.capacity - cap.used
             itemvolume = cfg.GetItemVolume(item, 1) or 1
             maxQty = capacity / itemvolume + 1e-07
             maxQty = min(itemQuantity, int(maxQty))
         else:
             maxQty = itemQuantity
         if maxQty == itemQuantity:
             errmsg = localization.GetByLabel('UI/Common/NoMoreUnits')
         else:
             errmsg = localization.GetByLabel('UI/Common/NoRoomForMore')
         ret = uix.QtyPopup(int(maxQty), 0, int(maxQty), errmsg)
     else:
         ret = uix.QtyPopup(
             itemQuantity, 1, 1, None,
             localization.GetByLabel(
                 'UI/Inventory/ItemActions/DivideItemStack'))
     if item.locationID != session.stationid2:
         if not sm.GetService('invCache').IsInventoryPrimedAndListed(
                 item.locationID):
             log.LogError('Item disappeared before we could add it', item)
             return
     if ret is not None:
         return ret['qty']
Example #2
0
    def RemoveCommodity(self, selected):
        toMove = {}
        if len(selected) == 1 and uicore.uilib.Key(uiconst.VK_SHIFT):
            typeID = selected[0].typeID
            typeName = cfg.invtypes.Get(typeID).name
            ret = uix.QtyPopup(
                self.transferContents[typeID], 1, 1, None,
                localization.GetByLabel('UI/PI/Common/QuantityToRemove',
                                        typeName=typeName))
            if ret and 'qty' in ret:
                toMove[typeID] = min(self.transferContents[typeID],
                                     max(1, ret['qty']))
        else:
            for entry in selected:
                toMove[entry.typeID] = self.transferContents[entry.typeID]

        for typeID, qty in toMove.iteritems():
            self.transferContents[typeID] -= qty
            if self.transferContents[typeID] <= 0:
                del self.transferContents[typeID]
            if typeID not in self.pinContents:
                self.pinContents[typeID] = 0
            self.pinContents[typeID] += qty

        self.RefreshLists()
Example #3
0
    def AddCommodity(self, selected):
        toMove = {}
        if len(selected) == 1 and uicore.uilib.Key(uiconst.VK_SHIFT):
            typeID = selected[0].typeID
            typeName = cfg.invtypes.Get(typeID).name
            ret = uix.QtyPopup(
                self.pinContents[typeID], 1, 1, None,
                localization.GetByLabel('UI/PI/Common/QuantityToTransfer',
                                        typeName=typeName))
            if ret and 'qty' in ret:
                toMove[typeID] = min(self.pinContents[typeID],
                                     max(1, ret['qty']))
        else:
            for entry in selected:
                toMove[entry.typeID] = self.pinContents[entry.typeID]

        if self.destPin.IsConsumer():
            toMove = self._ApplyConsumerFilter(toMove)
            if not toMove:
                raise UserError('ConsumerCantAcceptCommodities')
        elif self.destPin.IsStorage():
            toMove = self._ApplyMaxAmountFilter(toMove)
        for typeID, qty in toMove.iteritems():
            self.pinContents[typeID] -= qty
            if self.pinContents[typeID] <= 0:
                del self.pinContents[typeID]
            if typeID not in self.transferContents:
                self.transferContents[typeID] = 0
            self.transferContents[typeID] += qty

        self.RefreshLists()
def SetDefaultDist(key):
    if not key:
        return
    minDist, maxDist = {'Orbit': (500, 1000000),
     'KeepAtRange': (50, 1000000),
     'WarpTo': (const.minWarpEndDistance, const.maxWarpEndDistance)}.get(key, (500, 1000000))
    current = sm.GetService('menu').GetDefaultActionDistance(key)
    current = current or ''
    fromDist = util.FmtAmt(minDist)
    toDist = util.FmtAmt(maxDist)
    if key == 'KeepAtRange':
        hint = localization.GetByLabel('UI/Inflight/SetDefaultKeepAtRangeDistanceHint', fromDist=fromDist, toDist=toDist)
        caption = localization.GetByLabel('UI/Inflight/SetDefaultKeepAtRangeDistance')
    elif key == 'Orbit':
        hint = localization.GetByLabel('UI/Inflight/SetDefaultOrbitDistanceHint', fromDist=fromDist, toDist=toDist)
        caption = localization.GetByLabel('UI/Inflight/SetDefaultOrbitDistance')
    elif key == 'WarpTo':
        hint = localization.GetByLabel('UI/Inflight/SetDefaultWarpWithinDistanceHint', fromDist=fromDist, toDist=toDist)
        caption = localization.GetByLabel('UI/Inflight/SetDefaultWarpWithinDistance')
    else:
        hint = ''
        caption = ''
    r = uix.QtyPopup(maxvalue=maxDist, minvalue=minDist, setvalue=current, hint=hint, caption=caption, label=None, digits=0)
    if r:
        newRange = max(minDist, min(maxDist, r['qty']))
        defaultRangeUtils.UpdateRangeSetting(key, newRange)
Example #5
0
def DeliverToCorpHangarFolder(invItemAndFlagList, invCacheSvc):
    if len(invItemAndFlagList) == 0:
        return
    invItems = []
    itemIDs = []
    for item in invItemAndFlagList:
        invItems.append(item[0])
        itemIDs.append(item[0].itemID)

    CheckItemsInSamePlace(invItems)
    fromID = invItems[0].locationID
    doSplit = bool(
        uicore.uilib.Key(uiconst.VK_SHIFT) and len(invItemAndFlagList) == 1
        and invItemAndFlagList[0][0].stacksize > 1)
    stationID = invCacheSvc.GetStationIDOfItem(invItems[0])
    if stationID is None:
        raise UserError('CanOnlyDoInStations')
    ownerID = invItems[0].ownerID
    flag = invItems[0].flagID
    deliverToFlag = invItemAndFlagList[0][1]
    qty = None
    if doSplit:
        invItem = invItems[0]
        ret = uix.QtyPopup(
            invItem.stacksize, 1, 1, None,
            localization.GetByLabel(
                'UI/Inventory/ItemActions/DivideItemStack'))
        if ret is not None:
            qty = ret['qty']
    invCacheSvc.GetInventoryMgr().DeliverToCorpHangar(fromID, stationID,
                                                      itemIDs, qty, ownerID,
                                                      deliverToFlag)
    InvalidateItemLocation(ownerID, stationID, flag, invCacheSvc)
    if ownerID == session.corpid:
        sm.ScatterEvent('OnCorpAssetChange', invItems, stationID)
    def CommoditiesToTransfer(self, commodities, toSpaceport = False):
        """ Returns a dictionary of the items and quanities we wish to transfer from a drag 
        and drop. Checks for shift drag and adjusts quantities. Raises an exception if the
        commodities won't fit in the destination. """
        toMove = {}
        for item in commodities:
            toMove[item.itemID, item.typeID] = util.KeyVal(name=cfg.invtypes.Get(item.typeID).name, itemID=item.itemID, typeID=item.typeID, quantity=item.quantity, item=getattr(item, 'item', item))

        if len(commodities) == 1:
            if toSpaceport:
                available = self.GetSpaceportCapacityAvailable()
                required = self.GetCommodityVolume(toMove, self.exportContents)
            else:
                available = self.GetCustomsCapacityAvailable()
                required = self.GetCommodityVolume(toMove, self.importContents)
            if required > 0 and uicore.uilib.Key(uiconst.VK_SHIFT) or required - available > 1e-05:
                selectedItem = commodities[0]
                itemID = selectedItem.itemID
                typeID = selectedItem.typeID
                typeName = cfg.invtypes.Get(typeID).name
                availableQuantity = min(selectedItem.quantity, int(available / required * selectedItem.quantity))
                if availableQuantity > 0:
                    ret = uix.QtyPopup(availableQuantity, 1, availableQuantity, None, localization.GetByLabel('UI/PI/Common/QuantityToTransfer', typeName=typeName))
                    if ret and 'qty' in ret:
                        toMove[itemID, typeID].quantity = min(availableQuantity, max(1, ret['qty']))
                    else:
                        toMove = {}
        if toSpaceport:
            self.CheckAvailableSpaceInSpaceport(toMove)
        else:
            self.CheckAvailableSpaceInCustoms(toMove)
        return toMove
def GetDefaultDist(key, itemID = None, minDist = 500, maxDist = 1000000):
    drange = sm.GetService('menu').GetDefaultActionDistance(key)
    if drange is None:
        dist = ''
        if itemID:
            bp = sm.StartService('michelle').GetBallpark()
            if not bp:
                return
            ball = bp.GetBall(itemID)
            if not ball:
                return
            dist = long(max(minDist, min(maxDist, ball.surfaceDist)))
        fromDist = util.FmtAmt(minDist)
        toDist = util.FmtAmt(maxDist)
        if key == 'KeepAtRange':
            hint = localization.GetByLabel('UI/Inflight/SetDefaultKeepAtRangeDistanceHint', fromDist=fromDist, toDist=toDist)
            caption = localization.GetByLabel('UI/Inflight/SetDefaultKeepAtRangeDistance')
        elif key == 'Orbit':
            hint = localization.GetByLabel('UI/Inflight/SetDefaultOrbitDistanceHint', fromDist=fromDist, toDist=toDist)
            caption = localization.GetByLabel('UI/Inflight/SetDefaultOrbitDistance')
        elif key == 'WarpTo':
            hint = localization.GetByLabel('UI/Inflight/SetDefaultWarpWithinDistanceHint', fromDist=fromDist, toDist=toDist)
            caption = localization.GetByLabel('UI/Inflight/SetDefaultWarpWithinDistance')
        else:
            hint = ''
            caption = ''
        r = uix.QtyPopup(maxvalue=maxDist, minvalue=minDist, setvalue=dist, hint=hint, caption=caption, label=None, digits=0)
        if r:
            newRange = max(minDist, min(maxDist, r['qty']))
            defaultRangeUtils.UpdateRangeSetting(key, newRange)
        else:
            return
    return drange
Example #8
0
    def RepairItems(self, items):
        totalcost = 0
        hasModule = False
        for item in items:
            damage = math.ceil(item.damage)
            totalcost = totalcost + math.ceil(
                item.damage) * item.costToRepairOneUnitOfDamage
            categoryID = evetypes.GetCategoryIDByGroup(item.groupID)
            if IsFittingModule(categoryID):
                hasModule = True

        btnSetup = {
            self.sr.selBtn: uiconst.UI_HIDDEN,
            self.sr.pickBtn: uiconst.UI_NORMAL
        }
        if hasModule:
            if eve.Message('RepairNonPartialConfirmation',
                           {'isk': util.FmtISK(totalcost)},
                           uiconst.YESNO) != uiconst.ID_YES:
                amount = None
            else:
                amount = {'qty': totalcost}
        else:
            amount = uix.QtyPopup(totalcost,
                                  0,
                                  totalcost,
                                  hint=localization.GetByLabel(
                                      'UI/Station/Repair/FullRepair',
                                      isk=totalcost),
                                  label=localization.GetByLabel(
                                      'UI/Station/Repair/RepairCostLabel'),
                                  digits=2)
        if amount is not None:
            itemIDs = []
            try:
                for item in items:
                    if self.invCache.IsItemLocked(item.itemID):
                        raise UserError(
                            'ItemLocked',
                            {'item': evetypes.GetName(item.typeID)})
                    if not self.invCache.TryLockItem(
                            item.itemID, 'lockUnassemblingItem', {}, 1):
                        raise UserError(
                            'ItemLocked',
                            {'item': evetypes.GetName(item.typeID)})
                    itemIDs.append(item.itemID)

                if len(itemIDs):
                    self.repairSvc.RepairItems(itemIDs, amount['qty'])
            finally:
                for itemID in itemIDs:
                    self.invCache.UnlockItem(itemID)

                sm.ScatterEvent('OnRepairDone', itemIDs)
                uthread.new(self.DisplayRepairQuote, self.GetAll())

        else:
            btnSetup[self.sr.repairAllBtn] = uiconst.UI_NORMAL
        self.DisplayButtons(btnSetup)
Example #9
0
 def SetOrigin(self, *args):
     ret = uix.QtyPopup(caption='Arena Origin',
                        label='itemID of the origin')
     if ret:
         self.originID = int(ret['qty'])
         if self.originID == 0:
             self.originID = None
     self.svc.Setup(self.originID)
     self.UpdateOriginText(self.originID)
Example #10
0
    def MultiMerge(self, data, mergeSourceID):
        if not self.CheckAndConfirmOneWayMove():
            return
        ret = None
        try:
            dataReduced = []
            for d in data:
                dataReduced.append((d[0], d[1], d[2]))

            self._GetInvCacheContainer().MultiMerge(dataReduced, mergeSourceID)
            return True
        except UserError as what:
            if len(data) == 1 and what.args[0] in (
                    'NotEnoughCargoSpace', 'NotEnoughCargoSpaceOverload',
                    'NotEnoughDroneBaySpace', 'NotEnoughDroneBaySpaceOverload',
                    'NoSpaceForThat', 'NoSpaceForThatOverload',
                    'NotEnoughChargeSpace'):
                cap = self.GetCapacity()
                free = cap.capacity - cap.used
                if free < 0:
                    raise
                item = data[0][3]
                if item.typeID == const.typePlasticWrap:
                    volume = sm.GetService('invCache').GetInventoryFromId(
                        item.itemID).GetCapacity().used
                else:
                    volume = cfg.GetItemVolume(item, 1)
                maxQty = min(item.stacksize, int(free / (volume or 1)))
                if maxQty <= 0:
                    if volume < 0.01:
                        req = 0.01
                    else:
                        req = volume
                    eve.Message('NotEnoughCargoSpaceFor1Unit', {
                        'type': item.typeID,
                        'free': free,
                        'required': req
                    })
                    return
                if self._DBLessLimitationsCheck(what.args[0], item):
                    return
                if maxQty == item.stacksize:
                    errmsg = localization.GetByLabel('UI/Common/NoMoreUnits')
                else:
                    errmsg = localization.GetByLabel('UI/Common/NoRoomForMore')
                ret = uix.QtyPopup(int(maxQty), 0, int(maxQty), errmsg)
                if ret is None:
                    quantity = None
                else:
                    quantity = ret['qty']
                if quantity:
                    self._GetInvCacheContainer().MultiMerge(
                        [(data[0][0], data[0][1], quantity)], mergeSourceID)
                    return True
            else:
                raise
            sys.exc_clear()
Example #11
0
 def AssembleMany(self, amount = None):
     self.NoPodCheck(wantNewShip=True)
     if amount is None:
         result = uix.QtyPopup(maxvalue=50, minvalue=1, caption='Mass Manufacture', label='', hint='Specify amount of ships to assemble (Max. 50).<br>Note: this function cannot be aborted once running.')
         if result:
             amount = result['qty']
         else:
             amount = 0
     for x in xrange(amount):
         self.Assemble()
Example #12
0
 def SplitStack(self):
     maxQty = self.sr.node.quantity
     msg = localization.GetByLabel('UI/Common/HowManyItems')
     ret = uix.QtyPopup(int(maxQty), 1, 1, msg)
     if ret:
         sm.GetService('contracts').SplitStack(self.sr.node.stationID,
                                               self.sr.node.itemID,
                                               ret['qty'],
                                               self.sr.node.forCorp,
                                               self.sr.node.flag)
Example #13
0
 def FitDrone(self, drone):
     if uicore.uilib.Key(uiconst.VK_SHIFT):
         result = uix.QtyPopup(maxvalue=100, minvalue=1, caption=drone.name, label=u'Quantity', hint='')
         if result:
             qty = result['qty']
         else:
             return
     else:
         qty = 1
     sm.RemoteSvc('slash').SlashCmd('/fit me %d %d' % (drone.typeID, qty))
Example #14
0
def SetDogmaAttribute(itemID, attrName, actualValue):
    ret = uix.QtyPopup(None,
                       None,
                       actualValue,
                       'Set Dogma Attribute for <b>%s</b>' % attrName,
                       'Set Dogma Attribute',
                       digits=5)
    if ret:
        cmd = '/dogma %s %s = %s' % (itemID, attrName, ret['qty'])
        SlashCmd(cmd)
Example #15
0
 def MassSpawnFitting(self, ownerID, fitting):
     quantity = uix.QtyPopup(
         maxvalue=50,
         minvalue=1,
         caption='Mass Spawn Fitting',
         label='',
         hint=
         'Specify amount of ships to spawn (Max. 50).<br>Note: this function cannot be aborted once running.'
     )
     self.SpawnFitting(ownerID, fitting, quantity['qty'])
 def OnGiveShares(self, *args):
     ret = uix.QtyPopup(
         2147483647, 1, '1',
         localization.GetByLabel(
             'UI/Corporations/EditMemberDialog/HowManySharesToGive',
             player=self.charID),
         localization.GetByLabel(
             'UI/Corporations/EditMemberDialog/GiveShares'))
     if ret is not None:
         amount = ret['qty']
         self.corp.MoveCompanyShares(eve.session.corpid, self.charID,
                                     amount)
def SetDogmaAttribute(itemID, attrName, actualValue):
    """
        Shortcut popup for setting dogma attributes for programmers
    """
    ret = uix.QtyPopup(None,
                       None,
                       actualValue,
                       'Set Dogma Attribute for <b>%s</b>' % attrName,
                       'Set Dogma Attribute',
                       digits=5)
    if ret:
        cmd = '/dogma %s %s = %s' % (itemID, attrName, ret['qty'])
        SlashCmd(cmd)
Example #18
0
 def UseFreeSkillPoints(self, skillTypeID, diff):
     if sm.StartService('skills').SkillInTraining():
         eve.Message('CannotApplyFreePointsWhileQueueActive')
         return
     freeSkillPoints = sm.StartService('skills').GetFreeSkillPoints()
     text = localization.GetByLabel('UI/SkillQueue/AddSkillMenu/UseSkillPointsWindow', skill=skillTypeID, skillPoints=int(diff))
     caption = localization.GetByLabel('UI/SkillQueue/AddSkillMenu/ApplySkillPoints')
     ret = uix.QtyPopup(maxvalue=freeSkillPoints, caption=caption, label=text)
     if ret is None:
         return
     sp = int(ret.get('qty', ''))
     currentSkillPoints = sm.GetService('skills').GetSkillPoints()
     sm.StartService('skills').ApplyFreeSkillPoints(skillTypeID, sp)
Example #19
0
 def _load(listOftypeIDs, what='/load', qty=1, maxValue=2147483647):
     if uicore.uilib.Key(uiconst.VK_SHIFT):
         result = uix.QtyPopup(maxvalue=maxValue,
                               minvalue=1,
                               caption=what,
                               label=u'Quantity',
                               hint='')
         if result:
             qty = result['qty']
         else:
             return
     for typeID in listOftypeIDs:
         sm.StartService('slash').SlashCmd('/load me %d %d' %
                                           (typeID, qty))
Example #20
0
    def DropLoadChargeToModule(self, itemID, chargeTypeID, chargeItems, qty = None, preferSingletons = False):
        if uicore.uilib.Key(uiconst.VK_SHIFT):
            maxQty = 0
            for item in chargeItems:
                if item.typeID != chargeTypeID:
                    continue
                maxQty += item.stacksize

            if maxQty == 0:
                errmsg = localization.GetByLabel('UI/Common/NoMoreUnits')
            else:
                errmsg = localization.GetByLabel('UI/Common/NoRoomForMore')
            qty = None
            ret = uix.QtyPopup(int(maxQty), 0, int(maxQty), errmsg)
            if ret is not None:
                qty = ret['qty']
                if qty <= 0:
                    return
        self.LoadChargeToModule(itemID, chargeTypeID, chargeItems=chargeItems, qty=qty, preferSingletons=preferSingletons)
Example #21
0
    def CommoditiesToTransfer(self, commodities, toSpaceport=False):
        toMove = {}
        for item in commodities:
            toMove[item.itemID, item.typeID] = util.KeyVal(
                name=evetypes.GetName(item.typeID),
                itemID=item.itemID,
                typeID=item.typeID,
                quantity=item.quantity,
                item=getattr(item, 'item', item))

        if len(commodities) == 1:
            if toSpaceport:
                available = self.GetSpaceportCapacityAvailable()
                required = self.GetCommodityVolume(toMove, self.exportContents)
            else:
                available = self.GetCustomsCapacityAvailable()
                required = self.GetCommodityVolume(toMove, self.importContents)
            if required > 0 and uicore.uilib.Key(
                    uiconst.VK_SHIFT) or required - available > 1e-05:
                selectedItem = commodities[0]
                itemID = selectedItem.itemID
                typeID = selectedItem.typeID
                typeName = evetypes.GetName(typeID)
                availableQuantity = min(
                    selectedItem.quantity,
                    int(available / required * selectedItem.quantity))
                if availableQuantity > 0:
                    ret = uix.QtyPopup(
                        availableQuantity, 1, availableQuantity, None,
                        localization.GetByLabel(
                            'UI/PI/Common/QuantityToTransfer',
                            typeName=typeName))
                    if ret and 'qty' in ret:
                        toMove[itemID,
                               typeID].quantity = min(availableQuantity,
                                                      max(1, ret['qty']))
                    else:
                        toMove = {}
        if toSpaceport:
            self.CheckAvailableSpaceInSpaceport(toMove)
        else:
            self.CheckAvailableSpaceInCustoms(toMove)
        return toMove
Example #22
0
def SplitStack(invItems, invCacheSvc):
    if len(invItems) != 1:
        raise UserError('CannotPerformOnMultipleItems')
    invItem = invItems[0]
    ret = uix.QtyPopup(
        invItem.stacksize, 1, 1, None,
        localization.GetByLabel('UI/Inventory/ItemActions/DivideItemStack'))
    if ret is not None:
        qty = ret['qty']
        stationID = invCacheSvc.GetStationIDOfItem(invItem)
        if stationID is None:
            raise UserError('CanOnlyDoInStations')
        flag = invItem.flagID
        invCacheSvc.GetInventoryMgr().SplitStack(stationID, invItem.itemID,
                                                 qty, invItem.ownerID)
        InvalidateItemLocation(invItem.ownerID, stationID, flag, invCacheSvc)
        if invItem.ownerID == session.corpid:
            invItem.quantity = invItem.quantity - qty
            sm.ScatterEvent('OnCorpAssetChange', [invItem], stationID)
Example #23
0
def DeliverToCorpMember(invItems, invCacheSvc):
    if len(invItems) == 0:
        return
    CheckItemsInSamePlace(invItems)
    corpMemberIDs = sm.GetService('corp').GetMemberIDs()
    cfg.eveowners.Prime(corpMemberIDs)
    memberslist = []
    for memberID in corpMemberIDs:
        if util.IsDustCharacter(memberID):
            continue
        who = cfg.eveowners.Get(memberID)
        memberslist.append([who.ownerName, memberID, who.typeID])

    doSplit = uicore.uilib.Key(
        uiconst.VK_SHIFT) and len(invItems) == 1 and invItems[0].stacksize > 1
    stationID = invCacheSvc.GetStationIDOfItem(invItems[0])
    if stationID is None:
        raise UserError('CanOnlyDoInStations')
    ownerID = invItems[0].ownerID
    flagID = invItems[0].flagID
    itemIDs = [item.itemID for item in invItems]
    res = uix.ListWnd(
        memberslist, 'character',
        localization.GetByLabel('UI/Corporations/Common/SelectCorpMember'),
        localization.GetByLabel(
            'UI/Corporations/Common/SelectCorpMemberToDeliverTo'), 1)
    if res:
        corporationMemberID = res[1]
        qty = None
        if doSplit:
            invItem = invItems[0]
            ret = uix.QtyPopup(
                invItem.stacksize, 1, 1, None,
                localization.GetByLabel(
                    'UI/Inventory/ItemActions/DivideItemStack'))
            if ret is not None:
                qty = ret['qty']
        invCacheSvc.GetInventoryMgr().DeliverToCorpMember(
            corporationMemberID, stationID, itemIDs, qty, ownerID, flagID)
        InvalidateItemLocation(ownerID, stationID, flagID, invCacheSvc)
        if ownerID == session.corpid:
            sm.ScatterEvent('OnCorpAssetChange', invItems, stationID)
Example #24
0
 def UseFreeSkillPoints(self, skillTypeID, diff):
     inTraining = self.SkillInTraining()
     if inTraining is not None and inTraining.typeID == skillTypeID:
         eve.Message('CannotApplyFreePointsWhileTrainingSkill')
         return
     freeSkillPoints = sm.StartService('skills').GetFreeSkillPoints()
     text = localization.GetByLabel(
         'UI/SkillQueue/AddSkillMenu/UseSkillPointsWindow',
         skill=skillTypeID,
         skillPoints=int(diff))
     caption = localization.GetByLabel(
         'UI/SkillQueue/AddSkillMenu/ApplySkillPoints')
     ret = uix.QtyPopup(maxvalue=freeSkillPoints,
                        caption=caption,
                        label=text)
     if ret is None:
         return
     sp = int(ret.get('qty', ''))
     sm.StartService('skills').ApplyFreeSkillPoints(skillTypeID, sp)
     sm.GetService('audio').SendUIEvent('st_allocate_skillpoints_play')
Example #25
0
    def Damage(self, items, *args):
        btnSetup = {
            self.sr.selBtn: uiconst.UI_HIDDEN,
            self.sr.pickBtn: uiconst.UI_DISABLED
        }
        temp = uix.QtyPopup(
            100,
            1,
            50,
            hint=localization.GetByLabel('UI/Station/Repair/ApplyDamage'))
        percentage = temp and temp['qty']
        if percentage == 0 or percentage is None:
            self.sr.pickBtn.state = uiconst.UI_NORMAL
            return
        itemIDAndAmountOfDamageList = []
        try:
            for item in items:
                if self.invCache.IsItemLocked(item.itemID):
                    continue
                if not self.invCache.TryLockItem(item.itemID,
                                                 'lockRepairingItem', {}, 1):
                    continue
                amount = int(
                    math.ceil(
                        float(percentage) / 100.0 *
                        float(item.maxHealth - item.damage)))
                itemIDAndAmountOfDamageList.append((item.itemID, amount))

            if len(itemIDAndAmountOfDamageList):
                self.repairSvc.DamageModules(itemIDAndAmountOfDamageList)
        finally:
            for itemID, amount in itemIDAndAmountOfDamageList:
                self.invCache.UnlockItem(itemID)

            uthread.new(self.DisplayRepairQuote, self.GetAll())
            btnSetup[self.sr.pickBtn] = uiconst.UI_NORMAL

        self.DisplayButtons(btnSetup)
 def OnClickOfferMoney(self, *etc):
     self.tradeSession.ToggleAccept(False)
     ret = uix.QtyPopup(sm.GetService('wallet').GetWealth(), 0, 0, digits=2)
     if ret is not None and self is not None and not self.destroyed:
         self.tradeSession.OfferMoney(ret['qty'])
Example #27
0
 def GMAddCommodity(self, pinID, typeID):
     quantity = uix.QtyPopup(None, 1, 100).get('qty', None)
     if not quantity:
         return
     self.remoteHandler.GMAddCommodity(pinID, typeID, quantity)
Example #28
0
    def OnDropData(self, dragObj, nodes):
        if self.blinkBG:
            uicore.animations.FadeOut(self.blinkBG, duration=0.2)
        if len(nodes) and getattr(nodes[0], 'scroll', None):
            nodes[0].scroll.ClearSelection()
            if not nodes[0].rec:
                return
            if not hasattr(nodes[0].rec, 'locationID'):
                return
            locationID = nodes[0].rec.locationID
            if locationID != self.rec.locationID:
                if not sm.GetService('crimewatchSvc').CheckCanTakeItems(
                        locationID):
                    sm.GetService('crimewatchSvc').SafetyActivated(
                        const.shipSafetyLevelPartial)
                    return
        if self.isShip:
            if invCtrl.ShipCargo(self.rec.itemID).OnDropData(nodes):
                self.Blink()
            return
        if self.isContainer:
            if invCtrl.StationContainer(self.rec.itemID).OnDropData(nodes):
                self.Blink()
            return
        mergeToMe = []
        notUsed = []
        sourceID = None
        for node in nodes:
            if getattr(node, '__guid__',
                       None) not in ('xtriui.ShipUIModule', 'xtriui.InvItem',
                                     'listentry.InvItem'):
                notUsed.append(node)
                continue
            if node.item.itemID == self.sr.node.item.itemID:
                notUsed.append(node)
                continue
            if node.item.typeID == self.sr.node.item.typeID and not isinstance(
                    self.sr.node.item.itemID, tuple) and not getattr(
                        node.item, 'singleton',
                        False) and not self.sr.node.item.singleton:
                mergeToMe.append(node.item)
            else:
                notUsed.append(node)
            if sourceID is None:
                sourceID = node.rec.locationID

        if sourceID is None:
            log.LogInfo('OnDropData: Moot operation with ', nodes)
            return
        if mergeToMe:
            containerItem = sm.GetService('invCache').GetInventoryFromId(
                self.rec.locationID).GetItem()
            if session.solarsystemid and containerItem.itemID == mergeToMe[
                    0].locationID and containerItem.ownerID not in (
                        session.charid, session.corpid, session.allianceid):
                return
        shift = uicore.uilib.Key(uiconst.VK_SHIFT)
        mergeData = []
        stateMgr = sm.StartService('godma').GetStateManager()
        dogmaLocation = sm.GetService('clientDogmaIM').GetDogmaLocation()
        singletons = []
        for invItem in mergeToMe:
            if invItem.stacksize == 1:
                quantity = 1
            elif shift:
                ret = uix.QtyPopup(
                    invItem.stacksize, 1, 1, None,
                    localization.GetByLabel(
                        'UI/Inventory/ItemActions/StackItems'))
                if ret is not None:
                    quantity = ret['qty']
                else:
                    quantity = None
            else:
                quantity = invItem.stacksize
            if not quantity:
                continue
            if invItem.categoryID == const.categoryCharge and IsShipFittingFlag(
                    invItem.flagID):
                if type(invItem.itemID) is tuple:
                    flag = invItem.itemID[1]
                    chargeIDs = dogmaLocation.GetSubLocationsInBank(
                        invItem.locationID, invItem.itemID)
                    if chargeIDs:
                        for chargeID in chargeIDs:
                            charge = dogmaLocation.dogmaItems[chargeID]
                            mergeData.append(
                                (charge.itemID, self.rec.itemID,
                                 dogmaLocation.GetAttributeValue(
                                     chargeID,
                                     const.attributeQuantity), charge))

                    else:
                        mergeData.append((invItem.itemID, self.rec.itemID,
                                          quantity, invItem))
                else:
                    crystalIDs = dogmaLocation.GetCrystalsInBank(
                        invItem.locationID, invItem.itemID)
                    if crystalIDs:
                        for crystalID in crystalIDs:
                            crystal = dogmaLocation.GetItem(crystalID)
                            if crystal.singleton:
                                singletons.append(crystalID)
                            else:
                                mergeData.append(
                                    (crystal.itemID, self.rec.itemID,
                                     crystal.stacksize, crystal))

                    else:
                        mergeData.append((invItem.itemID, self.rec.itemID,
                                          quantity, invItem))
            else:
                mergeData.append(
                    (invItem.itemID, self.rec.itemID, quantity, invItem))

        if singletons and util.GetAttrs(self, 'sr', 'node', 'rec', 'flagID'):
            flag = self.sr.node.rec.flagID
            inv = sm.GetService('invCache').GetInventoryFromId(
                self.rec.locationID)
            if inv:
                inv.MultiAdd(singletons,
                             sourceID,
                             flag=flag,
                             fromManyFlags=True)
        if mergeData and util.GetAttrs(self, 'sr', 'node', 'container',
                                       'invController', 'MultiMerge'):
            invController = self.sr.node.container.invController
            sm.ScatterEvent('OnInvContDragExit', invController.GetInvID(), [])
            if invController.MultiMerge(mergeData, sourceID):
                sm.GetService('audio').SendUIEvent('ui_state_stack')
                self.Blink()
        if notUsed and util.GetAttrs(self, 'sr', 'node', 'container',
                                     'OnDropData'):
            self.sr.node.container.OnDropData(dragObj, notUsed)