lpOfferEntry2.py (10137B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\station\loyaltyPointStore\lpOfferEntry2.py 2 from sys import maxint 3 from carbonui import uiconst, TextColor 4 from carbonui.control.button import Button 5 from carbonui.control.scrollentries import SE_BaseClassCore 6 from carbonui.primitives.container import Container 7 from carbonui.primitives.containerAutoSize import ContainerAutoSize 8 from carbonui.primitives.transform import Transform 9 from eve.client.script.ui.control.eveLabel import EveLabelMedium 10 from eve.client.script.ui.control.infoIcon import InfoIcon 11 from eve.client.script.ui.station.loyaltyPointStore.lpUtil import GetItemText 12 from eve.client.script.ui.station.loyaltyPointStore.selectQuantityWnd import SelectQuantityWnd 13 from eve.client.script.ui.station.lpstoreRequirement import LpRequirement, ISKRequirement, AnalysisKreditsRequirement 14 from eve.client.script.ui.util.uix import GetTechLevelIcon 15 from eve.common.script.util.eveFormat import FmtISK, FmtISKAndRound 16 from eveui import Sprite 17 from inventorycommon import typeHelpers 18 from localization import GetByLabel 19 20 class LPOfferEntry2(SE_BaseClassCore): 21 entryHeight = 88 22 ColumnWidths = {GetByLabel('UI/LPStore/Reward'): 260, 23 GetByLabel('UI/LPStore/cost'): 124, 24 GetByLabel('UI/LPStore/RequiredItems'): 300, 25 '': 100} 26 Headers = (GetByLabel('UI/LPStore/Reward'), 27 GetByLabel('UI/LPStore/cost'), 28 GetByLabel('UI/LPStore/RequiredItems'), 29 '') 30 PER_REQUIRED_ITEM_HEIGHT = 20 31 32 def ApplyAttributes(self, attributes): 33 super(LPOfferEntry2, self).ApplyAttributes(attributes) 34 self.lpSvc = sm.GetService('lpstore') 35 self.node = attributes.node 36 self.typeID = self.node.typeID 37 self.iskBalance = self.node.Get('iskBalance') 38 self.lpBalance = self.node.Get('lpBalance') 39 self.akBalance = self.node.Get('akBalance') 40 self.qty = self.node.Get('qty', 1) 41 self.reqItems = self.node.Get('reqItems', []) 42 self.lootItems = self.node.Get('lootItems', []) 43 self.lpOfferRequirementColumns = self.lpSvc.GetRequirements(self.node.corpID) 44 self.requiredStandings = self.node.Get('requiredStandings', None) 45 self.allRequirementsMet = True 46 self.costRequirementLabels = [] 47 self.itemRequirementLabels = [] 48 49 def GetMaxPurchaseable(self): 50 maxQnt = maxint 51 for requirement in self.reqItems: 52 typeID, quantityNeeded = requirement 53 maxQnt = min(int(self.lpSvc.GetInvenoryItemQuantity(typeID) / quantityNeeded), maxQnt) 54 55 for requirement in self.lpOfferRequirementColumns: 56 amount = self.node[requirement.name] 57 if amount == 0: 58 continue 59 if requirement.name == LpRequirement.LP_REQUIREMENT_NAME: 60 maxQnt = min(int(self.lpBalance / amount), maxQnt) 61 elif requirement.name == ISKRequirement.ISK_REQUIREMENT_NAME: 62 maxQnt = min(int(self.iskBalance / amount), maxQnt) 63 elif requirement.name == AnalysisKreditsRequirement.AK_REQUIREMENT_NAME: 64 maxQnt = min(int(self.akBalance / amount), maxQnt) 65 66 return maxQnt 67 68 def IsCostRequirementMet(self, requirement): 69 amount = self.node[requirement.name] 70 if amount == 0: 71 return True 72 requirementMet = True 73 if requirement.name == LpRequirement.LP_REQUIREMENT_NAME: 74 requirementMet = amount <= self.lpBalance 75 elif requirement.name == ISKRequirement.ISK_REQUIREMENT_NAME: 76 requirementMet = amount <= self.iskBalance 77 elif requirement.name == AnalysisKreditsRequirement.AK_REQUIREMENT_NAME: 78 requirementMet = amount <= self.akBalance 79 return requirementMet 80 81 def IsItemRequirementMet(self, requirement): 82 typeID, quantity = requirement 83 return self.lpSvc.HaveItem(typeID, quantity) 84 85 def AreAllRequirementsMet(self): 86 for requirement in self.lpOfferRequirementColumns: 87 if not self.IsCostRequirementMet(requirement): 88 return False 89 90 for requirement in self.reqItems: 91 if not self.IsItemRequirementMet(requirement): 92 return False 93 94 return True 95 96 def OnMouseEnter(self, *args): 97 super(LPOfferEntry2, self).OnMouseEnter(*args) 98 for label, requirement in self.itemRequirementLabels: 99 if not self.IsItemRequirementMet(requirement): 100 label.color = TextColor.DANGER 101 102 for label, requirement in self.costRequirementLabels: 103 if not self.IsCostRequirementMet(requirement): 104 label.color = TextColor.DANGER 105 106 def OnMouseExit(self, *args): 107 super(LPOfferEntry2, self).OnMouseExit(*args) 108 for label, _requirement in self.itemRequirementLabels: 109 label.color = TextColor.NORMAL 110 111 for label, _requirement in self.costRequirementLabels: 112 label.color = TextColor.NORMAL 113 114 def _AddRewardColumn(self): 115 rewardContWidth = LPOfferEntry2.ColumnWidths[GetByLabel('UI/LPStore/Reward')] 116 rewardCont = Container(parent=self, name='rewardCont', align=uiconst.TOLEFT, width=rewardContWidth, state=uiconst.UI_PICKCHILDREN) 117 spriteTransformCont = Container(parent=rewardCont, name='spriteTransformCont', align=uiconst.TOLEFT, width=LPOfferEntry2.entryHeight) 118 spriteTransform = Transform(parent=spriteTransformCont, name='spriteTransform', align=uiconst.CENTER, width=64, height=64) 119 techIcon = Sprite(name='techIcon', parent=spriteTransform, pos=(1, 0, 16, 16)) 120 techSprite = GetTechLevelIcon(techIcon, 1, self.typeID) 121 rewardSprite = Sprite(parent=spriteTransform, name='rewardSprite', width=64, height=64, align=uiconst.CENTER) 122 InfoIcon(parent=spriteTransform, align=uiconst.TOPRIGHT, typeID=self.typeID, idx=0) 123 self.LoadIconByTypeID(self.typeID, rewardSprite) 124 rewardNameCont = Container(parent=rewardCont, name='rewardNameCont', align=uiconst.TOALL) 125 EveLabelMedium(parent=rewardNameCont, name='rewardLabel', text=GetItemText(self.typeID, self.qty), align=uiconst.CENTERLEFT, padLeft=8, maxWidth=rewardContWidth - 110, color=TextColor.NORMAL) 126 127 def _AddCostColumn(self): 128 costContWidth = LPOfferEntry2.ColumnWidths[GetByLabel('UI/LPStore/cost')] 129 costCont = Container(parent=self, name='costCont', align=uiconst.TOLEFT, width=costContWidth, state=uiconst.UI_PICKCHILDREN) 130 costRowsCont = ContainerAutoSize(parent=costCont, align=uiconst.CENTER, minWidth=costContWidth, width=costContWidth, alignMode=uiconst.TOTOP) 131 for requirement in self.lpOfferRequirementColumns: 132 amount = self.node[requirement.name] 133 if amount == 0: 134 continue 135 amountName = requirement.amountName 136 amountText = requirement.formatAmount(amount) 137 amountHintPath = requirement.amountHintPath 138 if amountHintPath: 139 keywords = {amountName: amountText} 140 amountText = GetByLabel(amountHintPath, **keywords) 141 label = EveLabelMedium(parent=costRowsCont, align=uiconst.TOTOP, text=amountText, color=TextColor.NORMAL) 142 self.costRequirementLabels.append((label, requirement)) 143 144 def _AddReqItemsColumn(self): 145 reqItemsContWidth = LPOfferEntry2.ColumnWidths[GetByLabel('UI/LPStore/RequiredItems')] 146 reqItemsCont = Container(parent=self, name='costCont', align=uiconst.TOLEFT, width=reqItemsContWidth, state=uiconst.UI_PICKCHILDREN) 147 reqRowsCont = ContainerAutoSize(parent=reqItemsCont, align=uiconst.CENTER, minWidth=reqItemsContWidth, width=reqItemsContWidth, alignMode=uiconst.TOTOP) 148 for req in self.reqItems: 149 typeID, quantity = req 150 requiredItemRowCont = ContainerAutoSize(name='requiredItemRowCont', parent=reqRowsCont, align=uiconst.TOTOP, alignMode=uiconst.TOTOP) 151 label = EveLabelMedium(name='requiredItem', parent=requiredItemRowCont, text=GetItemText(typeID, quantity), align=uiconst.TOTOP, color=TextColor.NORMAL, state=uiconst.UI_NORMAL) 152 textWidth, _height = EveLabelMedium.MeasureTextSize(GetItemText(typeID, quantity)) 153 infoIconOffset = min(reqItemsContWidth - InfoIcon.default_width, textWidth + 5) 154 InfoIcon(parent=requiredItemRowCont, align=uiconst.TOPLEFT, typeID=typeID, idx=0, left=infoIconOffset) 155 self.itemRequirementLabels.append((label, req)) 156 157 def _AddPurchaseButtonColumn(self): 158 purchaseButtonContWidth = LPOfferEntry2.ColumnWidths[''] 159 purchaseButtonCont = Container(parent=self, name='costCont', align=uiconst.TOLEFT, width=purchaseButtonContWidth, state=uiconst.UI_PICKCHILDREN) 160 Button(parent=purchaseButtonCont, align=uiconst.CENTER, label='Purchase', enabled=self.AreAllRequirementsMet(), func=self.AmountConfirmationDialogue) 161 162 def AmountConfirmationDialogue(self, *args): 163 SelectQuantityWnd.ConfirmPurchaseQuantity(GetItemText(self.typeID, self.qty), self.GetMaxPurchaseable(), self.Purchase) 164 165 def Purchase(self, amount): 166 self.lpSvc.AcceptOffer(self.node, amount) 167 168 def Load(self, data): 169 self.Flush() 170 self._AddRewardColumn() 171 self._AddCostColumn() 172 self._AddReqItemsColumn() 173 self._AddPurchaseButtonColumn() 174 175 def GetHeight(self, node, _width): 176 return max(LPOfferEntry2.entryHeight, len(node.Get('reqItems', [])) * LPOfferEntry2.PER_REQUIRED_ITEM_HEIGHT) 177 178 def LoadIconByTypeID(object, typeID, sprite): 179 sm.GetService('photo').GetIconByType(sprite, typeID, itemID=None, size=None, ignoreSize=False, isCopy=False) 180 181 def LoadTooltipPanel(self, tooltipPanel, *_args): 182 tooltipPanel.LoadGeneric2ColumnTemplate() 183 avgPrice = typeHelpers.GetAveragePrice(self.typeID) 184 if avgPrice is None: 185 avgPrice = 0 186 estimatedMaketPrice = self.qty * avgPrice 187 estimatedPriceString = GetByLabel('UI/Inventory/EstIskPrice', iskString=FmtISKAndRound(estimatedMaketPrice, False)) 188 tooltipPanel.AddLabelSmall(text=estimatedPriceString)