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

paginationController.py (2650B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\ships\skins\live_data\paginationController.py
      2 import math
      3 from signals import Signal
      4 
      5 class BasePaginationController(object):
      6     num_per_page = None
      7     _page_num = 0
      8 
      9     def __init__(self):
     10         self.on_page_num_changed = Signal('on_page_num_changed')
     11 
     12     @property
     13     def page_num(self):
     14         return self._page_num
     15 
     16     @page_num.setter
     17     def page_num(self, value):
     18         self._page_num = value
     19         self.on_page_num_changed(value)
     20 
     21     @property
     22     def initialized(self):
     23         raise NotImplementedError
     24 
     25     def get_page(self, page_num):
     26         raise NotImplementedError
     27 
     28     def has_next_page(self):
     29         raise NotImplementedError
     30 
     31     def has_prev_page(self):
     32         raise NotImplementedError
     33 
     34     def is_num_pages_known(self):
     35         raise NotImplementedError
     36 
     37     def has_more_than_one_page(self):
     38         raise NotImplementedError
     39 
     40     def reset(self, *args, **kwargs):
     41         raise NotImplementedError
     42 
     43     def clear(self, *args, **kwargs):
     44         raise NotImplementedError
     45 
     46 
     47 class PaginationController(BasePaginationController):
     48     num_pages = 0
     49 
     50     def clear(self, entries, num_per_page = None):
     51         self.reset(entries, num_per_page)
     52         self.page_num = 0
     53 
     54     def reset(self, entries, num_per_page = None):
     55         self.entries = entries
     56         self.num_per_page = num_per_page
     57         if num_per_page is None:
     58             self.num_pages = 1
     59             self.num_per_page = len(self.entries)
     60         else:
     61             self.num_pages = int(math.ceil(len(entries) / float(num_per_page)))
     62 
     63     def get_page(self, page_num):
     64         if not self.entries:
     65             return []
     66         self._validate_page_exists(page_num)
     67         self.page_num = page_num
     68         return self._get_page_entries(page_num)
     69 
     70     def _get_page_entries(self, page_num):
     71         idx_first = page_num * self.num_per_page
     72         idx_last = (page_num + 1) * self.num_per_page
     73         return self.entries[idx_first:idx_last]
     74 
     75     def _validate_page_exists(self, page_num):
     76         max_page_num = max(0, self.num_pages - 1)
     77         if page_num > max_page_num:
     78             raise ValueError('Trying to get page number {} when there are only {}'.format(page_num, max_page_num))
     79 
     80     def is_num_pages_known(self):
     81         return True
     82 
     83     def has_more_than_one_page(self):
     84         return self.num_pages > 1
     85 
     86     def has_next_page(self):
     87         return self.page_num < self.num_pages - 1
     88 
     89     def has_prev_page(self):
     90         return self.page_num > 0
     91 
     92     @property
     93     def initialized(self):
     94         return self.page_num is not None