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

mapViewBookmarkHandler.py (8887B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\mapView\mapViewBookmarkHandler.py
      2 from eve.client.script.ui.shared.mapView.mapViewConst import MARKERID_BOOKMARK, MARKERS_OPTION_PERSONAL_LOCATION, VIEWMODE_MARKERS_SETTINGS, MARKERS_OPTION_SHARED_LOCATION
      3 from eve.client.script.ui.shared.mapView.mapViewSettings import GetMapViewSetting
      4 from eve.client.script.ui.shared.mapView.markers.mapMarkerBookmark import MarkerBookmark, MarkerBookmarkUniverseLevel
      5 from eve.client.script.ui.shared.mapView.mapViewUtil import SolarSystemPosToMapPos
      6 import weakref
      7 import geo2
      8 from eve.client.script.util.bookmarkUtil import IsCoordinateBookmark
      9 from eve.common.lib import appConst
     10 from eve.common.script.sys.idCheckers import IsSolarSystem, IsConstellation
     11 import evetypes
     12 import blue
     13 import telemetry
     14 import logging
     15 log = logging.getLogger(__name__)
     16 MAX_BOOKMARKS_DISPLAYED_ON_MAP = 250
     17 
     18 class MapViewBookmarkHandler(object):
     19     __metaclass__ = telemetry.ZONE_PER_METHOD
     20     __notifyevents__ = ['OnRefreshBookmarks']
     21     _mapView = None
     22 
     23     def __init__(self, mapView, loadUniverseBookmarks = False, solarSystemScaling = None):
     24         self.bookmarkSvc = sm.GetService('bookmarkSvc')
     25         self.mapView = mapView
     26         self.loadedSolarSystemID = None
     27         self.loadUniverseBookmarks = loadUniverseBookmarks
     28         self.solarSystemScaling = solarSystemScaling
     29         sm.RegisterNotify(self)
     30 
     31     def StopHandler(self):
     32         sm.UnregisterNotify(self)
     33 
     34     @apply
     35     def mapView():
     36 
     37         def fget(self):
     38             if self._mapView:
     39                 return self._mapView()
     40 
     41         def fset(self, value):
     42             self._mapView = weakref.ref(value)
     43 
     44         return property(**locals())
     45 
     46     def OnRefreshBookmarks(self):
     47         self.LoadBookmarkMarkers(loadSolarSystemID=self.loadedSolarSystemID)
     48 
     49     def LoadBookmarkMarkers(self, loadSolarSystemID = None, showChanges = False):
     50         self.loadedSolarSystemID = loadSolarSystemID
     51         bookmarks = self.GetAllEnabledBookmarks()
     52         bookmarksBySolarSystemID = self.GetBookmarksBySolarSystemID(bookmarks)
     53         bookmarkMarkers = self.mapView.markersHandler.GetMarkersByType(MARKERID_BOOKMARK)
     54         bookmarkMarkerIDs = set([ markerObject.markerID for markerObject in bookmarkMarkers ])
     55         personalFolderIDs, _ = self.bookmarkSvc.GetPersonalAndSharedFolders()
     56         markerIDs = set()
     57         if not self.mapView:
     58             return markerIDs
     59         for solarSystemID, bookmarksInSystem in bookmarksBySolarSystemID.iteritems():
     60             if self.loadUniverseBookmarks:
     61                 solarSystemBookmarks = self.GetSolarSystemBookmarks(bookmarksInSystem)
     62                 if solarSystemBookmarks:
     63                     self.CheckAddUniverseLevelBookmark(solarSystemID, solarSystemBookmarks, markerIDs, showChanges)
     64             if loadSolarSystemID and solarSystemID == loadSolarSystemID:
     65                 for bookmark in bookmarksInSystem[:MAX_BOOKMARKS_DISPLAYED_ON_MAP]:
     66                     isPersonal = bookmark.folderID in personalFolderIDs
     67                     self.CheckAddSolarSystemLevelBookmark(solarSystemID, bookmark, bookmarkMarkerIDs, markerIDs, showChanges, isPersonal)
     68 
     69             blue.pyos.BeNice()
     70 
     71         for removeMarkerID in bookmarkMarkerIDs.difference(markerIDs):
     72             self.mapView.markersHandler.RemoveMarker(removeMarkerID)
     73 
     74         return markerIDs
     75 
     76     def GetAllEnabledBookmarks(self):
     77         loadPersonal = IsMarkerGroupEnabled(MARKERS_OPTION_PERSONAL_LOCATION, self.mapView.mapViewID)
     78         loadShared = IsMarkerGroupEnabled(MARKERS_OPTION_SHARED_LOCATION, self.mapView.mapViewID)
     79         if not loadPersonal and not loadShared:
     80             return []
     81         usePersonalFilter = not (loadPersonal and loadShared)
     82         bookmarks = sm.GetService('bookmarkSvc').GetActiveBookmarksFiltered(None, usePersonalFilter=usePersonalFilter, personal=loadPersonal).values()
     83         return bookmarks
     84 
     85     def GetBookmarksBySolarSystemID(self, bookmarks):
     86         bookmarksBySolarSystemID = {}
     87         for bookmark in bookmarks:
     88             solarSystemID = self.GetSolarSystemID(bookmark)
     89             if solarSystemID:
     90                 bookmarksBySolarSystemID.setdefault(solarSystemID, []).append(bookmark)
     91 
     92         return bookmarksBySolarSystemID
     93 
     94     def GetSolarSystemID(self, bookmark):
     95         if IsSolarSystem(bookmark.locationID):
     96             return bookmark.locationID
     97         if IsConstellation(bookmark.locationID):
     98             return bookmark.itemID
     99 
    100     def GetSolarSystemBookmarks(self, bookmarks):
    101         return [ bookmark for bookmark in bookmarks if bookmark.typeID == appConst.typeSolarSystem and not IsCoordinateBookmark(bookmark) ]
    102 
    103     def CheckAddSolarSystemLevelBookmark(self, solarSystemID, bookmark, bookmarkMarkerIDs, markerIDs, showChanges, isPersonal):
    104         markerID = (MARKERID_BOOKMARK, bookmark.bookmarkID)
    105         if markerID in bookmarkMarkerIDs:
    106             markerIDs.add(markerID)
    107             return
    108         try:
    109             localBookmarkPosition = self.GetBookmarkPosition(bookmark)
    110         except RuntimeError:
    111             log.warn('Failed to get bookmark position, bookmark.bookmarkID, bookmark.itemID: %s, %s' % (bookmark.bookmarkID, bookmark.itemID))
    112             return
    113 
    114         try:
    115             mapPositionLocal = SolarSystemPosToMapPos(localBookmarkPosition)
    116             if self.solarSystemScaling:
    117                 mapPositionLocal = geo2.Vec3ScaleD(mapPositionLocal, self.solarSystemScaling)
    118         except TypeError:
    119             log.warn('Failed to get bookmark position, localBookmarkPosition: %s' % repr(localBookmarkPosition))
    120             return
    121 
    122         solarSystemPosition = (0, 0, 0)
    123         if getattr(self.mapView, 'layoutHandler', None):
    124             mapNode = self.mapView.layoutHandler.GetNodeBySolarSystemID(solarSystemID)
    125             if mapNode:
    126                 solarSystemPosition = mapNode.position
    127         self.mapView.markersHandler.AddSolarSystemBasedMarker(markerID, MarkerBookmark, bookmarkData=bookmark, solarSystemID=solarSystemID, highlightOnLoad=showChanges, mapPositionLocal=mapPositionLocal, mapPositionSolarSystem=solarSystemPosition, isPersonal=isPersonal)
    128         markerIDs.add(markerID)
    129 
    130     def CheckAddUniverseLevelBookmark(self, solarSystemID, bookmarks, markerIDs, showChanges):
    131         if not self.mapView.layoutHandler:
    132             return
    133         mapNode = self.mapView.layoutHandler.GetNodeBySolarSystemID(solarSystemID)
    134         if not mapNode:
    135             return
    136         markerID = (MARKERID_BOOKMARK, solarSystemID)
    137         markerObject = self.mapView.markersHandler.GetMarkerByID(markerID)
    138         if markerObject:
    139             markerObject.bookmarksData = bookmarks
    140         else:
    141             self.mapView.markersHandler.AddSolarSystemBasedMarker(markerID, MarkerBookmarkUniverseLevel, bookmarksData=bookmarks, solarSystemID=solarSystemID, highlightOnLoad=showChanges, mapPositionLocal=(0, 0, 0), mapPositionSolarSystem=mapNode.position)
    142         markerIDs.add(markerID)
    143 
    144     def GetBookmarkPosition(self, bookmark):
    145         localPosition = None
    146         if bookmark and (bookmark.itemID == bookmark.locationID or bookmark.typeID == const.typeSolarSystem) and bookmark.x is not None:
    147             localPosition = (bookmark.x, bookmark.y, bookmark.z)
    148         elif evetypes.Exists(bookmark.typeID) and evetypes.GetCategoryID(bookmark.typeID) == const.categoryStructure:
    149             structure = sm.GetService('map').GetMapDataForStructure(bookmark.locationID, bookmark.itemID)
    150             if structure:
    151                 localPosition = (structure.x, structure.y, structure.z)
    152         else:
    153             mapSvc = sm.GetService('map')
    154             try:
    155                 itemStarMapData = mapSvc.GetItem(bookmark.itemID)
    156             except KeyError:
    157                 log.error('Map data not found for bookmark.itemID: %s' % bookmark.itemID)
    158                 return
    159 
    160             if itemStarMapData:
    161                 localPosition = (itemStarMapData.x, itemStarMapData.y, itemStarMapData.z)
    162             elif evetypes.GetGroupID(bookmark.typeID) == const.groupStargate:
    163                 try:
    164                     solarSystemData = cfg.mapSolarSystemContentCache[bookmark.locationID]
    165                 except KeyError:
    166                     log.error('Stargate data not found for bookmark.locationID: %s' % bookmark.locationID)
    167                     return
    168 
    169                 starGateInfo = solarSystemData.stargates.get(bookmark.itemID, None)
    170                 if starGateInfo:
    171                     position = starGateInfo.position
    172                     localPosition = (position.x, position.y, position.z)
    173         if localPosition is None:
    174             localPosition = (0, 0, 0)
    175         return localPosition
    176 
    177 
    178 def IsMarkerGroupEnabled(markerGroupID, mapViewID):
    179     markerGroups = GetMapViewSetting(VIEWMODE_MARKERS_SETTINGS, mapViewID)
    180     return markerGroupID in markerGroups