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)