mapMarkerSolarSystem.py (28569B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\mapView\markers\mapMarkerSolarSystem.py 2 import mathext 3 from carbon.common.script.sys.serviceConst import ROLE_PROGRAMMER 4 from carbonui import Align, TextColor 5 from carbonui.text.styles import TextHeader, TextDetail 6 from carbonui.text.custom import TextCustom 7 from carbonui.control.contextMenu.menuData import MenuData 8 from carbonui.control.contextMenu.menuEntryData import MenuEntryData 9 from carbonui.primitives.transform import Transform 10 from eve.client.script.ui import eveColor 11 from eve.client.script.ui.shared.mapView.filters.mapFilterConst import MARKER_BIG, MARKER_MEDIUM, MARKER_NONE 12 from eve.client.script.ui.shared.mapView.mapViewUtil import TUBE_BUBBLE_SIZE, GetSizeForUIElement, JUMP_RANGE_OUTSIDE, JUMP_RANGE_OFF, TUBE_BUBBLE_CONTENT_MEDIUM, TUBE_BUBBLE_CONTENT_BIG 13 from eve.client.script.ui.shared.mapView.markers.markerTooltipUtil import LoadSolarSystemMarkerTooltipPanel 14 from evePathfinder.core import IsUnreachableJumpCount 15 from carbonui.primitives.base import ScaleDpi 16 from carbonui.primitives.container import Container 17 from carbonui.primitives.fill import Fill 18 from carbonui.primitives.vectorlinetrace import DashedCircle 19 from carbonui.uicore import uicore 20 from carbonui.util.color import Color 21 from eve.client.script.ui.control.eveLabel import EveLabelSmall 22 import eve.client.script.ui.shared.mapView.mapViewConst as mapViewConst 23 from eve.client.script.ui.shared.mapView.markers.mapMarkerBase import MarkerSolarSystemBased, MarkerContainerBase 24 import carbonui.const as uiconst 25 import math 26 from carbonui.uianimations import animations 27 from eve.common.script.sys import idCheckers 28 from localization import GetByLabel 29 from carbonui.primitives.sprite import Sprite 30 CIRCLESIZE = 14 31 LABEL_LEFT_MARGIN = 8 32 LABEL_LEFT = CIRCLESIZE + LABEL_LEFT_MARGIN 33 MARKER_NONE_SIZE = CIRCLESIZE 34 JUMP_RANGE_OPACITY = 0.3 35 NAME_OPACITY_FULL = 0.75 36 NAME_OPACITY_FAINT = 0.3 37 OPACITY_RANGE_FOR_NAME = NAME_OPACITY_FULL - NAME_OPACITY_FAINT 38 ZOOM_RANGE_FOR_NAME_OPACITY = mapViewConst.MAP2D_ZOOM_TUBE_MARKER - mapViewConst.MAP2D_ZOOM_NO_SYSTEM_NAME 39 BUFFER_VALUE = 100 40 41 class MarkerLabelSolarSystem(MarkerSolarSystemBased): 42 distanceFadeAlphaNearFar = (0.0, 17500.0) 43 positionPickable = True 44 extraInfo = None 45 showPreviewBubble = None 46 contentContainer = None 47 jumpRangeMode = JUMP_RANGE_OFF 48 ignoreOverlaps = True 49 _cachedLabel = None 50 51 def __init__(self, *args, **kwds): 52 self.busyUpdating = False 53 self.lastUpdateCameraValues = None 54 self.regionGateInfo = {} 55 self.isAbstractMode = kwds.get('isAbstractMode', False) 56 self.filterInfo = kwds.get('filterInfo', None) 57 MarkerSolarSystemBased.__init__(self, *args, **kwds) 58 self.typeID = const.typeSolarSystem 59 self.itemID = self.markerID 60 self.regionContainers = [] 61 62 def Load(self): 63 self.isLoaded = True 64 self.ConstructContentContainer() 65 self.UpdateActiveAndHilightState() 66 self.markerContainer.LoadTooltipPanel = self.LoadTooltipPanel 67 68 def ConstructContentContainer(self): 69 if self.contentContainer: 70 return 71 if self.isAbstractMode: 72 self._ConstructAbstractContent() 73 else: 74 self._ConstructNormalContent() 75 76 def _ConstructNormalContent(self): 77 self.contentContainer = MarkerContainerContentSimple(name='contentContainer', parent=self.markerContainer, text=self.GetLabelText(), align=Align.CENTERLEFT) 78 self._UpdateMarkerContainerSize() 79 80 def _ConstructAbstractContent(self): 81 self.contentContainer = MarkerContainerContentAdvanced(name='contentContainer', parent=self.markerContainer, text=self.GetLabelText(), align=Align.CENTER, filterInfo=self.filterInfo, regionGateInfo=self.regionGateInfo, itemID=self.markerID) 82 for solarSystemID, radians in self.regionGateInfo.iteritems(): 83 t = Transform(name='regionTransform', parent=self.markerContainer, align=Align.TOALL, rotation=-radians) 84 RegionArrow(parent=t, solarSystemID=solarSystemID) 85 self.regionContainers.append(t) 86 87 self.UpdateMarkerContent(False) 88 89 def _UpdateMarkerContainerSize(self): 90 w, h = self.contentContainer.GetContentSize() 91 self.markerContainer.width = w 92 self.markerContainer.height = h 93 self.projectBracket.offsetX = self.contentContainer.GetOffsetX() 94 95 def _OnMapMarkerUpdated(self, projectBracket): 96 if not self.isAbstractMode: 97 return super(MarkerLabelSolarSystem, self)._OnMapMarkerUpdated(projectBracket) 98 if self.displayStateOverride == False: 99 if self.markerContainer: 100 self.DestroyRenderObject() 101 return 102 self._OnAbstractMapMarkerUpdated(projectBracket) 103 104 def _OnAbstractMapMarkerUpdated(self, projectBracket): 105 viewportValues = self.markerHandler.GetViewportValues() 106 cameraZoomValue, _, vpWidth, vpHeight = viewportValues 107 cameraValues = round(cameraZoomValue, 5) 108 if cameraValues != self.lastUpdateCameraValues and not self.busyUpdating: 109 if not self.IsOnScreen(vpHeight, vpWidth): 110 return 111 self.busyUpdating = True 112 self.markerHandler.pendingAbstractUpdater.RegisterMarkerForPendingUpdate(self.markerID) 113 114 def DoUpdateAbstractMarker(self): 115 if self.markerHandler is None: 116 self.busyUpdating = False 117 return 118 viewportValues = self.markerHandler.GetViewportValues() 119 cameraZoomValue, _, vpWidth, vpHeight = viewportValues 120 cameraValues = round(cameraZoomValue, 5) 121 if not self.IsOnScreen(vpHeight, vpWidth): 122 self.busyUpdating = False 123 return 124 self.lastUpdateCameraValues = cameraValues 125 opacity = self.GetMarkerOpacity(0.0, cameraZoomValue) 126 alreadyExists = bool(self.markerContainer) 127 self._UpdateRenderObjectVisibility(opacity) 128 if alreadyExists and self.markerContainer: 129 self.UpdateMarkerContent(True) 130 self.updated = True 131 self.busyUpdating = False 132 return True 133 134 def IsOnScreen(self, vpHeight, vpWidth): 135 mx, my = self.projectBracket.rawProjectedPosition 136 if mx < -BUFFER_VALUE or mx > vpWidth + BUFFER_VALUE: 137 return False 138 if my < -BUFFER_VALUE or my > vpHeight + BUFFER_VALUE: 139 return False 140 return True 141 142 def UpdateMarkerContent(self, animate = True): 143 if not self.contentContainer: 144 return 145 viewportValues = self.markerHandler.GetViewportValues() 146 isSelectedOrHighlighted = self.hilightState or self.activeState == mapViewConst.MARKER_SELECTED 147 markerSizeType = self.contentContainer._UpdateContent(self.showPreviewBubble, self.filterInfo, viewportValues, animate, isSelectedOrHighlighted) 148 self.UpdataRegionalArrowsDisplay(markerSizeType) 149 self._UpdateMarkerContainerSize() 150 151 def UpdataRegionalArrowsDisplay(self, markerSizeType): 152 doDisplay = markerSizeType in (MARKER_BIG, MARKER_MEDIUM) 153 for c in self.regionContainers: 154 c.display = doDisplay 155 156 def DestroyRenderObject(self): 157 super(MarkerLabelSolarSystem, self).DestroyRenderObject() 158 if self.contentContainer: 159 self.contentContainer.Close() 160 self.contentContainer = None 161 for c in self.regionContainers: 162 c.Close() 163 164 self.regionContainers = [] 165 if self.markerHandler: 166 self.markerHandler.pendingAbstractUpdater.RemovePending(self.markerID) 167 self.busyUpdating = False 168 169 def _HideRenderObject(self): 170 if self.IsActive(): 171 self.markerContainer.Hide() 172 else: 173 self.DestroyRenderObject() 174 175 def UpdateSolarSystemPosition(self, solarSystemPosition): 176 self.mapPositionSolarSystem = solarSystemPosition 177 self.SetPosition(solarSystemPosition) 178 179 def GetLabelText(self): 180 if self._cachedLabel is None: 181 self._cachedLabel = _GetLabelText(self.markerID) 182 return self._cachedLabel 183 184 def UpdateLabelText(self): 185 self._cachedLabel = None 186 if self.contentContainer: 187 self.contentContainer.SetText(self.GetLabelText()) 188 189 def GetDragText(self): 190 return cfg.evelocations.Get(self.markerID).name 191 192 def GetMarkerDistance(self): 193 if not self.isAbstractMode: 194 return self.GetCameraDistance() 195 return not self.hilightState 196 197 def UpdateActiveAndHilightState(self): 198 if self.hilightState or self.activeState or self.IsShowingPreviewAndAtZoomLevel(): 199 self.projectBracket.maxDispRange = 1e+32 200 if self.markerContainer: 201 if self.hilightState: 202 self.ConstructContentContainer() 203 if self.contentContainer: 204 self.contentContainer.HiliteMarker() 205 self.MoveToFront() 206 elif self.contentContainer: 207 self.contentContainer.KillHilite() 208 if self.contentContainer: 209 if self.activeState == mapViewConst.MARKER_SELECTED: 210 self.contentContainer.SetTextOpacity(1.3) 211 else: 212 self.contentContainer.SetTextOpacity(1.0) 213 self.UpdateExtraInfo() 214 else: 215 if self.distanceFadeAlphaNearFar: 216 self.projectBracket.maxDispRange = self.distanceFadeAlphaNearFar[1] 217 if self.contentContainer: 218 self.contentContainer.KillHilite() 219 self.contentContainer.KillExtraContainer() 220 self.UpdateExtraInfo() 221 self.lastUpdateCameraValues = None 222 223 def UpdateExtraInfo(self): 224 if self.contentContainer: 225 extraInfoText = self.GetExtraInfoText() 226 self.contentContainer.UpdateExtraInfo(extraInfoText) 227 228 def GetExtraInfoText(self): 229 extraInfoText = '' 230 if self.IsHilighted() or self.IsSelected(): 231 extraInfoText = self.GetExtraMouseOverInfo() or '' 232 lines = extraInfoText.split('<br>') 233 if len(lines) > 1 and not self.hilightState: 234 extraInfoText = GetByLabel('UI/Map/ColorModeHandler/NumRecordsFound', count=len(lines)) 235 if self.IsHilighted() and self.itemID != session.solarsystemid2 and idCheckers.IsKnownSpaceSystem(session.solarsystemid2): 236 numJumps = sm.GetService('clientPathfinderService').GetJumpCountFromCurrent(self.itemID) 237 if not IsUnreachableJumpCount(numJumps): 238 if extraInfoText: 239 extraInfoText += '<br>' 240 extraInfoText += GetByLabel('UI/Fleet/FleetRegistry/NumberOfJumps', numJumps=numJumps) 241 return extraInfoText 242 243 def GetMarkerOpacity(self, bracketCameraDistance, zoomDistance): 244 if self.IsSelected() or self.IsHilighted(): 245 return mapViewConst.OPACITY_MARKER_ACTIVE 246 if self.isAbstractMode: 247 if self.IsActive(): 248 return mapViewConst.OPACITY_MARKER_ACTIVE 249 if self._IsMarkerVisibleAtZoomLevel(): 250 return mapViewConst.OPACITY_MARKER_ACTIVE 251 if self.IsActive(): 252 nearFadeDist, farFadeDist = self._distanceFadeAlphaNearFar 253 return self.GetMarkerBaseOpacity(bracketCameraDistance, nearFadeDist, farFadeDist) 254 255 def _IsMarkerVisibleAtZoomLevel(self): 256 cameraZoomValue = self.markerHandler.cameraZoomValue 257 visible = cameraZoomValue < mapViewConst.MAP2D_ZOOM_TUBE_BUBBLE 258 return visible 259 260 def SetBracketMaxDispRange(self): 261 if self.isAbstractMode or self.hilightState or self.activeState: 262 self.projectBracket.maxDispRange = self.distanceFadeAlphaNearFar[1] 263 else: 264 self.projectBracket.maxDispRange = 0 265 266 def ResetAbstractMode(self, isAbstractMode): 267 self.isAbstractMode = isAbstractMode 268 self.SetBracketMaxDispRange() 269 self.Reload() 270 271 def IsShowingPreviewAndAtZoomLevel(self): 272 return IsShowingPreviewAndAtZoomLevel(self.markerHandler.cameraZoomValue, self.showPreviewBubble) 273 274 def SetPreviewState(self, showPreviewBubble): 275 if showPreviewBubble != self.showPreviewBubble: 276 self.showPreviewBubble = showPreviewBubble 277 self.lastUpdateCameraValues = None 278 self.UpdateActiveAndHilightState() 279 if not showPreviewBubble: 280 self.DestroyRenderObject() 281 282 def OnClick(self, *args, **kwds): 283 if uicore.uilib.Key(uiconst.VK_CONTROL): 284 clearOtherWaypoints = not uicore.uilib.Key(uiconst.VK_SHIFT) 285 sm.GetService('starmap').SetWaypoint(self.itemID, clearOtherWaypoints=clearOtherWaypoints, origin='map_marker_ctrl_click') 286 else: 287 MarkerSolarSystemBased.OnClick(self, *args, **kwds) 288 289 def GetMarkerContainerCls(self): 290 return MarkerContainerSolarSystem 291 292 def UpdateFilterInfo(self, filterInfo): 293 self.filterInfo = filterInfo 294 if self.contentContainer: 295 self.contentContainer.UpdateFilterInfo(filterInfo) 296 297 def SetJumpRangeMode(self, jumpRangeMode): 298 self.jumpRangeMode = jumpRangeMode 299 300 def LoadTooltipPanel(self, tooltipPanel, *args): 301 LoadSolarSystemMarkerTooltipPanel(tooltipPanel, self.itemID, self.jumpRangeMode) 302 303 def UpdateRegionGatesInfo(self, solarSystemID, radians): 304 self.regionGateInfo[solarSystemID] = radians 305 306 def GetMenu(self): 307 m = super(MarkerLabelSolarSystem, self).GetMenu() 308 try: 309 if session.role & ROLE_PROGRAMMER: 310 lineOptions = self.GetLines() 311 if lineOptions: 312 if not m: 313 m = MenuData() 314 m.extend(lineOptions) 315 except Exception: 316 pass 317 318 return m 319 320 def GetLines(self): 321 if not self.markerHandler: 322 return 323 m = MenuData() 324 layoutHandler = self.markerHandler.mapView.layoutHandler 325 mapNode = layoutHandler.GetNodeBySolarSystemID(self.markerID) 326 subMenu = [] 327 if mapNode: 328 for line in mapNode.lineData: 329 import blue 330 subMenu.append(MenuEntryData(line.lineID, lambda lineID = line.lineID: blue.pyos.SetClipboardData(str(lineID)), hint=str(line))) 331 332 if not subMenu: 333 return 334 m.AddEntry('GM: Lines', subMenuData=subMenu) 335 return m 336 337 338 def IsShowingPreviewAndAtZoomLevel(cameraZoomValue, showPreviewBubble): 339 return showPreviewBubble and cameraZoomValue < mapViewConst.MAP2D_ZOOM_TUBE_BUBBLE 340 341 342 class MarkerContainerSolarSystem(MarkerContainerBase): 343 344 def ApplyAttributes(self, attributes): 345 super(MarkerContainerSolarSystem, self).ApplyAttributes(attributes) 346 self.uniqueUiName = 'map_marker_solar_system_%s' % self.markerObject.markerID 347 348 349 class ExtraInfoLabel(EveLabelSmall): 350 351 def OnMouseEnter(self, *args): 352 if self.destroyed: 353 return 354 EveLabelSmall.OnMouseEnter(self, *args) 355 356 357 class ExtraInfoContainer(Container): 358 default_align = uiconst.TOPLEFT 359 default_state = uiconst.UI_NORMAL 360 default_opacity = 0.0 361 default_clipChildren = False 362 363 def ApplyAttributes(self, attributes): 364 Container.ApplyAttributes(self, attributes) 365 self.markerObject = attributes.markerObject 366 self.label = ExtraInfoLabel(parent=self, text=attributes.text, bold=True, state=uiconst.UI_NORMAL, opacity=0.8, cursor=uiconst.UICURSOR_DEFAULT) 367 self.UpdateSize() 368 Fill(bgParent=self, padding=(-3, 0, -2, 0), color=(0, 0, 0, 0.4)) 369 animations.FadeTo(self, startVal=0.0, endVal=1.0, duration=0.1) 370 animations.MorphScalar(self, 'displayWidth', 0, self.label.actualTextWidth, duration=0.2) 371 372 def UpdateSize(self): 373 self.height = self.label.textheight 374 self.width = self.label.textwidth 375 376 def Close(self, *args): 377 Container.Close(self, *args) 378 self.markerObject = None 379 380 def SetText(self, text): 381 self.label.text = text 382 self.UpdateSize() 383 384 385 class BaseMarkerContainerContent(Container): 386 textLabel = None 387 extraContainer = None 388 hiliteContainer = None 389 jumpRangeMode = JUMP_RANGE_OUTSIDE 390 filterInfo = None 391 flagDirty = False 392 393 def GetOffsetX(self): 394 return 0 395 396 def HiliteMarker(self): 397 self.CheckConstructHiliteContainer() 398 self.textLabel.Show() 399 400 def CheckConstructHiliteContainer(self): 401 if not self.hiliteContainer: 402 align = Align.CENTERLEFT 403 hiliteContainer = Container(name='hiliteContainer', parent=self, align=align, pos=(0, 404 0, 405 CIRCLESIZE, 406 CIRCLESIZE), state=uiconst.UI_DISABLED) 407 DashedCircle(parent=hiliteContainer, dashCount=4, lineWidth=0.8, radius=CIRCLESIZE / 2, range=math.pi * 2) 408 self.hiliteContainer = hiliteContainer 409 410 def KillHilite(self): 411 if self.hiliteContainer: 412 self.hiliteContainer.Close() 413 self.hiliteContainer = None 414 415 def KillExtraContainer(self): 416 if self.extraContainer: 417 self.extraContainer.Close() 418 self.extraContainer = None 419 420 def SetText(self, text): 421 self.textLabel.text = text 422 423 def SetTextOpacity(self, opacity): 424 pass 425 426 def UpdateExtraInfo(self, extraInfoText): 427 if not extraInfoText: 428 self.KillExtraContainer() 429 return 430 self.ConstructExtraContainer(extraInfoText) 431 self.extraContainer.SetText(extraInfoText) 432 433 def ConstructExtraContainer(self, text): 434 pass 435 436 def UpdateFilterInfo(self, filterInfo): 437 pass 438 439 def GetContentSize(self): 440 return (CIRCLESIZE, CIRCLESIZE) 441 442 def _UpdateContent(self, showPreviewBubble, filterInfo, viewportValues, animate = True, isSelectedOrHighlighted = False): 443 pass 444 445 def UpdateJumpRange(self, jumpRangeMode): 446 self.jumpRangeMode = jumpRangeMode 447 448 449 class MarkerContainerContentSimple(BaseMarkerContainerContent): 450 labelLeft = LABEL_LEFT 451 452 def ApplyAttributes(self, attributes): 453 super(MarkerContainerContentSimple, self).ApplyAttributes(attributes) 454 text = attributes.text 455 self.textLabel = EveLabelSmall(parent=self, text=text, bold=True, state=uiconst.UI_NORMAL, left=self.labelLeft) 456 self.textLabel.GetMenu = self.parent.GetMenu 457 self.width = LABEL_LEFT + self.textLabel.textwidth 458 self.height = self.textLabel.textheight 459 Fill(bgParent=self, padding=(LABEL_LEFT - 2, 460 CIRCLESIZE, 461 -2, 462 0), color=(0, 0, 0, 0.5)) 463 464 def GetOffsetX(self): 465 return 0 466 467 def SetTextOpacity(self, opacity): 468 self.textLabel.opacity = opacity 469 470 def ConstructExtraContainer(self, text): 471 if not self.extraContainer: 472 left = LABEL_LEFT 473 self.extraContainer = ExtraInfoContainer(parent=self, text=text, top=self.textLabel.top + self.textLabel.textheight, left=left, markerObject=self, idx=0) 474 475 476 class MarkerContainerContentAdvanced(BaseMarkerContainerContent): 477 markerSizeType = None 478 markerSize = 0 479 amountLabel = None 480 filterSprite = None 481 default_width = 13 482 default_height = 13 483 default_state = uiconst.UI_DISABLED 484 itemID = None 485 486 def ApplyAttributes(self, attributes): 487 self.itemID = attributes.itemID 488 self.regionGateInfo = attributes.regionGateInfo 489 super(MarkerContainerContentAdvanced, self).ApplyAttributes(attributes) 490 self.itemID = attributes.itemID 491 text = attributes.text 492 self.filterInfo = filterInfo = attributes.filterInfo 493 self.textLabelCont = Container(name='textLabelCont', parent=self, align=uiconst.CENTER, pos=(0, 0, 20, 20)) 494 self.textLabel = TextDetail(parent=self.textLabelCont, text=text, state=uiconst.UI_NORMAL, align=uiconst.CENTER, color=None) 495 self.amountLabel = TextCustom(name='amountLabel', parent=self, text=filterInfo.amountText if filterInfo else '', align=Align.CENTER, color=eveColor.BLACK, shadowColor=(0.0, 0.0, 0.0, 0.0)) 496 497 def ConstructExtraContainer(self, text): 498 if not self.extraContainer: 499 self.extraContainer = ExtraInfoContainer(parent=self, text=text, top=0, markerObject=self, idx=0) 500 self._UpdateContentContainerSize() 501 502 def _UpdateContent(self, showPreviewBubble, filterInfo, viewportValues, animate = True, isSelectedOrHighlighted = False): 503 markerSizeType, sizeToUse, nameOpacity = self._GetMarkerSizeToUse(showPreviewBubble, viewportValues, isSelectedOrHighlighted) 504 self.textLabelCont.opacity = nameOpacity 505 if not isSelectedOrHighlighted and not self.flagDirty and self.markerSizeType == markerSizeType and self.markerSize == sizeToUse: 506 return markerSizeType 507 self.flagDirty = False 508 self.markerSizeType = markerSizeType 509 self.markerSize = sizeToUse 510 self.amountLabel.Hide() 511 self.textLabelCont.Hide() 512 if markerSizeType == MARKER_NONE: 513 self.amountLabel.Hide() 514 if isSelectedOrHighlighted: 515 self.textLabelCont.Show() 516 self.textLabelCont.opacity = 1.0 517 self.textLabel.SetAlign(Align.TOPLEFT) 518 self.textLabelCont.SetAlign(Align.TOPLEFT) 519 self.textLabelCont.left = LABEL_LEFT 520 self.textLabelCont.top = 0 521 self._UpdateContentContainerSize() 522 if self.filterSprite: 523 self.filterSprite.Hide() 524 return markerSizeType 525 self.textLabel.SetAlign(Align.CENTER) 526 self.textLabelCont.SetAlign(Align.CENTER) 527 self.textLabelCont.left = 0 528 self.textLabelCont.top = (sizeToUse + self.textLabel.textheight) / 2 + 3 529 if filterInfo: 530 amountText = filterInfo.amountText 531 texturePath = filterInfo.texturePath 532 textureColor = filterInfo.textureColor 533 else: 534 amountText = '' 535 texturePath = '' 536 textureColor = None 537 if amountText is not None: 538 self.amountLabel.SetText(amountText) 539 fontsize = mathext.clamp(int(sizeToUse / 2.5), 12, 26) 540 self.amountLabel.fontsize = fontsize 541 self.amountLabel.Show() 542 elif texturePath: 543 self._UpdateFilterSprite(texturePath, textureColor) 544 if self.markerSizeType in (MARKER_BIG, MARKER_MEDIUM): 545 self.textLabelCont.Show() 546 self._UpdateContentContainerSize() 547 return markerSizeType 548 549 def _UpdateContentContainerSize(self): 550 w, h = self.GetContentSize() 551 if self.extraContainer: 552 if self.markerSizeType == MARKER_NONE: 553 self.extraContainer.left = LABEL_LEFT 554 self.extraContainer.top = self.textLabel.textheight 555 else: 556 self.extraContainer.left = self.width + 0.5 * self.markerSize 557 self.extraContainer.top = 0 558 559 def _GetMarkerSizeToUse(self, showPreviewBubble, viewportValues, isSelectedOrHighlighted): 560 cameraZoomValue, cameraProjectionFovConst, _, viewportHeight = viewportValues 561 if cameraZoomValue < mapViewConst.MAP2D_ZOOM_TUBE_MARKER: 562 size = GetSizeForUIElement(TUBE_BUBBLE_CONTENT_BIG, viewportHeight, cameraProjectionFovConst) 563 return (MARKER_BIG, size, NAME_OPACITY_FULL) 564 if IsShowingPreviewAndAtZoomLevel(cameraZoomValue, showPreviewBubble): 565 size = GetSizeForUIElement(TUBE_BUBBLE_CONTENT_MEDIUM, viewportHeight, cameraProjectionFovConst) 566 if isSelectedOrHighlighted: 567 opacity = NAME_OPACITY_FULL 568 elif cameraZoomValue > mapViewConst.MAP2D_ZOOM_NO_SYSTEM_NAME: 569 opacity = 0.0 570 else: 571 t = (cameraZoomValue - mapViewConst.MAP2D_ZOOM_NO_SYSTEM_NAME) / ZOOM_RANGE_FOR_NAME_OPACITY 572 opacity = NAME_OPACITY_FAINT + t * OPACITY_RANGE_FOR_NAME 573 return (MARKER_MEDIUM, size, opacity) 574 return (MARKER_NONE, MARKER_NONE_SIZE, 1.0) 575 576 def UpdateFilterInfo(self, filterInfo): 577 self.filterInfo = filterInfo 578 if not self.amountLabel: 579 return 580 self.amountLabel.Hide() 581 if not filterInfo: 582 return 583 self.amountLabel.text = filterInfo.amountText 584 if filterInfo.texturePath: 585 self._UpdateFilterSprite(filterInfo.texturePath, filterInfo.textureColor) 586 elif self.filterSprite: 587 self.filterSprite.Hide() 588 if self.markerSizeType == MARKER_NONE: 589 return 590 if filterInfo.amount: 591 self.amountLabel.Show() 592 593 def _UpdateFilterSprite(self, texturePath, textureColor): 594 size = self.markerSize - 2 595 self.SetFilterSpriteTexture(texturePath) 596 self.filterSprite.width = size 597 self.filterSprite.height = size 598 self.filterSprite.Show() 599 if textureColor: 600 self.filterSprite.SetRGBA(*textureColor) 601 602 def SetFilterSpriteTexture(self, texturePath): 603 if self.filterSprite: 604 self.filterSprite.SetTexturePath(texturePath) 605 else: 606 self.filterSprite = Sprite(name='filterSprite', parent=self, align=Align.CENTER, state=uiconst.UI_DISABLED, pos=(0, 0, 32, 32), texturePath=texturePath) 607 608 def GetContentSize(self): 609 w = self.markerSize 610 h = self.markerSize 611 if self.regionGateInfo: 612 w += 32 613 h += 34 614 return (w, h) 615 616 def KillHilite(self): 617 super(MarkerContainerContentAdvanced, self).KillHilite() 618 if self.markerSizeType not in (MARKER_BIG, MARKER_MEDIUM): 619 self.textLabelCont.Hide() 620 621 def GetOffsetX(self): 622 if self.markerSizeType == MARKER_NONE: 623 return ScaleDpi(0) 624 return super(MarkerContainerContentAdvanced, self).GetOffsetX() 625 626 def CheckConstructHiliteContainer(self): 627 if self.markerSizeType != MARKER_NONE: 628 return 629 return super(MarkerContainerContentAdvanced, self).CheckConstructHiliteContainer() 630 631 632 class FilterInfo(object): 633 634 def __init__(self, color, amount, texturePath, textureColor, amountFmtFunc): 635 self._color = color 636 self._amount = amount 637 self._texturePath = texturePath 638 self._textureColor = textureColor 639 self._amountFmtFunc = amountFmtFunc 640 641 @property 642 def color(self): 643 return self._color 644 645 @property 646 def amount(self): 647 return self._amount 648 649 @property 650 def amountText(self): 651 if self._amountFmtFunc: 652 return self._amountFmtFunc(self._amount) 653 return self._amount 654 655 @property 656 def texturePath(self): 657 return self._texturePath 658 659 @property 660 def textureColor(self): 661 return self._textureColor 662 663 def __repr__(self): 664 return '<FilterInfo %s>, %s' % (self.__dict__, id(self)) 665 666 667 class RegionArrow(Sprite): 668 default_texturePath = 'res:/UI/Texture/classes/MapView/mapArrow.png' 669 default_width = 16 670 default_height = 17 671 default_align = Align.CENTERTOP 672 default_opacity = 0.5 673 674 def ApplyAttributes(self, attributes): 675 super(RegionArrow, self).ApplyAttributes(attributes) 676 self.solarSystemID = attributes.solarSystemID 677 678 def OnClick(self, *args): 679 from eve.client.script.ui.shared.mapView.mapViewPanel import MapViewPanel 680 mapPanel = MapViewPanel.GetIfOpen() 681 if mapPanel: 682 mapPanel.SetActiveItemID(self.solarSystemID) 683 684 def GetHint(self): 685 regionID = sm.GetService('map').GetRegionForSolarSystem(self.solarSystemID) 686 regionName = cfg.evelocations.Get(regionID).name 687 solarSystemName = _GetLabelText(self.solarSystemID) 688 return '<br>'.join([regionName, solarSystemName]) 689 690 def OnMouseEnter(self, *args): 691 self.opacity = 1.0 692 693 def OnMouseExit(self, *args): 694 self.opacity = 0.5 695 696 def GetTooltipPosition(self): 697 return (uicore.uilib.x - 2, 698 uicore.uilib.y - 2, 699 4, 700 4) 701 702 703 def _GetLabelText(solarSystemID): 704 securityStatus, color = sm.GetService('map').GetSecurityStatus(solarSystemID, True) 705 securityModifierIconText = sm.GetService('securitySvc').get_security_modifier_icon_text(solarSystemID) 706 return '%s <color=%s>%s</color>%s' % (cfg.evelocations.Get(solarSystemID).name, 707 Color.RGBtoHex(color[0], color[1], color[2], 1.0), 708 securityStatus, 709 securityModifierIconText)