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

all_ui_sovereignty.py (5602B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\Alliances\all_ui_sovereignty.py
      2 import blue
      3 import carbonui.const as uiconst
      4 import uthread
      5 from carbon.common.script.util.format import FmtDate
      6 from carbonui import TextColor
      7 from carbonui.control.button import Button
      8 from carbonui.control.combo import Combo
      9 from carbonui.primitives.container import Container
     10 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     11 from entosis.entosisConst import CHANGE_PRIMETIME_DELAY
     12 from eve.client.script.ui.control.eveLabel import EveLabelLargeBold, EveLabelMedium
     13 from eve.client.script.ui.control.utilMenu import UtilMenu
     14 from eve.common.lib.appConst import corpRoleDirector
     15 from inventorycommon.util import IsNPC
     16 from localization import GetByLabel
     17 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     18 from sovDashboard.dashboard import SovDashboard
     19 
     20 class FormAlliancesSovereignty(Container):
     21     is_loaded = False
     22 
     23     def Load(self, *args):
     24         if self.is_loaded:
     25             return
     26         self.is_loaded = True
     27         self.primeTimeInfo = None
     28         self.ConstructTopCont()
     29         uthread.new(self.UpdatePrimeInfo)
     30         self.sovDashBoard = SovDashboard(parent=self, padTop=16)
     31         self.sovDashBoard.CreateWindow()
     32 
     33     def ConstructTopCont(self):
     34         topCont = ContainerAutoSize(name='topCont', parent=self, align=uiconst.TOTOP, alignMode=uiconst.TOTOP)
     35         EveLabelMedium(parent=topCont, text=GetByLabel('UI/Sovereignty/DefaultVulnerabilityTimeLabel'), align=uiconst.TOTOP)
     36         self.primeTimeMenu = UtilMenu(parent=topCont, align=uiconst.CENTERRIGHT, menuAlign=uiconst.TOPRIGHT, GetUtilMenu=self.PrimeTimeMenu)
     37         execCorpID = sm.GetService('alliance').GetAlliance(session.allianceid).executorCorpID
     38         if self._IsDirectorInExecCorp(execCorpID):
     39             self.primeTimeMenu.Show()
     40         self.timeLabel = EveLabelMedium(parent=topCont, align=uiconst.TOTOP, color=TextColor.HIGHLIGHT)
     41 
     42     def UpdatePrimeInfo(self):
     43         self.primeTimeInfo = sm.GetService('alliance').GetPrimeTimeInfo()
     44         self.UpdateText()
     45 
     46     def UpdateText(self):
     47         if self.primeTimeInfo is None or self.primeTimeInfo.currentPrimeHour is None:
     48             text = GetByLabel('UI/Common/Unknown')
     49         else:
     50             newPrimeHour = self.primeTimeInfo.newPrimeHour
     51             validAfter = self.primeTimeInfo.newPrimeHourValidAfter
     52             now = blue.os.GetWallclockTime()
     53             if newPrimeHour is not None and now < validAfter:
     54                 text = GetByLabel('UI/Sovereignty/VulnerabilityTimeWithFutureChange', hour=self.primeTimeInfo.currentPrimeHour, newHour=self.primeTimeInfo.newPrimeHour, validAfterDate=self.primeTimeInfo.newPrimeHourValidAfter)
     55             else:
     56                 currentPrimeHour = self.GetCurrentPrimeHour()
     57                 text = GetByLabel('UI/Sovereignty/VulnerabilityTime', hour=currentPrimeHour)
     58         self.timeLabel.SetText(text)
     59 
     60     def PrimeTimeMenu(self, menuParent):
     61         headerCont = menuParent.AddContainer(align=uiconst.TOTOP, height=20, padding=uiconst.defaultPadding)
     62         EveLabelLargeBold(parent=headerCont, text=GetByLabel('UI/Sovereignty/SetSovereigntyHour'), align=uiconst.TOTOP)
     63         menuParent.AddSpace(height=10)
     64         text = menuParent.AddText(GetByLabel('UI/Sovereignty/SetNewVulnerabilityTimeDescription'))
     65         text.GetEntryWidth = lambda mc = text: 250
     66         cont = menuParent.AddContainer(align=uiconst.TOTOP, height=60, padding=uiconst.defaultPadding)
     67         myCont = Container(name='myCont', parent=cont, align=uiconst.TOTOP, height=32, padTop=10)
     68         currentPrimeHour = self.GetCurrentPrimeHour()
     69         self.primeTimeCombo = Combo(name='primeTimeCombo', parent=myCont, options=self.GetTimeComboOptions(), select=currentPrimeHour, width=150)
     70         Button(name='SetPrimeTimeBtn', align=uiconst.TOPRIGHT, parent=myCont, label=GetByLabel('UI/Common/CommandSet'), func=self.SetPrimeTime)
     71 
     72     def SetPrimeTime(self, *args):
     73         primeTimeNewValue = self.primeTimeCombo.GetValue()
     74         if self.primeTimeInfo and self.primeTimeInfo.newPrimeHour:
     75             newPrimeHour = self.primeTimeInfo.newPrimeHour
     76             validAfter = self.primeTimeInfo.newPrimeHourValidAfter
     77             newerPrimeHour = blue.os.GetWallclockTime() + CHANGE_PRIMETIME_DELAY
     78             if prompt_player_fsd_dialog('updateNewPrimeTime', {'currentPendingTime': '%s:00' % newPrimeHour,
     79              'currentPendingDate': FmtDate(validAfter, 'ss'),
     80              'newPendingTime': '%s:00' % primeTimeNewValue,
     81              'newPendingDate': FmtDate(newerPrimeHour, 'ss')}, uiconst.YESNO) != uiconst.ID_YES:
     82                 return
     83         sm.GetService('alliance').SetPrimeHour(primeTimeNewValue)
     84         self.UpdatePrimeInfo()
     85         self.primeTimeMenu.CloseMenu()
     86 
     87     def GetTimeComboOptions(self):
     88         return [ (GetByLabel('UI/Sovereignty/VulnerabilityTime', hour=i), i) for i in xrange(24) ]
     89 
     90     def GetCurrentPrimeHour(self):
     91         currentPrimeHour = 0
     92         if self.primeTimeInfo and self.primeTimeInfo.currentPrimeHour is not None:
     93             currentPrimeHour = self.primeTimeInfo.currentPrimeHour
     94         return currentPrimeHour
     95 
     96     def _IsDirectorInExecCorp(self, executorCorpID):
     97         if session.allianceid is None:
     98             return False
     99         if IsNPC(session.corpid):
    100             return False
    101         if session.corpid != executorCorpID:
    102             return False
    103         if corpRoleDirector & session.corprole != corpRoleDirector:
    104             return False
    105         return True