shipTreeDockablePanel.py (8726B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\shipTree\shipTreeDockablePanel.py 2 import uthread2 3 from carbonui import const as uiconst, Align 4 from carbonui.control.button import Button 5 from carbonui.primitives.container import Container 6 from carbonui.primitives.fill import Fill 7 from clientsettings.setting import CharSettingBool 8 from carbonui.uicore import uicore 9 from eve.client.script.ui.control.panContainer import PanContainer 10 from eve.client.script.ui.shared.mapView.dockPanel import DockablePanel 11 from eve.client.script.ui.shared.shipTree.shipTreeConst import ZOOMED_OUT, ZOOMED_IN, PAD_SIDE, PAD_TOP, MAIN_FACTIONS, COLOR_BG 12 from eve.client.script.ui.shared.shipTree.shipTreeContainer import ShipTreeContainer 13 from eve.client.script.ui.shared.shipTree.shipTreeUnlockContainer import ShipTreeUnlockContainer 14 from eve.client.script.ui.view.viewStateConst import ViewState 15 from localization import GetByLabel 16 17 class ShipTreeDockablePanel(DockablePanel): 18 default_captionLabelPath = 'UI/ShipTree/ShipTree' 19 default_windowID = 'ShipTree' 20 default_iconNum = 'res:/ui/texture/windowIcons/isis.png' 21 default_minSize = (1055, 720) 22 panelID = default_windowID 23 default_clipChildren = True 24 default_performFitsCheck = False 25 viewState = ViewState.ShipTree 26 hasImmersiveAudioOverlay = True 27 __notifyevents__ = DockablePanel.__notifyevents__ + ['OnEndChangeDevice', 'OnGraphicSettingsChanged'] 28 29 def ApplyAttributes(self, attributes): 30 super(ShipTreeDockablePanel, self).ApplyAttributes(attributes) 31 self.menuButton.display = True 32 self.factionID = attributes.get('factionID', None) 33 self.isZooming = False 34 self.zoomLevel = ZOOMED_IN 35 self.shipTreeCont = None 36 self.isFadingFrame = False 37 self.shipProgressionSetting = CharSettingBool('ShipProgression_Ignore', False) 38 self.bg = Fill(name='bg', bgParent=self.GetMainArea(), color=COLOR_BG) 39 self.unlockCont = ShipTreeUnlockContainer(parent=self.GetMainArea(), align=Align.BOTTOMLEFT, width=444, height=320, padding=(20, 0, 0, 20)) 40 self.panCont = PanContainer(parent=self.GetMainArea(), state=uiconst.UI_NORMAL, callback=self.OnPanContainer) 41 self.UpdatePanContainerBorder() 42 sm.GetService('shipTreeUI').OnShipTreeOpened() 43 44 def GetMenuMoreOptions(self): 45 menuData = super(ShipTreeDockablePanel, self).GetMenuMoreOptions() 46 menuData.AddCheckbox('Suppress ship unlocks', setting=self.shipProgressionSetting) 47 return menuData 48 49 def ConstructSidePanel(self): 50 super(ShipTreeDockablePanel, self).ConstructSidePanel() 51 self.infoPanelContainer.topCont.display = False 52 53 def DockFullscreen(self): 54 super(ShipTreeDockablePanel, self).DockFullscreen() 55 56 def UnDock(self, setPosition = True, registerSettings = True, *args): 57 super(ShipTreeDockablePanel, self).UnDock(setPosition, registerSettings, *args) 58 59 def Close(self, setClosed = False, *args, **kwds): 60 super(ShipTreeDockablePanel, self).Close(setClosed, *args, **kwds) 61 sm.GetService('shipTreeUI').OnShipTreeClosed() 62 63 def Minimize(self, animate = True): 64 sm.GetService('shipTreeUI').OnShipTreeMinimized() 65 super(ShipTreeDockablePanel, self).Minimize(animate) 66 67 def UpdatePanContainerBorder(self): 68 camOffset = settings.user.ui.Get('cameraOffset', 0) / 100.0 69 offset = uicore.desktop.width / 2 * camOffset 70 padLeft = max(PAD_SIDE, PAD_SIDE - offset) 71 padRight = max(PAD_SIDE, PAD_SIDE + offset) 72 self.panCont.border = (padLeft, 73 PAD_TOP, 74 padRight, 75 PAD_TOP) 76 77 def OnEndChangeDevice(self, *args): 78 self.UpdatePanContainerBorder() 79 80 def OnGraphicSettingsChanged(self, *args): 81 self.UpdatePanContainerBorder() 82 83 def SelectFaction(self, factionID, oldFactionID = None): 84 if self.shipTreeCont: 85 uicore.animations.FadeOut(self.shipTreeCont, callback=self.shipTreeCont.Close, duration=0.15, sleep=True) 86 self.shipTreeCont = ShipTreeContainer(parent=self.panCont.mainCont, align=uiconst.TOPLEFT, factionID=factionID, callback=self.OnMainContResize, alignMode=uiconst.TOPLEFT, opacity=0.0) 87 self.shipTreeCont.SetSizeAutomatically() 88 uicore.animations.FadeIn(self.shipTreeCont, duration=0.3) 89 self.panCont.mainCont.SetSizeAutomatically() 90 uicore.animations.FadeTo(self.bg, self.bg.opacity, 1.0, duration=1.0) 91 self.panTarget = None 92 if not oldFactionID: 93 panTo = settings.user.ui.Get('ShipTreePanPosition', None) 94 if panTo: 95 self.panCont.PanTo(panTo[0], panTo[1], animate=False) 96 else: 97 self.PanToFirstNode() 98 elif not (factionID in MAIN_FACTIONS and oldFactionID in MAIN_FACTIONS): 99 self.PanToFirstNode() 100 101 def OnMainContResize(self): 102 width = self.panCont.mainCont.width 103 if self.shipTreeCont: 104 self.shipTreeCont.bgCont.width = width + 128 105 self.shipTreeCont.bgCont.height = self.panCont.mainCont.height + 128 106 107 def OnPanContainer(self): 108 if not self.shipTreeCont: 109 return 110 if uicore.uilib.leftbtn: 111 sm.GetService('shipTreeUI').OnDrag() 112 k = 0.05 113 left = self.panCont.panLeft 114 moveAmount = k * (self.shipTreeCont.width - 2 * PAD_SIDE) 115 self.shipTreeCont.bgCont.left = int(moveAmount * (0.5 - left)) 116 top = self.panCont.panTop 117 moveAmount = k * (self.shipTreeCont.height - 2 * PAD_TOP) 118 self.shipTreeCont.bgCont.top = int(moveAmount * (0.5 - top)) 119 if self.zoomLevel != ZOOMED_IN: 120 self.shipTreeCont.bgCont.left -= self.shipTreeCont.bgCont.left % 2 121 self.shipTreeCont.bgCont.top -= self.shipTreeCont.bgCont.top % 2 122 self.shipTreeCont.factionBG.left = self.shipTreeCont.bgCont.left * 0.5 123 self.shipTreeCont.factionBG.top = self.shipTreeCont.bgCont.top * 0.5 124 if self.panCont.panTop in (0.0, 1.0): 125 if self.isFadingFrame: 126 return 127 self.isFadingFrame = True 128 if self.panCont.panTop == 0.0: 129 uicore.animations.FadeTo(self.shipTreeCont.topFrame, 3.0, 1.0, duration=0.3, loops=1) 130 else: 131 uicore.animations.FadeTo(self.shipTreeCont.bottomFrame, 3.0, 1.0, duration=0.3, loops=1) 132 else: 133 self.isFadingFrame = False 134 135 def OnCloseView(self): 136 sm.UnregisterNotify(self) 137 if self.bg: 138 self.bg.Close() 139 if self.shipTreeCont: 140 self.shipTreeCont.Close() 141 settings.user.ui.Set('ShipTreePanPosition', (self.panCont.panLeft, self.panCont.panTop)) 142 sm.GetService('shipTree').EmptyRecentlyChangedSkillsCache() 143 144 def PanToNode(self, node, animate = True, duration = None): 145 x, y = node.GetPositionProportional() 146 s = 0.1 147 x = (1.0 + 2 * s) * x - s 148 x = max(0.0, min(x, 1.0)) 149 y = (1.0 + 2 * s) * y - s 150 y = max(0.0, min(y, 1.0)) 151 self.panCont.PanTo(x, y, animate, duration=duration) 152 153 def PanToFirstNode(self): 154 node = self.shipTreeCont.rootNode.children[0] 155 self.PanToNode(node, animate=False) 156 157 def PanToShipGroup(self, shipGroupID, animate = True, duration = None): 158 node = self.shipTreeCont.rootNode.GetChildByID(shipGroupID) 159 if node: 160 self.PanToNode(node, animate, duration) 161 162 def OnMouseWheel(self, *args): 163 modifier = uicore.mouseInputHandler.GetCameraZoomModifier() 164 self.OnZoom(modifier * uicore.uilib.dz) 165 166 def OnZoom(self, dz): 167 if self.isZooming: 168 return 169 if dz < 0: 170 self.ZoomTo(ZOOMED_IN) 171 else: 172 self.ZoomTo(ZOOMED_OUT) 173 174 def ZoomTo(self, zoomLevel): 175 if self.isZooming or zoomLevel == self.zoomLevel: 176 return 177 try: 178 duration = 0.6 179 self.isZooming = True 180 self.zoomLevel = zoomLevel 181 uicore.animations.MorphScalar(self.panCont, 'scale', self.panCont.scale, self.zoomLevel, duration=duration, callback=self.OnZoomingDone) 182 sm.ScatterEvent('OnShipTreeZoomChanged', self.zoomLevel) 183 sm.GetService('shipTreeUI').CloseInfoBubble() 184 except: 185 self.isZooming = False 186 raise 187 188 def OnZoomingDone(self): 189 self.isZooming = False 190 uicore.CheckCursor() 191 192 def OnBack(self): 193 sm.GetService('shipTreeUI').GoBack() 194 195 def OnForward(self): 196 sm.GetService('shipTreeUI').GoForward() 197 198 def GetShipGroup(self, shipGroupID): 199 return self.shipTreeCont.GetGroupByID(shipGroupID)