multiContractsItemExchangeWnd.py (9739B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\contracts\multiContractsItemExchangeWnd.py 2 from collections import defaultdict 3 import evetypes 4 from carbonui.primitives.container import Container 5 from carbonui.primitives.line import Line 6 from eve.client.script.ui.control.entries.item import Item 7 from eve.client.script.ui.control.entries.util import GetFromClass 8 from eve.client.script.ui.control.eveLabel import EveLabelLarge, EveLabelMedium, WndCaptionLabel 9 from eve.client.script.ui.control.eveScroll import Scroll 10 from carbonui.control.window import Window 11 from carbonui.control.tabGroup import TabGroup 12 from eve.client.script.ui.control.themeColored import SpriteThemeColored 13 from eve.client.script.ui.shared.neocom.contracts.contractsDetailsWnd import GetContractItemMenu, GetBasicInfoText, AddBasicInfoRow, GetItemDamageText 14 from eve.client.script.util.contractutils import COL_PAY, FmtISKWithDescription, COL_GET 15 from eve.common.lib import appConst as const 16 from eve.common.script.sys.eveCfg import GetShipFlagLocationName 17 from eve.common.script.util.contractscommon import GetContractTitle, GetContractTypeText 18 from localization import GetByLabel 19 from carbonui import const as uiconst 20 from localization.formatters import FormatNumeric 21 22 class MultiContractsItemExchangeWnd(Window): 23 default_windowID = 'multiContractsWnd' 24 default_captionLabelPath = 'UI/Contracts/ContractsWindow/CreatedContracts' 25 default_iconNum = 'res:/ui/Texture/WindowIcons/contractItemExchange.png' 26 default_minSize = [520, 440] 27 default_height = 480 28 default_isStackable = False 29 30 def ApplyAttributes(self, attributes): 31 Window.ApplyAttributes(self, attributes) 32 contractIDs = attributes.contractIDs 33 self.contractsByContractID = {} 34 self.topParent = Container(name='topParent', parent=self.GetMainArea(), align=uiconst.TOTOP, height=52, clipChildren=True) 35 SpriteThemeColored(name='mainicon', parent=self.topParent, state=uiconst.UI_DISABLED, pos=(0, -5, 64, 64), texturePath=self.iconNum, colorType=uiconst.COLORTYPE_UIHILIGHTGLOW) 36 captionLabelPath = attributes.get('captionLabelPath', self.default_captionLabelPath) 37 WndCaptionLabel(text=GetByLabel(captionLabelPath), parent=self.topParent) 38 self.tabGroup = TabGroup(name='multiContractsWndTabs', parent=self.sr.main) 39 self.contentCont = Container(name='contentCont', parent=self.sr.main, padding=const.defaultPadding) 40 self.contentContTitleCont = Container(name='contentContTitleCont', parent=self.contentCont, align=uiconst.TOTOP, height=30) 41 self.contractDetails = Container(name='contractDetails', parent=self.contentCont) 42 self.titleLabel = EveLabelLarge(text='', parent=self.contentContTitleCont, state=uiconst.UI_DISABLED, maxLines=1, align=uiconst.CENTERLEFT, left=4) 43 for i, contractID in enumerate(contractIDs): 44 name = GetByLabel('UI/Contracts/ContractsWindow/ContractWithNum', contractNum=i + 1) 45 self.tabGroup.AddTab(label=name, panel=self.contentCont, code=self, tabID=contractID, hint=name) 46 47 self.tabGroup.AutoSelect() 48 49 def Load(self, key, *args): 50 contract = self.contractsByContractID.get(key, -1) 51 if contract == -1: 52 contract = sm.GetService('contracts').GetContract(key, force=True) 53 self.contractsByContractID[key] = contract 54 if not contract or contract == -1: 55 pass 56 self.contractDetails.Flush() 57 c = contract.contract 58 title = GetByLabel('UI/Contracts/ContractsService/ContractTitleAndType', contractTitle=GetContractTitle(c, contract.items), contractType=GetContractTypeText(c.type)) 59 self.titleLabel.text = title 60 tabs = [115, 480] 61 text = GetBasicInfoText(c) 62 basicInfoParent = Container(name='infocontainer', parent=self.contractDetails, align=uiconst.TOTOP, padRight=const.defaultPadding) 63 basicInfo = EveLabelMedium(text=text, parent=basicInfoParent, top=const.defaultPadding, idx=0, tabs=tabs, state=uiconst.UI_NORMAL, left=6) 64 basicInfoParent.height = basicInfo.textheight + 5 65 Line(parent=basicInfoParent, align=uiconst.TOTOP) 66 self.AddList(tabs, contract) 67 68 def AddList(self, tabs, contract): 69 c = contract.contract 70 text = '' 71 if c.price > 0: 72 if session.charid == c.issuerID: 73 rowLabel = GetByLabel('UI/Contracts/ContractsWindow/BuyerWillPay') 74 else: 75 rowLabel = GetByLabel('UI/Contracts/ContractsWindow/YouWillPay') 76 boldIsk = GetByLabel('UI/Contracts/ContractsService/BoldGenericLabel', labelText=FmtISKWithDescription(c.price)) 77 rowInfo = '<color=%s>%s</color>' % (COL_PAY, boldIsk) 78 text += AddBasicInfoRow(rowLabel, rowInfo) 79 elif c.price == 0: 80 if session.charid == c.issuerID: 81 rowLabel = GetByLabel('UI/Contracts/ContractsWindow/BuyerWillGet') 82 else: 83 rowLabel = GetByLabel('UI/Contracts/ContractsWindow/YouWillGet') 84 boldIsk = GetByLabel('UI/Contracts/ContractsService/BoldGenericLabel', labelText=FmtISKWithDescription(0)) 85 rowInfo = '<color=%s>%s</color>' % (COL_GET, boldIsk) 86 text += AddBasicInfoRow(rowLabel, rowInfo) 87 infoParent = Container(name='infocontainer', parent=self.contractDetails, align=uiconst.TOTOP, width=const.defaultPadding) 88 info = EveLabelLarge(text=text, parent=infoParent, top=const.defaultPadding, idx=0, tabs=tabs, state=uiconst.UI_NORMAL, left=6) 89 infoParent.height = info.textheight + 2 * const.defaultPadding 90 Line(parent=infoParent, align=uiconst.TOTOP) 91 Line(parent=infoParent, align=uiconst.TOBOTTOM) 92 if session.charid == c.issuerID: 93 title = GetByLabel('UI/Contracts/ContractsWindow/BuyerWillGet') 94 else: 95 title = (GetByLabel('UI/Contracts/ContractsWindow/YouWillGet'),) 96 self.ListItems(contract, '<color=%s>%s</color>' % (COL_GET, title)) 97 98 def ListItems(self, contract, title): 99 inCrate = True 100 shouldHideBlueprintInfo = contract.contract.status in [const.conStatusFinished, const.conStatusFinishedContractor] 101 items = [ e for e in contract.items if e.inCrate == inCrate ] 102 titleParent = Container(name='title', parent=self.contractDetails, align=uiconst.TOTOP, width=const.defaultPadding) 103 boldTitle = GetByLabel('UI/Contracts/ContractsService/BoldGenericLabel', labelText=title) 104 title = EveLabelLarge(text=boldTitle, parent=titleParent, top=6, idx=0, state=uiconst.UI_NORMAL, left=6) 105 titleParent.height = title.textheight + 6 106 self.sr.scroll = Scroll(parent=self.contractDetails, padding=const.defaultPadding) 107 self.sr.scroll.sr.id = 'multiContractDetailScroll' 108 scrolllist = [] 109 hdr = [GetByLabel('UI/Contracts/ContractsWindow/Name'), 110 GetByLabel('UI/Inventory/ItemQuantityShort'), 111 GetByLabel('UI/Common/Type'), 112 GetByLabel('UI/Common/Category'), 113 GetByLabel('UI/Common/Details')] 114 itemsByParentID = defaultdict(set) 115 for eachItem in items: 116 itemsByParentID[eachItem.parentID].add(eachItem) 117 118 for item in items: 119 if item.inCrate != inCrate: 120 continue 121 categoryID = evetypes.GetCategoryID(item.itemTypeID) 122 details = '' 123 isBlueprint = False 124 isCopy = False 125 if categoryID == const.categoryBlueprint: 126 isBlueprint = True 127 if item.copy == 1: 128 isCopy = True 129 details = self.GetBlueprintsDetails(item, shouldHideBlueprintInfo) 130 elif item.flagID: 131 details = GetShipFlagLocationName(item.flagID) 132 chld = '' 133 sublevel = 0 134 if item.parentID > 0: 135 chld = ' ' 136 sublevel = 1 137 mrdmg = GetItemDamageText(item) 138 quantity = max(1, item.quantity) if item.quantity is not None else None 139 scrolllist.append(GetFromClass(Item, {'itemID': item.itemID, 140 'typeID': item.itemTypeID, 141 'label': '%s%s<t>%s<t>%s<t>%s<t>%s%s' % (chld, 142 evetypes.GetName(item.itemTypeID), 143 FormatNumeric(quantity, useGrouping=True), 144 evetypes.GetGroupName(item.itemTypeID), 145 evetypes.GetCategoryName(item.itemTypeID), 146 details, 147 mrdmg), 148 'getIcon': 1, 149 'isBlueprint': isBlueprint, 150 'isCopy': isCopy, 151 'GetMenu': GetContractItemMenu, 152 'sublevel': sublevel, 153 'childrenItems': itemsByParentID.get(item.itemID, set())})) 154 155 self.sr.scroll.Load(None, scrolllist, headers=hdr, noContentHint='UI/Contracts/ContractsWindow/NoItemsFound') 156 157 def GetBlueprintsDetails(self, item, shouldHideBlueprintInfo): 158 if item.copy == 1: 159 if shouldHideBlueprintInfo: 160 details = GetByLabel('UI/Contracts/ContractsService/BlueprintCopy') 161 else: 162 details = GetByLabel('UI/VirtualGoodsStore/BlueprintCopy', runs=item.licensedProductionRunsRemaining or 0, materialLevel=item.materialLevel or 0, productivityLevel=item.productivityLevel or 0) 163 elif shouldHideBlueprintInfo: 164 details = GetByLabel('UI/Contracts/ContractsService/BlueprintOriginal') 165 else: 166 details = GetByLabel('UI/VirtualGoodsStore/OriginalBlueprint', materialLevel=item.materialLevel or 0, productivityLevel=item.productivityLevel or 0) 167 return details