reinforcementTimeWnd.py (9064B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\structureBrowser\reinforcementTimeWnd.py 2 import gametime 3 from carbon.common.script.util.format import FmtDate 4 from carbon.common.script.util.linkUtil import GetShowInfoLink 5 from carbonui.primitives.container import Container 6 import carbonui.uiconst as uiconst 7 from carbonui.util.sortUtil import SortListOfTuples 8 from carbonui.button.group import ButtonGroup 9 from eve.client.script.ui.control.eveLabel import EveLabelMedium 10 from carbonui.control.window import Window 11 from eve.client.script.ui.structure.deployment.deploymentCont import ReinforcementTimeCont 12 from eve.client.script.ui.structure.structureBrowser.controllers.reinforceTimersBundle import GetDayAndHourText 13 from localization import GetByLabel 14 15 class ReinforcementTimeWnd(Window): 16 default_caption = 'UI/StructureBrowser/SetReinforcementTime' 17 default_windowID = 'ReinforcementTimeWnd' 18 default_width = 285 19 default_height = 290 20 default_minSize = (285, 290) 21 default_left = '__center__' 22 23 def ApplyAttributes(self, attributes): 24 Window.ApplyAttributes(self, attributes) 25 self.infoOnStructures = attributes.infoOnStructures 26 mainCont = Container(parent=self.sr.main, padding=6, clipChildren=True) 27 self.headerText = EveLabelMedium(name='headerText', parent=mainCont, align=uiconst.TOTOP, text='', state=uiconst.UI_NORMAL, padLeft=4) 28 self.headerText.LoadTooltipPanel = self.LoadLabelTooltipPanel 29 self.headerText.structureIDs = None 30 text = GetByLabel('UI/StructureBrowser/ReinforcementTimeChangeDelay') 31 self.delayText = EveLabelMedium(name='delayText', parent=mainCont, align=uiconst.TOTOP, text=text, state=uiconst.UI_NORMAL, padLeft=4) 32 structureTypeIDs = self.GetStructureTypeIDs() 33 self.reinforceTimeCont = ReinforcementTimeCont(parent=mainCont, name='reinforceTimeCont', align=uiconst.TOTOP, structureTypeIDs=structureTypeIDs) 34 self.bottomText = EveLabelMedium(name='bottomText', parent=mainCont, align=uiconst.TOTOP, text='', state=uiconst.UI_NORMAL, padLeft=4, padTop=10) 35 self.bottomTextTimes = EveLabelMedium(name='bottomTextTimes', parent=mainCont, align=uiconst.TOTOP, text='', state=uiconst.UI_NORMAL, padLeft=4) 36 self.buttons = ButtonGroup(parent=self.sr.main, idx=0) 37 self.buttons.AddButton(GetByLabel('UI/Commands/Apply'), self.ApplyChanges) 38 self.buttons.AddButton(GetByLabel('UI/Commands/Cancel'), self.Cancel) 39 reinforceTimers = attributes.reinforceTimers 40 changedStructures = attributes.changedStructures 41 doAllStructuresHavePendingChanges = attributes.doAllStructuresHavePendingChanges 42 if self.infoOnStructures: 43 self.LoadInfo(self.infoOnStructures, reinforceTimers, changedStructures, doAllStructuresHavePendingChanges) 44 45 def GetStructureTypeIDs(self): 46 typeIDs = set() 47 for each in self.infoOnStructures: 48 structureTypeID = each[2] 49 typeIDs.add(structureTypeID) 50 51 return typeIDs 52 53 def LoadInfo(self, infoOnStructures, reinforceTimers, changedStructures, doAllStructuresHavePendingChanges): 54 self.infoOnStructures = infoOnStructures 55 numStructures = len(infoOnStructures) 56 if numStructures == 1: 57 structureID = infoOnStructures[0][0] 58 structureInfo = sm.GetService('structureDirectory').GetStructureInfo(structureID) 59 if structureInfo: 60 structureLink = GetShowInfoLink(structureInfo.typeID, structureInfo.itemName, structureID) 61 headerText = GetByLabel('UI/StructureBrowser/ChangingReinforcementTimeForStructure', structureLink=structureLink) 62 else: 63 headerText = GetByLabel('UI/StructureBrowser/ChangingReinforcementTimeForStructures', numStructures=numStructures) 64 else: 65 headerText = GetByLabel('UI/StructureBrowser/ChangingReinforcementTimeForStructures', numStructures=numStructures) 66 self.headerText.text = headerText 67 structureTypeIDs = self.GetStructureTypeIDs() 68 self.reinforceTimeCont.LoadCont(reinforceTimers.GetReinforceWeekday(), reinforceTimers.GetReinforceHour(), structureTypeIDs=structureTypeIDs) 69 bottomText, bottomTextTimes = self.GetBottomText(reinforceTimers, changedStructures, doAllStructuresHavePendingChanges) 70 self.bottomText.text = bottomText 71 self.bottomTextTimes.text = bottomTextTimes 72 if len(changedStructures) > 1: 73 self.bottomText.LoadTooltipPanel = lambda tooltipPanel, *args: self.LoadChangedTimesTooltipPanel(tooltipPanel, changedStructures) 74 else: 75 self.bottomText.LoadTooltipPanel = None 76 self.SetWindowHeight() 77 78 def SetWindowHeight(self): 79 newHeight = self.sr.headerParent.height + 16 80 newHeight += self.headerText.textheight 81 newHeight += self.delayText.textheight 82 w, h = self.reinforceTimeCont.GetAutoSize() 83 newHeight += h 84 newHeight += self.bottomText.padTop 85 newHeight += self.bottomText.textheight 86 newHeight += self.bottomTextTimes.textheight 87 newHeight += self.buttons.height 88 self.height = newHeight 89 self.SetMinSize((self.default_minSize[0], newHeight)) 90 91 def GetBottomText(self, reinforceTimers, changedStructures, doAllStructuresHavePendingChanges): 92 if not changedStructures: 93 return ('', '') 94 numChangedStructures = len(changedStructures) 95 timeText = self.GetReinforcementChangeText(reinforceTimers, changedStructures) 96 if numChangedStructures == 1: 97 if doAllStructuresHavePendingChanges: 98 text = GetByLabel('UI/StructureBrowser/NewReinforcementTimesPending') 99 return (text, timeText) 100 else: 101 structureItemAndType = list(changedStructures)[0] 102 _, link = self.GetStructureNameAndLink(structureItemAndType[0]) 103 text = GetByLabel('UI/StructureBrowser/NewReinforcementTimesPendingForAStructureWithLink', structureLink=link) 104 return (text, timeText) 105 text = GetByLabel('UI/StructureBrowser/NewReinforcementTimesPendingForSomeStructures', numStructures=numChangedStructures) 106 if reinforceTimers.GetNextApply(): 107 if doAllStructuresHavePendingChanges: 108 text = GetByLabel('UI/StructureBrowser/NewReinforcementTimesPendingForAllTheStructures') 109 else: 110 timeText = '' 111 return (text, timeText) 112 113 def GetReinforcementChangeText(self, reinforceTimers, changedStructures): 114 nextDayText, nextHourText = GetDayAndHourText(reinforceTimers.GetNextReinforceDay(), reinforceTimers.GetNextReinforceHour()) 115 nextApply = reinforceTimers.GetNextApply() 116 if nextApply < gametime.GetWallclockTime(): 117 pendingText = GetByLabel('UI/StructureBrowser/ChangesArePending') 118 else: 119 pendingText = '%s: %s' % (GetByLabel('UI/StructureBrowser/TakesEffect'), FmtDate(nextApply)) 120 whenText = GetByLabel('UI/StructureBrowser/PendingTimesHour', hour=nextHourText) 121 text = '%s.<br>%s' % (whenText, pendingText) 122 return text 123 124 def LoadLabelTooltipPanel(self, tooltipPanel, label): 125 if self.infoOnStructures is None or len(self.infoOnStructures) < 2: 126 return 127 tooltipPanel.state = uiconst.UI_NORMAL 128 tooltipPanel.LoadGeneric1ColumnTemplate() 129 structureIDs = {structureID for structureID, _, _ in self.infoOnStructures} 130 self.AddStructureLinksToTooltipPanel(tooltipPanel, structureIDs) 131 132 def AddStructureLinksToTooltipPanel(self, tooltipPanel, structureIDs): 133 structureLinksList = [] 134 for eachID in structureIDs: 135 link = self.GetStructureNameAndLink(eachID) 136 if link: 137 structureLinksList.append(link) 138 139 structureLinksList = SortListOfTuples(structureLinksList) 140 for eachLink in structureLinksList: 141 tooltipPanel.AddLabelMedium(text=eachLink, state=uiconst.UI_NORMAL) 142 143 def LoadChangedTimesTooltipPanel(self, tooltipPanel, changedStructures): 144 tooltipPanel.state = uiconst.UI_NORMAL 145 tooltipPanel.LoadGeneric1ColumnTemplate() 146 self.AddStructureLinksToTooltipPanel(tooltipPanel, changedStructures) 147 148 def GetStructureNameAndLink(self, structureID): 149 structureInfo = sm.GetService('structureDirectory').GetStructureInfo(structureID) 150 if not structureInfo: 151 return 152 structureName = structureInfo.itemName 153 link = (structureName.lower(), GetShowInfoLink(structureInfo.typeID, structureName, structureID)) 154 return link 155 156 def ApplyChanges(self, *args): 157 reinforcementDay, reinforcementHour = self.reinforceTimeCont.GetReinforcementTime() 158 sm.RemoteSvc('structureVulnerability').UpdateReinforceTimesFromClient(self.infoOnStructures, reinforcementDay, reinforcementHour) 159 self.CloseByUser() 160 161 def Cancel(self, *args): 162 self.CloseByUser()