NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

priceLabel.py (7186B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\priceLabel.py
      2 from collections import defaultdict
      3 import evetypes
      4 import eveui
      5 from carbonui import const as uiconst
      6 from carbonui.control.scrollContainer import ScrollContainer
      7 from carbonui.primitives.container import Container
      8 from carbonui.primitives.flowcontainer import FlowContainer
      9 from carbonui.primitives.layoutGrid import LayoutGrid
     10 from carbonui.primitives.sprite import Sprite
     11 from carbonui.control.buttonIcon import ButtonIcon
     12 from carbonui.control.button import Button
     13 from eve.client.script.ui.control.eveIcon import Icon
     14 from eve.client.script.ui.control.eveLabel import EveLabelLarge, EveLabelMedium
     15 from eve.client.script.ui.shared.market import GetTypeIDFromDragItem
     16 from eve.client.script.ui.util.uix import GetTechLevelIcon
     17 from eve.common.lib.appConst import singletonBlueprintCopy
     18 from eve.common.script.util.eveFormat import FmtISKAndRound
     19 from inventorycommon.typeHelpers import GetAveragePrice
     20 from localization import GetByLabel
     21 from shipfitting.multiBuyUtil import BuyMultipleTypesWithQty
     22 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst
     23 MILLION = 1000000
     24 BILLION = 1000000000
     25 
     26 class LabelPriceLabelCont(Container):
     27     default_align = uiconst.TOBOTTOM
     28     default_height = 40
     29 
     30     def ApplyAttributes(self, attributes):
     31         Container.ApplyAttributes(self, attributes)
     32         self.priceByTypeID = defaultdict(float)
     33         self.qtyByTypeID = defaultdict(int)
     34         self.label = EveLabelLarge(name='priceLabel', parent=self, align=uiconst.BOTTOMRIGHT, text='', pos=(30, 1, 0, 0), state=uiconst.UI_NORMAL)
     35         self.label.LoadTooltipPanel = self.LoadTooltipPanel
     36         cartBtn = ButtonIcon(name='cartBtn', parent=self, align=uiconst.BOTTOMRIGHT, pos=(4, 0, 24, 24), iconSize=24, texturePath='res:/UI/Texture/classes/MultiSell/multiBuy.png', hint=GetByLabel('UI/Market/MarketQuote/OpenMultiBuy'), func=self.BuyAll, uniqueUiName=pConst.UNIQUE_NAME_SHOW_BUY_ALL_BTN)
     37         cartBtn.OnDropData = self.OnDropOnMultibuyBtn
     38 
     39     @eveui.skip_if_destroyed
     40     def UpdateLabel(self, controller):
     41         fittedItems = controller.dogmaLocation.GetFittedItemsToShip()
     42         cargoItems = controller.dogmaLocation.GetHoldItems(const.flagCargo)
     43         fighterItems = controller.dogmaLocation.GetHoldItems(const.flagFighterBay)
     44         droneItems = controller.dogmaLocation.GetHoldItems(const.flagDroneBay)
     45         totalPrice = 0.0
     46         self.priceByTypeID.clear()
     47         self.qtyByTypeID.clear()
     48         shipItem = controller.dogmaLocation.GetShip()
     49         for eachDict in (fittedItems,
     50          cargoItems,
     51          fighterItems,
     52          droneItems):
     53             for itemID, dogmaItem in eachDict.iteritems():
     54                 if itemID == session.charid:
     55                     continue
     56                 if getattr(dogmaItem, 'flagID', None) == const.flagHiddenModifers:
     57                     continue
     58                 if getattr(dogmaItem, 'singleton', None) == singletonBlueprintCopy:
     59                     continue
     60                 typeID = dogmaItem.typeID
     61                 stacksize = getattr(dogmaItem, 'stacksize', None) or getattr(dogmaItem.invItem, 'stacksize', 1)
     62                 self.qtyByTypeID[typeID] += stacksize
     63 
     64         for typeID, qty in self.qtyByTypeID.iteritems():
     65             marketPrice = GetAveragePrice(typeID)
     66             if marketPrice:
     67                 totalPrice += qty * marketPrice
     68                 self.priceByTypeID[typeID] = marketPrice
     69 
     70         if totalPrice:
     71             marketPriceStr = self._FmtAmt(totalPrice)
     72         else:
     73             marketPriceStr = GetByLabel('UI/Generic/NotAvailableShort')
     74         self.label.text = marketPriceStr
     75 
     76     def _FmtAmt(self, amount):
     77         if amount < MILLION:
     78             return FmtISKAndRound(amount, showFractionsAlways=False)
     79         if amount > BILLION:
     80             amount = float(amount) / BILLION
     81             return GetByLabel('UI/Fitting/FittingWindow/FmtBillionIskShort', amount=amount)
     82         amount = float(amount) / MILLION
     83         return GetByLabel('UI/Fitting/FittingWindow/FmtMillionIskShort', amount=amount)
     84 
     85     def LoadTooltipPanel(self, tooltipPanel, *args):
     86         tooltipPanel.state = uiconst.UI_NORMAL
     87         tooltipPanel.LoadGeneric2ColumnTemplate()
     88         tooltipPanel.AddLabelLarge(text=GetByLabel('UI/Fitting/FittingWindow/TotalEstimatedPrice', bold=True))
     89         tooltipPanel.AddLabelLarge(text=self.label.text, align=uiconst.CENTERRIGHT, bold=True)
     90         tooltipPanel.AddDivider()
     91         scrollcontainer = ScrollContainer(align=uiconst.TOTOP, height=100)
     92         tooltipPanel.AddCell(cellObject=scrollcontainer, colSpan=2)
     93         layoutGrid = LayoutGrid(parent=scrollcontainer, columns=4, cellSpacing=(20, 2), padTop=4)
     94         sortedList = [ (typeID, qty, self.priceByTypeID.get(typeID, None)) for typeID, qty in self.qtyByTypeID.iteritems() ]
     95         sortedList.sort(key=lambda x: x[2], reverse=True)
     96         for typeID, qty, price in sortedList:
     97             self.CreateIcon(layoutGrid, typeID)
     98             typeName = evetypes.GetName(typeID)
     99             EveLabelMedium(text=typeName, parent=layoutGrid, left=5, state=uiconst.UI_DISABLED, color=None, maxLines=1, align=uiconst.CENTERLEFT)
    100             EveLabelMedium(text='%sx' % qty, parent=layoutGrid, left=5, state=uiconst.UI_DISABLED, color=None, maxLines=1, align=uiconst.CENTERRIGHT)
    101             if price is None:
    102                 priceText = GetByLabel('UI/Generic/NotAvailableShort')
    103             else:
    104                 priceText = self._FmtAmt(price)
    105             EveLabelMedium(text=priceText, parent=layoutGrid, left=5, state=uiconst.UI_DISABLED, color=None, maxLines=1, align=uiconst.CENTERRIGHT)
    106 
    107         buttonCont = FlowContainer(name='buttonParent', align=uiconst.TOTOP, autoHeight=True, centerContent=True, contentSpacing=uiconst.BUTTONGROUPMARGIN, padTop=10)
    108         tooltipPanel.AddCell(cellObject=buttonCont, colSpan=2)
    109         Button(parent=buttonCont, label=GetByLabel('UI/Market/MarketQuote/BuyAll'), func=self.BuyAll, align=uiconst.NOALIGN)
    110         layoutGrid.RefreshGridLayout()
    111         w, h = layoutGrid.GetSize()
    112         scrollcontainer.height = min(h + 10, 400)
    113         tooltipPanel.AddSpacer(w + 20, 0, colSpan=2)
    114 
    115     def CreateIcon(self, parent, typeID):
    116         size = 32
    117         cont = Container(parent=parent, pos=(0,
    118          0,
    119          size,
    120          size), align=uiconst.CENTER)
    121         techIcon = Sprite(name='techIcon', parent=cont, pos=(0, 0, 16, 16))
    122         GetTechLevelIcon(tlicon=techIcon, typeID=typeID)
    123         Icon(parent=cont, typeID=typeID, size=size)
    124 
    125     def BuyAll(self, *args):
    126         return self.OpenMultiBuy(self.qtyByTypeID)
    127 
    128     def OpenMultiBuy(self, buyDict):
    129         BuyMultipleTypesWithQty(buyDict)
    130 
    131     def OnDropOnMultibuyBtn(self, dragObj, nodes):
    132         buyDict = {}
    133         for node in nodes:
    134             typeID = GetTypeIDFromDragItem(node)
    135             if not typeID:
    136                 continue
    137             try:
    138                 qty = int(node.extraText)
    139             except:
    140                 qty = 1
    141 
    142             buyDict[typeID] = qty
    143 
    144         if buyDict:
    145             self.OpenMultiBuy(buyDict)