windows.list: Type everything in this module.

This commit is contained in:
Emmanuel Gil Peyrot 2018-08-17 18:45:53 +01:00
parent a208f895b4
commit 176b4ee9d3

View file

@ -3,13 +3,15 @@ Windows relevant for the listing tabs, not much else
"""
import logging
log = logging.getLogger(__name__)
import curses
from typing import Dict, List, Optional
from poezio.windows.base_wins import Win
from poezio.theming import to_curses_attr, get_theme
log = logging.getLogger(__name__)
class ListWin(Win):
"""
@ -17,23 +19,23 @@ class ListWin(Win):
scrolled up and down, with one selected line at a time
"""
def __init__(self, columns, with_headers=True):
def __init__(self, columns: Dict[str, int], with_headers: bool = True) -> None:
Win.__init__(self)
self._columns = columns # a dict {'column_name': tuple_index}
self._columns_sizes = {} # a dict {'column_name': size}
self._columns = columns # type: Dict[str, int]
self._columns_sizes = {} # type: Dict[str, int]
self.sorted_by = (None, None) # for example: ('name', '↑')
self.lines = [] # a list of dicts
self.lines = [] # type: List[str]
self._selected_row = 0
self._starting_pos = 0 # The column number from which we start the refresh
@property
def pos(self):
def pos(self) -> int:
if len(self.lines) > self.height:
return len(self.lines)
else:
return 0
def empty(self):
def empty(self) -> None:
"""
emtpy the list and reset some important values as well
"""
@ -41,13 +43,13 @@ class ListWin(Win):
self._selected_row = 0
self._starting_pos = 0
def resize_columns(self, dic):
def resize_columns(self, dic: Dict[str, int]) -> None:
"""
Resize the width of the columns
"""
self._columns_sizes = dic
def sort_by_column(self, col_name, asc=True):
def sort_by_column(self, col_name: str, asc: bool = True) -> None:
"""
Sort the list by the given column, ascendant or descendant
"""
@ -61,7 +63,7 @@ class ListWin(Win):
self.refresh()
curses.doupdate()
def add_lines(self, lines):
def add_lines(self, lines: List[str]) -> None:
"""
Append some lines at the end of the list
"""
@ -69,7 +71,7 @@ class ListWin(Win):
return
self.lines.extend(lines)
def set_lines(self, lines):
def set_lines(self, lines: List[str]) -> None:
"""
Set the lines to another list
"""
@ -77,7 +79,7 @@ class ListWin(Win):
return
self.lines = lines
def get_selected_row(self):
def get_selected_row(self) -> Optional[str]:
"""
Return the tuple representing the selected row
"""
@ -85,7 +87,7 @@ class ListWin(Win):
return self.lines[self._selected_row]
return None
def refresh(self):
def refresh(self) -> None:
log.debug('Refresh: %s', self.__class__.__name__)
self._win.erase()
lines = self.lines[self._starting_pos:self._starting_pos + self.height]
@ -109,12 +111,12 @@ class ListWin(Win):
x += size
self._refresh()
def move_cursor_down(self):
def move_cursor_down(self) -> bool:
"""
Move the cursor Down
"""
if not self.lines:
return
return False
if self._selected_row < len(self.lines) - 1:
self._selected_row += 1
while self._selected_row >= self._starting_pos + self.height:
@ -123,21 +125,21 @@ class ListWin(Win):
self._starting_pos = 0
return True
def move_cursor_up(self):
def move_cursor_up(self) -> bool:
"""
Move the cursor Up
"""
if not self.lines:
return
return False
if self._selected_row > 0:
self._selected_row -= 1
while self._selected_row < self._starting_pos:
self._starting_pos -= self.height // 2
return True
def scroll_down(self):
def scroll_down(self) -> bool:
if not self.lines:
return
return False
self._selected_row += self.height
if self._selected_row > len(self.lines) - 1:
self._selected_row = len(self.lines) - 1
@ -147,9 +149,9 @@ class ListWin(Win):
self._starting_pos = 0
return True
def scroll_up(self):
def scroll_up(self) -> bool:
if not self.lines:
return
return False
self._selected_row -= self.height + 1
if self._selected_row < 0:
self._selected_row = 0
@ -163,21 +165,21 @@ class ColumnHeaderWin(Win):
A class displaying the column's names
"""
def __init__(self, columns):
def __init__(self, columns: List[str]) -> None:
Win.__init__(self)
self._columns = columns
self._columns_sizes = {}
self._columns_sizes = {} # type: Dict[str, int]
self._column_sel = ''
self._column_order = ''
self._column_order_asc = False
def resize_columns(self, dic):
def resize_columns(self, dic) -> None:
self._columns_sizes = dic
def get_columns(self):
def get_columns(self) -> List[str]:
return self._columns
def refresh(self):
def refresh(self) -> None:
log.debug('Refresh: %s', self.__class__.__name__)
self._win.erase()
x = 0
@ -201,23 +203,23 @@ class ColumnHeaderWin(Win):
x += size
self._refresh()
def sel_column(self, dic):
def sel_column(self, dic) -> None:
self._column_sel = dic
def get_sel_column(self):
return self._column_sel
def set_order(self, order):
def set_order(self, order) -> None:
self._column_order = self._column_sel
self._column_order_asc = order
def get_order(self):
def get_order(self) -> bool:
if self._column_sel == self._column_order:
return self._column_order_asc
else:
return False
def sel_column_left(self):
def sel_column_left(self) -> None:
if self._column_sel in self._columns:
index = self._columns.index(self._column_sel)
if index > 1:
@ -229,7 +231,7 @@ class ColumnHeaderWin(Win):
self._column_sel = self._columns[index]
self.refresh()
def sel_column_right(self):
def sel_column_right(self) -> None:
if self._column_sel in self._columns:
index = self._columns.index(self._column_sel)
if index < len(self._columns) - 2: