shipTreeLayer.py (7281B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\shipTree\shipTreeLayer.py 2 from __future__ import absolute_import 3 import carbonui.const as uiconst 4 from carbonui.control.layer import LayerCore 5 from .shipTreeContainer import ShipTreeContainer 6 from carbonui.primitives.fill import Fill 7 from eve.client.script.ui.shared.shipTree.shipTreeConst import ZOOMED_IN, ZOOMED_OUT, COLOR_BG, MAIN_FACTIONS, PAD_SIDE, PAD_TOP 8 from eve.client.script.ui.control.panContainer import PanContainer 9 import blue 10 from carbonui.uicore import uicore 11 12 class ShipTreeLayer(LayerCore): 13 isTabStop = True 14 cursor = uiconst.UICURSOR_DRAGGABLE 15 __notifyevents__ = ('OnEndChangeDevice', 'OnGraphicSettingsChanged') 16 17 def OnOpenView(self, **kwargs): 18 sm.RegisterNotify(self) 19 self.Flush() 20 for child in self.background: 21 child.Close() 22 23 self.isZooming = False 24 self.isPanning = False 25 self.zoomLevel = ZOOMED_IN 26 self.shipTreeCont = None 27 self.isFadingFrame = False 28 self.factionID = kwargs.get('factionID', None) 29 self.bg = Fill(name='bg', bgParent=self, color=COLOR_BG) 30 self.panCont = PanContainer(parent=self, state=uiconst.UI_PICKCHILDREN, callback=self.OnPanContainer) 31 self.UpdatePanContainerBorder() 32 33 def UpdatePanContainerBorder(self): 34 camOffset = settings.user.ui.Get('cameraOffset', 0) / 100.0 35 offset = uicore.desktop.width / 2 * camOffset 36 padLeft = max(PAD_SIDE, PAD_SIDE - offset) 37 padRight = max(PAD_SIDE, PAD_SIDE + offset) 38 self.panCont.border = (padLeft, 39 PAD_TOP, 40 padRight, 41 PAD_TOP) 42 43 def OnEndChangeDevice(self, *args): 44 self.UpdatePanContainerBorder() 45 46 def OnGraphicSettingsChanged(self, *args): 47 self.UpdatePanContainerBorder() 48 49 def SelectFaction(self, factionID, oldFactionID = None): 50 if self.shipTreeCont: 51 uicore.animations.FadeOut(self.shipTreeCont, callback=self.shipTreeCont.Close, duration=0.15) 52 blue.synchro.Sleep(200) 53 self.shipTreeCont = ShipTreeContainer(parent=self.panCont.mainCont, align=uiconst.TOPLEFT, factionID=factionID, idx=0, callback=self.OnMainContResize, alignMode=uiconst.TOPLEFT, opacity=0.0) 54 self.shipTreeCont.SetSizeAutomatically() 55 uicore.animations.FadeIn(self.shipTreeCont, duration=0.3) 56 self.panCont.mainCont.SetSizeAutomatically() 57 uicore.animations.FadeTo(self.bg, self.bg.opacity, 1.0, duration=1.0) 58 self.panTarget = None 59 if not oldFactionID: 60 panTo = settings.user.ui.Get('ShipTreePanPosition', None) 61 if panTo: 62 self.panCont.PanTo(panTo[0], panTo[1], animate=False) 63 else: 64 self.PanToFirstNode() 65 elif not (factionID in MAIN_FACTIONS and oldFactionID in MAIN_FACTIONS): 66 self.PanToFirstNode() 67 68 def OnMainContResize(self): 69 width = self.panCont.mainCont.width 70 if self.shipTreeCont: 71 self.shipTreeCont.bgCont.width = width + 128 72 self.shipTreeCont.bgCont.height = self.panCont.mainCont.height + 128 73 74 def OnPanContainer(self): 75 if not self.shipTreeCont: 76 return 77 k = 0.05 78 left = self.panCont.panLeft 79 moveAmount = k * (self.shipTreeCont.width - 2 * PAD_SIDE) 80 self.shipTreeCont.bgCont.left = int(moveAmount * (0.5 - left)) 81 top = self.panCont.panTop 82 moveAmount = k * (self.shipTreeCont.height - 2 * PAD_TOP) 83 self.shipTreeCont.bgCont.top = int(moveAmount * (0.5 - top)) 84 if self.zoomLevel != ZOOMED_IN: 85 self.shipTreeCont.bgCont.left -= self.shipTreeCont.bgCont.left % 2 86 self.shipTreeCont.bgCont.top -= self.shipTreeCont.bgCont.top % 2 87 self.shipTreeCont.factionBG.left = self.shipTreeCont.bgCont.left * 0.5 88 self.shipTreeCont.factionBG.top = self.shipTreeCont.bgCont.top * 0.5 89 if self.panCont.panTop in (0.0, 1.0): 90 if self.isFadingFrame: 91 return 92 self.isFadingFrame = True 93 if self.panCont.panTop == 0.0: 94 uicore.animations.FadeTo(self.shipTreeCont.topFrame, 3.0, 1.0, duration=0.3, loops=1) 95 else: 96 uicore.animations.FadeTo(self.shipTreeCont.bottomFrame, 3.0, 1.0, duration=0.3, loops=1) 97 else: 98 self.isFadingFrame = False 99 100 def OnCloseView(self): 101 sm.UnregisterNotify(self) 102 if self.bg: 103 self.bg.Close() 104 if self.shipTreeCont: 105 self.shipTreeCont.Close() 106 settings.user.ui.Set('ShipTreePanPosition', (self.panCont.panLeft, self.panCont.panTop)) 107 sm.GetService('shipTree').EmptyRecentlyChangedSkillsCache() 108 109 def OnMouseDown(self, *args): 110 self.isPanning = True 111 112 def OnMouseUp(self, *args): 113 self.isPanning = False 114 115 def OnMouseMove(self, *args): 116 if not self.isPanning: 117 return 118 PanContainer.OnMouseMove(self.panCont) 119 if uicore.uilib.leftbtn and uicore.uilib.rightbtn: 120 modifier = uicore.mouseInputHandler.GetCameraZoomModifier() 121 dy = modifier * uicore.uilib.dy 122 if dy < 0: 123 self.ZoomTo(ZOOMED_OUT) 124 elif dy > 0: 125 self.ZoomTo(ZOOMED_IN) 126 elif uicore.uilib.leftbtn: 127 sm.GetService('shipTreeUI').CloseInfoBubble() 128 129 def PanToNode(self, node, animate = True): 130 x, y = node.GetPositionProportional() 131 s = 0.1 132 x = (1.0 + 2 * s) * x - s 133 x = max(0.0, min(x, 1.0)) 134 y = (1.0 + 2 * s) * y - s 135 y = max(0.0, min(y, 1.0)) 136 self.panCont.PanTo(x, y, animate) 137 138 def PanToFirstNode(self): 139 node = self.shipTreeCont.rootNode.children[0] 140 self.PanToNode(node, animate=False) 141 142 def PanToShipGroup(self, shipGroupID, animate = True): 143 node = self.shipTreeCont.rootNode.GetChildByID(shipGroupID) 144 self.PanToNode(node, animate) 145 146 def OnDblClick(self, *args): 147 if self.zoomLevel == ZOOMED_OUT: 148 self.ZoomTo(ZOOMED_IN) 149 else: 150 self.ZoomTo(ZOOMED_OUT) 151 152 def OnMouseWheel(self, *args): 153 modifier = uicore.mouseInputHandler.GetCameraZoomModifier() 154 self.OnZoom(modifier * uicore.uilib.dz) 155 156 def OnZoom(self, dz): 157 if self.isZooming: 158 return 159 if dz < 0: 160 self.ZoomTo(ZOOMED_IN) 161 else: 162 self.ZoomTo(ZOOMED_OUT) 163 164 def ZoomTo(self, zoomLevel): 165 if self.isZooming or zoomLevel == self.zoomLevel: 166 return 167 try: 168 duration = 0.6 169 self.isZooming = True 170 self.zoomLevel = zoomLevel 171 uicore.animations.MorphScalar(self.panCont, 'scale', self.panCont.scale, self.zoomLevel, duration=duration, callback=self.OnZoomingDone) 172 sm.ScatterEvent('OnShipTreeZoomChanged', self.zoomLevel) 173 sm.GetService('shipTreeUI').CloseInfoBubble() 174 except: 175 self.isZooming = False 176 raise 177 178 def OnZoomingDone(self): 179 self.isZooming = False 180 181 def OnBack(self): 182 sm.GetService('shipTreeUI').GoBack() 183 184 def OnForward(self): 185 sm.GetService('shipTreeUI').GoForward()