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

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