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

minimap.py (10621B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\graphs\minimap.py
      2 import carbonui.fontconst
      3 from carbonui.primitives.container import Container
      4 from carbonui.primitives.frame import Frame
      5 import carbonui.const as uiconst
      6 from carbonui.primitives.sprite import Sprite
      7 from carbonui.uianimations import animations
      8 from carbonui.util.various_unsorted import IsUnder
      9 from eve.client.script.ui.control.eveLabel import Label
     10 from carbonui.graphs import graph
     11 from carbonui.uicore import uicore
     12 from signals import Signal
     13 
     14 class MapSlider(Container):
     15     default_name = 'mapslider'
     16     default_color = (1.0, 1.0, 1.0, 0.2)
     17     default_hoverColor = (1.0, 1.0, 1.0, 0.25)
     18     default_align = uiconst.TOPLEFT
     19     default_clipChildren = True
     20     resizeColor = (0.8, 0.8, 1.0, 0.1)
     21     resizeHandleColor = resizeColor
     22     resizeAreaSize = 10
     23     minimumExtraSpace = 0
     24     showHandle = False
     25 
     26     def ApplyAttributes(self, attributes):
     27         Container.ApplyAttributes(self, attributes)
     28         self.beforeAxisUpdate = Signal(signalName='beforeAxisUpdate')
     29         self.onSliderStart = Signal(signalName='onSliderStart')
     30         self.onSliderReleased = Signal(signalName='onSliderReleased')
     31         self.onSliderWheel = Signal(signalName='onSliderWheel')
     32         self._axis = attributes['axis']
     33         self.MakeConnections()
     34         self.cursor = uiconst.UICURSOR_LEFT_RIGHT_DRAG
     35         self.drag = False
     36         self.dragOffset = 0
     37         self.color = attributes.get('color', self.default_color)
     38         self.hoverColor = attributes.get('hoverColor', self.default_hoverColor)
     39         self.frame = Frame(bgParent=self, texturePath='res:/UI/Texture/classes/Graph/MiniMap/zoomFrame.png', cornerSize=8, color=self.color)
     40         resizeAreaSize = self.resizeAreaSize
     41         self.minimumWidth = resizeAreaSize * 2 + self.minimumExtraSpace
     42         self.leftResize = Container(name='leftResize', parent=self, state=uiconst.UI_NORMAL, align=uiconst.TOLEFT, width=resizeAreaSize, height=resizeAreaSize, bgColor=self.resizeColor, opacity=0)
     43         self.leftHandle = Sprite(name='leftHandle', parent=self, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, pos=(-6, 0, 12, 12), color=self.resizeHandleColor, texturePath='res:/UI/Texture/classes/graph/sliderHandle.png')
     44         self.rightHandle = Sprite(name='rightHandle', parent=self, align=uiconst.CENTERRIGHT, state=uiconst.UI_DISABLED, pos=(-6, 0, 12, 12), color=self.resizeHandleColor, texturePath='res:/UI/Texture/classes/graph/sliderHandle.png')
     45         self.leftHandle.display = False
     46         self.rightHandle.display = False
     47         self.leftResize.cursor = uiconst.UICORSOR_HORIZONTAL_RESIZE
     48         self.leftResize.OnMouseDown = self.OnLeftResizeMouseDown
     49         self.leftResize.OnMouseUp = self.OnLeftResizeMouseUp
     50         self.leftResize.OnMouseMove = self.OnResizeMouseMove
     51         self.rightResize = Container(name='rightResize', parent=self, state=uiconst.UI_NORMAL, align=uiconst.TORIGHT, width=resizeAreaSize, height=resizeAreaSize, bgColor=self.resizeColor, opacity=0)
     52         self.rightResize.cursor = uiconst.UICORSOR_HORIZONTAL_RESIZE
     53         self.rightResize.OnMouseDown = self.OnRightResizeMouseDown
     54         self.rightResize.OnMouseUp = self.OnRightResizeMouseUp
     55         self.rightResize.OnMouseMove = self.OnResizeMouseMove
     56         self.leftResize.OnMouseEnter = lambda *args, **kwargs: self.OnMouserEnterResizer(self.leftResize)
     57         self.leftResize.OnMouseExit = lambda *args, **kwargs: self.OnMouseExitResizer(self.leftResize)
     58         self.rightResize.OnMouseEnter = lambda *args, **kwargs: self.OnMouserEnterResizer(self.rightResize)
     59         self.rightResize.OnMouseExit = lambda *args, **kwargs: self.OnMouseExitResizer(self.rightResize)
     60         self.centerContainer = Container(parent=self)
     61         self.sliderLabel = Label(parent=self.centerContainer, align=uiconst.BOTTOMLEFT, fontsize=carbonui.fontconst.EVE_SMALL_FONTSIZE)
     62         self.sliderLabel.SetRGBA(1.0, 1.0, 1.0, 0.3)
     63         self.leftResizing = False
     64         self.rightResizing = False
     65         self.initialResize = (0, 0)
     66         self._AxisChanged(self._axis)
     67 
     68     def OnMouserEnterResizer(self, resizer):
     69         animations.FadeIn(resizer, duration=0.25)
     70         self.OnMouseEnter()
     71 
     72     def OnMouseExitResizer(self, resizer):
     73         animations.FadeOut(resizer, duration=0.25)
     74         if not IsUnder(uicore.uilib.mouseOver, self):
     75             self.OnMouseExit()
     76 
     77     def MakeConnections(self):
     78         self._axis.onChange.connect(self._AxisChanged)
     79 
     80     def _AxisChanged(self, _):
     81         self._ResizeSlider()
     82 
     83     def UpdateAlignment(self, *args, **kwargs):
     84         budget = super(MapSlider, self).UpdateAlignment(*args, **kwargs)
     85         self._ResizeSlider()
     86         return budget
     87 
     88     def _ResizeSlider(self):
     89         size = self.parent.GetAbsoluteSize()
     90         visibleRange = self._axis.GetVisibleRange()
     91         dataRange = self._axis.GetDataRange()
     92         start = (visibleRange[0] - dataRange[0]) / (dataRange[1] - dataRange[0])
     93         end = (visibleRange[1] - dataRange[0]) / (dataRange[1] - dataRange[0])
     94         sliderWidth = size[0] * (end - start)
     95         sliderPos = size[0] * start
     96         if sliderWidth < self.minimumWidth:
     97             sliderPos -= (self.minimumWidth - sliderWidth) * 0.5
     98         self.left = sliderPos
     99         self.width = max(sliderWidth, self.minimumWidth)
    100         self.sliderLabel.text = self._axis.GetRangeText(*visibleRange)
    101 
    102     def OnLeftResizeMouseDown(self, *_):
    103         self.onSliderStart()
    104         if not uicore.uilib.leftbtn:
    105             return
    106         self.resizeStart = uicore.uilib.x
    107         self.leftResizing = True
    108 
    109     def OnLeftResizeMouseUp(self, *_):
    110         self.onSliderReleased()
    111         self.leftResizing = False
    112         self._UpdateAxis()
    113 
    114     def OnResizeMouseMove(self, *args):
    115         parentWidth = float(self.parent.GetAbsoluteSize()[0])
    116         mouseX = uicore.uilib.x
    117         if self.leftResizing:
    118             resizeDelta = mouseX - self.resizeStart
    119             if resizeDelta > 50000:
    120                 return
    121             self.resizeStart = mouseX
    122             if self.left + resizeDelta < 0:
    123                 self.left = 0
    124                 self.width -= self.left
    125             else:
    126                 self.left += resizeDelta
    127                 self.width -= resizeDelta
    128             if self.width < self.minimumWidth:
    129                 self.left += self.width - self.minimumWidth
    130                 self.width = self.minimumWidth
    131             self._UpdateAxis()
    132         elif self.rightResizing:
    133             resizeDelta = mouseX - self.resizeStart
    134             self.resizeStart = mouseX
    135             self.width += resizeDelta
    136             if self.width < self.minimumWidth:
    137                 self.width = self.minimumWidth
    138             self.width = min(parentWidth - self.left, self.width)
    139             self._UpdateAxis()
    140 
    141     def OnMouseWheel(self, amount, *args):
    142         parentWidth = float(self.parent.GetAbsoluteSize()[0])
    143         x = uicore.uilib.x - self.GetAbsoluteLeft()
    144         t = x / float(self.width)
    145         added = amount / 10.0
    146         newWidth = max(self.width + added, self.minimumWidth)
    147         if self.width != newWidth:
    148             self.width = newWidth
    149             left_change = added * t if self.left + self.width <= parentWidth else added
    150             self.left -= left_change
    151             self.left = max(0, self.left)
    152             self.width = min(self.width, parentWidth)
    153             self.onSliderWheel(amount)
    154             self._UpdateAxis()
    155 
    156     def OnRightResizeMouseDown(self, *args):
    157         self.onSliderStart()
    158         if not uicore.uilib.leftbtn:
    159             return
    160         self.resizeStart = uicore.uilib.x
    161         self.rightResizing = True
    162 
    163     def OnRightResizeMouseUp(self, *args):
    164         self.rightResizing = False
    165         self._UpdateAxis()
    166         self.onSliderReleased()
    167 
    168     def OnMouseDown(self, *args):
    169         self.onSliderStart()
    170         if not uicore.uilib.leftbtn:
    171             return
    172         self.drag = True
    173         self.dragOffset = self.left - uicore.uilib.x
    174         self.OnMouseMove(*args)
    175 
    176     def OnMouseEnter(self, *args):
    177         if self.hoverColor:
    178             self.frame.color = self.hoverColor
    179         if self.showHandle:
    180             self.leftHandle.display = True
    181             self.rightHandle.display = True
    182 
    183     def OnMouseExit(self, *args):
    184         if IsUnder(uicore.uilib.mouseOver, self):
    185             return
    186         if self.color:
    187             self.frame.color = self.color
    188         if self.showHandle:
    189             self.leftHandle.display = False
    190             self.rightHandle.display = False
    191 
    192     def OnMouseUp(self, *args):
    193         self.onSliderReleased()
    194         self.drag = False
    195 
    196     def OnMouseMove(self, *args):
    197         if self.drag:
    198             pos = uicore.uilib.x + self.dragOffset
    199             pos = max(0, pos)
    200             parentWidth = float(self.parent.GetAbsoluteSize()[0])
    201             pos = min(pos, parentWidth - self.width)
    202             self.left = pos
    203             self._UpdateAxis()
    204 
    205     def UpdatePosition(self, pos):
    206         pos = max(0, pos)
    207         parentWidth = float(self.parent.GetAbsoluteSize()[0])
    208         pos = min(pos, parentWidth - self.width)
    209         self.left = pos
    210 
    211     def JumpToAndStartDrag(self, position):
    212         self.drag = True
    213         self.dragOffset = position
    214 
    215     def _GetVisibleRange(self):
    216         size = self.parent.GetAbsoluteSize()
    217         dataRange = self._axis.GetDataRange()
    218         start = float(self.left) / size[0]
    219         end = float(self.width) / size[0] + start
    220         visibleRange0 = start * (dataRange[1] - dataRange[0]) + dataRange[0]
    221         visibleRange1 = end * (dataRange[1] - dataRange[0]) + dataRange[0]
    222         return (visibleRange0, visibleRange1)
    223 
    224     def _UpdateAxis(self):
    225         self.beforeAxisUpdate()
    226         self._axis.SetVisibleRange(self._GetVisibleRange())
    227 
    228 
    229 class MiniMap(graph.GraphArea):
    230 
    231     def ApplyAttributes(self, attributes):
    232         graph.GraphArea.ApplyAttributes(self, attributes)
    233         self.CreateSlider(attributes)
    234 
    235     def CreateSlider(self, attributes):
    236         controlAxis = attributes['controlAxis']
    237         size = self.GetAbsoluteSize()
    238         self.slider = MapSlider(parent=self, axis=controlAxis, height=size[1], width=1, left=0, top=0)
    239 
    240     def OnMouseDown(self, *args):
    241         if not uicore.uilib.leftbtn:
    242             return
    243         offset = uicore.uilib.x - self.GetAbsoluteLeft() - self.slider.width / 2.0
    244         self.slider.UpdatePosition(offset)
    245         self.slider.OnMouseDown(*args)
    246 
    247     def OnMouseMove(self, *args):
    248         self.slider.OnMouseMove(*args)
    249 
    250     def OnMouseUp(self, *args):
    251         self.slider.OnMouseUp()