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

mapEditorWnd.py (8503B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\devtools\script\mapEditor\mapEditorWnd.py
      2 from __future__ import print_function
      3 from carbonui import Align
      4 from carbonui.control.button import Button
      5 from carbonui.control.contextMenu.menuData import MenuData
      6 from carbonui.control.scrollContainer import ScrollContainer
      7 from carbonui.control.window import Window
      8 from carbonui.uiconst import UI_NORMAL, UI_KEYDOWN, UI_KEYUP, VK_CONTROL
      9 from carbonui.uicore import uicore
     10 from eve.client.script.ui.shared.mapView.mapViewData import mapViewData
     11 from eve.devtools.script.mapEditor.mapEditor import MapEditor
     12 from evemap.map2d.coordinateOverrideController import get_coordinate_overrider_controller, landmark_overriden_coordinates
     13 from evemap.map2d.mapSettings import mapSizeSetting, showRegionLinesSetting, dotRadSetting, mapSizeConstellationSetting, snapToGridSetting, MODE_LIMTED, MODE_UNIVERSE
     14 import blue
     15 WND_SIZE = 1000
     16 
     17 class CurrentData(object):
     18 
     19     def __init__(self):
     20         self.mapMode = False
     21         self.visibleConstellations = set([])
     22 
     23 
     24 class MapEditorWnd(Window):
     25     default_windowID = 'mapEditordWnd'
     26     default_isCompact = True
     27     default_minSize = (WND_SIZE, WND_SIZE)
     28     default_height = 500
     29     default_width = 500
     30     default_isStackable = False
     31     default_caption = '2d map'
     32 
     33     def DebugReload(self, *args):
     34         currentData = self.currentData
     35         visibleConstellations = self.currentData.visibleConstellations.copy()
     36         mapMode = currentData.mapMode
     37         wndID = self.windowID
     38         self.Close()
     39         MapEditorWnd.Open(constellationsToLoad=visibleConstellations, mapMode=mapMode, windowID=wndID)
     40 
     41     def ReloadBigMap(self, *args):
     42         coordOverrider = get_coordinate_overrider_controller()
     43         coordOverrider.SaveOverriddenCoordinates()
     44         sm.ScatterEvent('On2dMapLayoutChange')
     45 
     46     def SnapToGrid(self, *args):
     47         self.map.OnSnapButtonClicked()
     48 
     49     def ApplyAttributes(self, attributes):
     50         self.loadingMap = False
     51         self.currentData = CurrentData()
     52         self.map = None
     53         constellationsToLoad = attributes.constellationsToLoad or []
     54         mapMode = attributes.mapMode or MODE_LIMTED
     55         Window.ApplyAttributes(self, attributes)
     56         self.keyDownCookie = uicore.event.RegisterForTriuiEvents(UI_KEYDOWN, self.OnGlobalKeyCallback)
     57         self.keyUpCookie = uicore.event.RegisterForTriuiEvents(UI_KEYUP, self.OnGlobalKeyCallback)
     58         self.scrollCont = ScrollContainer(name='scrollCont', parent=self.content)
     59         Button(parent=self.content, label='Reload', align=Align.TOPRIGHT, func=self.DebugReload, top=0, idx=0)
     60         Button(parent=self.content, label='Reload Big Map<br>and Save', align=Align.TOPRIGHT, func=self.ReloadBigMap, left=100, idx=0)
     61         if not snapToGridSetting.get():
     62             Button(parent=self.content, label='Snap in place', align=Align.TOPLEFT, func=self.SnapToGrid, idx=0)
     63         self.LoadConstellations(constellationsToLoad, mapMode)
     64         self.connect_signals()
     65 
     66     def AddConstellations(self, constellationIDs, regionMode = MODE_LIMTED):
     67         visibleConstellationIDs = self.currentData.visibleConstellations.copy()
     68         visibleConstellationIDs.update(constellationIDs)
     69         self.LoadConstellations(visibleConstellationIDs, regionMode)
     70 
     71     def LoadConstellations(self, constellationIDs, regionMode = MODE_LIMTED):
     72         self.LoadMap(constellationIDs, regionMode)
     73 
     74     def _CreateMap(self):
     75         sizeSetting = self.GetSizeSetting()
     76         mapSize = sizeSetting.get()
     77         return MapEditor(name='mapEditor', parent=self.scrollCont, align=Align.TOPLEFT, state=UI_NORMAL, height=mapSize, width=mapSize)
     78 
     79     def GetSizeSetting(self):
     80         if self.windowID == 'mapEditordWndConstellation':
     81             sizeSetting = mapSizeConstellationSetting
     82         else:
     83             sizeSetting = mapSizeSetting
     84         return sizeSetting
     85 
     86     def LoadMap(self, constellationIDs, mapMode = MODE_LIMTED):
     87         if self.loadingMap:
     88             return
     89         self.loadingMap = True
     90         cfg.evelocations.Prime(constellationIDs)
     91         if self.map is None:
     92             self.map = self._CreateMap()
     93         sizeSetting = self.GetSizeSetting()
     94         mapSize = sizeSetting.get()
     95         self.currentData.visibleConstellations = set(constellationIDs)
     96         self.currentData.mapMode = mapMode
     97         self.map.SetMapMode(mapMode)
     98         self.map.Draw(constellationIDs, mapSize)
     99         if self.destroyed:
    100             return
    101         self.loadingMap = False
    102 
    103     def OnSettingChanged(self, *args):
    104         self.DebugReload()
    105 
    106     def connect_signals(self):
    107         showRegionLinesSetting.on_change.connect(self.OnSettingChanged)
    108         sizeSetting = self.GetSizeSetting()
    109         sizeSetting.on_change.connect(self.OnSettingChanged)
    110         dotRadSetting.on_change.connect(self.OnSettingChanged)
    111         snapToGridSetting.on_change.connect(self.OnSettingChanged)
    112 
    113     def discconnect_signals(self):
    114         showRegionLinesSetting.on_change.disconnect(self.OnSettingChanged)
    115         mapSizeSetting.on_change.disconnect(self.OnSettingChanged)
    116         mapSizeConstellationSetting.on_change.disconnect(self.OnSettingChanged)
    117         dotRadSetting.on_change.disconnect(self.OnSettingChanged)
    118         snapToGridSetting.on_change.disconnect(self.OnSettingChanged)
    119 
    120     def GetMenuMoreOptions(self):
    121         menuData = super(MapEditorWnd, self).GetMenuMoreOptions()
    122         hint = 'Be careful when using this! Moving when all map is showing will mess with the spacing'
    123         menuData.AddEntry('Load All Regions', self.LoadAllRegions, hint=hint)
    124         menuData.AddCheckbox('Show Outgoing Region/Constellation Lines', showRegionLinesSetting)
    125         menuData.AddSeparator()
    126         hint = 'Uncheck this if you are moving whole regions around, to make it less likely they will lose their spacing. Then use the button to snap them in place and adjust them if the spacing got messed up.'
    127         menuData.AddCheckbox('Snap to grid', snapToGridSetting, hint=hint)
    128         menuData.AddSeparator()
    129         menuData.AddEntry('Print out landmark coordinates', self.PrintCoordinates, hint=hint)
    130         menuData.AddSeparator()
    131         self._AddDotRadiusOptions(menuData)
    132         menuData.AddSeparator()
    133         self._AddSizeOptions(menuData)
    134         menuData.AddEntry('Reload Coordinates from disk', self.ReloadCoordinatesFromDisk)
    135         return menuData
    136 
    137     def _AddDotRadiusOptions(self, menuData):
    138         subMenuData = MenuData()
    139         for x in dotRadSetting.options:
    140             subMenuData.AddRadioButton(x, x, dotRadSetting)
    141 
    142         menuData.AddEntry('Dot radius', subMenuData=subMenuData)
    143 
    144     def _AddSizeOptions(self, menuData):
    145         sizeSetting = self.GetSizeSetting()
    146         subMenuData = MenuData()
    147         for x in sizeSetting.options:
    148             subMenuData.AddRadioButton(x, x, sizeSetting)
    149 
    150         menuData.AddEntry('Map size', subMenuData=subMenuData)
    151 
    152     def OnGlobalKeyCallback(self, wnd, eventID, param):
    153         vkey, flag = param
    154         if vkey == VK_CONTROL:
    155             self.map.UpdateCircles()
    156         return True
    157 
    158     def LoadAllRegions(self):
    159         constellationsToLoad = set()
    160         for regionID, regionItem in mapViewData.GetKnownUniverseRegions().iteritems():
    161             constellationIDs = regionItem.constellationIDs
    162             constellationsToLoad.update(constellationIDs)
    163 
    164         self.AddConstellations(constellationsToLoad, MODE_UNIVERSE)
    165 
    166     def ReloadCoordinatesFromDisk(self):
    167         coordOverrider = get_coordinate_overrider_controller()
    168         coordOverrider.LoadOverriddenCoordindatesFileName()
    169         self.DebugReload()
    170         sm.ScatterEvent('On2dMapLayoutChange')
    171 
    172     def PrintCoordinates(self, *args):
    173         landmarkIDsAndPos = sorted(landmark_overriden_coordinates.items())
    174         textList = []
    175         for landmarkID, pos in landmarkIDsAndPos:
    176             print('landmarkID = %s :\t%s \t%s' % (landmarkID, pos[0], pos[1]))
    177             textList.append('%s:\t%s\t%s' % (landmarkID, pos[0], pos[1]))
    178 
    179         text = '\r\n'.join(textList)
    180         blue.pyos.SetClipboardData(text)
    181 
    182     def Close(self, *args, **kwargs):
    183         try:
    184             uicore.event.UnregisterForTriuiEvents(self.keyDownCookie)
    185             uicore.event.UnregisterForTriuiEvents(self.keyUpCookie)
    186             self.discconnect_signals()
    187         except Exception:
    188             import log
    189             log.LogTraceback('error when unregistering cookie')
    190 
    191         Window.Close(self, *args, **kwargs)