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

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)