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

mercDenEntry.py (8695B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\planet\mecDen\mercDenEntry.py
      2 from collections import OrderedDict
      3 import eveicon
      4 import evetypes
      5 from carbon.common.script.util.format import FmtAmt
      6 from carbonui import TextColor, Align, Density
      7 from carbonui.text.styles import TextBody
      8 from carbonui.control.button import Button
      9 from carbonui.uiconst import LABELTABMARGIN, PickState
     10 from carbonui.uicore import uicore
     11 from carbonui.fontconst import EVE_MEDIUM_FONTSIZE
     12 from carbonui.primitives.fill import Fill
     13 from eve.client.script.ui import eveThemeColor
     14 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns
     15 from eve.client.script.ui.control.entries.util import GetFromClass
     16 from eve.client.script.ui.shared.planet.mecDen.mercDenUtil import DEN_COL_NAME, DEN_COL_SYSTEM, DEN_COL_PLANET, DEN_COL_STATE, DEN_COL_INFOM, DEN_COL_MTO
     17 from localization import GetByLabel
     18 LABEL_PATH_STATE_ACTIVE = 'UI/Sovereignty/MercenaryDen/ConfigurationWindow/StateNameActive'
     19 LABEL_PATH_STATE_INACTIVE = 'UI/Sovereignty/MercenaryDen/ConfigurationWindow/StateNameInactive'
     20 
     21 class ColumnInfo(object):
     22 
     23     def __init__(self, labelPath, hintText = None):
     24         self._labelPath = labelPath
     25         self._hintText = hintText
     26 
     27     @property
     28     def columnText(self):
     29         if self._labelPath > 0:
     30             return GetByLabel(self._labelPath)
     31 
     32     @property
     33     def hintText(self):
     34         return self._hintText
     35 
     36 
     37 class BaseMerDenEntry(BaseListEntryCustomColumns):
     38     default_height = 32
     39     headerInfo = d = OrderedDict()
     40     d[DEN_COL_NAME] = ColumnInfo('UI/Common/Name')
     41     d[DEN_COL_SYSTEM] = ColumnInfo('UI/Common/SolarSystem')
     42     d[DEN_COL_PLANET] = ColumnInfo('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/HeaderPlanet')
     43     d[DEN_COL_STATE] = ColumnInfo('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/HeaderState')
     44     d[DEN_COL_INFOM] = ColumnInfo('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/HeaderInfomorphs')
     45     d[DEN_COL_MTO] = ColumnInfo('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/HeaderMTOS', GetByLabel('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/HeaderMTOsTooltip'))
     46 
     47     def ApplyAttributes(self, attributes):
     48         BaseListEntryCustomColumns.ApplyAttributes(self, attributes)
     49         self.AddName()
     50         self.AddSystem()
     51         self.AddPlanet()
     52         self.AddState()
     53         self.AddInfomorphs()
     54         self.AddMTOs()
     55 
     56     def Load(self, node):
     57         labelsDict = self.node.labelsDict
     58         self.nameLabel.text = labelsDict.get(DEN_COL_NAME, '')
     59         self.systemLabel.text = labelsDict.get(DEN_COL_SYSTEM, '')
     60         self.planetLabel.text = labelsDict.get(DEN_COL_PLANET, '')
     61         self.stateLabel.text = labelsDict.get(DEN_COL_STATE, '')
     62         self.infomorphsLabel.text = labelsDict.get(DEN_COL_INFOM, '')
     63         self.mtoLabel.text = labelsDict.get(DEN_COL_MTO, '')
     64 
     65     def AddName(self):
     66         self.nameLabel = self.AddColumnBodyText()
     67         Fill(parent=self.nameLabel.parent, color=eveThemeColor.THEME_FOCUSDARK, opacity=0.15)
     68 
     69     def AddSystem(self):
     70         self.systemLabel = self.AddColumnBodyText()
     71 
     72     def AddPlanet(self):
     73         self.planetLabel = self.AddColumnBodyText()
     74 
     75     def AddState(self):
     76         self.stateLabel = self.AddColumnBodyText()
     77 
     78     def AddInfomorphs(self):
     79         self.infomorphsLabel = self.AddColumnBodyText()
     80         self.infomorphsLabel.SetAlign(Align.CENTERRIGHT)
     81 
     82     def AddMTOs(self):
     83         self.mtoLabel = self.AddColumnBodyText()
     84         self.mtoLabel.SetAlign(Align.CENTERRIGHT)
     85         self.mtoLabel.parent.pickState = PickState.ON
     86         if self.node.LoadMotTooltipPanelFunc:
     87             self.mtoLabel.parent.LoadTooltipPanel = lambda tooltipPanel, *args: self.node.LoadMotTooltipPanelFunc(tooltipPanel, self.node)
     88 
     89     @classmethod
     90     def GetHeaders(cls):
     91         return [ x.columnText for x in cls.headerInfo.itervalues() ]
     92 
     93     @staticmethod
     94     def GetColWidths(node, idx = None):
     95         LABEL_PARAMS = (EVE_MEDIUM_FONTSIZE, 0, 0)
     96         labelsDict = node.labelsDict
     97 
     98         def GetWidthFor(cIdx):
     99             if cIdx >= len(node.decoClass.headerInfo):
    100                 return 50
    101             colName = node.decoClass.headerInfo.keys()[cIdx]
    102             text = labelsDict.get(colName, '')
    103             return uicore.font.MeasureTabstops([(text,) + LABEL_PARAMS])[0]
    104 
    105         if idx is None:
    106             colWidths = [ GetWidthFor(i) for i in xrange(len(MerDenEntry.headerInfo)) ]
    107             return colWidths
    108         return [GetWidthFor(idx)]
    109 
    110     @classmethod
    111     def GetHeadersHint(cls, i):
    112         key = cls.headerInfo.keys()[i]
    113         headerInfo = cls.headerInfo[key]
    114         return headerInfo.hintText
    115 
    116 
    117 class MerDenEntry(BaseMerDenEntry):
    118     default_name = 'mercDenEntry'
    119     isDragObject = True
    120 
    121     def ApplyAttributes(self, attributes):
    122         super(MerDenEntry, self).ApplyAttributes(attributes)
    123         self.AddReloadBtn()
    124 
    125     def Load(self, node):
    126         super(MerDenEntry, self).Load(node)
    127         if node.mercDenEntryInfo.has_complete_info:
    128             self.reloadBtn.Hide()
    129         else:
    130             self.reloadBtn.Show()
    131 
    132     def AddReloadBtn(self):
    133         self.reloadBtn = Button(parent=self, align=Align.CENTERRIGHT, label=GetByLabel('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/ReloadData'), func=self.ReloadEntry, density=Density.COMPACT, texturePath=eveicon.refresh)
    134         self.reloadBtn.Hide()
    135 
    136     def ReloadEntry(self, *args):
    137         node = self.sr.node
    138         reloadFunc = node.reloadFunc
    139         if reloadFunc:
    140             reloadFunc(self)
    141 
    142     @staticmethod
    143     def GetColumnSortValues(sortDict):
    144         return [ sortDict.get(h, '') for h in MerDenEntry.headerInfo ]
    145 
    146 
    147 class MerDenEmptySlotEntry(BaseMerDenEntry):
    148 
    149     def ApplyAttributes(self, attributes):
    150         super(MerDenEmptySlotEntry, self).ApplyAttributes(attributes)
    151         systemParent = self.systemLabel.parent
    152         systemParent.clipChildren = False
    153         text = GetByLabel('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/EmptySlotDesc')
    154         TextBody(parent=systemParent, text=text, align=Align.CENTERLEFT, left=LABELTABMARGIN, color=TextColor.SECONDARY)
    155         self.nameLabel.SetTextColor(TextColor.SECONDARY)
    156 
    157     @staticmethod
    158     def GetSortValue(node, by, direction, idx):
    159         if direction:
    160             return -9999999999999999999999L
    161         else:
    162             return 'zzzzzzzzzzzzzzzzzzzzz'
    163 
    164 
    165 def GetMercDenEntry(wnd, mercDenEntryInfo, isSelected):
    166     data = GetMercDenEntryData(wnd, mercDenEntryInfo, isSelected)
    167     entry = GetFromClass(MerDenEntry, data)
    168     return entry
    169 
    170 
    171 def GetMercDenEntryData(wnd, mercDenEntryInfo, isSelected):
    172     data = {}
    173     sortDict = {}
    174     if not mercDenEntryInfo.has_complete_info:
    175         labelsDict = {k:'' for k in MerDenEntry.headerInfo.keys()[1:]}
    176         labelsDict[DEN_COL_NAME] = GetByLabel('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/DenWithoutInfo')
    177         data['reloadFunc'] = wnd.ReloadEntry
    178     else:
    179         solarSystemName = cfg.evelocations.Get(mercDenEntryInfo.solar_system_id).name
    180         infomorphs_info = mercDenEntryInfo.infomorphs_info
    181         infomorphs_available = infomorphs_info.count
    182         denTypeID = mercDenEntryInfo.type_id
    183         denName = '%s %s' % (solarSystemName, evetypes.GetName(denTypeID))
    184         numMtos = FmtAmt(len(mercDenEntryInfo.activities))
    185         labelsDict = {DEN_COL_NAME: denName,
    186          DEN_COL_SYSTEM: solarSystemName,
    187          DEN_COL_PLANET: cfg.evelocations.Get(mercDenEntryInfo.planet_id).name if mercDenEntryInfo.planet_id else '-',
    188          DEN_COL_STATE: GetByLabel(LABEL_PATH_STATE_ACTIVE) if mercDenEntryInfo.is_enabled else GetByLabel(LABEL_PATH_STATE_INACTIVE),
    189          DEN_COL_INFOM: FmtAmt(infomorphs_available),
    190          DEN_COL_MTO: numMtos}
    191         sortDict = {k:v.lower() for k, v in labelsDict.iteritems()}
    192         sortDict[DEN_COL_INFOM] = infomorphs_available
    193         sortDict[DEN_COL_MTO] = len(mercDenEntryInfo.activities)
    194         data['LoadMotTooltipPanelFunc'] = wnd.LoadMotTooltipPanel
    195     sortValues = MerDenEntry.GetColumnSortValues(sortDict)
    196     data.update({'labelsDict': labelsDict,
    197      'itemID': mercDenEntryInfo.item_id,
    198      'OnClick': wnd.OnMercDenClicked,
    199      'mercDenEntryInfo': mercDenEntryInfo,
    200      'isSelected': isSelected,
    201      'GetMenu': wnd.GetMercDenMenu,
    202      'sortValues': sortValues})
    203     return data
    204 
    205 
    206 def GetEmptySlotEntry():
    207     labelsDict = {DEN_COL_NAME: GetByLabel('UI/Sovereignty/MercenaryDen/MyMercenaryDensWindow/EmptySlot')}
    208     data = {'labelsDict': labelsDict,
    209      'selectable': False,
    210      'GetSortValue': MerDenEmptySlotEntry.GetSortValue}
    211     return GetFromClass(MerDenEmptySlotEntry, data)