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

outputCont.py (8432B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\itemTrader\outputCont.py
      2 import carbonui.text.styles
      3 import eveicon
      4 import evetypes
      5 from carbon.common.script.util.format import FmtAmt
      6 from carbonui import TextAlign, TextColor
      7 from carbonui.control.buttonIcon import ButtonIcon
      8 from carbonui.primitives.container import Container
      9 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     10 from carbonui.primitives.gridcontainer import GridContainer
     11 from carbonui.primitives.layoutGrid import LayoutGrid
     12 from carbonui.primitives.sprite import Sprite
     13 from carbonui.primitives.vectorarc import VectorArc
     14 import carbonui
     15 from carbonui.uianimations import animations
     16 import carbonui.const as uiconst
     17 import trinity
     18 from eve.client.script.ui.control.eveLabel import Label
     19 from eveservices.menu import GetMenuService
     20 from localization import GetByLabel
     21 import math
     22 ARC_RADIUS_1 = 145
     23 ARC_RADIUS_2 = 205
     24 ARC_RADIUS_3 = 320
     25 ARC_RADIUS_4 = 520
     26 
     27 class ItemTraderOutputCont(Container):
     28 
     29     def ApplyAttributes(self, attributes):
     30         self.itemTraderController = attributes.itemTraderController
     31         self.outputByTypeID = {}
     32         self.moreOutputIcon = None
     33         super(ItemTraderOutputCont, self).ApplyAttributes(attributes)
     34         self.contentCont = Container(name='contentCont', parent=self)
     35         self.decoCont = Container(name='decoCont', parent=self, pickState=carbonui.PickState.OFF)
     36         self.outputGrid = LayoutGrid(name='outputGrid', parent=self.contentCont, align=uiconst.CENTER, cellSpacing=10)
     37         self.output_label = carbonui.text.styles.TextBody(parent=self.contentCont, text=GetByLabel('UI/Inflight/SpaceComponents/ItemTrader/DeliveredItems', itemCount=2), align=uiconst.CENTERTOP, padTop=12, color=TextColor.SECONDARY)
     38         self.ConstructArcs()
     39 
     40     def ConstructArcs(self):
     41         tradeIcon = Sprite(name='tradeIcon', parent=self.decoCont, align=uiconst.CENTERLEFT, pos=(-20, 0, 32, 32), texturePath=eveicon.trade, color=TextColor.SECONDARY)
     42         startAngleDegrees = -172
     43         endAngleDegrees = 172
     44         VectorArc(parent=self.decoCont, align=carbonui.Align.CENTER, radius=ARC_RADIUS_1, fill=False, lineWidth=0.5, endAngle=math.radians(endAngleDegrees), startAngle=math.radians(startAngleDegrees))
     45         VectorArc(parent=self.decoCont, align=carbonui.Align.CENTER, radius=ARC_RADIUS_2, fill=False, lineWidth=0.32, opacity=0.5)
     46         VectorArc(parent=self.decoCont, align=carbonui.Align.CENTER, radius=ARC_RADIUS_3, fill=False, lineWidth=0.25, opacity=0.5)
     47         VectorArc(parent=self.decoCont, align=carbonui.Align.CENTER, radius=ARC_RADIUS_4, fill=False, lineWidth=0.2, opacity=0.5)
     48         VectorArc(name='small_fill_circle', parent=self.decoCont, align=carbonui.Align.CENTER, radius=ARC_RADIUS_1, lineWidth=0, fill=True, color=(0, 0, 0, 0.35))
     49         VectorArc(name='medium_fill_circle', parent=self.decoCont, align=carbonui.Align.CENTER, radius=ARC_RADIUS_3, lineWidth=0, fill=True, color=(0, 0, 0, 0.2))
     50         sprite = Sprite(parent=self.decoCont, pos=(0, 0, 440, 440), align=carbonui.Align.CENTER, texturePath='res:/UI/Texture/classes/underConstruction/underConstructionLines.png', textureSecondaryPath='res:/UI/Texture/classes/DynamicItem/bgGlowRing.png', spriteEffect=trinity.TR2_SFX_MODULATE, state=uiconst.UI_DISABLED, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, opacity=0.0)
     51         Sprite(parent=self.decoCont, pos=(0, 0, 440, 440), align=carbonui.Align.CENTER, texturePath='res:/UI/Texture/classes/underConstruction/underConstructionLines.png', opacity=0.2)
     52         animations.FadeTo(sprite, startVal=1.0, endVal=2.5, duration=2.6, curveType=uiconst.ANIM_WAVE, loops=uiconst.ANIM_REPEAT)
     53         animations.MorphVector2(sprite, 'scaleSecondary', startVal=(0.5, 0.5), endVal=(1.0, 1.0), duration=2.6, curveType=uiconst.ANIM_LINEAR, loops=uiconst.ANIM_REPEAT)
     54 
     55     def AddOutputItems(self, outputItemsAndQty):
     56         self.outputGrid.Flush()
     57         self.outputGrid.columns = min(len(outputItemsAndQty), 3)
     58         self.outputByTypeID.clear()
     59         self.moreOutputIcon = None
     60         hasMultipleOutputs = len(outputItemsAndQty) > 1
     61         outputCounter = 0
     62         outputItemsAndQtyCopy = outputItemsAndQty[:]
     63         while outputItemsAndQtyCopy and outputCounter < 2:
     64             typeID, qty = outputItemsAndQtyCopy.pop(0)
     65             outputCounter += 1
     66             outputItem = OutputItem(parent=self.outputGrid, typeID=typeID, qty=qty, hasMultipleOutputs=hasMultipleOutputs)
     67             self.outputByTypeID[typeID] = outputItem
     68 
     69         if outputItemsAndQtyCopy:
     70             qtyByTypeID = {t:q for t, q in outputItemsAndQtyCopy}
     71             self.moreOutputIcon = MoreOutputItems(parent=self.outputGrid, qtyByTypeID=qtyByTypeID)
     72 
     73     def UpdateQty(self, typeID, qty):
     74         outputItem = self.outputByTypeID.get(typeID, None)
     75         if outputItem:
     76             outputItem.UpdateQty(qty)
     77         elif self.moreOutputIcon:
     78             self.moreOutputIcon.UpdateQty(typeID, qty)
     79 
     80 
     81 class OutputItem(Container):
     82     default_height = 80
     83     default_width = 80
     84     default_align = uiconst.CENTER
     85 
     86     def ApplyAttributes(self, attributes):
     87         super(OutputItem, self).ApplyAttributes(attributes)
     88         self.typeID = attributes.typeID
     89         hasMultipleOutputs = attributes.hasMultipleOutputs
     90         qty = attributes.qty
     91         iconFrame = Sprite(parent=self, pos=(0, 0, 80, 80), align=uiconst.CENTER, state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/underConstruction/iconFrame.png', opacity=0.5)
     92         self.ConstructIcon()
     93         self.ConstructLabels(qty, hasMultipleOutputs)
     94 
     95     def ConstructIcon(self):
     96         output_item_icon = Sprite(name='Item logo', parent=self, align=uiconst.CENTER, height=64, width=64)
     97         sm.GetService('photo').GetIconByType(output_item_icon, self.typeID)
     98         output_item_icon.hint = evetypes.GetName(self.typeID)
     99         output_item_icon.GetMenu = lambda *args: GetMenuService().GetMenuFromItemIDTypeID(None, self.typeID, includeMarketDetails=True)
    100 
    101     def ConstructLabels(self, qty, hasMultipleOutputs):
    102         item_label = evetypes.GetName(self.typeID)
    103         labelCont = ContainerAutoSize(parent=self, align=uiconst.CENTERTOP, width=100 if hasMultipleOutputs else 200)
    104         output_item_label = carbonui.text.styles.TextDetail(name='output_item_label', parent=labelCont, text=item_label, align=uiconst.TOTOP_NOPUSH, top=103, maxLines=3, textAlign=TextAlign.CENTER)
    105         self.qtyLabel = carbonui.text.styles.TextBody(name='qtyLabel', parent=self, text=FmtAmt(qty), align=uiconst.CENTERTOP, top=84)
    106 
    107     def UpdateQty(self, qty):
    108         self.qtyLabel.SetText(FmtAmt(qty))
    109 
    110 
    111 class MoreOutputItems(Container):
    112     default_width = 24
    113     default_height = 24
    114     default_align = uiconst.CENTER
    115 
    116     def ApplyAttributes(self, attributes):
    117         super(MoreOutputItems, self).ApplyAttributes(attributes)
    118         self.qtyByTypeID = attributes.qtyByTypeID
    119         Sprite(parent=self, pos=(0, 0, 24, 24), align=carbonui.Align.CENTER, texturePath='res:/UI/Texture/classes/ItemTrader/moreCircle.png', state=uiconst.UI_DISABLED, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, opacity=0.3)
    120         sprite = ButtonIcon(parent=self, pos=(0, 0, 24, 24), align=carbonui.Align.CENTER, texturePath='res:/UI/Texture/classes/ItemTrader/morePlus.png')
    121         sprite.LoadTooltipPanel = self.LoadTooltipPanel
    122 
    123     def LoadTooltipPanel(self, tooltipPanel, *args):
    124         tooltipPanel.LoadStandardSpacing()
    125         tooltipPanel.columns = 4
    126         tooltipPanel.state = uiconst.UI_NORMAL
    127         for typeID, qty in self.qtyByTypeID.iteritems():
    128             row = tooltipPanel.AddRow()
    129             row.state = uiconst.UI_NORMAL
    130             carbonui.text.styles.TextBody(parent=row, text=FmtAmt(qty))
    131             carbonui.text.styles.TextBody(parent=row, text='x')
    132             typeIcon = Sprite(parent=row, align=uiconst.CENTERLEFT, pos=(0, 0, 20, 20))
    133             sm.GetService('photo').GetIconByType(typeIcon, typeID)
    134             carbonui.text.styles.TextBody(parent=row, text=evetypes.GetName(typeID))
    135             row.GetMenu = lambda t = typeID, *args: GetMenuService().GetMenuFromItemIDTypeID(None, t, includeMarketDetails=True)
    136 
    137     def UpdateQty(self, typeID, qty):
    138         self.qtyByTypeID[typeID] = qty
    139 
    140 
    141 def DefaultTooltip(tooltipPanel, text):
    142     tooltipPanel.LoadStandardSpacing()
    143     tooltipPanel.columns = 1
    144     tooltipPanel.AddLabelMedium(text=text)