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)