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

fleetwindow.py (15399B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fleet\fleetwindow.py
      2 import carbonui.const as uiconst
      3 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst
      4 import evefleet
      5 import localization
      6 import uthread
      7 from carbonui.control.contextMenu.menuData import MenuData
      8 from carbonui.control.contextMenu.menuEntryData import MenuEntryData
      9 from clientsettings.setting import SessionSettingBool
     10 from carbonui.window.widget import WidgetWindow
     11 from carbonui.primitives.container import Container
     12 from carbonui.window.header.tab_navigation import TabNavigationWindowHeader
     13 from eve.client.script.ui.shared.fleet import fleetbroadcastexports, fleetBroadcastConst
     14 from eve.client.script.ui.shared.fleet.fleet import MyFleetPanel
     15 from eve.client.script.ui.shared.fleet.fleetBroadcastConst import broadcastButtonIDs
     16 from eve.client.script.ui.shared.fleet.fleetBroadcastCont import FleetBroadcastCont
     17 from eve.client.script.ui.shared.fleet.fleetConst import FLEET_VIEW_FLAT_LIST_SETTING
     18 from eve.client.script.ui.shared.fleet.fleetFormations import FleetFormationsPanel, FleetFormationWnd
     19 from eve.client.script.ui.shared.fleet.fleetRespawnPoints import RespawnPanel
     20 from eve.client.script.ui.shared.fleet.fleetUtil import ExportLootHistory, OnDropInMyFleet
     21 from eve.client.script.ui.shared.fleet.fleetbroadcast import BroadcastHistoryPanel
     22 from eve.client.script.ui.shared.fleet.fleetbroadcast import BroadcastSettings
     23 from eve.client.script.ui.shared.fleet.fleetfinder import PanelFleetFinder, PanelAdvert, PanelFleetFinderAndAdvert
     24 from eve.client.script.ui.shared.fleet.panelFormFleet import PanelFormFleet
     25 from eve.client.script.ui.shared.fleet.storeFleetSetupWnd import StoredFleetSetupListWnd
     26 from eve.common.script.util.esiUtils import CopyESIFleetUrlToClipboard
     27 from eveexceptions import ExceptionEater
     28 from evefleet.client.util import GetFleetSetupOptionHint
     29 from menu import MenuLabel
     30 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     31 from signals.signalUtil import ConnectSignals, DisconnectSignals
     32 import evefleet.fleetSetupConst as fsConst
     33 PANEL_BROADCASTS = 'broadcasts'
     34 PANEL_FLEETFINDER = 'fleetfinder'
     35 PANEL_MYADVERT = 'myadvert'
     36 PANEL_MYFLEET = 'myfleet'
     37 PANEL_RESPAWN = 'respawnPoints'
     38 PANEL_FORMATIONS = 'warpFormations'
     39 PANEL_FORMFLEET = 'formFleet'
     40 
     41 class FleetWindow(WidgetWindow):
     42     __notifyevents__ = ['OnFleetFormationWndChanged']
     43     default_width = 500
     44     default_height = 400
     45     default_minSize = (270, 120)
     46     default_windowID = 'fleetwindow'
     47     default_captionLabelPath = 'Tooltips/Neocom/Fleet'
     48     default_descriptionLabelPath = 'Tooltips/Neocom/Fleet_description'
     49     default_iconNum = 'res:/ui/Texture/WindowIcons/fleet.png'
     50     default_isCompactable = True
     51 
     52     def ApplyAttributes(self, attributes):
     53         super(FleetWindow, self).ApplyAttributes(attributes)
     54         self.formationsPanel = None
     55         self.myFleetPanel = None
     56         self.respawnPanel = None
     57         self.fleetSvc = sm.GetService('fleet')
     58         self.TryOpenStandaloneFormationWnd()
     59         self.InitBroadcastBottom()
     60         self.ConstructTabGroup()
     61         self.panelsCont = Container(name='panelsCont', parent=self.sr.main, clipChildren=True)
     62         self.ReconstructTabs()
     63         self.tabGroup.AutoSelect()
     64         self.on_content_padding_changed.connect(self.ApplyContentPadding)
     65 
     66     def get_wnd_menu_unique_name(self):
     67         return pConst.UNIQUE_NAME_FLEET_SETTINGS
     68 
     69     def TryOpenStandaloneFormationWnd(self):
     70         if session.fleetid and settings.char.ui.Get('fleetFormationStandalone', False):
     71             FleetFormationWnd.Open()
     72 
     73     def Prepare_Header_(self):
     74         self.header = TabNavigationWindowHeader()
     75 
     76     def ReconstructTabs(self):
     77         self.panelsCont.Flush()
     78         self.tabGroup.Flush()
     79         if session.fleetid is not None:
     80             self.myFleetPanel = MyFleetPanel(parent=self.panelsCont)
     81             self.historyPanel = BroadcastHistoryPanel(parent=self.panelsCont)
     82             self.respawnPanel = RespawnPanel(parent=self.panelsCont)
     83             self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/Fleet'), self.myFleetPanel, tabID=PANEL_MYFLEET, uniqueName=pConst.UNIQUE_NAME_FLEET_MY_FLEET_TAB)
     84             self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/FleetWindow/Broadcasts'), self.historyPanel, tabID=PANEL_BROADCASTS, uniqueName=pConst.UNIQUE_NAME_FLEET_HISTORY_TAB)
     85             self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/Respawn/Respawn'), self.respawnPanel, tabID=PANEL_RESPAWN, uniqueName=pConst.UNIQUE_NAME_FLEET_ACTIVE_RECLONERS_TAB)
     86             if self.IsFormationsTabVisible():
     87                 self.formationsPanel = FleetFormationsPanel(parent=self.panelsCont)
     88                 self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/FleetFormations/Formations'), self.formationsPanel, tabID=PANEL_FORMATIONS)
     89             self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/FleetRegistry/Advert'), PanelAdvert(parent=self.panelsCont), tabID=PANEL_MYADVERT)
     90             p = PanelFleetFinderAndAdvert(parent=self.panelsCont)
     91             self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/FleetRegistry/FindFleets'), p, tabID=PANEL_FLEETFINDER, uniqueName=pConst.UNIQUE_NAME_FLEET_FINDER_TAB)
     92         else:
     93             self.tabGroup.AddTab(localization.GetByLabel('Tooltips/Neocom/Fleet'), PanelFormFleet(parent=self.panelsCont), tabID=PANEL_FORMFLEET)
     94             self.tabGroup.AddTab(localization.GetByLabel('UI/Fleet/FleetWindow/FleetFinder'), PanelFleetFinder(parent=self.panelsCont), tabID=PANEL_FLEETFINDER, uniqueName=pConst.UNIQUE_NAME_FLEET_FINDER_TAB)
     95         if session.fleetid is not None:
     96             myFleetTab = self.tabGroup.GetTabs()[0]
     97             myFleetTab.OnTabDropData = OnDropInMyFleet
     98 
     99     def IsFormationsTabVisible(self):
    100         return not settings.char.ui.Get('fleetFormationStandalone', False) or not FleetFormationWnd.GetIfOpen()
    101 
    102     def ConstructTabGroup(self):
    103         self.tabGroup = self.header.tab_group
    104         self.tabGroup.callback = self.OnTabGroup
    105 
    106     def SelectFirstTab(self):
    107         panelID = PANEL_MYFLEET if session.fleetid else PANEL_FORMFLEET
    108         uthread.new(self.tabGroup.ShowPanelByID, panelID)
    109 
    110     def OnFleetFormationWndChanged(self, *args):
    111         self.ReconstructTabs()
    112         if not self.IsFormationsTabVisible():
    113             self.SelectFirstTab()
    114         else:
    115             self.tabGroup.AutoSelect()
    116 
    117     def InitBroadcastBottom(self):
    118         self.content_padding
    119         self.broadcastCont = FleetBroadcastCont(name='broadcastCont', align=uiconst.TOBOTTOM, parent=self.sr.main, clipChildren=True, innerPadding=self.content_padding)
    120         self.ApplyContentPadding()
    121 
    122     def ApplyContentPadding(self, *args):
    123         padLeft, _, padRight, padBottom = self.content_padding
    124         self.broadcastCont.padding = (-padLeft,
    125          0,
    126          -padRight,
    127          -padBottom)
    128         self.broadcastCont.SetInnerPadding(self.content_padding)
    129 
    130     def UpdateBottomContVisibility(self):
    131         panelID = self.tabGroup.GetSelectedID()
    132         if not session.fleetid or panelID in (PANEL_FLEETFINDER, PANEL_MYADVERT):
    133             self.broadcastCont.Hide()
    134         else:
    135             self.broadcastCont.Show()
    136 
    137     def OnTabGroup(self, tabID, oldTabID):
    138         self.UpdateBottomContVisibility()
    139 
    140     def GotoTab(self, idx):
    141         self.tabGroup.SelectByIdx(idx)
    142 
    143     def StartFleetFromSetup(self):
    144         m = MenuData()
    145         fleetSetupsByName = self.fleetSvc.GetFleetSetups()
    146         listOfSetups = sorted(fleetSetupsByName.values(), key=lambda x: x[fsConst.FS_NAME].lower())
    147         for eachSetup in listOfSetups:
    148             setupName = eachSetup[fsConst.FS_NAME]
    149             hint = GetFleetSetupOptionHint(eachSetup)
    150             m.AddEntry(setupName, func=lambda sn = setupName: self.fleetSvc.StartNewFleet(sn), hint=hint)
    151 
    152         return m
    153 
    154     def GetMenuMoreOptions(self):
    155         menuData = super(FleetWindow, self).GetMenuMoreOptions()
    156         menuData += self.GetFleetMenuTop()
    157         return menuData
    158 
    159     def GetFleetMenuTop(self):
    160         fleetSvc = self.fleetSvc
    161         menuData = MenuData()
    162         if session.fleetid is None:
    163             menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/FormFleet'), fleetSvc.StartNewFleet)
    164             if fleetSvc.GetSetups():
    165                 startFleetFromSetupOptions = self.StartFleetFromSetup()
    166                 menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/FormFleetWithSetup'), subMenuData=startFleetFromSetupOptions)
    167             menuData.AddSeparator()
    168         else:
    169             menuData.AddEntry(MenuLabel('UI/Fleet/LeaveMyFleet'), fleetSvc.LeaveFleet)
    170             if session.fleetrole in [evefleet.fleetRoleLeader, evefleet.fleetRoleWingCmdr, evefleet.fleetRoleSquadCmdr]:
    171                 menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/Regroup'), lambda : fleetSvc.Regroup())
    172             if fleetSvc.HasActiveBeacon(session.charid):
    173                 menuData.AddEntry(MenuLabel('UI/Fleet/BroadcastJumpBeacon'), lambda : fleetSvc.SendBroadcast_JumpBeacon())
    174             menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/Broadcasts'), subMenuData=self._GetBroadcastMenu())
    175             menuData.AddSeparator()
    176             menuData.AddEntry(MenuLabel('UI/Fleet/FleetBroadcast/BroadcastSettings'), lambda : BroadcastSettings.Open())
    177             if FLEET_VIEW_FLAT_LIST_SETTING.is_enabled():
    178                 hierarchyText = MenuLabel('UI/Fleet/FleetWindow/ViewAsHierarchy')
    179             else:
    180                 hierarchyText = MenuLabel('UI/Fleet/FleetWindow/ViewAsFlatList')
    181             menuData.AddEntry(hierarchyText, FLEET_VIEW_FLAT_LIST_SETTING.toggle)
    182             menuData.AddSeparator()
    183             menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/StoreFleetSetup'), fleetSvc.StoreSetup)
    184             if fleetSvc.IsCommanderOrBoss():
    185                 if fleetSvc.GetSetups():
    186                     fleetSetupOptions = self.GetFleetSetups()
    187                     menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/FleetSetups'), subMenuData=fleetSetupOptions)
    188             menuData.AddSeparator()
    189             takesFleetWarp = fleetSvc.TakesFleetWarp()
    190             acceptsFleetWarpSetting = SessionSettingBool(takesFleetWarp)
    191             acceptsFleetWarpSetting.on_change.connect(self.ChangeAcceptsFleetWarp)
    192             menuData.AddCheckbox(MenuLabel('UI/Fleet/FleetWindow/AcceptFleetWarp'), acceptsFleetWarpSetting)
    193             acceptsConduitJumps = fleetSvc.AcceptsConduitJumps()
    194             acceptsConduitJumpsSetting = SessionSettingBool(acceptsConduitJumps)
    195             acceptsConduitJumpsSetting.on_change.connect(self.ChangeAcceptsConduitJumps)
    196             menuData.AddCheckbox(MenuLabel('UI/Fleet/FleetWindow/AcceptConduitJumps'), acceptsConduitJumpsSetting)
    197             acceptsRegroups = fleetSvc.AcceptsFleetRegroups()
    198             acceptsRegroupSetting = SessionSettingBool(acceptsRegroups)
    199             acceptsRegroupSetting.on_change.connect(self.ChangeAcceptsRegroups)
    200             menuData.AddCheckbox(MenuLabel('UI/Fleet/FleetWindow/AcceptRegroup'), acceptsRegroupSetting)
    201             menuData.AddSeparator()
    202             if fleetSvc.IsBoss():
    203                 menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/SetFleetMaxSize'), fleetSvc.SetFleetMaxSize)
    204                 options = fleetSvc.GetOptions()
    205                 freemoveSetting = SessionSettingBool(options.isFreeMove)
    206                 freemoveSetting.on_change.connect(self._ChangeFreeMove)
    207                 menuData.AddCheckbox(MenuLabel('UI/Fleet/FleetWindow/SetFreeMove'), freemoveSetting)
    208             menuData.AddSeparator()
    209             if fleetSvc.IsCommanderOrBoss():
    210                 menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/ShowFleetComposition'), fleetSvc.OpenFleetCompositionWindow)
    211             if fleetSvc.IsBoss():
    212                 if fleetSvc.options.isRegistered:
    213                     menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/EditAdvert'), fleetSvc.OpenRegisterFleetWindow)
    214                     menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/RemoveAdvert'), fleetSvc.UnregisterFleet)
    215                 else:
    216                     menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/CreateAdvert'), fleetSvc.OpenRegisterFleetWindow)
    217                 menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/OpenJoinRequest'), fleetSvc.OpenJoinRequestWindow)
    218                 menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/GetFleetID'), self._CopyESIFleetUrlToClipboard)
    219             menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/OpenFleetWatchlist'), sm.GetService('cmd').OpenFleetWatchlist)
    220             menuData.AddEntry(MenuLabel('UI/Fleet/FleetWindow/ExportLootHistory'), ExportLootHistory)
    221             if fleetSvc.IsBoss():
    222                 menuData.AddEntry(MenuLabel('UI/Fleet/DisbandFleet'), self.DisbandFleet)
    223         return menuData
    224 
    225     def _ChangeFreeMove(self, value, *args):
    226         self.fleetSvc.SetOptions(isFreeMove=value)
    227 
    228     def ChangeAcceptsFleetWarp(self, value, *args):
    229         self.fleetSvc.SetAcceptsFleetWarpValue(value)
    230 
    231     def ChangeAcceptsConduitJumps(self, value, *args):
    232         self.fleetSvc.SetAcceptConduitJumpsValue(value)
    233 
    234     def ChangeAcceptsRegroups(self, value, *args):
    235         self.fleetSvc.SetAcceptRegroupValue(value)
    236 
    237     def DisbandFleet(self):
    238         if prompt_player_fsd_dialog('DisbandFleet', {}, uiconst.YESNO) != uiconst.ID_YES:
    239             return
    240         return self.fleetSvc.DisbandFleet()
    241 
    242     def _GetBroadcastMenu(self):
    243         m = []
    244         for broadcastID in broadcastButtonIDs:
    245             hint = fleetbroadcastexports.GetBroadcastName(broadcastID)
    246             m.append(MenuEntryData(hint, lambda _broadcastID = broadcastID: self.fleetSvc.SendBroadcast(_broadcastID), texturePath=fleetBroadcastConst.iconsByBroadcastType[broadcastID]))
    247 
    248         if session.fleetrole in evefleet.fleetCmdrRoles:
    249             m.append(MenuEntryData(localization.GetByLabel('UI/Fleet/FleetBroadcast/Commands/BroadcastTravelToMe'), lambda : self.fleetSvc.SendBroadcast_TravelTo(session.solarsystemid2), texturePath=fleetBroadcastConst.iconsByBroadcastType[fleetBroadcastConst.BROADCAST_TRAVEL_TO]))
    250         return m
    251 
    252     def GetFleetSetups(self):
    253         fleetSetupsByName = self.fleetSvc.GetFleetSetups()
    254         m = self.fleetSvc.GetSetups()
    255         if fleetSetupsByName:
    256             m.AddSeparator()
    257             m.AddEntry(MenuLabel('UI/Fleet/FleetWindow/SetupsOverview'), self.OpenStoredFleetSetupListWnd)
    258         return m
    259 
    260     def OpenStoredFleetSetupListWnd(self):
    261         StoredFleetSetupListWnd.Open(fleetSvc=self.fleetSvc)
    262 
    263     def UpdateHeader(self):
    264         nMembers = len(self.myFleetPanel.members)
    265         info = self.fleetSvc.GetMemberInfo(session.charid)
    266         if info is None:
    267             return
    268         if info.role == evefleet.fleetRoleLeader:
    269             caption = localization.GetByLabel('UI/Fleet/FleetWindow/FleetHeaderBoss', numMembers=nMembers)
    270         elif info.role == evefleet.fleetRoleWingCmdr:
    271             caption = localization.GetByLabel('UI/Fleet/FleetWindow/FleetHeaderWingCmdr', numMembers=nMembers, wingName=info.wingName)
    272         else:
    273             caption = localization.GetByLabel('UI/Fleet/FleetWindow/FleetHeaderSquadMember', numMembers=nMembers, wingName=info.wingName, squadName=info.squadName)
    274         self.SetCaption(caption)
    275 
    276     def _CopyESIFleetUrlToClipboard(self):
    277         CopyESIFleetUrlToClipboard(session.fleetid)