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

sessionChangeWindowOpener.py (7644B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\sessionChangeWindowOpener.py
      2 import logging
      3 import inventorycommon.const as invConst
      4 from carbonui import uiconst
      5 from carbonui.control.window import Window
      6 from carbonui.window.settings import GetRegisteredState
      7 from eve.client.script.ui.inflight.scannerFiles import scannerUtil
      8 from eve.client.script.ui.inflight.scannerFiles.moonScanner import MoonScanner
      9 from eve.client.script.ui.shared import dockedUI
     10 from eve.client.script.ui.shared.addressBookWindow import AddressBookWindow
     11 from eve.client.script.ui.shared.assetsWindow import AssetsWindow
     12 from eve.client.script.ui.shared.bookmarks.standaloneBookmarkWnd import StandaloneBookmarkWnd
     13 from eve.client.script.ui.shared.inventory import invWindow
     14 from eve.client.script.ui.shared.mapView.solarSystemViewPanel import SolarSystemViewPanel
     15 from eve.client.script.ui.shared.market.marketbase import RegionalMarket
     16 from eve.client.script.ui.shared.neocom.characterSheetWindow import CharacterSheetWindow
     17 from eve.client.script.ui.shared.neocom.evemail import MailWindow
     18 from eve.client.script.ui.shared.neocom.journal import JournalWindow
     19 from eve.client.script.ui.shared.neocom.locations.window import LocationsWindow
     20 from eve.client.script.ui.shared.neocom.notepad import NotepadWindow
     21 from eve.client.script.ui.shared.neocom.wallet.walletWnd import WalletWindow
     22 from eve.client.script.ui.shared.uilog import LoggerWindow
     23 from eve.common.lib import appConst
     24 from eve.common.script.sys.eveCfg import IsControllingStructure
     25 from eveuniverse.solar_systems import is_directional_scanner_suppressed, is_scanning_suppressed, is_solarsystem_map_suppressed
     26 from xmppchatclient.xmppchatchannels import XmppChatChannels
     27 from carbonui.uicore import uicore
     28 logger = logging.getLogger(__name__)
     29 
     30 def OnSessionChanged():
     31     _CheckAlways()
     32     if session.stationid:
     33         CloseOutOfScopeWindows(uiconst.SCOPE_DOCKED)
     34         _CheckStation()
     35     elif session.structureid and session.structureid != session.shipid:
     36         CloseOutOfScopeWindows(uiconst.SCOPE_DOCKED)
     37         _CheckStructure()
     38     elif session.solarsystemid and session.shipid:
     39         CloseOutOfScopeWindows(uiconst.SCOPE_INFLIGHT)
     40         _CheckSpace()
     41     else:
     42         CloseOutOfScopeWindows(uiconst.SCOPE_INGAME)
     43     dockedUI.ReloadLobbyWnd()
     44 
     45 
     46 def CloseOutOfScopeWindows(scope):
     47     for window in uicore.registry.GetWindows()[:]:
     48         if window.destroyed:
     49             continue
     50         windowScope = _GetWindowScope(window)
     51         logger.info('ScopeCheck on %s with scope %s', window.name, windowScope)
     52         if not windowScope or windowScope == uiconst.SCOPE_ALL:
     53             continue
     54         if windowScope & scope:
     55             continue
     56         try:
     57             closeMethod = getattr(window, 'Close', getattr(window, 'CloseByUser', None))
     58             logger.info('ScopeCheck on %s - Closing window via %s', window.name, closeMethod)
     59             closeMethod()
     60         except TypeError:
     61             logger.exception('ScopeCheck: Failed to find a Close* method for window %s', window.name)
     62         except Exception:
     63             logger.exception('ScopeCheck: Close* method for window %s raised an error', window.name)
     64 
     65 
     66 def _GetWindowScope(window):
     67     if hasattr(window, 'content') and hasattr(window.content, 'scope'):
     68         return window.content.scope
     69     else:
     70         return getattr(window, 'scope', None)
     71 
     72 
     73 def _TryOpenWnd(cls, windowID = None, windowInstanceID = None, **kwargs):
     74     try:
     75         windowID = windowID or cls.default_windowID
     76         windowInstanceID = windowInstanceID or cls.default_windowInstanceID
     77         if Window.GetIfOpen(windowID, windowInstanceID):
     78             return
     79         isRegisteredAsOpen = GetRegisteredState(windowID, 'open', False)
     80         if not isRegisteredAsOpen:
     81             return
     82         cls.OpenBehindFullscreenViews(windowID=windowID, windowInstanceID=windowInstanceID, **kwargs)
     83     except Exception as e:
     84         logger.exception('Failed at opening window')
     85 
     86 
     87 def _CheckAlways():
     88     _TryOpenWnd(cls=MailWindow)
     89     _TryOpenWnd(cls=WalletWindow)
     90     _TryOpenWnd(cls=AssetsWindow)
     91     _TryOpenWnd(cls=XmppChatChannels)
     92     _TryOpenWnd(cls=JournalWindow)
     93     _TryOpenWnd(cls=LoggerWindow)
     94     _TryOpenWnd(cls=CharacterSheetWindow)
     95     _TryOpenWnd(cls=AddressBookWindow)
     96     _TryOpenWnd(cls=LocationsWindow)
     97     _TryOpenWnd(cls=RegionalMarket)
     98     _TryOpenWnd(cls=NotepadWindow)
     99     _TryOpenWnd(cls=StandaloneBookmarkWnd)
    100 
    101 
    102 def _CheckStation():
    103     (_TryOpenWnd(cls=invWindow.InventoryPrimary, windowID=invConst.INVENTORY_ID_STATION),)
    104     (_TryOpenWnd(cls=invWindow.StationItems, windowInstanceID=session.stationid),)
    105     (_TryOpenWnd(cls=invWindow.StationShips, windowInstanceID=session.stationid),)
    106     if session.corpid:
    107         _TryOpenWnd(cls=invWindow.StationCorpDeliveries, windowInstanceID=session.stationid)
    108         _TryOpenWnd(cls=invWindow.CapsuleerDeliveries, windowInstanceID=session.stationid)
    109         office = sm.GetService('officeManager').GetCorpOfficeAtLocation()
    110         if office:
    111             _TryOpenWnd(cls=invWindow.StationCorpHangars, windowID=invConst.INVENTORY_ID_STATION_CORP_HANGARS, windowInstanceID=office.officeID)
    112             _CheckCorpHangarDivisionInvWnds(invIdName='StationCorpHangar', locationID=office.officeID)
    113 
    114 
    115 def _CheckStructure():
    116     _CheckInventoryWndForStructure()
    117     if session.corpid:
    118         _TryOpenWnd(cls=invWindow.StationCorpDeliveries, windowInstanceID=session.structureid)
    119         _TryOpenWnd(cls=invWindow.CapsuleerDeliveries, windowInstanceID=session.structureid)
    120         office = sm.GetService('officeManager').GetCorpOfficeAtLocation()
    121         if office:
    122             _TryOpenWnd(cls=invWindow.StationCorpHangars, windowID=invConst.INVENTORY_ID_STRUCTURE_CORP_HANGARS, windowInstanceID=office.officeID)
    123             _CheckCorpHangarDivisionInvWnds(invIdName='StructureCorpHangar', locationID=office.officeID)
    124 
    125 
    126 def _CheckSpace():
    127     from eve.client.script.ui.inflight.probeScannerWindow import ProbeScannerWindow
    128     from eve.client.script.ui.inflight.scannerFiles.directionalScannerWindow import DirectionalScanner
    129     if IsControllingStructure():
    130         _CheckInventoryWndForStructure()
    131     currentSystemID = session.solarsystemid2
    132     _TryOpenWnd(cls=invWindow.InventoryPrimary, windowID=invConst.INVENTORY_ID_SPACE)
    133     _TryOpenWnd(cls=MoonScanner)
    134     if not scannerUtil.IsDirectionalScanPanelEmbedded() and not is_directional_scanner_suppressed(currentSystemID):
    135         _TryOpenWnd(cls=DirectionalScanner)
    136     if not scannerUtil.IsProbeScanPanelEmbedded() and not is_scanning_suppressed(currentSystemID):
    137         _TryOpenWnd(cls=ProbeScannerWindow)
    138     if not scannerUtil.IsSolarSystemMapFullscreen() and not is_solarsystem_map_suppressed(currentSystemID):
    139         _TryOpenWnd(cls=SolarSystemViewPanel)
    140 
    141 
    142 def _CheckInventoryWndForStructure():
    143     _TryOpenWnd(cls=invWindow.InventoryPrimary, windowID=invConst.INVENTORY_ID_STRUCTURE)
    144     _TryOpenWnd(cls=invWindow.StationItems, invID=(invConst.INVENTORY_ID_STRUCTURE_ITEMS, session.structureid))
    145     _TryOpenWnd(cls=invWindow.StationShips, invID=(invConst.INVENTORY_ID_STRUCTURE_SHIPS, session.structureid))
    146 
    147 
    148 def _CheckCorpHangarDivisionInvWnds(invIdName, locationID):
    149     for flagID in appConst.flagCorpSAGs:
    150         divisionID = appConst.corpDivisionsByFlag[flagID]
    151         invID = ('%s' % invIdName, locationID, divisionID)
    152         windowID = '%s_%s' % (invIdName, divisionID)
    153         windowInstanceID = '%s_%s' % (locationID, divisionID)
    154         _TryOpenWnd(cls=invWindow.Inventory, windowID=windowID, windowInstanceID=windowInstanceID, invID=invID)