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)