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)