upgradeEntry.py (16891B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\sov\sovHub\upgradeEntry.py 2 import carbonui.text.styles 3 from carbon.common.script.util.commonutils import StripTags 4 from collections import OrderedDict 5 import carbonui 6 import eveicon 7 import evetypes 8 from carbonui.control.buttonIcon import ButtonIcon 9 from carbonui.control.dragdrop.dragdata import TypeDragData 10 from carbonui.control.scrollentries import SE_BaseClassCore 11 from carbonui.fontconst import EVE_MEDIUM_FONTSIZE 12 from carbonui.primitives.container import Container 13 from carbonui.primitives.fill import Fill 14 from carbonui.primitives.line import Line 15 from carbonui.primitives.sprite import Sprite 16 from carbonui.uianimations import animations 17 from carbonui.util.various_unsorted import GetAttrs 18 from eve.client.script.ui import eveColor 19 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns 20 import carbonui.const as uiconst 21 from eve.client.script.ui.control.scrollUtil import ColumnInfo 22 from eve.client.script.ui.control.toggleSwitch import ToggleSwitchCompact 23 from eveexceptions import ExceptionEater 24 from eveservices.menu import GetMenuService 25 from localization import GetByLabel 26 from carbonui.uicore import uicore 27 SPRITE_SIZE = 12 28 MOVE_SPRITE_SIZE = 16 29 AVAILABLE_WIDTH = 430 30 31 class UpgradeEntry(BaseListEntryCustomColumns): 32 default_name = 'UpgradeEntry' 33 isDragObject = True 34 default_height = 24 35 headerInfo = d = OrderedDict() 36 d['priority'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnPriority', 'Tooltips/StructureUI/SovHubPriority') 37 d['upgrade'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnUpgrade', 'Tooltips/StructureUI/SovHubInstalledUpgrades', False) 38 d['power'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnPowerAllocation', 'Tooltips/StructureUI/SovHubAllocation') 39 d['workforce'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnWorkforceAllocation', 'Tooltips/StructureUI/SovHubAllocation') 40 d['upkeep'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnUpkeep', 'Tooltips/StructureUI/SovHubUpkeep') 41 d['startup'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnStartupCost', 'Tooltips/StructureUI/SovHubStartup') 42 d['gauge'] = ColumnInfo(-1, None) 43 d['state'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnState', 'Tooltips/StructureUI/SovHubState') 44 d['trash'] = ColumnInfo(-2, None) 45 46 def ApplyAttributes(self, attributes): 47 self._resourcesMissingFill = None 48 BaseListEntryCustomColumns.ApplyAttributes(self, attributes) 49 self.posIndicatorLine = PosIndicatorLine(parent=self, align=uiconst.TOTOP_NOPUSH, height=3) 50 self.entryController = self.node.entryController 51 self.hubController = self.node.hubController 52 self.AddAnchoredIcons() 53 self.AddPriority() 54 self.AddUpgradeName() 55 self.AddPowerAllocation() 56 self.AddWorkForceAllocation() 57 self.AddUpkeep() 58 self.AddStartup() 59 self.AddStateGauge() 60 self.AddOnlineState() 61 self.UpdateOnlineState() 62 self.AddTrashColumn() 63 self.UpdateEffectiveState() 64 65 def AddAnchoredIcons(self): 66 self.moveSprite = Sprite(parent=self, align=carbonui.Align.CENTERLEFT, pos=(0, 67 0, 68 MOVE_SPRITE_SIZE, 69 MOVE_SPRITE_SIZE), texturePath=eveicon.caret_up_down, pickState=carbonui.PickState.ON, hint=GetByLabel('UI/Sovereignty/SovHub/Upgrades/MoveUpgrades'), color=eveColor.TUNGSTEN_GREY) 70 self.moveSprite.GetDragData = self.GetDragData 71 self.moveSprite.isDragObject = True 72 self.moveSprite.Hide() 73 self.deleteSprite = ButtonIcon(parent=self, align=carbonui.Align.CENTERRIGHT, width=16, height=16, iconSize=16, texturePath=self.entryController.GetRemoveTexturePath(), hint=GetByLabel('UI/Sovereignty/SovHub/Upgrades/DeleteUpgrade'), func=self.entryController.DeleteUpgrade) 74 self.deleteSprite.Hide() 75 76 def AddPriority(self): 77 self.priortyCol = self.AddColumnContainer() 78 self.priorityLabel = carbonui.text.styles.TextBody(name='priorityLabel', parent=self.priortyCol, text=self.entryController.priorityText, align=carbonui.Align.CENTERRIGHT, left=SPRITE_SIZE + 8) 79 80 def AddUpgradeName(self): 81 self.upgradeNameCol = self.AddColumnContainer() 82 self.groupSprite = Sprite(parent=self.upgradeNameCol, align=carbonui.Align.CENTERLEFT, pos=(0, 83 0, 84 SPRITE_SIZE, 85 SPRITE_SIZE), texturePath=self.entryController.typeListTexture, hint=self.entryController.typeListHint, color=eveColor.TUNGSTEN_GREY) 86 self.upgradeNameLabel = carbonui.text.styles.TextBody(name='upgradeName', parent=self.upgradeNameCol, text=self.entryController.name, align=carbonui.Align.CENTERLEFT, left=SPRITE_SIZE + 8) 87 88 def AddPowerAllocation(self): 89 self.powerCol = self.AddColumnContainer() 90 self.powerSprite = Sprite(parent=self.powerCol, align=carbonui.Align.CENTERRIGHT, pos=(0, 91 0, 92 SPRITE_SIZE, 93 SPRITE_SIZE), texturePath=eveicon.power, color=eveColor.TUNGSTEN_GREY) 94 self.powerLabel = carbonui.text.styles.TextBody(name='powerLabel', parent=self.powerCol, text=self.entryController.powerText, align=carbonui.Align.CENTERRIGHT, left=self.powerSprite.width) 95 96 def AddWorkForceAllocation(self): 97 self.workforceCol = self.AddColumnContainer() 98 self.workforceSprite = Sprite(parent=self.workforceCol, align=carbonui.Align.CENTERRIGHT, pos=(0, 99 0, 100 SPRITE_SIZE, 101 SPRITE_SIZE), texturePath=eveicon.workforce, color=eveColor.TUNGSTEN_GREY) 102 self.workforceLabel = carbonui.text.styles.TextBody(name='workforceLabel', parent=self.workforceCol, text=self.entryController.workforceText, align=carbonui.Align.CENTERRIGHT, left=self.workforceSprite.width) 103 104 def AddUpkeep(self): 105 self.upkeepCol = self.AddColumnContainer() 106 fuelTexturePath = self.entryController.fuelTexturePath 107 self.uppkeepSprite = Sprite(parent=self.upkeepCol, align=carbonui.Align.CENTERRIGHT, pos=(uiconst.LABELTABMARGIN, 108 0, 109 SPRITE_SIZE, 110 SPRITE_SIZE), texturePath=fuelTexturePath, color=eveColor.TUNGSTEN_GREY) 111 self.uppkeepSprite.hint = evetypes.GetName(self.entryController.fuelTypeID) 112 self.upkeepLabel = carbonui.text.styles.TextBody(name='upkeepLabel', parent=self.upkeepCol, text=self.entryController.upkeepText, align=carbonui.Align.CENTERRIGHT, left=self.uppkeepSprite.left + self.uppkeepSprite.width) 113 114 def AddOnlineState(self): 115 self.onlineStateCol = self.AddColumnContainer() 116 self.onlineStateLabel = carbonui.text.styles.TextBody(name='upkeepLabel', parent=self.onlineStateCol, text='', align=carbonui.Align.CENTERLEFT, left=uiconst.LABELTABMARGIN) 117 self.onlineStateLabel.pickState = carbonui.PickState.ON 118 119 def AddStartup(self): 120 self.startupCol = self.AddColumnContainer() 121 fuelTexturePath = self.entryController.fuelTexturePath 122 self.startupSprite = Sprite(parent=self.startupCol, align=carbonui.Align.CENTERRIGHT, pos=(uiconst.LABELTABMARGIN, 123 0, 124 SPRITE_SIZE, 125 SPRITE_SIZE), texturePath=fuelTexturePath, color=eveColor.TUNGSTEN_GREY) 126 self.startupSprite.hint = evetypes.GetName(self.entryController.fuelTypeID) 127 self.startupLabel = carbonui.text.styles.TextBody(name='startupLabel', parent=self.startupCol, text=self.entryController.startupText, align=carbonui.Align.CENTERRIGHT, left=self.startupSprite.left + self.startupSprite.width) 128 129 def AddStateGauge(self): 130 col = self.AddColumnContainer() 131 self.onlineToggle = ToggleSwitchCompact(parent=col, checked=self.entryController.isConfiguredOnline, align=carbonui.Align.CENTER) 132 self.onlineToggle.on_switch_changed.connect(self.ChangeOnlineState) 133 self.onlineToggle.GetHint = self.GetToggleHint 134 135 def ConstructResourcesMissingFill(self): 136 if not self._resourcesMissingFill or self._resourcesMissingFill.destroyed: 137 self._resourcesMissingFill = Fill(name='_resourcesMissingFill', bgParent=self, color=eveColor.DANGER_RED[:3] + (0.0,)) 138 139 def OnColumnResize(self, newCols): 140 for i, width in enumerate(newCols): 141 self.columns[i].width = width - 1 142 143 @classmethod 144 def GetHeaders(cls): 145 return [ x.columnText for x in cls.headerInfo.itervalues() ] 146 147 @classmethod 148 def GetHeaderText(cls, i): 149 key = cls.headerInfo.keys()[i] 150 headerInfo = cls.headerInfo[key] 151 return headerInfo.columnText.strip() 152 153 @classmethod 154 def GetHeadersHint(cls, i): 155 key = cls.headerInfo.keys()[i] 156 headerInfo = cls.headerInfo[key] 157 return headerInfo.hintText 158 159 def GetDragData(self, *args): 160 self.sr.node.scroll.SelectNode(self.sr.node) 161 dragData = [UpgradeTypeDragData(self.sr.node.typeID, self.sr.node.idx)] 162 return dragData 163 164 def OnMouseEnter(self, *args): 165 showRed = self.entryController.installedUpgradeData.isInRestrictedPowerState or self.entryController.installedUpgradeData.isConfiguredOffline and self.entryController.isLackingSomething 166 self._showHilite = not showRed 167 super(UpgradeEntry, self).OnMouseEnter(args) 168 self.moveSprite.Show() 169 self.deleteSprite.Show() 170 if showRed: 171 self.UpdateResourcesMissingFill(True) 172 173 def OnMouseExit(self, *args): 174 self._showHilite = True 175 super(UpgradeEntry, self).OnMouseExit(args) 176 self.moveSprite.Hide() 177 self.deleteSprite.Hide() 178 self.UpdateResourcesMissingFill(False) 179 180 def OnDropData(self, dragObj, nodes, *args): 181 self.posIndicatorLine.HidePosIndicator() 182 if GetAttrs(self, 'parent', 'OnDropData'): 183 self.parent.OnDropData(dragObj, nodes, idx=self.sr.node.idx) 184 185 def OnDragEnter(self, dragObj, nodes, *args): 186 dropError = self.hubController.GetDropError(nodes[0]) 187 if dropError: 188 color = eveColor.DANGER_RED 189 else: 190 color = eveColor.ICE_WHITE 191 self.posIndicatorLine.ShowPosIndicator(color) 192 193 def OnDragExit(self, *args): 194 self.posIndicatorLine.HidePosIndicator() 195 196 def UpdateResourcesMissingFill(self, on): 197 if on: 198 self.ConstructResourcesMissingFill() 199 animations.FadeIn(self._resourcesMissingFill, endVal=0.1) 200 else: 201 if not self._resourcesMissingFill or self._resourcesMissingFill.destroyed: 202 return 203 animations.FadeOut(self._resourcesMissingFill) 204 205 def ChangeOnlineState(self, *args): 206 newState = not self.entryController.isConfiguredOnline 207 self.hubController.SetOnlineState(self.entryController.typeID, newState) 208 209 def UpdateOnlineState(self): 210 if self.entryController.isConfiguredOnline: 211 self.onlineToggle.SetChecked(True, False) 212 else: 213 self.onlineToggle.SetChecked(False, False) 214 if self.entryController.isPowerStateFunctional: 215 newOpacity = 1.0 216 else: 217 newOpacity = 0.5 218 for element in [self.priortyCol, 219 self.upgradeNameCol, 220 self.powerCol, 221 self.workforceCol, 222 self.upkeepCol, 223 self.startupCol, 224 self.onlineStateCol]: 225 element.opacity = newOpacity 226 227 def AddTrashColumn(self): 228 col = self.AddColumnContainer() 229 230 def UpdateEffectiveState(self): 231 text, hint = self.entryController.GetOnlineStateTextAndHints() 232 self.onlineStateLabel.text = text 233 self.onlineStateLabel.hint = hint 234 entryTextColor = self.entryController.GetEntryTextColor() 235 self.priorityLabel.SetRGBA(*entryTextColor) 236 self.groupSprite.SetRGBA(*entryTextColor) 237 self.upgradeNameLabel.SetRGBA(*entryTextColor) 238 self.priorityLabel.SetRGBA(*entryTextColor) 239 self.powerSprite.SetRGBA(*self.entryController.GetPowerColor(eveColor.TUNGSTEN_GREY)) 240 self.powerLabel.SetRGBA(*self.entryController.GetPowerColor()) 241 self.workforceSprite.SetRGBA(*self.entryController.GetWorkforceColor(eveColor.TUNGSTEN_GREY)) 242 self.workforceLabel.SetRGBA(*self.entryController.GetWorkforceColor()) 243 self.uppkeepSprite.SetRGBA(*self.entryController.GetReagentColor(eveColor.TUNGSTEN_GREY)) 244 self.upkeepLabel.SetRGBA(*self.entryController.GetReagentColor()) 245 self.startupSprite.SetRGBA(*self.entryController.GetReagentStartupColor(eveColor.TUNGSTEN_GREY)) 246 self.startupLabel.SetRGBA(*self.entryController.GetReagentStartupColor()) 247 248 def GetMenu(self): 249 typeID = self.entryController.typeID 250 itemID = self.entryController.itemID 251 return GetMenuService().GetMenuFromItemIDTypeID(itemID, typeID, includeMarketDetails=True) 252 253 @staticmethod 254 def GetColWidths(node, idx = None): 255 if node.decoClass != UpgradeEntry: 256 return 257 LABEL_PARAMS = (EVE_MEDIUM_FONTSIZE, 0, 0) 258 controller = node.entryController 259 260 def GetWidthFor(idx): 261 if idx == 0: 262 return 16 + uicore.font.MeasureTabstops([(controller.priorityText,) + LABEL_PARAMS])[0] 263 if idx == 1: 264 return SPRITE_SIZE + 8 + uicore.font.MeasureTabstops([(controller.name,) + LABEL_PARAMS])[0] 265 if idx == 2: 266 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.powerText,) + LABEL_PARAMS])[0] 267 if idx == 3: 268 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.workforceText,) + LABEL_PARAMS])[0] 269 if idx == 4: 270 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.upkeepText,) + LABEL_PARAMS])[0] 271 if idx == 5: 272 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.startupText,) + LABEL_PARAMS])[0] 273 if idx == 6: 274 return 40 275 if idx == 7: 276 text, _ = controller.GetOnlineStateTextAndHints() 277 return uicore.font.MeasureTabstops([(text,) + LABEL_PARAMS])[0] 278 if idx == 8: 279 return 20 280 return 50 281 282 if idx is None: 283 colWidths = [ GetWidthFor(i) for i in xrange(len(UpgradeEntry.headerInfo)) ] 284 return colWidths 285 return [GetWidthFor(idx)] 286 287 def GetToggleHint(self): 288 if self.entryController.isConfiguredOffline and self.entryController.isLackingSomething: 289 return self.GetDisabledToggleHint() 290 return ToggleSwitchCompact.GetHint(self.onlineToggle) 291 292 def GetDisabledToggleHint(self): 293 return GetByLabel('UI/Sovereignty/SovHub/Upgrades/LackingResourcesHint') 294 295 @classmethod 296 def GetCopyData(cls, node): 297 controller = node.entryController 298 onlineState, _ = controller.GetOnlineStateTextAndHints() 299 fuelType = evetypes.GetName(controller.fuelTypeID) if controller.fuelTypeID else '' 300 textList = [controller.priorityText, 301 controller.typeListHint, 302 controller.name, 303 controller.powerValue or '', 304 controller.workforceValue or '', 305 controller.staticData.consumption_per_hour, 306 controller.staticData.startup_cost, 307 fuelType, 308 StripTags(onlineState)] 309 return '\t'.join([ unicode(x) for x in textList ]) 310 311 def Close(self): 312 with ExceptionEater('Closing UpgradeEntry'): 313 self.onlineToggle.on_switch_changed.disconnect(self.ChangeOnlineState) 314 self.entryController = None 315 self.hubController = None 316 super(UpgradeEntry, self).Close() 317 318 319 class PosIndicatorLine(Container): 320 321 def ApplyAttributes(self, attributes): 322 super(PosIndicatorLine, self).ApplyAttributes(attributes) 323 self.line = None 324 325 def CheckConstructPosIndicatorLine(self): 326 if not self.line: 327 self.line = Line(parent=self, align=uiconst.TOTOP_NOPUSH, weight=2, state=uiconst.UI_DISABLED, opacity=0.0, idx=0) 328 329 def ShowPosIndicator(self, color = None): 330 self.CheckConstructPosIndicatorLine() 331 color = color or eveColor.ICE_WHITE 332 self.line.SetRGBA(*color) 333 334 def HidePosIndicator(self): 335 if self.line: 336 self.line.opacity = 0.0 337 338 339 class UpgradeTypeDragData(TypeDragData): 340 341 def __init__(self, typeID, idx): 342 super(UpgradeTypeDragData, self).__init__(typeID) 343 self.idx = idx 344 345 346 class UpgradeLastEntry(SE_BaseClassCore): 347 __guid__ = 'UpgradeLastEntry' 348 default_state = uiconst.UI_DISABLED 349 350 def ApplyAttributes(self, attributes): 351 SE_BaseClassCore.ApplyAttributes(self, attributes) 352 self.posIndicator = PosIndicatorLine(parent=self) 353 354 def Load(self, node): 355 pass 356 357 def ShowIndicator(self, color): 358 self.posIndicator.ShowPosIndicator(color) 359 360 def HideIndicator(self): 361 self.posIndicator.HidePosIndicator() 362 363 def GetDynamicHeight(self, width): 364 return 2