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)