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

rewardItemsGrid.py (6378B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\loginRewards\rewardItemsGrid.py
      2 import itertoolsext
      3 from carbonui.primitives.layoutGrid import LayoutGrid
      4 from carbonui import uiconst
      5 from carbonui.uianimations import animations
      6 from eve.client.script.ui.shared.loginRewards.rewardUiConst import SCROLL_ANIMATION
      7 import mathext
      8 
      9 class RewardItemsGrid(LayoutGrid):
     10     default_name = 'rewardGrid'
     11 
     12     def ApplyAttributes(self, attributes):
     13         self.panelConst = attributes.panelConst
     14         self.isScrolling = False
     15         self.numAllEntries = attributes.numAllEntries
     16         self.entries = {}
     17         self.cells = {}
     18         self.selectedIdx = 0
     19         self.offset = attributes.offset or 0
     20         LayoutGrid.ApplyAttributes(self, attributes)
     21 
     22     def SetGridPosition(self, newPosValue, animateTime = SCROLL_ANIMATION):
     23         allEntriesWidth = self.numAllEntries * self.panelConst.ENTRY_WIDTH
     24         if newPosValue > self.GetMinPosValue() or newPosValue < -allEntriesWidth:
     25             self._StopScrolling()
     26             return False
     27         if animateTime:
     28             animations.MorphScalar(self, 'left', startVal=self.left, endVal=newPosValue, duration=animateTime, curveType=uiconst.ANIM_SMOOTH, callback=self._StopScrolling)
     29         else:
     30             self.left = newPosValue
     31             self._StopScrolling()
     32         return True
     33 
     34     def GetMinPosValue(self):
     35         return 10 + self.offset
     36 
     37     def IsScrolling(self):
     38         return self.isScrolling
     39 
     40     def _StopScrolling(self, *args):
     41         self.isScrolling = False
     42 
     43     def GoToSelectedEntry(self, entryIdx, animateTime = SCROLL_ANIMATION, *args):
     44         if self.isScrolling:
     45             return
     46         self.isScrolling = True
     47         newEntryIdx = max(0, entryIdx - self.panelConst.SELECTED_CELL)
     48         return self.GoToEntry(newEntryIdx, animateTime=animateTime)
     49 
     50     def OnBrowse(self, direction, currentFirstVisibleEntry, *args):
     51         if self.isScrolling:
     52             return
     53         self.isScrolling = True
     54         newIdx = direction + currentFirstVisibleEntry
     55         return self.GoToEntry(newIdx)
     56 
     57     def GoToEntry(self, entryIdx, animateTime = SCROLL_ANIMATION):
     58         if self.AreEntriesFewerThanMaxVisible():
     59             self.align = uiconst.CENTER
     60             self._StopScrolling()
     61             return
     62         self.align = uiconst.CENTERLEFT
     63         newEntryIdx = mathext.clamp(entryIdx, 0, self.numAllEntries - self.panelConst.NUM_VISIBLE_ITEMS)
     64         cellAtIdx = self.cells.get(newEntryIdx, None)
     65         if not cellAtIdx:
     66             self._StopScrolling()
     67             return
     68         numLowerIdx = itertoolsext.count((i for i in self.cells.iterkeys() if i < newEntryIdx))
     69         newValue = -numLowerIdx * self.panelConst.ENTRY_WIDTH + self.offset
     70         moved = self.SetGridPosition(newValue, animateTime=animateTime)
     71         if moved:
     72             return newEntryIdx
     73 
     74     def AreEntriesFewerThanMaxVisible(self):
     75         return self.numAllEntries < self.panelConst.NUM_VISIBLE_ITEMS
     76 
     77     def GetEntriesWidth(self):
     78         return len(self.entries) * self.panelConst.ENTRY_WIDTH
     79 
     80     def GetNumEntries(self):
     81         return self.numAllEntries
     82 
     83     def LoadEntries(self, entryInfo):
     84         self.entries.clear()
     85         self.cells.clear()
     86         self._LoadEntries(entryInfo)
     87 
     88     def _LoadEntries(self, entryInfo):
     89         for i, info in enumerate(entryInfo):
     90             entryClass = info['entryClass']
     91             entry = entryClass(**info)
     92             c = self.AddCell(cellObject=entry)
     93             self.entries[i] = entry
     94             self.cells[i] = c
     95 
     96     def GetEntry(self, entryNum):
     97         return self.entries.get(entryNum, None)
     98 
     99     def SetEntryAsSelected(self, entryNum, withTransition = False):
    100         animateTime = 0.75 if withTransition else 0
    101         for eIdx, entry in self.entries.iteritems():
    102             entry.SetSelectedState(eIdx == entryNum, animateTime)
    103 
    104     def UpdateEntryState(self, selectedIdx, updateKeyVal):
    105         for eIdx, entry in self.entries.iteritems():
    106             entry.UpdateEntryState(eIdx, selectedIdx, updateKeyVal)
    107 
    108 
    109 class RewardItemsGridCycle(RewardItemsGrid):
    110 
    111     def ApplyAttributes(self, attributes):
    112         panelConst = attributes.panelConst
    113         attributes.columns += panelConst.NUM_VISIBLE_ITEMS + panelConst.SELECTED_CELL
    114         attributes.numAllEntries += panelConst.NUM_VISIBLE_ITEMS + panelConst.SELECTED_CELL
    115         RewardItemsGrid.ApplyAttributes(self, attributes)
    116 
    117     def _GetMaxDay(self):
    118         return self.numAllEntries
    119 
    120     def _LoadEntries(self, entryInfo):
    121         minIdx = min(self.entries) if self.entries else 0
    122         for eachInfo in reversed(entryInfo):
    123             if len(self.entries) >= self.panelConst.SELECTED_CELL:
    124                 break
    125             entryClass = eachInfo['entryClass']
    126             entry = entryClass(**eachInfo)
    127             c = self.AddCell(cellObject=entry)
    128             minIdx -= 1
    129             self.entries[minIdx] = entry
    130             self.cells[minIdx] = c
    131 
    132         RewardItemsGrid._LoadEntries(self, entryInfo)
    133         maxIdx = max(self.entries) if self.entries else 0
    134         for eachInfo in entryInfo:
    135             entryClass = eachInfo['entryClass']
    136             entry = entryClass(**eachInfo)
    137             c = self.AddCell(cellObject=entry)
    138             maxIdx += 1
    139             self.entries[maxIdx] = entry
    140             self.cells[maxIdx] = c
    141             if len(self.entries) >= self.numAllEntries:
    142                 break
    143 
    144 
    145 class DayGrid(RewardItemsGrid):
    146     default_name = 'dayGrid'
    147 
    148     def LoadEntries(self, entryInfo):
    149         self.entries.clear()
    150         self.cells.clear()
    151         self._LoadEntries(entryInfo)
    152 
    153     def _LoadEntries(self, entryInfo):
    154         for i, info in enumerate(entryInfo):
    155             entryClass = info['entryClass']
    156             entry = entryClass(**info)
    157             c = self.AddCell(cellObject=entry)
    158             self.entries[i] = entry
    159             self.cells[i] = c
    160 
    161     def SetDayEntryAsSelected(self, entryNum, withTransition = False):
    162         animateTime = 0.75 if withTransition else 0
    163         for eIdx, entry in self.entries.iteritems():
    164             entry.SetDaySelectedState(eIdx == entryNum, animateTime)
    165 
    166     def UpdateEntryState(self, selectedIdx, updateKeyVal):
    167         for eIdx, entry in self.entries.iteritems():
    168             entry.UpdateEntryState(eIdx, selectedIdx, updateKeyVal)