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