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

baseTransactionsPanel.py (7431B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\wallet\panels\baseTransactionsPanel.py
      2 import math
      3 import utillib
      4 from carbonui import uiconst
      5 from carbonui.primitives.container import Container
      6 from carbonui.control.button import Button
      7 from eve.client.script.ui.control.eveLabel import Label
      8 from eve.client.script.ui.control.eveScroll import Scroll
      9 from eve.client.script.ui.shared.neocom.wallet.walletConst import NUM_TRANSACTIONS_PER_PAGE
     10 from eve.common.lib import appConst
     11 from localization import GetByLabel
     12 from signals import signal
     13 
     14 def GetTransactionKeyVal(transaction):
     15     keyVal = utillib.KeyVal(transaction)
     16     keyVal.currency = appConst.creditsISK
     17     keyVal.sortValue = transaction.transactionID
     18     return keyVal
     19 
     20 
     21 class BaseTransaction(object):
     22 
     23     def __init__(self, transactionData):
     24         self.data = transactionData
     25 
     26 
     27 class BaseTransactionsList(object):
     28 
     29     def __init__(self, scrollHeaders):
     30         self._allTransactions = []
     31         self._sortedAndFiltered = []
     32         self._filterMethod = None
     33         self._sorting = None
     34         self._reverse = False
     35         self._scrollHeaders = scrollHeaders
     36 
     37     def LoadTransactions(self, transactions):
     38         self._allTransactions = transactions
     39         self._UpdateSortedAndFiltered()
     40 
     41     def Sort(self, sorting, reverse):
     42         self._sorting = sorting
     43         self._reverse = reverse
     44         self._UpdateSortedAndFiltered()
     45 
     46     def SetFilter(self, filterMethod):
     47         self._filterMethod = filterMethod
     48         self._UpdateSortedAndFiltered()
     49 
     50     def GetTransactionsRange(self, fromIdx, count, applySortingAndFiltering = True):
     51         transactions = self._sortedAndFiltered if applySortingAndFiltering else self._allTransactions
     52         if fromIdx > len(transactions):
     53             return []
     54         toIdx = min(fromIdx + count, len(transactions) + count)
     55         return transactions[fromIdx:toIdx]
     56 
     57     def GetTotalCount(self, applySortingAndFiltering = True):
     58         transactions = self._sortedAndFiltered if applySortingAndFiltering else self._allTransactions
     59         return len(transactions)
     60 
     61     def _UpdateSortedAndFiltered(self):
     62         if self._filterMethod:
     63             self._sortedAndFiltered = filter(self._filterMethod, self._allTransactions)
     64         else:
     65             self._sortedAndFiltered = [ t for t in self._allTransactions ]
     66         if self._sorting:
     67             self._sortedAndFiltered.sort(cmp=self._Cmp, reverse=self._reverse)
     68 
     69     def _Cmp(self, a, b):
     70         for header, attr in self._scrollHeaders:
     71             if header == self._sorting and hasattr(a, attr) and hasattr(b, attr):
     72                 return cmp(getattr(a, attr), getattr(b, attr))
     73 
     74         return 0
     75 
     76 
     77 class TransactionsScroll(Scroll):
     78 
     79     def ApplyAttributes(self, attributes):
     80         super(TransactionsScroll, self).ApplyAttributes(attributes)
     81         self.onSort = signal.Signal(signalName='onSort')
     82 
     83     def _Sort(self, by = None, reversesort = 0):
     84         self.onSort(by, reversesort)
     85 
     86 
     87 class BaseTransactionsPanel(Container):
     88 
     89     def ApplyAttributes(self, attributes):
     90         Container.ApplyAttributes(self, attributes)
     91         self.isInitialized = False
     92         self._transactionsList = self._BuildTransactionsList(self.GetScrollHeaders())
     93         self._transactionsList.SetFilter(self.IsTransactionVisible)
     94         self.currPage = 0
     95         self.pageCount = 1
     96         self.transactionsOptionsCont = self._BuildOptionsCont()
     97         self.scroll = self._BuildScroll()
     98 
     99     def _BuildOptionsCont(self):
    100         raise NotImplementedError
    101 
    102     def _BuildScroll(self):
    103         raise NotImplementedError
    104 
    105     def _BuildTransactionsList(self, scrollHeaders):
    106         raise NotImplementedError
    107 
    108     def IsTransactionVisible(self, transaction):
    109         raise NotImplementedError
    110 
    111     def GetScrollHeaders(self):
    112         raise NotImplementedError
    113 
    114     def UpdateTransactionsAndPopulateScroll(self, *args):
    115         self.UpdateTransactions()
    116         self.PopulateScroll()
    117 
    118     def UpdateTransactionsByPage(self):
    119         self.currPage = 0
    120         self.pageCount = int(math.ceil(self._transactionsList.GetTotalCount() / float(NUM_TRANSACTIONS_PER_PAGE)))
    121 
    122     def _GetTransactions(self, fromDate):
    123         raise NotImplementedError
    124 
    125     def UpdateTransactions(self):
    126         raise NotImplementedError
    127 
    128     def PopulateScroll(self, reverse = 1, scrollToTop = 1, ignoreSort = False):
    129         scrolllist = []
    130         startIndex = self.currPage * NUM_TRANSACTIONS_PER_PAGE
    131         transactionsOnCurrentPage = self._transactionsList.GetTransactionsRange(startIndex, NUM_TRANSACTIONS_PER_PAGE)
    132         for transaction in transactionsOnCurrentPage:
    133             entry = self.GetScrollEntry(transaction)
    134             if entry:
    135                 scrolllist.append(entry)
    136 
    137         self.scroll.Load(contentList=scrolllist, reversesort=reverse, headers=[ x[0] for x in self.GetScrollHeaders() ], noContentHint=GetByLabel('UI/Wallet/WalletWindow/HintNoTransactionsFound'), scrolltotop=scrollToTop, ignoreSort=ignoreSort)
    138         self.UpdateBrowseButtonState()
    139 
    140     def GetScrollEntry(self, transaction):
    141         raise NotImplementedError
    142 
    143     def _OnSort(self, by, reverse):
    144         self._transactionsList.Sort(by, reverse)
    145         self.PopulateScroll(reverse=reverse, scrollToTop=0, ignoreSort=True)
    146 
    147     def UpdateBrowseButtonState(self):
    148         if self.pageCount <= 1:
    149             self.browseCont.Hide()
    150             return
    151         self.browseCont.Show()
    152         if self.pageCount > 1 and self.currPage < self.pageCount - 1:
    153             self.fwdBtn.Enable()
    154         else:
    155             self.fwdBtn.Disable()
    156         if self.currPage > 0:
    157             self.backBtn.Enable()
    158         else:
    159             self.backBtn.Disable()
    160         self.UpdateNumEntriesLabel()
    161 
    162     def UpdateNumEntriesLabel(self):
    163         numTotal = self._transactionsList.GetTotalCount()
    164         numFirst = self.currPage * NUM_TRANSACTIONS_PER_PAGE + 1
    165         numLast = min(numTotal, (self.currPage + 1) * NUM_TRANSACTIONS_PER_PAGE)
    166         text = GetByLabel('UI/Wallet/WalletWindow/ShowingTransactions', numFirst=numFirst, numLast=numLast, numTotal=numTotal)
    167         self.numEntriesLabel.SetText(text)
    168 
    169     def OnTabSelect(self):
    170         if not self.isInitialized:
    171             self.ConstructLayout()
    172             self.isInitialized = True
    173         self.UpdateTransactionsAndPopulateScroll()
    174 
    175     def ConstructLayout(self):
    176         self.ConstructBrowseButtons()
    177 
    178     def ConstructBrowseButtons(self):
    179         self.browseCont = Container(name='sidepar', parent=self, align=uiconst.TOBOTTOM, height=20, idx=0, padding=(0, 6, 0, 2))
    180         self.backBtn = Button(parent=self.browseCont, align=uiconst.TOLEFT, texturePath='res:/UI/Texture/Icons/23_64_1.png', iconSize=24, width=18, hint=GetByLabel('UI/Common/Previous'), func=self.BrowseBack)
    181         self.fwdBtn = Button(parent=self.browseCont, align=uiconst.TOLEFT, texturePath='res:/UI/Texture/Icons/23_64_2.png', iconSize=24, width=18, hint=GetByLabel('UI/Common/ViewMore'), func=self.BrowseForward)
    182         cont = Container(parent=self.browseCont)
    183         self.numEntriesLabel = Label(parent=cont, align=uiconst.CENTERLEFT, left=4)
    184 
    185     def BrowseBack(self, *args):
    186         self.currPage = max(0, self.currPage - 1)
    187         return self.PopulateScroll()
    188 
    189     def BrowseForward(self, *args):
    190         self.currPage = min(self.pageCount - 1, self.currPage + 1)
    191         return self.PopulateScroll()