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

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()