ledgerMinimap.py (3926B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\ledger\ledgerMinimap.py 2 import signals 3 import uthread 4 from carbon.common.script.util.format import FmtDate 5 from carbonui.graphs import axis 6 from carbonui.graphs.areagraph import AreaGraph 7 from carbonui.graphs.axis import FixupRange 8 from carbonui.primitives.container import Container 9 import carbonui.const as uiconst 10 from eve.client.script.ui.control.eveLabel import EveLabelMedium 11 from eve.client.script.ui.shared.ledger.ledgerUtil import GetDataForMinimap, GetDataForPersonaMinimap 12 from eve.client.script.ui.shared.ledger.genericMiniMap import GenericMiniMap 13 from localization import GetByLabel 14 15 class LedgerMinimap(Container): 16 17 def ApplyAttributes(self, attributes): 18 Container.ApplyAttributes(self, attributes) 19 self.sliderController = attributes.sliderController 20 self.miniMap = GenericMiniMap(name='MiniMap', parent=self, align=uiconst.TOALL, sliderController=self.sliderController) 21 self.noContentLabel = EveLabelMedium(parent=self, text='%s' % GetByLabel('UI/Ledger/NoDataToDisplay'), idx=0, align=uiconst.CENTER) 22 self.noContentLabel.display = False 23 self.areaGraph = None 24 self.horizontalAxis = axis.MonthlyTimeAxis([]) 25 self.miniMap.AddAxis(axis.AxisOrientation.HORIZONTAL, self.horizontalAxis) 26 minValue = 0 27 maxValue = 1 28 self.verticalAxis = axis.AutoTicksAxis((minValue, maxValue), behavior=axis.AXIS_FROM_ZERO) 29 self.miniMap.AddAxis(axis.AxisOrientation.VERTICAL, self.verticalAxis, 1.0, 0.0) 30 31 def LoadMiniMap(self, summaryData): 32 data = [ x[1] for x in summaryData ] 33 timestamps = [ x[0] for x in summaryData ] 34 if self.areaGraph: 35 self.areaGraph.Close() 36 self.horizontalAxis.SetDataPoints(timestamps, True) 37 minValue = min(data) if data else 0 38 maxValue = max(data) if data else 1 39 self.verticalAxis.SetDataRange(FixupRange((minValue, maxValue))) 40 self.areaGraph = AreaGraph(parent=self.miniMap, categoryAxis=self.horizontalAxis, valueAxis=self.verticalAxis, values=data, graphColor=(1.0, 41 1.0, 42 1.0, 43 0.09), state=uiconst.UI_DISABLED) 44 if data and any(data): 45 self.noContentLabel.display = False 46 else: 47 self.noContentLabel.display = True 48 49 50 class MiniMapSliderController(object): 51 52 def __init__(self, minRange, maxRange): 53 self.on_change = signals.Signal(signalName='on_change') 54 self._dataRange = (minRange, maxRange) 55 storedRange = _GetSetting('dateRange', 30 * const.DAY) 56 visibleMin = max(minRange, maxRange - storedRange) 57 self._visibleRange = (visibleMin, maxRange) 58 59 def GetVisibleRange(self): 60 return self._visibleRange 61 62 def GetDataRange(self): 63 return self._dataRange 64 65 def GetRangeText(self, start, end): 66 return '%s - %s' % (self.GetRangeForTimestamp(start), self.GetRangeForTimestamp(end)) 67 68 def GetRangeForTimestamp(self, timestamp): 69 return FmtDate(timestamp, 'ln') 70 71 def SetVisibleRange(self, visibleRange): 72 self._visibleRange = visibleRange 73 self.SetSettings() 74 self._OnChange() 75 76 def _OnChange(self): 77 self.on_change() 78 79 def GetStartAndEndPoint(self): 80 visibleStart, visibleEnd = self.GetVisibleRange() 81 dataStart, dataEnd = self.GetDataRange() 82 dataRange = dataEnd - dataStart 83 start = float(visibleStart - dataStart) / dataRange 84 end = float(visibleEnd - dataStart) / dataRange 85 return (start, end) 86 87 def SetSettings(self): 88 _SetSetting('dateRange', int(self._visibleRange[1] - self._visibleRange[0])) 89 90 91 def _GetSetting(name, default): 92 return settings.user.ui.Get('ledger_setting_%s' % name, default) 93 94 95 def _SetSetting(name, value): 96 settings.user.ui.Set('ledger_setting_%s' % name, value)