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

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()