| 12 | import time |
| 13 | |
| 14 | class NodesListView: |
| 15 | def __init__(self,fw,display): |
| 16 | self.fw = fw # Reference to the application object. |
| 17 | self.display = display |
| 18 | self.page = 0 # At each refresh, a different page is shown. |
| 19 | self.page_change_time = None # Set at first refresh & page change. |
| 20 | self.items_per_page = None # Will be set after the first refresh. |
| 21 | |
| 22 | def refresh(self): |
| 23 | if not self.display: return |
| 24 | if self.page_change_time == None: |
| 25 | self.page_change_time = time.ticks_ms() |
| 26 | |
| 27 | self.display.fill(0) |
| 28 | self.display.text("Nodes seen",0,0,1) |
| 29 | self.display.line(0,10,self.display.width-1,10,1) |
| 30 | neigh = self.fw.neighbors |
| 31 | |
| 32 | # Select next page at each refresh. Wrap around when |
| 33 | # we already displayed them all. |
| 34 | if self.items_per_page != None and \ |
| 35 | time.ticks_diff(time.ticks_ms(),self.page_change_time) > 8000: |
| 36 | self.page += 1 |
| 37 | if self.page * self.items_per_page >= len(neigh): |
| 38 | self.page = 0 |
| 39 | self.page_change_time = time.ticks_ms() |
| 40 | print("page",self.page) |
| 41 | |
| 42 | # Render the list of nodes for this page. |
| 43 | y = 12 |
| 44 | item_id = 0 |
| 45 | for node_id, m in neigh.items(): |
| 46 | # Only show items belonging to this page. |
| 47 | if self.items_per_page == None or \ |
| 48 | item_id >= self.page*self.items_per_page: |
| 49 | self.display.text(f"{item_id+1} {m.nick}({m.seen})",0,y,1) |
| 50 | y += 8 |
| 51 | if y+7 >= self.display.height: break |
| 52 | item_id += 1 |
| 53 | self.display.contrast(255) |
| 54 | self.display.show() |
| 55 | |
| 56 | # Set the items_per_page if this is the first refresh. |
| 57 | if self.items_per_page == None: |
| 58 | while y+7 < self.display.height: # Virtually reach end of screen. |
| 59 | y += 8 |
| 60 | item_id += 1 |
| 61 | self.items_per_page = item_id + 1 |
| 62 | |
| 63 | def min_refresh_time(self): |
| 64 | return 5 |