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